diff --git a/AscanValuesL.txt b/AscanValuesL.txt new file mode 100644 index 0000000..d6a8b8a --- /dev/null +++ b/AscanValuesL.txt @@ -0,0 +1,1250 @@ +-2032 -2032 -2016 -2032 -2032 -2016 -2016 -1984 -2016 -2032 -2032 -2032 -2032 -2016 -2032 -2016 -2000 -2032 -2032 -2000 -2016 -2032 -2016 -2032 -2000 -2016 -2032 -2000 -2016 -2032 -2016 +-1952 -1920 -2000 -1952 -1968 -1984 -1872 -1984 -1888 -1904 -1888 -1904 -1936 -1984 -1936 -1984 -1968 -1904 -1936 -1840 -1984 -1904 -1904 -1968 -1824 -1984 -1856 -1840 -1840 -1952 -1968 +-1744 -1696 -1824 -1744 -1760 -1808 -1632 -1808 -1680 -1696 -1664 -1680 -1744 -1792 -1712 -1792 -1792 -1664 -1744 -1616 -1792 -1680 -1664 -1760 -1584 -1824 -1632 -1600 -1600 -1728 -1760 +-1488 -1440 -1568 -1488 -1504 -1552 -1328 -1568 -1424 -1408 -1376 -1408 -1472 -1552 -1456 -1552 -1552 -1376 -1488 -1296 -1520 -1408 -1376 -1504 -1264 -1568 -1312 -1264 -1280 -1456 -1520 +-960 -768 -1200 -960 -1008 -1152 -400 -1216 -672 -688 -592 -656 -864 -1168 -880 -1168 -1168 -592 -944 -320 -1104 -672 -592 -1008 -192 -1200 -352 -208 -272 -848 -1040 +416 656 -16 400 320 112 1040 -48 800 768 864 816 544 64 528 48 48 864 432 1104 176 784 832 336 1216 -16 1088 1216 1152 544 272 +1568 1696 1328 1584 1536 1408 1824 1296 1744 1728 1760 1744 1632 1376 1632 1376 1376 1760 1600 1824 1456 1744 1744 1552 1856 1344 1824 1856 1856 1648 1504 +1904 1888 1872 1888 1872 1888 1840 1856 1872 1888 1872 1888 1904 1872 1888 1888 1888 1888 1888 1856 1888 1888 1872 1888 1840 1872 1872 1840 1840 1888 1888 +1744 1680 1808 1744 1760 1792 1520 1824 1616 1648 1616 1632 1712 1808 1712 1808 1808 1600 1744 1488 1792 1648 1600 1760 1408 1808 1488 1408 1440 1712 1776 +1008 752 1296 960 1024 1216 304 1312 592 624 512 592 864 1232 864 1264 1264 528 976 224 1168 608 544 1024 96 1296 272 112 176 848 1088 +-384 -592 -48 -432 -384 -160 -848 -16 -704 -704 -768 -720 -528 -144 -528 -96 -112 -752 -448 -864 -240 -720 -736 -384 -896 -48 -848 -880 -880 -528 -304 +-784 -688 -912 -832 -848 -912 -464 -912 -640 -672 -592 -640 -784 -896 -784 -912 -912 -592 -816 -400 -896 -656 -608 -864 -288 -912 -416 -304 -352 -768 -880 +176 352 -160 160 96 -80 624 -208 448 416 480 448 256 -112 240 -128 -112 496 160 672 -16 432 480 112 752 -176 656 752 720 256 48 +1008 1088 832 1008 992 896 1168 816 1120 1120 1120 1120 1056 880 1056 864 864 1136 1008 1184 928 1120 1136 992 1200 848 1168 1200 1184 1072 976 +1216 1216 1200 1232 1232 1216 1200 1216 1216 1216 1216 1216 1216 1216 1232 1216 1216 1216 1232 1184 1216 1216 1216 1232 1168 1200 1200 1168 1200 1216 1216 +1056 1024 1136 1088 1120 1136 912 1152 992 992 976 992 1056 1152 1072 1152 1136 976 1088 880 1120 992 976 1104 832 1152 896 816 848 1056 1120 +480 336 752 544 592 704 64 800 256 288 224 256 448 720 464 736 704 208 528 -16 672 272 224 576 -160 768 -16 -160 -96 416 608 +-672 -864 -288 -608 -544 -368 -1136 -224 -944 -912 -992 -960 -736 -352 -736 -320 -352 -1008 -672 -1200 -448 -960 -1008 -592 -1312 -288 -1200 -1296 -1248 -768 -544 +-1616 -1696 -1392 -1584 -1552 -1440 -1792 -1344 -1712 -1728 -1744 -1728 -1648 -1424 -1648 -1424 -1408 -1760 -1600 -1808 -1488 -1728 -1744 -1568 -1824 -1392 -1792 -1840 -1808 -1664 -1536 +-1872 -1856 -1856 -1856 -1856 -1872 -1840 -1840 -1856 -1856 -1840 -1840 -1872 -1840 -1872 -1840 -1840 -1840 -1872 -1824 -1856 -1856 -1856 -1856 -1824 -1856 -1840 -1840 -1824 -1856 -1856 +-1776 -1744 -1824 -1792 -1792 -1808 -1712 -1824 -1744 -1728 -1728 -1744 -1760 -1808 -1776 -1808 -1824 -1728 -1776 -1696 -1808 -1728 -1728 -1776 -1680 -1824 -1696 -1664 -1680 -1760 -1792 +-1568 -1552 -1648 -1600 -1584 -1632 -1488 -1648 -1536 -1536 -1504 -1520 -1552 -1632 -1568 -1632 -1648 -1520 -1584 -1472 -1616 -1520 -1504 -1584 -1440 -1648 -1472 -1456 -1456 -1568 -1600 +-1360 -1312 -1424 -1376 -1392 -1408 -1280 -1440 -1328 -1328 -1312 -1312 -1328 -1408 -1344 -1424 -1408 -1312 -1376 -1264 -1408 -1312 -1296 -1376 -1232 -1424 -1280 -1248 -1248 -1344 -1392 +-1168 -1120 -1216 -1184 -1168 -1200 -1072 -1232 -1104 -1104 -1104 -1104 -1136 -1200 -1152 -1232 -1216 -1088 -1152 -1056 -1184 -1104 -1104 -1168 -1040 -1216 -1056 -1040 -1040 -1136 -1184 +-960 -928 -1024 -960 -976 -1008 -896 -1024 -912 -912 -912 -912 -944 -992 -944 -1024 -1008 -896 -944 -864 -992 -896 -896 -976 -848 -1008 -880 -832 -848 -944 -976 +-784 -768 -832 -784 -800 -816 -704 -832 -736 -768 -720 -736 -768 -800 -768 -832 -832 -720 -784 -704 -800 -736 -736 -800 -688 -832 -688 -672 -688 -768 -800 +-624 -608 -672 -624 -640 -656 -560 -688 -592 -592 -576 -576 -608 -656 -608 -656 -656 -576 -624 -560 -656 -592 -592 -640 -544 -672 -560 -544 -528 -624 -640 +-496 -480 -544 -512 -512 -528 -464 -544 -480 -480 -464 -464 -480 -512 -496 -528 -512 -464 -496 -464 -512 -480 -464 -512 -432 -528 -448 -448 -448 -480 -512 +-400 -384 -432 -416 -400 -416 -368 -432 -384 -384 -384 -384 -400 -416 -400 -432 -432 -368 -400 -352 -432 -384 -384 -416 -336 -432 -368 -352 -352 -384 -400 +-336 -320 -368 -320 -336 -352 -304 -352 -304 -304 -304 -304 -336 -336 -320 -336 -352 -304 -320 -288 -336 -304 -320 -320 -288 -352 -304 -288 -288 -320 -336 +-256 -240 -272 -256 -272 -272 -240 -272 -240 -240 -224 -256 -272 -272 -272 -272 -288 -240 -256 -240 -272 -256 -240 -272 -224 -272 -240 -224 -224 -256 -272 +-208 -192 -224 -176 -208 -224 -176 -224 -192 -192 -192 -176 -176 -224 -192 -208 -224 -176 -208 -176 -208 -176 -176 -192 -176 -224 -176 -160 -176 -192 -208 +-144 -128 -144 -144 -144 -176 -112 -176 -112 -112 -112 -128 -128 -160 -144 -160 -160 -112 -144 -112 -160 -112 -128 -144 -112 -160 -112 -96 -112 -128 -144 +-80 -80 -96 -80 -80 -112 -48 -96 -48 -48 -64 -64 -64 -96 -64 -96 -96 -64 -80 -48 -96 -48 -48 -80 -32 -112 -48 -32 -32 -64 -80 +-16 0 -32 -16 -16 -32 16 -16 16 0 0 16 0 -32 0 -16 -32 16 -32 16 -16 0 16 0 32 -16 32 16 32 -16 -16 +64 64 32 48 64 32 80 32 64 64 64 64 48 32 64 32 48 64 48 80 48 48 64 64 64 32 64 80 80 32 48 +96 112 80 96 96 96 112 96 112 128 112 128 112 96 96 96 96 112 96 112 96 112 112 96 112 80 112 112 112 112 80 +144 144 128 128 144 128 144 128 144 144 160 128 128 112 144 128 128 160 128 144 128 128 144 144 144 128 144 144 144 144 128 +160 160 160 160 160 160 160 144 160 160 176 160 160 160 160 144 160 160 160 176 160 160 160 144 160 160 160 160 176 160 160 +160 176 160 160 160 160 160 160 176 176 160 160 160 160 160 160 176 160 160 176 176 160 160 160 160 160 160 160 160 176 176 +176 160 176 160 160 160 160 160 160 160 160 160 160 176 176 176 176 160 160 160 176 176 160 176 160 160 176 160 160 176 176 +160 144 176 160 160 160 160 160 160 160 160 160 160 160 160 176 160 160 160 160 160 160 176 160 160 160 176 144 144 176 160 +144 144 160 144 160 160 176 144 144 144 160 160 160 176 176 160 160 144 160 160 160 144 144 160 160 160 176 144 160 160 160 +160 144 160 144 160 160 160 176 144 144 144 160 144 144 144 144 144 144 160 144 160 144 128 144 144 160 144 144 128 144 160 +144 144 144 144 144 144 144 144 144 160 128 144 144 144 144 144 160 144 160 128 144 144 144 144 128 160 144 128 144 144 160 +144 128 144 128 128 144 144 144 128 144 144 144 128 144 144 144 144 144 144 128 128 128 128 128 128 144 144 144 144 128 128 +128 144 144 144 128 128 128 128 128 128 128 128 128 144 128 144 128 128 144 128 128 128 128 112 112 128 128 128 112 144 128 +112 128 128 112 128 128 128 128 112 112 112 112 128 112 128 112 112 112 112 112 128 112 112 128 112 128 128 96 112 112 128 +128 96 128 112 96 112 112 112 112 112 112 112 112 112 112 96 112 112 112 112 96 112 112 112 112 144 96 96 96 112 112 +96 96 112 96 112 112 96 112 96 96 80 80 112 96 96 112 96 96 112 96 96 96 96 96 96 112 80 96 96 96 96 +80 80 112 96 80 96 80 96 96 96 96 80 96 80 80 96 96 80 96 96 96 80 80 80 96 80 96 80 96 80 96 +80 80 80 80 80 80 80 80 80 80 80 64 80 64 80 80 80 80 80 64 80 80 80 80 80 80 96 64 80 80 80 +80 64 64 80 80 80 64 80 80 64 64 80 80 80 64 96 80 64 80 80 80 48 80 64 80 64 64 64 64 64 80 +80 64 64 80 80 64 64 64 80 64 64 64 80 80 80 80 80 64 80 80 80 64 80 64 80 64 80 80 80 64 64 +64 80 64 64 64 64 64 80 64 64 64 80 64 80 64 64 64 64 64 64 64 64 80 64 80 64 80 48 64 64 64 +64 64 64 64 80 64 80 80 64 64 64 64 48 64 64 64 64 64 48 64 64 64 64 64 64 64 64 64 64 64 64 +64 64 64 64 64 64 64 64 80 64 48 64 48 48 64 64 48 64 48 64 64 64 64 64 64 64 48 64 64 64 48 +48 64 48 48 64 48 48 64 64 48 48 64 48 48 64 48 48 64 48 48 64 64 48 48 64 48 48 64 48 48 64 +48 64 48 48 48 48 48 48 32 32 64 64 48 48 64 48 48 48 48 48 64 48 48 64 48 48 32 48 48 48 64 +48 48 32 48 48 48 16 48 32 32 64 48 48 32 48 32 32 48 48 32 64 48 48 48 32 32 48 48 48 48 48 +48 48 48 48 32 48 32 32 32 48 48 32 32 32 48 32 48 32 48 48 32 64 48 32 32 32 48 48 48 48 48 +32 48 32 32 32 48 48 32 48 32 48 32 48 32 48 48 32 48 32 32 32 48 48 48 32 32 32 48 32 32 48 +32 32 32 16 32 48 32 48 32 16 64 32 16 32 48 32 48 48 48 32 32 32 32 48 48 32 32 48 48 48 48 +32 32 48 32 48 48 48 32 32 64 32 48 48 32 48 48 48 48 32 32 32 48 48 48 48 32 48 32 32 32 48 +32 48 48 32 32 32 32 48 32 48 48 32 32 32 48 48 32 32 32 32 32 32 32 32 48 32 32 48 48 48 48 +32 32 48 48 32 32 32 32 32 32 48 32 32 32 16 32 48 32 48 32 32 16 32 32 32 32 48 32 32 32 48 +48 32 32 32 32 32 32 32 32 32 16 16 32 32 32 32 32 48 32 32 32 32 48 48 16 32 32 48 32 32 48 +32 16 32 48 32 32 32 32 32 16 32 32 32 32 32 32 32 32 32 32 32 32 48 48 32 48 48 32 16 32 32 +32 48 32 16 32 32 16 32 32 32 48 32 32 32 32 32 48 64 48 80 48 32 32 32 32 32 16 16 48 32 32 +112 224 16 32 32 48 48 48 64 96 112 112 96 64 96 64 48 176 144 192 80 32 48 64 96 48 64 48 112 48 32 +304 560 48 16 96 128 96 112 128 192 176 240 224 224 256 192 112 288 240 240 128 64 48 224 288 128 160 64 128 32 32 +560 784 112 32 160 256 144 144 144 208 160 288 352 400 384 336 144 240 256 144 128 96 64 448 464 320 240 80 80 32 32 +736 704 192 96 240 320 192 96 112 112 80 224 304 448 320 336 112 64 144 0 80 64 32 560 528 464 272 32 0 32 32 +784 352 304 320 384 368 400 80 208 80 80 176 192 256 144 192 128 -16 48 64 32 80 64 464 528 496 320 80 64 96 128 +800 0 448 640 624 528 720 288 496 320 368 336 192 64 96 128 304 224 256 432 256 336 320 400 544 432 496 368 384 416 464 +816 -80 608 912 880 784 976 672 816 704 736 640 416 112 352 288 672 656 656 832 656 736 704 480 656 448 704 752 800 816 848 +800 80 720 960 1024 992 1104 976 1024 976 992 896 720 400 720 640 928 960 944 1072 992 992 976 688 784 592 864 976 1056 1040 1056 +720 432 768 960 1040 1088 1088 1104 1072 1104 1088 992 928 768 976 912 1024 1088 1040 1120 1120 1104 1072 832 832 784 944 1072 1104 1104 1104 +528 688 816 848 928 1008 928 1104 976 1040 1008 944 944 960 1056 1008 1024 1008 976 992 1120 1072 1072 848 800 864 944 1024 1040 1024 1008 +176 784 768 608 576 720 416 928 640 784 720 688 848 992 960 944 864 688 640 544 912 864 928 816 672 832 768 816 752 688 592 +-288 736 640 144 -128 64 -432 432 -80 144 64 112 528 832 672 688 400 -80 -112 -320 336 336 640 624 400 704 400 352 48 -64 -240 +-592 528 512 -288 -864 -800 -1088 -448 -816 -688 -656 -544 32 480 0 96 -384 -944 -944 -1104 -624 -448 80 224 -64 432 -192 -336 -752 -864 -1056 +-624 128 352 -336 -1072 -1264 -1072 -1104 -976 -1072 -864 -784 -384 -112 -768 -624 -976 -1264 -1232 -1184 -1248 -896 -448 -400 -480 -32 -672 -736 -992 -1072 -1184 +-384 -256 224 32 -656 -1056 -480 -1008 -480 -752 -432 -400 -368 -560 -1104 -960 -1008 -848 -784 -544 -1120 -656 -512 -800 -576 -432 -704 -544 -512 -544 -592 +16 -352 192 432 96 -320 288 -352 240 -16 272 240 0 -576 -848 -784 -512 0 64 304 -368 48 -80 -704 -304 -496 -304 32 256 288 288 +432 -64 224 624 656 448 768 416 736 608 736 688 400 -176 -224 -208 160 736 768 848 464 640 400 -256 176 -240 272 576 784 848 864 +672 384 288 656 864 832 864 832 896 880 864 816 608 336 432 448 672 1040 1040 1024 928 880 672 320 576 208 688 848 944 1008 1040 +704 736 320 576 784 864 720 912 832 864 768 768 624 656 816 848 880 1056 1040 928 1008 896 736 720 768 560 832 896 896 960 976 +624 832 352 400 592 688 384 784 592 688 512 560 528 736 912 944 896 896 880 736 896 752 672 864 768 672 816 768 704 736 752 +432 816 368 224 304 336 80 496 208 336 96 224 336 688 848 880 784 624 592 448 688 544 560 864 672 656 656 496 352 368 432 +240 624 336 96 144 80 80 160 -64 0 -240 -80 128 544 656 704 608 304 272 224 432 256 352 720 448 528 336 16 -96 -48 144 +128 288 240 80 224 112 304 16 -80 -96 -208 -96 48 336 448 464 448 144 112 192 240 32 144 496 16 288 -128 -448 -320 -240 128 +96 -288 96 128 400 352 544 128 144 128 112 144 128 112 288 192 384 208 176 304 224 -16 -32 96 -528 -64 -496 -608 -144 -64 320 +128 -832 -64 160 512 544 640 336 384 400 416 368 256 -32 224 -16 384 384 336 416 320 128 -32 -320 -816 -352 -528 -400 192 256 496 +144 -1040 -128 96 512 608 608 480 496 544 576 464 320 -80 272 -80 384 480 416 416 384 256 32 -496 -736 -384 -208 32 464 464 576 +112 -816 -64 -48 416 560 416 496 448 576 576 416 288 -48 304 -16 352 432 368 256 368 256 16 -384 -336 -128 240 384 544 528 512 +0 -288 64 -192 112 368 -16 368 272 464 416 176 112 0 272 48 272 240 80 -208 160 48 -128 -112 160 224 512 528 448 416 304 +-96 272 176 -256 -352 -96 -576 -16 -96 144 16 -256 -176 0 144 64 48 -192 -400 -784 -240 -320 -400 160 496 416 544 448 144 64 -176 +-80 608 272 -160 -672 -640 -880 -528 -496 -320 -432 -640 -400 -16 -80 -48 -272 -704 -832 -1184 -736 -656 -688 272 576 448 400 176 -320 -368 -720 +144 688 256 48 -688 -816 -736 -864 -608 -672 -672 -704 -416 -32 -304 -176 -512 -960 -960 -1152 -1008 -784 -848 144 448 336 96 -144 -576 -624 -960 +368 608 144 288 -352 -576 -208 -784 -384 -672 -512 -400 -224 0 -400 -224 -560 -784 -672 -672 -880 -592 -848 -160 160 80 -256 -288 -480 -480 -704 +544 384 -16 432 128 -48 352 -336 96 -352 -48 128 144 112 -288 -128 -352 -304 -48 96 -400 -144 -576 -448 -224 -256 -432 -144 -80 0 -128 +560 208 -176 448 496 464 672 240 448 112 368 528 416 272 0 96 0 272 528 688 224 336 -80 -544 -416 -464 -336 192 352 448 416 +464 128 -224 368 640 672 720 608 560 416 576 688 544 384 288 352 320 624 800 912 672 608 448 -400 -400 -432 -16 480 576 656 656 +208 176 -144 160 576 672 560 720 496 512 528 592 512 400 432 496 480 704 816 864 784 624 768 -112 -208 -208 304 576 560 608 624 +-256 272 -32 -112 336 448 160 624 224 384 240 320 320 352 384 496 480 624 688 656 720 432 816 240 16 80 464 496 304 352 320 +-688 256 112 -288 -48 -32 -384 336 -224 48 -224 -160 -32 208 224 416 320 400 368 288 448 0 736 464 144 272 448 224 -176 -176 -240 +-912 96 176 -352 -432 -576 -816 -128 -624 -336 -672 -608 -400 -16 -80 224 80 64 -80 -144 16 -448 544 464 160 240 192 -304 -672 -704 -752 +-784 -256 96 -288 -592 -912 -896 -528 -752 -576 -832 -800 -608 -288 -368 -80 -208 -192 -448 -384 -352 -704 224 256 32 32 -208 -800 -896 -944 -912 +-416 -624 -32 -160 -512 -880 -624 -640 -528 -528 -592 -608 -592 -464 -544 -352 -448 -224 -560 -336 -496 -624 -96 -64 -128 -256 -528 -1024 -752 -784 -640 +48 -800 -176 16 -256 -512 -144 -384 -48 -176 -64 -112 -352 -480 -464 -480 -496 -64 -352 -64 -336 -256 -336 -320 -160 -432 -640 -800 -256 -288 -64 +384 -656 -176 160 64 0 320 48 416 288 480 400 16 -336 -192 -400 -320 192 16 256 -16 224 -368 -352 -16 -352 -432 -288 320 288 480 +496 -256 -16 288 336 448 608 448 672 608 736 656 320 -64 192 -112 16 384 336 448 320 624 -240 -112 240 -16 -16 288 672 656 752 +384 240 240 336 432 672 656 640 672 688 768 704 464 176 464 208 352 416 464 432 480 736 -112 256 512 416 368 608 720 752 752 +128 544 384 288 352 672 528 624 496 608 624 544 432 304 544 400 512 240 384 224 416 624 -80 528 624 672 528 624 480 592 576 +-192 608 368 128 112 480 240 384 112 320 256 208 208 288 416 416 512 -96 112 -112 128 256 -176 608 592 704 400 320 -16 144 144 +-432 480 144 -160 -176 128 -96 -48 -400 -160 -304 -272 -64 96 144 240 320 -496 -208 -432 -272 -288 -304 496 368 512 32 -192 -544 -368 -368 +-496 96 -256 -448 -384 -176 -288 -544 -768 -640 -768 -672 -304 -160 -240 -96 -32 -784 -448 -608 -624 -784 -416 176 -32 48 -368 -640 -832 -752 -736 +-384 -304 -704 -704 -496 -336 -272 -816 -800 -912 -928 -800 -432 -384 -528 -448 -432 -816 -496 -560 -784 -976 -416 -288 -480 -512 -656 -768 -768 -832 -784 +-128 -608 -1008 -784 -432 -288 -112 -752 -512 -784 -704 -624 -384 -496 -576 -672 -704 -608 -368 -304 -656 -832 -272 -672 -752 -944 -656 -496 -368 -560 -544 +112 -656 -1040 -720 -240 -144 32 -400 -64 -432 -240 -256 -208 -400 -400 -656 -736 -272 -128 16 -272 -416 48 -784 -768 -1040 -400 16 160 -144 -160 +272 -480 -720 -480 -16 48 144 48 320 0 208 144 32 -144 -112 -416 -512 80 112 336 176 160 416 -624 -512 -784 48 496 576 288 192 +320 -192 -224 -160 160 176 144 432 512 368 496 384 240 160 160 -80 -192 320 256 480 512 592 688 -224 -96 -288 448 736 736 512 368 +224 80 304 176 288 192 48 608 512 512 544 448 304 400 304 192 144 384 272 464 672 752 736 240 288 240 656 720 640 496 352 +96 208 640 432 288 80 -112 592 320 448 384 336 256 496 336 368 336 304 176 304 640 720 656 544 512 608 592 512 384 304 176 +-80 176 736 496 240 -64 -192 368 32 256 96 160 112 448 176 368 352 128 16 64 448 496 432 624 464 672 384 80 32 32 -48 +-208 32 608 432 160 -192 -224 48 -224 -16 -176 -64 -64 256 -48 224 224 -32 -112 -128 160 192 96 512 192 528 64 -352 -256 -144 -208 +-304 -208 288 240 80 -192 -160 -224 -336 -208 -304 -208 -240 -48 -304 0 32 -128 -208 -272 -176 -144 -288 240 -144 208 -176 -576 -384 -192 -224 +-352 -416 -96 0 -48 -112 -64 -368 -288 -240 -288 -240 -352 -320 -464 -192 -160 -144 -240 -304 -400 -368 -560 -112 -448 -96 -288 -544 -368 -112 -80 +-384 -480 -416 -208 -176 -64 -48 -368 -160 -144 -160 -192 -400 -512 -480 -320 -256 -96 -208 -256 -480 -400 -672 -384 -576 -288 -240 -320 -240 16 96 +-384 -384 -576 -320 -304 -112 -96 -304 -48 -16 -16 -160 -336 -592 -400 -320 -272 -16 -192 -224 -416 -304 -592 -512 -528 -336 -80 -64 -128 80 192 +-352 -176 -544 -336 -448 -208 -224 -288 -32 16 0 -176 -288 -544 -272 -272 -224 0 -192 -240 -304 -160 -432 -512 -304 -224 16 96 -160 16 160 +-304 32 -416 -256 -560 -368 -416 -320 -160 -80 -112 -288 -304 -464 -192 -224 -160 -112 -272 -320 -208 -80 -304 -400 -48 -96 -16 32 -288 -192 -16 +-208 160 -304 -224 -656 -576 -608 -400 -352 -320 -368 -416 -320 -400 -176 -224 -208 -304 -400 -464 -224 -144 -240 -304 96 -48 -240 -224 -512 -464 -320 +-128 112 -304 -256 -672 -720 -736 -544 -576 -640 -640 -560 -368 -368 -272 -320 -336 -592 -544 -608 -336 -352 -288 -288 48 -176 -592 -560 -704 -720 -624 +-48 -32 -416 -400 -592 -752 -720 -704 -784 -912 -832 -640 -416 -416 -400 -464 -528 -816 -640 -688 -480 -592 -400 -368 -144 -432 -928 -832 -768 -848 -816 +0 -256 -560 -560 -464 -624 -560 -768 -816 -1008 -864 -608 -416 -496 -496 -576 -688 -928 -672 -672 -592 -736 -496 -480 -384 -704 -1072 -880 -656 -816 -832 +0 -384 -656 -672 -288 -368 -336 -656 -656 -880 -672 -464 -400 -496 -480 -640 -736 -864 -576 -528 -592 -736 -512 -528 -560 -832 -1008 -672 -416 -608 -672 +-16 -416 -608 -656 -128 -80 -64 -384 -368 -512 -320 -224 -272 -400 -352 -528 -608 -576 -384 -256 -416 -528 -368 -432 -544 -768 -688 -320 -80 -304 -384 +-32 -320 -384 -496 16 176 160 0 0 -48 96 48 -64 -160 -80 -256 -272 -160 -112 48 -128 -160 -80 -192 -368 -496 -272 80 208 0 -64 +-32 -96 -80 -224 64 288 272 304 256 352 416 256 128 112 192 64 144 240 160 320 176 256 240 112 -96 -144 160 384 320 240 160 +-48 128 240 48 64 288 288 464 368 544 560 336 240 336 384 304 464 528 384 448 416 544 528 400 160 192 480 448 288 320 256 +-48 272 480 272 16 176 256 448 336 544 464 272 240 464 400 448 608 608 464 432 496 608 640 560 304 368 560 304 112 256 240 +-64 288 528 368 0 48 192 256 192 384 256 144 160 448 288 384 496 544 432 256 416 432 544 480 240 352 480 48 -48 144 160 +-80 176 464 336 32 -48 144 16 16 96 -16 -32 64 304 112 240 256 352 320 48 208 160 288 224 0 176 272 -192 -144 48 96 +-128 0 272 208 96 -64 128 -208 -128 -144 -240 -160 -64 96 -64 32 0 144 144 -128 -32 -112 -80 -176 -272 -64 112 -320 -112 16 96 +-208 -224 48 0 160 -32 80 -288 -192 -256 -336 -256 -176 -128 -208 -144 -224 -64 -32 -256 -240 -368 -432 -544 -496 -272 0 -272 -16 48 160 +-256 -400 -112 -160 192 0 -16 -272 -160 -256 -304 -240 -224 -288 -272 -240 -352 -192 -176 -288 -336 -464 -656 -768 -576 -320 -32 -96 112 96 160 +-304 -448 -192 -240 128 -48 -176 -176 -80 -128 -176 -192 -224 -352 -272 -240 -320 -288 -272 -240 -320 -400 -720 -768 -448 -240 0 80 208 112 112 +-256 -368 -176 -240 16 -112 -336 -80 -48 -16 -32 -112 -192 -336 -192 -176 -192 -304 -304 -160 -224 -272 -592 -576 -192 -64 32 224 208 80 -16 +-128 -192 -144 -112 -128 -224 -416 -32 -48 48 32 -32 -160 -256 -128 -80 -32 -288 -304 -96 -128 -128 -368 -224 128 128 32 256 112 -16 -192 +16 0 -80 64 -224 -272 -416 -32 -80 48 32 16 -160 -144 -48 -32 64 -240 -256 -80 -64 -32 -112 144 400 224 -48 176 -48 -144 -368 +160 144 -96 224 -256 -240 -320 -48 -96 0 -32 48 -112 -32 -16 32 80 -144 -208 -64 -96 -48 96 448 512 256 -160 0 -224 -256 -416 +208 176 -112 304 -208 -112 -128 -32 -96 -112 -112 32 -96 32 -16 0 32 -80 -160 -112 -160 -112 208 528 368 160 -320 -224 -352 -336 -384 +160 112 -192 272 -160 32 48 -32 -112 -224 -192 -16 -80 0 -64 -96 -80 -32 -128 -192 -272 -176 176 400 80 -32 -448 -384 -384 -352 -288 +0 -48 -240 112 -112 112 112 -16 -128 -336 -240 -96 -128 -48 -160 -240 -224 -48 -144 -240 -352 -240 64 96 -256 -224 -528 -448 -384 -336 -160 +-192 -240 -272 -160 -144 64 64 0 -144 -368 -272 -192 -160 -176 -272 -384 -352 -128 -176 -288 -416 -256 -96 -208 -528 -416 -528 -480 -320 -304 -96 +-368 -432 -272 -432 -224 -96 -128 -32 -176 -384 -288 -320 -240 -352 -384 -512 -464 -256 -224 -336 -400 -240 -272 -480 -656 -496 -496 -448 -272 -320 -144 +-496 -512 -288 -640 -336 -352 -352 -144 -288 -368 -304 -464 -336 -496 -480 -560 -512 -400 -272 -352 -352 -176 -416 -640 -624 -496 -448 -400 -256 -352 -240 +-480 -512 -320 -736 -384 -544 -512 -288 -384 -352 -336 -560 -416 -560 -512 -528 -496 -496 -288 -352 -288 -128 -480 -624 -480 -448 -352 -368 -288 -384 -368 +-400 -384 -320 -688 -336 -592 -544 -432 -416 -336 -368 -560 -448 -528 -496 -432 -448 -496 -240 -304 -240 -112 -432 -464 -240 -384 -272 -288 -336 -384 -416 +-224 -192 -336 -528 -176 -464 -400 -480 -384 -240 -304 -448 -368 -432 -384 -256 -368 -400 -192 -208 -192 -160 -352 -272 -32 -288 -144 -224 -352 -304 -352 +-16 16 -272 -272 64 -160 -112 -416 -240 -128 -192 -240 -224 -240 -224 -48 -256 -192 -64 -80 -128 -224 -224 -128 128 -192 16 -112 -256 -144 -176 +192 192 -144 -16 288 208 160 -240 -32 64 -16 32 0 -16 0 112 -144 48 96 80 -48 -240 -64 -32 208 -96 176 64 -64 96 80 +256 320 64 224 448 496 384 -16 176 224 192 304 192 192 176 240 16 272 208 224 48 -192 128 0 192 -16 320 240 176 352 336 +256 368 272 336 448 656 480 192 368 368 368 448 352 336 304 320 144 384 288 336 192 -80 288 32 160 96 416 416 368 512 448 +176 336 432 368 288 576 416 336 416 416 416 480 384 384 320 256 256 384 272 368 288 64 400 64 128 192 416 480 480 528 416 +64 256 432 288 48 320 256 352 320 384 352 368 304 320 272 176 320 240 192 320 320 192 416 112 96 256 304 400 448 384 224 +-48 128 320 192 -208 -16 64 256 160 224 192 160 128 176 176 64 288 64 80 240 304 288 336 160 48 288 144 240 288 160 -16 +-128 48 112 96 -384 -288 -64 128 0 32 -32 -80 -64 32 80 -32 224 -80 -48 128 208 320 208 256 48 256 -32 48 96 -64 -176 +-144 0 -80 48 -368 -368 -48 32 -48 -112 -176 -224 -160 -64 0 -48 144 -112 -112 48 112 288 16 304 16 176 -144 -128 -96 -208 -192 +-96 -64 -224 32 -240 -304 48 16 -32 -128 -208 -240 -160 -112 16 -32 80 -48 -144 0 16 208 -144 336 0 128 -144 -240 -192 -224 -80 +-64 -128 -240 64 -32 -80 160 96 64 -80 -144 -128 -64 -48 96 48 16 96 -80 -16 -16 128 -272 256 -48 64 -96 -256 -160 -112 112 +-32 -160 -176 80 144 144 208 192 144 0 -16 48 64 16 160 96 16 224 0 -16 0 80 -320 144 -80 -16 -16 -144 -64 48 304 +-32 -192 -64 64 240 272 144 256 192 48 96 208 160 96 192 96 16 272 32 -32 32 32 -272 48 -96 -96 48 -16 32 144 368 +-64 -224 48 -32 176 224 -48 208 112 64 144 240 192 112 144 64 0 192 16 -80 32 -16 -192 -80 -112 -144 64 80 96 160 272 +-112 -240 96 -144 48 32 -304 48 -48 -16 96 176 96 48 16 -16 -16 16 -16 -144 0 -80 -80 -176 -128 -176 -32 96 80 48 48 +-144 -224 64 -256 -96 -208 -528 -192 -272 -160 -32 -16 -64 -48 -144 -112 -80 -208 -112 -224 -80 -160 -32 -272 -144 -208 -160 0 -16 -128 -224 +-176 -240 -64 -336 -256 -416 -656 -448 -464 -336 -240 -256 -256 -192 -304 -176 -160 -384 -208 -288 -208 -240 0 -368 -192 -224 -304 -144 -160 -336 -432 +-192 -256 -256 -400 -352 -528 -656 -608 -576 -448 -400 -464 -432 -304 -448 -240 -240 -480 -256 -336 -320 -336 -48 -400 -240 -272 -416 -320 -304 -496 -528 +-192 -288 -416 -432 -352 -512 -528 -656 -560 -496 -464 -560 -512 -368 -496 -256 -336 -464 -256 -352 -400 -448 -112 -448 -304 -288 -480 -432 -416 -544 -528 +-240 -288 -496 -416 -320 -368 -320 -592 -464 -416 -432 -528 -512 -384 -464 -240 -352 -400 -224 -320 -400 -480 -192 -448 -352 -304 -448 -464 -464 -496 -432 +-288 -256 -496 -400 -288 -224 -112 -464 -320 -288 -320 -416 -400 -336 -384 -224 -336 -304 -160 -256 -352 -480 -256 -464 -368 -288 -400 -432 -432 -416 -336 +-320 -208 -400 -320 -240 -112 32 -272 -176 -160 -192 -272 -272 -304 -272 -224 -272 -208 -96 -176 -240 -368 -224 -400 -320 -272 -288 -336 -368 -288 -256 +-336 -128 -256 -256 -208 -64 128 -112 -80 -32 -48 -128 -144 -240 -176 -272 -176 -144 -64 -80 -96 -224 -144 -272 -192 -224 -160 -208 -272 -176 -208 +-320 -32 -144 -144 -176 -64 144 0 0 32 16 -16 -16 -192 -96 -288 -64 -80 -64 16 16 -32 0 -96 16 -144 0 -80 -192 -48 -176 +-224 64 0 -32 -144 -80 128 48 48 48 48 48 64 -144 -48 -224 32 -16 -48 80 144 176 144 96 176 -32 128 16 -96 0 -112 +-96 144 80 112 -96 -80 112 64 64 32 48 80 96 -96 0 -96 80 80 -48 144 176 352 240 288 336 96 240 128 32 96 -16 +32 176 160 208 -16 -32 112 96 96 16 48 96 144 0 64 48 112 192 -32 176 160 432 288 416 368 176 336 224 160 192 112 +144 160 160 272 64 80 112 160 160 32 64 144 160 96 144 176 112 256 16 160 112 400 208 448 320 208 384 272 288 304 256 +208 80 176 272 128 192 64 192 192 64 96 208 176 224 224 288 80 256 32 112 48 288 64 384 208 224 352 304 368 384 336 +176 -32 128 176 128 240 16 208 160 112 128 240 192 304 288 288 16 192 32 48 0 128 -144 256 0 176 208 256 384 384 320 +80 -176 32 0 96 176 -112 176 80 112 112 208 160 336 288 224 -32 32 0 -48 -32 -32 -304 64 -160 96 16 160 320 288 224 +-64 -320 -80 -192 0 32 -240 64 -80 32 16 112 64 288 208 96 -64 -160 -64 -160 -80 -160 -400 -144 -320 -16 -240 0 144 80 32 +-208 -416 -240 -368 -112 -160 -384 -96 -240 -64 -96 -48 -48 144 48 -112 -128 -352 -176 -272 -128 -256 -416 -304 -400 -160 -464 -240 -112 -224 -208 +-320 -432 -416 -512 -208 -368 -464 -288 -384 -208 -224 -240 -224 -80 -144 -288 -176 -432 -272 -368 -208 -320 -368 -416 -448 -288 -624 -448 -368 -496 -416 +-368 -368 -512 -544 -272 -464 -432 -464 -464 -336 -352 -416 -352 -288 -368 -400 -240 -416 -336 -384 -320 -352 -272 -480 -432 -400 -672 -608 -560 -688 -544 +-320 -224 -512 -480 -288 -464 -336 -512 -416 -384 -368 -544 -464 -448 -496 -448 -256 -304 -320 -384 -368 -352 -160 -480 -352 -448 -592 -624 -624 -720 -544 +-208 -64 -416 -304 -208 -352 -176 -432 -288 -336 -288 -544 -480 -512 -528 -400 -240 -128 -256 -288 -368 -352 -64 -416 -240 -448 -352 -512 -544 -576 -400 +-80 96 -240 -80 -112 -176 32 -272 -96 -192 -160 -400 -384 -464 -464 -288 -192 48 -112 -144 -304 -288 0 -320 -112 -352 -48 -256 -320 -288 -192 +80 208 -16 112 -16 0 192 -80 80 0 0 -192 -224 -304 -288 -160 -80 144 64 0 -160 -240 0 -176 0 -176 224 48 -48 16 32 +208 272 176 256 48 144 304 96 240 160 128 32 -48 -144 -96 -32 16 176 176 112 -32 -160 0 -16 112 0 448 336 192 304 224 +304 240 288 304 80 192 272 256 272 224 176 208 96 0 96 64 96 112 224 176 80 -64 0 80 176 160 496 496 320 496 320 +320 128 336 256 80 160 176 272 208 192 112 256 192 80 176 112 80 0 224 160 128 -16 0 144 192 256 416 496 352 480 304 +272 0 240 128 32 80 0 176 48 32 -16 192 192 64 160 96 0 -144 112 80 112 16 0 144 144 272 224 336 224 320 208 +176 -128 80 -48 -64 -32 -160 0 -128 -208 -208 32 32 16 64 48 -112 -240 -32 -48 32 32 0 80 0 208 -32 64 0 48 64 +32 -240 -112 -192 -160 -160 -320 -192 -304 -400 -384 -176 -128 -128 -96 -32 -224 -320 -208 -192 -80 16 -32 -48 -144 64 -288 -208 -224 -224 -96 +-128 -320 -272 -288 -256 -224 -384 -352 -384 -496 -480 -352 -304 -224 -208 -96 -352 -336 -368 -288 -192 0 -64 -176 -272 -128 -448 -432 -384 -448 -240 +-272 -368 -368 -320 -320 -272 -416 -416 -400 -496 -464 -416 -416 -272 -288 -176 -384 -304 -480 -352 -272 -64 -112 -304 -352 -304 -528 -528 -464 -544 -336 +-384 -336 -400 -304 -352 -256 -320 -384 -352 -368 -336 -400 -416 -272 -304 -224 -336 -224 -496 -336 -272 -96 -160 -320 -368 -400 -480 -512 -416 -528 -400 +-432 -288 -352 -224 -304 -224 -224 -272 -240 -208 -160 -256 -336 -192 -240 -224 -256 -160 -432 -240 -240 -96 -160 -288 -304 -432 -368 -400 -288 -400 -368 +-400 -192 -288 -160 -240 -144 -80 -128 -128 -32 0 -112 -176 -112 -128 -208 -112 -112 -288 -112 -192 -96 -160 -176 -176 -368 -240 -224 -112 -208 -304 +-320 -64 -176 -80 -144 -64 32 32 -16 96 144 32 -16 0 -32 -160 0 -32 -96 0 -144 -80 -128 -16 -48 -240 -80 -48 64 0 -176 +-208 48 -64 -32 0 32 144 128 80 192 192 128 128 80 64 -112 96 32 80 128 -48 -64 -80 128 96 -48 32 80 208 176 -16 +-64 144 48 16 128 112 208 208 160 224 224 176 240 128 96 -32 176 128 208 192 32 -32 -48 240 192 112 96 176 288 288 112 +80 208 112 48 208 192 208 224 224 224 208 192 288 144 128 80 208 192 304 224 96 -16 -48 304 224 224 144 224 288 320 224 +128 208 176 48 272 208 192 192 256 192 160 160 240 144 144 128 224 224 320 192 144 -32 -48 272 208 272 128 208 224 288 256 +128 176 192 64 240 160 96 128 224 128 112 96 176 144 128 160 192 224 256 128 144 -48 -80 176 112 224 112 128 96 208 208 +64 64 144 48 160 80 -16 48 112 48 32 32 48 80 80 112 144 144 160 16 128 -48 -112 0 -16 112 16 48 -48 80 128 +-32 -96 64 0 48 -64 -176 -80 -48 -48 -32 -32 -96 0 0 0 32 0 16 -128 64 -96 -112 -176 -160 -48 -64 -80 -192 -96 -16 +-144 -224 -16 -64 -96 -240 -304 -208 -224 -160 -160 -160 -240 -112 -128 -128 -112 -160 -144 -256 -64 -128 -112 -352 -304 -224 -144 -224 -336 -272 -160 +-240 -336 -112 -144 -224 -384 -368 -304 -368 -288 -272 -272 -352 -256 -288 -256 -240 -336 -288 -352 -192 -160 -96 -496 -448 -352 -224 -320 -416 -416 -288 +-288 -368 -176 -192 -304 -432 -352 -384 -448 -368 -368 -368 -432 -400 -416 -368 -368 -432 -400 -400 -304 -176 -80 -528 -448 -416 -240 -352 -416 -496 -352 +-272 -304 -224 -208 -304 -400 -272 -384 -432 -384 -416 -400 -448 -496 -512 -384 -448 -416 -416 -368 -384 -176 -32 -480 -384 -400 -208 -336 -352 -480 -352 +-192 -192 -192 -192 -288 -272 -128 -320 -304 -352 -384 -368 -384 -480 -480 -304 -448 -352 -352 -272 -368 -112 0 -336 -256 -320 -144 -240 -256 -384 -288 +-96 -16 -160 -128 -224 -112 32 -208 -128 -256 -272 -272 -224 -368 -336 -176 -400 -208 -224 -128 -240 -64 16 -160 -48 -192 -64 -80 -112 -224 -160 +0 112 -80 -32 -144 64 144 -48 48 -112 -128 -112 -64 -192 -144 -32 -240 -64 -80 0 -80 0 16 48 128 -64 -16 64 0 -48 -48 +64 192 -32 16 -80 192 160 80 176 32 32 32 96 16 64 80 -112 80 48 128 64 48 0 192 240 48 32 160 96 144 48 +80 192 -32 64 -64 240 112 176 224 112 144 144 208 208 224 160 32 128 144 176 192 32 -48 256 256 112 0 192 144 240 80 +48 112 -80 48 -64 192 0 192 160 112 192 208 224 288 320 144 144 112 144 160 224 16 -112 240 224 144 -64 128 128 272 64 +0 -16 -112 -32 -80 64 -128 112 32 64 128 176 160 272 288 96 160 48 80 80 144 -32 -144 176 48 112 -144 -16 80 176 0 +-80 -192 -176 -128 -112 -80 -240 0 -128 -32 16 48 32 160 128 -32 144 -48 -48 -48 16 -96 -160 48 -128 32 -208 -176 -16 32 -64 +-160 -320 -208 -208 -112 -192 -272 -128 -240 -128 -112 -80 -144 -16 -48 -144 64 -128 -176 -160 -128 -144 -144 -48 -256 -48 -240 -336 -128 -128 -160 +-224 -384 -224 -288 -80 -240 -256 -256 -288 -192 -224 -224 -288 -192 -240 -240 -32 -176 -272 -240 -224 -160 -160 -144 -352 -112 -224 -416 -208 -272 -240 +-240 -368 -208 -304 -32 -224 -160 -288 -240 -192 -256 -272 -336 -304 -336 -272 -96 -176 -288 -272 -288 -144 -160 -192 -320 -176 -160 -384 -240 -336 -272 +-192 -288 -160 -256 16 -144 -48 -256 -144 -144 -208 -256 -320 -336 -336 -256 -144 -128 -256 -256 -272 -96 -128 -208 -256 -176 -80 -272 -224 -368 -256 +-144 -160 -96 -160 48 -64 16 -144 -32 -48 -112 -160 -208 -288 -256 -192 -144 -96 -144 -160 -208 -48 -96 -192 -144 -160 16 -128 -160 -304 -224 +-64 -48 -48 -48 64 0 48 -32 48 16 0 -32 -64 -176 -128 -96 -112 -48 -32 -64 -112 -32 -48 -160 -32 -112 64 0 -80 -192 -128 +0 32 -48 16 48 32 48 64 64 64 96 80 64 -48 0 0 -64 -32 80 0 -48 -16 -16 -128 80 -32 80 128 0 -48 -48 +32 64 -32 64 0 0 0 128 32 48 128 112 144 32 80 48 -32 -16 128 48 16 -32 48 -96 112 16 32 176 64 48 48 +0 48 -32 80 -80 -80 -48 112 -16 0 80 80 144 64 96 64 -16 -32 112 80 32 -64 80 -64 80 64 -16 144 80 128 128 +-48 32 -32 48 -160 -160 -80 32 -96 -48 -16 16 96 32 64 64 -32 -48 32 48 16 -80 96 -32 16 32 -80 96 16 128 144 +-96 -16 -32 16 -192 -208 -112 -48 -128 -128 -96 -96 -16 -48 0 16 -48 -64 -48 0 0 -96 48 -16 -48 -32 -112 32 -16 96 144 +-160 -96 0 -32 -192 -224 -96 -144 -144 -160 -176 -176 -128 -112 -64 -32 -112 -64 -144 -48 -32 -96 0 -32 -112 -96 -128 -16 -80 0 96 +-208 -128 0 -64 -160 -176 -96 -208 -112 -144 -192 -224 -208 -160 -112 -64 -144 -80 -176 -96 -32 -80 -96 -32 -144 -192 -112 -64 -112 -80 0 +-176 -128 0 -64 -96 -112 -96 -224 -48 -128 -160 -192 -208 -144 -112 -112 -176 -80 -160 -112 -32 -64 -176 -32 -144 -240 -96 -80 -144 -144 -96 +-128 -96 32 -64 -32 -32 -80 -176 -32 -64 -96 -128 -160 -96 -96 -144 -192 -64 -96 -112 -48 -80 -224 -64 -128 -224 -48 -96 -128 -176 -176 +-64 -48 0 -80 16 48 -64 -112 -16 -32 0 -48 -96 -48 -64 -144 -160 -48 -32 -128 -64 -80 -240 -80 -112 -176 -16 -96 -128 -160 -208 +16 0 -16 -80 32 96 -64 -48 -16 0 32 32 -16 16 -48 -128 -128 -32 0 -80 -80 -64 -208 -112 -48 -96 -16 -112 -112 -112 -208 +80 48 -64 -96 16 96 -48 16 -32 -32 16 64 16 32 -64 -112 -48 -16 32 -64 -112 -48 -144 -96 -32 -16 -16 -128 -96 -96 -160 +112 48 -128 -128 -32 48 -64 32 -64 -48 -16 64 32 48 -48 -96 0 -32 32 -32 -128 -32 -64 -96 -16 48 -32 -160 -80 -48 -112 +112 48 -144 -160 -80 0 -64 32 -64 -96 -80 16 0 16 -64 -80 32 -32 0 -16 -128 -16 -16 -80 0 80 -80 -160 -64 -16 -64 +80 32 -144 -176 -144 -80 -80 -16 -80 -112 -128 -48 -48 -32 -96 -64 32 -32 -80 -16 -112 0 32 -80 -16 80 -96 -128 -32 -32 -32 +32 0 -144 -160 -160 -128 -80 -64 -80 -112 -176 -96 -112 -80 -96 -32 16 -48 -144 -16 -64 32 64 -48 -48 16 -96 -80 -16 0 0 +-16 -48 -96 -128 -144 -176 -96 -112 -96 -80 -176 -128 -144 -112 -96 -32 0 -64 -144 -64 -32 64 48 -32 -80 -16 -80 -48 16 16 0 +-48 -80 -48 -80 -112 -176 -80 -128 -96 -64 -128 -160 -160 -112 -80 0 -16 -64 -144 -80 0 32 48 -48 -96 -64 -48 -16 48 0 0 +-64 -112 0 -16 -48 -144 -32 -128 -96 -32 -64 -144 -160 -112 -48 0 -48 -64 -112 -112 16 0 32 -16 -80 -96 -16 16 48 16 -16 +-64 -112 0 48 16 -80 16 -80 -64 16 0 -112 -112 -96 -16 16 -48 -48 -64 -112 0 -16 32 0 -64 -80 0 48 32 48 0 +-80 -80 32 112 64 -16 64 0 -32 32 48 -32 -64 -48 16 16 -16 -32 0 -128 0 -48 16 16 -32 -48 16 96 16 32 32 +-80 -64 32 144 112 64 96 48 0 48 112 32 32 -32 48 0 -16 0 48 -64 0 -80 16 64 32 -16 16 112 0 16 48 +-96 -16 16 144 128 112 112 112 48 64 112 96 64 16 64 0 0 48 112 0 0 -112 -16 80 64 0 16 128 0 0 64 +-144 16 0 144 96 128 96 128 80 16 112 112 112 32 80 0 16 32 128 64 0 -112 -32 80 80 32 16 112 -16 -48 64 +-112 16 -32 96 64 112 32 128 96 -16 64 96 112 48 64 -16 32 16 128 112 16 -112 -80 64 64 32 -16 64 0 -80 0 +-112 0 -80 16 0 64 -32 64 64 -48 16 48 80 48 48 -32 16 -16 96 128 0 -112 -112 16 16 16 -16 16 -16 -96 -48 +-80 -64 -128 -80 -80 0 -128 -16 0 -96 -64 -32 32 32 -16 -32 -16 -48 32 112 -16 -96 -144 -48 -32 -16 -32 -64 -48 -112 -96 +-48 -80 -144 -192 -160 -80 -192 -96 -80 -128 -112 -96 -32 -16 -64 -48 -48 -80 -48 32 -64 -80 -144 -144 -112 -32 -32 -144 -64 -112 -128 +0 -112 -160 -272 -208 -160 -240 -192 -176 -144 -160 -176 -112 -64 -128 -80 -96 -112 -144 -64 -112 -48 -96 -224 -160 -48 -64 -224 -112 -112 -144 +16 -112 -144 -304 -256 -208 -240 -224 -224 -144 -176 -176 -160 -96 -160 -96 -144 -112 -224 -144 -160 -16 -80 -272 -192 -80 -64 -240 -144 -96 -144 +48 -112 -112 -288 -224 -192 -192 -240 -208 -112 -176 -192 -176 -112 -176 -96 -176 -96 -256 -176 -192 0 -48 -256 -192 -96 -64 -240 -192 -80 -112 +32 -64 -64 -224 -192 -160 -128 -208 -176 -80 -144 -160 -176 -144 -176 -96 -192 -96 -256 -176 -192 16 -32 -224 -160 -144 -96 -176 -192 -64 -96 +0 -48 -32 -144 -112 -96 -32 -160 -96 -32 -112 -96 -128 -160 -144 -96 -160 -64 -208 -144 -128 -16 -48 -160 -96 -144 -112 -96 -160 -64 -80 +-32 -48 -16 -32 -32 -48 32 -96 -32 0 -64 -48 -96 -144 -96 -80 -128 -48 -144 -96 -80 -32 -80 -64 -48 -144 -128 -32 -112 -64 -48 +-80 -64 -16 32 32 0 48 -32 32 0 -32 0 -64 -112 -48 -80 -64 -16 -80 -48 -32 -80 -96 16 0 -128 -128 32 -32 -64 -64 +-144 -64 -32 48 64 0 64 0 48 0 -16 0 -48 -64 -16 -80 -16 -16 0 -16 16 -96 -96 80 16 -112 -160 32 0 -48 -64 +-176 -96 -80 32 48 -32 16 32 32 -32 -48 0 -48 -48 -16 -96 16 -32 32 -32 16 -128 -112 96 0 -80 -160 0 48 -48 -48 +-208 -112 -128 -16 0 -80 -48 16 -32 -80 -80 -64 -80 -48 -32 -80 32 -64 48 -80 0 -128 -96 80 -32 -64 -176 -48 32 -32 -32 +-208 -112 -144 -64 -80 -144 -96 -16 -96 -128 -80 -96 -96 -48 -80 -96 0 -96 16 -128 -32 -112 -64 32 -80 -32 -128 -96 0 -16 -16 +-192 -96 -144 -80 -128 -160 -128 -32 -144 -160 -128 -144 -128 -48 -80 -64 -16 -96 -16 -160 -80 -112 -32 -32 -112 -16 -112 -112 -16 -16 0 +-144 -80 -80 -80 -144 -176 -144 -64 -144 -128 -96 -128 -112 -64 -80 -32 -48 -112 -64 -144 -96 -64 -16 -80 -96 0 -48 -96 -48 0 0 +-96 -64 -16 -32 -112 -128 -112 -64 -128 -96 -64 -96 -80 -48 -80 0 -96 -80 -80 -96 -64 -16 0 -112 -64 16 16 -64 -48 0 16 +-16 -48 16 32 -48 -48 -64 -32 -80 -48 -16 -32 -32 -48 -48 0 -80 -64 -64 -32 -48 0 16 -112 -16 0 64 -32 -32 -16 0 +32 -32 48 64 16 48 16 -48 -16 0 32 0 0 -16 -16 16 -80 -32 0 32 0 32 0 -96 0 0 112 0 -32 -16 -16 +96 -16 48 80 64 128 48 -32 48 48 64 48 32 -16 32 16 -48 16 0 80 0 32 0 -64 32 -16 112 16 -32 -16 -48 +96 0 16 32 80 160 48 -32 80 80 64 64 48 16 48 -16 -16 32 32 96 0 32 16 -48 32 -32 48 16 -48 -48 -96 +80 -16 -16 -32 80 144 64 -16 80 64 32 48 48 0 48 -16 16 32 16 64 16 32 32 -32 0 -64 0 0 -80 -80 -144 +32 -32 -48 -96 16 80 32 0 48 16 -16 32 16 -16 32 -48 0 0 0 32 -16 16 0 -32 -48 -96 -80 -48 -96 -112 -112 +-48 -48 -96 -176 -64 0 -16 0 0 0 -80 0 16 -32 -16 -64 0 0 -64 -48 -32 0 0 -48 -96 -144 -160 -80 -128 -112 -112 +-112 -64 -128 -192 -128 -64 -80 -16 -48 -64 -112 -64 -32 -48 -64 -96 -48 -32 -128 -112 -64 -48 -32 -48 -128 -160 -176 -80 -144 -112 -80 +-192 -96 -144 -192 -176 -160 -144 -16 -96 -96 -128 -80 -64 -80 -128 -96 -80 -80 -144 -144 -80 -80 -80 -64 -144 -160 -176 -80 -128 -96 -64 +-208 -112 -160 -160 -192 -208 -192 -32 -128 -96 -112 -96 -80 -96 -160 -112 -96 -112 -144 -144 -80 -112 -112 -48 -144 -128 -128 -64 -112 -80 -32 +-208 -96 -144 -112 -192 -224 -208 -96 -144 -128 -96 -96 -112 -80 -176 -112 -128 -96 -144 -128 -80 -128 -128 -48 -96 -80 -64 -48 -48 -80 -16 +-176 -96 -112 -48 -144 -208 -208 -128 -144 -112 -48 -80 -112 -64 -144 -96 -128 -80 -96 -80 -64 -112 -112 -64 -64 -48 -16 -32 0 -32 -32 +-96 -64 -80 -32 -80 -160 -160 -176 -112 -96 -32 -64 -96 -32 -96 -64 -112 -64 -48 -32 -48 -96 -96 -48 0 16 32 -16 32 -32 -16 +-16 -16 -32 -16 -32 -96 -80 -160 -96 -96 -16 -48 -80 -16 -32 -32 -80 -48 0 0 -48 -48 -64 -48 16 48 48 -32 32 -16 -32 +48 16 16 0 16 -32 0 -144 -64 -80 -16 -48 -64 -16 0 -16 -32 0 32 32 -48 -16 -16 -32 64 80 32 -48 16 -16 -16 +80 48 48 0 16 0 80 -96 -48 -32 -32 -80 -48 -16 48 16 0 0 48 16 -32 0 0 -16 48 80 0 -64 -16 -32 -16 +80 32 96 0 16 0 128 -32 -16 -16 -48 -80 -16 -32 48 16 16 -16 48 -16 -32 16 0 -16 32 64 -64 -96 -16 -16 -16 +48 16 64 16 0 0 112 16 -16 0 -32 -80 0 -64 32 16 32 -32 16 -32 -64 0 -32 0 -16 0 -128 -96 -64 -32 -16 +16 -16 32 -16 -32 -32 80 48 -32 16 -48 -96 -16 -96 -16 0 32 -64 -16 -80 -80 -32 -64 -16 -80 -32 -160 -96 -80 -32 -32 +-32 -80 -32 -16 -48 -48 0 64 -64 0 -64 -80 -16 -112 -80 -32 -16 -96 -48 -128 -64 -80 -96 -32 -128 -80 -160 -80 -96 -48 -80 +-80 -112 -112 -48 -80 -80 -64 16 -96 -48 -80 -80 -64 -128 -128 -64 -64 -128 -112 -144 -96 -112 -112 -64 -176 -128 -160 -80 -112 -80 -112 +-112 -160 -176 -80 -80 -96 -144 -16 -112 -96 -96 -80 -112 -144 -176 -128 -112 -160 -160 -160 -112 -128 -112 -128 -192 -176 -128 -80 -128 -96 -144 +-128 -176 -208 -112 -80 -80 -192 -64 -112 -160 -112 -64 -128 -128 -192 -160 -160 -176 -192 -144 -128 -144 -96 -176 -192 -192 -80 -80 -144 -128 -160 +-160 -160 -224 -128 -80 -80 -192 -112 -128 -176 -128 -64 -144 -128 -192 -176 -192 -176 -192 -112 -144 -128 -64 -176 -160 -208 -64 -96 -128 -144 -160 +-144 -144 -192 -128 -64 -48 -160 -144 -112 -192 -144 -80 -144 -96 -144 -160 -192 -144 -192 -96 -112 -128 0 -176 -96 -192 -32 -112 -128 -144 -144 +-144 -96 -112 -112 -64 -16 -112 -160 -80 -160 -128 -80 -112 -64 -96 -144 -160 -96 -160 -64 -80 -80 32 -128 -48 -160 0 -96 -96 -128 -80 +-112 -64 -48 -80 -32 0 -48 -112 -32 -96 -96 -96 -80 -32 -16 -96 -128 -48 -96 -32 -32 -48 32 -64 16 -96 0 -48 -64 -64 -32 +-80 -32 16 -48 0 16 -16 -96 0 -16 -64 -48 -16 16 16 -48 -64 0 -32 16 0 -16 16 16 48 -32 0 0 -16 0 16 +-64 0 48 -16 0 32 0 -48 32 32 -16 -32 16 48 48 0 0 32 48 32 48 16 -16 48 80 32 0 16 32 48 64 +-16 0 80 0 -16 0 16 -16 32 80 32 0 32 48 64 48 80 64 80 48 64 0 -80 80 48 64 0 64 48 64 64 +0 0 32 16 -16 0 16 16 32 80 48 32 48 32 48 48 80 80 128 32 48 16 -96 48 16 64 -32 64 48 64 64 +16 0 16 0 -48 -48 0 32 16 64 64 48 16 0 48 48 80 64 96 16 16 0 -144 0 -48 64 -48 48 16 48 48 +32 -32 -32 -16 -64 -80 -32 0 -32 16 16 48 -16 -32 -16 48 48 32 48 0 -16 -16 -176 -64 -96 32 -64 0 -32 -16 0 +32 -48 -96 -48 -80 -96 -48 -32 -64 -64 -16 16 -48 -80 -48 16 16 -16 -16 -32 -80 -48 -144 -96 -128 0 -64 -32 -64 -80 -64 +0 -64 -112 -96 -96 -128 -80 -64 -112 -112 -64 -16 -96 -128 -96 -32 -48 -80 -96 -80 -112 -64 -112 -112 -128 -32 -48 -96 -96 -112 -128 +-16 -96 -128 -112 -80 -144 -112 -96 -144 -144 -96 -64 -128 -128 -144 -80 -96 -128 -176 -112 -144 -96 -64 -128 -112 -80 -64 -112 -112 -128 -160 +-64 -112 -112 -128 -112 -128 -128 -112 -160 -144 -112 -112 -144 -144 -128 -112 -144 -160 -208 -128 -160 -96 -32 -128 -64 -112 -32 -128 -96 -128 -160 +-112 -96 -112 -128 -112 -112 -144 -128 -144 -128 -112 -160 -144 -144 -128 -128 -160 -192 -192 -144 -144 -96 0 -96 -16 -112 -48 -128 -96 -80 -128 +-112 -64 -80 -128 -80 -80 -112 -112 -112 -96 -96 -144 -112 -96 -112 -128 -160 -160 -160 -112 -96 -64 -16 -80 16 -112 -32 -112 -64 -32 -96 +-128 -32 -64 -96 -64 -48 -80 -64 -80 -64 -80 -144 -80 -80 -96 -112 -144 -112 -96 -112 -64 -48 0 -48 16 -128 -32 -80 -48 -16 -32 +-112 0 -32 -32 -48 -16 -32 -32 0 0 -48 -112 -32 -32 -64 -96 -80 -64 -32 -64 -48 -32 0 0 0 -112 -48 -64 -16 0 16 +-112 32 -32 16 -32 16 16 16 32 32 -32 -64 -16 0 -32 -32 -32 0 0 -16 -16 -16 0 0 -16 -80 -64 -32 -16 -16 48 +-96 16 0 48 0 48 64 48 64 32 -16 -32 32 16 16 -16 0 48 32 16 0 -16 0 16 -64 -48 -80 0 0 -32 80 +-48 16 16 96 16 48 80 48 80 32 -16 0 32 32 32 16 32 64 48 16 16 -16 0 0 -80 -32 -80 -16 0 -64 48 +-16 -16 16 80 32 32 80 32 64 16 -32 16 16 32 32 16 48 80 32 16 0 -32 16 0 -80 16 -48 -16 0 -80 16 +0 -32 16 48 16 0 32 16 16 0 -32 32 0 16 16 0 32 32 16 -16 16 -48 -16 -16 -80 48 -16 -32 -16 -96 -32 +16 -64 0 16 16 -16 -16 -32 -16 -32 -32 16 -32 -16 -16 -32 0 0 0 -48 0 -80 -32 -48 -64 48 32 -32 -16 -80 -48 +16 -80 -32 -48 -16 -64 -64 -80 -48 -48 -32 0 -32 -32 -32 -32 0 -64 0 -48 -16 -64 -80 -64 -32 32 32 -16 -48 -48 -96 +0 -64 -48 -96 -16 -64 -112 -96 -80 -64 -48 -16 -64 -64 -64 -48 -16 -96 -32 -48 -16 -64 -80 -64 16 16 48 -16 -48 0 -80 +0 -80 -48 -112 -48 -80 -112 -96 -96 -96 -48 -48 -64 -80 -80 -48 -32 -96 -48 -32 -32 -32 -96 -80 32 -16 16 -32 -80 32 -96 +-32 -64 -48 -144 -48 -64 -128 -80 -96 -64 -16 -64 -64 -96 -80 -48 -32 -96 -48 -32 -48 0 -112 -80 16 -32 -16 -16 -80 48 -80 +-64 -32 -64 -128 -48 -64 -96 -48 -96 -64 -32 -64 -64 -64 -64 -32 -48 -64 -16 -16 -64 0 -112 -64 -16 -64 -48 -32 -80 32 -80 +-112 -48 -48 -112 -64 -64 -80 -32 -64 -48 -32 -64 -48 -32 -48 -16 -80 -64 -32 -16 -96 0 -112 -64 -48 -64 -96 -32 -80 16 -80 +-112 -48 -64 -64 -64 -48 -48 -16 -64 -48 -32 -48 -64 -16 -32 0 -80 -80 -48 -32 -80 -16 -80 -32 -64 -80 -112 -32 -64 -16 -64 +-112 -80 -48 -48 -64 -64 -32 -16 -48 -48 -32 -48 -48 -16 -16 -16 -112 -64 -64 -48 -80 -16 -64 -32 -80 -80 -112 -48 -32 -32 -64 +-64 -64 -48 0 -64 -64 -32 -48 -48 -48 -48 -48 -48 -32 -16 -32 -96 -48 -48 -64 -64 -48 -16 -32 -80 -64 -96 -48 -16 -64 -48 +-32 -48 -48 0 -48 -80 -32 -64 -48 -32 -32 -32 -48 -48 -32 -48 -96 -32 -64 -96 -32 -64 16 -16 -80 -64 -64 -48 0 -80 -48 +16 -16 -48 0 -32 -48 -32 -64 -32 -16 -16 -16 -32 -48 -32 -48 -64 0 -48 -64 -16 -64 16 -16 -64 -48 -16 -32 0 -64 -16 +80 16 -48 0 -16 -64 -32 -64 -32 0 -16 -32 -48 -64 -48 -64 -32 16 -32 -64 -16 -64 32 -16 -32 -32 16 -32 0 -32 0 +112 48 -48 -16 -16 -16 -16 -32 -16 0 -16 -16 -32 -64 -32 -64 -16 32 -32 -32 0 -48 48 0 -16 -16 16 -48 -16 -16 -16 +96 80 -32 -32 -32 -16 0 -16 0 0 -32 -16 -16 -64 -32 -48 0 32 -32 0 0 -16 32 16 0 0 32 -64 0 0 16 +64 64 -32 -32 -32 0 16 16 16 0 -32 -32 0 -32 -16 -32 16 0 -48 0 0 -32 16 0 16 0 0 -64 -32 0 0 +16 32 -16 -16 -32 16 16 16 16 -16 -48 -48 16 -32 -16 0 0 -32 -32 -16 0 -32 -16 16 16 0 -32 -48 -48 -32 0 +-32 0 0 -16 -48 16 -16 0 0 -32 -64 -48 0 -16 -32 0 -32 -64 -64 0 -48 -32 -48 -32 0 -16 -64 -48 -64 -80 0 +-80 -32 0 -16 -64 0 -32 -16 -32 -64 -80 -64 -16 -16 -48 0 -48 -112 -48 -32 -80 -48 -80 -48 -48 -48 -64 -48 -96 -112 -32 +-128 -96 16 0 -80 -16 -48 -48 -64 -112 -80 -80 -48 -16 -64 -16 -64 -144 -48 -64 -80 -64 -96 -80 -64 -64 -96 -48 -128 -128 -48 +-112 -128 16 -16 -64 -48 -80 -96 -96 -112 -80 -80 -80 -32 -64 -48 -64 -128 -48 -64 -96 -64 -112 -112 -96 -112 -96 -48 -128 -144 -64 +-112 -160 16 -16 -48 -64 -80 -96 -96 -96 -80 -48 -96 -48 -80 -64 -80 -112 -32 -64 -80 -32 -112 -128 -112 -128 -80 -48 -112 -112 -112 +-80 -144 0 -16 0 -48 -64 -96 -112 -96 -64 -32 -80 -48 -48 -48 -48 -80 -16 -48 -64 0 -80 -112 -128 -112 -64 -48 -96 -96 -112 +-48 -112 0 -16 16 -16 -16 -80 -80 -48 -16 -16 -64 -32 -16 -32 -32 -32 0 -32 -16 32 -48 -80 -80 -64 -32 -48 -32 -48 -96 +-16 -80 0 -16 48 16 16 -32 -16 -16 16 16 -16 -32 16 -16 0 16 0 0 16 64 0 -48 -16 -16 -16 -32 -16 0 -80 +0 -48 0 -16 80 16 16 16 32 16 48 32 16 -16 48 0 16 32 16 16 48 80 48 0 16 32 0 -32 32 32 -32 +16 16 -32 -16 80 32 32 32 64 64 48 32 32 0 48 0 16 80 0 32 80 64 64 48 64 64 16 0 64 48 0 +32 80 -32 0 64 32 0 48 64 80 48 32 48 16 32 -16 16 96 0 32 80 32 64 64 96 80 16 16 80 48 48 +16 96 -48 0 16 0 -16 32 48 48 32 16 32 16 32 0 32 96 16 32 48 -16 48 64 80 80 16 32 80 64 96 +16 96 -64 -32 -32 -32 -64 16 16 32 0 0 16 0 0 -32 16 64 16 16 16 -48 16 64 48 48 0 48 80 80 80 +-16 80 -80 -48 -80 -64 -80 -16 -16 0 -48 -32 -48 -16 -32 -32 0 16 0 -16 -32 -96 -16 32 0 16 0 16 32 80 64 +-16 32 -96 -64 -128 -80 -112 -48 -48 -48 -80 -48 -64 -16 -48 -32 -16 -32 -32 -32 -64 -96 -64 0 -48 -16 -16 0 16 64 48 +-48 -32 -96 -64 -144 -96 -112 -80 -96 -80 -80 -96 -64 -16 -80 -32 -48 -80 -48 -64 -80 -112 -96 -32 -96 -48 -32 -32 -48 16 -16 +-48 -96 -80 -64 -128 -80 -80 -80 -112 -96 -96 -96 -64 -48 -96 -32 -80 -112 -64 -80 -112 -112 -112 -64 -112 -64 -48 -80 -64 -32 -48 +-64 -128 -64 -80 -96 -80 -64 -80 -96 -96 -64 -80 -64 -64 -80 -16 -96 -128 -80 -96 -96 -96 -96 -80 -96 -64 -48 -96 -96 -64 -112 +-80 -160 -48 -48 -64 -80 -64 -64 -96 -96 -48 -64 -48 -80 -80 0 -112 -144 -96 -96 -96 -64 -80 -96 -80 -64 -64 -96 -128 -128 -128 +-96 -144 -32 -48 -16 -64 -32 -64 -80 -80 -16 -48 -48 -48 -64 -16 -96 -144 -80 -80 -64 -32 -48 -96 -48 -96 -64 -96 -128 -176 -144 +-80 -128 0 -48 -16 -64 -16 -64 -64 -64 -16 -48 -48 -64 -48 -16 -80 -112 -80 -64 -48 -16 -16 -96 -16 -96 -64 -80 -128 -176 -112 +-48 -80 0 -48 -16 -64 -32 -48 -48 -48 0 -32 -32 -48 -32 -32 -48 -80 -64 -48 -32 0 0 -96 0 -96 -64 -48 -112 -176 -96 +-48 -16 0 -32 0 -48 -16 -32 -32 -32 -16 -16 -48 -48 0 -64 -32 -32 -32 -32 -32 16 32 -64 0 -80 -48 -16 -64 -144 -64 +0 16 0 -16 -16 -32 -16 -16 -32 -16 -32 0 -16 -32 0 -48 -16 0 -16 -16 -16 32 32 -48 0 -64 -48 16 -32 -80 -32 +32 64 0 -16 -48 -16 0 -16 0 0 -32 0 -16 -16 0 -48 16 16 0 0 0 16 32 -16 0 -32 -32 16 -16 -16 0 +48 80 0 -16 -64 0 0 0 16 16 -16 0 0 -16 0 -32 32 48 0 0 0 0 16 0 0 0 0 32 32 32 16 +48 64 0 -16 -48 16 0 0 0 16 -16 -16 0 -16 0 -16 16 32 0 0 16 0 0 16 -32 16 0 16 64 64 32 +32 16 -16 -16 -64 32 0 0 0 0 -16 -32 16 -16 0 0 0 48 0 0 0 -32 -16 16 -32 16 16 0 48 80 16 +0 -16 0 -16 -48 32 -16 0 -16 -16 -32 -32 0 0 -16 -16 -16 16 0 -16 -16 -32 -48 0 -48 32 0 -16 48 80 0 +-32 -64 -16 -16 -32 16 -32 -16 -48 -48 -32 -64 -32 -16 -48 -32 -16 0 -16 -32 -32 -48 -48 -32 -64 16 0 -32 16 64 -16 +-64 -112 -32 -16 -16 -16 -48 -32 -80 -48 -32 -80 -64 -48 -64 -64 -32 -32 -16 -48 -32 -48 -80 -64 -64 0 -16 -64 -16 16 -48 +-96 -128 -64 -48 -16 -48 -48 -48 -96 -64 -48 -80 -80 -80 -64 -64 -64 -64 -32 -48 -48 -48 -96 -64 -64 -16 -16 -80 -48 0 -48 +-96 -112 -80 -64 -16 -80 -64 -48 -80 -64 -64 -64 -80 -80 -96 -64 -80 -64 -32 -48 -48 -32 -96 -80 -48 -16 -16 -80 -80 -32 -64 +-96 -80 -96 -64 0 -80 -32 -64 -80 -48 -80 -64 -96 -80 -64 -64 -80 -96 -32 -48 -64 -48 -96 -64 -32 -32 -16 -64 -80 -48 -80 +-64 -48 -96 -64 0 -96 -32 -48 -32 -32 -48 -48 -80 -64 -48 -48 -64 -80 -32 -32 -48 -32 -80 -32 0 -48 -32 -48 -80 -64 -48 +-48 -16 -64 -32 0 -64 -16 -32 0 -32 -32 0 -48 -32 -16 -32 -48 -64 -16 -16 -16 -32 -48 0 0 -48 -16 -32 -48 -48 -32 +-16 32 -32 -16 0 -48 -16 0 16 -16 0 16 0 0 -16 0 -48 -48 -16 0 0 -32 -16 32 16 -32 -32 -16 -16 -48 -16 +0 48 0 -16 -16 -48 -32 0 48 -16 16 16 32 16 0 0 -32 -48 -16 -16 -16 -16 0 32 32 -32 -16 16 16 -32 0 +0 48 32 16 -16 -32 -32 0 32 0 16 16 48 16 16 0 0 -16 -32 0 -16 -32 16 32 0 -32 -32 32 16 -32 0 +-16 16 32 16 -48 -16 -32 -16 16 -16 0 16 32 16 0 0 0 0 -32 -16 -32 -32 32 16 -16 -32 -32 16 32 -32 0 +-48 -16 48 32 -48 0 -32 -32 0 -16 0 -16 0 0 0 0 0 16 -48 -32 -64 -32 16 -32 -32 -48 -32 0 16 -32 -16 +-48 -48 32 16 -48 0 -48 -48 -48 -16 -32 -32 0 -16 -32 -32 0 16 -48 -64 -64 -32 16 -48 -64 -48 -48 -16 -16 -32 -48 +-64 -64 16 16 -48 0 -32 -64 -80 -16 -48 -48 -48 -32 -48 -32 -16 0 -64 -48 -48 -32 0 -64 -80 -48 -64 -48 -32 -48 -64 +-48 -96 -32 -16 -32 16 -16 -48 -80 -32 -80 -64 -48 -48 -32 -64 -48 -32 -64 -64 -48 -48 -16 -96 -80 -48 -64 -64 -80 -48 -80 +-32 -96 -48 -16 -16 32 0 -48 -80 -48 -80 -64 -80 -80 -48 -64 -64 -48 -64 -64 -48 -48 -48 -96 -80 -48 -64 -96 -96 -48 -80 +-16 -64 -48 -32 -16 32 16 -32 -64 -64 -64 -64 -64 -48 -32 -80 -48 -64 -64 -64 -32 -48 -48 -80 -64 -64 -48 -80 -128 -64 -80 +-32 -32 -64 -48 0 32 0 -32 -32 -80 -80 -48 -48 -48 -48 -64 -64 -80 -48 -64 -16 -48 -64 -64 -32 -48 -64 -96 -128 -48 -64 +-16 -16 -64 -48 0 16 0 0 -32 -64 -48 -48 -32 -48 -32 -48 -80 -64 -32 -48 -32 -48 -64 -48 -16 -48 -48 -64 -112 -80 -48 +-32 32 -48 -48 0 -32 0 0 -16 -64 -32 -16 -32 -32 -80 -32 -64 -80 -32 -32 -32 -48 -64 -32 0 -32 -32 -48 -64 -80 -32 +-32 16 0 -48 0 -32 -16 0 0 -48 -32 -16 -32 -32 -80 -48 -48 -80 -16 0 -48 -48 -80 0 16 -32 -48 -48 -64 -80 -16 +-32 16 0 -32 0 -64 -32 0 0 -16 0 0 -32 -32 -80 -16 -32 -64 0 0 -64 -32 -80 -16 32 -32 -16 -32 -16 -64 0 +-32 16 16 -48 0 -48 -32 -16 16 0 0 0 -32 -32 -64 -16 -16 -64 -16 0 -48 -48 -64 0 16 -16 0 -16 0 -32 0 +-32 0 0 -32 -32 -48 -48 -16 0 0 0 0 -32 -32 -32 -16 16 -32 -16 -16 -32 -16 -64 0 0 -16 0 -16 16 0 0 +-32 -16 16 -32 -32 -32 -48 -32 0 0 0 0 -32 -16 -16 0 0 -16 0 -16 -16 16 -48 0 0 -16 16 -16 32 16 0 +-16 -48 -16 -16 -16 -16 -64 -32 0 0 0 0 -16 0 16 0 16 0 16 0 16 32 -16 0 -32 -16 0 -16 48 32 0 +0 -64 -16 0 -16 -16 -48 -32 -16 0 0 -16 0 16 32 0 16 16 0 0 32 48 0 0 -48 -16 0 -16 32 48 0 +0 -48 -48 0 0 -16 -32 -32 -16 -16 0 -32 0 16 48 0 0 32 0 32 32 32 32 -32 -64 0 -32 0 16 48 -16 +-16 -48 -48 -16 -16 -16 -32 -32 -32 -32 0 -32 0 16 48 -16 0 32 0 16 32 32 32 -16 -64 16 -32 0 -16 32 -32 +-16 -32 -32 -16 -16 -16 0 -32 -32 -32 -16 -32 16 0 32 -16 0 16 -16 0 0 0 32 -32 -64 0 -16 0 -16 16 -16 +-32 -16 -32 0 -16 -32 0 -16 -48 -16 -32 -32 0 -16 0 0 -16 16 -16 -16 -16 -16 16 -16 -32 0 -32 0 -32 0 -32 +-32 0 -32 0 -32 -16 0 0 -32 -32 -32 -48 0 -16 -32 -16 -48 -16 -32 -48 -48 -48 0 -16 -16 0 -16 16 -48 -48 -32 +-32 16 0 -16 -48 -16 16 0 -32 -32 -64 -32 -16 -32 -64 -32 -48 -48 -48 -64 -80 -64 -16 -32 0 -16 -16 0 -32 -64 -16 +-32 32 0 16 -48 -32 16 0 -16 -16 -48 -48 -32 -32 -48 0 -48 -32 -48 -64 -64 -80 -16 0 16 -32 -16 0 -48 -80 -16 +-32 32 0 -16 -32 0 0 0 0 -16 -16 -16 -32 -48 -48 0 -48 -64 -64 -80 -64 -80 -32 0 0 -32 -16 0 -32 -80 0 +-16 48 0 -16 -32 16 -16 0 0 -16 -16 -16 -32 -32 -48 0 -48 -48 -48 -48 -32 -32 -32 -16 16 -48 0 0 -16 -64 16 +0 32 -32 -16 -32 0 -32 -16 16 -16 -16 -16 -32 -16 -32 0 -32 -32 -16 -16 0 -16 -32 -32 16 -48 0 0 16 -48 16 +0 32 -32 -16 0 16 -32 0 16 0 16 16 0 0 -32 16 -16 -32 0 32 16 0 -16 -16 0 -32 0 0 16 -16 16 +16 0 -32 -16 0 0 -16 -16 16 0 32 32 0 16 -16 0 16 0 32 64 16 48 0 -16 16 -16 0 0 0 0 32 +48 0 0 0 32 16 16 0 16 16 32 32 0 32 16 0 32 32 32 64 32 64 16 0 0 0 0 0 16 32 16 +48 -16 16 0 32 16 32 0 16 32 32 32 32 48 32 0 48 32 48 48 32 64 32 0 0 32 32 -16 0 80 0 +64 -32 16 0 32 16 32 16 16 48 16 32 16 48 48 0 64 32 32 32 32 64 16 16 0 64 48 0 16 64 0 +64 -16 48 16 32 16 32 32 0 64 16 32 32 32 80 16 64 16 32 16 32 48 32 16 0 64 32 0 32 80 0 +48 -16 64 0 32 0 32 16 -16 32 16 16 32 32 80 16 48 16 16 0 16 32 16 32 0 64 48 0 32 64 0 +32 -16 48 0 16 0 0 32 0 16 16 0 16 16 80 16 32 -16 0 -16 0 -16 0 48 0 48 32 0 48 48 16 +0 -16 32 0 0 -16 -16 16 0 0 0 -16 0 0 16 0 16 -16 0 -32 -16 -32 0 32 -32 48 16 0 32 16 16 +-48 -16 32 0 -16 -32 -48 0 -16 -16 -16 -16 -16 -32 -32 0 -32 -32 -16 -48 -16 -48 -16 16 -32 16 -16 0 16 -16 0 +-48 -16 -16 0 -48 -32 -64 -16 -16 -64 -32 -16 -16 -48 -48 0 -32 -32 -32 -32 -32 -48 -16 0 -16 -32 -32 -16 -16 -32 0 +-80 -16 -32 -32 -48 -48 -48 -48 -16 -48 -32 -32 -32 -48 -64 -16 -64 -32 -48 -32 -32 -32 -32 -16 -16 -48 -64 -16 -16 -48 -16 +-80 -16 -64 -32 -48 -32 -48 -32 -32 -48 -32 -32 -32 -48 -64 -16 -64 -32 -48 -32 -32 -32 -32 -16 0 -48 -64 0 -16 -48 -32 +-80 -16 -80 -32 -32 -32 -32 -32 -16 -32 -32 -32 -16 -32 -32 -16 -48 -16 -48 -32 -32 -32 -64 -16 16 -48 -48 0 -32 -48 -32 +-48 0 -80 -16 -32 -16 -16 -32 0 -16 -16 -16 0 0 -16 -16 -48 0 -32 -16 -16 0 -48 -16 32 -32 -32 0 -16 -16 -16 +0 -16 -64 0 0 0 0 -16 0 0 0 0 0 0 0 0 -16 16 0 0 -16 0 -32 0 32 0 0 16 -16 16 -16 +16 -16 -48 0 0 0 16 0 0 16 16 0 0 16 0 0 0 16 16 0 0 16 -16 0 48 16 32 16 -16 32 16 +32 0 -32 16 0 0 0 0 0 16 0 16 16 32 0 0 16 32 16 16 0 16 16 0 16 32 32 32 0 32 16 +16 -16 -16 32 0 16 0 -16 0 16 0 0 0 16 0 -16 32 16 32 16 0 16 32 0 0 32 32 32 0 16 16 +16 -32 0 0 0 0 -16 -16 0 16 0 0 0 0 -16 -16 32 16 32 32 0 0 48 -16 0 32 16 32 0 16 32 +0 -32 0 -16 0 -16 -16 -16 -16 0 -16 0 -32 -16 -16 -16 0 0 16 16 0 -16 64 -16 -32 16 16 16 0 -16 16 +-16 -48 16 -32 -16 -32 -32 -16 0 -32 -32 -16 -32 -48 -16 -16 0 -16 0 0 -16 -16 32 -16 -32 -16 -16 -16 0 -32 -16 +-48 -48 0 -32 -32 -48 -48 -32 -48 -48 -48 -32 -32 -64 0 -16 -16 -48 -32 -16 0 -16 -16 -32 -64 -16 -32 -48 0 -48 -48 +-48 -64 0 -48 -16 -64 -48 -48 -48 -48 -48 -48 -64 -48 0 -16 -48 -48 -48 -48 0 -32 -32 -32 -64 -32 -48 -80 -16 -48 -64 +-64 -64 -16 -64 -32 -48 -32 -48 -64 -64 -64 -64 -32 -32 0 -16 -32 -64 -32 -64 -32 -48 -48 -32 -48 -48 -64 -96 -16 -64 -80 +-48 -32 -16 -48 -32 -48 -48 -48 -48 -96 -64 -64 -48 -48 -16 -16 -48 -64 -64 -80 -16 -32 -80 -32 -32 -64 -64 -112 -32 -48 -80 +-32 -16 -32 -48 -48 -48 -32 -48 -48 -80 -64 -80 -32 -32 -48 -32 -48 -48 -48 -80 -32 -16 -64 -32 -48 -64 -48 -80 -48 -48 -80 +-32 16 -32 -48 -48 -48 -32 -48 -48 -64 -64 -80 -32 -16 -64 -48 -48 -32 -32 -64 -48 -16 -32 -16 -16 -48 -32 -64 -32 -48 -64 +-32 16 -32 -16 -48 -32 -16 -32 -32 -32 -32 -48 -16 -16 -80 -48 -48 -16 -32 -48 -48 -32 -32 -16 -16 -32 -48 -48 -48 -16 -32 +-16 0 -32 -32 -32 -16 0 -32 -16 -16 -32 -32 -32 -16 -64 -48 -32 -16 -16 -16 -48 -32 -16 0 0 -16 -32 0 -48 0 -16 +0 0 -48 -16 -16 -16 0 -32 0 0 -16 -16 -16 -32 -48 -16 -32 0 -16 16 -48 -16 0 -16 0 0 -32 16 -32 0 0 +16 0 -32 -16 -16 -16 -16 -16 -16 16 0 0 -32 0 -16 0 -32 0 0 16 -48 -32 -16 -16 0 16 -32 0 -32 0 16 +32 -16 -32 0 -16 -16 -32 -16 0 16 0 0 -16 0 16 0 -16 -16 0 16 -32 -48 -16 -16 -16 16 -16 16 -16 0 16 +16 -16 -48 0 -16 -16 -64 0 -16 16 0 -16 -16 0 32 0 -16 -16 0 0 -32 -48 -48 -16 -32 0 -16 -16 0 -16 16 +16 -32 -16 0 0 -16 -64 0 -16 0 0 0 -16 -32 32 0 -16 0 -16 -16 -16 -48 -64 -16 -32 -16 -16 -16 -16 -48 0 +16 -32 -16 0 -16 -16 -64 -16 -32 -16 -16 -16 -16 -32 0 0 0 -16 -32 -16 0 -32 -64 -16 -32 -32 -16 -32 -16 -64 -16 +0 -48 -16 -16 -16 -16 -64 -16 -16 -32 -16 -16 -16 -32 -16 -32 0 -16 -32 -32 0 -16 -64 -32 -32 -48 0 -32 -32 -64 -48 +-16 -16 16 -32 -32 -16 -48 -32 -48 -48 -32 -32 0 -48 -32 -32 -16 -32 -32 -32 0 0 -48 -32 -16 -48 -16 -16 0 -96 -64 +-32 0 16 -32 -16 -16 -32 -32 -32 -32 -32 -16 -16 -48 -48 -32 0 -32 -32 -32 0 0 -16 -16 -16 -48 -32 -16 0 -64 -80 +-48 -16 32 -16 -16 -16 -16 -48 -16 -32 -16 -16 -16 -32 -48 -32 0 -32 -32 -16 -16 0 0 -32 0 -32 -48 -16 -16 -32 -80 +-64 16 16 0 -32 -32 0 -32 0 -32 -16 0 0 -32 -32 -32 -16 -32 -32 -16 -32 0 16 -16 0 -16 -16 0 0 0 -48 +-48 0 0 0 -16 -32 16 -16 0 -16 -16 16 0 0 0 -16 0 0 -32 0 -48 -16 16 0 -16 0 -16 0 -16 16 -16 +-32 16 16 0 0 -16 32 -16 0 -16 -16 0 -16 16 0 -16 0 0 0 -16 -32 -16 0 0 0 0 0 0 0 32 0 +-32 16 16 0 0 0 16 0 0 0 -16 0 -16 16 0 -16 -16 -16 0 0 -16 -32 0 0 0 0 16 0 -16 16 16 +16 16 0 0 16 0 16 16 0 0 0 0 -16 16 0 -16 -16 0 0 -16 -16 -16 -16 0 0 0 0 -16 -48 0 32 +0 16 0 0 0 0 0 16 -16 -32 -16 -16 0 16 -16 -16 -32 -16 16 -16 0 0 -16 -16 -16 -32 32 -16 -48 -16 16 +16 0 0 0 0 0 0 0 -32 -32 -16 -16 -16 0 -32 0 -48 -16 0 -32 0 0 -32 -16 -16 -16 0 -32 -48 -32 16 +16 0 0 0 0 0 0 0 -32 -32 0 -16 0 -16 -48 0 -64 -32 -16 -32 -16 16 -16 0 -16 -32 -16 -32 -32 -48 0 +16 0 0 -32 32 0 -16 -16 -32 -48 -16 0 -16 -32 -48 0 -48 -16 -16 -16 -16 32 -32 -16 -16 -16 -16 -32 -32 -32 -32 +0 -16 -16 -16 -16 16 -16 -32 -16 -32 -16 -16 -16 -16 -16 -16 -48 -16 -16 -16 -16 16 -16 0 -16 0 -32 -16 -16 -16 -32 +0 -32 0 0 0 0 -16 -32 0 -16 0 -16 0 -32 0 -32 -16 0 -16 0 -16 0 -16 0 -32 16 -32 -16 0 -16 -32 +-16 -32 0 16 -16 16 0 -32 0 0 16 0 0 -16 16 0 0 0 -32 -16 -32 0 -16 16 -16 32 -32 -16 0 0 -48 +-16 -16 0 0 -16 0 0 -16 0 16 16 0 0 0 16 -16 32 0 -32 0 -32 -32 -16 0 0 16 0 0 16 16 -16 +-32 -16 -16 16 0 0 16 0 16 32 0 16 32 16 16 16 48 0 -16 0 0 -32 0 0 16 16 0 16 16 32 -16 +-32 0 0 0 0 0 0 16 32 48 16 0 0 16 16 16 48 0 -16 16 -32 -32 16 0 32 0 16 16 32 32 16 +-16 0 0 0 0 0 16 32 16 32 16 16 16 16 0 16 48 0 0 16 16 -16 16 0 32 -16 32 16 16 0 16 +0 16 0 16 0 0 32 64 16 32 16 32 16 16 16 16 32 0 32 16 0 -16 16 0 32 0 32 16 16 0 32 +0 32 0 0 16 0 32 48 16 16 16 32 16 16 16 16 16 0 32 32 16 32 16 0 32 0 32 32 16 0 32 +16 16 0 16 16 0 0 48 16 16 16 16 16 16 0 -16 0 0 16 16 32 16 32 16 16 0 0 16 0 16 32 +16 32 16 16 16 16 0 32 16 16 16 16 16 16 0 -16 -16 16 32 0 48 32 32 16 0 16 16 16 16 0 16 +16 0 16 16 0 0 -16 16 16 0 16 -16 0 16 16 -16 -16 0 32 0 48 32 32 16 0 16 0 -16 0 0 0 +32 0 16 0 -16 0 -32 -16 0 0 0 0 0 16 32 -16 -32 0 16 -16 32 32 16 0 -16 32 0 -32 -16 0 0 +16 0 0 -16 -16 -16 -32 -32 -16 -32 -16 0 -16 16 16 -16 -16 -16 0 -32 16 -16 -16 0 -32 32 -16 -48 -32 0 0 +0 0 -16 -32 -16 -32 0 -64 -16 -16 0 0 -16 -32 0 -16 -32 16 0 0 0 0 0 -16 16 -16 0 -16 -16 -16 -32 +16 16 0 0 0 -16 -16 -16 -16 0 -16 0 0 16 0 48 16 -16 -16 0 0 -16 -16 -16 -16 0 -16 -32 -16 0 0 +0 0 -16 -32 0 -48 -16 -32 -32 -32 -16 0 -16 -16 -32 48 -16 -16 -48 -32 -32 -16 -32 -32 -16 -16 -32 -48 -32 -16 -32 +-16 -16 -48 -32 -32 -48 0 -32 -32 -32 -16 -16 -32 -32 -32 16 -16 -16 -80 0 -64 -32 -16 -48 0 -48 -32 0 0 -32 -48 +16 0 -16 16 0 -16 48 16 0 0 0 16 32 0 -16 32 16 0 -48 0 -16 0 16 0 0 -16 -16 16 16 32 0 +0 -16 -16 0 -16 0 16 16 -16 0 -32 0 0 0 -32 16 0 -16 -64 16 -48 -16 0 -16 0 0 0 16 48 0 0 +32 -16 0 16 16 16 48 16 16 32 0 32 32 0 0 -16 16 32 -48 32 -16 16 16 32 32 16 48 48 48 48 16 +32 0 16 48 32 64 80 64 32 48 32 32 48 48 48 0 48 48 16 48 32 32 48 48 32 48 80 80 64 48 48 +64 16 64 80 48 64 32 64 48 48 48 32 64 64 80 32 64 48 64 48 64 48 32 64 16 64 64 32 48 64 64 +0 -32 48 16 16 48 -16 48 16 0 16 -32 16 32 16 16 48 -16 64 -16 48 0 -32 32 -16 32 0 -16 -16 16 32 +-32 -48 -16 -48 -32 -16 -64 -16 -48 -64 -16 -48 -48 -16 -32 -16 -32 -64 32 -48 0 -48 -64 -16 -48 -32 -48 -64 -64 -48 -16 +-64 -64 -32 -64 -48 -64 -80 -48 -64 -48 -48 -64 -80 -64 -64 -32 -80 -64 16 -48 -32 -64 -80 -48 -16 -48 -64 -32 -64 -80 -48 +-16 0 -32 -32 -32 -48 -48 -48 -16 -16 0 -16 -32 -48 -16 -16 -64 0 48 -16 -16 -32 0 -16 16 -48 -32 0 0 -48 -48 +32 32 0 16 0 0 -16 0 0 16 48 32 0 0 0 16 -16 32 64 16 16 16 32 32 48 -16 16 48 32 0 16 +48 64 32 32 32 16 -16 16 32 48 32 48 32 32 32 32 16 48 48 16 32 48 64 32 64 48 16 48 48 32 48 +32 64 16 16 32 32 16 16 32 48 32 48 48 32 48 32 32 48 32 32 32 48 48 32 48 48 16 32 32 32 32 +32 32 16 32 0 16 0 0 16 16 16 16 32 16 32 16 32 32 -16 16 16 16 32 16 0 48 16 16 16 32 32 +16 0 0 -16 -16 16 0 -16 0 0 -32 0 0 0 16 -16 32 0 -48 -32 0 0 0 -16 -32 48 0 -16 -16 16 0 +-32 -48 -32 -32 -32 -16 -32 -32 -32 -48 -48 -32 -32 -16 -16 -32 0 -32 -64 -48 -32 -32 -48 -64 -48 -16 -32 -80 -48 -16 -32 +-48 -64 -64 -48 -64 -64 -16 -48 -64 -64 -64 -64 -48 -48 -48 -48 -32 -64 -48 -32 -64 -32 -64 -80 -64 -48 -32 -80 -64 -32 -64 +-48 -64 -64 -32 -48 -48 -16 -48 -48 -64 -64 -64 -48 -48 -48 -48 -32 -64 -48 -16 -64 -32 -48 -64 -48 -64 -16 -48 -48 -48 -64 +-32 -48 -32 -16 -16 -32 0 -32 -16 -32 -16 -16 -16 -16 -32 -32 -48 -48 -16 0 -48 -16 -32 -32 0 -80 0 -16 0 -32 -48 +16 -16 0 16 16 0 16 0 32 0 32 0 16 16 0 -16 -16 -16 16 32 0 0 0 16 16 -32 32 32 32 0 16 +48 32 48 64 48 32 32 48 32 32 48 32 48 32 16 0 0 0 32 48 16 32 32 48 48 0 48 64 48 32 48 +64 48 64 64 48 48 48 64 48 48 64 32 48 48 32 32 32 16 16 32 48 48 32 48 48 48 48 80 32 32 64 +48 48 80 48 32 48 16 64 48 32 48 32 32 32 32 32 48 32 0 0 48 32 16 32 32 64 16 48 16 32 48 +16 32 64 32 16 32 0 32 16 32 0 0 16 32 16 0 32 32 -32 0 48 0 0 16 0 48 0 0 -16 16 32 +-16 0 32 -16 -16 -16 -32 -16 0 -16 -16 -16 -16 0 -16 0 0 -16 -64 -64 0 -32 -32 -16 -32 16 -32 -32 -48 -16 -16 +-48 -16 -32 -32 -48 -48 -48 -32 -48 -32 -64 -32 -32 -32 -32 0 -32 -48 -64 -64 -32 -64 -48 -48 -48 -16 -48 -48 -64 -32 -64 +-64 -32 -48 -48 -48 -64 -48 -48 -48 -48 -64 -32 -32 -32 -32 0 -32 -48 -64 -64 -64 -64 -64 -48 -48 -32 -48 -80 -48 -48 -64 +-48 -32 -32 -32 -48 -48 -32 -48 -48 -32 -48 -32 -32 -32 -32 0 -48 -32 -32 -32 -80 -48 -48 -32 -16 -48 -32 -32 -16 -48 -64 +-16 0 -32 -32 -16 0 -16 -32 -32 -32 -16 -32 -16 -32 0 0 -48 -16 0 -16 -48 -16 0 0 0 -48 -16 0 16 -16 -32 +16 16 16 0 16 0 16 0 0 16 16 0 16 -16 16 16 0 16 32 16 -16 16 32 16 32 -16 0 16 32 0 0 +32 48 16 32 48 16 16 16 16 48 48 32 48 0 48 32 16 48 32 32 16 32 64 48 48 16 32 32 48 32 32 +32 64 48 32 48 48 16 32 32 32 48 16 32 0 48 0 32 64 32 32 32 48 64 64 32 32 32 48 32 32 48 +32 48 32 32 32 48 0 32 32 16 32 16 16 0 32 -16 32 48 16 16 48 16 32 32 16 32 32 32 16 16 48 +0 16 16 0 16 16 0 0 0 0 0 16 0 -32 16 -32 16 0 -16 16 32 0 0 -16 0 16 0 0 -16 0 16 +0 -16 -16 -16 -16 0 -16 -16 0 -16 -32 0 -16 -32 0 -32 0 -16 -32 0 16 -32 -32 -32 -16 0 -16 -32 -32 -16 0 +-16 -48 -32 -16 -32 -16 -32 -16 -32 -32 -48 -16 -32 -32 -32 -32 -16 -32 -32 -16 0 -48 -48 -48 -32 -16 -48 -32 -48 -32 -16 +-16 -64 -48 -16 -48 -16 -48 -48 -16 -32 -32 -16 -32 0 -48 0 -16 -64 -16 -16 -16 -48 -48 -48 -48 -32 -16 -32 -48 -32 -32 +-16 -32 -32 -16 -16 -32 0 -16 0 -16 -32 -16 -16 16 -48 0 0 -48 0 -16 -16 -16 -48 -32 -16 -16 -16 -16 -32 -16 -32 +0 -16 0 0 0 -16 0 16 16 16 16 0 16 64 -16 32 0 -16 16 16 -16 0 -16 -16 0 -16 0 0 16 -16 -16 +16 16 16 16 16 -16 32 32 32 32 32 16 16 64 0 32 0 16 16 16 0 32 16 16 0 0 16 16 48 16 16 +32 48 48 32 16 0 48 48 16 16 48 32 16 80 16 32 16 32 16 16 16 48 32 32 32 16 32 16 32 32 32 +32 48 48 32 16 16 32 32 32 16 48 32 48 48 16 32 0 32 16 16 16 48 32 32 16 32 32 16 16 48 32 +16 48 32 16 16 16 16 32 16 16 16 32 0 32 0 0 0 16 0 0 16 16 16 32 16 32 16 16 16 48 32 +16 16 0 0 0 16 0 0 0 -16 0 0 0 -16 0 0 -16 -16 0 0 16 0 0 0 0 0 0 0 0 32 0 +0 16 -32 -16 -16 -16 -32 -32 -16 -16 -32 -32 -16 -32 -16 -16 -16 -32 -32 -16 -16 -16 -16 -16 0 -32 -16 16 -16 0 -16 +-32 0 -32 -32 -16 -16 -32 -32 -16 -16 -32 -32 -32 -48 -32 -32 -16 -32 -16 -16 -32 -32 -32 -32 -16 -32 -16 0 -32 -16 -32 +-32 -16 -32 -16 0 -16 -16 -16 -16 -16 -32 -32 -16 -48 -16 -16 -16 -32 0 -16 -16 -16 -16 0 0 -32 0 0 -16 -16 -32 +0 -16 0 0 0 -16 0 -16 -16 0 -16 -32 -16 -16 -16 0 0 -16 16 -16 -16 0 16 0 16 -16 0 0 0 -16 -16 +0 -16 16 16 32 0 16 16 0 16 16 0 0 16 16 0 16 0 16 0 0 16 32 16 32 0 16 32 32 0 0 +16 -16 32 32 16 16 16 16 0 16 48 16 32 16 32 16 32 32 16 16 32 32 32 16 48 16 16 32 48 16 16 +16 0 32 48 32 16 48 32 0 16 32 48 32 32 32 16 32 32 32 32 48 48 48 48 32 32 16 16 16 16 16 +16 0 32 48 16 16 32 32 16 16 32 64 32 16 32 16 32 32 16 16 32 32 32 48 0 48 0 0 0 16 32 +16 0 0 48 16 16 16 32 16 0 0 32 16 0 16 16 16 16 0 16 16 16 32 16 -16 32 -16 -16 0 0 0 +0 -16 0 16 0 0 0 0 0 0 -16 16 0 -16 16 0 16 -16 0 16 0 0 0 -16 -16 16 -32 -32 -16 0 0 +-16 -16 -16 0 -16 0 -32 -16 0 0 -32 0 0 -16 0 0 0 -16 0 0 0 -16 0 0 -16 0 -16 -16 -16 0 0 +-32 0 -16 -32 -16 0 -32 -16 0 -16 -32 -16 0 -16 -16 0 0 -16 16 0 -32 -16 -16 -16 -16 -16 0 -32 -16 -16 -16 +-16 16 0 -48 -16 0 -16 0 0 0 -16 -32 -16 0 0 0 0 -16 0 -16 -16 -16 -32 0 0 0 32 -16 0 0 -16 +16 16 16 -64 0 0 0 0 16 16 16 -16 16 0 16 16 16 16 0 0 0 0 -16 16 32 0 32 0 16 0 0 +0 32 32 -80 0 32 16 0 16 32 48 0 16 32 32 16 32 32 0 16 0 16 0 16 32 16 48 16 32 16 0 +32 48 64 -32 16 16 16 16 16 32 64 16 32 48 32 16 32 48 16 16 16 32 16 32 48 16 48 32 32 16 16 +32 32 48 0 16 32 32 16 16 32 48 32 48 32 32 32 16 32 16 16 32 16 16 16 48 32 32 32 32 16 0 +32 32 32 32 32 16 16 16 0 16 32 32 16 32 16 16 16 16 0 0 16 32 16 16 32 16 16 32 16 0 0 +16 16 16 80 0 16 16 16 0 0 -16 16 16 0 0 16 0 -16 0 0 16 16 0 0 -16 16 0 0 16 16 0 +0 0 -32 96 -16 0 0 0 -16 -16 -48 16 0 0 0 0 -16 -32 0 0 0 0 0 -16 -16 0 -16 -16 0 0 0 +0 -32 -16 80 -32 -16 0 -16 -16 -16 -48 -16 0 -16 -16 -16 -16 -32 -16 -16 0 -32 -16 -16 -16 -16 -32 -16 0 -16 -16 +0 -16 -32 64 -16 -32 -16 -16 -32 -16 -32 -16 -16 -32 -32 -16 -32 -32 -16 -16 -16 -32 -16 -16 -16 -32 -16 -16 0 -16 -16 +0 0 -32 32 0 -16 0 0 -16 -16 -32 -16 -16 -16 -32 -16 -32 0 -16 -16 -16 -32 0 0 -16 -16 -16 0 -16 -16 -16 +0 0 -16 0 16 -16 0 0 0 0 16 -16 0 0 -16 0 -16 16 0 16 -16 -16 0 0 0 0 0 16 0 0 0 +16 0 16 -16 16 0 16 0 0 0 32 0 16 16 16 0 0 16 16 16 0 -16 16 16 0 0 16 32 16 16 16 +0 16 16 -32 16 16 32 16 16 16 32 0 16 32 32 16 32 32 0 16 0 0 32 32 16 16 16 16 16 16 16 +32 0 16 0 32 32 0 16 32 32 48 16 16 32 32 16 32 16 16 16 0 16 16 0 16 32 0 0 16 16 16 +32 16 48 0 0 32 0 16 16 32 16 0 0 16 32 32 32 0 0 16 16 32 0 16 32 32 16 0 0 16 16 +16 16 16 32 0 16 -16 0 0 16 0 0 16 16 32 16 16 -16 0 16 32 32 0 0 16 16 0 -16 -16 16 0 +0 0 0 16 0 0 -16 0 0 0 -16 16 0 16 0 16 16 -16 0 16 16 32 -32 0 16 0 0 -32 0 0 0 +0 -16 0 32 -16 0 -16 0 0 0 -16 0 0 16 16 16 16 0 0 0 16 0 -16 0 16 0 -16 -16 -16 0 0 +0 0 16 16 -16 -16 -16 0 16 16 -16 16 16 16 0 0 0 0 0 -16 0 16 0 -16 0 -16 0 0 0 -16 -16 +0 16 16 -16 0 0 16 16 32 16 16 0 16 32 0 0 16 0 0 -16 0 0 0 0 16 0 16 16 16 0 0 +0 32 16 -32 0 16 32 16 32 0 16 0 32 16 0 -16 0 16 0 -16 0 -16 16 0 16 16 16 32 32 16 0 +16 32 16 -16 16 16 32 0 16 0 32 0 32 32 16 0 0 16 16 0 16 0 32 32 16 16 16 48 32 0 0 +16 32 16 -16 32 16 16 16 0 16 32 32 16 32 16 16 0 32 0 0 0 0 16 16 0 16 32 48 16 32 0 +32 32 0 0 32 16 16 16 -16 0 0 32 16 16 0 0 0 16 0 16 0 0 16 0 -16 0 0 32 16 16 0 +16 16 0 0 16 0 0 0 0 0 -16 32 0 0 16 -16 0 -16 0 16 0 0 0 0 -16 -16 0 0 16 16 0 +16 16 0 16 0 0 -16 -16 -16 0 -16 16 0 0 0 16 0 -32 0 16 16 0 0 -16 -16 0 0 -16 0 0 0 +16 0 -16 32 16 0 0 -16 -16 0 0 0 0 -16 0 0 0 -16 0 16 0 0 0 0 0 16 -16 -32 0 0 0 +0 -16 0 16 16 0 0 -16 0 16 0 0 0 -16 0 16 -16 -16 0 16 0 0 0 0 0 0 0 -32 0 -16 0 +16 -16 0 0 0 0 0 0 16 0 0 0 0 -16 0 0 0 16 0 -16 0 0 0 0 16 0 0 -16 0 -16 0 +0 -16 16 0 0 0 32 16 32 0 32 -16 0 0 0 0 16 32 0 -16 0 0 16 16 32 -16 16 0 0 -16 16 +0 0 32 -32 16 0 16 32 32 0 16 -16 16 16 16 16 0 16 0 0 0 0 16 32 32 0 16 16 0 0 16 +0 0 16 0 16 0 16 32 32 16 16 0 0 16 0 16 16 32 16 0 0 16 0 16 32 16 16 16 0 0 16 +0 16 16 0 16 16 0 16 16 16 16 0 16 16 0 0 16 16 16 0 0 0 0 32 32 16 16 16 16 16 0 +16 16 16 16 16 16 0 0 16 0 16 16 0 0 0 0 32 0 0 0 0 16 0 16 16 32 0 0 0 16 0 +0 0 0 16 0 0 -16 -16 0 0 -16 16 0 -16 0 0 16 -16 0 16 -16 0 -16 0 0 16 0 0 -16 0 -16 +-16 0 -16 16 -16 -16 -16 -16 0 -16 -16 16 0 -32 0 -16 16 -32 0 0 0 0 0 -16 -16 0 0 0 0 0 -16 +-16 0 -16 16 -16 -16 -16 -16 -16 0 -16 0 0 -32 0 -32 0 -32 0 0 0 -16 0 -32 -16 0 16 16 0 -16 -16 +-16 0 -16 0 -16 -16 -16 0 -16 0 -16 0 0 -16 0 -16 -16 -16 0 0 0 -16 0 -16 -16 0 16 16 0 -16 -16 +-16 0 0 0 0 0 0 0 -16 0 -16 -16 0 0 0 0 -16 16 0 0 -16 -16 0 -16 0 -16 0 0 0 -16 -16 +0 0 0 0 -16 32 0 16 0 0 0 -32 0 16 16 0 -16 32 16 0 0 0 16 0 0 0 0 16 0 0 0 +16 32 16 0 16 16 16 16 0 0 0 -16 0 0 0 0 -16 32 0 0 16 0 0 16 0 0 0 16 0 0 16 +16 32 16 0 16 32 16 32 0 16 16 -16 0 16 16 16 0 32 16 0 32 16 16 16 0 0 0 0 0 0 16 +48 16 16 16 16 32 16 16 0 0 0 16 0 16 16 16 0 16 0 0 32 0 0 32 16 0 0 0 0 16 32 +32 16 0 16 16 0 16 -16 0 0 0 16 0 16 0 32 0 0 16 0 32 16 0 0 0 16 0 0 0 16 16 +16 0 0 16 0 -16 0 -16 0 0 0 32 0 0 0 16 16 -16 0 0 16 0 0 0 16 16 0 -16 0 16 0 +16 -16 0 32 0 -16 0 -16 0 0 0 32 0 0 0 16 16 -32 0 0 0 0 0 0 16 0 -16 0 0 0 -16 +0 -32 0 0 -16 -16 -16 -16 0 0 0 16 0 0 0 16 0 -16 0 -16 -16 0 -16 0 0 16 0 -16 16 0 -16 +0 -32 0 0 0 -16 -16 0 0 0 0 0 0 0 0 0 16 0 -16 -16 -16 -16 0 0 16 0 0 0 0 0 0 +0 -16 0 -16 0 -16 -16 0 16 0 16 -16 0 16 0 0 0 0 0 -16 -16 0 0 0 0 0 0 0 16 0 0 +0 16 0 0 0 0 0 16 16 0 16 -32 16 0 16 -16 0 16 0 0 0 -16 0 0 0 0 0 0 0 0 0 +0 32 0 0 0 16 0 32 16 16 16 -16 0 32 16 0 0 16 0 16 16 0 0 16 16 0 16 0 0 0 0 +0 32 32 16 16 16 16 0 16 16 0 0 0 16 16 0 16 16 16 0 0 16 16 16 0 16 16 16 16 0 0 +16 32 16 32 0 32 16 0 16 32 0 0 16 16 32 0 16 0 0 0 16 0 16 16 0 16 0 16 0 0 16 +16 16 32 16 0 0 16 0 0 0 0 16 16 16 0 0 0 -16 0 0 16 0 32 16 0 16 0 0 -16 0 16 +0 -16 16 32 0 0 0 -16 0 16 0 16 16 0 0 0 0 0 0 0 16 16 16 0 -16 32 16 16 0 16 0 +0 -16 16 32 0 -16 0 0 0 16 0 32 16 0 0 -16 0 -16 0 0 0 0 0 0 0 0 16 0 0 16 16 +16 -32 0 16 16 -16 16 0 0 0 -16 16 16 -16 0 -16 0 0 0 0 0 0 -16 0 0 0 0 0 16 16 16 +0 0 0 -16 0 -16 0 0 0 -16 0 0 16 -16 0 0 0 0 0 0 0 0 0 0 16 16 16 0 0 0 0 +0 16 0 -32 16 0 0 16 0 -16 0 0 0 0 0 0 -16 16 0 0 0 0 0 16 32 -16 0 0 16 -16 0 +16 16 16 -16 16 16 0 16 0 0 0 0 0 16 0 0 0 0 0 0 0 -16 0 32 32 0 -16 0 16 0 0 +16 32 0 -16 16 16 16 0 16 0 0 -16 0 32 0 0 0 16 0 0 -16 0 0 16 16 0 0 16 16 0 0 +0 0 0 0 16 16 0 0 0 0 0 0 0 0 0 16 16 0 0 -16 0 0 0 0 0 0 0 0 0 16 0 +0 0 0 -16 0 0 16 0 0 0 0 0 0 16 0 16 16 0 0 -16 0 16 0 0 0 16 16 -16 0 16 -16 +0 0 0 0 -16 0 0 0 0 0 0 0 0 16 0 0 16 -16 0 0 16 0 0 -16 -16 0 0 -16 0 16 -16 +16 0 0 16 -16 0 -16 0 -16 0 -16 0 0 0 0 -16 0 -16 16 0 0 16 0 -32 -32 0 16 0 0 16 -16 +0 0 0 16 -16 0 0 0 0 16 16 16 16 0 16 0 0 0 0 0 0 0 0 -16 -16 0 16 0 -16 16 0 +0 0 0 16 0 0 16 16 16 0 16 0 16 0 16 16 0 -16 0 0 0 0 0 0 0 0 16 0 -16 0 0 +-16 16 -16 0 0 0 0 0 0 0 16 0 16 0 0 16 0 0 0 0 -16 0 0 16 0 0 16 16 -16 0 0 +0 16 0 16 0 0 16 0 0 16 0 0 16 0 0 0 0 0 0 0 16 0 0 16 16 0 0 16 0 -32 16 +0 16 0 0 0 16 16 0 0 0 0 0 0 16 16 16 16 16 0 0 0 0 16 16 16 0 16 16 0 -32 16 +0 16 0 0 0 16 0 0 0 0 0 -16 0 0 0 0 0 16 0 0 16 0 16 16 0 16 0 0 16 0 0 +0 0 16 0 16 0 -16 0 16 0 0 0 -16 0 0 0 0 0 0 0 0 0 16 16 16 0 0 0 0 0 0 +0 0 32 -16 16 16 -16 0 0 0 0 0 0 16 0 0 0 0 0 16 0 16 16 0 16 0 0 0 16 16 0 +16 0 16 0 0 0 0 0 0 16 16 0 0 0 0 0 0 0 -16 0 0 0 0 -16 16 0 0 0 0 16 -16 +0 -16 0 16 0 -16 0 0 0 0 0 16 -16 0 0 0 0 -16 0 0 0 16 0 -16 0 0 0 0 16 48 0 +16 0 32 0 -16 -16 0 0 -16 0 0 0 0 0 0 0 0 0 0 16 0 0 0 16 0 0 0 0 0 16 0 +0 0 0 0 -16 0 0 16 0 0 16 16 16 16 0 16 0 0 0 16 0 16 0 0 0 0 0 0 0 16 0 +16 0 0 0 16 16 16 16 0 0 0 -16 16 16 0 16 0 0 0 0 0 0 0 16 0 0 16 0 0 0 0 +16 0 0 0 16 16 0 16 0 16 0 -16 16 16 0 0 0 0 0 0 0 -16 0 16 0 0 16 0 0 -16 16 +16 16 0 0 32 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 -48 16 16 0 0 0 0 0 -16 0 +0 0 0 16 16 16 0 0 0 16 0 -16 0 16 0 0 0 0 0 -16 16 -48 0 0 0 16 0 16 0 0 0 +0 0 16 32 0 16 0 -16 0 0 0 16 0 0 0 0 0 -16 16 0 0 -64 0 -16 0 16 0 0 -16 -16 -16 +0 -16 16 32 0 0 0 0 0 0 -16 32 0 0 0 0 16 -16 0 0 0 -32 16 0 16 16 0 0 0 -16 -32 +0 0 16 16 0 0 16 0 16 0 -16 16 16 -16 0 0 16 16 0 0 0 0 0 0 16 0 0 0 0 0 -32 +0 0 16 16 0 0 0 0 16 0 16 0 0 0 0 0 16 16 0 0 0 32 0 0 16 0 16 0 16 0 0 +0 0 16 0 0 0 0 0 16 0 0 -16 16 0 16 -16 0 16 0 0 0 64 0 0 16 0 0 16 16 16 0 +16 16 16 0 16 0 0 0 16 0 16 -16 16 16 0 0 16 32 0 0 0 80 0 0 16 16 16 16 16 0 16 +0 0 16 0 16 0 0 0 16 16 16 0 32 16 0 0 16 16 0 0 0 96 0 16 16 0 32 16 16 16 16 +16 16 16 0 16 0 0 16 32 16 0 0 16 16 16 0 0 0 0 0 16 80 16 16 16 16 32 16 16 0 16 +32 16 16 0 32 16 16 16 16 0 0 16 16 16 0 16 -16 -16 0 0 0 48 16 16 16 16 16 0 0 16 16 +16 32 0 16 0 16 0 16 0 0 0 16 0 32 0 16 0 -48 16 0 16 0 16 0 16 16 0 0 0 16 16 +16 16 0 0 0 0 0 16 0 0 0 0 0 16 16 0 0 -48 16 0 0 -16 0 16 16 0 0 0 0 16 16 +32 0 0 0 0 0 0 0 0 0 0 16 0 0 0 16 16 -16 32 0 16 -32 0 0 0 16 0 0 0 32 16 +16 0 -16 0 -16 -16 0 -16 0 0 0 16 16 0 0 0 0 0 16 0 16 -32 16 0 0 16 0 0 16 16 0 +0 0 0 16 -16 -16 0 0 0 0 0 16 0 0 0 16 16 32 0 0 0 -16 16 0 0 0 0 0 0 0 0 +0 0 0 16 16 0 16 0 0 0 0 0 0 16 16 16 16 64 0 0 0 -16 0 0 0 16 0 0 0 0 0 +16 16 16 16 16 0 0 16 16 16 16 16 16 16 0 0 16 80 0 16 0 0 16 16 0 0 0 16 0 0 0 +0 0 32 16 16 0 16 16 16 16 0 0 16 16 16 0 0 96 -16 16 16 16 16 16 16 16 0 16 0 0 0 +0 0 32 0 16 16 16 0 16 0 16 0 16 16 0 0 0 64 0 16 16 16 16 32 16 16 0 16 16 0 0 +0 16 16 0 16 32 16 0 16 16 16 16 16 0 16 16 16 16 0 16 0 0 16 16 32 16 -16 0 0 0 0 +16 0 16 0 0 0 16 0 0 0 16 0 16 0 16 0 16 -16 0 16 16 0 0 0 32 0 0 0 0 0 -16 +16 0 16 16 16 16 0 0 0 16 0 16 0 0 16 16 16 -32 16 16 0 -16 0 0 16 0 16 0 0 0 0 +0 0 16 16 16 -16 0 0 16 0 0 16 16 0 0 16 0 -32 16 0 -16 -16 0 0 0 0 16 0 0 0 16 +0 16 0 16 0 -16 0 0 0 0 0 0 32 0 0 16 16 -16 32 16 0 -32 0 -16 0 0 32 0 0 16 0 +0 16 16 16 0 0 0 0 0 16 0 16 16 16 0 0 0 16 16 0 0 0 0 0 0 0 16 0 0 0 16 +0 0 0 0 0 16 0 0 0 16 0 16 16 0 0 0 0 16 0 0 0 0 0 0 0 16 16 0 0 0 16 +0 16 16 0 0 16 0 16 0 0 0 0 16 0 0 16 16 32 0 0 16 0 0 16 0 16 16 0 16 0 0 +0 16 0 0 0 16 0 16 16 0 0 0 0 16 0 0 0 16 0 0 16 0 16 16 0 16 16 0 16 0 0 +0 0 0 0 0 16 0 16 0 0 0 -16 0 0 0 0 0 0 0 0 16 0 0 16 16 0 0 0 0 0 0 +0 0 16 0 16 16 0 16 0 -16 0 0 0 16 0 16 16 -32 0 0 16 -16 0 0 16 0 -16 0 0 0 0 +0 16 0 0 16 0 0 0 16 16 0 0 0 16 16 16 16 -32 0 16 16 0 16 0 16 16 -16 0 0 16 0 +0 0 16 16 16 0 16 0 0 16 0 16 16 0 16 16 0 -32 16 16 16 0 0 0 16 16 0 0 -16 16 0 +0 0 16 16 16 -16 16 0 0 16 0 0 16 16 0 16 16 -32 16 16 16 0 0 16 0 0 0 16 0 0 0 +0 16 16 0 16 -16 0 0 0 16 -16 0 16 0 0 0 16 -16 0 0 0 16 0 0 0 0 0 0 0 0 0 +16 0 16 0 16 16 0 0 0 0 0 16 16 0 -16 16 0 16 0 0 0 16 0 0 -16 -16 0 16 0 0 16 +0 0 0 0 16 0 16 16 0 0 0 16 16 0 0 0 0 32 0 0 0 0 0 16 0 0 0 16 0 0 0 +0 -16 16 -16 16 0 16 16 0 -16 0 0 0 0 0 0 -16 32 0 -16 16 16 0 16 0 0 16 32 0 0 0 +0 0 0 0 16 16 0 0 0 -16 0 0 0 16 0 0 0 32 -16 -16 0 16 0 -16 16 0 16 0 16 0 0 +0 0 0 16 0 16 16 0 0 0 16 0 -16 16 0 32 0 0 0 0 0 0 0 0 0 0 16 0 16 0 0 +0 16 0 0 0 16 0 0 16 16 0 -16 0 0 16 0 16 -32 0 16 0 -16 0 0 32 0 0 0 16 16 0 +16 0 0 16 0 0 0 0 16 32 16 0 0 0 0 0 16 -48 0 0 16 0 16 0 32 0 0 0 0 0 0 +16 0 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 0 16 0 -16 0 0 16 -16 0 0 0 +0 0 0 0 0 0 -16 0 0 16 0 -16 16 0 0 16 0 0 32 0 0 16 0 0 0 0 0 -16 0 0 16 +-16 16 0 0 0 0 0 0 0 16 0 0 16 16 16 0 0 16 16 0 0 16 0 0 -16 0 16 16 0 0 16 +16 0 0 -16 0 0 0 0 0 0 0 16 16 16 16 0 0 16 16 0 0 16 0 0 -16 0 0 16 0 0 16 +16 0 0 0 0 16 0 0 16 -16 0 16 16 0 16 0 -16 32 0 0 0 16 0 16 -16 0 0 16 0 0 16 +16 16 0 0 0 16 0 0 -16 -16 16 16 16 0 0 0 0 16 0 0 0 0 0 16 0 16 -16 16 0 0 0 +16 0 16 0 16 0 16 16 0 0 16 16 0 0 0 0 0 16 0 0 0 0 0 0 16 0 0 16 0 0 16 +16 16 0 16 16 0 16 0 0 16 16 16 0 0 0 0 16 -16 -16 0 16 0 0 16 32 32 0 0 16 0 -16 +16 16 16 0 16 0 0 0 0 16 16 0 16 -16 0 0 16 -32 -16 16 0 0 0 16 16 16 16 0 0 0 0 +0 16 0 0 0 0 0 0 0 16 0 0 0 0 -16 0 0 -48 -16 0 16 0 0 0 16 16 0 0 0 0 0 +0 0 0 16 0 -16 16 0 16 16 0 0 0 0 -16 -16 -16 -48 -16 0 0 0 0 16 16 0 16 0 0 0 0 +0 0 0 16 16 0 0 16 16 16 0 -16 0 -16 -32 -48 -32 -32 -16 0 -16 16 16 -16 0 0 0 16 0 16 0 +0 0 16 32 16 0 0 16 16 0 0 0 -16 -32 -64 -80 -80 -32 -48 -16 -16 0 0 0 16 0 0 16 0 0 16 +0 16 16 16 0 0 0 0 16 0 0 -16 -48 -64 -96 -80 -96 -48 -64 -64 -16 0 0 0 0 0 0 0 -16 0 16 +0 0 16 0 16 16 0 16 0 -16 0 -48 -64 -80 -96 -112 -80 -16 -48 -64 -32 -16 -16 0 0 16 16 0 0 0 16 +16 -16 16 0 16 0 0 0 0 -16 -32 -64 -96 -96 -64 -48 -32 16 -48 -48 -48 -16 -16 0 0 0 16 0 0 16 16 +16 0 0 0 0 0 0 0 0 -16 -48 -80 -80 -48 64 64 48 96 0 -16 -32 -48 -16 0 0 0 16 0 0 0 0 +16 0 0 0 0 0 0 -16 -16 -16 -64 -48 0 48 208 208 208 208 80 48 -16 -32 -32 0 0 0 0 0 16 0 0 +0 0 0 0 0 0 0 0 -16 -16 -64 0 96 192 352 368 352 304 192 128 0 -16 -16 0 0 -16 0 0 16 0 0 +16 0 0 16 0 0 16 0 -16 -16 -32 64 208 320 448 448 400 352 272 208 48 0 -16 -16 -16 0 0 0 0 16 0 +16 0 16 0 0 -16 0 0 -16 -16 0 160 320 416 400 400 368 304 304 240 112 48 0 -16 -16 0 0 0 0 0 0 +0 16 0 0 0 0 0 16 0 -16 80 256 352 384 256 240 224 176 272 240 160 96 16 -16 -16 16 0 0 16 16 0 +-16 0 16 16 0 0 0 -16 0 16 160 288 320 240 16 0 0 -16 176 176 192 112 32 0 -16 0 0 0 16 0 16 +16 16 16 16 0 16 0 -16 -16 64 240 288 192 16 -256 -272 -256 -240 0 80 208 128 80 0 0 16 0 0 16 -16 0 +0 16 16 16 0 0 -16 0 16 96 256 192 -16 -208 -480 -496 -464 -416 -208 -64 160 144 80 16 16 16 0 16 0 0 0 +0 16 16 16 0 0 0 -16 32 144 224 32 -240 -432 -592 -592 -576 -512 -352 -208 80 128 112 48 16 0 16 16 0 0 16 +0 16 16 0 0 0 0 0 80 160 128 -128 -416 -528 -544 -544 -528 -480 -448 -304 -16 64 112 64 32 0 0 0 0 0 0 +0 0 0 0 0 0 -16 16 96 160 0 -304 -464 -496 -368 -352 -352 -336 -416 -352 -128 16 112 80 32 0 0 0 0 16 0 +0 0 0 -16 0 0 0 32 144 128 -144 -400 -416 -336 -112 -96 -112 -128 -304 -320 -208 -48 80 80 48 -16 0 -16 0 0 0 +0 0 0 0 0 -16 0 48 144 48 -240 -400 -288 -112 160 160 144 80 -144 -208 -288 -144 32 96 64 0 0 -32 0 0 0 +-16 0 0 0 0 -16 16 64 112 -48 -320 -288 -80 112 320 336 320 256 48 -96 -288 -192 -32 64 64 0 0 -48 0 0 0 +0 0 16 0 0 0 32 80 64 -128 -304 -144 112 272 368 368 368 336 192 32 -240 -208 -64 48 80 16 0 -32 0 0 0 +0 0 16 0 0 16 48 96 0 -192 -240 0 224 320 288 288 304 288 256 144 -128 -208 -144 0 64 48 16 -16 0 -16 0 +16 16 16 0 0 16 64 80 -64 -224 -112 112 256 256 144 128 160 192 256 192 -32 -176 -144 -16 32 64 16 0 0 -16 0 +16 0 16 0 0 16 64 48 -112 -224 -16 192 192 144 -16 -16 16 48 176 192 64 -112 -176 -64 16 48 32 32 0 0 0 +0 0 16 0 0 32 64 32 -144 -144 80 176 96 0 -96 -112 -80 -80 80 144 128 -32 -128 -80 -16 48 32 48 0 0 0 +-16 0 -16 0 0 32 48 0 -144 -64 112 112 0 -64 -112 -112 -112 -96 -16 64 160 48 -96 -112 -48 32 32 48 16 0 0 +0 0 0 -16 0 32 48 -64 -144 0 112 48 -48 -80 -32 -32 -48 -80 -48 16 144 112 -48 -128 -64 16 32 48 0 0 0 +0 16 -16 -16 16 64 16 -80 -112 48 80 0 -48 -16 64 64 32 0 -48 0 112 144 16 -128 -96 16 32 48 0 16 0 +16 0 -16 0 16 48 -16 -112 -64 64 48 -16 32 48 112 128 80 48 -16 -16 64 128 64 -80 -80 0 32 16 0 0 -16 +0 0 -16 16 16 64 -48 -128 -32 64 32 16 80 112 128 128 112 80 32 -16 16 112 80 -48 -80 -32 32 16 16 0 -16 +0 0 16 16 32 48 -80 -112 16 64 16 32 112 128 80 64 64 80 64 0 0 80 96 -16 -80 -16 0 16 0 -16 -16 +0 0 16 16 32 0 -80 -96 48 48 32 64 80 64 0 -16 -16 16 48 32 -16 48 80 16 -48 -32 0 32 16 -32 -16 +0 0 16 32 16 16 -96 -48 48 48 48 80 64 0 -80 -80 -64 -32 32 16 0 0 48 32 -16 -48 -16 32 32 -16 0 +0 0 0 32 48 -32 -80 -32 64 48 80 80 0 -64 -96 -112 -96 -64 0 0 0 -16 48 64 0 -64 -32 16 32 -16 0 +16 0 16 48 32 -48 -64 0 64 48 80 16 -48 -80 -80 -64 -80 -48 -32 0 16 -16 0 64 16 -48 -48 16 32 0 0 +0 0 0 48 32 -64 -48 32 48 48 48 -16 -64 -64 -16 0 -16 -32 -32 0 32 0 0 64 32 -48 -48 0 32 16 16 +0 0 16 32 0 -64 -16 48 48 32 0 -48 -48 -16 48 64 48 16 0 0 16 0 0 64 48 -48 -48 0 32 32 0 +0 0 16 32 -16 -64 0 48 48 48 -32 -48 0 48 96 112 96 64 16 16 0 32 16 48 48 -32 -32 -32 16 48 0 +0 0 48 32 -32 -64 16 64 32 32 -32 -16 32 64 112 112 112 96 64 16 0 32 32 16 64 0 -32 -48 16 48 0 +16 16 32 16 -32 -48 32 48 32 16 -32 16 64 96 96 64 80 96 80 32 0 32 32 0 64 0 -16 -64 0 32 16 +16 16 32 16 -48 -32 32 48 16 -16 0 48 80 64 48 16 48 48 64 32 0 16 16 0 48 16 0 -48 0 16 32 +0 32 16 -16 -48 -16 32 32 16 0 16 48 48 32 0 -32 -16 -16 48 32 16 16 16 -16 32 32 0 -48 -16 0 32 +16 16 32 -16 -48 0 32 48 16 -32 32 48 32 0 -48 -80 -64 -48 16 16 32 0 16 0 0 48 16 -32 -32 -16 32 +16 16 16 -48 -48 0 32 32 0 0 48 16 0 -32 -80 -80 -80 -80 -16 0 32 0 0 16 16 32 16 -16 -16 -16 32 +16 16 0 -48 -48 0 64 32 -16 16 48 16 -16 -32 -80 -64 -64 -80 -48 -32 32 0 0 16 0 16 32 0 -16 -32 16 +0 16 -16 -32 -32 0 32 16 0 32 32 0 -32 -32 -32 -32 -48 -48 -64 -32 16 16 16 32 0 32 16 0 -16 -16 0 +16 16 -16 -32 -16 32 48 16 0 32 0 -16 -32 0 0 0 0 0 -32 -16 0 0 0 32 0 16 32 0 -32 0 0 +32 32 -16 -32 -16 48 48 16 16 48 -32 -16 0 0 16 32 16 32 -16 -16 -16 16 0 16 0 16 16 0 -32 0 0 +32 16 -16 -16 0 48 16 0 16 32 -16 0 0 16 32 48 32 48 16 0 -32 0 0 16 16 16 48 16 -32 0 0 +32 0 -32 -32 16 48 16 0 16 16 0 0 16 0 32 16 16 48 32 0 -16 0 0 16 16 16 16 0 -32 0 -16 +16 0 -32 -16 32 48 16 16 32 0 0 0 0 16 0 0 0 32 32 16 -16 0 0 0 16 16 32 0 -16 0 0 +32 -16 -16 -16 48 32 0 0 32 0 16 0 -16 0 0 -32 -16 0 16 16 0 -16 0 0 16 16 16 16 16 -16 0 +16 -32 -32 -16 48 16 0 16 16 -32 32 -16 -16 0 -32 -32 -16 -16 0 16 0 -16 -16 -16 16 16 16 32 16 -32 0 +0 -16 -32 16 32 0 0 16 16 -32 0 -16 0 -16 -16 -16 -32 -48 -32 -16 16 -16 -16 0 0 0 16 32 16 -32 0 +0 -32 -32 32 32 0 0 0 0 -16 -16 -16 -16 -16 -16 0 0 -32 -32 -16 16 -16 0 0 16 0 0 32 16 -32 0 +0 -32 -16 32 32 0 16 16 0 0 -32 -16 -16 -16 16 16 16 -16 -16 -16 0 -16 16 0 0 0 16 16 32 -16 0 +0 -32 0 48 16 0 16 0 -16 0 -32 0 0 -16 16 32 32 0 0 -16 -16 0 0 -16 0 0 0 16 16 0 -16 +-16 -32 16 48 16 16 0 -16 0 0 -16 0 0 32 16 48 32 0 0 0 -16 0 16 0 0 16 16 0 16 32 -16 +-16 -16 16 48 16 32 16 -16 -16 0 -32 0 16 16 16 32 16 16 16 16 -16 0 0 0 0 16 0 0 16 16 -32 +-32 -16 16 32 16 32 0 -16 0 -16 0 16 16 32 0 0 0 0 0 0 0 -16 -16 -16 -16 16 16 0 16 16 -16 +-48 0 32 16 0 16 0 0 -16 -16 16 0 16 16 0 -16 -16 0 0 0 0 0 -16 -16 -32 0 0 0 16 0 -16 +-48 0 32 16 0 0 -16 -16 -16 -16 16 16 0 0 -16 -32 -16 -16 0 0 0 16 -32 -16 -16 0 0 16 16 0 0 +-32 0 32 16 16 -16 -16 0 -16 -32 0 16 0 -32 -32 -48 -32 -16 -16 0 0 16 -16 0 0 0 0 32 16 0 -16 +-32 0 32 0 0 -16 0 0 -16 0 0 16 -16 -32 -32 -32 0 -16 -32 0 -16 0 -16 16 0 0 0 16 16 0 0 +0 16 16 32 0 -32 0 0 -16 0 0 0 -16 -32 -16 0 0 0 -16 -16 0 0 0 0 16 0 0 32 0 0 16 +-16 32 16 16 0 -16 0 0 -16 0 0 -16 -16 -16 0 16 16 16 -16 0 -16 0 16 0 0 0 0 16 0 16 16 +-16 32 16 16 16 0 0 -16 0 16 0 -16 0 0 16 32 32 16 16 0 0 -16 0 0 0 0 0 0 0 32 16 +0 32 16 32 0 16 0 -16 16 16 -16 -16 0 16 32 48 16 0 32 16 -16 0 0 0 0 0 0 0 0 32 0 +16 32 48 32 0 16 0 -16 16 0 0 16 16 32 48 32 16 16 16 0 0 -16 -16 0 -16 0 0 0 0 16 16 +16 32 32 16 0 16 -16 0 16 0 0 16 32 16 16 0 0 0 32 0 0 0 0 0 -16 0 0 0 0 16 16 +32 32 32 0 0 16 -32 -16 16 -16 16 32 16 16 0 0 0 0 16 16 16 16 0 0 0 0 0 0 0 16 0 +16 32 16 0 0 0 -16 0 16 -32 16 16 16 0 0 0 0 0 0 0 0 16 0 -16 0 0 0 0 0 0 16 +32 32 16 -16 16 -16 -16 0 0 0 16 0 0 -16 0 0 0 16 0 -16 32 16 0 0 16 16 0 0 0 0 16 +48 16 0 0 0 -32 0 16 0 0 16 0 0 -16 0 0 16 16 0 -16 16 16 0 16 32 0 0 0 16 -16 0 +32 16 -16 0 0 -32 0 0 -16 16 0 -16 16 0 16 16 32 0 0 0 16 0 16 16 16 16 0 0 16 0 0 +48 0 0 16 0 -48 0 0 0 16 0 0 16 16 16 32 32 16 16 16 16 16 0 0 16 0 0 0 0 0 16 +32 -16 0 0 -16 -16 16 0 0 32 0 0 32 32 16 48 32 0 16 16 0 16 16 0 -16 -16 -16 -16 0 16 0 +16 0 0 0 -16 -16 0 -16 16 16 16 16 16 32 16 32 16 0 32 16 16 0 16 0 -16 -16 0 0 0 32 0 +16 -16 16 0 -16 0 0 0 0 16 32 16 16 16 0 0 0 0 16 16 16 0 0 0 -16 0 0 -16 -16 16 0 +16 16 0 -16 -16 16 0 0 0 0 32 16 16 16 0 0 -16 0 0 16 16 0 0 0 0 -16 16 0 0 16 16 +0 0 16 -16 -16 0 0 0 0 -16 32 16 0 0 0 -16 0 16 -16 0 16 16 0 16 0 0 16 0 0 0 0 +0 0 0 0 -16 16 0 0 0 16 0 0 -16 0 0 -16 0 32 0 0 0 0 0 16 0 0 0 0 -16 -16 16 +0 0 0 0 -16 0 0 16 0 16 0 0 0 -16 0 -16 16 32 -16 0 0 0 0 16 16 0 0 0 0 -16 0 +0 0 -16 0 0 0 0 16 16 16 0 0 16 16 0 0 32 16 0 0 0 0 16 16 16 16 0 -16 -16 -16 0 +0 0 0 -16 0 -16 0 0 16 0 -16 0 0 0 0 0 0 16 0 16 16 0 16 0 16 0 -16 -16 0 -16 0 +0 0 0 0 16 -16 0 0 16 0 -16 16 16 0 0 0 0 0 16 16 0 0 16 0 -16 16 -16 -16 0 0 -16 +0 0 0 0 16 -16 0 0 16 0 0 16 0 16 16 16 0 0 16 16 16 0 0 0 -16 0 -16 -16 0 0 -16 +0 0 -16 0 0 0 0 16 0 16 0 0 0 0 16 0 -16 -16 0 16 16 0 0 0 0 -16 0 0 0 0 -16 +0 0 0 -16 -16 0 16 0 0 0 16 0 0 0 0 0 0 -16 0 -16 0 0 0 0 0 -16 0 16 0 0 0 +0 0 0 -16 0 16 16 16 0 16 16 0 0 0 -16 0 0 -16 0 0 0 16 0 0 0 0 16 0 0 -16 0 +0 0 -16 -16 0 16 0 0 16 0 0 0 0 -16 0 0 -16 0 -16 0 0 0 0 0 0 16 16 0 -16 -16 16 +0 -16 -32 0 16 0 16 0 0 0 0 16 0 -16 0 16 0 16 0 0 0 16 16 16 16 16 0 16 0 -32 16 +0 0 0 0 16 0 32 16 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 32 16 0 0 16 -16 0 +0 -16 0 16 0 0 0 16 0 0 0 0 0 0 0 16 0 0 0 0 0 0 16 16 16 16 16 -16 0 0 16 +0 -16 0 16 16 0 16 16 0 16 0 16 0 16 0 0 0 0 16 0 0 -16 16 16 0 0 16 0 0 0 0 +0 -16 0 0 0 0 0 0 16 16 0 16 16 16 0 16 0 -16 0 16 0 -16 0 0 0 -16 0 0 -16 0 0 +-16 0 0 -16 0 16 -16 16 0 0 16 0 0 0 0 0 0 -16 0 16 16 -16 0 0 0 0 0 0 0 16 0 +-16 0 16 0 0 16 0 16 0 0 16 0 0 0 0 0 0 0 -16 0 16 16 -16 -16 -16 0 -16 0 -16 16 -16 +-16 0 0 0 0 16 0 0 0 0 16 -16 0 0 0 0 0 0 0 0 0 -16 -16 0 0 0 0 0 0 0 0 +-16 0 -16 -16 0 16 0 0 0 -16 0 -16 16 0 0 0 -16 0 0 -16 16 0 0 0 0 0 0 0 0 -16 0 +0 0 -16 0 0 16 16 -16 16 0 -16 0 0 -16 0 0 0 16 -16 0 -16 0 0 -16 0 0 0 0 16 -16 0 +0 0 -16 16 0 -16 0 0 0 -16 -16 0 0 -16 0 0 -16 16 -16 0 0 0 0 0 16 0 0 0 16 -16 -16 +0 -16 0 16 0 0 0 -16 0 -16 -32 0 0 0 16 0 0 0 0 -16 -16 -16 16 0 0 0 0 0 0 -16 0 +-16 0 16 0 0 -16 0 -16 -16 0 0 0 0 -16 0 0 0 0 0 16 0 0 0 16 0 0 0 0 0 0 0 +-16 0 16 0 16 0 0 -16 -16 -16 0 0 0 0 0 0 0 -16 16 16 0 -16 0 0 0 0 0 0 0 16 -16 +-16 0 32 0 0 -16 0 0 0 0 0 0 0 0 0 0 16 0 0 16 -16 0 0 0 0 0 0 0 0 16 0 +0 16 16 0 -16 0 0 16 0 -16 16 0 -16 0 0 0 16 -16 0 0 0 -16 0 0 -16 0 0 0 16 16 0 +0 0 16 0 -16 0 0 0 0 0 16 -16 0 0 0 0 0 0 0 -32 16 0 0 0 0 0 0 0 0 0 0 +0 0 -16 -16 -16 0 0 0 -16 0 0 0 16 -16 0 0 -16 16 0 -16 0 0 0 0 -16 0 0 0 0 -16 0 +0 0 -16 0 0 0 0 0 0 16 0 0 0 0 0 16 -16 0 -16 -16 0 0 0 -16 0 0 0 0 16 -32 0 +0 -16 -16 0 16 0 0 0 0 0 -16 16 0 16 0 0 0 16 -16 -16 16 0 0 0 0 0 0 0 0 -16 0 +0 -16 -32 0 16 0 0 0 0 0 -16 0 0 0 -16 0 0 0 -16 0 0 0 0 -32 16 0 16 0 0 -16 0 +0 0 -16 0 0 0 -16 0 0 0 0 16 0 16 0 0 -16 0 16 0 0 0 0 -32 0 0 0 -16 0 16 -16 +0 0 0 0 0 16 0 -16 0 0 0 0 0 0 0 0 0 -16 0 0 0 -16 0 -32 0 0 -16 0 0 0 0 +0 16 16 0 0 0 -16 -16 0 0 0 0 -16 0 -16 0 0 -16 0 0 0 -16 0 -16 0 -16 0 0 0 16 16 +0 0 16 -16 -16 0 0 0 -16 0 16 -16 -16 0 0 -16 16 -16 0 0 0 0 0 0 0 0 0 0 0 16 0 +0 16 0 0 -16 0 0 16 0 -16 16 0 0 0 0 0 0 -16 0 -16 0 0 -16 0 0 0 16 16 -16 0 0 +16 -16 0 -16 0 -16 0 0 0 0 0 0 -16 16 16 -16 0 0 -16 0 0 0 0 32 0 -16 0 16 0 -16 0 +0 -16 0 16 0 0 16 0 16 0 0 0 16 0 0 0 0 16 0 0 16 0 0 48 0 0 0 16 0 -16 0 +0 0 -16 16 0 16 0 0 0 0 0 16 16 0 0 0 0 16 -16 16 16 16 0 48 0 0 0 0 -16 0 16 +16 0 -16 0 16 0 0 0 0 0 0 0 0 -16 0 0 0 16 0 0 0 0 16 32 0 0 0 -16 0 0 16 +16 0 0 16 0 0 0 0 -16 -16 -16 0 0 0 0 0 0 0 0 16 0 0 16 16 0 0 0 -16 0 0 0 +0 16 0 0 16 0 0 -16 0 -16 16 0 -16 0 0 16 0 0 0 0 0 0 0 0 0 0 0 -16 16 0 -16 +0 0 16 0 0 0 0 0 0 -16 0 0 16 0 0 0 0 0 0 0 0 0 0 -16 0 0 0 -16 -16 16 0 +0 0 16 -16 0 -16 0 -16 0 16 0 0 0 16 0 0 0 -16 0 0 0 0 0 -16 -16 0 0 0 0 0 0 +0 0 16 -16 -16 -16 0 -16 0 16 0 0 0 0 16 0 16 0 0 0 -16 0 -16 -16 -16 0 -16 0 -16 0 0 +0 0 0 -16 0 -16 0 -16 0 0 0 0 0 0 0 -32 0 0 -16 -16 16 0 -16 0 0 0 -16 0 0 -32 0 +0 -16 -16 -16 -32 0 -16 -16 0 0 0 0 0 0 -16 -16 0 0 0 -16 0 -16 -16 16 -16 -16 0 0 0 -16 0 +-16 -16 -16 -16 -32 0 0 -16 0 0 0 -16 -16 -16 0 0 -16 0 -16 -16 0 -16 0 0 0 0 -16 0 -16 -32 0 +-16 0 -16 0 0 0 0 -16 0 0 0 0 0 -32 0 0 -16 0 -16 0 0 -16 -16 0 0 0 0 -16 -16 -32 0 +0 -16 -32 0 16 0 -16 0 -16 -16 0 0 0 -16 0 0 -16 -16 -16 0 0 0 0 -16 0 0 0 0 0 0 0 +0 16 -16 0 0 16 0 0 0 0 -16 0 0 0 0 0 0 0 0 0 -16 0 16 -32 0 16 16 0 -16 0 -16 +0 0 -16 0 0 0 0 0 -16 0 0 16 0 0 -16 0 -16 0 0 0 -16 0 16 -32 0 0 16 -16 0 16 0 +-16 0 0 0 0 -16 0 16 0 0 0 0 0 0 0 -16 -16 0 -16 0 -16 -16 0 -32 -16 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -16 0 0 0 -16 0 0 0 0 -16 0 0 0 -16 0 0 +0 -16 0 -16 -16 0 0 0 0 -16 -16 -16 0 0 -16 -16 16 0 -16 -16 0 0 0 0 -32 -16 -16 -16 0 0 0 +0 -16 -16 -16 0 -16 0 0 0 -16 0 -16 0 0 0 -16 0 0 -16 -16 -16 0 -16 16 0 -16 -16 0 -16 -16 0 +0 -16 0 0 -16 -16 0 -16 -16 -16 0 -32 0 0 0 16 -16 0 0 -16 0 0 -16 16 -16 -16 0 0 -16 -16 -16 +16 -16 0 0 0 -16 0 0 0 -16 0 -16 -16 0 0 16 0 0 0 0 0 0 -16 0 0 0 -16 -16 0 -16 -16 +0 0 -16 0 0 0 -16 -16 -16 -16 -16 16 0 -16 0 16 0 16 0 0 0 -16 0 -16 -16 0 0 0 0 -16 0 +-16 0 -16 0 0 0 0 0 -16 0 -16 16 -16 -16 0 16 -16 0 0 0 0 -16 -16 -16 0 0 0 -16 0 0 -16 +-32 0 -16 -16 0 0 0 0 0 0 16 16 -32 -16 0 0 -16 -16 0 0 -16 -16 0 -16 16 16 0 -16 0 0 0 +-16 0 -16 -16 0 0 -16 0 0 0 16 0 -16 0 0 -16 0 -16 -16 0 0 0 0 -32 0 0 0 0 0 -16 0 +-16 0 0 0 0 0 0 0 -16 0 0 0 -16 -16 0 -16 0 -16 0 -16 -16 0 0 -16 0 -16 0 -16 -16 16 0 +-16 -16 0 0 -16 -16 0 0 0 0 0 -16 0 0 0 -16 0 0 -16 -16 0 0 0 -16 -16 -16 0 0 -16 0 0 +0 -16 0 -16 0 0 16 0 0 0 -16 -16 0 0 0 -16 0 -16 -16 -16 0 0 0 0 0 -32 -16 0 0 -16 0 +0 0 0 0 0 -16 0 0 0 0 -16 0 0 0 0 0 0 0 0 0 0 0 -16 -16 0 0 0 0 -16 0 0 +0 -16 0 0 0 0 0 0 0 0 -32 0 0 0 -16 0 0 0 0 -16 0 0 -16 16 -16 0 -16 0 0 -16 -16 +0 -16 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 16 -16 -16 0 -16 -16 0 0 0 -16 0 +0 0 0 -16 0 -16 0 -16 0 0 0 0 0 0 0 16 -16 0 0 0 0 -16 0 0 -16 0 0 -16 0 0 -16 +-16 0 -16 0 0 0 -16 0 0 0 0 16 0 0 0 0 0 0 0 0 -16 0 0 -16 16 -16 0 0 0 0 0 +0 0 0 0 16 0 -16 0 -16 0 16 16 0 0 -16 -16 0 -16 0 0 0 0 0 -16 16 -16 0 0 0 0 0 +-16 0 0 0 0 0 0 0 0 0 16 0 0 16 0 0 0 -16 0 0 -16 0 16 -16 0 0 -16 0 0 0 0 +-16 0 0 -16 0 -16 -16 0 0 0 16 0 -16 -16 -16 -16 0 -16 0 0 0 0 -16 -16 -16 0 -16 -16 -16 -16 0 +-16 0 0 0 -16 -16 -16 0 0 -16 0 -16 -16 -16 -16 -16 0 0 -16 -16 0 0 -16 0 -16 0 -16 0 -16 -32 0 +0 -16 0 -16 -16 0 -16 -16 0 0 -16 -16 -32 -32 -16 -16 -16 0 -16 -16 0 0 -16 16 -16 -16 0 0 -16 -32 -16 +-16 -16 0 0 -16 -16 -16 -16 0 0 -16 -16 -16 -32 -16 0 0 0 -16 -16 0 0 -16 0 -16 -16 0 0 -16 -16 0 +-16 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 0 -16 0 0 0 0 -16 0 0 0 -16 0 -32 -16 0 0 -16 0 -16 +-16 0 -16 0 0 -16 0 -16 0 0 -32 0 0 -16 -16 16 -16 0 -16 0 0 0 -16 0 -16 -16 0 0 -16 -16 -16 +0 -16 -16 0 0 0 0 -16 0 0 -16 0 -16 -16 -16 0 -32 -16 0 0 0 -16 0 -16 0 0 -16 -16 0 0 -16 +-16 0 -16 0 -16 0 0 -16 0 0 0 0 0 0 0 0 0 0 0 0 -16 -16 0 0 0 0 0 -16 0 0 0 +0 0 -16 0 0 -16 0 0 -16 -16 0 0 0 0 0 0 0 0 0 -16 -32 0 0 -16 16 0 -16 0 0 0 16 +-16 0 0 0 0 0 -16 0 0 -16 0 0 0 0 0 -16 0 16 -16 0 -48 -16 0 0 16 0 0 0 0 16 0 +0 -16 0 0 -16 0 0 0 -16 0 0 0 0 0 -16 -16 0 0 0 0 -48 0 0 0 0 0 0 -16 0 -16 0 +0 0 0 -16 -16 -16 0 0 -16 -16 0 0 -16 0 0 0 0 0 0 0 -32 16 -16 0 0 0 0 0 0 0 0 +0 -16 0 -16 -16 -16 -16 0 -32 -16 -16 -16 -16 0 0 0 0 0 0 0 -16 0 -16 0 -16 0 0 0 -16 -16 0 +0 0 0 -16 -16 0 -16 0 -32 0 -16 0 -16 -16 0 0 0 0 -16 -16 16 0 0 0 -16 0 0 0 -16 -16 0 +16 0 -16 -16 0 0 0 -16 -32 -16 -16 0 -16 -16 -16 0 -16 -32 -16 0 48 -16 0 -16 -16 -16 0 0 0 -16 -16 +0 0 -16 0 0 0 -16 -16 -32 0 -16 -16 -16 0 -16 -16 -32 -16 -16 0 48 -16 0 0 -16 -16 0 -16 0 0 0 +0 0 -16 -16 16 0 0 0 -16 0 -16 0 0 -16 -16 0 0 -32 0 -16 48 0 -16 -16 0 0 0 -16 0 0 0 +-16 -16 0 0 0 16 -16 0 0 16 -16 0 0 0 0 0 -16 -16 -16 -16 16 0 0 -16 0 0 -16 -16 16 -16 -16 +-16 -16 0 0 -16 0 -16 0 16 0 16 0 0 -16 -16 0 0 -16 0 -16 0 -16 -16 -16 0 -16 -16 0 16 -16 -16 +-16 0 -16 -16 -16 0 0 0 32 0 16 -16 -16 -16 0 -16 0 -16 0 0 -32 -16 -16 -32 -32 0 -16 0 0 -16 -16 +0 0 -16 16 -16 0 -16 -16 32 0 0 0 -16 -16 0 -16 0 0 0 0 -48 0 -16 -16 -16 -16 0 0 0 -16 -16 +-16 0 0 0 -16 -16 0 0 32 0 -16 0 -16 -16 0 0 0 16 0 -16 -48 0 -16 0 -16 -16 -16 0 -16 -16 -16 +-16 0 0 -16 0 0 -16 0 32 -16 -16 -16 0 0 0 0 0 16 0 0 -16 -16 0 0 -32 0 -16 0 -32 -16 -16 +0 0 -16 0 0 0 0 -16 16 -16 -16 0 0 0 -16 -16 0 0 0 -16 16 -32 0 0 0 0 -16 -16 -16 -16 0 +-16 0 -16 0 -16 0 -16 0 -32 0 0 0 0 16 0 0 0 0 0 0 16 -16 0 0 -16 -16 0 -16 0 -16 0 +0 -16 -16 0 0 0 -16 -16 -32 0 -16 0 16 0 0 16 -16 -16 -16 0 16 0 0 0 0 -16 0 -16 -16 0 0 +-16 0 -16 0 0 0 0 0 -32 0 0 16 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 -16 0 -16 0 +-16 0 0 -16 0 0 0 0 -32 0 16 0 0 0 -16 0 0 -16 0 0 -16 0 0 -16 0 -16 0 -16 0 0 0 +-16 0 0 -16 0 -16 0 -16 -16 0 0 0 -16 0 -16 0 0 -16 0 0 -32 0 0 -16 -16 0 0 -16 0 0 -16 +0 0 0 -16 -16 -16 0 0 -16 -16 0 -16 0 0 0 0 0 -16 0 -16 -48 -16 -16 0 -16 0 -16 -16 0 0 -16 +0 0 0 -16 0 -16 0 0 0 0 0 0 0 -16 0 -16 0 -16 -16 -16 -64 -16 0 -16 -16 0 -16 -16 -16 0 -16 +0 0 0 -16 -32 -16 16 -16 0 -32 0 0 -16 -16 -16 -16 -16 -16 -16 -32 -48 0 0 -16 -16 0 -16 0 -16 -16 0 +0 0 0 -16 -32 0 0 -16 0 0 -16 -16 -16 -16 0 -16 -16 0 -16 0 -16 -16 -16 0 -16 0 0 0 -16 0 0 +0 0 -16 -16 -16 0 -16 0 -16 -16 -16 -16 0 -16 -16 0 -16 0 -16 0 16 -16 -16 0 -16 -16 0 0 -16 -16 16 +-16 -16 -16 -16 -16 -16 -16 0 -32 0 -32 0 -16 -16 -16 0 -16 0 -16 0 16 -16 0 -16 0 -16 0 -16 0 -16 32 +-16 -16 -16 -16 -16 -16 0 0 -32 -16 -16 0 0 -16 -16 0 -16 16 0 0 16 -16 0 0 0 0 0 -16 0 0 16 +0 -32 0 -16 0 -16 -16 -16 -32 -16 -16 -16 -16 0 0 -16 -16 0 -16 0 0 0 0 -16 16 0 -16 -16 -16 -16 0 +0 -16 0 -16 0 0 0 0 -16 -16 0 0 -16 0 0 0 -16 -16 0 0 -32 0 -16 -16 0 -16 -16 -16 0 0 -16 +0 -16 -16 0 0 0 0 0 -16 -16 0 -16 -16 -16 -16 0 -16 -16 0 16 -48 0 -16 -16 -16 -16 -16 -16 0 0 -32 +-16 -16 -16 -16 -16 0 -16 0 -16 -16 0 -16 -16 -16 0 0 -16 0 0 0 -48 -16 -16 -16 -32 -16 0 0 -16 -16 -32 +-16 0 0 0 -16 -16 -16 -16 -16 -16 0 0 0 0 0 -16 0 0 -16 -16 -32 0 0 0 -16 -16 -16 -16 -16 0 -32 +0 0 0 -16 -16 0 0 -16 0 -16 -16 0 -16 0 -16 0 0 -16 -16 -16 -16 -16 0 0 -16 -16 0 0 -32 0 -32 +0 0 0 0 0 -16 -16 0 0 0 0 0 0 0 -16 0 0 -16 0 -16 0 -16 0 0 -16 0 0 -16 -16 -16 -16 +0 -32 -16 0 -16 0 -16 -16 -16 0 -16 0 0 0 0 -16 -16 -16 0 0 16 0 -16 -16 -16 0 16 -16 -16 -16 0 +0 -16 -16 -16 0 -16 -16 -16 -16 0 0 0 0 -16 -16 -16 -16 -16 -16 -16 16 0 -16 -16 -16 -16 0 0 0 -16 32 +0 0 -16 0 0 0 -16 -16 -32 0 -16 -16 0 -16 -16 -16 -32 -16 -16 -16 0 0 -16 -16 16 -16 -16 0 0 -16 0 +-16 -16 -16 0 0 0 -16 0 -16 0 -16 0 0 -16 -16 0 -32 0 -16 -16 -16 0 -16 -16 16 -16 -32 0 0 -16 0 +0 -16 -16 -16 0 -16 -16 0 -16 0 0 0 -16 -16 0 -16 -16 -16 -16 -16 -32 -16 -16 0 0 0 -48 -16 0 0 -16 +-16 0 0 -16 -16 0 0 -16 0 0 0 -16 -16 -32 -16 -16 0 -16 -16 -16 -32 -16 -16 0 -16 0 -48 -16 0 0 -32 +-16 -16 0 -16 -16 -16 0 -16 0 -16 0 -16 -32 -32 -16 -16 0 0 -16 0 -32 -16 -16 0 -16 -16 -48 -16 -16 0 -32 +0 -16 0 0 -32 -16 0 -16 16 -16 -16 -32 -16 -16 0 -32 -16 0 -16 0 -32 -16 -16 -16 -16 -16 -16 0 -16 0 -32 +-16 -16 -16 0 0 -16 -16 0 0 -16 0 -16 -16 -16 -16 0 -16 0 0 -16 0 -32 -16 0 -32 -16 0 -16 0 -16 -16 +0 -16 -16 0 0 -32 -16 0 0 -16 -16 -16 -16 0 0 0 0 0 0 0 16 -16 0 -16 0 -16 16 16 -16 -16 0 +0 -16 -16 -16 0 -16 -16 0 -16 -16 -32 0 0 0 0 16 0 0 0 -16 16 -16 0 -16 0 0 48 0 -16 0 16 +0 -16 -16 -16 -16 0 0 0 -16 -16 -16 -16 -16 0 0 16 0 0 0 0 16 -16 -32 0 -16 -16 32 -16 0 -16 16 +-32 0 0 -16 -16 -16 0 0 0 -16 0 0 0 16 -16 0 0 0 0 0 0 -16 0 0 0 -16 32 -16 0 -16 0 +-16 0 -16 -16 -16 -16 0 -16 0 -16 -16 0 0 0 0 -16 0 0 -16 0 0 -16 -16 -16 0 -16 16 0 0 0 0 +-16 0 -16 0 -16 16 0 0 0 -16 0 0 -16 0 0 -16 -16 0 0 0 -16 -16 0 -32 0 -16 -16 -16 0 -16 -16 +-32 0 0 -16 0 0 -16 -16 0 -16 0 -16 0 0 0 -16 0 0 0 16 -16 -16 -16 -16 0 -16 -32 0 -16 -16 -16 +-32 0 0 0 -16 0 -16 -16 -16 -16 0 -16 0 0 0 0 0 0 0 0 0 0 0 -16 -16 0 -48 0 -32 0 -32 +0 0 0 -16 -16 0 0 -16 0 0 0 0 0 0 0 0 16 -16 0 -16 0 0 -16 0 -48 -16 -32 0 -16 0 -32 +0 -32 -16 -16 0 -16 -16 -16 -16 -16 -16 0 0 -16 0 0 16 -16 -16 0 0 0 -16 0 -32 -16 -16 -16 -32 0 -16 +0 -16 -16 -16 0 -16 -16 -16 -16 0 -16 0 0 -16 0 0 0 0 -16 -16 0 0 -16 0 -16 -16 0 0 -16 -16 0 +0 -16 0 -16 0 0 -16 -16 -16 0 0 0 0 0 0 -16 -16 -16 -16 -16 0 0 0 -16 -16 -16 16 -16 0 0 16 +0 -16 -16 0 0 -16 0 -16 -16 -16 -16 0 -16 -16 -16 0 0 -16 -16 -16 -16 -16 0 0 0 0 0 -16 0 -16 0 +0 -32 -16 0 -16 -16 0 -16 0 0 0 0 -16 0 -32 0 -16 0 0 -16 -16 -16 0 -16 0 -16 -16 -16 0 -16 -16 +-16 0 -16 0 0 -16 -16 0 0 0 0 -16 -16 -16 -16 -16 -32 -16 -16 0 -32 -16 -16 -16 0 -16 -32 0 -16 -16 0 +-32 0 0 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 0 -16 0 -32 -16 0 0 -16 -16 -16 -16 0 -16 -48 -16 -16 -16 -16 +-32 0 -16 -16 -16 -16 -16 -16 0 -16 -16 -32 0 -16 -16 -16 -32 0 -16 -16 -16 0 -16 -16 0 -16 -64 -16 -16 -16 -16 +-32 0 0 -16 -16 -16 0 -16 -16 0 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 -16 0 -16 -16 -16 -16 -48 -16 -16 0 -32 +-32 0 0 -16 -16 -16 -32 -16 0 -16 0 -32 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 0 -48 -16 -16 0 -16 +0 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 0 -16 -16 0 0 -16 -16 -16 -16 -16 -16 0 -16 16 -16 +-16 -16 -16 -16 0 -16 -16 0 -16 -16 -16 -16 -32 -16 0 -16 0 -16 -16 -16 0 -16 -16 -16 0 0 0 0 -16 16 0 +0 -16 -16 -16 0 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 0 0 -16 -16 0 -16 0 -16 -16 0 -16 -16 0 0 +0 -32 -16 -16 -16 -16 0 0 -16 -16 -16 -16 -16 -16 -32 0 -16 -16 -16 -16 -16 -16 -16 0 0 0 0 0 0 0 0 +0 -32 -16 -16 -16 -16 0 -16 0 0 0 0 0 -16 -32 -16 -16 -16 -16 -16 -32 -16 0 0 0 -16 0 0 0 0 0 +-16 -16 -16 -16 -16 0 0 -16 -16 -16 -16 -16 -16 -16 -32 -16 -32 -16 -16 -16 -16 -16 0 0 0 -16 -16 0 0 -16 0 +-16 -16 -16 -16 -16 0 16 0 0 -16 -16 0 -16 -32 -16 0 -32 0 -16 -16 -32 -16 0 -16 -16 -16 -32 -16 -16 -32 -16 +-16 -16 0 -16 -32 0 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 0 0 -32 -16 -16 -16 0 -32 -16 +-16 -16 0 -16 -32 0 0 0 -16 0 -16 0 -16 -32 0 -16 0 16 0 -16 -16 0 -32 0 -32 0 -16 -16 0 -32 0 +-16 -16 -16 -16 0 0 -16 -16 0 -16 0 0 -16 -16 0 -16 0 16 0 -16 -16 0 -32 -16 0 -16 -16 0 0 0 -16 +-16 0 -16 -16 -16 -16 -16 0 -16 -16 0 0 -16 -16 -16 0 0 0 0 0 0 -16 -32 -16 0 -16 0 -16 -16 -16 -16 +0 -16 -16 -16 0 -16 0 0 -16 0 0 -16 -16 0 -16 -16 -16 -16 -16 0 0 0 -16 -16 -32 -16 16 -16 0 0 0 +-16 0 -16 -16 0 0 0 0 -16 -16 -16 -16 -16 0 -16 0 -16 -16 -16 -16 -16 0 0 -16 -16 -16 0 0 0 0 0 +-16 -16 -16 -32 0 -16 0 -16 -16 -16 -16 -16 -32 0 -32 0 -32 0 0 -16 -16 -16 0 0 -16 -16 -16 -16 -16 0 -16 +0 -16 0 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -32 -32 -16 0 -32 -16 0 -16 -32 -16 0 -16 -16 0 -16 +-16 -16 -16 0 0 0 0 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 0 0 -16 -16 0 -16 -16 -32 0 -16 -32 -16 -16 +-16 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 0 -16 0 0 -16 -16 -16 -16 -16 -32 -16 -16 +-32 -16 -16 0 -16 -16 -16 -16 0 0 0 0 0 -16 0 -32 0 0 -16 -16 -16 0 -32 -16 -16 -16 -32 -16 0 -16 0 +-16 -16 -16 -16 -16 -16 -16 -16 0 -16 0 -16 -16 -16 0 0 0 0 -16 0 0 -16 -32 -16 -16 0 -16 0 -16 -32 0 +-16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 16 -16 0 -16 -32 0 0 0 -32 -16 -16 -16 -16 0 0 -32 0 +-16 -16 -16 -16 0 -16 -16 0 -16 -16 0 -16 -16 -16 0 -16 0 0 -16 0 0 -16 -32 0 -16 -16 -16 0 0 -16 0 +-16 0 -16 0 0 0 -16 -16 0 -16 -16 -16 -16 0 -16 0 -16 0 -16 -16 0 -16 -16 0 -16 -16 0 -16 -16 0 0 +-16 -16 0 0 16 -16 0 0 0 -16 0 -16 -16 0 -32 -16 -32 -16 0 0 -16 -32 -16 -16 -16 -16 0 -16 -16 0 -16 +0 -16 -16 0 -16 0 0 -16 0 -16 0 -16 -16 -16 -32 0 -16 0 0 -16 0 -16 0 -16 -16 -32 0 -16 -16 0 -32 +-32 -16 -16 -16 -16 -16 -16 -16 0 0 0 -16 -16 0 -16 -16 -32 -16 -16 0 -16 0 16 -16 -16 -16 0 -32 -16 -16 -16 +-16 0 -16 0 -32 -16 -16 0 0 -16 0 -16 0 -16 -16 -16 -16 0 0 0 -16 0 16 0 -32 -16 -16 -16 -16 -16 -32 +-16 -32 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 0 0 -16 0 -16 0 -16 0 -16 0 -16 -16 -16 -32 -16 +-16 -16 -16 0 -16 -32 -16 0 0 -16 0 -16 0 -32 -16 -16 -16 -16 -16 0 0 0 -16 -16 -16 -16 -16 -16 -32 -16 0 +-16 -16 0 -16 -32 -32 -16 -16 -16 -16 0 -16 -16 -16 0 0 0 0 -32 -16 -16 0 -32 -16 -32 0 -32 -16 -16 -16 0 +0 -16 0 -48 -16 -32 -32 -16 -32 -16 0 -16 -32 -32 -16 0 -16 -16 -16 -16 0 -16 -32 -32 -16 -16 -16 -16 -16 -16 16 +0 -16 0 -48 -16 -32 0 -16 -32 -16 -16 -16 -16 -16 -16 -32 -16 0 -16 -16 -16 -16 -32 0 -32 -16 0 0 -16 -16 16 +-16 0 -32 -32 -16 -16 -16 -16 -32 -16 -16 0 -32 0 -16 -16 -16 -16 -16 -32 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 0 +-16 0 0 -16 -16 -16 -16 -16 0 -16 -16 0 0 -16 -16 -16 -16 -16 -16 -32 -16 -32 -16 -16 -16 -16 0 -16 0 -16 -16 +0 -16 -16 -16 -16 0 0 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 16 0 -32 -16 0 0 -32 0 -48 +-16 0 -32 0 -16 0 -32 -16 -16 0 -16 -16 -16 -16 -32 -32 -16 -16 -32 -16 -16 -16 0 -16 -16 -32 -32 -16 -32 -16 -32 +-16 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 16 -16 0 -16 -16 -16 -32 0 -32 +-32 -16 -32 0 -32 -16 -16 -32 -32 -32 -16 -16 -16 -32 0 -16 -16 -16 -32 0 -16 -16 -16 -16 0 0 -48 -16 -16 -16 -16 +-16 -32 -16 0 -16 -16 0 -16 -16 -16 -16 -32 0 -16 -16 -16 -16 -32 -16 -16 0 -16 -16 -16 -16 0 -32 -16 -16 -16 0 +0 -32 -16 -32 -16 -32 -16 -16 -32 -16 -16 -32 -16 -16 -16 0 -16 -32 -16 -16 -16 -16 -32 -16 -16 0 -16 -32 -32 -16 0 +0 -16 0 -32 -16 -32 0 0 -16 -32 -32 -32 -16 -16 -16 -16 -16 -16 -16 -32 -32 -16 -32 -16 -16 0 16 -16 -16 0 0 +0 0 -16 -48 -16 -48 -16 -16 -16 -32 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -32 0 -16 0 0 -16 -16 -16 +-16 0 0 -32 -16 -16 -16 -16 -16 0 -16 -32 -16 -16 -32 -16 -16 -16 -16 -16 -16 0 -32 -32 -16 -16 0 -16 -16 -16 -32 +-16 0 -16 -16 -16 0 -16 -16 -32 -16 -32 0 -16 -16 -32 -32 -32 0 -16 -16 -32 -16 -32 -16 -16 -16 -16 -16 -16 -16 -48 +-16 -16 -16 -16 -16 0 -16 0 -16 -16 -16 0 -16 0 -16 -32 -32 -16 -16 -16 -16 -16 -16 -16 -32 -32 -32 -16 -32 0 -32 +-16 -16 -32 -16 -16 0 -16 0 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -16 -32 -16 -32 -16 -16 -32 +-16 -32 -16 -16 -16 0 -16 -32 -32 -16 0 -16 -16 0 0 -16 -32 -16 -16 -16 -32 -16 -16 -32 -16 -16 -16 -16 -32 -16 -32 +-16 -32 -32 -16 -16 -16 -16 -16 -32 -16 0 0 -16 -32 -16 -32 -16 -16 -16 -16 -16 -16 -16 -32 -32 -16 -32 -16 -16 -16 -16 +-16 -32 -32 -32 -16 -16 0 0 -32 -16 -16 -16 -16 -16 -32 -32 -16 -16 -32 0 -16 -32 -16 -16 -32 -16 -16 -16 -16 -16 0 +-16 -16 -32 -32 0 0 0 0 -16 -16 -32 -16 -16 -16 0 -16 -16 -16 -16 0 -32 -32 -16 -16 -48 0 -16 -16 -16 -16 0 +-16 -16 -16 -32 0 -32 -16 -16 -16 -16 -32 -16 -16 -16 -32 0 -16 -16 -16 0 -16 -16 -32 -16 -16 0 -32 -16 -16 -16 -16 +-16 -16 -16 -32 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 0 0 -16 -16 -32 -32 -16 -16 0 -16 -16 -16 +-32 -16 0 -32 0 -32 -16 -32 0 -32 -16 -16 -16 -16 -16 -32 -16 -16 -16 0 -16 -16 -32 -16 0 -16 0 -16 -16 -16 -16 +-48 -32 -16 0 -16 -16 -16 -32 -16 0 -16 0 -16 -16 -16 -16 -32 -16 -16 -16 -16 -32 -16 -16 -16 -32 0 -16 -32 -16 -16 +-32 -16 -16 -16 -16 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 -32 -16 -16 -16 -16 -32 0 -16 -32 -32 -16 +-48 -32 -16 -16 -16 0 -16 0 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -16 -48 -16 0 -16 -16 -16 -16 -16 -32 -16 0 -16 +-16 -32 -32 0 -16 -16 -16 -16 -32 -16 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 +-16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 0 -16 -32 -16 -16 -16 -32 -16 -16 -16 0 -16 -16 -16 -16 -48 +-16 -32 -16 -16 0 -32 -32 -16 -32 -16 -16 -16 -32 -16 -16 0 -16 -16 0 0 -16 -16 -16 -16 -16 0 -32 -16 0 -32 -32 +-16 -16 -16 0 -16 -32 -16 -16 -16 -32 -16 -32 -16 -16 -16 -16 0 -16 -16 0 -16 -32 0 -16 -16 0 -16 -16 -16 -16 -32 +0 -16 0 -16 -16 -16 -16 -16 0 -32 0 -16 -32 0 -32 -16 -16 -16 0 0 -16 -16 -16 -16 -16 -16 -32 -16 16 -16 -48 +-16 0 -16 -32 -32 -16 -16 -16 0 -16 0 0 0 -32 -32 -16 -16 -16 -16 0 -16 -16 -32 -16 0 -32 -16 -16 0 -16 -32 +0 0 0 -16 -64 -16 0 -16 -16 -16 -16 0 -16 -16 -16 -16 -32 -16 -16 0 -16 -16 -16 -16 -32 -32 -16 -16 -16 -16 -16 +-32 -16 -16 -32 -48 -16 -16 -16 -16 0 -16 0 -16 0 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -32 -16 -32 -16 0 16 +-16 -16 -32 -16 -48 0 -16 -16 -32 0 -16 -16 -16 -32 -32 0 -16 0 -16 -32 -16 -16 0 0 -16 -16 -16 -16 -16 0 16 +-32 -32 -16 -16 -32 -16 -16 -16 -48 -16 -16 -16 -16 -16 0 -32 -16 -16 0 -48 -16 -32 0 -16 -16 -16 -16 -32 -48 -32 32 +0 -16 -32 -16 0 -16 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -48 -16 -32 0 -16 -16 -16 -16 -16 -32 -32 32 +0 -16 -32 -16 16 -16 -16 -16 -16 -16 -32 -32 -16 -32 -16 -16 -16 -16 -16 -48 -16 -16 -16 -16 -16 0 -16 0 -16 -16 0 +-16 -16 -32 0 32 0 -16 0 -16 -16 -16 -16 -48 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -16 +-32 0 -16 -16 32 -32 -16 -16 0 -16 -32 -16 -48 -16 -16 -32 -16 -16 -16 0 0 -16 -32 -32 -16 -16 -32 0 -16 -16 -32 +-32 -16 -16 -16 16 -32 -16 -16 0 -32 -32 -16 -64 -16 0 -16 -16 -16 -32 0 -16 -16 -32 -32 -16 -16 -32 -16 -16 -16 -32 +-16 0 -16 -32 0 -16 -16 -16 0 -16 -16 0 -32 -16 -16 -16 -16 -16 -16 16 -16 -16 -32 -16 -16 -16 -16 0 -32 -16 -32 +-32 -32 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 -16 -16 -16 0 -32 -16 -48 0 -16 -16 0 -16 -16 -16 -32 +-32 -32 -16 -32 -32 0 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 -32 0 0 -32 -32 -16 -16 0 -16 -32 -16 -16 -16 -32 -16 +-16 -32 -16 -16 -32 0 -16 -16 -16 -16 -16 -16 16 -16 -16 0 -16 -16 -16 -32 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 0 +-16 -16 -32 -16 -32 -32 0 0 -16 -32 0 -32 16 0 -16 0 0 -16 -16 -48 -16 -32 -16 -16 -16 -16 -32 -32 -16 -16 0 +0 -32 -16 0 -16 -16 0 -16 -16 -32 -16 -16 16 0 -16 0 -16 0 -16 -48 -16 -16 0 -32 -16 0 -16 -16 0 -16 0 +0 -16 -16 -16 -16 -32 0 -32 -16 -16 -32 -16 16 -16 -16 -16 0 0 -16 -32 0 -16 -16 -16 -16 0 -32 -16 -16 -16 -16 +-16 -16 0 -16 0 -16 -16 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 0 -16 -16 0 -16 -16 -16 0 -32 0 0 -32 -32 +-16 0 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -32 -16 -16 -16 0 -16 0 -16 -16 -32 -16 -16 -16 -16 -16 -32 +-16 0 -32 -16 -16 -16 -16 -16 -32 -16 -16 -16 -48 -16 0 -32 -16 -16 0 0 0 0 -16 -16 -32 0 -32 -16 -32 -16 -48 +-16 0 -32 -32 -32 -16 -16 -32 -16 0 -16 -16 -48 -32 0 -16 -16 -16 -32 0 -16 -16 -32 -16 -32 -16 0 -16 -16 -16 -32 +-32 -16 -16 -16 -48 0 0 -16 -16 -16 -16 0 -48 -32 0 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -32 0 -16 -16 -16 -16 +-32 -16 -16 -16 -48 0 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -16 -16 0 -32 -16 -16 -16 -16 -16 0 -32 -16 0 -16 +-16 -32 -16 -32 -48 0 -16 -16 -32 -16 -16 0 0 -32 -32 -16 -16 -16 0 -16 -16 -16 -16 -32 -16 -32 0 -32 -16 -16 0 +-16 -32 0 -16 -32 0 -16 -16 -32 -32 -16 -16 0 -16 -48 -16 -16 -16 0 -32 -32 -16 0 -16 -16 -16 -16 -16 -16 -32 0 +-16 -32 -16 0 -16 -16 -16 -16 -16 -32 -16 -16 0 -16 -80 -16 0 0 -16 -32 -32 -16 0 -16 0 -16 0 -16 -16 -32 0 +-16 -16 0 0 0 -16 -16 -32 -16 -16 -16 -32 -16 0 -80 -16 0 0 -16 -16 -16 -32 -32 -32 -16 -16 -32 -16 -32 -32 -32 +-32 0 -16 -16 0 -16 -32 -16 -16 -32 -16 -32 -32 -16 -64 0 0 -16 -16 -32 -16 -16 -16 -16 -16 -16 -48 -32 -16 -16 -16 +-16 0 -16 -16 0 -32 -16 -16 0 -16 -16 -32 -48 -16 -48 -16 0 0 -32 -16 0 -16 -32 -16 -32 -16 -48 -16 -16 -16 -16 +-16 0 -16 -16 -16 -32 -16 -16 -16 0 -16 0 -64 -16 0 -16 -16 0 -16 0 -16 -16 -32 -16 -32 0 -32 -16 -16 0 -16 +-16 -16 -16 -16 -16 -16 -16 -16 -16 0 -16 0 -32 -16 48 -16 -16 0 -16 0 -16 -16 -16 -32 -32 -32 -32 -16 -32 0 -16 +-32 -16 -32 -16 -48 -16 -16 -16 0 -16 -16 -16 -32 -16 64 0 -16 -16 0 0 -16 -16 -16 -32 -16 -16 -32 -16 -32 -16 -16 +0 -16 -32 -32 -48 -16 -16 0 -16 -16 -16 -16 -16 -16 64 -16 -16 -16 -16 -16 -16 0 0 -16 -16 -16 -16 -16 -16 -16 -16 +0 -16 -16 -16 -32 0 -16 -16 -16 -16 -16 -16 0 0 64 -16 -32 -16 -16 -16 -16 0 0 -16 -32 -16 0 -16 -16 -16 0 +-16 -32 -16 -16 -32 0 -16 -32 -16 -32 -16 -16 0 0 32 -16 -32 -16 -16 -32 -16 -16 0 -32 -16 -16 -32 -32 -32 -16 -16 +-16 -32 -16 -16 -16 -16 -32 -16 -16 -32 0 -32 0 0 -16 -16 -16 -16 -16 -16 -16 -16 -16 -32 0 -32 -16 -32 -16 -16 -16 +-16 -32 -16 -16 0 -16 -16 -16 -16 -32 0 -16 -16 0 -48 -16 -16 -16 -16 -32 0 -16 -16 -16 0 -32 -32 -16 -16 -32 -16 +0 -32 -16 -16 0 -16 -16 -16 -16 -16 0 -16 -32 -16 -80 -16 -16 -16 -32 -16 -16 -16 -16 -16 -16 -32 -32 0 -16 -16 -16 +0 -48 -16 -16 0 -16 -16 0 -16 0 -16 0 -48 -32 -64 -32 -16 -16 -32 -32 -16 -16 -32 -16 -32 -32 -32 -16 -16 0 -16 +-16 -48 -16 -16 -16 -16 -16 -16 0 -16 0 -16 -48 -48 -48 -16 -32 -16 -32 -16 -32 -16 -16 -16 -32 -32 -16 -16 -16 0 -16 +-16 -16 -32 -16 -16 -16 0 -16 0 0 0 -16 -32 -48 -16 -32 -16 -16 -16 0 -16 -16 -16 -32 -32 -16 0 -16 -16 0 -16 +-32 -16 -16 -16 -32 -16 -16 -32 -32 -16 -16 -16 -16 -32 0 -32 -32 -16 -16 0 -32 -16 -16 -32 -32 -16 0 0 -16 -32 -16 +-16 16 -32 -16 -32 -16 -16 -16 -32 -16 -16 -16 -16 -16 0 -16 -16 -16 -16 -16 -32 -32 -16 -16 -16 -16 0 -16 -16 -32 0 +-16 32 -16 0 -16 -32 -16 -16 -16 -32 -16 -16 0 -16 -16 -16 -16 -16 -16 -32 -32 -16 -16 -32 -16 -16 0 -16 -16 -16 -16 +0 16 -16 -32 -16 -32 -16 -16 -32 -32 -32 -16 -16 -16 -16 0 -16 -32 -16 -32 -16 0 -16 -16 0 -16 -32 -32 -16 -32 0 +0 0 -32 -32 0 -32 -16 -16 -16 -32 -32 -16 -16 0 -64 -16 -32 -32 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 -32 -16 +-16 -16 -16 -32 0 -32 -32 -16 -16 -32 -32 -32 -16 -32 -64 -16 -32 -16 -16 -32 -32 -16 -32 0 -16 -16 -48 -16 -16 -32 -32 +0 -32 -32 -16 -16 -16 -16 -16 -16 -32 -16 -16 -32 -16 -64 -16 -16 -16 0 -32 -16 -32 -32 -32 -32 -32 -32 -16 -32 -16 -16 +-16 -48 -32 -16 -16 -16 -32 -16 -32 -32 -16 -16 -16 -32 -32 -32 -16 -16 -16 -16 -32 -16 -16 -16 -32 -16 -16 -16 -16 -16 -16 +-16 -48 -32 -16 -32 -16 -32 -32 -16 -16 -16 -16 -32 -32 -32 -16 -16 -16 -16 -16 -32 -16 -16 -32 -16 -16 0 -16 -32 0 -32 +-32 -32 -16 -32 -32 -16 -16 -32 -32 -16 -16 -16 -32 -48 0 -32 -16 -16 -32 -16 -32 -16 -32 -16 -16 -16 -16 -16 -16 -16 0 +-32 -32 -16 -32 -32 -16 -32 -32 -32 -16 -16 -32 -32 -32 0 -32 -32 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 0 +-16 0 -16 -16 -16 -16 0 -32 -32 -32 -16 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -32 -32 -16 -16 -16 -32 -16 -32 -16 -16 +-16 0 -16 -16 -16 -16 0 -32 -32 -16 -16 -16 -16 0 -16 -16 -16 -32 -32 -32 -16 -16 -16 -16 -16 -16 -16 -32 -16 -16 -16 +-16 0 0 0 -16 -16 -16 -16 -16 -32 -32 -32 -16 -16 -64 -16 -32 -32 -16 -32 -16 -16 -16 -16 -16 -32 -32 -16 -32 -16 -32 +-32 -16 0 -16 0 -32 -32 -16 -16 -16 -16 -16 -16 -32 -80 -32 -48 -32 -32 -32 -32 -32 -32 -16 -32 -32 -32 -16 -16 -16 -32 +-32 -32 0 -32 0 -32 -16 -16 -32 -16 -16 -16 -32 -32 -80 -32 -48 -16 -32 -32 -16 -32 -16 -32 -32 -16 -32 0 -16 -32 -32 +-16 -48 -16 -16 0 -32 -32 -16 -16 -16 -16 -32 -48 -48 -80 -48 -48 -16 -32 -32 -48 -48 -16 -32 -16 -16 -32 -16 0 -16 -32 +-32 -64 -16 -16 -32 -48 -16 -16 -16 -16 -16 -32 -48 -64 -32 -48 -32 -16 -48 -32 -16 -48 -48 -32 -32 -32 -16 -32 -16 0 -32 +-32 -48 -48 -32 -32 -16 -32 -16 -16 0 -16 -32 -48 -64 -16 -32 -32 -16 -16 -32 -16 -32 -32 -32 -32 -16 0 -16 -16 0 -16 +-32 -48 -48 -32 -32 -16 -16 -16 -16 -16 -32 -48 -32 -48 32 -16 -16 0 -16 -16 -32 -16 -16 -16 -16 -16 -16 -16 -16 -16 -16 +-32 -32 -48 -16 -16 -16 0 -16 -32 -32 -48 -32 -16 0 32 16 16 0 0 -16 -32 -32 -16 -32 -16 -32 0 -32 0 -16 -16 +-32 -16 -32 -16 -16 -16 -16 -32 -32 -32 -48 0 0 16 32 16 32 0 0 0 -32 -16 -32 -32 -16 -32 -32 -16 -16 -32 -16 +-16 0 -16 -16 -16 -16 -16 -48 -32 -48 -48 -16 16 16 32 32 32 0 16 32 -16 -16 -32 -16 -16 -16 -32 -16 -16 -32 0 +-16 0 -16 -16 -16 -32 -16 -32 -32 -48 -16 0 32 32 16 32 32 0 0 16 -16 0 -32 -16 -16 -32 -32 -16 -32 -16 -32 +-16 -16 0 -16 0 -16 -16 0 -48 -16 0 32 16 32 0 16 16 16 16 16 0 0 -32 -32 -32 -32 -32 -16 -16 -32 -32 +-16 -32 -16 -16 -16 -16 -32 -16 -32 -16 32 16 16 0 -16 0 0 16 16 16 16 0 -16 -48 -32 -16 -32 -16 -16 0 -16 +-16 -32 0 -32 -16 -16 -32 -16 -16 -16 16 0 0 0 0 0 -48 16 0 16 16 0 -16 -48 -32 -48 -32 -16 -16 -16 -16 +-32 -32 -16 -32 -16 -32 -32 -32 -32 16 16 0 0 0 0 -16 -64 16 16 0 0 0 0 -16 -32 -32 -16 -16 -16 -16 -32 +-32 -48 -48 -32 -32 -16 -32 -32 -16 16 0 0 0 -16 16 0 -64 16 0 0 0 0 0 -16 -32 -32 -16 -32 -32 -16 -16 +-48 -32 -48 -32 -16 -32 -64 -64 -16 0 -32 -32 -16 0 16 -16 -32 16 -16 -16 0 0 0 -16 -64 -48 -32 -48 -32 -48 -32 +-80 -64 -64 -64 -64 -48 -96 -64 -48 -48 -80 -64 -32 -32 0 -16 -16 -48 -32 -48 -32 -48 -48 -32 -96 -48 -96 -96 -80 -80 -48 +-160 -128 -96 -112 -112 -112 -176 -112 -128 -128 -160 -112 -96 -80 -80 -64 0 -128 -80 -128 -80 -112 -128 -96 -176 -112 -192 -208 -192 -160 -128 +-288 -224 -208 -224 -224 -240 -320 -208 -240 -288 -288 -240 -208 -160 -192 -160 -80 -272 -192 -288 -176 -256 -288 -208 -320 -224 -352 -352 -352 -272 -240 +-448 -384 -336 -384 -368 -384 -464 -320 -432 -448 -432 -400 -352 -304 -368 -304 -208 -432 -368 -448 -336 -416 -448 -384 -496 -368 -512 -512 -512 -432 -384 +-576 -528 -496 -528 -528 -544 -592 -464 -576 -560 -544 -528 -512 -448 -528 -496 -400 -560 -528 -560 -480 -560 -592 -544 -608 -544 -640 -640 -640 -592 -576 +-576 -576 -576 -576 -592 -624 -560 -576 -608 -576 -528 -544 -560 -560 -608 -592 -576 -624 -608 -560 -560 -576 -592 -624 -560 -624 -608 -576 -592 -624 -656 +-320 -352 -480 -432 -480 -512 -288 -512 -384 -352 -304 -336 -432 -528 -528 -592 -608 -464 -512 -320 -496 -352 -352 -480 -256 -544 -304 -272 -288 -432 -496 +208 128 -128 -32 -80 -144 256 -192 112 144 176 128 -64 -288 -224 -384 -416 -64 -176 144 -144 112 176 -48 352 -192 272 336 288 16 -96 +832 768 448 608 544 480 880 400 784 800 784 704 496 176 288 64 32 496 384 736 432 736 800 592 944 432 912 960 928 656 576 +1232 1184 992 1104 1072 1056 1248 976 1200 1200 1152 1104 960 720 848 656 640 992 928 1120 960 1152 1200 1120 1280 1024 1264 1296 1280 1152 1104 +1312 1296 1264 1280 1280 1312 1328 1280 1328 1312 1264 1232 1168 1088 1152 1088 1088 1200 1200 1216 1216 1280 1312 1312 1328 1296 1328 1328 1328 1328 1328 +1232 1216 1248 1248 1280 1312 1216 1328 1232 1216 1152 1136 1136 1184 1184 1232 1248 1184 1200 1120 1216 1168 1216 1296 1184 1328 1216 1200 1200 1264 1296 +960 960 1104 1040 1072 1152 944 1184 1008 960 880 848 944 1088 1072 1152 1152 1008 1040 832 1040 928 944 1104 896 1184 960 896 912 1072 1104 +368 352 704 560 656 784 336 864 448 352 192 224 496 800 768 928 928 608 656 192 608 288 320 672 192 848 304 208 224 592 704 +-624 -608 -112 -352 -224 -16 -656 160 -544 -656 -784 -704 -288 208 128 432 400 -176 -96 -704 -224 -688 -704 -224 -816 96 -704 -800 -784 -336 -128 +-1392 -1360 -1056 -1200 -1120 -992 -1408 -864 -1376 -1408 -1424 -1328 -1056 -624 -736 -432 -496 -992 -928 -1312 -1088 -1376 -1424 -1168 -1472 -896 -1424 -1440 -1440 -1200 -1072 +-1616 -1584 -1520 -1552 -1552 -1536 -1600 -1504 -1632 -1616 -1568 -1488 -1392 -1232 -1296 -1152 -1200 -1392 -1360 -1456 -1488 -1568 -1600 -1600 -1616 -1504 -1584 -1568 -1584 -1568 -1536 +-1536 -1504 -1552 -1520 -1552 -1584 -1504 -1616 -1568 -1520 -1440 -1376 -1392 -1408 -1440 -1440 -1472 -1408 -1408 -1328 -1472 -1456 -1504 -1584 -1488 -1600 -1472 -1440 -1456 -1520 -1552 +-1264 -1216 -1360 -1296 -1344 -1408 -1200 -1488 -1312 -1232 -1088 -1056 -1168 -1312 -1296 -1392 -1392 -1200 -1232 -976 -1248 -1152 -1200 -1376 -1152 -1440 -1152 -1104 -1120 -1296 -1344 +-768 -672 -976 -816 -896 -1008 -608 -1168 -784 -640 -400 -400 -672 -1008 -976 -1136 -1120 -752 -800 -304 -752 -480 -576 -960 -512 -1088 -512 -416 -432 -832 -912 +64 192 -256 16 -32 -256 272 -528 128 352 576 464 64 -432 -336 -608 -560 -32 -80 512 96 480 400 -128 400 -384 384 512 464 32 -144 +896 944 656 864 832 672 1008 416 1008 1152 1184 1056 736 320 432 176 224 672 624 1024 896 1152 1104 784 1088 528 1072 1120 1104 848 736 +1216 1248 1152 1248 1248 1184 1232 1104 1344 1360 1296 1184 1056 848 944 832 848 1008 992 1088 1200 1296 1344 1264 1232 1104 1216 1232 1216 1216 1168 +1120 1072 1200 1168 1184 1216 1008 1280 1248 1184 1024 880 928 1024 1024 1072 1072 944 944 720 1088 1072 1136 1248 960 1200 928 912 944 1136 1152 +608 512 832 688 720 800 368 1024 752 592 304 224 432 752 736 912 864 480 512 48 560 400 528 848 288 816 224 208 288 640 736 +-112 -256 128 -112 -80 16 -448 368 -80 -320 -576 -512 -208 208 144 400 304 -128 -112 -608 -256 -480 -336 80 -464 96 -560 -576 -512 -128 0 +-688 -816 -592 -800 -816 -736 -976 -432 -848 -992 -1088 -960 -720 -384 -464 -272 -352 -656 -640 -960 -864 -1040 -976 -688 -944 -640 -992 -1024 -976 -768 -656 +-880 -960 -960 -1056 -1104 -1088 -1040 -960 -1136 -1200 -1152 -1008 -896 -768 -832 -768 -800 -864 -864 -928 -1088 -1152 -1136 -1040 -960 -992 -1040 -1056 -1040 -1024 -976 +-704 -736 -912 -944 -1040 -1056 -816 -1040 -1024 -1040 -880 -720 -752 -848 -864 -912 -896 -752 -736 -560 -928 -912 -944 -1008 -672 -976 -768 -768 -752 -880 -880 +-272 -240 -544 -528 -624 -704 -288 -768 -624 -528 -288 -192 -400 -640 -624 -736 -688 -384 -384 -64 -464 -368 -464 -640 -160 -592 -224 -256 -272 -480 -480 +144 272 -16 16 -48 -128 304 -272 -48 128 336 304 32 -240 -208 -336 -272 32 48 368 128 240 112 -96 320 -48 304 256 208 16 16 +416 560 384 432 464 432 640 256 448 640 688 544 320 128 176 96 144 304 320 512 544 608 496 336 528 432 592 496 432 336 368 +448 560 528 576 672 704 656 544 624 768 704 496 384 352 384 368 368 352 368 384 624 656 576 480 416 608 560 464 384 400 448 +336 336 416 448 576 656 400 528 512 560 368 240 288 368 384 400 368 240 208 112 416 400 384 368 128 496 304 272 176 240 272 +160 64 160 192 288 384 80 304 224 176 0 -32 96 256 208 256 208 48 -16 -160 64 64 96 112 -112 192 0 0 -16 16 16 +16 -112 -64 -32 32 96 -144 32 -16 -144 -224 -160 -16 64 16 48 0 -80 -128 -240 -224 -192 -96 -96 -208 -96 -160 -80 -96 -128 -144 +0 -128 -128 -80 -80 -64 -160 -112 -128 -256 -224 -112 -32 -48 -64 -80 -112 -80 -96 -112 -288 -224 -112 -128 -80 -208 -96 0 0 -96 -128 +128 16 -16 32 16 -32 48 -80 -32 -112 0 80 64 -32 -32 -64 -48 80 48 160 -96 -32 64 64 208 -80 128 224 240 112 32 +288 240 192 256 272 176 320 112 208 192 320 336 240 112 144 96 144 288 304 464 208 256 336 320 512 176 416 496 496 368 304 +432 432 432 480 512 432 592 400 480 496 560 512 416 304 352 336 384 496 544 656 528 544 560 592 720 480 624 640 640 592 544 +464 528 560 608 656 608 704 624 656 672 656 576 512 496 528 528 560 592 640 688 688 672 624 704 720 656 656 656 640 688 656 +352 448 544 560 592 624 624 704 640 624 528 464 496 544 560 592 624 528 560 480 640 576 528 624 528 656 496 448 448 592 576 +112 208 352 352 368 464 336 576 400 352 208 208 304 448 448 512 496 304 352 144 384 288 224 352 160 480 160 112 128 320 336 +-160 -96 48 0 0 128 -64 272 16 -64 -176 -112 32 208 192 272 240 0 32 -208 16 -128 -160 -48 -240 128 -208 -240 -208 -48 0 +-400 -384 -288 -336 -400 -272 -448 -144 -384 -480 -496 -400 -240 -80 -128 -64 -96 -272 -272 -464 -368 -464 -480 -400 -560 -256 -512 -496 -448 -352 -304 +-512 -544 -496 -560 -656 -544 -656 -496 -672 -704 -640 -528 -432 -320 -368 -336 -352 -432 -448 -528 -560 -624 -608 -624 -640 -544 -608 -576 -512 -528 -480 +-464 -512 -528 -624 -704 -656 -624 -672 -688 -672 -544 -480 -448 -464 -464 -480 -480 -416 -448 -400 -544 -560 -544 -608 -528 -608 -480 -448 -384 -496 -464 +-336 -352 -432 -480 -528 -560 -416 -640 -512 -416 -288 -256 -320 -416 -400 -432 -432 -272 -288 -128 -336 -288 -288 -384 -240 -464 -208 -192 -160 -288 -288 +-128 -112 -192 -224 -224 -304 -144 -400 -176 -80 16 -16 -128 -256 -224 -256 -224 -64 -64 96 -48 16 16 -80 32 -192 48 48 48 -32 -48 +0 64 0 0 48 -32 80 -112 112 192 224 144 48 -80 -32 -64 -16 96 112 208 192 224 224 160 192 48 208 192 144 144 112 +16 112 96 96 176 128 128 80 240 288 240 160 112 64 96 80 112 112 160 160 256 256 240 224 144 160 144 144 96 192 144 +-48 32 32 64 128 112 32 144 176 176 80 32 48 96 96 96 96 16 48 -64 112 80 80 128 -32 112 -16 -32 -80 48 32 +-128 -96 -96 -80 -48 -32 -176 16 -32 -64 -160 -144 -64 16 -16 0 -32 -160 -160 -288 -128 -160 -176 -96 -240 -64 -240 -224 -272 -160 -176 +-192 -256 -272 -240 -256 -240 -320 -176 -272 -304 -320 -272 -208 -128 -160 -160 -208 -304 -304 -416 -368 -368 -336 -304 -368 -272 -384 -352 -352 -352 -320 +-176 -304 -336 -304 -352 -368 -352 -304 -384 -400 -352 -288 -272 -240 -272 -304 -320 -320 -368 -352 -448 -416 -384 -384 -320 -384 -352 -304 -304 -368 -352 +-112 -224 -288 -240 -304 -352 -240 -336 -336 -304 -208 -192 -256 -272 -304 -336 -320 -224 -272 -176 -336 -304 -256 -304 -176 -320 -192 -176 -128 -256 -224 +-16 -112 -128 -96 -144 -192 -48 -208 -144 -96 0 -48 -144 -224 -208 -240 -208 -64 -96 48 -112 -64 -32 -112 48 -144 32 32 80 -48 -32 +64 32 48 64 48 0 128 -32 80 144 176 80 0 -112 -48 -80 -48 96 112 208 128 160 160 96 208 80 192 176 224 112 160 +64 112 176 144 176 160 224 160 240 240 208 144 80 16 80 64 96 160 208 256 272 272 240 224 256 240 272 208 208 192 224 +32 96 192 144 192 192 192 224 272 224 128 96 128 112 144 144 160 144 176 144 256 240 208 208 160 256 176 128 96 160 160 +-48 32 96 48 80 128 48 192 128 48 -32 0 80 128 112 144 112 32 48 -48 112 64 32 96 -16 144 16 -48 -64 32 0 +-128 -48 -48 -96 -64 -16 -144 48 -64 -128 -176 -112 0 64 32 48 0 -112 -112 -224 -96 -128 -144 -96 -192 -16 -160 -176 -224 -128 -192 +-160 -128 -160 -192 -192 -160 -256 -112 -256 -272 -256 -176 -96 -32 -80 -64 -96 -208 -224 -320 -272 -288 -272 -224 -304 -176 -256 -256 -288 -256 -288 +-144 -160 -208 -224 -240 -224 -256 -240 -320 -304 -240 -208 -176 -112 -160 -160 -176 -224 -240 -288 -336 -320 -320 -288 -288 -272 -256 -208 -240 -272 -304 +-112 -128 -176 -144 -176 -208 -176 -288 -256 -224 -160 -160 -192 -176 -192 -176 -192 -160 -192 -144 -256 -256 -224 -224 -176 -240 -160 -128 -144 -160 -176 +-48 -64 -96 -16 -48 -80 -16 -208 -128 -64 -32 -64 -144 -144 -128 -160 -128 -64 -64 16 -112 -96 -64 -112 -16 -144 -16 16 16 -16 0 +16 0 32 80 96 48 112 -64 48 64 64 16 -48 -96 -48 -64 -32 64 48 144 64 80 80 48 112 -16 96 128 144 112 112 +32 64 96 160 192 144 176 80 160 144 128 80 48 0 32 32 48 112 144 176 176 176 160 128 160 96 144 160 192 160 176 +32 80 112 144 176 160 176 160 176 144 128 112 112 80 96 96 96 128 144 128 208 192 176 176 144 144 128 128 128 160 144 +16 80 80 80 96 128 80 176 96 64 48 80 112 112 112 112 96 64 80 0 112 112 80 112 48 96 32 32 32 64 32 +0 32 16 0 0 16 -48 80 -32 -48 -32 0 48 80 64 80 32 -16 -32 -96 -16 -16 -16 16 -48 0 -96 -80 -80 -48 -80 +0 -16 -64 -64 -112 -80 -144 -48 -176 -144 -112 -80 -32 0 0 32 -16 -80 -128 -176 -144 -144 -128 -96 -144 -80 -160 -160 -144 -144 -160 +-16 -16 -96 -112 -144 -144 -176 -160 -224 -176 -128 -128 -96 -64 -80 -64 -80 -128 -160 -176 -208 -192 -160 -160 -160 -144 -176 -176 -144 -176 -160 +-16 -48 -80 -96 -128 -144 -144 -176 -176 -144 -112 -128 -128 -128 -112 -112 -112 -112 -144 -112 -192 -176 -160 -144 -128 -128 -128 -112 -96 -128 -112 +16 -32 -32 -48 -48 -48 -32 -128 -80 -32 -32 -64 -112 -128 -112 -112 -96 -64 -64 16 -96 -80 -80 -96 -48 -96 -48 -32 -16 -48 -16 +16 0 16 32 32 32 64 -48 64 64 32 0 -48 -96 -64 -80 -48 16 32 96 32 16 16 -16 32 -16 32 16 64 48 80 +32 16 64 48 80 96 128 80 144 128 96 64 16 -32 0 -16 16 80 96 112 128 112 64 48 64 48 80 64 64 112 128 +16 32 64 48 80 96 96 128 160 112 80 80 64 0 48 16 64 96 112 80 144 144 96 80 96 96 80 64 48 112 96 +0 32 32 0 16 16 16 144 80 48 32 32 80 48 64 48 64 48 64 32 96 96 48 64 32 64 16 16 -16 32 32 +0 16 -16 -64 -96 -64 -64 64 -32 -48 -32 -16 16 48 48 64 16 -16 0 -80 0 0 0 0 -16 16 -32 -32 -96 -48 -48 +0 -16 -80 -112 -160 -144 -144 -64 -144 -128 -96 -80 -48 32 -16 16 -32 -80 -96 -128 -80 -80 -80 -80 -80 -32 -80 -96 -144 -112 -144 +16 -48 -96 -128 -176 -160 -160 -144 -176 -160 -128 -96 -96 -32 -64 -32 -80 -112 -112 -128 -160 -128 -112 -96 -96 -96 -80 -80 -128 -144 -128 +16 -64 -96 -80 -128 -128 -96 -192 -112 -128 -80 -80 -96 -64 -96 -64 -96 -96 -112 -80 -160 -128 -96 -96 -80 -96 -64 -48 -64 -96 -80 +16 -48 -48 -16 -16 -16 0 -144 -16 0 0 -32 -64 -48 -80 -80 -80 -48 -48 0 -80 -64 -48 -48 -32 -64 -16 0 16 -16 16 +0 -16 0 48 96 80 80 -32 96 96 64 16 0 -48 -64 -64 -16 32 16 64 16 16 16 0 32 -16 16 48 96 64 96 +-16 -16 32 80 160 144 144 80 160 144 96 48 48 -16 0 -16 32 80 80 112 112 80 64 48 48 16 64 80 112 96 128 +-48 0 32 64 128 144 128 128 144 128 80 64 64 16 48 16 48 80 80 80 128 96 64 80 80 32 48 64 80 96 96 +-64 -16 16 0 48 80 32 128 64 48 0 0 48 48 64 32 64 48 64 16 80 48 32 64 48 48 32 0 0 32 0 +-64 -32 -32 -80 -64 -16 -64 64 -64 -64 -80 -48 0 32 32 32 32 -16 0 -64 0 -16 -32 16 0 16 -16 -48 -80 -64 -80 +-64 -64 -80 -128 -128 -128 -128 -32 -160 -144 -128 -96 -64 0 -16 16 -16 -64 -48 -128 -80 -112 -80 -32 -48 0 -64 -96 -128 -112 -128 +-48 -96 -96 -128 -128 -160 -160 -128 -192 -176 -128 -112 -112 -48 -48 -32 -48 -96 -96 -96 -144 -128 -128 -96 -80 -64 -80 -112 -112 -128 -144 +-48 -112 -112 -80 -96 -128 -128 -128 -144 -160 -96 -80 -128 -80 -96 -64 -64 -96 -80 -48 -128 -112 -96 -112 -80 -64 -80 -80 -80 -96 -80 +-48 -128 -96 0 -32 -48 -32 -96 -32 -96 -16 -48 -96 -96 -80 -80 -64 -48 -48 0 -64 -48 -32 -80 -64 -48 -48 -48 0 -32 -32 +-48 -96 -64 32 48 32 48 -16 32 0 32 0 -48 -80 -64 -80 -48 -16 0 48 0 16 16 -48 -32 -32 -16 16 48 32 48 +-64 -64 -48 64 80 80 80 48 80 80 64 48 0 -32 -32 -48 -32 16 32 48 64 64 64 0 16 -16 0 32 64 64 64 +-64 -32 -16 32 64 80 48 80 64 80 32 32 16 0 0 -16 -16 32 16 32 80 64 64 16 16 0 0 16 48 48 16 +-48 0 0 0 0 32 0 48 16 64 -16 16 16 16 16 0 -32 0 0 -16 32 32 32 16 0 0 0 16 -16 0 -48 +-48 16 16 -48 -64 -64 -80 -32 -80 -16 -80 -32 0 0 0 0 -32 -48 -48 -80 -16 -48 -16 16 0 0 -16 -16 -64 -64 -112 +-32 0 16 -80 -128 -144 -112 -96 -144 -80 -112 -64 -32 0 -16 16 -48 -80 -80 -112 -96 -96 -80 0 -32 -16 -32 -64 -96 -112 -160 +-16 -16 32 -80 -128 -160 -144 -144 -144 -112 -112 -80 -48 -32 -48 -16 -64 -96 -80 -112 -112 -112 -96 -32 -64 -16 -48 -64 -112 -128 -128 +0 -48 16 -48 -96 -128 -96 -144 -112 -96 -64 -48 -64 -48 -48 -48 -48 -80 -80 -48 -112 -96 -96 -64 -64 -48 -64 -64 -64 -80 -64 +0 -48 0 -16 -32 -48 -32 -80 -48 -48 -16 -16 -48 -64 -64 -64 -48 -48 -32 -16 -64 -80 -64 -64 -64 -64 -64 -32 -16 -32 0 +-16 -64 -16 0 32 48 16 0 32 0 16 32 -32 -64 -64 -64 -16 -16 -16 16 -16 -16 0 -48 -48 -80 -32 0 32 0 64 +-16 -32 -32 16 64 80 32 48 64 32 32 32 0 -32 -16 -48 -16 16 16 32 32 48 16 -32 -16 -48 -16 16 48 32 64 +-48 -16 -64 -16 48 64 32 80 48 48 32 16 0 -16 0 -32 0 32 32 16 64 48 32 0 0 -48 0 16 16 16 16 +-64 0 -64 -32 0 16 0 64 16 0 -16 -32 0 0 0 -16 -16 0 0 -16 16 16 16 32 0 -16 0 0 -32 -32 -32 +-64 16 -32 -64 -64 -48 -64 -16 -64 -48 -80 -64 -16 0 0 -16 -32 -32 -32 -48 -32 -16 0 32 0 0 0 -32 -96 -96 -80 +-64 32 0 -64 -96 -112 -80 -80 -128 -80 -96 -80 -32 -16 -16 -16 -32 -64 -64 -80 -64 -48 -48 16 -16 16 -16 -48 -112 -96 -96 +-48 0 -16 -64 -96 -128 -96 -128 -112 -96 -80 -80 -48 -16 -16 -32 -48 -48 -48 -80 -80 -80 -64 -32 -32 0 -32 -64 -96 -96 -48 +-16 0 0 -32 -80 -96 -64 -144 -80 -64 -32 -48 -48 -32 -32 -32 -16 -32 -32 -48 -80 -64 -64 -48 -32 -16 -32 -48 -32 -48 0 +0 -48 0 -16 -16 -48 -16 -96 -16 -32 16 -16 -48 -32 -32 -16 -16 0 0 0 -48 -16 -32 -64 -48 -48 -32 -16 0 16 48 +-16 -48 -16 0 16 16 32 -16 48 16 48 16 -16 -32 -32 0 -16 32 16 32 0 0 -16 -64 -32 -32 -16 0 32 64 96 +0 -48 -48 0 32 64 32 32 48 32 48 16 0 -32 -16 0 0 16 32 32 32 32 -16 -48 -16 -32 -16 0 32 80 96 +-32 -48 -64 0 0 48 32 48 32 32 16 0 -16 -16 0 -32 0 16 0 0 32 32 -16 -16 0 -16 0 16 -16 48 64 +-32 -16 -48 -16 -32 0 -16 32 -16 -16 -16 -32 -16 -16 -16 -32 -16 -16 -48 -48 0 16 -16 0 0 -16 -16 -32 -64 0 -16 +-32 0 -48 -64 -80 -64 -48 -16 -80 -64 -80 -64 -48 -16 -32 -16 -32 -48 -48 -80 -64 -48 -48 0 0 0 -32 -48 -96 -64 -80 +-32 0 -32 -64 -96 -112 -80 -64 -112 -112 -96 -96 -64 -32 -48 -32 -48 -96 -64 -96 -80 -64 -48 -16 -16 0 -48 -64 -96 -80 -112 +-16 -16 -16 -80 -96 -112 -80 -112 -112 -112 -128 -96 -64 -48 -48 -64 -48 -80 -80 -80 -96 -96 -64 -48 -32 -32 -48 -80 -64 -64 -96 +-16 -16 -16 -32 -64 -96 -48 -112 -80 -96 -80 -64 -64 -48 -64 -48 -48 -64 -32 -64 -80 -96 -48 -64 -64 -32 -80 -64 -16 -32 -48 +-32 -48 -16 -16 -32 -48 -16 -48 -32 -48 -16 -32 -48 -64 -64 -48 -32 -32 0 -16 -48 -64 -48 -80 -80 -48 -64 -48 64 0 16 +-32 -32 -16 0 32 16 32 0 48 0 16 0 -32 -64 -48 -32 -32 -16 16 0 -16 -16 -16 -64 -80 -64 -48 0 80 48 32 +-16 -16 -16 32 48 64 32 48 80 32 48 16 0 -32 0 -16 0 0 0 16 16 16 0 -64 -48 -48 -32 0 80 48 48 +-16 -16 -16 16 48 64 16 80 64 48 48 16 0 0 16 0 0 16 0 0 16 16 0 -32 -32 -48 -32 0 48 16 0 +-32 16 0 32 32 48 0 80 32 32 16 0 16 0 32 16 0 16 -16 -16 16 16 0 0 0 -16 -16 0 -16 -16 -32 +-16 16 16 32 0 16 -16 32 -16 0 -16 -16 0 0 16 0 0 -16 -32 -16 -16 -16 -16 16 16 -16 0 -16 -64 -48 -96 +-16 0 16 16 -16 -48 -48 -32 -48 -16 -64 -16 0 -16 0 0 -16 -32 -32 -32 -32 -32 0 48 16 16 -16 -32 -80 -80 -96 +-16 -16 16 -16 -32 -80 -64 -80 -64 -48 -96 -32 -16 0 -32 0 -16 -32 -32 -16 -32 -48 -16 16 0 16 -32 -32 -48 -64 -80 +-48 -64 -16 -32 -32 -64 -48 -96 -80 -80 -80 -48 -64 -16 -64 -32 -16 -48 -16 -16 -48 -48 -16 -16 -32 -16 -32 -32 -16 -16 -48 +-48 -96 -64 -48 -32 -48 -48 -96 -64 -80 -64 -32 -64 -16 -64 -32 -32 -16 16 -16 -32 -32 -16 -48 -32 -32 -48 0 32 0 0 +-64 -96 -96 -64 -32 -32 -48 -64 -48 -64 -32 -32 -64 -48 -64 -48 -32 -16 0 0 0 -16 -16 -48 -48 -32 -32 0 32 0 16 +-64 -80 -112 -64 -32 -16 -32 -32 -32 -32 -16 -32 -32 -64 -64 -32 -16 -16 -16 -16 -16 0 -16 -48 -48 -48 -16 0 16 0 16 +-32 -64 -96 -48 -32 0 -32 0 0 0 16 -32 -16 -32 -16 -32 -32 0 -16 -16 0 16 -32 -32 -32 -48 0 16 -16 -16 -16 +-32 -16 -48 -48 -32 -16 -32 16 0 0 16 -32 -16 -32 0 -16 -48 -16 -32 -48 -16 -16 -32 -32 0 -48 0 -16 -48 -48 -64 +-16 0 -32 -16 -48 -32 -48 0 -16 0 0 -16 0 -16 16 -16 -32 0 -32 -48 -16 -32 -32 -16 0 -32 -16 -32 -64 -80 -80 +16 16 -16 -16 -64 -32 -48 -32 -32 -16 -32 -32 16 0 32 0 -32 -32 -48 -32 -32 -48 -32 0 -16 -32 -32 -32 -80 -80 -80 +16 0 16 -32 -48 -32 -64 -48 -48 -16 -48 -48 -16 0 0 -16 -16 -32 -32 -32 -32 -64 -48 -16 -32 -16 -16 -32 -80 -64 -64 +0 -32 0 -32 -32 -32 -32 -64 -32 -32 -64 -48 -32 -16 -32 -16 -16 -32 -32 -16 -32 -48 -48 -32 -48 -16 -32 -16 -48 -32 -32 +-16 -48 -32 -64 -32 -32 -16 -64 -32 -48 -64 -32 -64 -32 -64 -48 -32 -48 -16 -16 -16 -32 -32 -48 -48 -32 -16 0 -32 -16 0 +-32 -64 -48 -80 -32 -32 -16 -32 -32 -48 -32 -32 -48 -48 -80 -64 -32 -48 -16 -16 -32 -32 -48 -48 -64 -32 -16 -16 0 0 16 +-64 -64 -48 -80 -32 -16 0 -16 -16 -16 -16 -16 -48 -48 -64 -32 -48 -48 -32 -16 0 0 -16 -64 -64 -32 -16 -16 -16 0 0 +-80 -64 -48 -48 -16 -32 -16 16 -16 0 16 -16 -16 -48 -48 -32 -48 -48 -32 -32 -16 0 -16 -64 -48 -32 -32 -32 -32 -32 -16 +-64 -48 -48 -32 -32 -32 -16 16 -32 0 16 -16 -32 -16 -16 -32 -32 -48 -32 -48 -32 -16 -32 -48 -48 -32 -48 -64 -80 -64 -64 +-64 -16 -16 -16 -16 -32 -16 -16 -32 0 0 -16 -16 -32 -16 -32 -48 -16 -48 -64 -48 -32 -48 -32 -32 -48 -48 -80 -96 -96 -64 +-32 0 0 0 -32 -32 -16 -32 -48 -16 -16 -32 0 -16 -16 -32 -48 -16 -32 -64 -64 -48 -32 -48 -16 -48 -32 -96 -96 -80 -80 +0 0 16 0 0 -32 -16 -64 -48 -32 -32 -48 -16 -16 -32 -32 -32 -16 -32 -32 -64 -32 -16 -32 -16 -32 -32 -64 -80 -48 -64 +0 0 16 0 0 0 -16 -80 -32 -48 -48 -48 -32 -16 -16 -32 -16 -16 -32 -16 -48 -16 -16 -16 0 -16 0 -32 -32 -16 -16 +48 0 16 0 0 0 0 -48 -16 -32 -32 -32 -48 -16 -16 -32 0 0 -16 0 -32 0 0 -16 16 16 32 0 16 16 16 +32 16 0 -16 16 16 32 -16 0 -16 0 0 -16 -16 -16 -16 0 -16 -16 0 0 16 0 0 16 32 32 32 48 48 48 +16 0 0 -16 32 32 16 32 0 0 16 16 -16 0 0 0 0 -16 0 0 32 16 16 0 0 64 32 48 64 48 80 +-16 0 0 -16 0 16 16 48 0 16 16 32 0 0 16 16 0 0 16 0 16 16 0 0 16 64 16 32 32 48 32 +-32 0 0 0 -16 16 0 48 -16 0 0 16 0 -16 0 16 16 0 0 -16 16 16 -16 16 0 48 -16 0 0 0 16 +-48 -16 -32 0 -32 -16 -32 0 -16 -16 -16 -16 0 0 0 0 0 0 0 -32 -16 -16 -32 0 16 0 -48 -48 -32 -48 -32 +-48 -32 -32 -32 -48 -48 -64 -32 -48 -64 -48 -64 -32 -16 -16 -16 -16 -32 -16 -48 -32 -32 -48 -16 -16 -16 -80 -80 -80 -64 -48 +-48 -64 -64 -48 -64 -64 -80 -80 -64 -80 -96 -80 -32 -16 -48 -48 -48 -32 -48 -48 -64 -80 -48 -32 -32 -48 -96 -112 -96 -64 -80 +-48 -64 -80 -80 -64 -80 -80 -128 -64 -96 -96 -80 -48 -64 -80 -80 -64 -48 -32 -48 -80 -80 -64 -48 -48 -80 -64 -96 -80 -64 -64 +-32 -80 -80 -80 -64 -80 -80 -112 -64 -80 -96 -80 -64 -64 -96 -80 -64 -48 -48 -32 -80 -80 -64 -64 -64 -80 -48 -80 -48 -48 -48 +-32 -64 -64 -80 -48 -80 -64 -64 -48 -64 -80 -80 -64 -64 -80 -80 -64 -32 -32 -32 -48 -48 -64 -80 -64 -64 -32 -32 -16 -32 -32 +-16 -48 -48 -64 -48 -48 -48 -32 -16 -32 -32 -32 -64 -48 -64 -48 -48 -48 -48 -32 -16 -32 -32 -32 -48 -32 -32 0 0 -16 -32 +-32 -16 -32 -16 -32 -32 -32 0 -16 -16 -16 -16 -32 -48 -32 -32 -32 -32 -32 -16 0 0 -32 -16 -16 -32 -32 0 0 -16 -48 +-32 0 0 0 -32 -32 -16 16 0 0 0 16 -16 -16 0 0 -16 -16 -16 -16 0 0 -16 -16 -16 -16 -48 0 0 -16 -48 +-32 16 0 16 -16 -16 0 16 0 16 0 16 0 0 0 0 -16 0 0 -16 0 0 0 0 0 -32 -48 -16 0 -16 -32 +-48 0 0 16 0 0 0 0 0 16 0 16 16 0 16 0 0 0 0 -16 -32 -32 -16 16 0 -32 -48 -16 -16 -16 -32 +-48 -32 -16 16 16 0 -16 -16 0 -16 -16 -32 -16 0 0 0 0 -16 0 -16 -32 -48 -16 0 -16 -48 -48 -16 -32 0 -16 +-64 -32 -16 -16 0 0 -16 -48 -16 -16 -32 -32 -32 -16 -16 -32 -16 -16 0 -16 -48 -64 -16 -16 -32 -48 -16 -32 -16 -16 0 +-64 -64 -32 -64 -16 -16 -32 -48 -48 -48 -32 -48 -32 -32 -32 -48 -16 -16 -32 -16 -48 -48 -16 -32 -64 -48 -16 -32 -16 0 0 +-64 -80 -48 -80 -32 -48 -48 -64 -48 -16 -32 -48 -48 -32 -48 -48 -32 -16 -32 -48 -32 -32 -32 -48 -64 -48 -16 0 -16 0 0 +-48 -80 -64 -80 -64 -48 -48 -48 -48 -16 -16 -32 -48 -48 -48 -48 -32 -32 -48 -64 -16 -32 -32 -48 -80 -32 -16 0 -16 -16 -32 +-64 -64 -64 -80 -64 -64 -64 -32 -32 -16 -16 -32 -48 -48 -48 -32 -32 -32 -48 -64 -32 -16 -32 -32 -64 -48 -32 -16 0 -32 -48 +-32 -48 -64 -64 -80 -48 -64 -16 -32 -16 -16 -16 -48 -16 -48 -32 -32 -48 -48 -64 -32 -16 -16 -32 -64 -48 -48 -32 -32 -64 -64 +0 -32 -48 -32 -64 -48 -64 -16 -16 -32 -32 -16 -48 -32 -32 -16 -32 -64 -32 -64 -48 -16 -16 -32 -32 -48 -80 -64 -48 -64 -64 +0 0 -16 -16 -48 -32 -32 -16 -16 -16 -32 -32 -32 -16 -16 -48 -32 -48 -16 -32 -48 -32 -32 0 -16 -64 -80 -64 -48 -64 -64 +16 16 -16 0 -32 -16 -16 -16 -16 -32 -32 -32 -32 -16 -16 -32 -32 -32 -32 -16 -64 -32 0 0 0 -48 -32 -48 -64 -32 -32 +16 0 0 0 0 0 0 -16 -16 -32 -16 -32 -16 0 -16 -32 -32 -32 -16 0 -32 -16 0 0 0 -32 0 -16 -32 -16 16 +16 0 16 0 16 32 16 -16 0 -16 -16 -16 0 0 -16 -16 -16 0 -16 16 -16 -16 16 0 16 0 16 0 16 16 32 +16 0 16 -16 0 16 0 0 -16 -16 -16 0 0 0 0 -16 0 0 -16 0 0 0 0 0 0 16 32 32 32 16 32 +-16 -32 0 -16 0 0 0 -16 -16 0 0 0 0 -16 0 0 0 0 -16 -16 16 0 0 -16 -16 32 32 32 16 16 16 +-48 -32 -16 -16 -16 -16 -32 0 -32 0 0 -16 -16 -16 -16 0 0 0 -16 -16 0 0 -16 -32 -16 16 16 0 16 0 0 +-48 -32 -16 -16 -32 -32 -32 0 -48 0 0 -16 -16 0 0 0 -16 -16 -16 -32 0 0 -32 -48 -48 0 -16 -16 -16 -16 -16 +-48 -48 -48 16 -32 -32 -32 -32 -48 -32 0 -16 -48 -16 0 -16 -16 -32 -16 -48 -32 0 -32 -48 -32 -16 -48 -32 -32 -16 -48 +-32 -48 -48 0 -16 -16 -16 -32 -32 -32 -32 -16 -32 -32 0 -16 -16 -48 -16 -32 -32 -16 -32 -48 -32 -32 -48 -64 -32 -48 -48 +-32 -16 -32 -16 0 0 -16 -48 -16 -32 -32 -32 -32 -16 -16 -16 -32 -48 -16 0 -32 -32 -32 -48 -16 -32 -48 -48 -48 -48 -48 +-16 -16 -48 -16 16 16 0 -32 0 -32 -32 -32 -32 -32 -16 -32 -48 -48 -32 0 -32 -48 -32 -48 -16 -32 -32 -32 -48 -32 -16 +-16 16 -32 -16 16 0 0 -16 -16 -48 -32 -16 -16 -48 -32 -16 -16 -32 -32 -16 -16 -48 -32 -64 -16 -32 0 -16 -16 -16 0 +-16 0 -16 -32 0 16 -16 -16 -16 -32 -32 -16 -16 -32 -64 -32 -32 -16 -32 0 -16 -48 -16 -32 -16 -16 16 0 -16 -32 -16 +-16 0 -16 -32 0 -16 -48 -16 -32 -32 -32 -16 -16 -32 -48 -32 -16 0 -16 -16 -16 -48 -48 -32 -32 0 0 0 -16 -32 -32 +0 0 0 -32 -32 -32 -48 -16 -48 -32 -32 -16 -16 -32 -48 -16 -16 0 -32 -32 0 -16 -32 -32 -32 -16 0 -16 -16 -32 -48 +-16 -16 0 0 -16 -64 -64 -32 -48 -32 -32 -16 -16 -32 -32 -32 0 -16 -32 -32 0 -16 -32 -32 -32 -32 -16 -32 -32 -32 -48 +0 -16 0 16 -48 -64 -48 0 -16 -32 -32 -16 -48 -32 -32 -32 -16 -32 -32 -32 -16 -16 -32 -32 -32 -32 -48 -48 -48 -32 -48 +-16 -16 16 0 -32 -48 -32 -16 -16 -16 -16 -16 -32 -32 -16 -32 -32 -32 -32 -32 -16 -16 -32 -16 -32 -64 -48 -48 -80 -32 -48 +-16 -32 0 -16 -48 -32 -16 -32 0 -32 -32 -16 -16 -16 -16 -16 -48 -32 -16 -16 -16 -16 -48 -16 -16 -48 -48 -48 -48 -32 -32 +-16 -48 0 -16 -16 -32 -32 -16 0 -16 -16 -32 -16 -32 -32 -32 -48 -32 -32 -16 -32 -16 -48 -16 -16 -48 -32 -32 -32 -16 0 +-16 -32 -16 -16 -16 -16 0 -16 -16 -32 -32 -16 0 -16 -32 -32 -32 -16 -32 0 -16 -32 -32 -16 -16 -32 -32 -16 -16 0 16 +-32 -32 -16 -48 -16 -16 0 -16 0 -32 -16 -16 -16 -16 -48 -32 -16 -16 -16 16 0 -32 -16 -32 -16 -16 0 0 16 0 16 +-32 -48 -32 -32 -16 -16 0 -16 -16 -16 0 -32 -16 -16 -32 -32 0 0 0 0 0 -32 0 -16 -16 0 0 0 0 0 0 +-32 -32 -32 -32 -32 -16 0 -16 -16 -16 0 -32 0 -16 -32 -16 0 0 0 0 0 -32 0 -16 -16 16 0 0 0 0 -16 +0 0 -32 0 0 -32 0 0 0 0 0 0 0 -16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/testEssayScriptExample.c b/testEssayScriptExample.c new file mode 100644 index 0000000..b8d741e --- /dev/null +++ b/testEssayScriptExample.c @@ -0,0 +1,2200 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +int nextpow2(int); +double sinc(double); + + +#pragma pack(push, 1) +typedef struct { + uint16_t type; + uint32_t size; + uint16_t reserved1; + uint16_t reserved2; + uint32_t offset; + uint32_t dib_header_size; + int32_t width_px; + int32_t height_px; + uint16_t num_planes; + uint16_t bits_per_pixel; + uint32_t compression; + uint32_t image_size_bytes; + int32_t x_resolution_ppm; + int32_t y_resolution_ppm; + uint32_t num_colors; + uint32_t important_colors; +} BMPHeader; +#pragma pack(pop) + +void write_bmp_header(FILE* file, int width, int height) { + BMPHeader header = { 0 }; + int row_padded = (width * 3 + 3) & (~3); + int data_size = row_padded * height; + int file_size = 54 + data_size; + + header.type = 0x4D42; + header.size = file_size; + header.offset = 54; + header.dib_header_size = 40; + header.width_px = width; + header.height_px = height; + header.num_planes = 1; + header.bits_per_pixel = 24; + header.image_size_bytes = data_size; + + fwrite(&header, sizeof(BMPHeader), 1, file); +} + +void save_matrix_as_bmp(double** matrix, int width, int height, const char* filename) { + FILE* file = fopen(filename, "wb"); + if (!file) { + fprintf(stderr, "Impossible d'ouvrir le fichier %s\n", filename); + return; + } + + write_bmp_header(file, width, height); + + int row_padded = (width * 3 + 3) & (~3); + uint8_t padding[3] = { 0, 0, 0 }; + int padding_size = row_padded - (width * 3); + + // Trouver les valeurs min et max dans la matrice pour la normalisation + double min_val = matrix[0][0]; + double max_val = matrix[0][0]; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if (matrix[y][x] < min_val) min_val = matrix[y][x]; + if (matrix[y][x] > max_val) max_val = matrix[y][x]; + } + } + + for (int y = height - 1; y >= 0; y--) { + for (int x = 0; x < width; x++) { + // Normaliser et convertir en uint8_t + uint8_t pixel = (uint8_t)(255 * (matrix[y][x] - min_val) / (max_val - min_val)); + uint8_t color[3] = { pixel, pixel, pixel }; + fwrite(color, 3, 1, file); + } + fwrite(padding, padding_size, 1, file); + } + + fclose(file); +} + + + + +#define pi 3.1416 +#define eps 2.2204e-16 +#define _CRT_SECURE_NO_WARNINGS +#define DATA_DIR L"C:\\Users\\yazan\\Desktop\\07_07_2024\\Stage ijl\\UTSR_CPP\\EssayScriptExample\\AcquiredData\\Specimen01\\*" +#define MAX_FILENAME_LEN 256 +#define MAX_DATA_LEN 10000 + + +void main() +{ + printf("**************** run main ********************* \n"); + // Defines essay parameters + // Propagation medium and transducer parameters + double TendGate, cl, d, fc, bw, A0, alpha_atenu, T1; + TendGate = 24.98; cl = 5859.4; d = 6.35; + fc = 4.6; bw = 4.4; A0 = 2.02; + alpha_atenu = 0.03548; T1 = 100e-9; + // Generating a infinitesimal point discontinuity model for calibration + // ROI(in mm) + double minX, maxX, minZ, maxZ, DepthCentre; + minX = 0; maxX = 30; + minZ = 40; maxZ = 41.7; + DepthCentre = 40; + //simulNDT + double deltaT_simul; + int TsGate_simul, AscanPoints_simul, Rows_simul, Diameter_simul; + deltaT_simul = 0.02; + TsGate_simul = 0; + AscanPoints_simul = (int)(TendGate / deltaT_simul) + 1; + Rows_simul = (int)(maxX)+1; + Diameter_simul = 0; + double** timeScale_simul = (double**)malloc(AscanPoints_simul * sizeof(double*)); + int** X_simul = (int**)malloc(Rows_simul * sizeof(int*)); + for (int i = 0; i < AscanPoints_simul; i++) + { + timeScale_simul[i] = (double*)malloc(1 * sizeof(double)); + timeScale_simul[i][0] = i * deltaT_simul; + } + for (int i = 0; i < Rows_simul; i++) + { + X_simul[i] = (int*)malloc(1 * sizeof(int)); + X_simul[i][0] = i; + } + // Getting calibration data + double ERMv, du; + ERMv = cl / 2; + du = (X_simul[1][0] - X_simul[0][0]) * 1e-3; + // GenerateModelFilter + double deltaScanX_g, deltaT_g, y_g; + int Rx_g, nt0_g, nu0_g, nt_g, nu_g; + double** scanX_g = (double**)malloc(Rows_simul * sizeof(double*)); + + Rx_g = 1; + for (int i = 0; i < Rows_simul; i++) + { + scanX_g[i] = (double*)malloc(1 * sizeof(double)); + scanX_g[i][0] = X_simul[i][0] * 1e-3; + } + deltaScanX_g = (scanX_g[1][0] - scanX_g[0][0]) / Rx_g; + deltaT_g = (timeScale_simul[1][0] - timeScale_simul[0][0]) * 1e-6; + nt0_g = AscanPoints_simul; + nu0_g = Rows_simul; + nu0_g = (nu0_g - 1) * Rx_g + 1; + nt_g = pow(2, nextpow2(nt0_g) + 1); + nu_g = 2 * nu0_g; + + double** f_g = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** kx_g = (double**)malloc(((double)nu_g) * sizeof(double*)); + + for (int i = 0; i < nt_g; i++) + { + f_g[i] = (double*)malloc(1 * sizeof(double)); + f_g[i][0] = (((-nt_g / 2) + i) / deltaT_g) / nt_g; + } + for (int i = 0; i < nu_g; i++) + { + kx_g[i] = (double*)malloc(1 * sizeof(double)); + kx_g[i][0] = (((-nu_g / 2) + i) / deltaScanX_g) / nu_g; + } + // meshgrid(kx_g, f_g) + double** gf = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** gkx = (double**)malloc(((double)nt_g) * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + gf[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + gkx[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + gf[i][j] = f_g[i][0]; + gkx[i][j] = kx_g[j][0]; + } + }// fin meshgrid(kx_g, f_g) + double gst; + int** mask_g = (int**)malloc(nt_g * sizeof(int*)); + + for (int i = 0; i < nt_g; i++) + { + mask_g[i] = (int*)malloc(nu_g * sizeof(int*)); + for (int j = 0; j < nu_g; j++) + { + gst = gkx[i][j] / (gf[i][j] / ERMv); + + if (fabs(gst) <= 1.0) + { + mask_g[i][j] = 1; + } + else + { + mask_g[i][j] = 0; + } + } + } + //jinc + double** C1 = (double**)malloc(((double)nt_g) * sizeof(double*)); + //C1 + for (int i = 0; i < nt_g; i++) + { + C1[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + y_g = (_j1(((pi * gkx[i][j]) * ((d * 1e-3) / 2))) / (((pi * gkx[i][j]) * ((d * 1e-3) / 2)))); + if (isnan(y_g)) + { + y_g = 0.5; + } + C1[i][j] = ((y_g * y_g) * mask_g[i][j]) * ((pi / 2) * ((2 * (d * 1e-3 / 2) * (d * 1e-3 / 2) * (2 * pi) / ERMv) * fabs(f_g[i][0]))); + } + }// fin jinc + + // cossquare + double** Hed_r = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** Hed_i = (double**)malloc(((double)nt_g) * sizeof(double*)); + double f1_g, f4_g, ss_g, ff1_g, ff2_g, ri1_g, ri2_g, r1_g, r2_g, r_g, ExcTransd_r, ExcTransd_i; + f1_g = (fc * 1e6) - (bw * 1e6); + f4_g = (fc * 1e6) + (bw * 1e6); + //Hed + for (int i = 0; i < nt_g; i++) + { + Hed_r[i] = (double*)malloc(1 * sizeof(double)); + Hed_i[i] = (double*)malloc(1 * sizeof(double)); + ss_g = sin(pi * f_g[i][0] / (2 * (fc * 1e6))); + ri1_g = (fabs(f_g[i][0]) > (fc * 1e6)) && (fabs(f_g[i][0]) <= f4_g); + ri2_g = (fabs(f_g[i][0]) <= (fc * 1e6)) && (fabs(f_g[i][0]) <= f4_g); + ff1_g = ri1_g * fabs(f_g[i][0]); + ff2_g = ri2_g * fabs(f_g[i][0]); + r1_g = ri1_g * (cos(pi * ((fc * 1e6) - ff1_g) / (f4_g - f1_g)) * cos(pi * ((fc * 1e6) - ff1_g) / (f4_g - f1_g))); + r2_g = ri2_g * ss_g * (cos(pi * ((fc * 1e6) - ff2_g) / (f4_g - f1_g)) * cos(pi * ((fc * 1e6) - ff2_g) / (f4_g - f1_g))); + if (f_g[i][0] == 0) + { + r_g = r1_g; + } + else + { + r_g = r1_g + copysign(1.0, f_g[i][0] == 0) * r2_g; + } + ExcTransd_r = 2 * pi * sinc((2 * pi * f_g[i][0] * (T1 / 2))) * (-cos(-2 * pi * f_g[i][0] * (T1 / 2))); + ExcTransd_i = 2 * pi * sinc((2 * pi * f_g[i][0] * (T1 / 2))) * (-sin(-2 * pi * f_g[i][0] * (T1 / 2))); + + if (fabs(f_g[i][0]) <= 10e6) + { + Hed_r[i][0] = 1.5 * pi * r_g * r_g * ExcTransd_r; + Hed_i[i][0] = 1.5 * pi * r_g * r_g * ExcTransd_i; + } + else + { + Hed_r[i][0] = 0.0; + Hed_i[i][0] = 0.0; + } + }// + + double** Model_r = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** Model_i = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** Filt_r = (double**)malloc(((double)nt_g) * sizeof(double*)); + double** Filt_i = (double**)malloc(((double)nt_g) * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + Model_r[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + Model_i[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + Filt_r[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + Filt_i[i] = (double*)malloc(((double)nu_g) * sizeof(double)); + + for (int j = 0; j < nu_g; j++) + { + Model_r[i][j] = C1[i][j] * Hed_r[i][0]; + Model_i[i][j] = C1[i][j] * Hed_i[i][0]; + //conj(model) + Filt_r[i][j] = C1[i][j] * Hed_r[i][0]; + Filt_i[i][j] = -C1[i][j] * Hed_i[i][0]; + } + } + /* save_matrix_as_bmp(Model_i, nu_g, nt_g, "module.bmp"); + const char* filename1 = "module.bmp"; + #ifdef _WIN32 + system("start module.bmp"); + #elif __APPLE__ + system("open module.bmp"); + #elif __linux__ + system("xdg-open module.bmp"); + #else + printf("Image sauvegardée sous %s\n", filename1); + #endif*/ + + // fin GenerateModelFilter + free(timeScale_simul); free(X_simul); + free(scanX_g); free(f_g); + free(kx_g); free(gf); + free(gkx); free(mask_g); free(C1); + free(Hed_r); free(Hed_i); + //Defines regularization parameter + double alpha = 0.02; + // Loading acquired data + FILE* file = fopen("AscanValuesL.txt", "r"); + if (file == NULL) { + perror("Erreur lors de l'ouverture du fichier"); + return 1; + } + int rows = 0; + int cols = 0; + int temp; + char line[1024]; + while (fgets(line, sizeof(line), file)) { + cols = 0; + char* ptr = line; + while (sscanf_s(ptr, "%d", &temp) == 1) { + cols++; + while (*ptr != '\0' && *ptr != ' ' && *ptr != '\t') ptr++; + while (*ptr == ' ' || *ptr == '\t') ptr++; + } + rows++; + } + // printf("rows=%d,cols=%d\n", rows, cols); + double** AscanValues_ptAco40dB = (double**)malloc(((double)rows) * sizeof(double*)); + for (int i = 0; i < rows; i++) { + AscanValues_ptAco40dB[i] = (double*)malloc(((double)cols) * sizeof(double)); + } + rewind(file); + int i = 0, j = 0; + while (fgets(line, sizeof(line), file)) { + j = 0; + char* ptr = line; + while (sscanf_s(ptr, "%d", &temp) == 1) { + AscanValues_ptAco40dB[i][j++] = (double)temp * (double)((0.5 / 2048) / 100); + while (*ptr != '\0' && *ptr != ' ' && *ptr != '\t') ptr++; + while (*ptr == ' ' || *ptr == '\t') ptr++; + } + i++; + } + fclose(file); + + double deltaT_Load, sum_Load; + int backDepth_Load, Frequency_ptAco40dB; + double Cl_ptAco40dB, ProbeDiameter_ptAco40dB, Wavelength_ptAco40dB; + int backWallIdx[1][2] = { 1029,1029 }; + deltaT_Load = 0.02; + backDepth_Load = 60; + + double** timeScale_ptAco40dB = (double**)malloc((rows) * sizeof(double*)); + + for (int i = 0; i < rows; i++) + { + timeScale_ptAco40dB[i] = (double*)malloc(1 * sizeof(double)); + timeScale_ptAco40dB[i][0] = deltaT_Load * i; + } + double** X_ptAco40dB = (double**)malloc(((double)cols) * sizeof(double*)); + for (int i = 0; i < cols; i++) + { + X_ptAco40dB[i] = (double*)malloc(1 * sizeof(double)); + X_ptAco40dB[i][0] = i; + } + sum_Load = 0; + for (int i = 0; i < 2; i++) + { + int var_x = backWallIdx[0][i] - 1; + sum_Load = sum_Load + ((backDepth_Load * 2000) / (timeScale_ptAco40dB[var_x][0])); + } + Cl_ptAco40dB = sum_Load / 2; + Frequency_ptAco40dB = 5; + ProbeDiameter_ptAco40dB = 6.35; + Wavelength_ptAco40dB = Cl_ptAco40dB / (Frequency_ptAco40dB * 1000); + double** zz_Load = (double**)malloc((rows) * sizeof(double*)); + double** ffc_Load = (double**)malloc((rows) * sizeof(double*)); + double var_x1 = 0; + for (int i = 0; i < rows; i++) + { + zz_Load[i] = (double*)malloc(1 * sizeof(double)); + ffc_Load[i] = (double*)malloc(1 * sizeof(double)); + zz_Load[i][0] = (timeScale_ptAco40dB[i][0] * Cl_ptAco40dB) / 2000; + var_x1 = (1 / A0) * exp(alpha_atenu * zz_Load[i][0]); + if (var_x1 < 1) + { + ffc_Load[i][0] = 1; + } + else + { + ffc_Load[i][0] = var_x1; + } + } + for (int i = 0; i < rows; i++) + { + for (int j = 0; j < cols; j++) + { + AscanValues_ptAco40dB[i][j] = AscanValues_ptAco40dB[i][j] * ffc_Load[i][0]; + } + } + // save_matrix_as_bmp(AscanValues_ptAco40dB, cols, rows, "AscanValues_ptAco40dB.bmp"); + // const char* filename2 = "AscanValues_ptAco40dB.bmp"; + //#ifdef _WIN32 + // system("start AscanValues_ptAco40dB.bmp"); + //#elif __APPLE__ + // system("open AscanValues_ptAco40dB.bmp"); + //#elif __linux__ + // system("xdg-open AscanValues_ptAco40dB.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename2); + //#endif + + /// UTSR_ModS2 + double ERMv1, scanY, deltaScanZ, apertAngle, tanApertAngle, limApertX, tau0, dt, beta, tol, cg_tol; + int idxMinZ, idxMaxZ, M, colIniX, Rx; + ERMv1 = Cl_ptAco40dB / 2; + double** scanX = (double**)malloc(((double)cols) * sizeof(double*)); + for (int i = 0; i < cols; i++) + { + scanX[i] = (double*)malloc(1 * sizeof(double)); + scanX[i][0] = X_ptAco40dB[i][0] * 1e-3; + } + double** scanZ = (double**)malloc((rows) * sizeof(double*)); + for (int i = 0; i < rows; i++) + { + scanZ[i] = (double*)malloc(1 * sizeof(double)); + scanZ[i][0] = timeScale_ptAco40dB[i][0] * 1e-6 * ERMv1; + } + deltaScanZ = scanZ[1][0] - scanZ[0][0]; + apertAngle = asin((0.51 * Cl_ptAco40dB) / (Frequency_ptAco40dB * 1e6 * ProbeDiameter_ptAco40dB * 1e-3)); + tanApertAngle = tan(apertAngle); + for (int i = 0; i < rows; i++) + { + + if ((scanZ[i][0]) < ((double)(minZ * 1e-3))) + { + idxMinZ = i + 1; + } + if ((scanZ[i][0]) < ((double)(maxZ * 1e-3))) + { + idxMaxZ = i + 2; + } + } + M = (1 + (idxMaxZ - idxMinZ)); + double** roiZ = (double**)malloc((double)M * sizeof(double*)); + for (int i = 0; i < M; i++) + { + roiZ[i] = (double*)malloc(1 * sizeof(double)); + roiZ[i][0] = scanZ[i + idxMinZ][0]; + } + limApertX = roiZ[M - 1][0] * tanApertAngle; + for (int i = 0; i < cols; i++) + { + if ((scanX[i][0] + limApertX) >= scanX[0][0]) + { + colIniX = i + 1; + break; + } + } + printf("$$$$$$$ Starting UTSR algorithm (alpha = %f) $$$$$$$\n", alpha); + printf("---- Title: UTSR solution ----\n"); + clock_t tAlg = clock(); + //----- Starting UTSR algorithm ----- + double** S_t_u = (double**)malloc((double)M * sizeof(double*)); + for (int i = 0; i < M; i++) + { + S_t_u[i] = (double*)malloc(cols * sizeof(double)); + for (int j = 0; j < cols; j++) + { + S_t_u[i][j] = AscanValues_ptAco40dB[i + idxMinZ - 1][j]; + } + } + // save_matrix_as_bmp(S_t_u, cols, M, "S_t_u.bmp"); + // const char* filename3 = "S_t_u.bmp"; + //#ifdef _WIN32 + // system("start S_t_u.bmp"); + //#elif __APPLE__ + // system("open S_t_u.bmp"); + //#elif __linux__ + // system("xdg-open S_t_u.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename3); + //#endif + int fOrig = NULL; + tau0 = timeScale_ptAco40dB[idxMinZ - 1][0] * 1e-6; + int szData[1][2] = { M,cols }; + dt = deltaScanZ / ERMv1; + beta = 1; + tol = 1e-2; + cg_tol = 1e-2; + Rx = 1; + // ModS2T(S_t_u, dt, dx, ERMv, tau0, Filt, Rx) + //meshgrid(ku,f) + printf("nt_g=%d, nu_g=%d, M=%d, cols=%d\n", nt_g, nu_g, M, cols); + + double** f_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ku_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** fkz_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double sign_f; + for (int i = 0; i < nt_g; i++) + { + f_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ku_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + fkz_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + f_ModS2T[i][j] = (((double)(-nt_g / 2.0) + i) / dt) / nt_g; + ku_ModS2T[i][j] = (((double)(-nu_g / 2.0) + j) / du) / nu_g; + sign_f = (f_ModS2T[i][j] > 0) - (f_ModS2T[i][j] < 0); + fkz_ModS2T[i][j] = ERMv1 * sign_f * sqrt((ku_ModS2T[i][j] * ku_ModS2T[i][j]) + ((f_ModS2T[i][j] / ERMv1) * (f_ModS2T[i][j] / ERMv1))); + // printf("%e\t", f_ModS2T[i][j]); + } + // printf("\n"); + } + + + + // start timing for FFT + + // FFT2(S_t_u, nt_g, nu_g) + double sum_ftimage1_r_ModS2T = 0.0; + double sum_ftimage1_i_ModS2T = 0.0; + double** ftimage1_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage1_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + for (int k1 = 0; k1 < nt_g; k1++) + { + ftimage1_r_ModS2T[k1] = (double*)malloc(nu_g * sizeof(double)); + ftimage1_i_ModS2T[k1] = (double*)malloc(nu_g * sizeof(double)); + for (int k2 = 0; k2 < nu_g; k2++) + { + for (int n1 = 0; n1 < M; n1++) + { + for (int n2 = 0; n2 < cols; n2++) + { + double angle = 2 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + sum_ftimage1_r_ModS2T = sum_ftimage1_r_ModS2T + (S_t_u[n1][n2] * cos(angle)); + sum_ftimage1_i_ModS2T = sum_ftimage1_i_ModS2T - S_t_u[n1][n2] * sin(angle); + } + } + ftimage1_r_ModS2T[k1][k2] = sum_ftimage1_r_ModS2T; + ftimage1_i_ModS2T[k1][k2] = sum_ftimage1_i_ModS2T; + sum_ftimage1_i_ModS2T = 0.0; + sum_ftimage1_r_ModS2T = 0.0; + } + } + + //fftshift + double** ftimage21_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage21_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + + int a_fftshift, b_fftshift; + if (nt_g % 2 == 0) + { + a_fftshift = 0; + } + else { + a_fftshift = 1; + } + if (nu_g % 2 == 0) + { + b_fftshift = 0; + } + else + { + b_fftshift = 1; + } + for (int i = 0; i < nt_g; i++) + { + ftimage21_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage21_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + + if (b_fftshift == 1) + { + if (j < (int)(nu_g / 2)) + { + ftimage21_r_ModS2T[i][j] = ftimage1_r_ModS2T[i][j + (int)(nu_g / 2) + 1]; + ftimage21_i_ModS2T[i][j] = ftimage1_i_ModS2T[i][j + (int)(nu_g / 2) + 1]; + } + else + { + ftimage21_r_ModS2T[i][j] = ftimage1_r_ModS2T[i][j - (int)(nu_g / 2)]; + ftimage21_i_ModS2T[i][j] = ftimage1_i_ModS2T[i][j - (int)(nu_g / 2)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + ftimage21_r_ModS2T[i][j] = ftimage1_r_ModS2T[i][j + (int)(nu_g / 2)]; + ftimage21_i_ModS2T[i][j] = ftimage1_i_ModS2T[i][j + (int)(nu_g / 2)]; + } + else + { + ftimage21_r_ModS2T[i][j] = ftimage1_r_ModS2T[i][j - (int)(nu_g / 2)]; + ftimage21_i_ModS2T[i][j] = ftimage1_i_ModS2T[i][j - (int)(nu_g / 2)]; + } + } + } + } + + double** ftimage2_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage2_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + ftimage2_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage2_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + if (a_fftshift == 1) + { + if (i < (nt_g / 2)) + { + + ftimage2_r_ModS2T[i][j] = ftimage21_r_ModS2T[i + (int)(nt_g / 2) + 1][j]; + ftimage2_i_ModS2T[i][j] = ftimage21_i_ModS2T[i + (int)(nt_g / 2) + 1][j]; + } + else + { + ftimage2_r_ModS2T[i][j] = ftimage21_r_ModS2T[i - (int)(nt_g / 2)][j]; + ftimage2_i_ModS2T[i][j] = ftimage21_i_ModS2T[i - (int)(nt_g / 2)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + ftimage2_r_ModS2T[i][j] = ftimage21_r_ModS2T[i + (int)(nt_g / 2)][j]; + ftimage2_i_ModS2T[i][j] = ftimage21_i_ModS2T[i + (int)(nt_g / 2)][j]; + } + else + { + ftimage2_r_ModS2T[i][j] = ftimage21_r_ModS2T[i - (int)(nt_g / 2)][j]; + ftimage2_i_ModS2T[i][j] = ftimage21_i_ModS2T[i - (int)(nt_g / 2)][j]; + } + } + // printf("%f ", ftimage2_r_ModS2T[i][j]); + } + //printf("\n"); + } + + + + + + free(ftimage21_r_ModS2T); free(ftimage21_i_ModS2T); + free(ftimage1_r_ModS2T); free(ftimage1_i_ModS2T); + printf("fin fftshift\n"); + // tau0 + double** ftimage_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + ftimage_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + //teste + double angle = 2 * pi * (double)(fkz_ModS2T[i][j] - f_ModS2T[i][j]) * tau0; + double angcos = cos(angle); + double angsin = -sin(angle); + double re = ftimage2_r_ModS2T[i][j] * angcos - ftimage2_i_ModS2T[i][j] * angsin; + double im = ftimage2_i_ModS2T[i][j] * angcos + ftimage2_r_ModS2T[i][j] * angsin; + ftimage_r_ModS2T[i][j] = re * Filt_r[i][j] - im * Filt_i[i][j]; + ftimage_i_ModS2T[i][j] = re * Filt_i[i][j] + im * Filt_r[i][j]; + //printf("%e\t", ftimage_i_ModS2T[i][j]); + } + //printf("\n"); + + } + printf("fin tau0\n"); + free(ftimage2_r_ModS2T); free(ftimage2_i_ModS2T); + + //linterp + double** Vq_linterp_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** Vq_linterp_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + + for (int i = 0; i < nt_g; i++) + { + Vq_linterp_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + Vq_linterp_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + Vq_linterp_r_ModS2T[i][j] = 0.0; + Vq_linterp_i_ModS2T[i][j] = 0.0; + } + } + double dx_linterp_ModS2T = f_ModS2T[1][0] - f_ModS2T[0][0]; + for (int i = 0; i < nu_g; i++) + { + for (int j = 0; j < nt_g; j++) + { + double f1 = (fkz_ModS2T[j][i] - f_ModS2T[0][0]) / dx_linterp_ModS2T; + int fMask = !((fkz_ModS2T[j][i] < f_ModS2T[0][0]) | (fkz_ModS2T[j][i] > f_ModS2T[(nt_g - 1)][0])); + double f = f1 * fMask; + int im = (int)floor(f); + int im2Inval = (im + 2 > nt_g - 1) ? 1 : 0; + + double fx = f - (double)im; + double gx = 1.0 - fx; + if (fMask == 1) + { + if (im2Inval > 0) + { + Vq_linterp_r_ModS2T[j][i] = gx * ftimage_r_ModS2T[im][i]; + // printf("0\t"); + Vq_linterp_i_ModS2T[j][i] = gx * ftimage_i_ModS2T[im][i]; + + } + else + { + Vq_linterp_r_ModS2T[j][i] = gx * ftimage_r_ModS2T[im][i] + fx * ftimage_r_ModS2T[im + 1][i]; + Vq_linterp_i_ModS2T[j][i] = gx * ftimage_i_ModS2T[im][i] + fx * ftimage_i_ModS2T[im + 1][i]; + // printf("%e\t", ftimage_r_ModS2T[im+1][i]); + } + } + + } + //printf("\n"); + }// fin linterp + + srand(time(NULL)); + printf("fin linterp\n"); + //ifftshift(ftimage) + double** vq_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** vq_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + vq_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + vq_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + + if (b_fftshift == 1) + { + if (j <= (int)(nu_g / 2)) + { + vq_r_ModS2T[i][j] = Vq_linterp_r_ModS2T[i][j + (int)(nu_g / 2)]; + vq_i_ModS2T[i][j] = Vq_linterp_i_ModS2T[i][j + (int)(nu_g / 2)]; + } + else + { + vq_r_ModS2T[i][j] = Vq_linterp_r_ModS2T[i][j - ((int)(nu_g / 2) + 1)]; + vq_i_ModS2T[i][j] = Vq_linterp_i_ModS2T[i][j - ((int)(nu_g / 2) + 1)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + vq_r_ModS2T[i][j] = Vq_linterp_r_ModS2T[i][j + (int)(nu_g / 2)]; + vq_i_ModS2T[i][j] = Vq_linterp_i_ModS2T[i][j + (int)(nu_g / 2)]; + } + else + { + vq_r_ModS2T[i][j] = Vq_linterp_r_ModS2T[i][j - (int)(nu_g / 2)]; + vq_i_ModS2T[i][j] = Vq_linterp_i_ModS2T[i][j - (int)(nu_g / 2)]; + } + } + //printf("%e\t", vq_r_ModS2T[i][j]); + //printf("%e\t",vq_i_ModS2T[i][j]); + + } + //printf("\n"); + } + // printf("\n"); + + double** vq1_r_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** vq1_i_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + for (int i = 0; i < nt_g; i++) + { + vq1_r_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + vq1_i_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + + if (a_fftshift == 1) + { + if (i <= (nt_g / 2)) + { + + vq1_r_ModS2T[i][j] = vq_r_ModS2T[i + (int)(nt_g / 2)][j]; + vq1_i_ModS2T[i][j] = vq_i_ModS2T[i + (int)(nt_g / 2)][j]; + } + else + { + vq1_r_ModS2T[i][j] = vq_r_ModS2T[i - ((int)(nt_g / 2) + 1)][j]; + vq1_i_ModS2T[i][j] = vq_i_ModS2T[i - ((int)(nt_g / 2) + 1)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + vq1_r_ModS2T[i][j] = vq_r_ModS2T[i + (int)(nt_g / 2)][j]; + vq1_i_ModS2T[i][j] = vq_i_ModS2T[i + (int)(nt_g / 2)][j]; + } + else + { + vq1_r_ModS2T[i][j] = vq_r_ModS2T[i - (int)(nt_g / 2)][j]; + vq1_i_ModS2T[i][j] = vq_i_ModS2T[i - (int)(nt_g / 2)][j]; + } + } + //printf("%e\t", vq1_r_ModS2T[i][j]); + //printf("=%e\n", vq1_i_ModS2T[i][j]); + } + //printf("\n"); + } + + free(vq_r_ModS2T); free(vq_i_ModS2T); + free(Vq_linterp_r_ModS2T); free(Vq_linterp_i_ModS2T); + // fin nifftshift + printf("fin ifftshift\n"); + + + + + // ifft + double** HTg_1 = (double**)malloc(M * sizeof(double*)); + double cts_ifft = (nt_g * nu_g); + for (int n1 = 0; n1 < M; n1++) + { + HTg_1[n1] = (double*)malloc(cols * sizeof(double)); + for (int n2 = 0; n2 < cols; n2++) + { + double som_r = 0.0; + for (int k1 = 0; k1 < nt_g; k1++) + { + for (int k2 = 0; k2 < nu_g; k2++) + { + double angle = 2.0 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + double cosangle = cos(angle); + double sinangle = sin(angle); + som_r = som_r + vq1_r_ModS2T[k1][k2] * cosangle - vq1_i_ModS2T[k1][k2] * sinangle; + } + } + HTg_1[n1][n2] = (som_r / cts_ifft); + //printf("%e\t", HTg_1[n1][n2]); + + } + // printf("\n"); + }// fin ifft + clock_t tEnd = clock(); + double time_elapsed = ((double)(tEnd - tAlg)) / CLOCKS_PER_SEC; + printf("required time of IFFT is : %f seconds.\n", time_elapsed); + + + save_matrix_as_bmp(HTg_1, cols, M, "HTg_1.bmp"); + const char* filename4 = "HTg_1.bmp"; + #ifdef _WIN32 + system("start HTg_1.bmp"); + #elif __APPLE__ + system("open f_ModS2T.bmp"); + #elif __linux__ + system("xdg-open f_ModS2T.bmp"); + #else + printf("Image sauvegardée sous %s\n", filename4); + #endif + + + double** HTg = (double**)malloc((M * cols) * sizeof(double*)); + for (int i = 0; i < M; i++) + { + for (int j = 0; j < cols; j++) + { + HTg[((i * cols) + j)] = (double*)malloc(1 * sizeof(double)); + HTg[((i * cols) + j)][0] = HTg_1[i][j] * Rx; + } + } + //free(HTg_1); + free(f_ModS2T); + free(ku_ModS2T); free(fkz_ModS2T); + free(ftimage_r_ModS2T); free(ftimage_i_ModS2T); + // fin ModS2T + free(X_ptAco40dB); free(zz_Load); + free(ffc_Load); free(scanX); + free(scanZ); free(roiZ); + printf("fin ModS2T\n"); + double** fTemp = (double**)malloc((M * cols) * sizeof(double*)); + double** W = (double**)malloc((M * cols) * sizeof(double*)); + double** Y_Model = (double**)malloc((M * cols) * sizeof(double*)); + double** X_cg = (double**)malloc((M * cols) * sizeof(double*)); + for (int i = 0; i < (M * cols); i++) + { + fTemp[i] = (double*)malloc(1 * sizeof(double)); + X_cg[i] = (double*)malloc(1 * sizeof(double)); + W[i] = (double*)malloc(1 * sizeof(double)); + Y_Model[i] = (double*)malloc(1 * sizeof(double)); + W[i][0] = 1.0; + fTemp[i][0] = 0.0; X_cg[i][0] = 0.01; + Y_Model[i][0] = 0.0; + } + // init varaible of model + + double** res_x_szd = (double**)malloc(M * sizeof(double*)); + double** g = (double**)malloc(M * sizeof(double*)); + double** Y1_Model = (double**)malloc(M * sizeof(double*)); + for (int i = 0; i < M; i++) + { + res_x_szd[i] = (double*)malloc(cols * sizeof(double)); + g[i] = (double*)malloc(cols * sizeof(double)); + Y1_Model[i] = (double*)malloc(cols * sizeof(double)); + for (int j = 0; j < cols; j++) + { + res_x_szd[i][j] = 0.0; + g[i][j] = 0.0; + Y1_Model[i][j] = 0.0; + } + + } + + double** f_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ku_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** fkz_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage1_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage1_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage21_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage21_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage2_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage2_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** V_linterpAdj_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** V_linterpAdj_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** pG_r_linterpAdj_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** pG_i_linterpAdj_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** pF_r_linterpAdj_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** pF_i_linterpAdj_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftimage_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata1_r_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata1_i_ModS2 = (double**)malloc(nt_g * sizeof(double*)); + double** f_model_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ku_model_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** fkz_model_ModS2T = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata1_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata1_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata2_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata2_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata21_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata21_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** ftdata_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** Vq1_linterp_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** Vq1_linterp_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** image1_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** image1_i_Model = (double**)malloc(nt_g * sizeof(double*)); + double** image2_r_Model = (double**)malloc(nt_g * sizeof(double*)); + double** image2_i_Model = (double**)malloc(nt_g * sizeof(double*)); + + for (int i = 0; i < nt_g; i++) + { + f_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ku_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + fkz_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage1_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage1_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage21_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage21_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage2_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage2_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + V_linterpAdj_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + V_linterpAdj_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + pG_r_linterpAdj_ModS2[i] = (double*)malloc(1 * sizeof(double)); + pG_i_linterpAdj_ModS2[i] = (double*)malloc(1 * sizeof(double)); + pF_r_linterpAdj_ModS2[i] = (double*)malloc(1 * sizeof(double)); + pF_i_linterpAdj_ModS2[i] = (double*)malloc(1 * sizeof(double)); + ftimage_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftimage_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata1_r_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata1_i_ModS2[i] = (double*)malloc(nu_g * sizeof(double)); + f_model_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ku_model_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + fkz_model_ModS2T[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata1_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata1_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata2_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata2_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata21_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata21_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + ftdata_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + Vq1_linterp_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + Vq1_linterp_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + image1_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + image1_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + image2_r_Model[i] = (double*)malloc(nu_g * sizeof(double)); + image2_i_Model[i] = (double*)malloc(nu_g * sizeof(double)); + for (int j = 0; j < nu_g; j++) + { + f_ModS2[i][j] = 0.0; + ku_ModS2[i][j] = 0.0; + fkz_ModS2[i][j] = 0.0; + ftimage1_r_ModS2[i][j] = 0.0; + ftimage1_i_ModS2[i][j] = 0.0; + ftimage21_r_ModS2[i][j] = 0.0; + ftimage21_i_ModS2[i][j] = 0.0; + ftimage2_r_ModS2[i][j] = 0.0; + ftimage2_i_ModS2[i][j] = 0.0; + V_linterpAdj_r_ModS2[i][j] = 0.0; + V_linterpAdj_i_ModS2[i][j] = 0.0; + ftimage_r_ModS2[i][j] = 0.0; + ftimage_i_ModS2[i][j] = 0.0; + ftdata_r_ModS2[i][j] = 0.0; + ftdata_i_ModS2[i][j] = 0.0; + ftdata1_r_ModS2[i][j] = 0.0; + ftdata1_i_ModS2[i][j] = 0.0; + f_model_ModS2T[i][j] = 0.0; + ku_model_ModS2T[i][j] = 0.0; + fkz_model_ModS2T[i][j] = 0.0; + ftdata1_r_Model[i][j] = 0.0; + ftdata1_i_Model[i][j] = 0.0; + ftdata2_r_Model[i][j] = 0.0; + ftdata2_i_Model[i][j] = 0.0; + ftdata21_r_Model[i][j] = 0.0; + ftdata21_i_Model[i][j] = 0.0; + ftdata_r_Model[i][j] = 0.0; + ftdata_i_Model[i][j] = 0.0; + Vq1_linterp_r_Model[i][j] = 0.0; + Vq1_linterp_i_Model[i][j] = 0.0; + image1_r_Model[i][j] = 0.0; + image1_i_Model[i][j] = 0.0; + image2_r_Model[i][j] = 0.0; + image2_i_Model[i][j] = 0.0; + } + pG_r_linterpAdj_ModS2[i][0] = 0.0; + pG_i_linterpAdj_ModS2[i][0] = 0.0; + pF_r_linterpAdj_ModS2[i][0] = 0.0; + pF_i_linterpAdj_ModS2[i][0] = 0.0; + } + + // paratmeters of CG + + double** X_yaz = (double**)malloc((cols) * sizeof(double*)); + for (int i = 0; i < ( cols); i++) + { + X_yaz[i] = (double*)malloc(cols * sizeof(double)); + for (int j = 0; j < cols; j++) + { + X_yaz[i][j] = 0.0; + } + } + double** residual = (double**)malloc((cols) * sizeof(double*)); + double** search_direction = (double**)malloc((cols) * sizeof(double*)); + double** A_search_direction = (double**)malloc((cols) * sizeof(double*)); + for (int i = 0; i < (cols); i++) + { + residual[i] = (double*)malloc(cols * sizeof(double)); + search_direction[i] = (double*)malloc(cols * sizeof(double)); + A_search_direction[i] = (double*)malloc(cols * sizeof(double)); + for (int j = 0; j < cols; j++) + { + residual[i][j] = 0.0; + search_direction[i][j] = 0.0; + A_search_direction[i][j] = 0.0; + } + } + + double errUTSR_a = 0; + int numIter, stagCount, maxIter; + numIter = 1; stagCount = 0; maxIter = 0; + // start timing + srand(time(NULL)); + + printf("start While(1)\n"); + while (1) + { + if (numIter > 1) + { + if (!isinf(beta)) + { + while (1) + { + double n1fTemp = 0.0; double n1fTempAppr = 0.0; double n1Err = 0.0; + for (int i = 0; i < (M * cols); i++) + { + W[i][0] = 1 / (fabs(fTemp[i][0]) + beta); + n1fTemp = n1fTemp + fabs(fTemp[i][0]); + double s = (fabs(sqrt(W[i][0]) * fTemp[i][0])); + n1fTempAppr = n1fTempAppr + s * s; + } + n1Err = (n1fTemp - n1fTempAppr) / n1fTemp; + if (fabs(n1Err - cg_tol) > cg_tol / 10) + { + beta = beta / (n1Err / cg_tol); + } + else + { + break; + } + } + } + } + // Model1(x, W, dt, dx, ERMv, alpha, szData, tau0, Model, Filt, Rx) + + //reshape(x,szData) + for (int i = 0; i < M; i++) + { + for (int j = 0; j < cols; j++) + { + res_x_szd[i][j] = X_cg[((j * cols) + i)][0]; + } + } + // save_matrix_as_bmp(res_x_szd, cols, M, "res_x_szd.bmp"); + // const char* filename6 = "res_x_szd.bmp"; + //#ifdef _WIN32 + // system("start res_x_szd.bmp"); + //#elif __APPLE__ + // system("open res_x_szd.bmp"); + //#elif __linux__ + // system("xdg-open res_x_szd.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename6); + //#endif + + ////ModS2(reshape(x, szData), dt, dx, ERMv, tau0, Mod, Rx) + + //Data and image grids + if (numIter == 1) + { + double sign_f_ModS2; + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + f_ModS2[i][j] = (((double)(-nt_g / 2.0) + i) / dt) / nt_g; + ku_ModS2[i][j] = (((double)(-nu_g / 2.0) + j) / du) / nu_g; + sign_f_ModS2 = (f_ModS2[i][j] > 0) - (f_ModS2[i][j] < 0); + fkz_ModS2[i][j] = ERMv1 * sign_f_ModS2 * sqrt((ku_ModS2[i][j] * ku_ModS2[i][j]) + ((f_ModS2[i][j] / ERMv1) * (f_ModS2[i][j] / ERMv1))); + } + } + } + // save_matrix_as_bmp(fkz_ModS2, nu_g, nt_g, "f_ModS2.bmp"); + // const char* filename7 = "f_ModS2.bmp"; + //#ifdef _WIN32 + // system("start f_ModS2.bmp"); + //#elif __APPLE__ + // system("open f_ModS2.bmp"); + //#elif __linux__ + // system("xdg-open f_ModS2.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename7); + //#endif + + // fft2(res_x_szd, nt, nu) + double sum_ftimage1_r_ModS2 = 0.0; + double sum_ftimage1_i_ModS2 = 0.0; + for (int k1 = 0; k1 < nt_g; k1++) + { + for (int k2 = 0; k2 < nu_g; k2++) + { + for (int n1 = 0; n1 < M; n1++) + { + for (int n2 = 0; n2 < cols; n2++) + { + double angle = 2 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + sum_ftimage1_r_ModS2 = sum_ftimage1_r_ModS2 + res_x_szd[n1][n2] * cos(angle); + sum_ftimage1_i_ModS2 = sum_ftimage1_i_ModS2 - res_x_szd[n1][n2] * sin(angle); + } + } + ftimage1_r_ModS2[k1][k2] = sum_ftimage1_r_ModS2; + ftimage1_i_ModS2[k1][k2] = sum_ftimage1_i_ModS2; + sum_ftimage1_i_ModS2 = 0.0; + sum_ftimage1_r_ModS2 = 0.0; + } + }//fin FFT2 + + //fftshift + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (b_fftshift == 1) + { + if (j <= (int)(nu_g / 2)) + { + ftimage21_r_ModS2[i][j] = ftimage1_r_ModS2[i][j + (int)(nu_g / 2) + 1]; + ftimage21_i_ModS2[i][j] = ftimage1_i_ModS2[i][j + (int)(nu_g / 2) + 1]; + } + else + { + ftimage21_r_ModS2[i][j] = ftimage1_r_ModS2[i][j - (int)(nu_g / 2)]; + ftimage21_i_ModS2[i][j] = ftimage1_i_ModS2[i][j - (int)(nu_g / 2)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + ftimage21_r_ModS2[i][j] = ftimage1_r_ModS2[i][j + (int)(nu_g / 2)]; + ftimage21_i_ModS2[i][j] = ftimage1_i_ModS2[i][j + (int)(nu_g / 2)]; + } + else + { + ftimage21_r_ModS2[i][j] = ftimage1_r_ModS2[i][j - (int)(nu_g / 2)]; + ftimage21_i_ModS2[i][j] = ftimage1_i_ModS2[i][j - (int)(nu_g / 2)]; + } + } + } + } + for (int i = 0; i < nt_g; i++) + { + + for (int j = 0; j < nu_g; j++) + { + if (a_fftshift == 1) + { + if (i <= (nt_g / 2)) + { + + ftimage2_r_ModS2[i][j] = ftimage21_r_ModS2[i + (int)(nt_g / 2) + 1][j]; + ftimage2_i_ModS2[i][j] = ftimage21_i_ModS2[i + (int)(nt_g / 2) + 1][j]; + } + else + { + ftimage2_r_ModS2[i][j] = ftimage21_r_ModS2[i - (int)(nt_g / 2)][j]; + ftimage2_i_ModS2[i][j] = ftimage21_i_ModS2[i - (int)(nt_g / 2)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + ftimage2_r_ModS2[i][j] = ftimage21_r_ModS2[i + (int)(nt_g / 2)][j]; + ftimage2_i_ModS2[i][j] = ftimage21_i_ModS2[i + (int)(nt_g / 2)][j]; + } + else + { + ftimage2_r_ModS2[i][j] = ftimage21_r_ModS2[i - (int)(nt_g / 2)][j]; + ftimage2_i_ModS2[i][j] = ftimage21_i_ModS2[i - (int)(nt_g / 2)][j]; + } + } + } + }//fin fftshift + +// save_matrix_as_bmp(ftimage2_r_ModS2, nu_g, nt_g, "ftimage1_r_ModS2.bmp"); +// const char* filename8 = "ftimage1_r_ModS2.bmp"; +//#ifdef _WIN32 +// system("start ftimage1_r_ModS2.bmp"); +//#elif __APPLE__ +// system("open ftimage1_r_ModS2.bmp"); +//#elif __linux__ +// system("xdg-open ftimage1_r_ModS2.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename8); +//#endif + + //linterpAdj(f(:,1), fkz, ftimage); + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + V_linterpAdj_r_ModS2[i][j] = 0.0; + V_linterpAdj_i_ModS2[i][j] = 0.0; + pG_r_linterpAdj_ModS2[i][0] = 0.0; + pG_i_linterpAdj_ModS2[i][0] = 0.0; + pF_r_linterpAdj_ModS2[i][0] = 0.0; + pF_i_linterpAdj_ModS2[i][0] = 0.0; + } + } + double dx_linterpAdj_ModS2 = f_ModS2[1][0] - f_ModS2[0][0]; + for (int i = 0; i < nu_g; i++) + { + for (int j = 0; j < nt_g; j++) + { + double f1_linterpAdj_ModS2 = (fkz_ModS2[j][i] - f_ModS2[0][0]) / dx_linterpAdj_ModS2; + int fMask_1 = !((fkz_ModS2[j][i] < f_ModS2[0][0]) | (fkz_ModS2[j][i] > f_ModS2[(nt_g - 1)][0])); + double f_linterpAdj_ModS2 = f1_linterpAdj_ModS2 * fMask_1; + int im_linterpAdj_ModS2 = (int)floor(f_linterpAdj_ModS2); + int im2Inval_linterpAdj_ModS2 = (im_linterpAdj_ModS2 + 2 > nt_g) ? 1 : 0; + double fx_linterpAdj_ModS2 = f_linterpAdj_ModS2 - (double)im_linterpAdj_ModS2; + double gx_linterpAdj_ModS2 = 1.0 - fx_linterpAdj_ModS2; + if (fMask_1 == 1) + { + pG_r_linterpAdj_ModS2[im_linterpAdj_ModS2][0] = pG_r_linterpAdj_ModS2[im_linterpAdj_ModS2][0] + gx_linterpAdj_ModS2 * ftimage2_r_ModS2[j][i]; + pG_i_linterpAdj_ModS2[im_linterpAdj_ModS2][0] = pG_i_linterpAdj_ModS2[im_linterpAdj_ModS2][0] + gx_linterpAdj_ModS2 * ftimage2_i_ModS2[j][i]; + if (im2Inval_linterpAdj_ModS2 > 0) + { + pF_r_linterpAdj_ModS2[nt_g - 1][0] = 0.0; + pF_i_linterpAdj_ModS2[nt_g - 1][0] = 0.0; + } + else + { + pF_r_linterpAdj_ModS2[im_linterpAdj_ModS2 + 1][0] = pF_r_linterpAdj_ModS2[im_linterpAdj_ModS2 + 1][0] + fx_linterpAdj_ModS2 * ftimage2_r_ModS2[j][i]; + pF_i_linterpAdj_ModS2[im_linterpAdj_ModS2 + 1][0] = pF_i_linterpAdj_ModS2[im_linterpAdj_ModS2 + 1][0] + fx_linterpAdj_ModS2 * ftimage2_i_ModS2[j][i]; + } + } + } + for (int j = 0; j < nt_g; j++) + { + V_linterpAdj_r_ModS2[j][i] = pG_r_linterpAdj_ModS2[j][0] + pF_r_linterpAdj_ModS2[j][0]; + V_linterpAdj_i_ModS2[j][i] = pG_i_linterpAdj_ModS2[j][0] + pF_i_linterpAdj_ModS2[j][0]; + pG_r_linterpAdj_ModS2[j][0] = 0.0; + pG_i_linterpAdj_ModS2[j][0] = 0.0; + pF_r_linterpAdj_ModS2[j][0] = 0.0; + pF_i_linterpAdj_ModS2[j][0] = 0.0; + } + }// fin linterpAdj +// save_matrix_as_bmp(V_linterpAdj_r_ModS2, nu_g, nt_g, "V_linterpAdj_r_ModS2.bmp"); +// const char* filename9 = "V_linterpAdj_r_ModS2.bmp"; +//#ifdef _WIN32 +// system("start V_linterpAdj_r_ModS2.bmp"); +//#elif __APPLE__ +// system("open V_linterpAdj_r_ModS2.bmp"); +//#elif __linux__ +// system("xdg-open V_linterpAdj_r_ModS2.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename9); +//#endif + // tau0 + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + double angle = 2 * pi * (double)(fkz_ModS2[i][j] - f_ModS2[i][j]) * tau0; + double angcos = cos(angle); + double angsin = sin(angle); + double re = V_linterpAdj_r_ModS2[i][j] * angcos - V_linterpAdj_i_ModS2[i][j] * angsin; + double im = V_linterpAdj_i_ModS2[i][j] * angcos + V_linterpAdj_r_ModS2[i][j] * angsin; + ftimage_r_ModS2[i][j] = re * Model_r[i][j] - im * Model_i[i][j]; + ftimage_i_ModS2[i][j] = im * Model_r[i][j] + re * Model_i[i][j]; + } + } + + // save_matrix_as_bmp(ftimage_r_ModS2, nu_g, nt_g, "ftimage_r_ModS2.bmp"); + // const char* filename10 = "ftimage_r_ModS2.bmp"; + //#ifdef _WIN32 + // system("start ftimage_r_ModS2.bmp"); + //#elif __APPLE__ + // system("open ftimage_r_ModS2.bmp"); + //#elif __linux__ + // system("xdg-open ftimage_r_ModS2.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename10); + //#endif + + //ifftshift(ftdata) + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (b_fftshift == 1) + { + if (j <= (int)(nu_g / 2)) + { + ftdata_r_ModS2[i][j] = ftimage_r_ModS2[i][j + (int)(nu_g / 2)]; + ftdata_i_ModS2[i][j] = ftimage_i_ModS2[i][j + (int)(nu_g / 2)]; + } + else + { + ftdata_r_ModS2[i][j] = ftimage_r_ModS2[i][j - ((int)(nu_g / 2) + 1)]; + ftdata_i_ModS2[i][j] = ftimage_i_ModS2[i][j - ((int)(nu_g / 2) + 1)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + ftdata_r_ModS2[i][j] = ftimage_r_ModS2[i][j + (int)(nu_g / 2)]; + ftdata_i_ModS2[i][j] = ftimage_i_ModS2[i][j + (int)(nu_g / 2)]; + } + else + { + ftdata_r_ModS2[i][j] = ftimage_r_ModS2[i][j - (int)(nu_g / 2)]; + ftdata_i_ModS2[i][j] = ftimage_i_ModS2[i][j - (int)(nu_g / 2)]; + } + } + } + } + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (a_fftshift == 1) + { + if (i <= (nt_g / 2)) + { + + ftdata1_r_ModS2[i][j] = ftdata_r_ModS2[i + (int)(nt_g / 2)][j]; + ftdata1_i_ModS2[i][j] = ftdata_i_ModS2[i + (int)(nt_g / 2)][j]; + } + else + { + ftdata1_r_ModS2[i][j] = ftdata_r_ModS2[i - ((int)(nt_g / 2) + 1)][j]; + ftdata1_i_ModS2[i][j] = ftdata_i_ModS2[i - ((int)(nt_g / 2) + 1)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + ftdata1_r_ModS2[i][j] = ftdata_r_ModS2[i + (int)(nt_g / 2)][j]; + ftdata1_i_ModS2[i][j] = ftdata_i_ModS2[i + (int)(nt_g / 2)][j]; + } + else + { + ftdata1_r_ModS2[i][j] = ftdata_r_ModS2[i - (int)(nt_g / 2)][j]; + ftdata1_i_ModS2[i][j] = ftdata_i_ModS2[i - (int)(nt_g / 2)][j]; + } + } + //printf("%e\t", ftdata1_r_ModS2[i][j]); + //printf("=%e\n", vq1_i_ModS2T[i][j]); + } + //printf("\n"); + } + + // save_matrix_as_bmp(ftdata1_r_ModS2, nu_g, nt_g, "ftdata1_r_ModS2.bmp"); + // const char* filename11 = "ftdata1_r_ModS2.bmp"; + //#ifdef _WIN32 + // system("start ftdata1_r_ModS2.bmp"); + //#elif __APPLE__ + // system("open ftdata1_r_ModS2.bmp"); + //#elif __linux__ + // system("xdg-open ftdata1_r_ModS2.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename11); + //#endif + + //ifft2 + cts_ifft = (nt_g * nu_g); + for (int n1 = 0; n1 < M; n1++) + { + for (int n2 = 0; n2 < cols; n2++) + { + double som_r = 0.0; + for (int k1 = 0; k1 < nt_g; k1++) + { + for (int k2 = 0; k2 < nu_g; k2++) + { + double angle = 2.0 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + double cosangle = cos(angle); + double sinangle = sin(angle); + som_r = som_r + ftdata1_r_ModS2[k1][k2] * cosangle - ftdata1_i_ModS2[k1][k2] * sinangle; + } + } + g[n1][n2] = (som_r / cts_ifft) * Rx; + } + }// fin ifft +// save_matrix_as_bmp(g, cols, M, "g.bmp"); +// const char* filename12 = "g.bmp"; +//#ifdef _WIN32 +// system("start g.bmp"); +//#elif __APPLE__ +// system("open g.bmp"); +//#elif __linux__ +// system("xdg-open g.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename12); +//#endif + + //Applies adjoint operator + //y = ModS2T(g , dt, dx, ERMv, tau0, Filt, Rx); + //meshgrid(ku,f) + if (numIter == 1) + { + double sign_f; + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + f_model_ModS2T[i][j] = (((double)(-nt_g / 2.0) + i) / dt) / nt_g; + ku_model_ModS2T[i][j] = (((double)(-nu_g / 2.0) + j) / du) / nu_g; + sign_f = (f_model_ModS2T[i][j] > 0) - (f_model_ModS2T[i][j] < 0); + fkz_model_ModS2T[i][j] = ERMv1 * sign_f * sqrt((ku_model_ModS2T[i][j] * ku_model_ModS2T[i][j]) + ((f_model_ModS2T[i][j] / ERMv1) * (f_model_ModS2T[i][j] / ERMv1))); + } + } + } + + // save_matrix_as_bmp(fkz_model_ModS2T, nu_g, nt_g, "f_model_ModS2T.bmp"); + // const char* filename13 = "f_model_ModS2T.bmp"; + //#ifdef _WIN32 + // system("start f_model_ModS2T.bmp"); + //#elif __APPLE__ + // system("open f_model_ModS2T.bmp"); + //#elif __linux__ + // system("xdg-open f_model_ModS2T.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename13); + //#endif + + //Converting data to frquency domain + //// FFT2(g, nt_g, nu_g) + double sum_ftdata1_r_Model = 0.0; + double sum_ftdata1_i_Model = 0.0; + for (int k1 = 0; k1 < nt_g; k1++) + { + for (int k2 = 0; k2 < nu_g; k2++) + { + for (int n1 = 0; n1 < M; n1++) + { + for (int n2 = 0; n2 < cols; n2++) + { + double angle = 2 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + sum_ftdata1_r_Model = sum_ftdata1_r_Model + g[n1][n2] * cos(angle); + sum_ftdata1_i_Model = sum_ftdata1_i_Model - g[n1][n2] * sin(angle); + } + } + ftdata1_r_Model[k1][k2] = sum_ftdata1_r_Model; + ftdata1_i_Model[k1][k2] = sum_ftdata1_i_Model; + sum_ftdata1_r_Model = 0.0; + sum_ftdata1_i_Model = 0.0; + } + } + // save_matrix_as_bmp(ftdata1_r_Model, nu_g, nt_g, "ftdata1_r_Model.bmp"); + // const char* filename14 = "ftdata1_r_Model.bmp"; + //#ifdef _WIN32 + // system("start ftdata1_r_Model.bmp"); + //#elif __APPLE__ + // system("open ftdata1_r_Model.bmp"); + //#elif __linux__ + // system("xdg-open ftdata1_r_Model.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename14); + //#endif + + ////fftshift + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + + if (b_fftshift == 1) + { + if (j <= (int)(nu_g / 2)) + { + ftdata2_r_Model[i][j] = ftdata1_r_Model[i][j + (int)(nu_g / 2) + 1]; + ftdata2_i_Model[i][j] = ftdata1_i_Model[i][j + (int)(nu_g / 2) + 1]; + } + else + { + ftdata2_r_Model[i][j] = ftdata1_r_Model[i][j - (int)(nu_g / 2)]; + ftdata2_i_Model[i][j] = ftdata1_i_Model[i][j - (int)(nu_g / 2)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + ftdata2_r_Model[i][j] = ftdata1_r_Model[i][j + (int)(nu_g / 2)]; + ftdata2_i_Model[i][j] = ftdata1_i_Model[i][j + (int)(nu_g / 2)]; + } + else + { + ftdata2_r_Model[i][j] = ftdata1_r_Model[i][j - (int)(nu_g / 2)]; + ftdata2_i_Model[i][j] = ftdata1_i_Model[i][j - (int)(nu_g / 2)]; + } + } + } + } + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (a_fftshift == 1) + { + if (i <= (nt_g / 2)) + { + + ftdata21_r_Model[i][j] = ftdata2_r_Model[i + (int)(nt_g / 2) + 1][j]; + ftdata21_i_Model[i][j] = ftdata2_i_Model[i + (int)(nt_g / 2) + 1][j]; + } + else + { + ftdata21_r_Model[i][j] = ftdata2_r_Model[i - (int)(nt_g / 2)][j]; + ftdata21_i_Model[i][j] = ftdata2_i_Model[i - (int)(nt_g / 2)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + ftdata21_r_Model[i][j] = ftdata2_r_Model[i + (int)(nt_g / 2)][j]; + ftdata21_i_Model[i][j] = ftdata2_i_Model[i + (int)(nt_g / 2)][j]; + } + else + { + ftdata21_r_Model[i][j] = ftdata2_r_Model[i - (int)(nt_g / 2)][j]; + ftdata21_i_Model[i][j] = ftdata2_i_Model[i - (int)(nt_g / 2)][j]; + } + } + } + } + // fin fftshift + +// save_matrix_as_bmp(ftdata21_r_Model, nu_g, nt_g, "ftdata21_r_Model.bmp"); +// const char* filename15 = "ftdata21_r_Model.bmp"; +//#ifdef _WIN32 +// system("start ftdata21_r_Model.bmp"); +//#elif __APPLE__ +// system("open ftdata21_r_Model.bmp"); +//#elif __linux__ +// system("xdg-open ftdata21_r_Model.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename15); +//#endif + + //// tau0 + for (int i = 0; i < nt_g; i++) + { + + for (int j = 0; j < nu_g; j++) + { + double angle = 2 * pi * (double)(fkz_model_ModS2T[i][j] - f_model_ModS2T[i][j]) * tau0; + double angcos = cos(angle); + double angsin = -sin(angle); + double re = ftdata21_r_Model[i][j] * angcos - ftdata21_i_Model[i][j] * angsin; + double im = ftdata21_i_Model[i][j] * angcos + ftdata21_r_Model[i][j] * angsin; + ftdata_r_Model[i][j] = re * Filt_r[i][j] - im * Filt_i[i][j]; + ftdata_i_Model[i][j] = re * Filt_i[i][j] + im * Filt_r[i][j]; + } + + } + + // save_matrix_as_bmp(ftdata_r_Model, nu_g, nt_g, "ftdata_r_Model.bmp"); + // const char* filename16 = "ftdata_r_Model.bmp"; + //#ifdef _WIN32 + // system("start ftdata_r_Model.bmp"); + //#elif __APPLE__ + // system("open ftdata_r_Model.bmp"); + //#elif __linux__ + // system("xdg-open ftdata_r_Model.bmp"); + //#else + // printf("Image sauvegardée sous %s\n", filename16); + //#endif + + ////Generating image spectrum (by linear interpolation) + //// linterp(f(:,1), ftdata, fkz); + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + Vq1_linterp_r_Model[i][j] = 0.0; + Vq1_linterp_i_Model[i][j] = 0.0; + } + } + double dx_linterp_Model = f_model_ModS2T[1][0] - f_model_ModS2T[0][0]; + + for (int i = 0; i < nu_g; i++) + { + for (int j = 0; j < nt_g; j++) + { + double f1_model = (fkz_model_ModS2T[j][i] - f_model_ModS2T[0][0]) / dx_linterp_Model; + int fMask_model = !((fkz_model_ModS2T[j][i] < f_model_ModS2T[0][0]) | (fkz_model_ModS2T[j][i] > f_model_ModS2T[(nt_g - 1)][0])); + double f_model = f1_model * fMask_model; + int im_model = (int)floor(f_model); + int im2Inval_model = (im_model + 2 > nt_g - 1) ? 1 : 0; + + double fx = f_model - (double)im_model; + double gx = 1.0 - fx; + if (fMask_model == 1) + { + if (im2Inval_model > 0) + { + Vq1_linterp_r_Model[j][i] = gx * ftdata_r_Model[im_model][i]; + Vq1_linterp_i_Model[j][i] = gx * ftdata_i_Model[im_model][i]; + + } + else + { + Vq1_linterp_r_Model[j][i] = gx * ftdata_r_Model[im_model][i] + fx * ftdata_r_Model[im_model + 1][i]; + Vq1_linterp_i_Model[j][i] = gx * ftdata_i_Model[im_model][i] + fx * ftdata_i_Model[im_model + 1][i]; + } + } + + } + }// fin linterp + +// save_matrix_as_bmp(Vq1_linterp_r_Model, nu_g, nt_g, "Vq1_linterp_r_Model.bmp"); +// const char* filename17 = "Vq1_linterp_r_Model.bmp"; +//#ifdef _WIN32 +// system("start Vq1_linterp_r_Model.bmp"); +//#elif __APPLE__ +// system("open Vq1_linterp_r_Model.bmp"); +//#elif __linux__ +// system("xdg-open Vq1_linterp_r_Model.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename17); +//#endif + + // Converting image to space domain + //ifftshift(Vq1_linterp_r_Model) + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (b_fftshift == 1) + { + if (j <= (int)(nu_g / 2)) + { + image1_r_Model[i][j] = Vq1_linterp_r_Model[i][j + (int)(nu_g / 2)]; + image1_i_Model[i][j] = Vq1_linterp_i_Model[i][j + (int)(nu_g / 2)]; + } + else + { + image1_r_Model[i][j] = Vq1_linterp_r_Model[i][j - ((int)(nu_g / 2) + 1)]; + image1_i_Model[i][j] = Vq1_linterp_i_Model[i][j - ((int)(nu_g / 2) + 1)]; + } + } + if (b_fftshift == 0) + { + if (j < (int)(nu_g / 2)) + { + image1_r_Model[i][j] = Vq1_linterp_r_Model[i][j + (int)(nu_g / 2)]; + image1_i_Model[i][j] = Vq1_linterp_i_Model[i][j + (int)(nu_g / 2)]; + } + else + { + image1_r_Model[i][j] = Vq1_linterp_r_Model[i][j - (int)(nu_g / 2)]; + image1_i_Model[i][j] = Vq1_linterp_i_Model[i][j - (int)(nu_g / 2)]; + } + } + } + } + for (int i = 0; i < nt_g; i++) + { + for (int j = 0; j < nu_g; j++) + { + if (a_fftshift == 1) + { + if (i <= (nt_g / 2)) + { + + image2_r_Model[i][j] = image1_r_Model[i + (int)(nt_g / 2)][j]; + image2_i_Model[i][j] = image1_i_Model[i + (int)(nt_g / 2)][j]; + } + else + { + image2_r_Model[i][j] = image1_r_Model[i - ((int)(nt_g / 2) + 1)][j]; + image2_i_Model[i][j] = image1_i_Model[i - ((int)(nt_g / 2) + 1)][j]; + } + } + if (a_fftshift == 0) + { + if (i < (nt_g / 2)) + { + image2_r_Model[i][j] = image1_r_Model[i + (int)(nt_g / 2)][j]; + image2_i_Model[i][j] = image1_i_Model[i + (int)(nt_g / 2)][j]; + } + else + { + image2_r_Model[i][j] = image1_r_Model[i - (int)(nt_g / 2)][j]; + image2_i_Model[i][j] = image1_i_Model[i - (int)(nt_g / 2)][j]; + } + } + } + } + // fin ifftshift + +// save_matrix_as_bmp(image2_r_Model, nu_g, nt_g, "image2_r_Model.bmp"); +// const char* filename18 = "image2_r_Model.bmp"; +//#ifdef _WIN32 +// system("start image2_r_Model.bmp"); +//#elif __APPLE__ +// system("open image2_r_Model.bmp"); +//#elif __linux__ +// system("xdg-open image2_r_Model.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename18); +//#endif + + // ifft + cts_ifft = (nt_g * nu_g); + for (int n1 = 0; n1 < M; n1++) + { + for (int n2 = 0; n2 < cols; n2++) + { + double som_r = 0.0; + for (int k1 = 0; k1 < nt_g; k1++) + { + for (int k2 = 0; k2 < nu_g; k2++) + { + double angle = 2.0 * pi * ((double)(k1 * n1) / nt_g + (double)(k2 * n2) / nu_g); + double cosangle = cos(angle); + double sinangle = sin(angle); + som_r = som_r + image2_r_Model[k1][k2] * cosangle - image2_i_Model[k1][k2] * sinangle; + } + } + Y1_Model[n1][n2] = (som_r / cts_ifft) * Rx; + } + }// fin ifft + +// save_matrix_as_bmp(Y1_Model, cols, M, "Y1_Model.bmp"); +// const char* filename19 = "Y1_Model.bmp"; +//#ifdef _WIN32 +// system("start Y1_Model.bmp"); +//#elif __APPLE__ +// system("open Y1_Model.bmp"); +//#elif __linux__ +// system("xdg-open Y1_Model.bmp"); +//#else +// printf("Image sauvegardée sous %s\n", filename19); +//#endif + + for (int i = 0; i < M; i++) + { + for (int j = 0; j < cols; j++) + { + Y_Model[(i * cols) + j][0] = Y1_Model[i][j] + alpha * alpha * W[(i * cols) + j][0] * X_cg[(i * cols) + j][0]; + Y1_Model[i][j]=Y1_Model[i][j] + alpha * alpha * W[(i * cols) + j][0] * X_cg[(i * cols) + j][0]; + } + } + + // CG + int k = 0; + for (int i = 0; i < cols; i++) + { + double sumx, old_resid_norm = 0, sum2; + for (int i1 = 0; i1 < cols; i1++) + { + sumx = 0; + for (int j = 0; j < cols; j++) + { + sumx += Y1_Model[i1][j] *X_yaz[j][i]; + } + residual[i1][i] = HTg_1[i1][i] - sumx; + search_direction[i1][i] = residual[i1][i]; + old_resid_norm += residual[i1][i] * residual[i1][i]; + } + old_resid_norm = sqrt(old_resid_norm); + + while (old_resid_norm > 0.0001) + { + sum2 = 0; + for (int i1 = 0; i1 < cols; i1++) + { + sumx = 0; + for (int j = 0; j < cols; j++) + { + sumx += Y1_Model[i1][j] * search_direction[j][i]; + } + A_search_direction[i1][i] = sumx; + sum2 += A_search_direction[i1][i] * search_direction[i1][i]; + } + double step_size = old_resid_norm * old_resid_norm / sum2; + if (step_size < 0)break; + sumx = 0; + for (int i1 = 0; i1 < cols; i1++) + { + X_yaz[i1][i] += step_size * search_direction[i1][i]; + residual[i1][i] = residual[i1][i] - step_size * A_search_direction[i1][i]; + sumx += residual[i1][i] * residual[i1][i]; + } + double new_resid_norm = sqrt(sumx); + for (int i1 = 0; i1 < cols; i1++) + { + search_direction[i1][i] = residual[i1][i] + ((new_resid_norm / old_resid_norm) * (new_resid_norm / old_resid_norm)) * search_direction[i1][i]; + } + //printf("%e ", X_yaz[0][i]); + old_resid_norm = new_resid_norm; + k = k + 1; + + + } + printf("%d \n", i); + } + printf("k=%d\n", k); + + + for (int i = 0; i < cols; i++) + { + for (int j = 0; j < cols; j++) + { + //X_cg[i*cols+j][0] = X_yaz[i][j]; + if (X_cg[i * cols + j][0] < 0) + { + X_cg[i * cols + j][0] = 0.0; + } + } + + } + break; + + } + //Reshape found solution as a matrix + // outputRaw = reshape(f, szData); + double** outputRaw = (double**)malloc(M * sizeof(double*)); + for (int i = 0; i < M; i++) + { + outputRaw[i] = (double*)malloc(cols * sizeof(double)); + for (int j = 0; j < cols; j++) + { + outputRaw[i][j] = X_cg[i * cols + j][0]; + //printf("%e ", X_yaz[i][j]); + } + //printf("\n"); + } + free(Vq1_linterp_r_Model); free(Vq1_linterp_i_Model); + free(HTg); free(fTemp); free(W); free(g); free(Y1_Model); + free(Y_Model); free(ku_ModS2); free(res_x_szd); + free(ftimage1_r_ModS2); free(ftimage1_i_ModS2); + free(ftimage21_r_ModS2); free(ftimage21_i_ModS2); + free(ftimage2_r_ModS2); free(ftimage2_i_ModS2); + free(pG_r_linterpAdj_ModS2); free(pG_i_linterpAdj_ModS2); + free(pF_r_linterpAdj_ModS2); free(pF_i_linterpAdj_ModS2); + free(V_linterpAdj_r_ModS2); free(V_linterpAdj_i_ModS2); + free(ftimage_r_ModS2); free(ftimage_i_ModS2); + free(fkz_ModS2); free(f_ModS2); + free(ftdata_r_ModS2); free(ftdata_i_ModS2); + free(ftdata1_r_ModS2); free(ftdata1_i_ModS2); + free(ku_model_ModS2T); free(ftdata1_i_Model); free(ftdata1_r_Model); + free(ftdata2_r_Model); free(ftdata2_i_Model); + free(ftdata21_r_Model); free(ftdata21_i_Model); + free(ftdata_r_Model); free(ftdata_i_Model); + free(f_model_ModS2T); free(fkz_model_ModS2T); + free(image1_r_Model); free(image1_i_Model); + free(image2_r_Model); free(image2_i_Model); + tEnd = clock(); + time_elapsed = ((double)(tEnd - tAlg)) / CLOCKS_PER_SEC; + printf("Elapsed time is : %f seconds.\n", time_elapsed); + save_matrix_as_bmp(outputRaw, cols, M, "output.bmp"); + const char* filename = "output.bmp"; + #ifdef _WIN32 + system("start output.bmp"); + #elif __APPLE__ + system("open output.bmp"); + #elif __linux__ + system("xdg-open output.bmp"); + #else + printf("Image sauvegardée sous %s\n", filename); + #endif + free(outputRaw); + free(Model_r); free(Model_i); + free(Filt_r); free(Filt_i); + free(AscanValues_ptAco40dB); free(timeScale_ptAco40dB); + free(S_t_u); + +} + + + +int nextpow2(int n) { + int exp = 0; + if (n < 1) return 0; + n--; + while (n > 0) { + n >>= 1; + exp++; + } + return exp; +} + +double sinc(double x) { + if (x == 0) { + return 1.0; + } + else { + return sin(pi * x) / (pi * x); + } +} + +//double** X_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** xmin_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** r_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** y_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** z_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** p_pcg = (double**)malloc((M * cols) * sizeof(double*)); +//double** q_pcg = (double**)malloc((M * cols) * sizeof(double*)); + +//// +//// +//// PCG +////int flag_pcg, iter_pcg; +////int while_2 = 0; +////while (while_2 == 0) +////{ +//// printf("pcg\n"); +//// while_2 += 1; +//// Preconditioned Conjugate Gradient method +//// [f, flag, ~, iter] = pcg(yazHTg(:), cg_tol, M*N, [], [], fTemp); +//// iterchk(A); +//// afun = Y_Model; +//// int m_pcg = M * cols, n_pcg = 1; +//// Assign default values to unspecified parameters +//// int warned_pcg = 0, maxit_pcg; +//// maxit_pcg = M * cols; +//// if (maxit_pcg < 0) +//// { +//// maxit_pcg = 0; +//// } +//// Check for all zero right hand side vector => all zero solution +//// n2b = norm(HTg(:)); % Norm of rhs vector, b +//// double n2b = 0.0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// n2b = n2b + HTg[i][0] * HTg[i][0]; +//// } +//// n2b = sqrt(n2b); +//// if (n2b == 0) +//// { +//// flag_pcg = 0; +//// iter_pcg = 0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// X_pcg[i][0] = 0.0; +//// } +//// break; +//// } +//// +//// for (int i = 0; i < (M * cols); i++) +//// { +//// X_pcg[i][0] = fTemp[i][0]; +//// } +//// Set up for the method +//// flag_pcg = 1; +//// double tolb_pcg = cg_tol * n2b; +//// double normr_pcg = 0.0, normr_act_pcg; +//// int imin_pcg = 0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// xmin_pcg[i][0] = X_pcg[i][0]; +//// } +//// r = b - iterapp('mtimes',afun,atype,x,varargin{:}); +//// for (int i = 0; i < (M * cols); i++) +//// { +//// r_pcg[i][0] = HTg[i][0] - (Y_Model[i][0] * X_pcg[i][0]); +//// normr_pcg = r_pcg[i][0] * r_pcg[i][0] + normr_pcg; +//// } +//// normr_pcg = sqrt(normr_pcg); +//// normr_act_pcg = normr_pcg; +//// Initial guess is a good enough solution +//// if (normr_pcg <= tolb_pcg) +//// { +//// flag_pcg = 0; +//// iter_pcg = 0; +//// break; +//// } +//// double normrmin_pcg = normr_pcg, rho_pcg; +//// int stag_pcg = 0, moresteps_pcg = 0, maxmsteps_pcg, maxstagsteps_pcg; +//// rho_pcg = 1.0; +//// maxmsteps_pcg = 1 - (M * cols); +//// if (maxmsteps_pcg > 0) +//// { +//// maxmsteps_pcg = 0; +//// } +//// maxstagsteps_pcg = 3; +//// double pq_pcg, alpha_pcg = 0.0; +//// loop over maxit iterations (unless convergence or failure) +//// int rho1_pcg; +//// double beta_pcg, normp_pcg, normx_pcg; +//// int ii; +//// for (ii = 0; ii < (M * cols); ii++) +//// { +//// for (int i = 0; i < (M * cols); i++) +//// { +//// y_pcg[i][0] = r_pcg[i][0]; +//// z_pcg[i][0] = y_pcg[i][0]; +//// } +//// rho1_pcg = rho_pcg; +//// if ((rho_pcg == 0) || isinf(rho_pcg)) +//// { +//// flag_pcg = 4; +//// break; +//// } +//// +//// if (ii == 0) +//// { +//// for (int i = 0; i < (M * cols); i++) +//// { +//// p_pcg[i][0] = z_pcg[i][0]; +//// } +//// } +//// else +//// { +//// beta_pcg = ((double)rho_pcg) / ((double)rho1_pcg); +//// if ((beta_pcg == 0) || isinf(beta_pcg)) +//// { +//// flag_pcg = 4; +//// break; +//// } +//// for (int i = 0; i < (M * cols); i++) +//// { +//// p_pcg[i][0] = z_pcg[i][0] + beta_pcg * p_pcg[i][0]; +//// } +//// } +//// pq_pcg = 0.0; +//// normp_pcg = 0.0; +//// normx_pcg = 0.0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// q_pcg[i][0] = (Y_Model[i][0] * p_pcg[i][0]); +//// pq_pcg = q_pcg[i][0] * p_pcg[i][0] + pq_pcg; +//// normp_pcg = p_pcg[i][0] * p_pcg[i][0] + normp_pcg; +//// normx_pcg = normx_pcg + X_pcg[i][0] * X_pcg[i][0]; +//// } +//// if ((pq_pcg <= 0) || isinf(pq_pcg)) +//// { +//// flag_pcg = 4; +//// break; +//// } +//// else +//// { +//// alpha_pcg = (double)rho_pcg / pq_pcg; +//// } +//// if (isinf(alpha_pcg)) +//// { +//// flag_pcg = 4; +//// break; +//// } +//// +//// Check for stagnation of the method +//// normp_pcg = sqrt(normp_pcg); +//// normx_pcg = sqrt(normx_pcg); +//// if (normp_pcg * fabs(alpha_pcg) < eps * normx_pcg) +//// { +//// stag_pcg += 1; +//// } +//// else +//// { +//// stag_pcg = 0; +//// } +//// form new iterate +//// normr_pcg = 0.0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// X_pcg[i][0] += alpha_pcg * p_pcg[i][0]; +//// r_pcg[i][0] = r_pcg[i][0] - alpha_pcg * q_pcg[i][0]; +//// normr_pcg += r_pcg[i][0] * r_pcg[i][0]; +//// } +//// normr_pcg = sqrt(normr_pcg); +//// normr_act_pcg = normr_pcg; +//// +//// check for convergence +//// +//// if (normr_pcg <= tolb_pcg || stag_pcg >= maxstagsteps_pcg || moresteps_pcg) +//// { +//// r = b - iterapp('mtimes',afun,atype,x,varargin{:}); +//// normr_pcg = 0.0; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// r_pcg[i][0] = HTg[i][0] - (Y_Model[i][0] * X_pcg[i][0]); +//// normr_pcg = r_pcg[i][0] * r_pcg[i][0] + normr_pcg; +//// } +//// normr_pcg = sqrt(normr_pcg); +//// normr_act_pcg = normr_pcg; +//// if (normr_act_pcg <= tolb_pcg) +//// { +//// flag_pcg = 0; +//// iter_pcg = ii; +//// break; +//// } +//// else +//// { +//// if (stag_pcg >= maxstagsteps_pcg && moresteps_pcg == 0) +//// { +//// stag_pcg = 0; +//// } +//// moresteps_pcg += 1; +//// if (moresteps_pcg >= maxmsteps_pcg) +//// { +//// flag_pcg = 3; +//// iter_pcg = ii; +//// break; +//// } +//// } +//// } +//// +//// update minimal norm quantities +//// if (normr_act_pcg < normrmin_pcg) +//// { +//// normrmin_pcg = normr_act_pcg; +//// imin_pcg = ii; +//// for (int i = 0; i < (M * cols); i++) +//// { +//// xmin_pcg[i][0] = X_pcg[i][0]; +//// } +//// +//// } +//// if (stag_pcg >= maxstagsteps_pcg) +//// { +//// flag_pcg = 3; +//// break; +//// } +//// +//// } +//// // returned solution is first with minimal residual +//// double r_comp_pcg = 0.0; +//// if (flag_pcg != 0) +//// { +//// for (int i = 0; i < (M * cols); i++) +//// { +//// r_comp_pcg += (HTg[i][0] - (Y_Model[i][0] * xmin_pcg[i][0])) * (HTg[i][0] - (Y_Model[i][0] * xmin_pcg[i][0])); +//// } +//// r_comp_pcg = sqrt(r_comp_pcg); +//// if (r_comp_pcg <= normr_act_pcg) +//// { +//// for (int i = 0; i < (M * cols); i++) +//// { +//// X_pcg[i][0] = xmin_pcg[i][0]; +//// } +//// iter_pcg = imin_pcg; +//// } +//// else +//// { +//// iter_pcg = ii; +//// } +//// } +////}// fin PCG +////printf("cg_tol = %f | iter = %d | flag = %d \n", cg_tol, iter_pcg, flag_pcg); \ No newline at end of file