From ea9770bc53b85da607a009d3cc5df90f700a774a Mon Sep 17 00:00:00 2001 From: richardbarry Date: Wed, 27 Jul 2011 19:09:17 +0000 Subject: [PATCH] Create project directory structure for the MicroBlaze demo project that uses the full Ethernet IP (rather than the Ethernet Lite IP). git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1521 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../HardwareWithEthernet/.project | 12 + .../HardwareWithEthernet/system.bit | Bin 0 -> 1486175 bytes .../HardwareWithEthernet/system.xml | 9646 +++++++++++++++++ .../HardwareWithEthernet/system_bd.bmm | 104 + .../RTOSDemoBSP/.cproject | 14 + .../RTOSDemoBSP/.project | 77 + .../RTOSDemoBSP/.sdkproject | 3 + .../RTOSDemoBSP/Makefile | 21 + .../RTOSDemoBSP/libgen.log | 20 + .../RTOSDemoBSP/libgen.options | 3 + .../RTOSDemoBSP/system.mss | 123 + .../RTOSDemoSource/.cproject | 1985 ++++ .../RTOSDemoSource/.project | 82 + .../portable/GCC/MicroBlaze/subdir.mk | 12 + .../portable/MemMang/subdir.mk | 11 + .../Blilnky/Debug/FreeRTOS_Source/subdir.mk | 14 + .../Blilnky/Debug/src/subdir.mk | 20 + .../RTOSDemoSource/Blilnky/Debug/subdir.mk | 12 + .../RTOSDemoSource/Blilnky/makefile | 72 + .../RTOSDemoSource/Blilnky/objects.mk | 8 + .../RTOSDemoSource/Blilnky/sources.mk | 27 + .../RTOSDemoSource/Blilnky/src/subdir.mk | 27 + .../RTOSDemoSource/Blilnky/subdir.mk | 24 + .../CreateProjectDirectoryStructure.bat | 92 + .../Debug/FreeRTOS_Source/list.d | 28 + .../portable/GCC/MicroBlaze/port.d | 72 + .../portable/GCC/MicroBlaze/subdir.mk | 35 + .../FreeRTOS_Source/portable/MemMang/heap_2.d | 33 + .../portable/MemMang/subdir.mk | 24 + .../Debug/FreeRTOS_Source/queue.d | 35 + .../Debug/FreeRTOS_Source/subdir.mk | 33 + .../Debug/FreeRTOS_Source/tasks.d | 38 + .../Debug/FreeRTOS_Source/timers.d | 38 + .../RTOSDemoSource/Debug/ParTest.d | 49 + .../RTOSDemoSource/Debug/RTOSDemoSource.elf | Bin 0 -> 1576492 bytes .../Debug/RTOSDemoSource.elf.elfcheck | 9 + .../Debug/RTOSDemoSource.elf.size | 2 + .../RTOSDemoSource/Debug/main-blinky.d | 79 + .../RTOSDemoSource/Debug/makefile | 70 + .../RTOSDemoSource/Debug/objects.mk | 8 + .../RTOSDemoSource/Debug/sources.mk | 25 + .../RTOSDemoSource/Debug/src/subdir.mk | 54 + .../RTOSDemoSource/Debug/src/testperiph.d | 92 + .../Debug/src/xemaclite_example_util.d | 40 + .../Debug/src/xemaclite_intr_example.d | 52 + .../Debug/src/xemaclite_polled_example.d | 40 + .../Debug/src/xgpio_intr_tapp_example.d | 38 + .../Debug/src/xgpio_tapp_example.d | 29 + .../Debug/src/xintc_tapp_example.d | 35 + .../Debug/src/xtmrctr_intr_example.d | 38 + .../Debug/src/xtmrctr_selftest_example.d | 26 + .../Debug/src/xuartlite_selftest_example.d | 20 + .../RTOSDemoSource/Debug/subdir.mk | 27 + .../RTOSDemoSource/FreeRTOSConfig.h | 175 + .../RTOSDemoSource/ParTest.c | 160 + .../RTOSDemoSource/RegisterTests.c | 307 + .../lwIP/lwIP_Apps/apps/httpserver_raw/fs.c | 177 + .../lwIP/lwIP_Apps/apps/httpserver_raw/fs.h | 100 + .../lwIP_Apps/apps/httpserver_raw/fsdata.c | 2084 ++++ .../lwIP_Apps/apps/httpserver_raw/fsdata.h | 50 + .../lwIP_Apps/apps/httpserver_raw/httpd.c | 2184 ++++ .../lwIP_Apps/apps/httpserver_raw/httpd.h | 236 + .../apps/httpserver_raw/httpd_structs.h | 115 + .../httpserver_raw/makefsdata/fs/404.html | 21 + .../httpserver_raw/makefsdata/fs/index.shtml | 20 + .../httpserver_raw/makefsdata/fs/logo.jpg | Bin 0 -> 28602 bytes .../makefsdata/fs/runtime.shtml | 20 + .../makefsdata/makefsdata.c-source-file | 610 ++ .../httpserver_raw/makefsdata/makefsdata.exe | Bin 0 -> 46592 bytes .../RTOSDemoSource/lwIP/lwIP_Apps/lwIP_Apps.c | 179 + .../lwIP/lwIP_Apps/lwipcfg_MicroBlaze.h | 15 + .../RTOSDemoSource/lwIP/lwIP_Apps/lwipopts.h | 307 + .../RTOSDemoSource/main-blinky.c | 540 + .../RTOSDemoSource/main-full.c | 617 ++ .../RTOSDemoSource/serial.c | 209 + .../RTOSDemoSource/src/emaclite_header.h | 56 + .../RTOSDemoSource/src/emaclite_intr_header.h | 57 + .../RTOSDemoSource/src/gpio_header.h | 56 + .../RTOSDemoSource/src/gpio_intr_header.h | 62 + .../RTOSDemoSource/src/intc_header.h | 55 + .../RTOSDemoSource/src/lscript.ld | 213 + .../RTOSDemoSource/src/testperiph.c | 246 + .../RTOSDemoSource/src/tmrctr_header.h | 55 + .../RTOSDemoSource/src/tmrctr_intr_header.h | 60 + .../RTOSDemoSource/src/uartlite_header.h | 55 + .../RTOSDemoSource/src/xemaclite_example.h | 135 + .../src/xemaclite_example_util.c | 265 + .../src/xemaclite_intr_example.c | 684 ++ .../src/xemaclite_polled_example.c | 409 + .../src/xgpio_intr_tapp_example.c | 386 + .../RTOSDemoSource/src/xgpio_tapp_example.c | 294 + .../RTOSDemoSource/src/xintc_tapp_example.c | 265 + .../RTOSDemoSource/src/xtmrctr_intr_example.c | 457 + .../src/xtmrctr_selftest_example.c | 174 + .../src/xuartlite_selftest_example.c | 166 + 95 files changed, 25754 insertions(+) create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/.project create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.bit create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.xml create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system_bd.bmm create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.cproject create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.project create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.sdkproject create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/Makefile create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.log create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.options create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/system.mss create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.cproject create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.project create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/src/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/makefile create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/objects.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/sources.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/src/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/CreateProjectDirectoryStructure.bat create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/list.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/port.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/heap_2.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/queue.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/tasks.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/timers.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/ParTest.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.elfcheck create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.size create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/main-blinky.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/makefile create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/objects.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/sources.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/testperiph.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_example_util.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_intr_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_polled_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_intr_tapp_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_tapp_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xintc_tapp_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_intr_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_selftest_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xuartlite_selftest_example.d create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/subdir.mk create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/FreeRTOSConfig.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/ParTest.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/RegisterTests.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd_structs.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/404.html create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/index.shtml create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/logo.jpg create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/runtime.shtml create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.c-source-file create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.exe create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwIP_Apps.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipcfg_MicroBlaze.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipopts.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-blinky.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-full.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/serial.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_intr_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_intr_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/intc_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/lscript.ld create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/testperiph.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_intr_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/uartlite_header.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example.h create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example_util.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_intr_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_polled_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_intr_tapp_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_tapp_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xintc_tapp_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_intr_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_selftest_example.c create mode 100644 Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xuartlite_selftest_example.c diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/.project b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/.project new file mode 100644 index 000000000..ccfba1b6a --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/.project @@ -0,0 +1,12 @@ + + + HardwareWithEthernet + + + + + + + com.xilinx.sdk.hw.HwProject + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.bit b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.bit new file mode 100644 index 0000000000000000000000000000000000000000..12a3d4849ad89fbc41b60186838cdc21d7517cc6 GIT binary patch literal 1486175 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 YdTJd_A}46>mZhVbN=yWp0fgU~>Cxfg zY(#r&Gkp;~=4C;MZ>h;{$~IC&$dA`aiA>zkx0835Q?LUyzNgL=NkWWyNS64dF=7Uz zqSnS(wo9@@egKx=c8YQ_3XXjRK`9%Q#1X&Qf~@O)0E?dsP=HF2mL0L;?F=39q@cTN zEl44!R!}L#MQ%cH5h)O$2E#p7(M^3;T$^sM#~uuwNIBx7s+vohx@i}7*bqt$D=KE- z=F{bLkwHD{ocA3ym+O>80?24h`fCwPyzDsUU(F!O5n&5S{LEP)nrq{?pdE@ftLMb@ z)Z7JIu(NtKv)l?*=ABe@Rl7NLm=hB!=_Ye3I>?=a`3Z<@(4%OU=ybGhe8gqr*;h2lQ z*$%r?hV%t_Vof*%1nEnPhP7Tr)T$p9tt`o# zoSbuBIv1E`3n9nJG5Z}ywu@=$xLRF@;tew`!lXcx8GEGIm6=S!?qawTN)#cUmmt3J zx~wIev1A4eO|6*GdU3c~9A$LqM^koWvq>hE#Awc$Y&O%}k2`F2PxHZ*o^Wrzc0Qd0 zW1^cWxYwRArfkXq{{RXzp;po7>cRb+>noDa{d8g$vi#rVl_m2)>x64|`SvGe74gpn z_D)_qKK|x4BblB9zS7KLw&J<2`}hC;H^29rr{7)@ic5I0jV0@U(sNG);ouU$0lOym z_BdJB{jER#TYr2h_|!S92EG01%j-W0<=khDPvi6<{p#Q!fANpM=r}=m7CfvQj`@1h z-ss-Ft5;wBS0Dey*I$2F4LHB?3;X-GH&>(c_U%_*k!7o=R{;Z_%stMzo_C+whjjk< zi(0XL90%auFr(|&uU`EppMLk4^SHx`q7er%$E@CaRz!0`WR`oHtu(2hinX|qUh#qbF%m76zTg~ zSTP6li~~NHyu~V6ls=av9e?GCR}u%>(c5z%VxQW4>H^KDbRd}flzY!zm?+vy>yj5D zoH{67)|bz|2=&+g8gD)K@=pul$-n*k-?@GJ>eZ@Vzlf8Tc-DOTk3OB!(OPQ=;nl%| z{kU-S__i|OBvUQxJO|p9Z~7a#ryu*wA97^*`nBsHif6Y|3{^M7zQK9JZ?2vqR>4pQ zCKTDK!<1k^2Z*l$cgD0OmIeYbx{a|!MlZz#sUkPg&nb2=LA3Q^22b$;$1lo(VJCl; zp|%@(cY+zeXgK0BS2#v8X=p;ANC;$Rb{*~U;fPM%Kb7kc!xQQyaK~TdC!%NZdHE6K zp`c92iWoV<27w*|+423~;ODV~JR}1DV!MU}!}8Dv zMu#ghHifoXn7gb}xuA;;S7j6_&Cy$cM459Ot1lyn+>})(9YtT6xPO zfsw=MN>`d3A#?Ak)p;PN95^kTB=98D1LM>%*k$_Y^4QX9SZ{{p%15G6kvJ?|jEFly zU_@1)3k%9nJjJ^@=WB%wv8YkT{3pqBJWIZjRA@qs!Lw^^XaiZn-b9h3fk2n7V9E=} zN)2V5A~Icsje$)hv!+vX4e8b)t2jcE}CyT{Nz8(1Q$aTu=h3dBtt;F&;)m{~T$ z?Vu3womh5qP1xTEOYH1ol`wB(Q4(umNwrKe^A=phO>Np3kgP`IHnTFi+XFRTXz9P>Z zas9-__R|_TaE78a1|PLF@_}Sb#^l10f&fd1rpsbYBEUJY+W5oIaVZb^oT32Xilih$ z=W98GVY{$lV_rvWeq$$Ufe^vSSCY8u31XG*&dRsXn~4?A*sMrJ%$2lzZD-ZY6zFBk z_2^wQ(x$+oD_CjOraLbG8SA*6BOV%8&Q9453N3+Vy<+x+HHr>S*oEKu$}j4c6jn+= zTiMx1?ijU4C-}sUpqvw@8m*9RC+_7l^I=|%LhhP!Wb05L3dsbiC1%7AF|{lLktt

_4^mD$#ip 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±x>QO~k9s);8A@Wi$A=j}9U4 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

W!pC-t434}4oU84XA&4MV<4D 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

G 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 literal 0 HcmV?d00001 diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.elfcheck b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.elfcheck new file mode 100644 index 000000000..05134cbd2 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.elfcheck @@ -0,0 +1,9 @@ +elfcheck +Xilinx EDK 13.1 Build EDK_O.40d +Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved. + +Command Line: elfcheck -hw ../../HardwareWithEthernetLite/system.xml -pe +microblaze_0 RTOSDemoSource.elf + +ELF file : RTOSDemoSource.elf +elfcheck passed. diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.size b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.size new file mode 100644 index 000000000..0c798773b --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf.size @@ -0,0 +1,2 @@ + text data bss dec hex filename + 65386 600 16198 82184 14108 RTOSDemoSource.elf diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/main-blinky.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/main-blinky.d new file mode 100644 index 000000000..99456c12e --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/main-blinky.d @@ -0,0 +1,79 @@ +main-blinky.d main-blinky.o: ../main-blinky.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/queue.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/mb_interface.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h \ + ../../RTOSDemoBSP/microblaze_0/include/microblaze_exceptions_g.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/queue.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/mb_interface.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: + +../../RTOSDemoBSP/microblaze_0/include/microblaze_exceptions_g.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/makefile b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/makefile new file mode 100644 index 000000000..17ca28d35 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/makefile @@ -0,0 +1,70 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include subdir.mk +-include src/subdir.mk +-include FreeRTOS_Source/subdir.mk +-include FreeRTOS_Source/portable/MemMang/subdir.mk +-include FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +ifneq ($(strip $(S_UPPER_DEPS)),) +-include $(S_UPPER_DEPS) +endif +endif + +-include ../makefile.defs + +# Add inputs and outputs from these tool invocations to the build variables +ELFSIZE += \ +RTOSDemoSource.elf.size \ + +ELFCHECK += \ +RTOSDemoSource.elf.elfcheck \ + + +# All Target +all: RTOSDemoSource.elf secondary-outputs + +# Tool invocations +RTOSDemoSource.elf: $(OBJS) ../src/lscript.ld $(USER_OBJS) + @echo Building target: $@ + @echo Invoking: MicroBlaze gcc linker + mb-gcc -Wl,-T -Wl,../src/lscript.ld -L../../RTOSDemoBSP/microblaze_0/lib -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -o"RTOSDemoSource.elf" $(OBJS) $(USER_OBJS) $(LIBS) + @echo Finished building target: $@ + @echo ' ' + +RTOSDemoSource.elf.size: RTOSDemoSource.elf + @echo Invoking: MicroBlaze Print Size + mb-size RTOSDemoSource.elf |tee "RTOSDemoSource.elf.size" + @echo Finished building: $@ + @echo ' ' + +RTOSDemoSource.elf.elfcheck: RTOSDemoSource.elf + @echo Invoking: Xilinx ELF Check + elfcheck RTOSDemoSource.elf -hw ../../HardwareWithEthernetLite/system.xml -pe microblaze_0 |tee "RTOSDemoSource.elf.elfcheck" + @echo Finished building: $@ + @echo ' ' + +# Other Targets +clean: + -$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES)$(ELFSIZE)$(ELFCHECK)$(S_UPPER_DEPS) RTOSDemoSource.elf + -@echo ' ' + +secondary-outputs: $(ELFSIZE) $(ELFCHECK) + +.PHONY: all clean dependents +.SECONDARY: + +-include ../makefile.targets diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/objects.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/objects.mk new file mode 100644 index 000000000..dc31e16c6 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/objects.mk @@ -0,0 +1,8 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/sources.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/sources.mk new file mode 100644 index 000000000..1925083fc --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/sources.mk @@ -0,0 +1,25 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +O_SRCS := +C_SRCS := +LD_SRCS := +S_UPPER_SRCS := +S_SRCS := +OBJ_SRCS := +OBJS := +C_DEPS := +EXECUTABLES := +ELFSIZE := +ELFCHECK := +S_UPPER_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +src \ +. \ +FreeRTOS_Source \ +FreeRTOS_Source/portable/MemMang \ +FreeRTOS_Source/portable/GCC/MicroBlaze \ + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/subdir.mk new file mode 100644 index 000000000..cec3a2573 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/subdir.mk @@ -0,0 +1,54 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/testperiph.c \ +../src/xemaclite_example_util.c \ +../src/xemaclite_intr_example.c \ +../src/xemaclite_polled_example.c \ +../src/xgpio_intr_tapp_example.c \ +../src/xgpio_tapp_example.c \ +../src/xintc_tapp_example.c \ +../src/xtmrctr_intr_example.c \ +../src/xtmrctr_selftest_example.c \ +../src/xuartlite_selftest_example.c + +LD_SRCS += \ +../src/lscript.ld + +OBJS += \ +./src/testperiph.o \ +./src/xemaclite_example_util.o \ +./src/xemaclite_intr_example.o \ +./src/xemaclite_polled_example.o \ +./src/xgpio_intr_tapp_example.o \ +./src/xgpio_tapp_example.o \ +./src/xintc_tapp_example.o \ +./src/xtmrctr_intr_example.o \ +./src/xtmrctr_selftest_example.o \ +./src/xuartlite_selftest_example.o + +C_DEPS += \ +./src/testperiph.d \ +./src/xemaclite_example_util.d \ +./src/xemaclite_intr_example.d \ +./src/xemaclite_polled_example.d \ +./src/xgpio_intr_tapp_example.d \ +./src/xgpio_tapp_example.d \ +./src/xintc_tapp_example.d \ +./src/xtmrctr_intr_example.d \ +./src/xtmrctr_selftest_example.d \ +./src/xuartlite_selftest_example.d + + +# Each subdirectory must supply rules for building sources it contributes +src/%.o: ../src/%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\Demo_Source\Common_Demo_Files\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\portable\GCC\MicroBlaze" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/testperiph.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/testperiph.d new file mode 100644 index 000000000..6c0aaa54d --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/testperiph.d @@ -0,0 +1,92 @@ +src/testperiph.d src/testperiph.o: ../src/testperiph.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/mb_interface.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h ../src/intc_header.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h ../src/gpio_header.h \ + ../src/gpio_intr_header.h ../src/uartlite_header.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h \ + ../src/tmrctr_header.h ../src/tmrctr_intr_header.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h \ + ../src/xemaclite_example.h ../src/emaclite_header.h \ + ../src/emaclite_intr_header.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/mb_interface.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../src/intc_header.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h: + +../src/gpio_header.h: + +../src/gpio_intr_header.h: + +../src/uartlite_header.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h: + +../src/tmrctr_header.h: + +../src/tmrctr_intr_header.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h: + +../src/xemaclite_example.h: + +../src/emaclite_header.h: + +../src/emaclite_intr_header.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_example_util.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_example_util.d new file mode 100644 index 000000000..895f9a9fa --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_example_util.d @@ -0,0 +1,40 @@ +src/xemaclite_example_util.d src/xemaclite_example_util.o: \ + ../src/xemaclite_example_util.c ../src/xemaclite_example.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/mb_interface.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h + +../src/xemaclite_example.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/mb_interface.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_intr_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_intr_example.d new file mode 100644 index 000000000..0ea17e8df --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_intr_example.d @@ -0,0 +1,52 @@ +src/xemaclite_intr_example.d src/xemaclite_intr_example.o: \ + ../src/xemaclite_intr_example.c ../src/xemaclite_example.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/mb_interface.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h + +../src/xemaclite_example.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/mb_interface.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_polled_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_polled_example.d new file mode 100644 index 000000000..63c8f8953 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xemaclite_polled_example.d @@ -0,0 +1,40 @@ +src/xemaclite_polled_example.d src/xemaclite_polled_example.o: \ + ../src/xemaclite_polled_example.c ../src/xemaclite_example.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv.h \ + ../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h \ + ../../RTOSDemoBSP/microblaze_0/include/mb_interface.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h + +../src/xemaclite_example.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv.h: + +../../RTOSDemoBSP/microblaze_0/include/xenv_standalone.h: + +../../RTOSDemoBSP/microblaze_0/include/mb_interface.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xemaclite_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_intr_tapp_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_intr_tapp_example.d new file mode 100644 index 000000000..928070973 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_intr_tapp_example.d @@ -0,0 +1,38 @@ +src/xgpio_intr_tapp_example.d src/xgpio_intr_tapp_example.o: \ + ../src/xgpio_intr_tapp_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_tapp_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_tapp_example.d new file mode 100644 index 000000000..5f59d3496 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xgpio_tapp_example.d @@ -0,0 +1,29 @@ +src/xgpio_tapp_example.d src/xgpio_tapp_example.o: \ + ../src/xgpio_tapp_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xintc_tapp_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xintc_tapp_example.d new file mode 100644 index 000000000..e0514c253 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xintc_tapp_example.d @@ -0,0 +1,35 @@ +src/xintc_tapp_example.d src/xintc_tapp_example.o: \ + ../src/xintc_tapp_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_intr_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_intr_example.d new file mode 100644 index 000000000..f00f76be4 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_intr_example.d @@ -0,0 +1,38 @@ +src/xtmrctr_intr_example.d src/xtmrctr_intr_example.o: \ + ../src/xtmrctr_intr_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_selftest_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_selftest_example.d new file mode 100644 index 000000000..604a44aab --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xtmrctr_selftest_example.d @@ -0,0 +1,26 @@ +src/xtmrctr_selftest_example.d src/xtmrctr_selftest_example.o: \ + ../src/xtmrctr_selftest_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xuartlite_selftest_example.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xuartlite_selftest_example.d new file mode 100644 index 000000000..7dbf8838b --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/src/xuartlite_selftest_example.d @@ -0,0 +1,20 @@ +src/xuartlite_selftest_example.d src/xuartlite_selftest_example.o: \ + ../src/xuartlite_selftest_example.c \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xuartlite.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xuartlite.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/subdir.mk new file mode 100644 index 000000000..15509987f --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../ParTest.c \ +../main-blinky.c + +OBJS += \ +./ParTest.o \ +./main-blinky.o + +C_DEPS += \ +./ParTest.d \ +./main-blinky.d + + +# Each subdirectory must supply rules for building sources it contributes +%.o: ../%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\Demo_Source\Common_Demo_Files\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\portable\GCC\MicroBlaze" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/FreeRTOSConfig.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/FreeRTOSConfig.h new file mode 100644 index 000000000..c4397d99c --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/FreeRTOSConfig.h @@ -0,0 +1,175 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + + +/* The following #error directive is to remind users that a batch file must be + * executed prior to this project being built. The batch file *cannot* be + * executed from within older versions of Eclipse, but probably can be executed + * from within the Xilinx SDK. Once it has been executed, re-open or refresh + * the Eclipse project and remove the #error line below. + */ +//#error Ensure CreateProjectDirectoryStructure.bat has been executed before building. See comment immediately above. + + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + * + * See http://www.freertos.org/a00110.html. + *----------------------------------------------------------*/ +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 1 +#define configUSE_TICK_HOOK 1 +#define configCPU_CLOCK_HZ ( XPAR_MICROBLAZE_CORE_CLOCK_FREQ_HZ ) /* Not actually used in this demo as the timer is set up in main() and uses the peripheral clock, not the CPU clock. */ +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMAX_PRIORITIES ( 6 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 64 * 1024 ) ) +#define configMAX_TASK_NAME_LEN ( 10 ) +#define configUSE_TRACE_FACILITY 1 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 +#define configUSE_MUTEXES 1 +#define configQUEUE_REGISTRY_SIZE 0 +#define configCHECK_FOR_STACK_OVERFLOW 2 +#define configUSE_RECURSIVE_MUTEXES 1 +#define configUSE_MALLOC_FAILED_HOOK 1 +#define configUSE_APPLICATION_TASK_TAG 0 +#define configUSE_COUNTING_SEMAPHORES 1 +#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 200 ) +#define configINTERRUPT_STACK_SIZE configMINIMAL_STACK_SIZE + +/* If configINSTALL_EXCEPTION_HANDLERS is set to 1, then the kernel will +automatically install its own exception handlers before the kernel is started, +if the application writer has not already caused them to be installed using the +vPortExceptionsInstallHandlers() API function. See the documentation page for +this demo on the FreeRTOS.org web site for more information. */ +#define configINSTALL_EXCEPTION_HANDLERS 1 + +/* configINTERRUPT_CONTROLLER_TO_USE must be set to the ID of the interrupt +controller that is going to be used directly by FreeRTOS itself. Most hardware +designs will only include on interrupt controller. */ +#define configINTERRUPT_CONTROLLER_TO_USE XPAR_INTC_SINGLE_DEVICE_ID + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Software timer definitions. */ +#define configUSE_TIMERS 1 +#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) +#define configTIMER_QUEUE_LENGTH 10 +#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE ) + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 + +#define configASSERT( x ) if( ( x ) == 0 ) { portDISABLE_INTERRUPTS(); for( ;; ); } + + +/* Run time stats gathering definitions. The conditional compilation is to +prevent the C syntax being included in assembly files. */ +#ifndef __ASSEMBLER__ + unsigned long ulMainGetRunTimeCounterValue( void ); + void vMainConfigureTimerForRunTimeStats( void ); +#endif +#define configGENERATE_RUN_TIME_STATS 1 +#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vMainConfigureTimerForRunTimeStats() +#define portGET_RUN_TIME_COUNTER_VALUE() ulMainGetRunTimeCounterValue() + + + +#define configLWIP_TASK_PRIORITY ( configMAX_PRIORITIES - 2 ) + +/* MAC address configuration. */ +#define configMAC_ADDR0 0x00 +#define configMAC_ADDR1 0x12 +#define configMAC_ADDR2 0x13 +#define configMAC_ADDR3 0x10 +#define configMAC_ADDR4 0x15 +#define configMAC_ADDR5 0x11 + +/* IP address configuration. */ +#define configIP_ADDR0 192 +#define configIP_ADDR1 168 +#define configIP_ADDR2 0 +#define configIP_ADDR3 200 + +/* Gateway IP address configuration. */ +#define configGW_IP_ADDR0 192 +#define configGW_IP_ADDR1 168 +#define configGW_IP_ADDR2 0 +#define configGW_IP_ADDR3 3 + +/* Netmask configuration. */ +#define configNET_MASK0 255 +#define configNET_MASK1 255 +#define configNET_MASK2 255 +#define configNET_MASK3 0 + +#endif /* FREERTOS_CONFIG_H */ + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/ParTest.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/ParTest.c new file mode 100644 index 000000000..40371814d --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/ParTest.c @@ -0,0 +1,160 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/*----------------------------------------------------------- + * Simple digital IO routines. + *-----------------------------------------------------------*/ + +/* Kernel includes. */ +#include "FreeRTOS.h" + +/* Demo application includes. */ +#include "partest.h" + +/* Library includes. */ +#include "xgpio.h" + +/* The hardware design that accompanies this demo project has four LED +outputs. */ +#define partstMAX_LED 4 + +/*-----------------------------------------------------------*/ + +/* A hardware specific constant required to use the Xilinx driver library. */ +static const unsigned portBASE_TYPE uxGPIOOutputChannel = 1UL; + +/* The current state of the output port. */ +static unsigned char ucGPIOState = 0U; + +/* Structure that hold the state of the ouptut peripheral used by this demo. +This is used by the Xilinx peripheral driver API functions. */ +static XGpio xOutputGPIOInstance; + +/* + * Setup the IO for the LED outputs. + */ +void vParTestInitialise( void ) +{ +portBASE_TYPE xStatus; +const unsigned char ucSetToOutput = 0U; + + /* Initialise the GPIO for the LEDs. */ + xStatus = XGpio_Initialize( &xOutputGPIOInstance, XPAR_LEDS_4BITS_DEVICE_ID ); + if( xStatus == XST_SUCCESS ) + { + /* All bits on this channel are going to be outputs (LEDs). */ + XGpio_SetDataDirection( &xOutputGPIOInstance, uxGPIOOutputChannel, ucSetToOutput ); + + /* Start with all LEDs off. */ + ucGPIOState = 0U; + XGpio_DiscreteWrite( &xOutputGPIOInstance, uxGPIOOutputChannel, ucGPIOState ); + } + + configASSERT( xStatus == XST_SUCCESS ); +} +/*-----------------------------------------------------------*/ + +void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue ) +{ +unsigned char ucLED = 1U; + + /* Only attempt to set the LED if it is in range. */ + if( uxLED < partstMAX_LED ) + { + ucLED <<= ( unsigned char ) uxLED; + + portENTER_CRITICAL(); + { + if( xValue == pdFALSE ) + { + ucGPIOState &= ~ucLED; + } + else + { + ucGPIOState |= ucLED; + } + XGpio_DiscreteWrite( &xOutputGPIOInstance, uxGPIOOutputChannel, ucGPIOState ); + } + portEXIT_CRITICAL(); + } +} +/*-----------------------------------------------------------*/ + +void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) +{ +unsigned char ucLED = 1U; + + /* Only attempt to toggle the LED if it is in range. */ + if( uxLED < partstMAX_LED ) + { + ucLED <<= ( unsigned char ) uxLED; + + portENTER_CRITICAL(); + { + if( ( ucGPIOState & ucLED ) != 0 ) + { + ucGPIOState &= ~ucLED; + } + else + { + ucGPIOState |= ucLED; + } + + XGpio_DiscreteWrite( &xOutputGPIOInstance, uxGPIOOutputChannel, ucGPIOState ); + } + portEXIT_CRITICAL(); + } +} + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/RegisterTests.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/RegisterTests.c new file mode 100644 index 000000000..1302a094f --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/RegisterTests.c @@ -0,0 +1,307 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* + * The register test task as described in the comments at the top of main-full.c. + */ +void vRegisterTest1( void *pvParameters ); +void vRegisterTest2( void *pvParameters ); + +/* Variables that are incremented on each iteration of the reg test tasks - +provided the tasks have not reported any errors. The check timer inspects these +variables to ensure they are still incrementing as expected. If a variable +stops incrementing then it is likely that its associate task has stalled or +detected an error. */ +volatile unsigned long ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL; + +/*-----------------------------------------------------------*/ + +void vRegisterTest1( void *pvParameters ) +{ + /* This task uses an infinite loop that is implemented in the assembly + code. + + First fill the relevant registers with known values. */ + asm volatile ( " addi r3, r0, 3 \n\t" \ + " addi r4, r0, 4 \n\t" \ + " addi r6, r0, 6 \n\t" \ + " addi r7, r0, 7 \n\t" \ + " addi r8, r0, 8 \n\t" \ + " addi r9, r0, 9 \n\t" \ + " addi r10, r0, 10 \n\t" \ + " addi r11, r0, 11 \n\t" \ + " addi r12, r0, 12 \n\t" \ + " addi r16, r0, 16 \n\t" \ + " addi r19, r0, 19 \n\t" \ + " addi r20, r0, 20 \n\t" \ + " addi r21, r0, 21 \n\t" \ + " addi r22, r0, 22 \n\t" \ + " addi r23, r0, 23 \n\t" \ + " addi r24, r0, 24 \n\t" \ + " addi r25, r0, 25 \n\t" \ + " addi r26, r0, 26 \n\t" \ + " addi r27, r0, 27 \n\t" \ + " addi r28, r0, 28 \n\t" \ + " addi r29, r0, 29 \n\t" \ + " addi r30, r0, 30 \n\t" \ + " addi r31, r0, 31 \n\t" + ); + + /* Now test the register values to ensure they contain the same value that + was written to them above. This task will get preempted frequently so + other tasks are likely to have executed since the register values were + written. If any register contains an unexpected value then the task will + branch to Error_Loop_1, which in turn prevents it from incrementing its + loop counter, enabling the check timer to determine that all is not as it + should be. */ + + asm volatile ( "Loop_Start_1: \n\t" \ + " xori r18, r3, 3 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r4, 4 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r6, 6 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r7, 7 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r8, 8 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r9, 9 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r10, 10 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r11, 11 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r12, 12 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r16, 16 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r19, 19 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r20, 20 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r21, 21 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r22, 22 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r23, 23 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r24, 24 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r25, 25 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r26, 26 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r27, 27 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r28, 28 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r29, 29 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r30, 30 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" \ + " xori r18, r31, 31 \n\t" \ + " bnei r18, Error_Loop_1 \n\t" + ); + + /* If this task has not branched to the error loop, then everything is ok, + and the check variable can be incremented to indicate that this task + is still running. Then, brach back to the top to check the register + contents again. */ + asm volatile ( " lwi r18, r0, ulRegTest1CycleCount \n\t" \ + " addik r18, r18, 1 \n\t" \ + " swi r18, r0, ulRegTest1CycleCount \n\t" \ + " \n\t" \ + " bri Loop_Start_1 " + ); + + /* The test function will branch here if it discovers an error. This part + of the code just sits in a NULL loop, which prevents the check variable + incrementing any further to allow the check timer to recognize that this + test has failed. */ + asm volatile ( "Error_Loop_1: \n\t" \ + " bri 0 \n\t" \ + " nop \n\t" \ + ); + + ( void ) pvParameters; +} +/*-----------------------------------------------------------*/ + +void vRegisterTest2( void *pvParameters ) +{ + /* This task uses an infinite loop that is implemented in the assembly + code. + + First fill the registers with known values. */ + asm volatile ( " addi r16, r0, 1016 \n\t" \ + " addi r19, r0, 1019 \n\t" \ + " addi r20, r0, 1020 \n\t" \ + " addi r21, r0, 1021 \n\t" \ + " addi r22, r0, 1022 \n\t" \ + " addi r23, r0, 1023 \n\t" \ + " addi r24, r0, 1024 \n\t" \ + " addi r25, r0, 1025 \n\t" \ + " addi r26, r0, 1026 \n\t" \ + " addi r27, r0, 1027 \n\t" \ + " addi r28, r0, 1028 \n\t" \ + " addi r29, r0, 1029 \n\t" \ + " addi r30, r0, 1030 \n\t" \ + " addi r31, r0, 1031 \n\t" \ + " " \ + "Loop_Start_2: " + ); + + /* Unlike vRegisterTest1, vRegisterTest2 performs a yield. This increases + the test coverage, but does mean volatile registers need re-loading with + their exepcted values. */ + taskYIELD(); + + /* taskYIELD() could have changed temporaries - set them back to those + expected by the reg test task. */ + asm volatile ( " addi r3, r0, 103 \n\t" \ + " addi r4, r0, 104 \n\t" \ + " addi r6, r0, 106 \n\t" \ + " addi r7, r0, 107 \n\t" \ + " addi r8, r0, 108 \n\t" \ + " addi r9, r0, 109 \n\t" \ + " addi r10, r0, 1010 \n\t" \ + " addi r11, r0, 1011 \n\t" \ + " addi r12, r0, 1012 \n\t" \ + ); + + + /* Now test the register values to ensure they contain the same value that + was written to them above. This task will get preempted frequently so + other tasks are likely to have executed since the register values were + written. */ + asm volatile ( " xori r18, r3, 103 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r4, 104 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r6, 106 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r7, 107 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r8, 108 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r9, 109 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r10, 1010 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r11, 1011 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r12, 1012 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r16, 1016 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r19, 1019 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r20, 1020 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r21, 1021 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r22, 1022 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r23, 1023 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r24, 1024 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r25, 1025 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r26, 1026 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r27, 1027 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r28, 1028 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r29, 1029 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r30, 1030 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" \ + " xori r18, r31, 1031 \n\t" \ + " bnei r18, Error_Loop_2 \n\t" + ); + + /* If this task has not branched to the error loop, then everything is ok, + and the check variable should be incremented to indicate that this task + is still running. Then, brach back to the top to check the registers + again. */ + asm volatile ( " lwi r18, r0, ulRegTest2CycleCount \n\t" \ + " addik r18, r18, 1 \n\t" \ + " swi r18, r0, ulRegTest2CycleCount \n\t" \ + " \n\t" \ + " bri Loop_Start_2 " + ); + + /* The test function will branch here if it discovers an error. This part + of the code just sits in a NULL loop, which prevents the check variable + incrementing any further to allow the check timer to recognize that this + test has failed. */ + asm volatile ( "Error_Loop_2: \n\t" \ + " bri 0 \n\t" \ + " nop \n\t" \ + ); + + ( void ) pvParameters; +} + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.c new file mode 100644 index 000000000..993fffcdd --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.c @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#include "lwip/opt.h" +#include "lwip/def.h" +#include "fs.h" +#include "fsdata.h" +#include + +/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the + * file system (to prevent changing the file included in CVS) */ +#ifndef HTTPD_USE_CUSTUM_FSDATA +#define HTTPD_USE_CUSTUM_FSDATA 0 +#endif + +#if HTTPD_USE_CUSTUM_FSDATA +#include "fsdata_custom.c" +#else /* HTTPD_USE_CUSTUM_FSDATA */ +#include "fsdata.c" +#endif /* HTTPD_USE_CUSTUM_FSDATA */ + +/*-----------------------------------------------------------------------------------*/ +/* Define the number of open files that we can support. */ +#ifndef LWIP_MAX_OPEN_FILES +#define LWIP_MAX_OPEN_FILES 10 +#endif + +/* Define the file system memory allocation structure. */ +struct fs_table { + struct fs_file file; + u8_t inuse; +}; + +/* Allocate file system memory */ +struct fs_table fs_memory[LWIP_MAX_OPEN_FILES]; + +#if LWIP_HTTPD_CUSTOM_FILES +int fs_open_custom(struct fs_file *file, const char *name); +void fs_close_custom(struct fs_file *file); +#endif /* LWIP_HTTPD_CUSTOM_FILES */ + +/*-----------------------------------------------------------------------------------*/ +static struct fs_file * +fs_malloc(void) +{ + int i; + for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) { + if(fs_memory[i].inuse == 0) { + fs_memory[i].inuse = 1; + return(&fs_memory[i].file); + } + } + return(NULL); +} + +/*-----------------------------------------------------------------------------------*/ +static void +fs_free(struct fs_file *file) +{ + int i; + for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) { + if(&fs_memory[i].file == file) { + fs_memory[i].inuse = 0; + break; + } + } + return; +} + +/*-----------------------------------------------------------------------------------*/ +struct fs_file * +fs_open(const char *name) +{ + struct fs_file *file; + const struct fsdata_file *f; + + file = fs_malloc(); + if(file == NULL) { + return NULL; + } + +#if LWIP_HTTPD_CUSTOM_FILES + if(fs_open_custom(file, name)) { + file->is_custom_file = 1; + return file; + } + file->is_custom_file = 0; +#endif /* LWIP_HTTPD_CUSTOM_FILES */ + + for(f = FS_ROOT; f != NULL; f = f->next) { + if (!strcmp(name, (char *)f->name)) { + file->data = (const char *)f->data; + file->len = f->len; + file->index = f->len; + file->pextension = NULL; + file->http_header_included = f->http_header_included; +#if HTTPD_PRECALCULATED_CHECKSUM + file->chksum_count = f->chksum_count; + file->chksum = f->chksum; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ +#if LWIP_HTTPD_FILE_STATE + file->state = fs_state_init(file, name); +#endif /* #if LWIP_HTTPD_FILE_STATE */ + return file; + } + } + fs_free(file); + return NULL; +} + +/*-----------------------------------------------------------------------------------*/ +void +fs_close(struct fs_file *file) +{ +#if LWIP_HTTPD_CUSTOM_FILES + if (file->is_custom_file) { + fs_close_custom(file); + } +#endif /* LWIP_HTTPD_CUSTOM_FILES */ +#if LWIP_HTTPD_FILE_STATE + fs_state_free(file, file->state); +#endif /* #if LWIP_HTTPD_FILE_STATE */ + fs_free(file); +} +/*-----------------------------------------------------------------------------------*/ +int +fs_read(struct fs_file *file, char *buffer, int count) +{ + int read; + + if(file->index == file->len) { + return -1; + } + + read = file->len - file->index; + if(read > count) { + read = count; + } + + MEMCPY(buffer, (file->data + file->index), read); + file->index += read; + + return(read); +} +/*-----------------------------------------------------------------------------------*/ +int fs_bytes_left(struct fs_file *file) +{ + return file->len - file->index; +} diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.h new file mode 100644 index 000000000..cd7675923 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fs.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __FS_H__ +#define __FS_H__ + +#include "lwip/opt.h" + +/** Set this to 1 and provide the functions: + * - "int fs_open_custom(struct fs_file *file, const char *name)" + * Called first for every opened file to allow opening files + * that are not included in fsdata(_custom).c + * - "void fs_close_custom(struct fs_file *file)" + * Called to free resources allocated by fs_open_custom(). + */ +#ifndef LWIP_HTTPD_CUSTOM_FILES +#define LWIP_HTTPD_CUSTOM_FILES 0 +#endif + +/** Set this to 1 to include an application state argument per file + * that is opened. This allows to keep a state per connection/file. + */ +#ifndef LWIP_HTTPD_FILE_STATE +#define LWIP_HTTPD_FILE_STATE 0 +#endif + +/** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for + * predefined (MSS-sized) chunks of the files to prevent having to calculate + * the checksums at runtime. */ +#ifndef HTTPD_PRECALCULATED_CHECKSUM +#define HTTPD_PRECALCULATED_CHECKSUM 0 +#endif + +#if HTTPD_PRECALCULATED_CHECKSUM +struct fsdata_chksum { + u32_t offset; + u16_t chksum; + u16_t len; +}; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ + +struct fs_file { + const char *data; + int len; + int index; + void *pextension; +#if HTTPD_PRECALCULATED_CHECKSUM + const struct fsdata_chksum *chksum; + u16_t chksum_count; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ + u8_t http_header_included; +#if LWIP_HTTPD_CUSTOM_FILES + u8_t is_custom_file; +#endif /* LWIP_HTTPD_CUSTOM_FILES */ +#if LWIP_HTTPD_FILE_STATE + void *state; +#endif /* LWIP_HTTPD_FILE_STATE */ +}; + +struct fs_file *fs_open(const char *name); +void fs_close(struct fs_file *file); +int fs_read(struct fs_file *file, char *buffer, int count); +int fs_bytes_left(struct fs_file *file); + +#if LWIP_HTTPD_FILE_STATE +/** This user-defined function is called when a file is opened. */ +void *fs_state_init(struct fs_file *file, const char *name); +/** This user-defined function is called when a file is closed. */ +void fs_state_free(struct fs_file *file, void *state); +#endif /* #if LWIP_HTTPD_FILE_STATE */ + +#endif /* __FS_H__ */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.c new file mode 100644 index 000000000..19ebe78bc --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.c @@ -0,0 +1,2084 @@ +#include "fs.h" +#include "lwip/def.h" +#include "fsdata.h" + + +#define file_NULL (struct fsdata_file *) NULL + + +static const unsigned int dummy_align__404_html = 0; +static const unsigned char data__404_html[] = { +/* /404.html (10 chars) */ +0x2f,0x34,0x30,0x34,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00, + +/* HTTP header */ +/* "HTTP/1.0 404 File not found +" (29 bytes) */ +0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x34,0x30,0x34,0x20,0x46,0x69,0x6c, +0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x0d,0x0a, +/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip) +" (63 bytes) */ +0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33, +0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e, +0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70, +0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a, +/* "Content-type: text/html + +" (27 bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65, +0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a, +/* raw file data (544 bytes) */ +0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,0x69, +0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67, +0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20, +0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,0x68, +0x65,0x61,0x64,0x3e,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,0x6f,0x6c, +0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,0x74,0x3d, +0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0a,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74, +0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x30,0x30,0x25, +0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x20,0x76,0x61,0x6c, +0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69, +0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20, +0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, +0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,0x65,0x2f,0x22,0x3e,0x3c,0x69, +0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,0x6d,0x67,0x2f,0x73,0x69,0x63, +0x73,0x2e,0x67,0x69,0x66,0x22,0x0a,0x09,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72, +0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c, +0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x53,0x49,0x43,0x53, +0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,0x61,0x3e,0x0a,0x09,0x3c,0x2f,0x74, +0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30, +0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49, +0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68, +0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f, +0x68,0x31,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x68,0x32,0x3e,0x34,0x30,0x34,0x20,0x2d, +0x20,0x50,0x61,0x67,0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x3c, +0x2f,0x68,0x32,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0a,0x09,0x20,0x20,0x20, +0x20,0x53,0x6f,0x72,0x72,0x79,0x2c,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x67,0x65, +0x20,0x79,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74, +0x69,0x6e,0x67,0x20,0x77,0x61,0x73,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e, +0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x69,0x73,0x0a,0x09,0x20,0x20,0x20,0x20,0x73, +0x65,0x72,0x76,0x65,0x72,0x2e,0x20,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0a, +0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0a,0x09,0x20,0x20,0x26,0x6e, +0x62,0x73,0x70,0x3b,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,0x3e, +0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a, +0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a, +}; + +static const unsigned int dummy_align__index_shtml = 1; +static const unsigned char data__index_shtml[] = { +/* /index.shtml (13 chars) */ +0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,0x00, + +/* HTTP header */ +/* "HTTP/1.0 200 OK +" (17 bytes) */ +0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d, +0x0a, +/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip) +" (63 bytes) */ +0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33, +0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e, +0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70, +0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a, +/* "Content-type: text/html +Expires: Fri, 10 Apr 2008 14:00:00 GMT +Pragma: no-cache + +" (85 bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65, +0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73, +0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30, +0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d, +0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68, +0x65,0x0d,0x0a,0x0d,0x0a, +/* raw file data (886 bytes) */ +0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50, +0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, +0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61, +0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22, +0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, +0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65, +0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a, +0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74, +0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72, +0x67,0x20,0x75,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,0x72, +0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x20, +0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,0x44, +0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,0x77, +0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,0x6f, +0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,0x3d, +0x27,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,0x26,0x71,0x75, +0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,0x3c,0x66,0x6f, +0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,0x6c,0x22,0x3e, +0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,0x64,0x65,0x78, +0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,0x53,0x74,0x61, +0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20, +0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65, +0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,0x69,0x6d,0x65, +0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c, +0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x73,0x74,0x61, +0x74,0x73,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x43,0x50,0x20,0x53,0x74, +0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e, +0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x74,0x63,0x70,0x2e,0x73,0x68, +0x74,0x6d,0x6c,0x22,0x3e,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f,0x6e,0x73, +0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61, +0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, +0x77,0x2e,0x66,0x72,0x65,0x65,0x72,0x74,0x6f,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x22, +0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x20,0x48,0x6f,0x6d,0x65,0x70,0x61, +0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20, +0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6f,0x2e,0x73,0x68,0x74,0x6d, +0x6c,0x22,0x3e,0x49,0x4f,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f, +0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x6c,0x6f,0x67,0x6f, +0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,0x6a,0x70,0x67,0x3c,0x2f,0x61, +0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x68,0x72,0x3e, +0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x68,0x32,0x3e,0x54, +0x61,0x73,0x6b,0x20,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x3c,0x2f, +0x68,0x32,0x3e,0x0d,0x0a,0x50,0x61,0x67,0x65,0x20,0x77,0x69,0x6c,0x6c,0x20,0x72, +0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x32,0x20,0x73, +0x65,0x63,0x6f,0x6e,0x64,0x73,0x2e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x66,0x6f,0x6e, +0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x63,0x6f,0x75,0x72,0x69,0x65,0x72,0x22, +0x3e,0x3c,0x70,0x72,0x65,0x3e,0x54,0x61,0x73,0x6b,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x20,0x50,0x72,0x69,0x6f,0x72, +0x69,0x74,0x79,0x20,0x20,0x53,0x74,0x61,0x63,0x6b,0x09,0x23,0x3c,0x62,0x72,0x3e, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,0x74,0x6f,0x73,0x5f, +0x73,0x74,0x61,0x74,0x73,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x2f,0x70,0x72,0x65,0x3e, +0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e, +0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d, +0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,}; + +static const unsigned int dummy_align__logo_jpg = 2; +static const unsigned char data__logo_jpg[] = { +/* /logo.jpg (10 chars) */ +0x2f,0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x00,0x00,0x00, + +/* HTTP header */ +/* "HTTP/1.0 200 OK +" (17 bytes) */ +0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d, +0x0a, +/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip) +" (63 bytes) */ +0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33, +0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e, +0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70, +0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a, +/* "Content-type: image/jpeg + +" (28 bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d, +0x61,0x67,0x65,0x2f,0x6a,0x70,0x65,0x67,0x0d,0x0a,0x0d,0x0a, +/* raw file data (28602 bytes) */ +0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x00,0x00,0x01, +0x00,0x01,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x03,0x02,0x02,0x03,0x02,0x02,0x03, +0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x05,0x08,0x05,0x05,0x04,0x04,0x05,0x0a,0x07, +0x07,0x06,0x08,0x0c,0x0a,0x0c,0x0c,0x0b,0x0a,0x0b,0x0b,0x0d,0x0e,0x12,0x10,0x0d, +0x0e,0x11,0x0e,0x0b,0x0b,0x10,0x16,0x10,0x11,0x13,0x14,0x15,0x15,0x15,0x0c,0x0f, +0x17,0x18,0x16,0x14,0x18,0x12,0x14,0x15,0x14,0xff,0xdb,0x00,0x43,0x01,0x03,0x04, +0x04,0x05,0x04,0x05,0x09,0x05,0x05,0x09,0x14,0x0d,0x0b,0x0d,0x14,0x14,0x14,0x14, +0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, +0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, +0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0xff,0xc0, +0x00,0x11,0x08,0x00,0xea,0x02,0x71,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11, +0x01,0xff,0xc4,0x00,0x1f,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, +0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05, +0x05,0x04,0x04,0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21, +0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23, +0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17, +0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a, +0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a, +0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a, +0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99, +0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7, +0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5, +0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1, +0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xc4,0x00,0x1f,0x01,0x00,0x03, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, +0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x11,0x00, +0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00, +0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13, +0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15, +0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27, +0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, +0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, +0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88, +0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6, +0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4, +0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2, +0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9, +0xfa,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xfd, +0x53,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa4,0x34,0x8e, +0x70,0x09,0xaf,0x0b,0xf1,0xbf,0xc6,0x4b,0x8f,0x13,0x78,0xc2,0xdb,0xc1,0x7e,0x0f, +0xb8,0x2b,0x24,0x93,0x08,0xae,0xf5,0x48,0x88,0x3b,0x47,0xf1,0x2c,0x7f,0x4e,0x72, +0xdf,0x97,0xad,0x72,0x62,0x71,0x54,0xf0,0xb1,0xe6,0x9e,0xef,0x44,0xba,0xb6,0x73, +0x57,0xc4,0x43,0x0e,0x93,0x9e,0xef,0x44,0xba,0xb6,0x77,0xbe,0x3b,0xf8,0xb9,0xa1, +0xf8,0x16,0x39,0x23,0x9d,0xe4,0xd4,0x35,0x05,0x1c,0x58,0x59,0x2e,0xf9,0x3d,0xb7, +0x76,0x51,0xf5,0xfc,0x8d,0x78,0x07,0x8a,0xff,0x00,0x69,0x3f,0x1b,0x6a,0xb3,0x3a, +0x69,0x3a,0x7f,0xf6,0x2d,0xb7,0xf0,0x81,0x09,0x96,0x5f,0xc5,0x98,0x63,0xf2,0x15, +0xf4,0xde,0x83,0xe0,0xdd,0x27,0xc3,0xf6,0x62,0x0b,0x6b,0x38,0xc9,0x3f,0x33,0xcb, +0x20,0xde,0xf2,0x37,0x76,0x66,0x3c,0x92,0x6b,0x40,0xe9,0x16,0x47,0xad,0x9c,0x1f, +0xf7,0xec,0x57,0x9d,0x88,0xc2,0xe3,0x31,0x2b,0xf8,0xbc,0x8b,0xb2,0x5f,0xad,0xce, +0x3c,0x46,0x1b,0x13,0x88,0x56,0x8d,0x5e,0x45,0xe4,0xbf,0x53,0xe0,0x8d,0x4f,0xc6, +0xfe,0x33,0xd5,0x18,0x9b,0xcd,0x5f,0x56,0x90,0x93,0x9c,0x19,0xa4,0x0b,0xf9,0x0e, +0x2b,0x35,0x75,0xff,0x00,0x10,0xc7,0x9c,0x6a,0x3a,0x82,0xfa,0xfe,0xfa,0x41,0xfd, +0x6b,0xf4,0x19,0xb4,0x2d,0x39,0xba,0xd8,0x5b,0x7f,0xdf,0xa1,0xfe,0x15,0x19,0xf0, +0xce,0x94,0xff,0x00,0x7b,0x4d,0xb5,0x3f,0xf6,0xc5,0x7f,0xc2,0xbc,0x79,0x64,0x15, +0xa4,0xef,0xed,0xaf,0xf2,0x7f,0xe6,0x78,0x72,0xc8,0x6a,0x49,0xdd,0xd7,0x7f,0xd7, +0xcc,0xf8,0x0d,0x3c,0x5f,0xe2,0x68,0x94,0x05,0xd6,0x35,0x45,0x03,0xa0,0x17,0x32, +0x0f,0xeb,0x53,0x27,0x8f,0xbc,0x59,0x11,0x25,0x75,0xfd,0x59,0x33,0xe9,0x77,0x28, +0xfe,0xb5,0xf7,0x8b,0x78,0x3b,0x44,0x7e,0xba,0x4d,0x99,0xff,0x00,0xb6,0x2b,0x51, +0x37,0x81,0x7c,0x3c,0xf9,0xce,0x8d,0x66,0x73,0xff,0x00,0x4c,0x56,0xa5,0x64,0x58, +0x85,0xb5,0x6f,0xcc,0x9f,0xec,0x2a,0xeb,0x6a,0xef,0xf1,0xff,0x00,0x33,0xe1,0x6f, +0xf8,0x59,0x3e,0x2f,0x5f,0xf9,0x98,0xb5,0x7f,0xfc,0x0c,0x93,0xfc,0x69,0xeb,0xf1, +0x4f,0xc6,0x51,0x9c,0xaf,0x89,0x35,0x5c,0xfb,0xdd,0x3f,0xf8,0xd7,0xdc,0x0d,0xf0, +0xf3,0xc3,0x6f,0xd7,0x44,0xb2,0x3f,0xf6,0xc8,0x54,0x4f,0xf0,0xcb,0xc2,0xaf,0xf7, +0xb4,0x2b,0x23,0xff,0x00,0x6c,0x85,0x2f,0xec,0x4c,0x5f,0xfc,0xfe,0xfc,0xc5,0xfd, +0x89,0x8a,0x5b,0x57,0x7f,0x89,0xf1,0x54,0x7f,0x17,0xfc,0x6b,0x1f,0xfc,0xcc,0x9a, +0x99,0xfa,0xdc,0x35,0x58,0x8b,0xe3,0x87,0x8e,0xe1,0x6c,0xaf,0x89,0x2f,0x73,0xd3, +0xe6,0x21,0x87,0xe4,0x45,0x7d,0x8e,0xff,0x00,0x09,0x7c,0x20,0xfd,0x74,0x0b,0x3f, +0xc2,0x3c,0x54,0x2f,0xf0,0x6b,0xc1,0xaf,0xd7,0x41,0xb5,0x1f,0x45,0xa4,0xb2,0x7c, +0x72,0xda,0xb7,0xe2,0xc7,0xfd,0x8f,0x8d,0x5b,0x62,0x1f,0xe2,0x7c,0x8a,0x9f,0x1f, +0xbc,0x7e,0x83,0x1f,0xf0,0x91,0x5c,0x7d,0x4c,0x71,0x9f,0xfd,0x96,0xa6,0x1f,0xb4, +0x37,0x8f,0xc7,0xfc,0xcc,0x12,0xfe,0x30,0x45,0xff,0x00,0xc4,0x57,0xd5,0xaf,0xf0, +0x43,0xc1,0x4e,0x0f,0xfc,0x48,0xa0,0x1f,0x4a,0x89,0xbe,0x03,0xf8,0x21,0xf3,0xff, +0x00,0x12,0x48,0x86,0x7d,0x09,0xa7,0xfd,0x95,0x98,0xad,0xab,0x7e,0x2c,0x3f,0xb2, +0xb3,0x15,0xb6,0x21,0xfd,0xec,0xf9,0x69,0x7f,0x68,0xaf,0x1f,0x8f,0xf9,0x8f,0x39, +0xfa,0xdb,0xc5,0xff,0x00,0xc4,0xd4,0x89,0xfb,0x48,0x78,0xf9,0x08,0x3f,0xdb,0x59, +0xc7,0xad,0xb4,0x47,0xff,0x00,0x65,0xaf,0xa6,0x9f,0xf6,0x7d,0xf0,0x33,0x8e,0x74, +0x75,0x1e,0xe1,0x8d,0x42,0xff,0x00,0xb3,0x9f,0x81,0x9c,0x7f,0xc8,0x2d,0x97,0xe9, +0x21,0xa3,0xfb,0x33,0x34,0x5b,0x56,0xff,0x00,0xc9,0x98,0xbf,0xb3,0x33,0x35,0xb5, +0x7f,0xc5,0x9f,0x39,0xc7,0xfb,0x4d,0xf8,0xf1,0x17,0x07,0x52,0x85,0xcf,0xab,0x5a, +0xa6,0x7f,0x95,0x58,0x4f,0xda,0x9b,0xc7,0x49,0x8f,0xf4,0x9b,0x36,0xc7,0xad,0xaa, +0xf3,0xfa,0xd7,0xbe,0xbf,0xec,0xd5,0xe0,0x86,0xc9,0x16,0x32,0xaf,0xd2,0x43,0x50, +0x3f,0xec,0xc5,0xe0,0xa6,0xe9,0x6f,0x3a,0xff,0x00,0xdb,0x4a,0x5f,0xd9,0xf9,0xb2, +0xda,0xaf,0xfe,0x4c,0xc3,0xfb,0x3f,0x36,0x5b,0x57,0xfc,0x59,0xe2,0x0b,0xfb,0x57, +0x78,0xdd,0x7a,0x9d,0x39,0xbe,0xb6,0xc7,0xfa,0x35,0x3d,0x7f,0x6b,0x0f,0x1a,0x82, +0x32,0x9a,0x61,0xff,0x00,0xb7,0x66,0xff,0x00,0xe2,0xeb,0xd9,0xdb,0xf6,0x5a,0xf0, +0x63,0x0e,0x12,0xe5,0x7f,0xed,0xa5,0x42,0xff,0x00,0xb2,0xa7,0x83,0xcf,0x47,0xbb, +0x5f,0xfb,0x69,0x43,0xc1,0xe7,0x0b,0x6a,0x9f,0xf9,0x30,0x7d,0x4b,0x37,0x5b,0x56, +0xfc,0x4f,0x23,0x5f,0xda,0xd7,0xc6,0x43,0xad,0xbe,0x96,0xdf,0xf6,0xc1,0xff,0x00, +0xf8,0xba,0x91,0x3f,0x6b,0x8f,0x16,0x82,0x37,0x59,0x69,0x6d,0xeb,0xfb,0xa7,0xff, +0x00,0xe2,0xeb,0xd4,0x24,0xfd,0x93,0xbc,0x2a,0xd8,0xdb,0x75,0x78,0xbf,0xf0,0x20, +0x6a,0x07,0xfd,0x92,0x3c,0x34,0x73,0x8b,0xfb,0xb5,0xf4,0xe9,0x4b,0xea,0xb9,0xca, +0xfb,0x7f,0x88,0x7d,0x53,0x39,0x5b,0x55,0xfc,0x4f,0x3d,0x8b,0xf6,0xbe,0xf1,0x32, +0xe7,0xcc,0xd2,0xb4,0xc7,0xf4,0xc2,0xc8,0x3f,0xf6,0x6a,0xb0,0x9f,0xb6,0x16,0xbc, +0x31,0xbb,0x43,0xd3,0x5b,0xd7,0x0d,0x20,0xfe,0xb5,0xda,0xc9,0xfb,0x22,0xe8,0x19, +0xf9,0x75,0x3b,0xa0,0x3d,0xd4,0x54,0x0f,0xfb,0x21,0x68,0xe4,0x7c,0xba,0xbd,0xcf, +0xe2,0x82,0x9f,0xb1,0xce,0x97,0xda,0xfc,0x50,0x7b,0x0c,0xe9,0x7d,0xbf,0xc8,0xe6, +0x07,0xed,0x89,0xaa,0xf7,0xf0,0xf5,0x99,0xfa,0x4e,0xdf,0xe1,0x4f,0x5f,0xdb,0x1b, +0x50,0x1f,0x7b,0xc3,0x96,0xa7,0xe9,0x72,0xdf,0xfc,0x4d,0x6f,0x3f,0xec,0x7f,0xa6, +0x1c,0xed,0xd6,0xe7,0x5f,0xac,0x60,0xd4,0x12,0x7e,0xc7,0xb6,0x99,0x1b,0x35,0xd9, +0x31,0xef,0x17,0xff,0x00,0x5e,0x8e,0x4c,0xed,0x75,0xfc,0x85,0xec,0xf3,0xb5,0xf6, +0xbf,0x23,0x35,0x7f,0x6c,0x7b,0xc3,0xf7,0xbc,0x35,0x01,0x1e,0xd7,0x67,0xff,0x00, +0x89,0xa9,0x93,0xf6,0xc8,0x70,0x06,0xef,0x0b,0xa9,0x3d,0xf1,0x7b,0xff,0x00,0xd8, +0x54,0xaf,0xfb,0x1e,0xa0,0x5f,0x97,0x5d,0xe7,0xde,0x2a,0x85,0xbf,0x63,0xe9,0x32, +0x76,0xeb,0xa9,0xed,0x98,0x8d,0x2f,0xf8,0x5b,0x5d,0xff,0x00,0xf2,0x50,0xb6,0x76, +0xba,0xfe,0x44,0xeb,0xfb,0x64,0xc4,0x7e,0xf7,0x85,0xdf,0x1e,0xd7,0xa3,0xff,0x00, +0x8d,0xd4,0xcb,0xfb,0x63,0xda,0x63,0xe6,0xf0,0xcc,0xc0,0xfb,0x5e,0x03,0xff,0x00, +0xb2,0x56,0x63,0xfe,0xc7,0xd7,0x7d,0xb5,0xc8,0x4f,0xd5,0x0d,0x40,0xff,0x00,0xb2, +0x06,0xa6,0x01,0xdb,0xad,0x5b,0x13,0xee,0x84,0x53,0xf6,0x99,0xda,0xe8,0xfe,0xe8, +0x87,0x3e,0x78,0xbf,0xa4,0x6f,0x27,0xed,0x8b,0xa7,0x13,0xcf,0x87,0x2e,0x40,0xff, +0x00,0xaf,0x95,0x3f,0xfb,0x2d,0x48,0x3f,0x6c,0x3d,0x27,0x1f,0x37,0x87,0xaf,0x01, +0xf6,0x9d,0x0f,0xf4,0xae,0x59,0xbf,0x64,0x2d,0x68,0x1e,0x35,0x6b,0x53,0xef,0x83, +0x50,0x37,0xec,0x8d,0xe2,0x11,0xf7,0x75,0x0b,0x46,0xfc,0x4d,0x4f,0xb7,0xce,0x97, +0xd9,0x7f,0x72,0x17,0xb5,0xce,0xd7,0xd9,0xfc,0x11,0xdd,0x45,0xfb,0x5f,0xf8,0x74, +0xb7,0xcf,0xa3,0x6a,0x4a,0x3d,0x54,0xc6,0x7f,0xf6,0x6a,0xb3,0x1f,0xed,0x75,0xe1, +0x36,0x5c,0xbe,0x9b,0xab,0x2b,0x7a,0x08,0xe3,0x3f,0xfb,0x3d,0x79,0xb4,0x9f,0xb2, +0x67,0x89,0x54,0x1c,0x5e,0x5a,0x13,0xfe,0xf1,0xa8,0x1b,0xf6,0x50,0xf1,0x5f,0x69, +0xad,0x1b,0xfe,0x07,0x42,0xc5,0x67,0x0b,0xec,0x3f,0xb9,0x0f,0xeb,0x39,0xd2,0xfb, +0x1f,0x82,0x3d,0x54,0x7e,0xd6,0xfe,0x0e,0xce,0x0d,0x96,0xae,0x07,0xaf,0x93,0x1f, +0xff,0x00,0x17,0x4f,0x1f,0xb5,0xaf,0x83,0x31,0xff,0x00,0x1e,0xba,0xb7,0xfd,0xf8, +0x4f,0xfe,0x2e,0xbc,0x85,0xbf,0x65,0x4f,0x18,0x0f,0xbb,0xf6,0x46,0xff,0x00,0xb6, +0xb5,0x03,0xfe,0xcb,0xbe,0x34,0x4c,0xe2,0x0b,0x76,0x03,0xd2,0x51,0x43,0xc7,0x66, +0xeb,0x7a,0x7f,0xf9,0x28,0x7d,0x73,0x39,0x5f,0xf2,0xeb,0xf0,0x3d,0xa9,0x7f,0x6a, +0xff,0x00,0x05,0x36,0x3f,0x75,0xa9,0xaf,0xd6,0xdd,0x7f,0xf8,0xaa,0x91,0x7f,0x6a, +0xaf,0x04,0x11,0xc9,0xd4,0x53,0xeb,0x6c,0x3f,0xf8,0xaa,0xf0,0xb6,0xfd,0x99,0x7c, +0x6c,0xbd,0x2c,0xe2,0x3f,0x49,0x45,0x42,0xff,0x00,0xb3,0x67,0x8d,0xd4,0x7f,0xc8, +0x3d,0x4f,0xd1,0xc5,0x2f,0xed,0x1c,0xd5,0x7f,0xcb,0xbf,0xfc,0x95,0x8b,0xeb,0xf9, +0xba,0xff,0x00,0x97,0x5f,0x87,0xfc,0x13,0xe8,0x48,0xbf,0x69,0xef,0x01,0xc8,0xe0, +0x1b,0xeb,0xa8,0xc1,0xfe,0x26,0xb5,0x6c,0x0f,0xca,0xad,0x2f,0xed,0x27,0xf0,0xfd, +0x81,0x3f,0xdb,0x2e,0xbe,0xc6,0xd6,0x5f,0xfe,0x26,0xbe,0x6b,0x6f,0xd9,0xd7,0xc7, +0x0a,0x78,0xd2,0xc9,0xc7,0xa3,0x8a,0x81,0xff,0x00,0x67,0xef,0x1c,0xa9,0xff,0x00, +0x90,0x34,0x87,0xe8,0xc0,0xff,0x00,0x5a,0x7f,0xda,0x99,0x9c,0x77,0xa5,0xff,0x00, +0x92,0xb0,0xfe,0xd2,0xcd,0x56,0xf4,0x7f,0x06,0x7d,0x42,0x3f,0x68,0x9f,0x87,0xcd, +0xff,0x00,0x33,0x02,0x8f,0xad,0xb4,0xdf,0xfc,0x45,0x38,0x7e,0xd0,0x9f,0x0f,0xcf, +0x4f,0x11,0x47,0xff,0x00,0x80,0xf2,0x8f,0xfd,0x92,0xbe,0x55,0x6f,0x81,0x3e,0x37, +0x43,0xce,0x89,0x37,0xe1,0x51,0x3f,0xc1,0x4f,0x1a,0x27,0x5d,0x0e,0xe7,0x8f,0x6a, +0x6f,0x38,0xcc,0x16,0xf4,0xbf,0xf2,0x59,0x07,0xf6,0xae,0x64,0xb7,0xa1,0xf8,0x3f, +0xf3,0x3e,0xb2,0x1f,0x1f,0xfc,0x00,0xd8,0xff,0x00,0x8a,0x8e,0x1e,0x7d,0x62,0x93, +0xff,0x00,0x89,0xa9,0xd3,0xe3,0xaf,0x80,0xdc,0x64,0x78,0x92,0xd4,0x7d,0x43,0x8f, +0xe9,0x5f,0x1f,0xbf,0xc1,0xff,0x00,0x18,0xa0,0xe7,0x42,0xba,0xe7,0xfd,0x9a,0x85, +0xbe,0x14,0xf8,0xb9,0x3a,0xe8,0x77,0x7f,0xf7,0xc5,0x2f,0xed,0xac,0x72,0xff,0x00, +0x97,0x4b,0xee,0x62,0xfe,0xd8,0xc7,0xad,0xe8,0x7e,0x0c,0xfb,0x3d,0x3e,0x32,0xf8, +0x21,0xc0,0xc7,0x89,0xb4,0xfe,0x7d,0x65,0xc5,0x48,0x9f,0x17,0x7c,0x14,0xf9,0xc7, +0x89,0xf4,0xce,0x3d,0x6e,0x14,0x57,0xc4,0xef,0xf0,0xd3,0xc5,0x51,0x9f,0x9b,0x44, +0xbd,0x1f,0xf6,0xc8,0xd4,0x0d,0xe0,0x0f,0x12,0x27,0x5d,0x1e,0xf0,0x7f,0xdb,0x23, +0x47,0xf6,0xee,0x29,0x6f,0x49,0x7e,0x23,0xfe,0xdb,0xc6,0x2d,0xe8,0x7e,0x67,0xdc, +0x63,0xe2,0xbf,0x83,0x4f,0x4f,0x13,0xe9,0x7f,0xf8,0x16,0x9f,0xe3,0x52,0x2f,0xc4, +0xef,0x09,0x36,0x71,0xe2,0x5d,0x2f,0x8f,0xfa,0x7b,0x4f,0xf1,0xaf,0x85,0x1b,0xc1, +0x5e,0x20,0x5e,0xba,0x55,0xd0,0xff,0x00,0xb6,0x46,0xa2,0x6f,0x0a,0x6b,0x69,0xd7, +0x4c,0xba,0x1f,0xf6,0xc8,0xd1,0xfd,0xbf,0x89,0xeb,0x49,0x7e,0x22,0xfe,0xdd,0xc5, +0x2d,0xe8,0x7e,0x67,0xde,0xc9,0xf1,0x07,0xc2,0xf2,0x80,0x57,0xc4,0x3a,0x59,0x07, +0xa7,0xfa,0x64,0x7f,0xe3,0x56,0x13,0xc6,0x5a,0x04,0x9f,0x77,0x5a,0xd3,0x9b,0x1e, +0x97,0x49,0xfe,0x35,0xf9,0xfa,0xde,0x1c,0xd5,0xd7,0xae,0x9f,0x72,0x3f,0xed,0x91, +0xa8,0xce,0x89,0xa9,0x27,0x06,0xca,0xe0,0x7d,0x63,0x34,0xd7,0x10,0xd6,0x5b,0xd3, +0x5f,0x8f,0xf9,0x0f,0xfb,0x7e,0xbf,0x5a,0x1f,0x99,0xfa,0x1a,0x9e,0x23,0xd2,0x64, +0x50,0x57,0x54,0xb3,0x60,0x7a,0x62,0xe1,0x3f,0xc6,0x9f,0xfd,0xbb,0xa6,0x9e,0x9a, +0x8d,0xa9,0xff,0x00,0xb6,0xeb,0xfe,0x35,0xf9,0xd8,0x74,0xbb,0xe1,0xd6,0xd6,0x61, +0xff,0x00,0x00,0x34,0xc3,0x61,0x78,0xbd,0x60,0x90,0x7d,0x54,0xd3,0xff,0x00,0x58, +0xe7,0xd6,0x97,0xe3,0xff,0x00,0x00,0x7f,0xeb,0x0d,0x45,0xff,0x00,0x2e,0x7f,0x1f, +0xf8,0x07,0xe8,0xca,0x6a,0xf6,0x2e,0x32,0x2f,0x2d,0xd8,0x7a,0x89,0x54,0xff,0x00, +0x5a,0x78,0xd4,0x6d,0x49,0xe2,0xe6,0x03,0xf4,0x90,0x7f,0x8d,0x7e,0x71,0x7d,0x9e, +0xed,0x7f,0xe5,0x9c,0xa3,0xf0,0x34,0xb9,0xbb,0x43,0xff,0x00,0x2d,0x47,0xe7,0x47, +0xfa,0xc7,0x2f,0xf9,0xf5,0xf8,0xff,0x00,0xc0,0x0f,0xf5,0x8a,0x56,0xd6,0x8b,0xfb, +0xff,0x00,0xe0,0x1f,0xa4,0x0b,0x75,0x13,0x8c,0xac,0xa8,0xc3,0xd4,0x30,0x34,0xf1, +0x20,0x3d,0xc1,0xfc,0x6b,0xf3,0x78,0x5e,0x5e,0xa7,0x49,0x66,0x51,0xec,0xcd,0x53, +0x2e,0xb5,0xaa,0xc6,0xc0,0xad,0xf5,0xda,0x9f,0x51,0x33,0x83,0xfc,0xea,0xd7,0x11, +0xf7,0xa5,0xf8,0xff,0x00,0xc0,0x29,0x71,0x1a,0xeb,0x49,0xfd,0xff,0x00,0xf0,0x0f, +0xd1,0xb0,0xc3,0xd6,0x97,0x75,0x7e,0x74,0x0f,0x13,0x6b,0x4a,0x30,0x35,0x4b,0xe5, +0xfa,0x5c,0x3f,0xf8,0xd2,0x8f,0x16,0x6b,0x8a,0x72,0x35,0x7d,0x40,0x1f,0xfa,0xfa, +0x93,0xfc,0x6a,0xff,0x00,0xd6,0x38,0xff,0x00,0xcf,0xbf,0xc7,0xfe,0x00,0xff,0x00, +0xd6,0x48,0x75,0xa4,0xfe,0xf3,0xf4,0x58,0x36,0x69,0x6b,0xf3,0xb1,0x7c,0x6b,0xe2, +0x04,0x04,0x0d,0x6b,0x51,0x1f,0xf6,0xf5,0x27,0xf8,0xd5,0x88,0xfe,0x23,0x78,0xa2, +0x10,0x36,0x78,0x83,0x54,0x5c,0x70,0x31,0x79,0x27,0xf8,0xd3,0x5c,0x45,0x0e,0xb4, +0xdf,0xde,0x52,0xe2,0x4a,0x5d,0x69,0xb3,0xf4,0x32,0x8a,0xfc,0xf9,0x5f,0x8a,0x5e, +0x2e,0x41,0x81,0xe2,0x4d,0x54,0x0f,0xfa,0xfb,0x73,0xfd,0x6a,0xc2,0x7c,0x62,0xf1, +0xaa,0x63,0x1e,0x26,0xd4,0xb8,0xe9,0xfb,0xf2,0x6a,0xd7,0x11,0x52,0xeb,0x4d,0xfe, +0x05,0x7f,0xac,0x94,0x3a,0xc1,0xfe,0x07,0xdf,0xd4,0x57,0xc0,0xa3,0xe3,0x57,0x8d, +0xd7,0xfe,0x66,0x6d,0x43,0xf1,0x97,0xff,0x00,0xad,0x4f,0x4f,0x8d,0xfe,0x38,0x5c, +0x7f,0xc5,0x4b,0x7c,0x71,0xea,0xe0,0xff,0x00,0x4a,0xaf,0xf5,0x8a,0x87,0xf2,0x3f, +0xc0,0xaf,0xf5,0x8f,0x0d,0xfc,0x8f,0xf0,0x3e,0xf7,0xa2,0xbe,0x0c,0x5f,0x8e,0xde, +0x3a,0x5e,0x9e,0x24,0xbc,0xfc,0x76,0x9f,0xe9,0x56,0x53,0xf6,0x84,0xf1,0xea,0x63, +0xfe,0x2a,0x19,0x8e,0x3d,0x61,0x8c,0xff,0x00,0xec,0xb4,0xd7,0x11,0x61,0xdf,0xd8, +0x97,0xe1,0xfe,0x65,0x2e,0x22,0xc2,0xf5,0x8c,0xbf,0x0f,0xf3,0x3e,0xea,0xa2,0xbe, +0x1c,0x8b,0xf6,0x8e,0xf1,0xf4,0x44,0x9f,0xed,0xc2,0xd9,0xfe,0xf5,0xbc,0x47,0xff, +0x00,0x65,0xab,0xf6,0x3f,0xb5,0x17,0x8e,0xed,0x26,0x57,0x96,0xee,0xd2,0xed,0x07, +0x54,0x9a,0xd5,0x40,0x3f,0xf7,0xce,0x0d,0x68,0xb8,0x83,0x0a,0xf7,0x4f,0xf0,0xff, +0x00,0x32,0xd7,0x10,0xe0,0xde,0xe9,0xaf,0x97,0xfc,0x13,0xed,0x4a,0x2b,0xe6,0x2f, +0x0c,0xfe,0xd8,0x52,0x06,0x58,0xfc,0x41,0xa1,0x86,0x5e,0xf3,0xe9,0xcf,0x83,0xed, +0xf2,0x39,0xff,0x00,0xd9,0xab,0xda,0xbc,0x15,0xf1,0x6f,0xc2,0xfe,0x3f,0x5d,0xba, +0x46,0xa9,0x1c,0x97,0x40,0x65,0xad,0x26,0xfd,0xdc,0xcb,0xff,0x00,0x01,0x3d,0x7e, +0xa3,0x22,0xbd,0x6c,0x3e,0x63,0x86,0xc4,0xe9,0x4e,0x7a,0xf6,0xd9,0x9e,0xa6,0x1f, +0x32,0xc2,0xe2,0x9d,0xa9,0xcd,0x5f,0xb6,0xcc,0xec,0xe8,0xa6,0xa9,0xcd,0x3a,0xbd, +0x13,0xd3,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x42, +0x69,0x6a,0xbd,0xe5,0xd4,0x56,0x56,0xd3,0x5c,0x4f,0x22,0xc5,0x04,0x48,0x5d,0xdd, +0xce,0x02,0xa8,0x19,0x24,0x9a,0x4f,0x45,0x71,0x37,0x65,0x76,0x78,0x6f,0xed,0x35, +0xf1,0x65,0xfc,0x33,0xa6,0x2f,0x86,0xb4,0xb9,0xb6,0x6a,0x57,0xd1,0xee,0xb8,0x95, +0x1b,0x0d,0x0c,0x3d,0x30,0x3d,0x0b,0x72,0x3e,0x80,0xfa,0x8a,0xe4,0xbf,0x64,0xbf, +0x08,0xfd,0xa7,0x55,0xbe,0xd7,0x66,0x43,0xb6,0xdd,0x7c,0xa8,0x8f,0x6d,0xc7,0xad, +0x78,0x9f,0x8c,0xbc,0x4d,0x71,0xe3,0x9f,0x17,0xea,0x3a,0xbc,0xdb,0x8b,0xde,0x4e, +0x5a,0x34,0x3d,0x51,0x33,0x84,0x5f,0xc0,0x00,0x2b,0xed,0x7f,0x82,0x9e,0x13,0x1e, +0x11,0xf8,0x7d,0xa6,0xdb,0x15,0xdb,0x3c,0xa9,0xe7,0xcb,0x91,0x83,0xb9,0xb9,0xaf, +0x89,0xc3,0x4e,0x59,0x96,0x64,0xea,0xbf,0x86,0x1b,0x7e,0x9f,0xe6,0x7c,0x56,0x0a, +0xa4,0xb3,0x3c,0xc1,0xd7,0x97,0xc3,0x0d,0xbf,0x4f,0xf3,0x3b,0xb0,0x31,0x4b,0x45, +0x15,0xf6,0xe7,0xdb,0x09,0x4b,0x45,0x14,0x00,0x53,0x43,0x83,0xd2,0x9d,0x5e,0x0f, +0xf1,0xcb,0xf6,0xdc,0xf8,0x3b,0xfb,0x3e,0x5c,0xc9,0x61,0xe2,0xaf,0x16,0xc2,0xfa, +0xda,0x02,0x7f,0xb1,0xf4,0xc4,0x6b,0xbb,0xa0,0x47,0x66,0x54,0xc8,0x8c,0x9e,0xde, +0x61,0x5c,0xd0,0x07,0xba,0x89,0x01,0x6d,0xbc,0xe7,0xdc,0x1a,0x7d,0x7e,0x71,0xeb, +0xdf,0xf0,0x5a,0xdf,0x00,0x5b,0xb3,0x0d,0x1b,0xe1,0xf7,0x89,0x2f,0x80,0xe8,0xd7, +0xd3,0xdb,0xdb,0xe7,0xf0,0x56,0x92,0xbe,0x9f,0xfd,0x94,0x7f,0x6a,0xb8,0xbf,0x69, +0x8f,0x85,0xfa,0xaf,0x8f,0x2e,0x7c,0x36,0xfe,0x0b,0xd0,0xac,0xae,0x64,0xb7,0x59, +0xef,0xef,0x92,0x44,0x91,0x63,0x40,0xd2,0xca,0x5b,0x6a,0x85,0x45,0xce,0x32,0x7d, +0x1b,0xa6,0x28,0x11,0xef,0xb4,0x57,0x17,0x6d,0xf1,0xb3,0xe1,0xe5,0xeb,0x2a,0xdb, +0xf8,0xf3,0xc3,0x33,0xb3,0x1c,0x05,0x8b,0x58,0xb7,0x62,0x4f,0xe0,0xf5,0xd9,0x83, +0x9e,0x94,0x0c,0x5a,0x2b,0x33,0x5f,0xf1,0x1e,0x9f,0xe1,0x7d,0x3d,0xaf,0xb5,0x3b, +0x91,0x6b,0x6a,0xac,0x14,0xb9,0x52,0xdc,0x93,0x80,0x30,0x01,0x35,0x81,0x17,0xc5, +0xff,0x00,0x07,0xcd,0xd3,0x5d,0x80,0x7f,0xbe,0xae,0xbf,0xcc,0x57,0x34,0xf1,0x34, +0x69,0x4b,0x96,0xa4,0xd2,0x7e,0x6d,0x22,0x1c,0xe1,0x17,0x66,0xd2,0x3b,0x1a,0x31, +0x5c,0xcc,0x7f,0x12,0xfc,0x2b,0x26,0x31,0xe2,0x0b,0x01,0x9f,0xef,0x4e,0xa3,0xf9, +0xd4,0xc3,0xe2,0x0f,0x86,0x0f,0x4f,0x10,0xe9,0x9f,0xf8,0x16,0x9f,0xe3,0x49,0x62, +0xb0,0xef,0x6a,0x8b,0xef,0x42,0xf6,0x90,0xfe,0x64,0x74,0x34,0x56,0x12,0xf8,0xe7, +0xc3,0x8e,0x78,0xd7,0xf4,0xc3,0xff,0x00,0x6f,0x91,0xff,0x00,0x8d,0x58,0x8b,0xc5, +0x3a,0x34,0xe3,0xf7,0x7a,0xb5,0x8c,0x9f,0xee,0xdc,0x21,0xfe,0xb5,0xa2,0xad,0x4d, +0xed,0x25,0xf7,0x8f,0x9a,0x2f,0x66,0x6a,0xd1,0x55,0x13,0x55,0xb2,0x97,0x95,0xbb, +0x81,0xbf,0xdd,0x95,0x4f,0xf5,0xa9,0x96,0x78,0xa4,0xfb,0xb2,0x2b,0x7d,0x1a,0xaf, +0x9e,0x2f,0x66,0x55,0xd1,0x2d,0x14,0xdd,0xdd,0xc1,0xa5,0x07,0x35,0x43,0x16,0x8a, +0x28,0xa6,0x01,0x45,0x21,0xe9,0x49,0x9a,0x00,0x75,0x26,0x29,0x32,0x3d,0x69,0x73, +0x48,0x05,0xa4,0xc5,0x18,0xf7,0xa5,0xa6,0x02,0x62,0x96,0x8a,0x28,0x00,0xa2,0x8a, +0x28,0x01,0x29,0x68,0xa2,0x80,0x12,0x8c,0x52,0xd1,0x40,0x05,0x14,0x51,0x40,0x05, +0x26,0x29,0x68,0xa0,0x04,0xc5,0x18,0x1e,0x94,0xb4,0x50,0x02,0x6d,0x1e,0x82,0x93, +0xcb,0x53,0xfc,0x23,0xf2,0xa0,0x92,0x3f,0x87,0x3f,0x8d,0x28,0xcf,0x71,0x8a,0x00, +0x69,0x82,0x33,0xd6,0x35,0x3f,0x80,0xa6,0x9b,0x58,0x5b,0xac,0x48,0x7f,0xe0,0x22, +0xa5,0xa2,0x95,0x97,0x61,0x59,0x10,0x1b,0x1b,0x73,0xd6,0x08,0xff,0x00,0xef,0x91, +0x4d,0x3a,0x6d,0xa3,0x75,0xb6,0x84,0xfd,0x50,0x55,0x9a,0x29,0x72,0xc7,0xb0,0x59, +0x14,0x9b,0x46,0xb0,0x6e,0xb6,0x56,0xe7,0xfe,0xd9,0x8f,0xf0,0xa8,0xdb,0xc3,0xba, +0x5b,0x75,0xd3,0xed,0x8f,0xfd,0xb2,0x5f,0xf0,0xad,0x1a,0x29,0x7b,0x38,0x76,0x17, +0x2a,0xec,0x64,0xb7,0x85,0x74,0x76,0xeb,0xa6,0x5a,0x9f,0xfb,0x64,0xbf,0xe1,0x51, +0xb7,0x83,0x74,0x36,0xeb,0xa4,0xda,0x1f,0xac,0x23,0xfc,0x2b,0x6a,0x8a,0x9f,0x65, +0x4f,0xf9,0x57,0xdc,0x2e,0x48,0x76,0x30,0x1f,0xc0,0x9e,0x1e,0x93,0xef,0x68,0xd6, +0x67,0xfe,0xd8,0x8a,0x89,0xbe,0x1c,0xf8,0x65,0xba,0xe8,0x96,0x7f,0xf7,0xec,0x57, +0x49,0x45,0x4b,0xc3,0xd2,0x7b,0xc1,0x7d,0xc4,0xfb,0x28,0x3f,0xb2,0x8e,0x55,0xbe, +0x17,0xf8,0x55,0xfa,0xe8,0x96,0x9f,0xf7,0xc5,0x42,0xdf,0x09,0x3c,0x22,0xdd,0x74, +0x3b,0x5f,0xfb,0xe6,0xba,0xfa,0x5a,0x8f,0xaa,0xd0,0xfe,0x45,0xf7,0x21,0x7b,0x1a, +0x5f,0xca,0xbe,0xe3,0x89,0x7f,0x83,0x7e,0x0e,0x7e,0xba,0x1d,0xb7,0xe5,0x50,0x3f, +0xc0,0xff,0x00,0x05,0x3f,0xfc,0xc0,0xe0,0x1f,0x4c,0xd7,0x7b,0x45,0x4b,0xc1,0xe1, +0xdf,0xfc,0xbb,0x5f,0x72,0x27,0xea,0xf4,0x7f,0x91,0x7d,0xc7,0x9e,0x3f,0xc0,0x5f, +0x04,0xbf,0xfc,0xc1,0xa3,0x1f,0x46,0x35,0x0b,0xfe,0xcf,0x7e,0x09,0x7f,0xf9,0x85, +0x63,0xe8,0xe6,0xbd,0x23,0x34,0x64,0x7a,0xd4,0x7d,0x47,0x0b,0xff,0x00,0x3e,0xd7, +0xdc,0x88,0xfa,0xa5,0x0f,0xe4,0x5f,0x71,0xe6,0x0f,0xfb,0x39,0x78,0x25,0xff,0x00, +0xe6,0x1c,0xc3,0xe8,0xf5,0x0b,0xfe,0xcd,0x5e,0x09,0x7f,0xf9,0x72,0x90,0x7d,0x24, +0xaf,0x55,0xa2,0xa7,0xfb,0x3f,0x08,0xff,0x00,0xe5,0xda,0xfb,0x89,0xfa,0x96,0x19, +0xef,0x4d,0x7d,0xc7,0x92,0x3f,0xec,0xc5,0xe0,0xb6,0xe9,0x05,0xc2,0xff,0x00,0xdb, +0x4a,0x81,0xff,0x00,0x65,0xcf,0x07,0xb7,0x41,0x72,0xbf,0xf6,0xd2,0xbd,0x8e,0x8a, +0x9f,0xec,0xcc,0x1b,0xff,0x00,0x97,0x4b,0xee,0x27,0xea,0x18,0x57,0xff,0x00,0x2e, +0xd7,0xdc,0x78,0xb3,0xfe,0xca,0xbe,0x12,0x6e,0x92,0x5d,0x2f,0xfc,0x08,0x54,0x2f, +0xfb,0x27,0xf8,0x5d,0xba,0x5c,0xdd,0x0f,0xc4,0x57,0xb7,0xd1,0x51,0xfd,0x95,0x82, +0xff,0x00,0x9f,0x48,0x97,0x97,0x61,0x1f,0xfc,0xbb,0x47,0x84,0xbf,0xec,0x95,0xe1, +0xb6,0xe9,0x7d,0x76,0x3f,0x2a,0xa5,0x77,0xfb,0x24,0x69,0xd0,0x95,0x9f,0x4e,0xd6, +0x6e,0xed,0xae,0xe3,0x21,0xe2,0x90,0x60,0x15,0x61,0xd0,0x82,0x39,0x06,0xbe,0x83, +0xa4,0x3d,0x29,0x7f,0x64,0xe0,0xf7,0x54,0xed,0xf7,0x99,0xbc,0xaf,0x07,0x2f,0xf9, +0x76,0x8f,0x01,0xf0,0x97,0xc6,0x3d,0x4f,0xe1,0xff,0x00,0x89,0xd3,0xc2,0x5e,0x3e, +0xb9,0x59,0xa1,0x77,0x10,0xda,0x6b,0xa4,0x6d,0xcb,0x67,0x01,0x66,0xed,0xcf,0x1f, +0x3f,0xe7,0xeb,0x5e,0xfa,0x8c,0x18,0x70,0x72,0x3d,0x6b,0xe3,0x1f,0xda,0x88,0xa5, +0xee,0xbb,0x24,0x4c,0x01,0x05,0x88,0xc7,0xad,0x77,0x1f,0xb1,0xff,0x00,0xc6,0x49, +0xbc,0x47,0x65,0x79,0xe0,0x6d,0x66,0xe9,0xa6,0xd5,0xf4,0xa8,0x84,0xd6,0x53,0x4a, +0xd9,0x79,0xed,0x72,0x06,0x09,0xee,0x63,0x25,0x47,0xd1,0x97,0xd2,0xb9,0x70,0x18, +0xde,0x6a,0xd3,0xc3,0x4d,0xdf,0x95,0xe8,0xcf,0x23,0x07,0x98,0xfb,0x2c,0x6b,0xcb, +0xea,0xbb,0xaf,0xb2,0xdf,0xe4,0xff,0x00,0x43,0xe9,0x8a,0x29,0x9b,0xbd,0xff,0x00, +0x5a,0x2b,0xe8,0x8f,0xaa,0xe6,0x43,0xe8,0xa2,0x8a,0x45,0x05,0x14,0x51,0x40,0x05, +0x79,0x0f,0xed,0x3d,0xe2,0xdf,0xf8,0x46,0xfe,0x1a,0xdc,0x5a,0x45,0x26,0xcb,0xad, +0x55,0xc5,0xa2,0x60,0xf3,0xb3,0xac,0x9f,0xf8,0xe8,0x23,0xfe,0x05,0x5e,0xb8,0x49, +0xed,0x5f,0x1b,0x7e,0xd4,0xbe,0x30,0x3a,0xff,0x00,0xc4,0x4f,0xec,0xb8,0xdf,0x75, +0xae,0x93,0x10,0x8b,0x00,0x82,0x0c,0xad,0x86,0x73,0xf8,0x0d,0xa3,0xea,0x0d,0x78, +0xf9,0xb6,0x23,0xea,0xf8,0x59,0x35,0xbb,0xd1,0x7c,0xcf,0x13,0x38,0xc4,0xfd,0x5b, +0x07,0x26,0xb7,0x96,0x8b,0xe6,0x72,0x5f,0x06,0x7c,0x26,0x7c,0x5d,0xe3,0xed,0x32, +0xd3,0x6e,0xe8,0x52,0x41,0x2c,0xb9,0xfe,0xe8,0xe6,0xbe,0xf6,0x8d,0x04,0x68,0xa8, +0xa3,0x0a,0xa3,0x00,0x0f,0x4a,0xf9,0xd3,0xf6,0x49,0xf0,0x8f,0xd9,0xf4,0xfb,0xfd, +0x7a,0x68,0xfe,0x79,0x4f,0x93,0x13,0x1f,0x4e,0xf5,0xf4,0x60,0xae,0x3c,0x8b,0x0f, +0xec,0xb0,0xde,0xd1,0xef,0x2d,0x7e,0x5d,0x0c,0x32,0x2c,0x37,0xb0,0xc2,0x29,0x3d, +0xe5,0xa8,0xb4,0x51,0x45,0x7d,0x21,0xf4,0x41,0x48,0x4e,0x29,0x6b,0x95,0xf8,0xad, +0xe3,0x88,0x3e,0x19,0xfc,0x32,0xf1,0x5f,0x8b,0x6e,0x81,0x68,0x34,0x4d,0x2e,0xe7, +0x50,0x65,0x03,0x39,0xf2,0xa3,0x67,0xc7,0xe3,0x8a,0x00,0xfc,0xfb,0xff,0x00,0x82, +0x96,0x7f,0xc1,0x41,0x75,0x2f,0x01,0x6a,0xd7,0xbf,0x09,0xbe,0x1b,0x6a,0x06,0xcf, +0x59,0x8e,0x30,0x35,0xcd,0x72,0x03,0x87,0xb6,0xdc,0x33,0xf6,0x68,0x5b,0xb3,0xed, +0x20,0xb3,0x8f,0xbb,0xb8,0x01,0xce,0xec,0x7c,0x27,0xf0,0x53,0xf6,0x29,0xf8,0xcd, +0xfb,0x4a,0x59,0xcb,0xaf,0x78,0x6b,0xc3,0xb2,0x4d,0xa4,0xc9,0x21,0x27,0x5a,0xd5, +0xee,0x45,0xbc,0x33,0xbe,0x4e,0xe2,0xae,0xe7,0x32,0x1c,0x83,0x92,0xa0,0xe0,0xf5, +0x35,0xe5,0x9a,0x76,0xab,0x1f,0x8f,0xbe,0x29,0xda,0x6a,0x3e,0x2e,0xbf,0x2b,0x0e, +0xb3,0xac,0xa4,0xfa,0xb5,0xfb,0xb6,0xd2,0xa9,0x2c,0xe0,0xcf,0x21,0x3d,0xb0,0x19, +0x8f,0xb5,0x7f,0x40,0x9f,0x1c,0x3e,0x24,0xe8,0x3f,0xb3,0x97,0xec,0xbf,0xae,0xf8, +0x9b,0x43,0x5b,0x5b,0x7d,0x2b,0x46,0xd1,0x44,0x7a,0x34,0x36,0xa5,0x44,0x4c,0xcc, +0xa2,0x3b,0x61,0x1e,0x38,0x20,0xb3,0x27,0x4e,0xdc,0xd3,0x25,0x6a,0x7f,0x3e,0x1e, +0x2f,0xf0,0x4e,0xa1,0xe0,0xef,0x1d,0x6a,0xbe,0x13,0x9d,0xa1,0xbe,0xd5,0x74,0xeb, +0xe7,0xd3,0xa4,0xfb,0x03,0x99,0x63,0x92,0x64,0x7d,0x85,0x50,0xe0,0x6e,0xf9,0x81, +0x03,0x8e,0x71,0x5f,0xbd,0xbe,0x1c,0xf8,0x6b,0xa7,0x7e,0xce,0x7f,0xb0,0xcd,0xef, +0x86,0x2e,0x84,0x51,0xc7,0xa3,0x78,0x42,0xed,0xf5,0x07,0xc6,0x16,0x4b,0x86,0xb7, +0x91,0xe7,0x27,0xeb,0x23,0x30,0xfc,0xab,0xf2,0x6b,0xfe,0x09,0xd5,0xf0,0x92,0x7f, +0x8e,0x9f,0xb5,0xbf,0x87,0xae,0x75,0x24,0x6b,0xed,0x3f,0x45,0x95,0xfc,0x45,0xa9, +0xcb,0x29,0xfb,0xcd,0x11,0x06,0x32,0x4f,0x72,0xd3,0xb4,0x59,0xf5,0x19,0xaf,0xb2, +0xff,0x00,0xe0,0xac,0x1f,0xb6,0x06,0x8d,0xa5,0x78,0x12,0xe7,0xe0,0xdf,0x85,0xb5, +0x38,0x6f,0xf5,0xfd,0x52,0x44,0xfe,0xde,0x6b,0x67,0x0e,0xb6,0x56,0xc8,0x43,0x08, +0x19,0x81,0xe2,0x47,0x60,0x99,0x5e,0x48,0x50,0x72,0x06,0xe1,0x40,0x2d,0x35,0x3f, +0x2c,0xfe,0x17,0x78,0x72,0xe3,0xc6,0x1f,0x12,0xfc,0x27,0xa0,0xd9,0x0c,0xdd,0xea, +0x7a,0xb5,0xa5,0x9c,0x5c,0xe3,0xe6,0x92,0x64,0x51,0xfc,0xeb,0xfa,0x6e,0x8d,0x3c, +0xb4,0x55,0xeb,0x80,0x06,0x6b,0xf1,0x1f,0xfe,0x09,0x3f,0xf0,0x0e,0xe3,0xe2,0x67, +0xed,0x0b,0x17,0x8c,0xaf,0x2d,0x0b,0xf8,0x7b,0xc1,0xa9,0xf6,0xb6,0x92,0x45,0x3b, +0x1e,0xf1,0x81,0x10,0x20,0x3e,0xaa,0x73,0x27,0xb6,0xc1,0xeb,0x5f,0xb7,0x2c,0xc1, +0x14,0x92,0x70,0x00,0xcd,0x0c,0x16,0xc7,0x81,0xfe,0xd2,0x7e,0x22,0x12,0xdd,0x69, +0x9a,0x24,0x6d,0x91,0x18,0x37,0x52,0x8f,0x73,0x95,0x4f,0xd3,0x77,0xe6,0x2b,0xc4, +0xab,0x7b,0xc7,0x5e,0x20,0x3e,0x28,0xf1,0x6e,0xa7,0xa9,0x64,0x98,0xe5,0x98,0x88, +0xb3,0xd9,0x07,0x0b,0xfa,0x01,0x58,0x35,0xf8,0x96,0x67,0x89,0xfa,0xde,0x2e,0x75, +0x56,0xd7,0xb2,0xf4,0x5a,0x1f,0x29,0x88,0xa9,0xed,0x6a,0xb9,0x06,0x68,0xa2,0x8c, +0xd7,0x98,0x73,0x85,0x14,0x51,0x48,0x00,0x71,0x4e,0x49,0x5e,0x33,0x95,0x76,0x52, +0x3b,0x83,0x8a,0x6d,0x14,0xd3,0x6b,0x60,0xb9,0xb5,0xa6,0xf8,0xd7,0x5f,0xd2,0x0a, +0xfd,0x93,0x58,0xbd,0x84,0x2f,0x45,0x13,0x31,0x5f,0xc8,0xf1,0x5e,0x89,0xe1,0x6f, +0xda,0x2b,0x56,0xb0,0x91,0x22,0xd6,0xed,0xd3,0x51,0xb7,0xef,0x2c,0x2a,0x12,0x51, +0xf8,0x7d,0xd3,0xfa,0x7d,0x6b,0xc8,0x68,0xaf,0x43,0x0f,0x98,0xe2,0xb0,0xb2,0xbd, +0x2a,0x8f,0xf4,0xfb,0x8d,0xe1,0x5e,0xa5,0x37,0x78,0xc8,0xfb,0x57,0xc3,0x5e,0x28, +0xd3,0xbc,0x59,0xa6,0xa5,0xf6,0x9b,0x72,0xb7,0x10,0x31,0xc1,0xec,0xc8,0xdd,0xd5, +0x87,0x63,0x5a,0xd5,0xf2,0x47,0xc2,0x6f,0x18,0x4f,0xe1,0x2f,0x17,0xda,0x10,0xe7, +0xec,0x57,0x6e,0xb0,0x5c,0xc7,0x9e,0x08,0x27,0x01,0xbe,0xaa,0x4e,0x7f,0x3f,0x5a, +0xfa,0xd9,0x4e,0x46,0x6b,0xf5,0x3c,0xa7,0x31,0x59,0x8d,0x0e,0x76,0xad,0x25,0xa3, +0x3e,0x8b,0x0d,0x5f,0xdb,0xc2,0xfd,0x50,0x37,0x00,0xd7,0xcd,0x1f,0x15,0x3e,0x26, +0xeb,0x51,0x78,0xeb,0x51,0xb7,0xd2,0xf5,0x5b,0x9b,0x5b,0x4b,0x56,0x10,0x04,0x89, +0xf0,0xa5,0x94,0x7c,0xc7,0x1f,0xef,0x64,0x7e,0x15,0xf4,0x4e,0xbb,0xaa,0xc7,0xa1, +0xe8,0xd7,0xda,0x84,0xdc,0xc5,0x6b,0x0b,0xcc,0xc0,0x75,0x21,0x41,0x38,0xfd,0x2b, +0xe2,0x8b,0xbb,0xa9,0x2f,0x6e,0xa6,0xb8,0x95,0xb7,0xcb,0x33,0xb4,0x8e,0xc7,0xbb, +0x13,0x92,0x6b,0xc6,0xe2,0x5c,0x64,0xe8,0xd3,0xa7,0x4a,0x9c,0xac,0xdb,0xbe,0x9d, +0x8e,0x6c,0x7d,0x57,0x08,0xa8,0xc5,0xd8,0xea,0x13,0xe2,0xc7,0x8b,0xa3,0xe9,0xae, +0xdd,0x7e,0x3b,0x4f,0xf3,0x15,0x32,0x7c,0x64,0xf1,0x94,0x7d,0x35,0xb9,0x0f,0xfb, +0xd1,0x46,0x7f,0xf6,0x5a,0xe3,0x28,0xaf,0x82,0x58,0xec,0x52,0xda,0xac,0xbe,0xf6, +0x78,0x9e,0xda,0xa7,0xf3,0x3f,0xbc,0xef,0x13,0xe3,0x8f,0x8c,0xd3,0xfe,0x62,0xc1, +0xbf,0xde,0xb7,0x8b,0xff,0x00,0x89,0xab,0x09,0xf1,0xef,0xc6,0x0b,0xd6,0xf6,0x06, +0xfa,0xdb,0xaf,0xf8,0x57,0x9d,0xd1,0x5a,0x2c,0xcb,0x1a,0xb6,0xad,0x2f,0xbd,0x97, +0xf5,0x8a,0xbf,0xcc,0xcf,0x4a,0x5f,0xda,0x0b,0xc5,0xca,0x79,0x96,0xd1,0xff,0x00, +0xde,0xb7,0xff,0x00,0x03,0x53,0xa7,0xed,0x17,0xe2,0xa4,0xeb,0x16,0x9c,0xff,0x00, +0x58,0x1b,0xff,0x00,0x8b,0xaf,0x2e,0xa2,0xb4,0x59,0xb6,0x39,0x6d,0x59,0xfd,0xe3, +0x58,0x9a,0xcb,0xed,0x33,0xd6,0x23,0xfd,0xa4,0xbc,0x48,0xbf,0x7a,0xcb,0x4e,0x6f, +0xfb,0x66,0xe3,0xff,0x00,0x67,0xab,0x09,0xfb,0x4b,0x6b,0x60,0x7c,0xda,0x5d,0x8b, +0x1f,0x6d,0xe3,0xfa,0xd7,0x8f,0xd1,0x56,0xb3,0x9c,0x7a,0xff,0x00,0x97,0xac,0x7f, +0x5a,0xaf,0xfc,0xc7,0xb3,0x27,0xed,0x33,0xaa,0x0f,0xbd,0xa2,0xda,0xb7,0xd2,0x56, +0x1f,0xd2,0xa7,0x5f,0xda,0x6e,0xef,0xf8,0xb4,0x08,0x7f,0x0b,0xa3,0xff,0x00,0xc4, +0xd7,0x89,0x51,0xfa,0xd6,0xab,0x3c,0xcc,0x3a,0x55,0xfc,0x17,0xf9,0x14,0xb1,0x95, +0xff,0x00,0x98,0xfb,0x1b,0xe1,0xef,0x8b,0x26,0xf1,0xb7,0x86,0x61,0xd5,0xa5,0xb3, +0x16,0x42,0x67,0x75,0x48,0xc3,0xee,0xc8,0x52,0x57,0x39,0xc0,0xee,0x0d,0x74,0xb5, +0x89,0xe0,0xad,0x23,0xfb,0x03,0xc2,0x9a,0x56,0x9e,0x7e,0xf4,0x16,0xe8,0xaf,0xee, +0xd8,0xcb,0x1f,0xcf,0x35,0xb4,0x6b,0xf5,0xac,0x3f,0x3f,0xb1,0x87,0xb5,0x77,0x95, +0x95,0xfd,0x4f,0xa5,0x85,0xf9,0x17,0x36,0xe2,0xd2,0x13,0x8a,0xaf,0x7b,0x7f,0x6f, +0xa7,0x5a,0x49,0x73,0x75,0x3c,0x76,0xf6,0xf1,0x8d,0xcf,0x2c,0xac,0x15,0x54,0x7a, +0x92,0x6b,0xc7,0x3c,0x65,0xfb,0x45,0xdb,0xda,0xb3,0xdb,0x78,0x7a,0xdf,0xed,0x72, +0x0e,0x3e,0xd9,0x70,0x08,0x8f,0xea,0xab,0xd4,0xfe,0x38,0xfc,0x6b,0x0c,0x5e,0x3b, +0x0f,0x82,0x8f,0x35,0x69,0x5b,0xcb,0xaf,0xdc,0x4d,0x5a,0xd0,0xa4,0xaf,0x36,0x7b, +0x51,0x70,0xa3,0x24,0xe0,0x7a,0x9a,0xe5,0xf5,0x8f,0x8a,0x3e,0x16,0xd0,0xb7,0x0b, +0x9d,0x6a,0xd8,0xba,0x9c,0x18,0xe0,0x6f,0x39,0x81,0xf7,0x09,0x92,0x2b,0xe5,0xbf, +0x10,0xf8,0xe3,0x5d,0xf1,0x4c,0x8c,0xda,0x96,0xa5,0x34,0xe8,0x4e,0x7c,0xa0,0xdb, +0x63,0x1f,0x45,0x18,0x15,0x85,0xd2,0xbe,0x33,0x11,0xc5,0x2f,0x6c,0x3d,0x3f,0x9b, +0xff,0x00,0x25,0xfe,0x67,0x95,0x3c,0xc7,0xf9,0x23,0xf7,0x9f,0x4b,0xdf,0xfe,0xd1, +0x7e,0x19,0xb6,0x72,0xb0,0x45,0x7d,0x79,0xe8,0xd1,0xc4,0x15,0x7f,0xf1,0xe6,0x07, +0xf4,0xac,0xb9,0xbf,0x69,0x9d,0x31,0x4f,0xee,0x74,0x6b,0xb7,0x1f,0xed,0xc8,0xab, +0xfc,0xb3,0x5f,0x3e,0x51,0x5e,0x44,0xb8,0x8f,0x1f,0x2d,0x9a,0x5f,0x2f,0xf3,0x39, +0x5e,0x3a,0xb3,0xea,0x7b,0xfa,0xfe,0xd3,0x76,0x64,0xfc,0xda,0x14,0xe0,0x7b,0x4e, +0xa7,0xfa,0x55,0xb8,0xbf,0x69,0x6d,0x10,0xe3,0xcc,0xd2,0xf5,0x04,0xf5,0xda,0x23, +0x6f,0xfd,0x98,0x57,0xce,0xb4,0x54,0xae,0x21,0xcc,0x17,0xda,0x4f,0xe4,0x84,0xb1, +0xd5,0xfb,0x9f,0x53,0x58,0x7c,0x7b,0xf0,0x85,0xe8,0x4f,0x32,0xf2,0x6b,0x36,0x6f, +0xe1,0x9e,0xdd,0xb8,0xfa,0x95,0x04,0x7e,0xb5,0xd8,0xe9,0x3e,0x25,0xd2,0xb5,0xe0, +0x4e,0x9d,0xa9,0x5a,0xde,0xe0,0x64,0x88,0x25,0x56,0x23,0xea,0x07,0x4a,0xf8,0xa2, +0x9d,0x14,0xaf,0x04,0x8a,0xf1,0xbb,0x46,0xeb,0xca,0xb2,0x1c,0x11,0xf4,0x22,0xbd, +0x0a,0x3c,0x51,0x88,0x8b,0xfd,0xf4,0x13,0x5e,0x5a,0x3f,0xd4,0xde,0x19,0x8c,0xd7, +0xc4,0xae,0x7d,0xcf,0x9c,0x9e,0xb4,0xb5,0xf2,0xcf,0x84,0xfe,0x39,0x78,0x8b,0xc3, +0xae,0x91,0xdd,0x4d,0xfd,0xaf,0x68,0x3a,0xc7,0x72,0x7e,0x70,0x3d,0x9f,0xaf,0xe7, +0x9a,0xf7,0xbf,0x04,0x7c,0x49,0xd1,0xfc,0x75,0x6e,0x4d,0x94,0xde,0x55,0xda,0x0c, +0xc9,0x69,0x36,0x04,0x8b,0xee,0x3d,0x47,0xb8,0xaf,0xaf,0xc0,0xe7,0x18,0x5c,0x73, +0xe5,0x83,0xb4,0xbb,0x3f,0xd0,0xf4,0xe8,0xe2,0xa9,0xd6,0xd1,0x3b,0x33,0xac,0xa2, +0x90,0x1c,0x8a,0x5a,0xf7,0x0e,0xc0,0xa2,0x8a,0x28,0x00,0xa2,0x90,0x9c,0x57,0x3b, +0xe2,0x9f,0x88,0x1a,0x1f,0x83,0x93,0x3a,0x9d,0xfc,0x71,0x4a,0x46,0x44,0x09,0xf3, +0xc8,0xdf,0xf0,0x11,0xce,0x3d,0xcf,0x15,0x95,0x4a,0xb0,0xa5,0x1e,0x6a,0x92,0xb2, +0xf3,0x26,0x52,0x51,0x57,0x93,0x3a,0x3a,0x4c,0xd7,0x84,0x6b,0xdf,0xb4,0xb3,0x1d, +0xc9,0xa3,0xe9,0x20,0x0e,0xd2,0xde,0x3f,0x3f,0xf7,0xc2,0xff,0x00,0xf1,0x55,0xc3, +0xea,0x7f,0x1b,0x7c,0x5f,0xa9,0x13,0xff,0x00,0x13,0x31,0x68,0xa7,0xf8,0x6d,0xa2, +0x55,0xc7,0xe3,0x82,0x7f,0x5a,0xf9,0xca,0xfc,0x45,0x81,0xa5,0xa4,0x5b,0x97,0xa2, +0xff,0x00,0x33,0x82,0x78,0xea,0x31,0xd1,0x6a,0x7d,0x5d,0x9f,0xca,0x8d,0xc3,0xd6, +0xbe,0x30,0xba,0xf1,0xaf,0x88,0x2f,0x73,0xe7,0xeb,0x7a,0x84,0x80,0xf5,0x06,0xe5, +0xf1,0xf9,0x66,0xb3,0x1e,0xfa,0xe6,0x43,0x96,0xb8,0x95,0x89,0xee,0xce,0x4d,0x79, +0x92,0xe2,0xaa,0x6b,0xe1,0xa4,0xfe,0xff,0x00,0xf8,0x07,0x3b,0xcc,0xa3,0xd2,0x27, +0xdc,0x04,0x2b,0x1f,0x9b,0x69,0xfa,0xd3,0x86,0xd0,0x30,0x00,0xfc,0x2b,0xe1,0xbf, +0xb5,0xcf,0xff,0x00,0x3d,0xa4,0xff,0x00,0xbe,0x8d,0x58,0xb6,0xd7,0x35,0x2b,0x33, +0x9b,0x7d,0x42,0xea,0x03,0xeb,0x1c,0xcc,0xbf,0xc8,0xd4,0xae,0x2a,0x87,0x5a,0x3f, +0x8f,0xfc,0x01,0x7f,0x69,0x2e,0xb1,0xfc,0x4f,0xb6,0xb6,0xa9,0x3d,0x06,0x69,0xd9, +0xe3,0x8a,0xf8,0xe6,0xd3,0xe2,0x37,0x8a,0x2c,0xbf,0xd5,0x6b,0xd7,0xff,0x00,0x47, +0x9d,0x9c,0x7f,0xe3,0xd9,0xae,0x82,0xc3,0xe3,0xcf,0x8b,0xec,0x48,0xdf,0x75,0x05, +0xea,0x8e,0xd3,0xc0,0xbf,0xcd,0x71,0x5d,0x74,0xf8,0x9f,0x0b,0x2f,0x8e,0x2d,0x7d, +0xcc,0xda,0x39,0x85,0x37,0xba,0x68,0xfa,0xa2,0x90,0xf1,0x5e,0x27,0xe1,0x2f,0xda, +0x22,0x6d,0x5f,0x53,0xb3,0xd3,0xef,0xb4,0x61,0xe6,0xdc,0xca,0x90,0xac,0x96,0xb2, +0x7f,0x13,0x10,0x07,0xca,0xdf,0x5f,0x5a,0xf6,0xc1,0xc8,0x15,0xf4,0x78,0x4c,0x75, +0x0c,0x74,0x5c,0xa8,0x4a,0xf6,0x3b,0xa9,0x56,0x85,0x65,0x78,0x30,0x56,0x0e,0xa0, +0x8e,0x86,0x96,0x9a,0xab,0xb4,0x60,0x74,0xa7,0x57,0x79,0xb0,0x53,0x5c,0xe1,0x49, +0xf4,0x14,0xea,0x8a,0xe9,0xfc,0xbb,0x69,0x5b,0xd1,0x09,0xfd,0x29,0x3d,0x80,0xf8, +0x93,0xf6,0x80,0xb9,0xfb,0x47,0x8a,0xe4,0x5c,0xe7,0x04,0xd7,0x87,0xe8,0xfe,0x3c, +0x97,0xe1,0x5f,0xc5,0x4f,0x09,0x78,0xaa,0x10,0x0a,0x5a,0x5f,0x24,0x57,0x0a,0x4e, +0x03,0x41,0x27,0xee,0xe4,0x07,0xfe,0x02,0xc4,0x8f,0x70,0x3d,0x2b,0xd6,0xbe,0x33, +0x5c,0x79,0xde,0x2d,0xb8,0x39,0xce,0x33,0x5f,0x2e,0x7c,0x77,0xba,0x30,0xe8,0x72, +0xed,0x38,0x60,0xa4,0x8c,0x7a,0xd7,0xe7,0x18,0x29,0x37,0x8e,0x94,0x97,0x76,0x7e, +0x39,0x8f,0xa9,0x25,0x9a,0x53,0x9c,0x77,0xe7,0x47,0xec,0x77,0xdb,0x61,0xff,0x00, +0x9e,0xc9,0xf9,0xd1,0x5e,0x03,0xfd,0x91,0x7b,0xff,0x00,0x3f,0x72,0xff,0x00,0xdf, +0x46,0x8a,0xfd,0x0f,0x9d,0x9f,0xaf,0x73,0x79,0x1f,0x44,0xd1,0x45,0x15,0xa9,0xa8, +0x51,0x45,0x14,0x01,0x93,0xe2,0x9d,0x7a,0x1f,0x0b,0xf8,0x77,0x53,0xd5,0xae,0x48, +0xf2,0x6c,0xed,0xde,0x76,0x1e,0xbb,0x41,0x38,0xfc,0x4f,0x15,0xf9,0xe8,0xf3,0x5d, +0x78,0x97,0x5b,0x92,0x79,0x4b,0x4d,0x79,0x7d,0x39,0x76,0x3d,0x49,0x66,0x6c,0xff, +0x00,0x5a,0xfa,0x97,0xf6,0xb9,0xf1,0x6b,0x69,0x9e,0x11,0xb1,0xd0,0xa0,0x90,0x2c, +0xba,0x9c,0xdb,0xe5,0x51,0x8c,0xf9,0x51,0xf3,0xfa,0xb1,0x5f,0xc8,0xd7,0x8e,0x7e, +0xce,0xde,0x11,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0xc8,0xbb,0xad,0xac,0xff,0x00, +0x7e,0xfc,0x71,0xc7,0x41,0xf9,0xd7,0xc3,0xe7,0x33,0x78,0xac,0x54,0x30,0x90,0xfe, +0x9b,0xff,0x00,0x80,0x7c,0x26,0x6f,0x27,0x8c,0xc7,0x53,0xc2,0x47,0x65,0xbf,0xab, +0xff,0x00,0x80,0x7d,0x75,0xf0,0xeb,0xc3,0x51,0xf8,0x4f,0xc1,0xba,0x5e,0x9a,0x8b, +0xb5,0xa2,0x84,0x17,0xf7,0x62,0x32,0x6b,0xa4,0x03,0x14,0x2f,0x02,0x96,0xbe,0xd2, +0x9c,0x15,0x38,0x28,0x47,0x64,0x7d,0xc4,0x22,0xa1,0x15,0x15,0xb2,0x0a,0x28,0xa2, +0xb4,0x2c,0x2b,0x88,0xf8,0xe1,0xe0,0x17,0xf8,0xa9,0xf0,0x77,0xc6,0xbe,0x0f,0x8e, +0x5f,0x22,0x5d,0x73,0x48,0xba,0xb0,0x8e,0x53,0xfc,0x0f,0x24,0x4c,0xaa,0x7f,0x02, +0x45,0x76,0xf4,0x84,0x66,0x80,0x3f,0x97,0xbf,0x12,0xf8,0x6f,0x53,0xf0,0x77,0x88, +0x75,0x2d,0x0f,0x59,0xb3,0x97,0x4f,0xd5,0x74,0xeb,0x87,0xb5,0xba,0xb5,0x9d,0x70, +0xf1,0x48,0xa4,0x86,0x52,0x3e,0xa2,0xb4,0xa7,0xf8,0x99,0xe2,0xdb,0x9f,0x06,0x0f, +0x08,0x4d,0xe2,0x5d,0x56,0x6f,0x0b,0x09,0x56,0x71,0xa3,0x49,0x79,0x23,0x5a,0xac, +0x8b,0x9d,0xac,0x23,0x27,0x68,0x23,0x27,0xa0,0xef,0x5f,0xbd,0xff,0x00,0xb4,0x67, +0xec,0x2b,0xf0,0x9f,0xf6,0x99,0xb8,0x6d,0x4b,0xc4,0xba,0x3c,0xba,0x77,0x88,0xf6, +0x04,0x1a,0xee,0x8f,0x20,0x82,0xe9,0x80,0x18,0x01,0xf8,0x29,0x26,0x07,0x03,0x7a, +0x92,0x07,0x00,0x81,0x5f,0x2a,0x6a,0xbf,0xf0,0x44,0xcf,0x0c,0x49,0x76,0x0e,0x99, +0xf1,0x3b,0x56,0xb6,0xb5,0xef,0x1d,0xde,0x9b,0x14,0xcf,0x8f,0xf7,0x95,0x90,0x7e, +0x95,0x57,0x22,0xcf,0xa1,0xf9,0x77,0xe0,0xff,0x00,0x89,0x7e,0x2c,0xf8,0x7d,0x0e, +0xa7,0x17,0x86,0x3c,0x45,0xa9,0x78,0x7d,0x75,0x38,0x84,0x17,0x9f,0xd9,0xb7,0x2f, +0x03,0x4f,0x18,0x24,0x84,0x62,0xa4,0x12,0x32,0x4f,0x15,0xdb,0xfe,0xcf,0x3f,0xb3, +0x4f,0x8e,0xff,0x00,0x6a,0x2f,0x1c,0x47,0xa3,0x78,0x5a,0xc6,0x49,0x63,0xf3,0x03, +0x6a,0x1a,0xcd,0xc8,0x3f,0x66,0xb3,0x42,0x79,0x79,0x1f,0xb9,0xeb,0x85,0x19,0x66, +0x3d,0x2b,0xf5,0x27,0xe1,0xef,0xfc,0x11,0xd7,0xe0,0xf7,0x86,0x2f,0xe1,0xbb,0xf1, +0x1e,0xad,0xe2,0x0f,0x18,0x98,0xf9,0x36,0x97,0x17,0x0b,0x6b,0x6e,0xc7,0xdc,0x44, +0xa1,0xff,0x00,0x0d,0xf5,0xf6,0xa7,0x82,0x3c,0x03,0xe1,0xcf,0x86,0xbe,0x1e,0xb6, +0xd0,0x7c,0x2b,0xa2,0x58,0xf8,0x7f,0x47,0xb7,0x1f,0xbb,0xb3,0xd3,0xe0,0x58,0xa3, +0x07,0xb9,0x20,0x0e,0x58,0xf7,0x63,0xc9,0xee,0x69,0x5c,0x12,0xee,0x71,0xdf,0xb3, +0x97,0xec,0xfd,0xe1,0xbf,0xd9,0xab,0xe1,0x7e,0x9d,0xe0,0xcf,0x0d,0xc6,0x5a,0x38, +0x7f,0x7b,0x77,0x7d,0x22,0x81,0x35,0xed,0xc3,0x01,0xbe,0x67,0x3e,0xa7,0x00,0x01, +0xd8,0x00,0x07,0x02,0xb6,0x7e,0x30,0xf8,0x8c,0x78,0x6f,0xc0,0x7a,0x8c,0x8a,0xc1, +0x6e,0x2e,0x57,0xec,0xb0,0xf3,0x83,0xb9,0xf8,0x24,0x7b,0x85,0xdc,0x7f,0x0a,0xed, +0xeb,0xe7,0x8f,0xda,0x43,0xc4,0x5f,0x6b,0xd6,0x6c,0x34,0x68,0xdf,0x29,0x6b,0x19, +0x9e,0x50,0x3a,0x6f,0x6e,0x07,0xe4,0x07,0xfe,0x3d,0x5e,0x2e,0x6f,0x89,0xfa,0xae, +0x0e,0x73,0x5b,0xbd,0x17,0xab,0xd0,0xe7,0xc5,0x54,0xf6,0x74,0x9b,0x3c,0x6e,0x8a, +0x28,0xaf,0xc6,0x0f,0x95,0x0a,0xf6,0xff,0x00,0xd9,0xcf,0xc2,0x90,0x5e,0xc5,0xaa, +0xea,0xf7,0x76,0xf1,0x4e,0x99,0x16,0xd1,0x09,0x50,0x30,0xc8,0xf9,0x98,0xe0,0xfd, +0x57,0xf5,0xaf,0x10,0xaf,0xb0,0xbe,0x1a,0x78,0x74,0xf8,0x63,0xc1,0x1a,0x4d,0x8b, +0xa9,0x59,0xc4,0x5e,0x64,0xc0,0x8c,0x10,0xee,0x77,0x30,0xfc,0x09,0xc7,0xe1,0x5f, +0x57,0xc3,0xb8,0x5f,0x6f,0x8b,0xf6,0x92,0x5a,0x45,0x7e,0x2f,0x44,0x7a,0x58,0x0a, +0x7c,0xf5,0x79,0x9f,0x43,0x4e,0x4f,0x09,0xe8,0x93,0x0f,0xde,0x69,0x16,0x2f,0xf5, +0xb6,0x43,0xfd,0x2b,0x36,0xf3,0xe1,0x87,0x85,0x2f,0x91,0x96,0x4d,0x02,0xc5,0x41, +0xea,0x62,0x84,0x46,0x7f,0x35,0xc1,0xae,0x9c,0x0c,0x51,0x5f,0xa6,0xcb,0x0f,0x46, +0x5f,0x14,0x13,0xf9,0x23,0xe8,0x1d,0x38,0x3d,0xd2,0x3c,0x33,0xe2,0x17,0xc0,0x1b, +0x3b,0x6d,0x3a,0xe3,0x50,0xf0,0xf3,0xcb,0x1c,0x90,0xa1,0x76,0xb3,0x95,0xb7,0x87, +0x03,0x93,0xb5,0x8f,0x39,0xfa,0x93,0x9f,0x6a,0xf0,0x8a,0xfb,0x2b,0xc7,0x7e,0x21, +0x83,0xc3,0x3e,0x14,0xd4,0x6f,0xe6,0x20,0x6c,0x89,0x95,0x14,0xff,0x00,0x1b,0x91, +0x85,0x1f,0x99,0xaf,0x8d,0x40,0xc0,0x02,0xbf,0x34,0xe2,0x2c,0x2e,0x1b,0x0d,0x5a, +0x1e,0xc1,0x59,0xb5,0xaa,0x5f,0x81,0xe0,0x63,0xa9,0xc2,0x9c,0xd7,0x26,0x81,0x45, +0x14,0x57,0xc9,0x1e,0x61,0x6f,0x49,0xb5,0x7b,0xed,0x56,0xce,0xde,0x21,0x99,0x25, +0x99,0x23,0x5c,0x7a,0x96,0x00,0x7f,0x3a,0xfb,0x79,0x38,0x50,0x2b,0xe5,0xdf,0x81, +0x3e,0x13,0x6f,0x10,0x78,0xce,0x2b,0xc9,0x13,0x75,0xa6,0x9a,0x3c,0xf7,0x24,0x70, +0x64,0xe8,0x83,0xeb,0x9f,0x9b,0xfe,0x03,0x5f,0x51,0x81,0x5f,0xa5,0xf0,0xc5,0x09, +0x53,0xc3,0xce,0xab,0xfb,0x4f,0x4f,0x91,0xef,0xe5,0xd0,0x71,0x83,0x93,0xea,0x61, +0x78,0xdb,0xc3,0x4f,0xe2,0xff,0x00,0x0e,0x5d,0xe9,0x2b,0x78,0xf6,0x22,0xe3,0x68, +0x69,0x91,0x37,0x10,0x03,0x02,0x46,0x32,0x3a,0xe3,0x15,0xe4,0xf2,0x7e,0xcc,0x63, +0xf8,0x3c,0x40,0x7f,0xe0,0x56,0x9f,0xfd,0x9d,0x7b,0xb5,0x26,0x2b,0xe8,0x71,0x59, +0x6e,0x17,0x19,0x25,0x3a,0xf0,0xbb,0xf5,0x67,0x75,0x4c,0x3d,0x3a,0xae,0xf3,0x57, +0x3c,0x09,0xff,0x00,0x66,0x4b,0xaf,0xe0,0xd7,0xa1,0x3f,0xef,0x5b,0x11,0xff,0x00, +0xb3,0x55,0x77,0xfd,0x99,0xf5,0x31,0xf7,0x35,0xab,0x46,0xfa,0xc4,0xc2,0xbe,0x85, +0xc5,0x52,0xd6,0x35,0x38,0xb4,0x7d,0x2a,0xf2,0xfa,0x63,0x88,0xad,0xa2,0x79,0x58, +0xfb,0x28,0x26,0xbc,0xe9,0xe4,0x39,0x72,0x4d,0xb8,0x5b,0xe6,0xff,0x00,0xcc,0xc1, +0xe0,0xa8,0x2d,0x6c,0x7c,0x65,0xe2,0x0d,0x20,0xe8,0x1a,0xdd,0xee,0x9a,0xd7,0x11, +0xdc,0xbd,0xac,0x86,0x26,0x92,0x20,0x42,0x96,0x1d,0x40,0xcf,0xa1,0xc8,0xfc,0x2b, +0x3e,0xa6,0xbc,0xba,0x96,0xfe,0xee,0x6b,0x99,0xdb,0x7c,0xf3,0x3b,0x49,0x23,0x7a, +0xb1,0x39,0x27,0xf3,0x35,0x0d,0x7e,0x51,0x53,0x95,0xcd,0xb8,0x2d,0x2f,0xa1,0xf3, +0x4e,0xd7,0x76,0x0a,0x28,0xad,0x2f,0x0d,0xe9,0x2d,0xaf,0x78,0x83,0x4d,0xd3,0xd4, +0x13,0xf6,0x9b,0x84,0x8c,0xe3,0xb2,0x93,0xc9,0xfc,0xb3,0x4a,0x10,0x75,0x24,0xa0, +0xb7,0x6e,0xc1,0x15,0x76,0x91,0xd2,0xda,0xfc,0x17,0xf1,0x7d,0xe5,0xa4,0x37,0x30, +0xe9,0x41,0xe2,0x99,0x04,0x88,0x7c,0xf8,0xc1,0xc1,0x19,0x19,0x05,0xb8,0xa4,0x93, +0xe0,0xb7,0x8c,0xe3,0xeb,0xa2,0x39,0xff,0x00,0x76,0x68,0x8f,0xfe,0xcd,0x5f,0x59, +0x43,0x1a,0xc5,0x12,0x22,0x8d,0xaa,0xa0,0x00,0x07,0x61,0x4e,0xc7,0xbd,0x7e,0x99, +0xfe,0xac,0x61,0x1a,0x5e,0xf4,0xaf,0xea,0xbf,0xc8,0xf7,0xff,0x00,0xb3,0xa9,0xf7, +0x67,0xc8,0x12,0x7c,0x2a,0xf1,0x6c,0x47,0xe6,0xd0,0x6e,0xcf,0xfb,0xaa,0x0f,0xf2, +0x35,0xa1,0xe1,0x2f,0x86,0x1e,0x20,0x9b,0xc5,0x3a,0x52,0x5e,0xe8,0xb7,0x50,0x5a, +0x7d,0xa5,0x1a,0x67,0x9a,0x22,0x10,0x20,0x39,0x6c,0x9f,0x70,0x31,0x5f,0x57,0x8a, +0x31,0x44,0x38,0x67,0x0d,0x09,0xa9,0x29,0xbd,0x3d,0x06,0xb2,0xfa,0x69,0xde,0xec, +0x07,0x02,0xb1,0x7c,0x59,0xe2,0xed,0x3f,0xc1,0xba,0x3c,0x9a,0x86,0xa1,0x2e,0xc8, +0xc7,0xca,0x91,0xaf,0xdf,0x95,0xbb,0x2a,0x8e,0xe7,0xf9,0x75,0x35,0x7f,0x56,0xd5, +0x6d,0xb4,0x4d,0x36,0xe6,0xfa,0xf2,0x51,0x0d,0xb4,0x08,0x64,0x91,0xcf,0x60,0x3f, +0xcf,0x4a,0xf9,0x1b,0xe2,0x07,0x8e,0x6e,0xfc,0x77,0xae,0xbd,0xe4,0xe5,0xa3,0xb6, +0x8c,0x95,0xb6,0xb7,0xcf,0x11,0x27,0xf8,0x9e,0xe7,0xfa,0x62,0xbd,0x1c,0xdb,0x34, +0x8e,0x5d,0x4a,0xd1,0xd6,0x6f,0x65,0xfa,0xb3,0x7c,0x4e,0x21,0x50,0x8e,0x9b,0xb2, +0x6f,0x1e,0x7c,0x48,0xd5,0x3c,0x79,0x78,0x5a,0xe5,0xcd,0xbd,0x8a,0x1c,0xc5,0x67, +0x1b,0x1d,0x8b,0xe8,0x4f,0xf7,0x9b,0xdc,0xfe,0x18,0xae,0x4e,0x8a,0x2b,0xf2,0x5a, +0xd5,0xaa,0x62,0x26,0xea,0x55,0x77,0x6c,0xf9,0x99,0x4e,0x53,0x7c,0xd2,0x7a,0x85, +0x14,0x57,0x5d,0xe0,0x0f,0x86,0x9a,0xa7,0x8f,0xae,0x8f,0xd9,0x80,0xb7,0xb1,0x8d, +0xb1,0x2d,0xe4,0x83,0xe5,0x1f,0xec,0x81,0xfc,0x4d,0xed,0xf9,0xd3,0xa3,0x46,0xa6, +0x22,0x6a,0x9d,0x25,0x76,0xc7,0x08,0x4a,0xa4,0xb9,0x62,0xae,0xce,0x46,0xa7,0xb7, +0xb1,0xb9,0xbc,0xff,0x00,0x51,0x6f,0x2c,0xf8,0xeb,0xe5,0xa1,0x6f,0xe5,0x5f,0x55, +0xf8,0x5f,0xe0,0xe7,0x86,0x7c,0x35,0x12,0x11,0x60,0x97,0xf7,0x23,0x19,0x9e,0xf0, +0x09,0x0e,0x7d,0x40,0x3f,0x28,0xfc,0x05,0x76,0xc9,0x0a,0x46,0x00,0x55,0x0a,0x07, +0x18,0x03,0x02,0xbe,0xce,0x87,0x0b,0x54,0x94,0x6f,0x5a,0xa2,0x4f,0xb2,0x57,0xfc, +0x74,0x3d,0x58,0x65,0xd2,0x7f,0x1c,0xac,0x7c,0x3f,0x71,0xa7,0x5d,0xda,0x0c,0xcf, +0x6b,0x34,0x23,0xd6,0x48,0xca,0xff,0x00,0x31,0x55,0xeb,0xee,0x96,0x8d,0x5d,0x48, +0x60,0x08,0x3d,0x8d,0x71,0xde,0x29,0xf8,0x4d,0xe1,0xcf,0x15,0x42,0xfe,0x6d,0x8a, +0x59,0xdd,0x31,0x2c,0x2e,0xad,0x00,0x8d,0xf7,0x7a,0x9c,0x70,0xdf,0x88,0x34,0xeb, +0xf0,0xb5,0x48,0xc6,0xf4,0x6a,0x5d,0xf6,0x6a,0xc1,0x3c,0xb9,0xa5,0xee,0x4a,0xe7, +0xc8,0xf4,0x57,0x4b,0xe3,0xbf,0x02,0x5f,0xf8,0x0f,0x56,0xfb,0x25,0xd8,0xf3,0x61, +0x93,0x2d,0x05,0xca,0x8c,0x2c,0x8b,0xfd,0x08,0xee,0x3d,0xeb,0x9a,0xaf,0x89,0xab, +0x4a,0x74,0x26,0xe9,0xd4,0x56,0x68,0xf2,0x65,0x17,0x07,0xcb,0x2d,0xc2,0xac,0x69, +0xfa,0x85,0xce,0x95,0x7b,0x0d,0xdd,0x9c,0xef,0x6d,0x73,0x0b,0x6e,0x8e,0x58,0xdb, +0x05,0x4d,0x57,0xa2,0xb3,0x4d,0xc5,0xa7,0x1d,0x1a,0x25,0x3b,0x6a,0x8f,0xaa,0xfe, +0x13,0xfc,0x4d,0x8f,0xc7,0x9a,0x61,0x86,0xe3,0x6c,0x5a,0xb5,0xb2,0x8f,0x3a,0x31, +0xc0,0x91,0x7f,0xbe,0xbe,0xde,0xa3,0xb1,0xfa,0x8a,0xef,0xc5,0x7c,0x59,0xe1,0x3f, +0x12,0xdc,0x78,0x47,0xc4,0x16,0x7a,0xad,0xb1,0x25,0xe0,0x6f,0x99,0x33,0xfe,0xb1, +0x0f,0xde,0x53,0xf5,0x19,0xaf,0xb2,0xf4,0xeb,0xd8,0x75,0x2b,0x0b,0x7b,0xbb,0x77, +0x12,0x41,0x3c,0x6b,0x24,0x6c,0x3a,0x15,0x23,0x20,0xd7,0xeb,0x39,0x16,0x64,0xf1, +0xd4,0x5c,0x2a,0x3f,0x7e,0x3b,0xf9,0xae,0x8c,0xfa,0x5c,0x1d,0x77,0x5a,0x16,0x96, +0xe8,0xb3,0x48,0x4e,0xd1,0x93,0x41,0xaf,0x29,0xf8,0xf9,0xe3,0x99,0x3c,0x3f,0xa2, +0x45,0xa4,0xd9,0xc8,0x52,0xf3,0x50,0x07,0x7b,0x29,0xe5,0x22,0x1d,0x7f,0x3e,0x9f, +0x4c,0xd7,0xb5,0x8b,0xc4,0xc3,0x07,0x46,0x55,0xa7,0xb2,0x3a,0xea,0xd4,0x54,0xa0, +0xe6,0xfa,0x1c,0xff,0x00,0xc5,0x1f,0x8e,0xb2,0x2c,0xb3,0x69,0x5e,0x1b,0x94,0x2e, +0xdc,0xa4,0xba,0x82,0xf3,0xcf,0x71,0x1f,0xff,0x00,0x15,0xf9,0x7a,0xd7,0x87,0x4f, +0x3c,0xb7,0x33,0x3c,0xb3,0x48,0xf2,0xca,0xec,0x59,0x9d,0xd8,0xb3,0x31,0x3d,0x49, +0x26,0x99,0x45,0x7e,0x39,0x8d,0xc7,0xd7,0xc7,0xd4,0xe7,0xaa,0xfd,0x17,0x44,0x7c, +0xb5,0x5a,0xd3,0xac,0xef,0x20,0xa2,0x8a,0x2b,0xce,0x30,0x0a,0x2b,0xba,0xf0,0xbf, +0xc1,0x8f,0x13,0x78,0xa2,0x14,0xb8,0x4b,0x64,0xb0,0xb5,0x7e,0x56,0x5b,0xc6,0x29, +0xb8,0x7a,0x85,0x00,0x9f,0xd2,0xbb,0x28,0x3f,0x66,0x5b,0xb6,0x51,0xe7,0xeb,0xd1, +0x21,0xee,0x23,0xb6,0x2d,0xfa,0x96,0x15,0xeb,0xd1,0xca,0x31,0xd5,0xd7,0x34,0x29, +0xbb,0x79,0xe9,0xf9,0x9d,0x31,0xc3,0x56,0x9a,0xba,0x89,0xe2,0x74,0x57,0xb9,0x37, +0xec,0xc6,0xf8,0xf9,0x7c,0x42,0x3f,0x1b,0x4f,0xfe,0xce,0xaa,0x5c,0x7e,0xcc,0xfa, +0x8a,0xa9,0xf2,0x35,0xab,0x59,0x0f,0x61,0x24,0x2c,0x9f,0xc8,0x9a,0xdd,0xe4,0x59, +0x82,0xff,0x00,0x97,0x7f,0x8a,0xff,0x00,0x32,0xfe,0xa7,0x5d,0x7d,0x93,0xc6,0x28, +0xaf,0x47,0xd4,0xbe,0x01,0x78,0xb2,0xc4,0x33,0x43,0x05,0xb5,0xf2,0x8f,0xf9,0xe1, +0x38,0xcf,0xe4,0xc0,0x57,0x15,0xac,0x78,0x6b,0x56,0xf0,0xfb,0xed,0xd4,0xb4,0xdb, +0x9b,0x2e,0x70,0x1a,0x68,0xc8,0x53,0xf4,0x3d,0x0d,0x79,0xd5,0xb0,0x58,0x9c,0x3e, +0xb5,0x69,0xb5,0xf2,0x30,0x95,0x2a,0x90,0xf8,0xa3,0x63,0xac,0xf8,0x1d,0xa4,0x0d, +0x57,0xe2,0x25,0x83,0x32,0x6e,0x8e,0xd5,0x5e,0xe1,0xbd,0xb0,0x30,0xa7,0xfe,0xfa, +0x65,0xaf,0xab,0x07,0x4a,0xf0,0x8f,0xd9,0x9f,0x48,0x05,0xb5,0x9d,0x51,0x97,0xfb, +0x96,0xc8,0x7f,0xf1,0xe6,0xff,0x00,0xd9,0x6b,0xde,0x2b,0xf4,0xce,0x1d,0xa3,0xec, +0xb0,0x2a,0x5f,0xcc,0xdb,0xfd,0x3f,0x43,0xe8,0x30,0x30,0xe5,0xa3,0x7e,0xe1,0x45, +0x14,0x57,0xd3,0x9e,0x80,0x55,0x2d,0x66,0x4f,0x2b,0x4a,0xbb,0x6f,0x48,0xcd,0x5d, +0xac,0x7f,0x16,0xcb,0xe4,0x78,0x7a,0xf9,0xff,0x00,0xe9,0x99,0xac,0xea,0x3b,0x41, +0xb2,0x64,0xed,0x16,0xcf,0x83,0x7e,0x27,0xcf,0xe7,0x78,0xa6,0xf4,0x83,0x9c,0x12, +0x3f,0x5a,0xf9,0xc3,0xe2,0xbc,0x5f,0xda,0x1a,0xa6,0x95,0x65,0xb7,0x79,0xb8,0xbd, +0x82,0x1d,0x9d,0x77,0x6e,0x91,0x57,0x1f,0xad,0x7d,0x01,0xe3,0xa9,0xbc,0xdd,0x7a, +0xf5,0xb3,0x9f,0x9c,0x8a,0xf1,0x3b,0xa8,0x3f,0xb4,0xfe,0x36,0xfc,0x3b,0xb2,0xed, +0x37,0x88,0xf4,0xe4,0xfa,0x8f,0xb4,0xc7,0xfe,0x15,0xf9,0xde,0x54,0xb9,0xb1,0x2d, +0xf9,0xfe,0xa7,0xe3,0x33,0x5e,0xd7,0x36,0xa4,0xbf,0xbc,0x7e,0xb6,0xff,0x00,0x61, +0x5a,0xff,0x00,0xcf,0xba,0xfe,0x54,0x56,0xad,0x15,0xfa,0x2f,0x2a,0x3f,0x66,0xb2, +0x1f,0x45,0x14,0x55,0x94,0x14,0xd2,0x69,0xd5,0xc8,0xfc,0x55,0xf1,0x6f,0xfc,0x21, +0x1e,0x01,0xd6,0xb5,0x75,0x60,0xb3,0xc3,0x09,0x48,0x33,0x8f,0xf5,0xad,0xf2,0xa7, +0x07,0xaf,0x24,0x1c,0x7b,0x56,0x75,0x26,0xa9,0xc1,0xce,0x5b,0x23,0x3a,0x93,0x54, +0xa0,0xe7,0x2d,0x96,0xa7,0xc8,0x5f,0x1f,0xbc,0x5f,0xff,0x00,0x09,0x8f,0xc4,0xfd, +0x4e,0x48,0xa4,0x2f,0x69,0x64,0x45,0x94,0x18,0x24,0x8c,0x26,0x77,0x11,0xf5,0x62, +0xdf,0xa5,0x7b,0xc7,0xec,0xaf,0xe1,0x1f,0xec,0x7f,0x08,0x4d,0xab,0x4a,0x98,0x9a, +0xf9,0xfe,0x52,0x47,0x3b,0x05,0x7c,0xa9,0xa0,0x69,0x73,0xf8,0x83,0x5d,0xb5,0xb3, +0x8c,0x19,0x66,0xb9,0x98,0x2f,0xa9,0x24,0x9e,0x4d,0x7e,0x85,0x78,0x67,0x45,0x8b, +0xc3,0xfa,0x0d,0x8e,0x9f,0x12,0x85,0x4b,0x78,0x95,0x30,0x3d,0x40,0xe6,0xbe,0x27, +0x28,0x83,0xc5,0xe3,0x27,0x8a,0x9f,0x4f,0xcd,0xff,0x00,0xc0,0x3e,0x27,0x23,0x84, +0xb1,0x58,0x9a,0x98,0xc9,0xff,0x00,0x57,0x34,0xc5,0x2d,0x14,0x57,0xdd,0x1f,0x74, +0x14,0x51,0x45,0x00,0x32,0x49,0x16,0x18,0xd9,0xdd,0x82,0x22,0x82,0x59,0x98,0xe0, +0x01,0xea,0x6b,0xe0,0x7f,0xda,0x6b,0xfe,0x0a,0xd3,0xe0,0xaf,0x85,0x9a,0x95,0xe7, +0x87,0xbe,0x1e,0x69,0xc9,0xe3,0xcd,0x72,0xdd,0x8c,0x73,0x5f,0xb4,0xa6,0x3d,0x36, +0x17,0x07,0x95,0x0e,0x3e,0x69,0x88,0xff,0x00,0x67,0x0b,0xfe,0xd7,0x5a,0xe2,0xbf, +0xe0,0xad,0x3f,0xb5,0xed,0xe7,0x84,0xed,0x62,0xf8,0x37,0xe1,0x3b,0xf6,0xb6,0xbe, +0xd4,0x2d,0xc5,0xc7,0x88,0x6e,0xa0,0x7c,0x3c,0x76,0xef,0xfe,0xae,0xd8,0x10,0x78, +0x2e,0x3e,0x66,0xff,0x00,0x64,0xa8,0xe8,0xc6,0xbe,0x5a,0xfd,0x8a,0x7f,0xe0,0x9d, +0x9a,0xff,0x00,0xed,0x53,0xa7,0xc9,0xe2,0x9d,0x5f,0x55,0x3e,0x15,0xf0,0x3c,0x53, +0x18,0x12,0xed,0x21,0xf3,0x2e,0x6f,0x5d,0x71,0xb9,0x61,0x52,0x40,0x0a,0xbd,0x0b, +0xb6,0x46,0x78,0x00,0xe0,0xe1,0x92,0xfc,0x8c,0xef,0x1a,0xff,0x00,0xc1,0x51,0x7f, +0x68,0x5f,0x17,0xcd,0x37,0x91,0xe2,0xeb,0x7f,0x0e,0xdb,0x3b,0x16,0x5b,0x7d,0x1b, +0x4f,0x86,0x30,0x83,0xb0,0x0e,0xea,0xcf,0xf9,0xb5,0x7d,0x1d,0xff,0x00,0x04,0xc4, +0xf8,0xc5,0xf1,0xb7,0xf6,0x81,0xf8,0xe3,0x7d,0x71,0xe2,0x9f,0x88,0x1a,0xe6,0xad, +0xe0,0xff,0x00,0x0f,0xd8,0xbd,0xd5,0xe5,0xb5,0xc3,0x29,0x86,0x79,0xe4,0xcc,0x70, +0xc4,0xc7,0x6e,0x47,0x57,0x93,0x03,0xfe,0x79,0x57,0xc9,0xbf,0xb7,0x6f,0xc0,0x4f, +0x01,0xfe,0xcd,0x7f,0x18,0x6d,0xbc,0x0b,0xe0,0x8d,0x57,0x58,0xd5,0xde,0xd7,0x4f, +0x8e,0xe3,0x53,0x9f,0x57,0x9e,0x29,0x19,0x27,0x90,0x96,0x58,0xc0,0x8e,0x34,0x0b, +0x88,0xf6,0x31,0xce,0x7f,0xd6,0x0e,0x98,0xaf,0xd3,0xef,0xf8,0x25,0x5f,0xc1,0x81, +0xf0,0xbf,0xf6,0x5f,0xb1,0xd7,0x2e,0xad,0xfc,0xad,0x5f,0xc5,0xf3,0x9d,0x56,0x56, +0x3f,0x7b,0xec,0xff,0x00,0x72,0xdd,0x7d,0x86,0xd0,0x5b,0xfe,0xda,0x50,0x08,0x8f, +0xe3,0x97,0xfc,0x15,0x17,0xc0,0x9f,0x00,0x7e,0x2c,0xeb,0xfe,0x01,0xd7,0xfc,0x21, +0xe2,0x5b,0xbd,0x43,0x48,0x92,0x34,0x92,0xea,0xc4,0x5b,0xb4,0x32,0x07,0x89,0x24, +0x56,0x5d,0xd2,0x29,0xe8,0xe3,0xb7,0x50,0x6b,0xe8,0x3f,0xd9,0xdb,0xe3,0xe6,0x87, +0xfb,0x4a,0xfc,0x30,0xb3,0xf1,0xc7,0x87,0x6c,0xef,0xac,0x34,0xcb,0x99,0xe5,0xb7, +0x58,0x35,0x15,0x45,0x98,0x34,0x6d,0xb5,0xb2,0x15,0x98,0x63,0x3d,0x39,0xaf,0xc2, +0xdf,0xdb,0xb3,0xc7,0x76,0x9f,0x11,0xbf,0x6b,0x6f,0x89,0x5a,0xcd,0x84,0xbe,0x75, +0x90,0xd4,0xbe,0xc5,0x13,0x8e,0x84,0x5b,0xc6,0x90,0x12,0x3d,0x8b,0x46,0xc7,0xf1, +0xaf,0xd8,0xaf,0xf8,0x27,0x2f,0x81,0x67,0xf0,0x0f,0xec,0x75,0xf0,0xfa,0xd2,0xe5, +0x59,0x2e,0x2f,0xed,0xa4,0xd5,0x59,0x58,0x60,0x81,0x71,0x2b,0x4a,0x9f,0xf8,0xe3, +0x2d,0x03,0x4f,0x53,0xe9,0x19,0xa7,0x5b,0x78,0x9e,0x49,0x18,0x24,0x68,0xa5,0x99, +0x98,0xe0,0x00,0x3b,0xd7,0xc5,0xfe,0x2d,0xd7,0x5f,0xc4,0xde,0x25,0xd4,0x75,0x37, +0x27,0xfd,0x22,0x66,0x65,0x07,0xb2,0x74,0x51,0xf8,0x00,0x05,0x7d,0x29,0xf1,0xbf, +0xc4,0x5f,0xd8,0x1e,0x01,0xbc,0x54,0x70,0xb7,0x17,0xc4,0x5a,0x46,0x3d,0x43,0x7d, +0xff,0x00,0xfc,0x74,0x37,0xe9,0x5f,0x2a,0x57,0xe7,0x1c,0x51,0x8a,0xe6,0x9c,0x30, +0xeb,0xa6,0xaf,0xe7,0xb1,0xe1,0xe6,0x15,0x2f,0x25,0x4f,0xe6,0x14,0x51,0x45,0x7c, +0x29,0xe3,0x9a,0x5e,0x1a,0x92,0xc6,0x2d,0x7f,0x4f,0x93,0x52,0x25,0x6c,0x23,0x99, +0x5e,0x6d,0xab,0xb8,0x95,0x07,0x24,0x60,0x7a,0xe3,0x1f,0x8d,0x7d,0x2b,0x1f,0xc7, +0x9f,0x06,0xb0,0x03,0xed,0xf2,0xaf,0xd6,0xda,0x4f,0xf0,0xaf,0x96,0x28,0xaf,0x6b, +0x01,0x9b,0x56,0xcb,0xa3,0x28,0xd2,0x49,0xdf,0xbf,0xfc,0x39,0xd7,0x47,0x13,0x3a, +0x09,0xa8,0xad,0xcf,0xaa,0xcf,0xc7,0x5f,0x06,0x81,0x9f,0xed,0x37,0xff,0x00,0xc0, +0x69,0x3f,0xf8,0x9a,0xc7,0xd6,0x3f,0x68,0xcf,0x0e,0xda,0x44,0xc2,0xc6,0xde,0xef, +0x50,0x97,0xb0,0xd9,0xe5,0xaf,0xe2,0x4f,0x3f,0xa5,0x7c,0xd9,0x45,0x7a,0x53,0xe2, +0x6c,0x6c,0x95,0x92,0x8a,0xf9,0x7f,0xc1,0x37,0x79,0x85,0x67,0xb5,0x8e,0xa7,0xc7, +0x5f,0x11,0x35,0x5f,0x1e,0xdd,0xab,0xde,0x32,0xc3,0x69,0x19,0x26,0x1b,0x48,0xbe, +0xe2,0x7b,0x9f,0x53,0xee,0x7f,0x0c,0x57,0x2d,0x45,0x6b,0xe9,0x1e,0x12,0xd6,0xb5, +0xed,0xa7,0x4f,0xd2,0xee,0xae,0x91,0xba,0x3c,0x71,0x1d,0x9f,0xf7,0xd7,0x4f,0xd6, +0xbe,0x72,0x73,0xad,0x8b,0xa8,0xe5,0x2b,0xca,0x4f,0xe6,0x70,0xc9,0xce,0xac,0xae, +0xf5,0x66,0x45,0x69,0x78,0x7b,0xc3,0xb7,0xfe,0x29,0xd5,0x21,0xd3,0xf4,0xe8,0x0c, +0xd7,0x12,0x1f,0xf8,0x0a,0x0e,0xec,0xc7,0xb0,0x15,0xe9,0x5e,0x18,0xfd,0x9d,0x75, +0x7d,0x45,0xd2,0x4d,0x66,0xe2,0x3d,0x36,0x0e,0x09,0x8a,0x32,0x24,0x94,0x8f,0x4e, +0x38,0x1f,0x99,0xfa,0x57,0xb9,0x78,0x4f,0xc1,0x7a,0x57,0x82,0xec,0x3e,0xcb,0xa6, +0x5b,0x08,0xb3,0x83,0x24,0xad,0xcc,0x92,0x1f,0x56,0x6e,0xff,0x00,0x4e,0x83,0xb0, +0x15,0xf4,0x79,0x7f,0x0f,0xe2,0x31,0x12,0x52,0xc4,0x2e,0x48,0xfe,0x2f,0xfa,0xf3, +0x3b,0xa8,0x60,0xa7,0x37,0x79,0xe8,0x8a,0xfe,0x01,0xf0,0x5d,0xaf,0x81,0xbc,0x3f, +0x0e,0x9f,0x6e,0x7c,0xc9,0x4f,0xcf,0x3c,0xf8,0xc1,0x95,0xcf,0x53,0xf4,0xec,0x3d, +0x85,0x74,0xb4,0x94,0xb5,0xfa,0x7d,0x2a,0x51,0xa3,0x05,0x4e,0x0a,0xc9,0x1f,0x43, +0x18,0xa8,0xa5,0x15,0xb0,0x51,0x45,0x15,0xa9,0x41,0x5e,0x6f,0xf1,0xeb,0x5c,0xfe, +0xc9,0xf0,0x05,0xc4,0x0a,0xdb,0x65,0xbe,0x91,0x6d,0xd7,0x1e,0x99,0xdc,0xdf,0xa0, +0x23,0xf1,0xaf,0x47,0x3d,0x2b,0xe7,0x8f,0xda,0x4f,0x5b,0xfb,0x4e,0xbd,0xa6,0x69, +0x68,0xdf,0x25,0xac,0x26,0x67,0x03,0xfb,0xce,0x70,0x3f,0x20,0xbf,0xad,0x78,0x79, +0xd5,0x7f,0xab,0xe0,0x6a,0x49,0x6e,0xf4,0xfb,0xce,0x4c,0x5c,0xf9,0x28,0xc9,0x9e, +0x39,0x45,0x14,0x57,0xe3,0x67,0xca,0x85,0x7a,0x67,0xec,0xfb,0xa2,0xff,0x00,0x69, +0x78,0xec,0x5d,0xba,0x93,0x1d,0x84,0x0d,0x2e,0x7b,0x07,0x6f,0x95,0x41,0xfc,0x0b, +0x1f,0xc2,0xbc,0xce,0xbe,0x89,0xfd,0x9b,0x74,0x41,0x6b,0xe1,0xdd,0x47,0x54,0x65, +0x22,0x4b,0xc9,0xc4,0x4a,0x4f,0x42,0x91,0x8e,0x08,0xfc,0x59,0x87,0xe1,0x5e,0xf6, +0x47,0x43,0xdb,0xe3,0xe0,0x9e,0xcb,0x5f,0xbb,0xfe,0x09,0xd9,0x84,0x87,0x3d,0x68, +0xf9,0x6a,0x7b,0x08,0xe9,0x4b,0x45,0x15,0xfb,0x11,0xf5,0x21,0x48,0x4e,0x29,0x6a, +0x9e,0xad,0xa8,0xc5,0xa4,0xe9,0xb7,0x57,0xb3,0x9c,0x43,0x6f,0x13,0x4a,0xe7,0xd9, +0x41,0x27,0xf9,0x54,0xc9,0xa8,0xa6,0xde,0xc2,0x6e,0xda,0xb3,0xc3,0x3f,0x68,0x9f, +0x1b,0xb5,0xc5,0xdc,0x3e,0x1b,0xb5,0x90,0x88,0xa2,0x02,0x6b,0xbd,0xa7,0xef,0x31, +0xe5,0x50,0xfd,0x07,0xcd,0x8f,0x71,0xe9,0x5e,0x27,0x57,0x35,0x9d,0x52,0x7d,0x6f, +0x55,0xbb,0xd4,0x2e,0x4e,0x67,0xb9,0x95,0xa5,0x7f,0xa9,0x39,0xc7,0xd0,0x74,0xfc, +0x2a,0x9d,0x7e,0x25,0x98,0x62,0xe5,0x8d,0xc4,0xca,0xb3,0xdb,0xa7,0xa7,0x43,0xe4, +0xab,0xd5,0x75,0xaa,0x39,0x30,0xa2,0x8a,0x2b,0xce,0x30,0x3a,0x5f,0x87,0xde,0x0a, +0x9f,0xc7,0x5e,0x22,0x86,0xc2,0x32,0x63,0xb7,0x5f,0xde,0x5c,0x4c,0x07,0xdc,0x8f, +0xbf,0xe2,0x7a,0x0f,0xfe,0xb5,0x7d,0x71,0xa3,0x69,0x16,0x9a,0x16,0x9b,0x05,0x8d, +0x8c,0x2b,0x6f,0x6b,0x02,0xed,0x48,0xd0,0x71,0xf5,0x3e,0xa4,0xf5,0x27,0xa9,0xae, +0x13,0xe0,0x4f,0x84,0xd7,0xc3,0xde,0x0d,0x8a,0xf2,0x44,0x02,0xf3,0x52,0xc5,0xc3, +0x92,0x39,0x11,0xff,0x00,0xcb,0x31,0xf9,0x73,0xf5,0x63,0x5e,0x93,0x5f,0xad,0x64, +0x59,0x7c,0x70,0x98,0x75,0x52,0x4b,0xdf,0x9e,0xaf,0xc9,0x74,0x47,0xd2,0xe0,0xe8, +0x2a,0x54,0xd4,0x9e,0xec,0x4a,0x5a,0x28,0xaf,0xa6,0x3d,0x00,0xa2,0x8a,0x28,0x03, +0x8c,0xf8,0xb1,0xe1,0x58,0xbc,0x55,0xe0,0xbb,0xe8,0x76,0x03,0x75,0x6e,0x86,0xe2, +0xdd,0xb1,0xc8,0x75,0x19,0xc0,0xfa,0x8c,0x8f,0xc6,0xbe,0x47,0xaf,0xb9,0xe4,0x50, +0xe8,0x54,0x8c,0x82,0x30,0x6b,0xe2,0x0d,0x46,0x11,0x6f,0xa8,0xdd,0x42,0x3a,0x47, +0x2b,0xa0,0xfc,0x09,0x15,0xf9,0xd7,0x14,0xd0,0x8c,0x67,0x4e,0xb2,0xdd,0xdd,0x3f, +0x91,0xe1,0x66,0x30,0x49,0xc6,0x5d,0xca,0xf4,0x51,0x45,0x7c,0x21,0xe3,0x85,0x7d, +0x49,0xf0,0x17,0x5a,0x6d,0x57,0xe1,0xf5,0xb4,0x4e,0xe5,0xe4,0xb2,0x95,0xed,0xc9, +0x3e,0x83,0xe6,0x51,0xf8,0x2b,0x01,0xf8,0x57,0xcb,0x75,0xf4,0x27,0xec,0xcf,0x29, +0x3a,0x0e,0xb3,0x1f,0x65,0xba,0x56,0xfc,0xd3,0x1f,0xd2,0xbe,0xa7,0x86,0xea,0x38, +0x63,0x94,0x57,0x54,0xff,0x00,0xcc,0xf4,0x70,0x12,0x6a,0xb5,0xbb,0x9e,0xcc,0x6b, +0xe5,0x2f,0x8e,0x1a,0x9b,0xea,0x3f,0x11,0xb5,0x14,0x66,0x2d,0x1d,0xa8,0x48,0x23, +0x1e,0x80,0x28,0x27,0xff,0x00,0x1e,0x66,0xaf,0xab,0x3b,0x57,0xc8,0xdf,0x17,0x6d, +0x5a,0xd3,0xe2,0x3e,0xb8,0xad,0xd5,0xa6,0x12,0x0f,0xa3,0x28,0x23,0xf9,0xd7,0xd3, +0x71,0x3c,0xa4,0xb0,0x91,0x4b,0x67,0x2f,0xd1,0x9d,0xf9,0x83,0xfd,0xd2,0xf5,0x38, +0xfa,0x28,0xa2,0xbf,0x30,0x3e,0x7c,0x2b,0xb7,0xf8,0x35,0xa3,0xd9,0xeb,0x5e,0x3f, +0xb0,0x8a,0xf7,0x6b,0x45,0x18,0x69,0x96,0x37,0xe4,0x48,0xca,0x32,0xa3,0xf3,0xe7, +0xf0,0xae,0x22,0xac,0xe9,0xba,0x8d,0xce,0x91,0x7f,0x05,0xed,0xa4,0xcd,0x05,0xcc, +0x0e,0x1e,0x39,0x13,0xaa,0x91,0x5d,0x38,0x6a,0x91,0xa3,0x5e,0x15,0x26,0xae,0x93, +0x4e,0xc5,0xd3,0x92,0x8c,0xd4,0x9e,0xc7,0xdb,0xea,0x38,0xc5,0x3b,0x15,0xe2,0xbe, +0x10,0xfd,0xa3,0x2c,0xe7,0x8d,0x21,0xf1,0x0d,0xb3,0xda,0xcc,0x38,0x37,0x56,0xeb, +0xba,0x33,0xee,0x57,0xa8,0xfc,0x33,0x5e,0xa7,0xa3,0x78,0xbb,0x46,0xf1,0x0a,0x06, +0xd3,0xb5,0x2b,0x6b,0xbf,0x55,0x8e,0x41,0xb8,0x7d,0x57,0xa8,0xaf,0xd9,0x70,0xb9, +0x86,0x17,0x16,0x93,0xa5,0x35,0xe9,0xd7,0xee,0x3e,0xae,0x9d,0x7a,0x75,0x7e,0x16, +0x6b,0xe2,0x82,0x29,0x37,0x52,0xe6,0xbd,0x23,0x70,0xc7,0xe3,0x4c,0x9e,0xde,0x3b, +0x98,0xda,0x39,0x51,0x64,0x8d,0x86,0x19,0x1d,0x72,0x08,0xf4,0x22,0xa4,0xa2,0x95, +0x93,0xdc,0x2c,0x50,0xd2,0x74,0x2b,0x0d,0x06,0x29,0x62,0xd3,0xed,0x21,0xb3,0x8a, +0x49,0x0c,0xad,0x1c,0x08,0x15,0x4b,0x10,0x01,0x38,0x1f,0x41,0x57,0xe8,0xa2,0x94, +0x62,0xa2,0xad,0x15,0x64,0x24,0x92,0xd1,0x05,0x14,0x51,0x54,0x30,0xae,0x67,0xe2, +0x24,0xfe,0x47,0x85,0x2f,0x5b,0xa1,0xdb,0x8a,0xe9,0xab,0x88,0xf8,0xbd,0x71,0xf6, +0x7f,0x07,0xdc,0x1c,0xe3,0x3f,0xe1,0x5c,0xb8,0xa9,0x72,0xd0,0x9b,0xf2,0x66,0x35, +0x9d,0xa9,0xc9,0x9f,0x08,0x78,0xa6,0x5d,0xfa,0x9d,0xe3,0x67,0xf8,0xcd,0x79,0xb7, +0xc3,0x9b,0x15,0xd7,0x3f,0x6a,0xdf,0x86,0x16,0x6f,0xc8,0x1a,0xd4,0x73,0xe3,0xde, +0x25,0x69,0x47,0xea,0x95,0xdf,0x6b,0xaf,0xba,0x7b,0x86,0xf5,0x63,0x5c,0x9f,0xec, +0xe3,0x0b,0xea,0x3f,0xb6,0xaf,0xc3,0xb4,0x0b,0xb9,0x21,0x96,0xf6,0x66,0xf6,0x0b, +0x67,0x3e,0x0f,0xe6,0x45,0x7c,0x36,0x48,0xaf,0x56,0xe7,0xe4,0x38,0x15,0xed,0x33, +0x9a,0x5e,0xad,0x9f,0xab,0x7b,0x68,0xa5,0xcd,0x15,0xfa,0x21,0xfb,0x08,0xb4,0x51, +0x45,0x22,0xc4,0xcd,0x7c,0xcb,0xfb,0x60,0xf8,0xbc,0xee,0xd1,0xfc,0x33,0x0b,0xe0, +0x1c,0xdf,0x5c,0x80,0x4f,0xba,0xc6,0x3e,0x9f,0x7c,0xfe,0x02,0xbe,0x97,0x95,0xc4, +0x68,0xce,0xc4,0x2a,0xa8,0x24,0x92,0x70,0x00,0xaf,0xcf,0xaf,0x89,0xbe,0x2c,0x93, +0xc6,0xfe,0x3c,0xd6,0x35,0x56,0x72,0xf1,0x4b,0x39,0x8e,0x01,0x9c,0x85,0x89,0x7e, +0x54,0xc7,0xe0,0x33,0xf8,0xd7,0xce,0x67,0x98,0x8f,0x63,0x86,0xf6,0x6b,0x79,0x69, +0xf2,0xea,0x7c,0xc7,0x10,0x62,0x7d,0x96,0x17,0xd9,0x47,0x79,0xbb,0x7c,0xba,0x9e, +0x89,0xfb,0x2d,0x78,0x47,0xfb,0x6b,0xc6,0x8d,0xa9,0xcb,0x1e,0xe8,0x2c,0x17,0x70, +0x27,0xa6,0xf3,0xd2,0xbe,0xc4,0x1d,0x2b,0xca,0x3f,0x67,0x0f,0x08,0xff,0x00,0xc2, +0x37,0xf0,0xfe,0x09,0xe4,0x4d,0xb7,0x17,0xc7,0xce,0x62,0x47,0x38,0xed,0x5e,0xaf, +0x5d,0x19,0x3e,0x1f,0xd8,0x61,0x63,0x7d,0xe5,0xab,0xf9,0xff,0x00,0xc0,0x3d,0x0c, +0xab,0x0d,0xf5,0x6c,0x24,0x62,0xf7,0x7a,0xb1,0x68,0xa2,0x8a,0xf6,0xcf,0x5c,0x29, +0x09,0xa5,0xa4,0xc5,0x00,0x7f,0x37,0xdf,0xb5,0x6f,0x8c,0xaf,0x3c,0x7d,0xfb,0x4a, +0x7c,0x4c,0xd6,0xef,0x9c,0xc9,0x34,0xda,0xfd,0xe4,0x28,0x4f,0x55,0x8a,0x29,0x4c, +0x51,0x2f,0xe1,0x1c,0x68,0x3f,0x0a,0xfd,0x53,0xfd,0x82,0x7f,0x6c,0xcf,0x83,0xf6, +0x1f,0xb3,0x47,0x85,0xfc,0x31,0xa9,0xf8,0xa7,0x4c,0xf0,0xae,0xbb,0xe1,0xbb,0x13, +0x6f,0x77,0xa7,0x6a,0x93,0xad,0xb1,0x99,0x94,0xb3,0x19,0x62,0x67,0x20,0x49,0xbf, +0x24,0xe0,0x1c,0xe4,0x90,0x47,0x4a,0xf8,0x47,0xfe,0x0a,0x39,0xfb,0x2b,0x78,0x83, +0xe0,0x87,0xc7,0x0f,0x10,0xf8,0xa2,0x1d,0x3e,0x69,0xfc,0x11,0xe2,0x7b,0xf9,0x75, +0x1b,0x2d,0x4a,0x35,0xdd,0x1c,0x32,0xca,0xdb,0xe5,0x82,0x4c,0x0f,0x91,0x83,0xb3, +0x6d,0xcf,0x55,0x23,0x07,0x39,0x03,0xe4,0x43,0xc7,0x19,0xaa,0x22,0xf6,0x67,0xaf, +0x6b,0x7a,0xcd,0xcf,0xed,0x4b,0xfb,0x51,0x5c,0xea,0x1a,0x95,0xf2,0x58,0x0f,0x17, +0x78,0x83,0x32,0x5d,0x5d,0xca,0xa8,0xb6,0x76,0xaf,0x20,0x03,0x73,0x36,0x00,0x11, +0xc2,0x00,0xe7,0xfb,0x95,0xfa,0x69,0xfb,0x5b,0xff,0x00,0xc1,0x44,0x3e,0x1f,0x7c, +0x15,0xf8,0x50,0xfe,0x01,0xf8,0x43,0xac,0xda,0x78,0x83,0xc4,0xc7,0x4f,0x5d,0x32, +0xd2,0xe7,0x49,0x71,0x2d,0xa6,0x95,0x08,0x4f,0x2c,0x48,0x65,0x19,0x57,0x90,0x28, +0xf9,0x55,0x49,0xc1,0xc1,0x38,0xc6,0x0f,0xe3,0x6f,0x5a,0xf5,0x3f,0x80,0xff,0x00, +0xb3,0x47,0xc4,0x3f,0xda,0x3b,0xc4,0x91,0x69,0x3e,0x0b,0xd0,0x66,0xbc,0x8b,0x78, +0x17,0x3a,0x9c,0xe0,0xc7,0x65,0x6a,0x33,0xcb,0x4b,0x2e,0x30,0x31,0x9f,0xba,0x32, +0xc7,0xb0,0x34,0x09,0x17,0x3f,0x65,0xcf,0x80,0x7a,0xc7,0xed,0x37,0xf1,0xb7,0x43, +0xf0,0x8d,0x92,0xcc,0x6d,0x27,0x9b,0xed,0x3a,0xb5,0xf8,0xc9,0xfb,0x35,0xa2,0x90, +0x65,0x90,0x9e,0x79,0x3f,0x75,0x73,0xd5,0x99,0x6b,0xfa,0x2e,0xd2,0xb4,0xcb,0x6d, +0x13,0x4b,0xb4,0xd3,0xec,0xa2,0x58,0x2c,0xed,0x21,0x48,0x21,0x89,0x06,0x02,0x22, +0xa8,0x55,0x03,0xe8,0x00,0xaf,0x0f,0xfd,0x90,0xff,0x00,0x64,0x5f,0x0d,0x7e,0xc9, +0xbe,0x00,0x1a,0x4e,0x98,0xcb,0xaa,0x78,0x86,0xfb,0x6c,0x9a,0xb6,0xb6,0xf1,0xed, +0x7b,0x99,0x00,0xe1,0x50,0x73,0xb2,0x35,0xe7,0x6a,0xe4,0xf5,0x24,0x92,0x6b,0xdd, +0x2f,0x6f,0x22,0xb0,0xb4,0x9e,0xe6,0x76,0xd9,0x0c,0x31,0xb4,0x8e,0xc7,0xb2,0x81, +0x92,0x7f,0x2a,0x87,0x24,0x95,0xd9,0x5b,0x23,0xe7,0x6f,0xda,0x2f,0xc4,0x7f,0xda, +0x1e,0x26,0xb5,0xd2,0xa3,0x6c,0xc7,0x61,0x16,0xe7,0x19,0xe3,0xcc,0x7c,0x1f,0xd1, +0x42,0xfe,0x75,0xe4,0x95,0xa1,0xe2,0x0d,0x62,0x4f,0x10,0x6b,0x97,0xfa,0x94,0xbf, +0x7e,0xea,0x66,0x97,0x1e,0x80,0x9e,0x07,0xe0,0x30,0x3f,0x0a,0xcf,0xaf,0xc4,0x31, +0xf8,0x87,0x8a,0xc5,0x4e,0xb7,0x77,0xf8,0x74,0x3e,0x4a,0xb5,0x4f,0x6b,0x51,0xcc, +0x28,0xa2,0xba,0x5f,0x87,0x1e,0x1f,0xff,0x00,0x84,0x9f,0xc6,0xba,0x5d,0x8b,0x2e, +0xe8,0x4c,0xa2,0x49,0x81,0xe9,0xb1,0x7e,0x66,0x07,0xeb,0x8c,0x7e,0x35,0xcb,0x46, +0x94,0xab,0x54,0x8d,0x28,0xef,0x27,0x6f,0xbc,0xce,0x31,0x73,0x92,0x8a,0xea,0x61, +0x49,0xa7,0xdd,0x43,0xfe,0xb2,0xda,0x64,0xff,0x00,0x7a,0x32,0x2a,0xb9,0x18,0x35, +0xf7,0x40,0x41,0x80,0x36,0x8c,0x56,0x37,0x88,0x3c,0x17,0xa3,0x78,0x9e,0xd9,0xe1, +0xd4,0x34,0xe8,0x27,0xdc,0x31,0xe6,0x6c,0x02,0x45,0xf7,0x0c,0x39,0x15,0xf7,0x15, +0x38,0x56,0x49,0x5e,0x9d,0x5b,0xbf,0x35,0xff,0x00,0x04,0xf5,0xe5,0x97,0x3b,0x7b, +0xb2,0x3e,0x30,0xa2,0xba,0x4f,0x88,0x3e,0x0e,0x97,0xc0,0xfe,0x26,0xb8,0xd3,0x5d, +0x8c,0x90,0xe0,0x4b,0x04,0xad,0xd5,0xe3,0x3d,0x09,0xf7,0x18,0x20,0xfb,0x8a,0xe6, +0xeb,0xe1,0xaa,0xd2,0x9d,0x1a,0x8e,0x9c,0xd5,0x9a,0xd0,0xf2,0x25,0x17,0x06,0xe2, +0xfa,0x05,0x74,0x7e,0x0d,0xf1,0xde,0xab,0xe0,0x9d,0x4a,0x3b,0x8b,0x2b,0x87,0x36, +0xfb,0x81,0x96,0xd5,0x98,0xf9,0x72,0xaf,0x70,0x47,0x63,0xef,0xd4,0x57,0x39,0x45, +0x14,0xaa,0xce,0x8c,0xd5,0x4a,0x6e,0xcd,0x04,0x64,0xe0,0xf9,0xa3,0xb9,0xf7,0x06, +0x95,0xa8,0xc3,0xab,0xe9,0xb6,0xd7,0xb6,0xed,0xba,0x0b,0x88,0xd6,0x54,0x3e,0xc4, +0x64,0x7f,0x3a,0xb7,0x5c,0x27,0xc1,0x2b,0xef,0xb7,0x7c,0x37,0xd2,0x49,0x39,0x68, +0x83,0xc2,0x7f,0xe0,0x2e,0x40,0xfd,0x31,0x5d,0xdd,0x7e,0xe5,0x86,0xab,0xed,0xe8, +0x42,0xaf,0x74,0x9f,0xde,0x8f,0xaf,0xa7,0x2e,0x78,0x29,0x77,0x0a,0x28,0xa2,0xba, +0x4d,0x02,0x8a,0x28,0xa0,0x04,0x27,0x00,0xd7,0xc7,0x1f,0x11,0x35,0xcf,0xf8,0x48, +0xbc,0x6d,0xac,0x5f,0x2b,0x07,0x8d,0xa7,0x64,0x8c,0x8e,0x85,0x17,0xe5,0x53,0xf8, +0x80,0x0f,0xe3,0x5f,0x54,0x78,0xf7,0x5d,0xff,0x00,0x84,0x73,0xc1,0xfa,0xb6,0xa0, +0xae,0x12,0x48,0xad,0xdb,0xcb,0x2d,0xd3,0x79,0x18,0x4f,0xfc,0x78,0x8a,0xf8,0xcc, +0x0c,0x0c,0x57,0xc0,0x71,0x4d,0x7d,0x29,0xd0,0x5e,0xaf,0xf2,0x5f,0xa9,0xe2,0xe6, +0x33,0xf8,0x60,0x2d,0x14,0x51,0x5f,0x9f,0x1e,0x20,0x57,0xd8,0xdf,0x0e,0xb4,0x4f, +0xec,0x0f,0x04,0xe8,0xf6,0x44,0x61,0xd6,0xdd,0x5d,0xc7,0xfb,0x4d,0xf3,0x37,0xea, +0xc6,0xbe,0x53,0xf0,0x5e,0x91,0xfd,0xbf,0xe2,0xcd,0x27,0x4f,0xc6,0x56,0x7b,0x94, +0x0e,0x3f,0xd9,0x07,0x2d,0xfa,0x03,0x5f,0x68,0x28,0x01,0x40,0x1c,0x01,0x5f,0x7f, +0xc2,0xd4,0x3f,0x89,0x5d,0xfa,0x7e,0xaf,0xf4,0x3d,0xac,0xba,0x1f,0x14,0xfe,0x41, +0x4b,0x45,0x15,0xfa,0x09,0xed,0x85,0x79,0xb7,0xc7,0xed,0x63,0xfb,0x2f,0xe1,0xfc, +0xf0,0xa9,0x2b,0x25,0xf4,0xc9,0x6e,0xa4,0x7a,0x67,0x73,0x7e,0x88,0x47,0xe3,0x5e, +0x93,0x5e,0x17,0xfb,0x4e,0x6a,0x0e,0xb1,0xe8,0x36,0x4a,0x7e,0x46,0x32,0xcc,0xc3, +0xdc,0x6d,0x03,0xf9,0xb5,0x78,0xd9,0xc5,0x57,0x47,0x01,0x56,0x4b,0xb5,0xbe,0xfd, +0x0e,0x5c,0x54,0xb9,0x28,0xc9,0x9e,0x11,0x45,0x14,0x57,0xe3,0x07,0xca,0x05,0x5e, +0xd0,0xb4,0xc6,0xd6,0xb5,0xab,0x0d,0x3d,0x0e,0x1a,0xea,0x74,0x87,0x3e,0x9b,0x88, +0x19,0xaa,0x35,0xda,0x7c,0x1b,0xb4,0x5b,0xdf,0x89,0x3a,0x2a,0x3f,0xdd,0x57,0x79, +0x3f,0x15,0x8d,0x88,0xfd,0x40,0xae,0xac,0x2d,0x3f,0x6d,0x5e,0x14,0xdf,0x56,0x97, +0xe2,0x69,0x4e,0x3c,0xd3,0x8c,0x7c,0xcf,0xac,0xad,0xa0,0x8e,0xd6,0xde,0x28,0x62, +0x50,0x91,0x46,0xa1,0x11,0x47,0x40,0x00,0xc0,0x02,0xa5,0xa4,0x14,0xb5,0xfb,0xaa, +0x49,0x2b,0x23,0xec,0x42,0x8a,0x28,0xa6,0x01,0x45,0x14,0x50,0x04,0x73,0x38,0x86, +0x27,0x76,0x38,0x55,0x04,0x93,0xf8,0x57,0xc3,0xd7,0x93,0x7d,0xa6,0xf2,0x79,0xbf, +0xe7,0xa4,0x8c,0xff,0x00,0x99,0xcd,0x7d,0x79,0xf1,0x37,0x5a,0x5d,0x07,0xc0,0xba, +0xc5,0xd1,0x38,0x73,0x01,0x8a,0x3c,0x1e,0x77,0x3f,0xca,0x3f,0x9e,0x7f,0x0a,0xf8, +0xf6,0xbf,0x3a,0xe2,0x9a,0xa9,0xce,0x95,0x25,0xd1,0x36,0x78,0x59,0x8c,0xb5,0x8c, +0x42,0x8a,0x28,0xaf,0x84,0x3c,0x70,0xaf,0xa1,0xff,0x00,0x66,0x98,0x36,0xf8,0x6b, +0x56,0x97,0x04,0x6f,0xbb,0x0b,0x9f,0xa2,0x0f,0xf1,0xaf,0x9e,0x3a,0xd7,0xd5,0x5f, +0x02,0xf4,0xa6,0xd3,0x3e,0x1d,0x58,0x3b,0xae,0xd9,0x2e,0x9d,0xee,0x08,0xf6,0x27, +0x0b,0xff,0x00,0x8e,0x81,0x5f,0x55,0xc3,0x74,0xdc,0xf1,0xdc,0xdd,0x93,0xff,0x00, +0x23,0xd1,0xc0,0x46,0xf5,0xaf,0xd9,0x1e,0x81,0x8e,0x2b,0xc3,0xbf,0x68,0x6f,0x02, +0xcd,0x71,0xe4,0xf8,0x8e,0xce,0x33,0x20,0x89,0x04,0x57,0x61,0x47,0x21,0x73,0xf2, +0xbf,0xe1,0x9c,0x1f,0xc3,0xde,0xbd,0xc4,0x53,0x66,0x85,0x27,0x8d,0xa3,0x91,0x16, +0x44,0x71,0xb5,0x95,0x86,0x41,0x1e,0x86,0xbf,0x46,0xc7,0x60,0xe1,0x8e,0xa1,0x2a, +0x33,0xeb,0xf8,0x33,0xdd,0xad,0x49,0x56,0x83,0x83,0x3e,0x17,0xa2,0xbd,0xc7,0xe2, +0x1f,0xec,0xff,0x00,0x20,0x96,0x5b,0xff,0x00,0x0d,0x60,0xa3,0x65,0x9b,0x4f,0x76, +0xc1,0x53,0xff,0x00,0x4c,0xd8,0xff,0x00,0x23,0xef,0xcf,0x41,0x5e,0x2d,0x7f,0xa7, +0x5d,0x69,0x57,0x2f,0x6f,0x79,0x6f,0x2d,0xac,0xe9,0xf7,0xa3,0x95,0x0a,0xb0,0xfc, +0x0d,0x7e,0x43,0x8c,0xcb,0xf1,0x18,0x19,0xb8,0xd5,0x8e,0x9d,0xfa,0x33,0xe6,0x2a, +0xd0,0x9d,0x17,0x69,0x22,0xbd,0x14,0x51,0x5e,0x69,0x80,0x52,0xab,0x14,0x60,0xca, +0x4a,0xb0,0x39,0x04,0x1c,0x11,0x49,0x45,0x34,0xed,0xaa,0x03,0xab,0xd1,0xbe,0x29, +0xf8,0xa7,0x41,0xda,0xb6,0xba,0xcd,0xc3,0x46,0x08,0xfd,0xdd,0xc1,0xf3,0x94,0x8f, +0x4f,0x9b,0x24,0x0f,0xa6,0x2b,0xd1,0x34,0x0f,0xda,0x56,0x65,0x65,0x4d,0x6b,0x4a, +0x57,0x52,0x79,0x9a,0xc9,0x88,0x20,0x7f,0xb8,0xc7,0x9f,0xfb,0xe8,0x57,0x88,0x51, +0x5e,0xae,0x1f,0x35,0xc6,0x61,0xbf,0x87,0x51,0xdb,0xb3,0xd5,0x7e,0x27,0x4c,0x31, +0x35,0x69,0xfc,0x32,0x3e,0xc3,0xf0,0xc7,0xc4,0x9f,0x0f,0xf8,0xb8,0x2a,0xe9,0xf7, +0xe8,0x6e,0x08,0xcf,0xd9,0xa5,0xf9,0x25,0x1f,0xf0,0x13,0xd7,0xf0,0xcd,0x74,0xf9, +0xaf,0x85,0x91,0xda,0x37,0x57,0x46,0x2a,0xca,0x72,0x18,0x1c,0x10,0x6b,0xd6,0x7e, +0x1c,0xfc,0x75,0xbe,0xd1,0x25,0x8a,0xc7,0x5e,0x77,0xbf,0xd3,0xce,0x14,0x5c,0x9e, +0x66,0x8b,0xeb,0xfd,0xe1,0xf5,0xe7,0xeb,0xd2,0xbe,0xcb,0x01,0xc4,0xb0,0xaa,0xd5, +0x3c,0x52,0xe5,0x7d,0xd6,0xdf,0x3e,0xc7,0xab,0x47,0x1e,0xa4,0xf9,0x6a,0x2b,0x1f, +0x48,0xd1,0x50,0x59,0x5e,0xc1,0xa8,0x5a,0xc5,0x73,0x6d,0x2a,0xcf,0x6f,0x2a,0x87, +0x8e,0x44,0x39,0x56,0x53,0xd0,0x83,0x53,0xd7,0xdb,0xa6,0x9a,0xba,0x3d,0x7d,0xc2, +0x8a,0x28,0xa6,0x01,0x5e,0x5f,0xf1,0xfa,0xf4,0xda,0xf8,0x48,0xa8,0xfe,0x2c,0xd7, +0xa8,0x57,0x8a,0xfe,0xd2,0xd7,0x5e,0x57,0x87,0xe3,0x4c,0xff,0x00,0x09,0x38,0xaf, +0x2f,0x33,0x97,0x2e,0x12,0xa3,0xf2,0x38,0xb1,0xb2,0xe5,0xc3,0xcd,0xf9,0x1f,0x18, +0x6b,0x32,0x65,0x65,0x6e,0xe4,0x93,0x55,0xff,0x00,0x62,0x7b,0x51,0xaa,0x7e,0xd9, +0x36,0xcf,0x8c,0x8b,0x2d,0x16,0xfa,0xe7,0xe8,0x49,0x8a,0x3c,0xff,0x00,0xe4,0x43, +0xf9,0xd1,0xad,0xbe,0xdb,0x69,0x0f,0xb1,0xad,0x6f,0xf8,0x27,0x95,0x9f,0xdb,0x3f, +0x6a,0x3f,0x15,0x5e,0xe3,0x22,0xd7,0xc3,0x72,0xc5,0xbb,0xd0,0xc9,0x73,0x01,0xff, +0x00,0xda,0x66,0xbe,0x63,0x21,0x8f,0xbd,0x73,0xf2,0xcc,0x8d,0x73,0xe7,0x09,0xf6, +0x4c,0xfd,0x29,0xdb,0x45,0x1c,0xd1,0x5f,0x79,0x73,0xf5,0xeb,0x21,0xd4,0x51,0x49, +0x48,0xa3,0xcd,0x3f,0x68,0x5f,0x18,0x9f,0x07,0xfc,0x31,0xd4,0xa4,0x85,0xf6,0x5d, +0xdf,0x62,0xc6,0x03,0xe8,0x5f,0x3b,0x8f,0xe0,0x81,0x8f,0xd4,0x0a,0xf8,0xeb,0xc0, +0x3e,0x1d,0x93,0xc5,0x3e,0x2c,0xd3,0x74,0xd8,0xd7,0x3e,0x6c,0xca,0x1b,0xd8,0x67, +0x9a,0xf5,0x7f,0xda,0xdb,0xc6,0x1f,0xda,0xbe,0x30,0xb2,0xd0,0x61,0x7c,0xc1,0xa6, +0xc3,0xe6,0x4a,0x01,0xe0,0xca,0xfe,0xbe,0xe1,0x40,0xff,0x00,0xbe,0xab,0x43,0xf6, +0x4b,0xf0,0x7f,0xda,0xb5,0x7b,0xdd,0x76,0x64,0xca,0x5b,0x2f,0x97,0x11,0x3f,0xde, +0x3d,0x6b,0xe0,0xb1,0xcd,0xe6,0x19,0x8c,0x68,0x2d,0x96,0x9f,0xe6,0x7c,0x06,0x2d, +0xbc,0xc7,0x35,0x54,0x57,0xc3,0x1d,0x3e,0xed,0x59,0xf5,0x0e,0x9f,0x65,0x1e,0x9d, +0x63,0x6f,0x6d,0x12,0x85,0x8e,0x14,0x08,0xa0,0x7a,0x01,0x8a,0xb3,0x48,0x3a,0x52, +0xd7,0xde,0x24,0x92,0xb2,0x3e,0xf9,0x2b,0x2b,0x20,0xa2,0x8a,0x29,0x8c,0x2b,0xf2, +0xdf,0xf6,0xd7,0xff,0x00,0x82,0x9b,0x78,0xf3,0xe1,0x1f,0xed,0x0d,0xa9,0xf8,0x43, +0xe1,0xcc,0x9a,0x4b,0xe8,0xfa,0x0c,0x49,0x69,0x7d,0xfd,0xa1,0x69,0xf6,0x81,0x3d, +0xe6,0x37,0x49,0x82,0x19,0x59,0x42,0x6e,0x09,0x80,0x7a,0xab,0x57,0xea,0x2c,0xb2, +0xa4,0x31,0xb3,0xc8,0xea,0x88,0xa0,0x96,0x66,0x38,0x00,0x7a,0x93,0x5f,0x84,0x3f, +0xf0,0x51,0x9f,0xd9,0xb7,0xc4,0x9f,0x0a,0xbe,0x3b,0xf8,0xa7,0xc5,0xe2,0xde,0x4d, +0x4b,0xc1,0xbe,0x27,0xd4,0x65,0xd4,0xad,0x75,0x8b,0x71,0xbe,0x28,0xe5,0x99,0x8b, +0xc9,0x04,0x84,0x67,0x63,0x2b,0xb3,0x63,0x38,0xdc,0xb8,0x23,0xb8,0x0d,0x09,0x9f, +0x6d,0x7e,0xc1,0xff,0x00,0xb5,0xcf,0xc4,0xef,0xdb,0x5b,0xc4,0xde,0x24,0xd0,0xbc, +0x73,0xe1,0x9f,0x07,0xcf,0xe0,0x9d,0x2e,0xc5,0x5f,0x51,0x78,0x74,0xf9,0x77,0x4d, +0x2c,0x84,0x88,0x62,0xdb,0x24,0xce,0x9c,0xec,0x91,0x89,0xdb,0xc0,0x4c,0x63,0x90, +0x47,0xb1,0xf8,0xbf,0xfe,0x09,0x9f,0xfb,0x3c,0xf8,0xc2,0xe9,0xae,0x64,0xf0,0x2a, +0xe9,0x13,0x39,0x25,0x8e,0x91,0x79,0x35,0xb2,0x1c,0xff,0x00,0xb0,0x1b,0x68,0xfc, +0x00,0xaf,0x84,0xbf,0xe0,0x93,0xbf,0xb5,0x1f,0x82,0x3e,0x09,0xea,0xfe,0x2e,0xf0, +0x97,0x8d,0xb5,0x2b,0x7f,0x0f,0x45,0xe2,0x09,0x2d,0xee,0x2c,0xb5,0x6b,0xaf,0x92, +0x01,0x24,0x61,0xd5,0xa2,0x96,0x4e,0x88,0x08,0x60,0x54,0x9e,0x33,0xbf,0x24,0x64, +0x67,0xf5,0xef,0x4a,0xf1,0x66,0x89,0xad,0xdb,0x47,0x71,0xa7,0xeb,0x36,0x17,0xf0, +0x48,0x01,0x49,0x6d,0xae,0x92,0x45,0x61,0xec,0x54,0x90,0x68,0x04,0x7c,0xe9,0xe1, +0x0f,0xf8,0x26,0x9f,0xec,0xf1,0xe0,0xeb,0x85,0xb8,0x8f,0xc0,0x51,0xea,0xf3,0x29, +0x05,0x5b,0x58,0xbc,0x9a,0xe5,0x47,0xfc,0x01,0x9f,0x69,0xfc,0x41,0xaf,0xa4,0x34, +0x2f,0x0f,0x69,0x7e,0x18,0xd2,0xe0,0xd3,0x74,0x7d,0x3a,0xd7,0x4a,0xd3,0xe0,0x1b, +0x62,0xb4,0xb2,0x85,0x61,0x89,0x07,0xa0,0x55,0x00,0x0a,0xd0,0x0c,0x18,0x02,0x08, +0x20,0xf7,0x14,0x64,0x1a,0x43,0x16,0xbc,0xdb,0xe3,0xcf,0x88,0xff,0x00,0xb1,0x3c, +0x0d,0x35,0xb4,0x6d,0x89,0xf5,0x17,0x16,0xeb,0x83,0xc8,0x5e,0xae,0x7e,0x98,0x18, +0xff,0x00,0x81,0x0a,0xf4,0x83,0xc0,0xaf,0x99,0x7f,0x68,0x4f,0x10,0x9d,0x5f,0xc6, +0x69,0xa7,0xa3,0x66,0x1d,0x3a,0x30,0x84,0x7f,0xd3,0x46,0xc3,0x37,0xe9,0xb4,0x7e, +0x15,0xe0,0xe7,0x78,0x9f,0xaa,0xe0,0xa6,0xd6,0xf2,0xd1,0x7c,0xff,0x00,0xe0,0x1c, +0x58,0xba,0x9e,0xce,0x93,0xf3,0x3c,0xbe,0x8a,0x28,0xaf,0xc7,0x4f,0x97,0x0a,0xf7, +0x2f,0xd9,0xaf,0xc3,0xd9,0x93,0x55,0xd6,0xa4,0x5c,0xe3,0x16,0xb1,0x1f,0xfc,0x79, +0xff,0x00,0xf6,0x5a,0xf0,0xda,0xfa,0xff,0x00,0xe1,0x77,0x87,0x8f,0x86,0x7c,0x0f, +0xa5,0x5a,0x32,0x14,0x99,0xa2,0x13,0x4c,0x0f,0x50,0xef,0xf3,0x10,0x7e,0x99,0xc7, +0xe1,0x5f,0x55,0xc3,0x98,0x6f,0x6d,0x8c,0xf6,0x8f,0x68,0x2b,0xfc,0xf6,0x47,0xa3, +0x80,0xa7,0xcf,0x57,0x9b,0xb1,0xd6,0x51,0x49,0x4b,0x5f,0xab,0x1f,0x48,0x78,0x4f, +0xed,0x35,0xa7,0x28,0x3a,0x1d,0xfa,0xaf,0xcc,0x7c,0xd8,0x5d,0xbd,0x7e,0xe9,0x5f, +0xfd,0x9b,0xf3,0xaf,0x0a,0xaf,0xa3,0xff,0x00,0x69,0x38,0x03,0xf8,0x3a,0xc2,0x5c, +0x72,0x97,0xca,0x33,0xec,0x63,0x7f,0xf0,0x15,0xf3,0x85,0x7e,0x47,0xc4,0x30,0x50, +0xcc,0x26,0xd7,0x54,0x9f,0xe0,0x7c,0xce,0x39,0x5a,0xbb,0x0a,0x28,0xa2,0xbe,0x6c, +0xe0,0x3e,0x92,0xfd,0x9b,0xef,0x84,0xfe,0x0c,0xbc,0xb6,0xce,0x5a,0x0b,0xc6,0xe3, +0xd1,0x59,0x54,0x8f,0xd7,0x35,0xeb,0x35,0xe1,0x1f,0xb3,0x1d,0xd0,0x0d,0xe2,0x0b, +0x62,0xdc,0x91,0x0c,0x8a,0xbf,0xf7,0xd8,0x27,0xf9,0x57,0xbb,0x66,0xbf,0x64,0xc9, +0x6a,0x7b,0x4c,0x05,0x27,0xd9,0x5b,0xee,0x76,0x3e,0xa7,0x09,0x2e,0x6a,0x11,0x16, +0x8a,0x28,0xaf,0x70,0xec,0x0a,0x28,0xa4,0x3d,0x28,0x03,0xc8,0x3f,0x69,0x0d,0x6f, +0xec,0x9e,0x19,0xb1,0xd3,0x11,0x80,0x7b,0xd9,0xf7,0xb0,0xf5,0x44,0xe7,0xff,0x00, +0x42,0x2b,0xf9,0x57,0xce,0x95,0xe9,0x7f,0xb4,0x06,0xb8,0x75,0x4f,0x1e,0x3d,0xa0, +0x20,0xc5,0x61,0x0a,0xc2,0x30,0x73,0xf3,0x1f,0x99,0xbf,0xf4,0x20,0x3f,0x0a,0xf3, +0x4a,0xfc,0x77,0x3b,0xaf,0xf5,0x8c,0x74,0xda,0xd9,0x69,0xf7,0x7f,0xc1,0x3e,0x5b, +0x19,0x3e,0x7a,0xcf,0xcb,0x40,0xa2,0x8a,0x2b,0xc1,0x38,0xcf,0x55,0xfd,0x9d,0x74, +0x53,0x7f,0xe3,0x2b,0x8b,0xf6,0x40,0x62,0xb1,0xb7,0x24,0x37,0xa3,0xb9,0xda,0x3f, +0x40,0xf5,0xf4,0xb5,0x79,0x2f,0xec,0xe7,0xa2,0x7d,0x87,0xc1,0xf7,0x3a,0x83,0xc6, +0x04,0x97,0xd7,0x07,0x6b,0xf7,0x31,0xa7,0xca,0x07,0xfd,0xf5,0xbf,0xf3,0xaf,0x5a, +0xaf,0xd8,0x32,0x2a,0x1e,0xc3,0x01,0x0b,0xef,0x2d,0x7e,0xff,0x00,0xf8,0x16,0x3e, +0xa3,0x07,0x0e,0x4a,0x2b,0xcf,0x50,0xa2,0x8a,0x2b,0xe8,0x0e,0xd0,0xaf,0x00,0xfd, +0xa6,0xc6,0x35,0x3d,0x04,0xf6,0x30,0xcb,0xfc,0xd6,0xbd,0xfe,0xbc,0x67,0xf6,0x97, +0xd2,0xbc,0xed,0x0f,0x49,0xd4,0x42,0x92,0x6d,0xe7,0x68,0x4e,0x07,0x00,0x3a,0xe7, +0x27,0xf1,0x41,0xf9,0xd7,0x81,0x9e,0xc1,0xcf,0x2f,0xa8,0x97,0x93,0xfc,0x4e,0x2c, +0x62,0xbd,0x09,0x1f,0x3d,0x51,0x45,0x15,0xf8,0xf1,0xf2,0xe1,0x5d,0xa7,0xc1,0xcb, +0xc4,0xb1,0xf8,0x93,0xa2,0xbb,0x9c,0x2b,0xc8,0xf1,0x7e,0x2c,0x8c,0xa3,0xf5,0x22, +0xb8,0xba,0xb1,0xa7,0xdf,0x4d,0xa5,0xdf,0xdb,0x5e,0x5b,0xb6,0xd9,0xed,0xe4,0x59, +0x50,0xfa,0x32,0x9c,0x8f,0xe5,0x5d,0x38,0x6a,0xbe,0xc2,0xbc,0x2a,0xbf,0xb2,0xd3, +0xfb,0x99,0x74,0xe5,0xc9,0x35,0x2e,0xcc,0xfb,0x88,0x52,0xd6,0x4f,0x86,0x3c,0x43, +0x6d,0xe2,0x9d,0x0e,0xcf,0x53,0xb4,0x6c,0xc5,0x70,0x81,0xb6,0xe7,0x25,0x1b,0xba, +0x9f,0x70,0x72,0x3f,0x0a,0xd6,0xaf,0xdd,0x21,0x38,0xce,0x2a,0x71,0x77,0x4c,0xfb, +0x14,0xd3,0x57,0x41,0x45,0x14,0x55,0x8c,0x28,0xa4,0xc8,0xae,0x4f,0xe2,0x2f,0x8f, +0xed,0x3c,0x07,0xa2,0xb5,0xcc,0x84,0x4b,0x7b,0x28,0x2b,0x6d,0x6d,0x9e,0x5d,0xbd, +0x4f,0xfb,0x23,0xb9,0xff,0x00,0x1a,0xc6,0xb5,0x68,0x50,0xa6,0xea,0xd4,0x76,0x48, +0x89,0x49,0x41,0x39,0x4b,0x63,0xcb,0x7f,0x68,0xdf,0x17,0x2d,0xc5,0xcd,0x9f,0x87, +0xad,0xdf,0x3e,0x41,0x17,0x37,0x38,0xec,0xc4,0x10,0x8b,0xf9,0x12,0x7f,0x11,0x5e, +0x27,0x56,0x75,0x2d,0x46,0xe3,0x56,0xbf,0x9e,0xf6,0xee,0x53,0x35,0xcc,0xee,0x64, +0x91,0xcf,0x72,0x6a,0xb5,0x7e,0x2d,0x98,0x62,0xde,0x3b,0x13,0x2a,0xcf,0xae,0xde, +0x9d,0x0f,0x94,0xaf,0x55,0xd6,0x9b,0x98,0x51,0x45,0x15,0xe7,0x18,0x16,0x74,0xcd, +0x3e,0x6d,0x5b,0x51,0xb5,0xb2,0xb6,0x5d,0xf7,0x17,0x32,0x2c,0x51,0xa9,0xe8,0x59, +0x8e,0x07,0xf3,0xaf,0xb5,0xb4,0x7d,0x3a,0x2d,0x1f,0x4a,0xb4,0xb1,0x80,0x62,0x1b, +0x68,0x96,0x14,0x1e,0xca,0x00,0x1f,0xca,0xbc,0x03,0xf6,0x78,0xf0,0x69,0xd4,0x75, +0xa9,0xb5,0xfb,0x84,0xff,0x00,0x47,0xb2,0x06,0x38,0x32,0x3e,0xf4,0xa4,0x72,0x7f, +0x05,0x3f,0x99,0xf6,0xaf,0xa2,0x87,0x4a,0xfd,0x3b,0x86,0xb0,0x8e,0x8d,0x09,0x62, +0x24,0xb5,0x9e,0xde,0x88,0xfa,0x0c,0xbe,0x97,0x2c,0x1c,0xdf,0x51,0x68,0xa4,0xcd, +0x2d,0x7d,0x91,0xea,0x88,0x46,0x6b,0x33,0x5b,0xf0,0xd6,0x97,0xe2,0x2b,0x63,0x06, +0xa5,0x61,0x05,0xec,0x7d,0x84,0xa8,0x09,0x1f,0x43,0xd4,0x7e,0x15,0xa9,0x45,0x4c, +0xa1,0x19,0xae,0x59,0x2b,0xa1,0x34,0x9a,0xb3,0x3c,0x7b,0x5f,0xfd,0x9b,0xf4,0x8b, +0xd6,0x32,0x69,0x57,0xd3,0xe9,0xac,0x4e,0x7c,0xb9,0x07,0x9d,0x18,0x1e,0x83,0x90, +0x47,0xe6,0x6b,0xce,0x35,0xdf,0x81,0x3e,0x2a,0xd1,0x81,0x78,0xad,0xa2,0xd4,0xe2, +0x19,0xf9,0xad,0x1f,0x2d,0x8e,0xdf,0x29,0xc1,0xfc,0xb3,0x5f,0x54,0x52,0x11,0x5f, +0x3d,0x88,0xc8,0x30,0x35,0xf5,0x51,0xe5,0x7e,0x5f,0xe5,0xb1,0xc3,0x3c,0x15,0x19, +0xf4,0xb7,0xa1,0xf0,0xe5,0xed,0x85,0xd6,0x9b,0x39,0x86,0xee,0xda,0x5b,0x59,0x87, +0x58,0xe6,0x42,0x8d,0xf9,0x1a,0x82,0xbe,0xdb,0xd5,0xf4,0x1d,0x3f,0x5d,0xb6,0x36, +0xfa,0x85,0x9c,0x37,0xb0,0x9f,0xe1,0x99,0x03,0x63,0xdc,0x7a,0x57,0x8b,0xfc,0x45, +0xf8,0x03,0x1d,0xbd,0xb4,0xda,0x8f,0x86,0xb7,0xe5,0x32,0xef,0x60,0xe7,0x76,0x47, +0x7d,0x84,0xf3,0x9f,0x63,0x9c,0xfa,0xf6,0xaf,0x91,0xc6,0xf0,0xe5,0x7a,0x11,0x75, +0x28,0x4b,0x9d,0x2e,0x9b,0x3f,0xf8,0x27,0x9b,0x57,0x01,0x38,0x2e,0x68,0x3b,0xa3, +0xc3,0x28,0xa0,0x8c,0x1c,0x74,0xa2,0xbe,0x40,0xf2,0xc2,0x8a,0x28,0xa0,0x0f,0x6f, +0xfd,0x9d,0xbc,0x6b,0x22,0xdc,0xcf,0xe1,0xcb,0x99,0x0b,0x46,0xca,0x67,0xb5,0xdc, +0x7e,0xe9,0x1f,0x79,0x07,0xb1,0xeb,0xf8,0x1a,0xf7,0xba,0xf8,0xf7,0xe1,0x7d,0xe3, +0xd8,0xfc,0x41,0xd0,0x64,0x8c,0xe0,0xb5,0xd2,0xc6,0x7e,0x8d,0xf2,0x9f,0xd1,0x8d, +0x7d,0x84,0x2b,0xf5,0x6e,0x1c,0xc4,0x4a,0xb6,0x13,0x92,0x6f,0xe1,0x76,0xf9,0x1f, +0x47,0x80,0xa8,0xe7,0x4a,0xcf,0xa0,0xb4,0x51,0x45,0x7d,0x51,0xe9,0x08,0x78,0xaf, +0x9f,0xbf,0x6a,0x3b,0xbd,0x96,0x51,0xc7,0x9e,0x89,0xd2,0xbe,0x81,0x35,0xf3,0x27, +0xed,0x4f,0x77,0xfe,0x90,0x23,0x07,0xf8,0x45,0x78,0x59,0xd4,0xb9,0x70,0x53,0x3c, +0xac,0xce,0x5c,0xb8,0x59,0xb3,0xe5,0x3f,0x11,0x3e,0xdb,0x19,0x4f,0xfb,0x26,0xbb, +0xef,0xf8,0x26,0x55,0x81,0xb9,0xf8,0x97,0xf1,0x53,0x53,0xed,0x0d,0xa5,0x8d,0xb0, +0x3f,0xef,0xbc,0xcd,0xff,0x00,0xb2,0x0a,0xf3,0x8f,0x16,0xc9,0xe5,0xe9,0xb3,0x9f, +0x45,0xaf,0x63,0xff,0x00,0x82,0x5b,0xdb,0x16,0xb7,0xf8,0xab,0x7d,0xb7,0x89,0x35, +0x1b,0x38,0x43,0x7a,0xec,0x8a,0x42,0x7f,0xf4,0x3a,0xf2,0xb2,0x28,0xe8,0xd9,0xf9, +0xdf,0x0d,0x47,0x9b,0x33,0x9c,0xbb,0x44,0xfb,0xb3,0x9a,0x29,0xd4,0x57,0xd9,0x1f, +0xac,0x85,0x52,0xd5,0xb5,0x28,0x74,0x9d,0x36,0xee,0xfa,0xe0,0xed,0x82,0xda,0x26, +0x99,0xcf,0xfb,0x2a,0x32,0x6a,0xed,0x78,0xaf,0xed,0x53,0xe3,0x0f,0xec,0x0f,0x87, +0xab,0xa5,0xc3,0x26,0xdb,0xad,0x5e,0x61,0x09,0x00,0xe0,0xf9,0x4b,0xf3,0x48,0x7e, +0x9f,0x75,0x7f,0xe0,0x55,0xcd,0x89,0xac,0xb0,0xf4,0x65,0x55,0xf4,0x47,0x26,0x2e, +0xba,0xc2,0xd0,0x9d,0x67,0xd1,0x1f,0x26,0x78,0x83,0x5a,0xb8,0xf1,0x6f,0x89,0x2f, +0xf5,0x4b,0x8c,0xb5,0xc5,0xf5,0xc3,0x4a,0x47,0xa6,0x4f,0x03,0xf0,0x18,0x1f,0x85, +0x7d,0xbd,0xf0,0x4b,0xc2,0x63,0xc2,0x3f,0x0f,0xf4,0xeb,0x76,0x4d,0xb3,0xcc,0x82, +0x69,0x78,0xc7,0x26,0xbe,0x43,0xf8,0x3b,0xe1,0x46,0xf1,0x77,0x8f,0x74,0xcb,0x3d, +0xbb,0xa1,0x59,0x04,0x92,0x9f,0x45,0x1c,0xd7,0xde,0xf0,0xc4,0xb0,0xc2,0x91,0xa0, +0xda,0xaa,0x00,0x03,0xda,0xbe,0x4f,0x21,0xa2,0xea,0x54,0xa9,0x89,0x9f,0xa7,0xdf, +0xab,0x3e,0x57,0x87,0xa8,0x39,0x73,0xe2,0xa7,0xbb,0xfe,0x99,0x25,0x14,0x56,0x47, +0x8b,0xfc,0x53,0xa7,0x78,0x1f,0xc2,0x9a,0xcf,0x88,0xb5,0x79,0xbe,0xcf,0xa5,0xe9, +0x36,0x73,0x5f,0x5d,0x4b,0x8c,0xec,0x8a,0x34,0x2e,0xe7,0x1d,0xf8,0x53,0x5f,0x6a, +0x7d,0xa9,0xaf,0x45,0x7e,0x2d,0xcd,0xff,0x00,0x05,0x91,0xf8,0xd2,0x35,0x2b,0x86, +0xb6,0xd1,0x7c,0x20,0xd6,0x2d,0x2b,0x18,0x22,0x9e,0xc2,0x7f,0x31,0x63,0x2c,0x76, +0xab,0x30,0x9c,0x02,0x40,0xc0,0xce,0x2b,0xf5,0x5f,0xf6,0x6a,0xf1,0xbf,0x8a,0xfe, +0x25,0x7c,0x0e,0xf0,0x8f,0x8a,0xfc,0x6b,0x65,0x63,0xa6,0xf8,0x83,0x5a,0xb3,0x5b, +0xf9,0x2d,0x34,0xe4,0x74,0x8a,0x38,0xa4,0x25,0xa1,0xe1,0xd9,0x8e,0x4c,0x65,0x09, +0xc9,0xea,0x48,0xa0,0x49,0xdc,0xf9,0xef,0xfe,0x0a,0xb9,0xf1,0xa3,0xfe,0x15,0x97, +0xec,0xc9,0x73,0xe1,0xfb,0x39,0x8c,0x7a,0xb7,0x8c,0x6e,0x06,0x96,0x81,0x7a,0x8b, +0x60,0x37,0xdc,0x1f,0xa1,0x50,0x13,0xfe,0xda,0x57,0xe2,0x00,0xd4,0x6e,0xc5,0xab, +0xdb,0x0b,0xa9,0x85,0xb3,0xfd,0xe8,0x44,0x87,0x63,0x73,0x9e,0x47,0x4e,0xa2,0xbf, +0xa2,0x9f,0x8f,0x5f,0xb2,0x2f,0xc3,0x3f,0xda,0x5e,0xfb,0x4b,0xbc,0xf1,0xf6,0x95, +0x77,0xaa,0xcd,0xa6,0x44,0xf0,0xda,0x79,0x3a,0x8c,0xd6,0xeb,0x12,0xb1,0xcb,0x7c, +0xa8,0xc0,0x12,0x48,0x19,0x24,0x67,0x81,0xe9,0x5e,0x33,0x7d,0xff,0x00,0x04,0x93, +0xfd,0x9e,0xae,0xff,0x00,0xd5,0x69,0x5a,0xed,0x97,0xfd,0x70,0xd6,0x24,0x3f,0xfa, +0x1e,0xea,0x62,0x6a,0xe7,0xe1,0xa7,0x34,0xf8,0x66,0x92,0xde,0x41,0x24,0x4e,0xd1, +0x48,0x3a,0x32,0x1c,0x11,0xf8,0xd7,0xed,0x36,0xa9,0xff,0x00,0x04,0x70,0xf8,0x23, +0x78,0xa7,0xec,0x9a,0xb7,0x8b,0xb4,0xf2,0x7b,0xa5,0xfc,0x2f,0x8f,0xfb,0xea,0x13, +0x5c,0x9d,0xff,0x00,0xfc,0x11,0x47,0xe1,0xf4,0xad,0xfe,0x85,0xf1,0x0f,0xc4,0xd6, +0xe3,0xd2,0xe2,0xde,0xde,0x5f,0xe4,0xab,0x4e,0xe2,0xb3,0x3f,0x28,0xad,0x3e,0x21, +0xf8,0xaa,0xc3,0x02,0xd7,0xc4,0xda,0xc5,0xb6,0x3a,0x08,0x6f,0xe5,0x4c,0x7e,0x4d, +0x5f,0xb1,0x9f,0xf0,0x49,0x2f,0x0c,0x78,0x9e,0x4f,0x82,0x3a,0xbf,0x8e,0x7c,0x53, +0xae,0xea,0xda,0xcc,0xbe,0x20,0xbe,0xf2,0x74,0xf4,0xd4,0xef,0x25,0x9c,0x43,0x6d, +0x06,0x54,0xb2,0x07,0x63,0x8d,0xf2,0x17,0xe9,0xd7,0x60,0xaf,0x36,0xbe,0xff,0x00, +0x82,0x23,0xe8,0x0e,0xa7,0xec,0x9f,0x15,0xb5,0x28,0x4f,0xfd,0x36,0xd1,0xa3,0x93, +0xf9,0x4c,0xb5,0xfa,0x0f,0xf0,0x97,0xe1,0xbe,0x9f,0xf0,0x87,0xe1,0x9f,0x86,0x7c, +0x19,0xa5,0xb6,0xfb,0x1d,0x12,0xc2,0x2b,0x28,0xe5,0x2b,0xb4,0xc9,0xb5,0x70,0xce, +0x47,0x38,0x2c,0xd9,0x63,0xcf,0x52,0x69,0x31,0xa4,0xce,0x8f,0x55,0xd4,0x62,0xd2, +0x74,0xdb,0xab,0xd9,0xdb,0x6c,0x36,0xf1,0x34,0xae,0x7d,0x94,0x64,0xd7,0xc5,0x5a, +0xb6,0xa5,0x2e,0xb1,0xaa,0x5d,0xdf,0x4e,0x73,0x35,0xcc,0xad,0x2b,0x7d,0x49,0xcd, +0x7d,0x6b,0xf1,0x2b,0xc3,0xba,0x97,0x8a,0xfc,0x29,0x73,0xa5,0x69,0x93,0x41,0x04, +0xd7,0x0c,0xa1,0xde,0x76,0x65,0x1b,0x01,0xc9,0x03,0x00,0xf2,0x70,0x07,0xd0,0x9a, +0xf1,0x39,0x7f,0x67,0x2f,0x13,0xa2,0x92,0xb7,0x3a,0x6c,0x87,0xd1,0x66,0x70,0x7f, +0x54,0xaf,0x85,0xe2,0x1a,0x18,0xbc,0x5c,0xe1,0x0a,0x34,0xdb,0x8a,0xd7,0x4e,0xe7, +0x93,0x8e,0x85,0x5a,0x8d,0x46,0x11,0xba,0x47,0x95,0xd1,0x5e,0x87,0x3f,0xc0,0x5f, +0x18,0xc2,0x7e,0x5b,0x18,0x26,0xf7,0x4b,0x84,0xfe,0xa4,0x55,0x39,0x3e,0x0a,0x78, +0xd2,0x3c,0x9f,0xec,0x46,0x61,0xfe,0xcd,0xc4,0x47,0xff,0x00,0x66,0xaf,0x89,0x79, +0x6e,0x36,0x3b,0xd2,0x97,0xdc,0xcf,0x25,0xd0,0xaa,0xbe,0xcb,0x32,0xfe,0x1d,0xf8, +0x7b,0xfe,0x12,0x8f,0x19,0xe9,0x76,0x0c,0x81,0xe1,0x69,0x44,0x92,0x83,0xd3,0xcb, +0x5f,0x99,0x87,0xe2,0x06,0x3f,0x1a,0xfb,0x1c,0x70,0x05,0x78,0xcf,0xc0,0xaf,0x87, +0x5a,0x9f,0x86,0x75,0x2d,0x47,0x51,0xd6,0x2c,0x9a,0xd2,0x7d,0x82,0x08,0x55,0xc8, +0x24,0x82,0x72,0xc7,0x82,0x7d,0x14,0x7e,0x75,0xec,0xd5,0xfa,0x37,0x0f,0x61,0x25, +0x86,0xc2,0xb9,0x54,0x56,0x94,0x9f,0xe5,0xa2,0x3d,0xdc,0x0d,0x27,0x4e,0x9d,0xda, +0xd5,0x8b,0x45,0x14,0x57,0xd4,0x9e,0x89,0xe6,0x1f,0xb4,0x3c,0x7e,0x67,0xc3,0xfc, +0xff,0x00,0x72,0xee,0x36,0xfd,0x18,0x7f,0x5a,0xf9,0x8e,0xbe,0xa7,0xf8,0xf7,0x1e, +0xff,0x00,0x86,0xb7,0xed,0xfd,0xc9,0x61,0x6f,0xfc,0x88,0x07,0xf5,0xaf,0x96,0x33, +0x5f,0x96,0x71,0x32,0xb6,0x35,0x3f,0xee,0xaf,0xcd,0x9f,0x3b,0x98,0x2f,0xde,0xdf, +0xc8,0x28,0xa2,0x8a,0xf9,0x23,0xcc,0x3d,0x5f,0xf6,0x6f,0xb9,0x31,0xf8,0xd6,0xf2, +0x1c,0xe1,0x64,0xb1,0x63,0x8f,0x52,0x1d,0x3f,0xc4,0xd7,0xd2,0x63,0xad,0x7c,0xa1, +0xf0,0x42,0xf1,0xad,0x3e,0x25,0x69,0x4a,0xa7,0x0b,0x30,0x96,0x26,0xfa,0x79,0x6c, +0x7f,0x98,0x15,0xf5,0x78,0xaf,0xd5,0x38,0x6a,0x7c,0xd8,0x2e,0x5e,0xcd,0xff,0x00, +0x99,0xf4,0x78,0x07,0x7a,0x36,0xec,0xc5,0xa2,0x8a,0x2b,0xeb,0x0f,0x48,0x2a,0x3b, +0x89,0xd2,0xda,0x09,0x25,0x91,0x82,0x47,0x1a,0x96,0x66,0x27,0x80,0x00,0xe4,0xd3, +0xcd,0x70,0xff,0x00,0x19,0xb5,0xcf,0xec,0x4f,0x87,0xba,0xa1,0x5c,0x79,0xb7,0x4a, +0x2d,0x14,0x1e,0xfb,0xf8,0x6f,0xfc,0x77,0x71,0xfc,0x2b,0x9f,0x11,0x59,0x50,0xa3, +0x3a,0xaf,0xa2,0x6c,0x89,0xcb,0x92,0x2e,0x5d,0x8f,0x96,0xb5,0xbd,0x56,0x4d,0x73, +0x59,0xbe,0xd4,0x65,0x1b,0x64,0xba,0x9d,0xe6,0x2b,0xfd,0xdd,0xc4,0x9c,0x7e,0x15, +0x4a,0x8a,0x2b,0xf0,0x99,0xc9,0xce,0x4e,0x4f,0x76,0x7c,0x73,0x77,0x77,0x61,0x40, +0x04,0x90,0x07,0x24,0xd1,0x5d,0x17,0xc3,0xcd,0x1b,0xfb,0x7f,0xc6,0xda,0x3d,0x91, +0x5d,0xc8,0xf7,0x0a,0xee,0x3d,0x51,0x7e,0x66,0xfd,0x14,0xd5,0xd1,0xa6,0xeb,0x54, +0x8d,0x35,0xbb,0x69,0x0e,0x31,0x72,0x92,0x8a,0xea,0x7d,0x59,0xe0,0x9d,0x10,0x78, +0x77,0xc2,0x7a,0x56,0x9e,0x17,0x6b,0x43,0x6e,0x81,0xc7,0xfb,0x64,0x65,0xbf,0x52, +0x6b,0x76,0x90,0x74,0x18,0xe9,0x4b,0x5f,0xbb,0xd3,0x82,0xa7,0x05,0x05,0xb2,0x56, +0x3e,0xc6,0x2b,0x95,0x24,0x82,0x8a,0x28,0xad,0x0a,0x0a,0xc0,0xf1,0xcf,0x86,0x93, +0xc5,0xde,0x16,0xd4,0x34,0xb6,0x21,0x5a,0x78,0xff,0x00,0x76,0xc7,0xa2,0xc8,0x0e, +0x54,0x9f,0x6c,0x81,0x5b,0xf4,0x86,0xb3,0xa9,0x08,0xd5,0x83,0x84,0xb6,0x7a,0x0a, +0x49,0x49,0x38,0xbe,0xa7,0xc3,0x57,0x56,0xb2,0xd9,0x5c,0xcb,0x6f,0x3c,0x6d,0x14, +0xd1,0x39,0x8d,0xd1,0x86,0x0a,0xb0,0x38,0x20,0xd4,0x55,0xf4,0x07,0xc6,0xef,0x85, +0x32,0xea,0x8c,0xfe,0x20,0xd1,0xe1,0x32,0x5d,0x01,0x9b,0xab,0x64,0x1c,0xc8,0x07, +0xf1,0xa8,0xee,0x40,0xea,0x3b,0x8f,0x7e,0xbf,0x3f,0xd7,0xe2,0xd9,0x86,0x06,0xa6, +0x02,0xb3,0xa7,0x3d,0xba,0x3e,0xeb,0xfa,0xdc,0xf9,0x3a,0xf4,0x65,0x46,0x7c,0xac, +0x28,0xa2,0x8a,0xf3,0x0e,0x73,0xb3,0xf8,0x73,0xf1,0x3a,0xfb,0xe1,0xf5,0xe3,0x04, +0x43,0x77,0xa7,0x4a,0x73,0x35,0xab,0x1c,0x73,0xfd,0xe5,0x3d,0x8f,0xf3,0xfc,0xb1, +0xf4,0x3f,0x86,0xbe,0x2b,0xf8,0x67,0xc4,0xd1,0x21,0x87,0x52,0x8a,0xd6,0x72,0x39, +0xb7,0xbb,0x61,0x13,0x83,0xe9,0xc9,0xc1,0xfc,0x09,0xaf,0x91,0x68,0xaf,0xa1,0xcb, +0xf3,0xbc,0x46,0x02,0x3e,0xcd,0x7b,0xd1,0xec,0xfa,0x7a,0x33,0xba,0x8e,0x2e,0xa5, +0x15,0xcb,0xba,0x3e,0xe7,0x8e,0xe2,0x29,0x90,0x3c,0x72,0x23,0xa1,0xe8,0xca,0xc0, +0x83,0x54,0xf5,0x0d,0x7f,0x4c,0xd2,0x50,0xb5,0xee,0xa1,0x6b,0x68,0xa3,0xbc,0xd3, +0x2a,0xff,0x00,0x33,0x5f,0x13,0x2c,0x8e,0x83,0x0a,0xcc,0xa3,0xd8,0xe2,0x9a,0x79, +0x39,0x27,0x27,0xde,0xbd,0xd7,0xc5,0x52,0xb7,0xbb,0x47,0x5f,0x5f,0xf8,0x07,0x67, +0xf6,0x93,0xe9,0x1f,0xc7,0xfe,0x01,0xf4,0x6f,0x8c,0x7f,0x68,0x5d,0x2b,0x4c,0x89, +0xe1,0xd0,0xe3,0x3a,0xa5,0xd9,0xc8,0x13,0x30,0x29,0x0a,0x7e,0x7c,0xb7,0xe1,0xc1, +0xf5,0xaf,0x03,0xd7,0xbc,0x41,0x7f,0xe2,0x6d,0x4a,0x5b,0xfd,0x46,0xe1,0xae,0x6e, +0x64,0xea,0xcd,0xd0,0x0e,0xc0,0x0e,0xc0,0x7a,0x0a,0xce,0xa2,0xbe,0x5f,0x1d,0x9a, +0x62,0x71,0xef,0xf7,0xaf,0x4e,0xcb,0x63,0xce,0xad,0x88,0xa9,0x5b,0xe2,0xd8,0x28, +0xa2,0x8a,0xf2,0x4e,0x60,0xad,0x8f,0x09,0xf8,0x5e,0xf7,0xc6,0x1a,0xe5,0xbe,0x9b, +0x62,0x84,0xc9,0x21,0xcb,0xc8,0x47,0xcb,0x1a,0x7f,0x13,0x1f,0x61,0xfa,0x9c,0x0e, +0xf4,0x78,0x5f,0xc2,0x9a,0x97,0x8c,0x35,0x44,0xb1,0xd3,0x60,0x32,0xc8,0x7e,0xfb, +0x9c,0x84,0x89,0x7f,0xbc,0xc7,0xb0,0xfd,0x7d,0x33,0x5f,0x54,0x7c,0x3e,0xf8,0x7f, +0x63,0xe0,0x2d,0x24,0x41,0x6e,0x04,0xd7,0x72,0x00,0x6e,0x2e,0x98,0x61,0xa4,0x3f, +0xd0,0x0e,0xc2,0xbe,0x8b,0x29,0xca,0x67,0x8f,0xa8,0xa7,0x35,0x6a,0x6b,0x77,0xdf, +0xc9,0x1d,0xb8,0x6c,0x34,0xab,0xca,0xef,0xe1,0x35,0xbc,0x35,0xe1,0xeb,0x5f,0x0b, +0x68,0xb6,0xba,0x65,0x92,0x95,0x82,0x04,0xda,0x09,0xea,0xc7,0xbb,0x1f,0x72,0x72, +0x7f,0x1a,0xd4,0x14,0x52,0xd7,0xeb,0x70,0x84,0x69,0xc5,0x46,0x2a,0xc9,0x1f,0x4e, +0x92,0x4a,0xc8,0xc7,0xf1,0x4f,0x8a,0x6c,0x7c,0x21,0xa5,0x9d,0x43,0x51,0x76,0x4b, +0x60,0xe9,0x19,0x28,0xbb,0x8e,0x58,0xe3,0xa7,0xb7,0x5e,0x39,0xc0,0xa9,0x74,0x3f, +0x12,0x69,0x9e,0x23,0xb5,0x17,0x1a,0x6d,0xf4,0x37,0x91,0x11,0x92,0x62,0x6c,0x95, +0xfa,0x8e,0xa0,0xfb,0x1a,0xf1,0xdf,0xda,0x5f,0x5d,0xf9,0x74,0x8d,0x1d,0x1b,0xae, +0xeb,0xa9,0x00,0x3f,0xf0,0x15,0xff,0x00,0xd9,0xab,0xc4,0x2c,0xaf,0xee,0x74,0xeb, +0x85,0x9e,0xd2,0xe2,0x5b,0x69,0xd7,0xee,0xc9,0x0b,0x94,0x61,0xf8,0x8a,0xf8,0xec, +0x77,0x10,0x3c,0x16,0x32,0x54,0x79,0x79,0xa2,0xad,0xeb,0x73,0xcb,0xad,0x8d,0xf6, +0x55,0x5c,0x6d,0x74,0x7d,0xc7,0x9a,0x5a,0xf9,0x63,0x44,0xf8,0xf1,0xe2,0xbd,0x1c, +0x2a,0x4d,0x71,0x16,0xa7,0x10,0xfe,0x1b,0xa8,0xf2,0xd8,0xff,0x00,0x79,0x70,0x7f, +0x3c,0xd7,0x6f,0xa6,0x7e,0xd3,0x36,0xcc,0x48,0xd4,0x34,0x39,0xa2,0x03,0xf8,0xad, +0xa6,0x0f,0x93,0xf4,0x60,0xbf,0xce,0xbb,0xe8,0xf1,0x0e,0x06,0xaa,0xf7,0xa4,0xe2, +0xfc,0xd7,0xf9,0x5c,0xda,0x18,0xea,0x32,0xdd,0xd8,0xf6,0xfc,0xd1,0x9a,0xf3,0x1b, +0x0f,0xda,0x1f,0xc2,0xb7,0x6a,0x0c,0xdf,0x6d,0xb1,0x3e,0x93,0x41,0x9f,0xfd,0x00, +0xb5,0x5f,0x5f,0x8e,0xbe,0x0b,0x23,0xfe,0x42,0xce,0x3e,0xb6,0xb2,0xff,0x00,0xf1, +0x35,0xe9,0x47,0x33,0xc1,0x4b,0x6a,0xb1,0xfb,0xcd,0xd6,0x22,0x93,0xda,0x48,0xef, +0xe9,0x1d,0x82,0xa1,0x24,0x80,0x31,0xce,0x6b,0xcd,0xaf,0xff,0x00,0x68,0x1f,0x09, +0x5a,0xc2,0xcd,0x0c,0xd7,0x37,0xcc,0x3f,0x82,0x1b,0x76,0x52,0x7f,0xef,0xbd,0xa3, +0xf5,0xaf,0x35,0xf1,0xe7,0xc7,0xab,0xef,0x12,0x5a,0x4d,0xa7,0xe9,0x36,0xe7,0x4c, +0xb2,0x94,0x15,0x92,0x56,0x6c,0xcc,0xeb,0xe9,0xc7,0x0b,0xef,0x8c,0xfd,0x6b,0x93, +0x13,0x9d,0xe0,0xa8,0x41,0xb5,0x35,0x27,0xd9,0x6a,0x67,0x53,0x17,0x4a,0x0a,0xf7, +0xb9,0xe7,0xbe,0x28,0x96,0x0b,0x8f,0x12,0xea,0xd2,0xda,0xe3,0xec,0xcf,0x77,0x2b, +0x45,0xb7,0xa6,0xd2,0xe4,0x8c,0x7e,0x15,0x97,0x45,0x15,0xf9,0x04,0xe5,0xcf,0x37, +0x2e,0xee,0xe7,0xcb,0xb7,0x77,0x70,0xa2,0x8a,0x2a,0x04,0x75,0xff,0x00,0x08,0xf4, +0xf6,0xd4,0xbe,0x22,0xe8,0x88,0x01,0xc4,0x73,0x79,0xc4,0x8e,0xc1,0x14,0xb7,0xf4, +0xaf,0xae,0xc7,0x4a,0xf0,0x7f,0xd9,0xbf,0xc2,0xac,0x64,0xbe,0xf1,0x04,0xc9,0x85, +0xdb,0xf6,0x6b,0x72,0x47,0x5e,0xee,0x7f,0x40,0x3f,0x3a,0xf7,0x81,0xd2,0xbf,0x57, +0xe1,0xcc,0x3b,0xa3,0x82,0xe7,0x97,0xda,0x77,0xf9,0x74,0x3e,0x93,0x03,0x07,0x1a, +0x57,0x7d,0x45,0xa2,0x8a,0x2b,0xea,0x4f,0x44,0x69,0xaf,0x92,0xff,0x00,0x69,0xfb, +0xbf,0x33,0x5a,0x74,0xce,0x70,0xd5,0xf5,0xab,0x74,0xaf,0x8c,0x7f,0x68,0xdb,0xbf, +0x3b,0xc4,0xb2,0x8c,0xff,0x00,0x19,0xaf,0x99,0xcf,0xdd,0xb0,0xb6,0xee,0xd1,0xe0, +0x67,0x72,0xe5,0xc2,0x48,0xf9,0xcb,0xc7,0x32,0xec,0xd2,0x67,0x3d,0x3e,0x5a,0xfa, +0x47,0xfe,0x09,0x79,0xa6,0x88,0x7e,0x0f,0xf8,0xbb,0x50,0xc7,0xcd,0x77,0xe2,0x39, +0x57,0x38,0xec,0x90,0x42,0x07,0xea,0x4d,0x7c,0xc3,0xf1,0x1e,0x5f,0x2f,0x46,0x9c, +0xe7,0xb1,0xfe,0x55,0xf5,0xff,0x00,0xfc,0x13,0x53,0x4f,0x36,0x9f,0xb3,0x2c,0x17, +0x24,0x63,0xed,0xda,0xcd,0xf5,0xc0,0x3e,0xb8,0x93,0xcb,0xff,0x00,0xda,0x75,0x9e, +0x47,0x1b,0x53,0xb9,0xf1,0xbc,0x27,0x1b,0xe2,0xeb,0xcf,0xc9,0x1f,0x55,0x51,0x45, +0x15,0xf5,0x47,0xea,0x21,0x5f,0x13,0x7e,0xd3,0x3e,0x2f,0x3e,0x27,0xf8,0x9b,0x71, +0x68,0x8e,0x4d,0xa6,0x92,0x9f,0x64,0x41,0xdb,0x7f,0x59,0x0f,0xe7,0x81,0xff,0x00, +0x01,0xaf,0xae,0xbc,0x73,0xe2,0x68,0x7c,0x1d,0xe1,0x2d,0x57,0x59,0x9b,0x1b,0x6c, +0xe0,0x69,0x14,0x1f,0xe2,0x7c,0x61,0x57,0xf1,0x62,0x07,0xe3,0x5f,0x9f,0x28,0x2e, +0x75,0xcd,0x57,0x74,0x8c,0xd3,0x5d,0x5d,0xcc,0x59,0x98,0xf2,0x59,0xd9,0xb2,0x4f, +0xe6,0x6b,0xe4,0xb8,0x83,0x11,0xcb,0x4e,0x34,0x23,0xbb,0xd7,0xfa,0xf9,0x9f,0x1b, +0xc4,0x58,0x87,0xc9,0x0c,0x34,0x77,0x93,0xbb,0xf4,0xff,0x00,0x87,0x3e,0x96,0xfd, +0x92,0x7c,0x1f,0xe4,0xd9,0xdf,0x6b,0xf2,0xa6,0x0c,0x87,0xc9,0x88,0x91,0xdb,0xb9, +0xaf,0xa3,0xeb,0x97,0xf8,0x6f,0xe1,0xa4,0xf0,0x97,0x83,0x74,0xcd,0x39,0x54,0x2b, +0x47,0x10,0x2f,0x8e,0xec,0x7a,0xd7,0x51,0x5e,0xde,0x5d,0x87,0xfa,0xb6,0x1a,0x14, +0xfa,0xf5,0xf5,0x3e,0x8f,0x03,0x87,0x58,0x5c,0x3c,0x29,0x76,0x41,0x5f,0x0c,0x7f, +0xc1,0x5c,0xbe,0x35,0x9f,0x87,0x7f,0xb3,0xbc,0x3e,0x0f,0xb2,0x9b,0xcb,0xd5,0x3c, +0x65,0x75,0xf6,0x56,0xda,0xd8,0x65,0xb4,0x88,0xac,0x93,0x1f,0x70,0xc7,0xcb,0x42, +0x3b,0x87,0x6f,0x4a,0xfb,0x9e,0xbf,0x23,0xff,0x00,0xe0,0xb6,0x56,0x5a,0x90,0xf8, +0x89,0xf0,0xd6,0xf2,0x48,0xdc,0xe9,0x07,0x4a,0xb9,0x8a,0x17,0xc7,0xc8,0x26,0x13, +0x29,0x90,0x7d,0x76,0x98,0xff,0x00,0x2a,0xf4,0xd1,0xdc,0xcf,0x86,0xbf,0x67,0xbf, +0x04,0xe9,0xbf,0x12,0x7e,0x39,0x78,0x17,0xc3,0x3a,0xcd,0xe4,0x76,0x1a,0x56,0xa9, +0xac,0x5b,0xdb,0x5d,0x4f,0x2b,0x05,0x51,0x19,0x71,0xb8,0x64,0xf7,0x61,0xf2,0x8f, +0x72,0x2b,0xfa,0x16,0xf8,0xcd,0xf1,0x1b,0x4e,0xf8,0x1d,0xf0,0x6f,0xc5,0x1e,0x2e, +0x9e,0x38,0xe3,0xb4,0xd0,0x34,0xc9,0x27,0x86,0xd9,0x70,0x81,0xdd,0x53,0x11,0x44, +0xbd,0x86,0xe6,0xda,0xa0,0x7b,0xd7,0xf3,0x4e,0xac,0x51,0x83,0x29,0x2a,0xc0,0xe4, +0x11,0xd4,0x57,0x5f,0xaa,0xfc,0x62,0xf1,0xde,0xbb,0xe1,0x97,0xf0,0xee,0xa7,0xe3, +0x2d,0x7b,0x51,0xd0,0x5f,0x6e,0xed,0x32,0xeb,0x52,0x9a,0x5b,0x73,0xb4,0x86,0x5c, +0xc6,0xcc,0x47,0x04,0x02,0x38,0xe3,0x14,0xc8,0x4e,0xc7,0x77,0xe1,0x9f,0xda,0x7f, +0xe3,0xb6,0xb5,0xe2,0xab,0x6b,0x5d,0x23,0xe2,0x6f,0x8b,0x5b,0x55,0xd5,0x2f,0x16, +0x28,0xa1,0x4d,0x5a,0x72,0xad,0x2c,0x8f,0x85,0x01,0x4b,0x60,0x0c,0xb7,0x40,0x31, +0x5f,0xd0,0x5f,0xc3,0xcd,0x07,0x50,0xf0,0xbf,0x81,0x74,0x0d,0x27,0x55,0xd4,0xae, +0x35,0x9d,0x52,0xce,0xc6,0x18,0x6f,0x35,0x0b,0xa9,0x0c,0x92,0x5c,0xcc,0x10,0x79, +0x92,0x33,0x1e,0x4e,0x5b,0x26,0xbf,0x99,0xff,0x00,0x09,0xf8,0xaf,0x55,0xf0,0x37, +0x89,0x34,0xed,0x7f,0x43,0xbc,0x6d,0x3f,0x58,0xd3,0xa7,0x5b,0x9b,0x5b,0xa4,0x55, +0x66,0x8a,0x45,0x39,0x56,0x01,0x81,0x19,0x1e,0xe2,0xbe,0x84,0xd3,0x3f,0xe0,0xa5, +0x1f,0xb4,0x76,0x95,0xf7,0x3e,0x24,0x5c,0x4e,0x3d,0x2e,0xb4,0xfb,0x49,0x7f,0xf4, +0x28,0x8d,0x0c,0x69,0x9f,0xbf,0xd4,0x57,0xe1,0x66,0x99,0xff,0x00,0x05,0x62,0xfd, +0xa1,0xec,0x17,0x12,0xeb,0xda,0x46,0xa1,0xef,0x73,0xa4,0x42,0x3f,0xf4,0x00,0xb5, +0xbf,0x63,0xff,0x00,0x05,0x87,0xf8,0xed,0x6b,0x81,0x35,0x9f,0x84,0xaf,0x3f,0xeb, +0xae,0x99,0x2a,0x9f,0xfc,0x76,0x61,0x4a,0xc5,0x5d,0x1f,0xb6,0x94,0x57,0x86,0xfe, +0xc6,0x7f,0x16,0x3c,0x69,0xf1,0xc7,0xe0,0x3e,0x8b,0xe3,0x8f,0x1c,0x58,0xe9,0xba, +0x6e,0xa3,0xac,0x49,0x2c,0xd6,0xb6,0xfa,0x64,0x4f,0x1c,0x7f,0x66,0x0d,0xb5,0x18, +0x87,0x76,0x39,0x62,0xac,0x7a,0xe3,0x05,0x7f,0x1f,0x4a,0xf8,0xa1,0xe3,0xfd,0x3f, +0xe1,0x67,0xc3,0xbf,0x12,0x78,0xbf,0x54,0x60,0x2c,0x34,0x4b,0x09,0xaf,0xa5,0x05, +0xb1,0xbf,0x62,0x92,0x14,0x7b,0xb1,0xc2,0x8f,0x72,0x29,0x0c,0xea,0x28,0xaf,0xcb, +0xad,0x3b,0xfe,0x0b,0x77,0x64,0x42,0x8b,0xef,0x84,0xd3,0xab,0x77,0xfb,0x3e,0xb8, +0x0f,0xf3,0x80,0x57,0x61,0xa5,0x7f,0xc1,0x6a,0xfe,0x1b,0xcb,0x1e,0x75,0x2f,0x00, +0x78,0xa6,0xd2,0x4f,0xee,0xda,0xbd,0xb4,0xe3,0xf3,0x69,0x13,0xf9,0x53,0xb0,0xae, +0x8f,0xd1,0x5a,0x2b,0xe0,0x5b,0x4f,0xf8,0x2c,0xef,0xc1,0x89,0xb1,0xe7,0x78,0x6b, +0xc6,0xb6,0xe7,0xd3,0xec,0x56,0xad,0xfc,0xae,0x2b,0xab,0xd1,0xbf,0xe0,0xad,0xdf, +0xb3,0xe6,0xa6,0xa0,0xdd,0x6a,0x9a,0xee,0x90,0x7d,0x2f,0x34,0x89,0x1b,0x1f,0xf7, +0xe8,0xbd,0x01,0x74,0x7d,0x9f,0x45,0x7c,0xa7,0x69,0xff,0x00,0x05,0x44,0xfd,0x9b, +0x6e,0x80,0x27,0xe2,0x04,0x90,0x67,0xfe,0x7a,0xe8,0xb7,0xe3,0xf9,0x42,0x6b,0xa6, +0xd2,0xff,0x00,0xe0,0xa0,0xbf,0xb3,0xce,0xae,0x14,0xc3,0xf1,0x4f,0x46,0x8b,0x77, +0x41,0x74,0xb3,0x40,0x7f,0xf1,0xf4,0x14,0x87,0x73,0xe8,0x6a,0x2b,0xc9,0xf4,0xff, +0x00,0xda,0xcb,0xe0,0xb6,0xa8,0xa1,0xad,0xfe,0x2b,0xf8,0x35,0x81,0xec,0xfa,0xe5, +0xba,0x1f,0xc9,0x9c,0x56,0xfd,0x97,0xc7,0x5f,0x86,0xda,0x96,0x3e,0xc9,0xf1,0x07, +0xc2,0xd7,0x39,0xe9,0xe5,0x6b,0x56,0xcd,0x9f,0xc9,0xe8,0x03,0xb4,0x9a,0x08,0xe7, +0x52,0x92,0x22,0xc8,0x87,0xaa,0xb0,0xc8,0x3f,0x85,0x50,0x9f,0xc3,0x3a,0x3d,0xcf, +0xfa,0xed,0x2e,0xce,0x5f,0xf7,0xed,0xd0,0xff,0x00,0x4a,0x76,0x9f,0xe2,0x4d,0x27, +0x56,0x8c,0x49,0x63,0xa9,0xd9,0x5e,0xc6,0x79,0x0d,0x6f,0x70,0x92,0x03,0xf9,0x13, +0x5a,0x0a,0xe1,0x86,0x41,0x04,0x7a,0x83,0x51,0x28,0x46,0x5f,0x12,0xb8,0x9a,0x4f, +0x74,0x73,0xf3,0x7c,0x3c,0xf0,0xc5,0xc7,0x32,0x78,0x7f,0x4e,0x3f,0xf6,0xea,0x83, +0xfa,0x55,0x49,0x7e,0x15,0x78,0x46,0x51,0xce,0x81,0x66,0xbf,0xee,0x47,0xb7,0xf9, +0x57,0x59,0x9a,0x5a,0xc2,0x58,0x5a,0x12,0xde,0x0b,0xee,0x44,0x3a,0x70,0x7b,0xc5, +0x1c,0x8e,0x9d,0xf0,0xaf,0xc2,0xfa,0x4e,0xa5,0x6f,0x7f,0x65,0xa5,0xad,0xbd,0xd4, +0x0d,0xba,0x37,0x49,0x5f,0x83,0xd3,0xa6,0x71,0x5d,0x68,0xeb,0x4b,0x45,0x69,0x4e, +0x8d,0x3a,0x2a,0xd4,0xe2,0x92,0xf2,0x2a,0x31,0x8c,0x34,0x8a,0xb0,0x51,0x45,0x15, +0xb1,0x42,0x1a,0xe2,0x7e,0x28,0x7c,0x3c,0x9b,0xe2,0x1d,0x85,0x9d,0xaa,0x6a,0x22, +0xc2,0x3b,0x79,0x0c,0xa5,0x4c,0x3e,0x66,0xf6,0xc6,0x07,0xf1,0x0c,0x63,0x27,0xd7, +0xad,0x76,0xf4,0x56,0x15,0xe8,0x43,0x13,0x4d,0xd2,0xa8,0xaf,0x17,0xb9,0x13,0x82, +0xa9,0x17,0x19,0x6c,0x7c,0xf5,0x37,0xec,0xcd,0xaa,0x2e,0x7c,0x9d,0x66,0xd1,0xff, +0x00,0xdf,0x8d,0x97,0xfc,0x6a,0x93,0xfe,0xcd,0xbe,0x23,0x19,0xd9,0x7d,0xa6,0xb7, +0xd6,0x49,0x07,0xfe,0xc9,0x5f,0x49,0x51,0x5e,0x0b,0xe1,0xdc,0xbd,0xfd,0x97,0xf7, +0xb3,0x8d,0xe0,0x68,0xbe,0x9f,0x89,0xf3,0x1c,0xff,0x00,0xb3,0xbf,0x8a,0xa2,0x52, +0x55,0xf4,0xf9,0x88,0xfe,0x14,0x9c,0x8f,0xe6,0xa2,0xbb,0x0f,0x83,0x7f,0x0a,0xb5, +0x8f,0x0a,0x78,0x9a,0x7d,0x4b,0x57,0x82,0x38,0x55,0x20,0x31,0xc3,0xb6,0x45,0x7d, +0xcc,0xc4,0x64,0xf0,0x78,0xc0,0x18,0xfc,0x6b,0xdb,0x28,0xaa,0xa1,0x90,0xe1,0x30, +0xd5,0x63,0x5a,0x17,0xbc,0x7c,0xc2,0x18,0x2a,0x54,0xe4,0xa4,0xaf,0xa0,0x51,0x45, +0x15,0xf4,0x67,0x78,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x87,0x9a,0xf2,0xef, +0x88,0x7f,0x03,0xac,0x3c,0x55,0x24,0x97,0xda,0x63,0xa6,0x9b,0xa9,0xb6,0x59,0xb8, +0xfd,0xd4,0xc7,0xd5,0x80,0xe8,0x7d,0xc7,0xe4,0x6b,0xd4,0xa8,0xae,0x4c,0x4e,0x16, +0x8e,0x2e,0x1e,0xce,0xb4,0x6e,0x8c,0xea,0x53,0x8d,0x55,0xcb,0x35,0x73,0xe3,0x1f, +0x13,0x78,0x1f,0x5b,0xf0,0x84,0xc5,0x35,0x4b,0x09,0x20,0x8f,0x38,0x13,0xaf,0xcd, +0x13,0x7d,0x18,0x71,0xf8,0x75,0xf6,0xac,0x2a,0xfb,0x9e,0x68,0x52,0x78,0xca,0x48, +0xaa,0xe8,0x78,0x2a,0xc3,0x20,0xd7,0x15,0xae,0x7c,0x18,0xf0,0x9e,0xb8,0x59,0xdf, +0x4d,0x5b,0x49,0x4f,0xfc,0xb4,0xb3,0x6f,0x2b,0xf4,0x1f,0x2f,0xe9,0x5f,0x0f,0x8a, +0xe1,0x79,0x5e,0xf8,0x69,0xfc,0x9f,0xf9,0xa3,0xc7,0xa9,0x97,0x3d,0xe9,0xbf,0xbc, +0xf9,0x36,0x8a,0xf7,0xed,0x43,0xf6,0x65,0xb2,0x91,0x89,0xb0,0xd6,0xe7,0x85,0x7b, +0x2d,0xc4,0x2b,0x27,0xea,0x0a,0xd6,0x0d,0xcf,0xec,0xd5,0xad,0x23,0x91,0x06,0xa9, +0x63,0x2a,0xf6,0x32,0x07,0x43,0xfa,0x03,0x5e,0x0c,0xf2,0x2c,0xc2,0x0f,0xf8,0x77, +0xf4,0x68,0xe3,0x78,0x3a,0xeb,0xec,0x9e,0x3f,0x45,0x7a,0xb1,0xfd,0x9b,0xfc,0x4b, +0xda,0xf7,0x4b,0x3f,0xf6,0xd6,0x4f,0xfe,0x22,0x9e,0x9f,0xb3,0x6f,0x88,0xc9,0xf9, +0xef,0xb4,0xd5,0x1e,0xd2,0x48,0x7f,0xf6,0x4a,0xc1,0x64,0xf8,0xf7,0xff,0x00,0x2e, +0x99,0x1f,0x55,0xad,0xfc,0xac,0xf2,0x6a,0x2b,0xdb,0x74,0xff,0x00,0xd9,0x9a,0xe9, +0xb9,0xbd,0xd7,0x22,0x8f,0xd5,0x60,0xb7,0x2f,0xfa,0x92,0x3f,0x95,0x75,0x9a,0x3f, +0xec,0xf3,0xe1,0x9b,0x0c,0x35,0xdb,0x5d,0x6a,0x4c,0x3b,0x4b,0x26,0xc4,0xfc,0x97, +0x07,0xf5,0xae,0xda,0x5c,0x3d,0x8f,0xa8,0xf5,0x8a,0x8f,0xab,0xff,0x00,0x2b,0x9a, +0xc7,0x03,0x5a,0x5b,0xab,0x1f,0x36,0x59,0xd9,0x5c,0x6a,0x17,0x09,0x05,0xac,0x12, +0xdc,0xcc,0xe7,0x0b,0x1c,0x28,0x59,0x8f,0xd0,0x0a,0xf5,0x5f,0x05,0xfe,0xcf,0x9a, +0x9e,0xaa,0xd1,0xdc,0xeb,0xb2,0x7f,0x66,0x5a,0x13,0x9f,0x21,0x08,0x69,0xd8,0x7e, +0xa1,0x7f,0x1c,0x9f,0x6a,0xf7,0xdd,0x1f,0xc3,0xba,0x6f,0x87,0xe1,0x31,0x69,0xd6, +0x36,0xf6,0x51,0x9e,0xa2,0x18,0xc2,0xe7,0xeb,0xeb,0x5a,0x75,0xf4,0xd8,0x3e,0x19, +0xa3,0x49,0xa9,0xe2,0x25,0xcc,0xfb,0x6c,0xbf,0xcd,0x9e,0x85,0x2c,0xbe,0x31,0xd6, +0xa3,0xb9,0x93,0xe1,0xdf,0x0c,0xe9,0xbe,0x15,0xd3,0xd6,0xcf,0x4c,0xb5,0x4b,0x58, +0x47,0x5d,0xbf,0x79,0xcf,0xab,0x1e,0xa4,0xfd,0x6b,0x54,0x74,0xa5,0xa2,0xbe,0xca, +0x10,0x8d,0x38,0xa8,0xc1,0x59,0x23,0xd5,0x49,0x45,0x59,0x05,0x35,0xba,0x73,0x4e, +0xa8,0x2f,0x56,0x66,0xb5,0x98,0x40,0x50,0x4f,0xb0,0xf9,0x65,0xfe,0xee,0xec,0x71, +0x9f,0x6c,0xd5,0x3d,0x15,0xc6,0x7c,0x99,0xf1,0x6f,0x5d,0xfe,0xdf,0xf1,0xfe,0xab, +0x32,0xb6,0xe8,0xa1,0x93,0xec,0xd1,0xf3,0x9e,0x13,0x83,0x8f,0xab,0x6e,0x3f,0x8d, +0x71,0xd5,0xdd,0x6b,0xff,0x00,0x06,0x7c,0x5b,0xa3,0xb4,0x92,0x35,0x81,0xd4,0x50, +0x1c,0x99,0xac,0xdb,0xcc,0x2d,0xef,0xb7,0xef,0x7e,0x95,0xc5,0xde,0xd9,0x5c,0x69, +0xb3,0x18,0x6e,0xed,0xe5,0xb5,0x98,0x75,0x8e,0x64,0x28,0xdf,0x91,0xe6,0xbf,0x11, +0xc6,0xd2,0xc4,0x2a,0xd3,0xa9,0x5e,0x0d,0x36,0xdb,0xd5,0x1f,0x23,0x5a,0x33,0xe7, +0x72,0x92,0xdc,0x86,0x8a,0x28,0xaf,0x38,0xc0,0x28,0xa2,0x8a,0x00,0x28,0xa2,0x8a, +0x00,0x28,0xa2,0xae,0xe9,0x5a,0x26,0xa1,0xae,0xcf,0xe4,0xe9,0xd6,0x53,0xde,0xcb, +0xdd,0x60,0x42,0xd8,0xf7,0x38,0xe9,0xf8,0xd5,0x46,0x32,0x9b,0xe5,0x8a,0xbb,0x1a, +0x4d,0xe8,0x8a,0x55,0xd4,0x78,0x03,0xc0,0x17,0xfe,0x3d,0xd5,0xd6,0xde,0xdd,0x5a, +0x2b,0x38,0xc8,0x37,0x17,0x44,0x7c,0xb1,0xaf,0xa0,0xf5,0x63,0xd8,0x7f,0x4a,0xef, +0xbc,0x1b,0xfb,0x3b,0xde,0xdd,0xba,0x5c,0x78,0x86,0x71,0x67,0x00,0xe4,0xda,0x40, +0xc1,0xa4,0x6f,0x62,0xc3,0x81,0xf8,0x67,0xf0,0xaf,0x76,0xd1,0x74,0x5b,0x1f,0x0f, +0xd8,0x47,0x65,0xa7,0xdb,0x25,0xad,0xb4,0x63,0xe5,0x44,0x1f,0xa9,0xf5,0x3e,0xe6, +0xbe,0xc3,0x2c,0xe1,0xfa,0xb5,0xa4,0xaa,0x62,0x97,0x2c,0x7b,0x75,0x7f,0xe4,0x7a, +0x98,0x7c,0x14,0xa4,0xd4,0xaa,0x68,0x83,0x45,0xd1,0xad,0x74,0x0d,0x32,0xdb,0x4f, +0xb2,0x8c,0x45,0x6d,0x02,0x04,0x45,0xf6,0xf5,0x3e,0xa4,0xfa,0xd5,0xe1,0x4b,0x45, +0x7e,0x99,0x18,0xa8,0x25,0x18,0xec,0x8f,0x7d,0x24,0x95,0x90,0x51,0x45,0x15,0x43, +0x1b,0x21,0xdb,0x1b,0x1f,0x40,0x4d,0x7c,0x35,0xf1,0xd6,0xeb,0xcf,0xf1,0x4c,0xbc, +0xe7,0xe6,0x26,0xbe,0xe0,0xbe,0x7f,0x2e,0xce,0x76,0x3d,0x90,0x9f,0xd2,0xbe,0x0b, +0xf8,0xbb,0x38,0x9f,0xc5,0x13,0xfd,0x4f,0xf3,0xaf,0x91,0xe2,0x19,0x5a,0x9d,0x38, +0xf7,0x67,0xcb,0x71,0x0c,0xad,0x86,0xb1,0xe0,0x5f,0x15,0xe7,0xf2,0xb4,0x59,0xb9, +0xec,0x7f,0x95,0x7d,0xeb,0xfb,0x03,0x69,0xbf,0xd9,0xdf,0xb2,0x7f,0x81,0x7d,0x6e, +0x23,0xb8,0xb9,0x38,0xff,0x00,0x6e,0xe2,0x53,0x5f,0x9f,0x7f,0x19,0x26,0x11,0xe8, +0x92,0xf3,0x8f,0x94,0xff,0x00,0x2a,0xfd,0x29,0xfd,0x90,0xec,0x06,0x9b,0xfb,0x31, +0x7c,0x33,0x84,0x2e,0xdc,0xe8,0x76,0xd2,0x90,0x7d,0x5d,0x77,0x9f,0xd5,0xab,0xb3, +0x26,0x56,0xa2,0x78,0x1c,0x1f,0x1b,0xfb,0x79,0xf9,0xa3,0xd7,0xa8,0xa2,0x8a,0xfa, +0x23,0xf4,0x83,0xe7,0x5f,0xda,0xf7,0xc6,0x0d,0x69,0xa2,0xe9,0x5e,0x1c,0x81,0xf0, +0x6f,0x64,0x37,0x37,0x00,0x7f,0x71,0x3e,0xe8,0x3f,0x56,0x39,0xff,0x00,0x80,0xd7, +0x94,0x7e,0xcf,0x3e,0x12,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0x3a,0x6e,0xb7,0xb3, +0xfd,0xfb,0xfa,0x71,0xd2,0xb2,0x7e,0x36,0xf8,0xb1,0xbc,0x65,0xf1,0x33,0x5a,0xbb, +0x0f,0xbe,0xda,0xde,0x53,0x67,0x6f,0xce,0x40,0x48,0xf2,0x38,0xfa,0xb6,0xe3,0xf8, +0xd7,0xd0,0x7f,0xb2,0xb7,0x84,0x46,0x93,0xe1,0x29,0xf5,0x79,0x53,0x13,0xde,0xbe, +0x14,0x91,0xfc,0x03,0xff,0x00,0xaf,0x5f,0x01,0xff,0x00,0x23,0x1c,0xd3,0xfb,0xa9, +0xfe,0x0b,0xfc,0xd9,0xf9,0xfd,0x2f,0xf8,0x52,0xcd,0x5c,0xf7,0x8c,0x7f,0x25,0xff, +0x00,0x04,0xf7,0x30,0x30,0x00,0xe9,0x4b,0x48,0x29,0x6b,0xef,0xcf,0xd0,0x02,0xbc, +0xff,0x00,0xe3,0x67,0xc0,0x9f,0x05,0xfe,0xd0,0x9e,0x0c,0x97,0xc3,0x1e,0x37,0xd1, +0xe3,0xd5,0xb4,0xd2,0xe2,0x58,0x9b,0x71,0x49,0xad,0xe5,0x00,0x81,0x24,0x4e,0x39, +0x46,0xc1,0x23,0x8e,0xa0,0x90,0x72,0x09,0x15,0xe8,0x14,0x50,0x07,0xe6,0x47,0x8d, +0x3f,0xe0,0x89,0xda,0x1d,0xc5,0xc3,0x4b,0xe1,0x5f,0x89,0xb7,0xfa,0x7c,0x1c,0x9f, +0x23,0x57,0xd3,0x92,0xe5,0x87,0xfd,0xb4,0x47,0x8f,0xff,0x00,0x41,0xaf,0xcb,0x8f, +0x1b,0x68,0x56,0x5e,0x17,0xf1,0x86,0xb5,0xa3,0xe9,0xda,0xb4,0x7a,0xf5,0x8e,0x9f, +0x79,0x2d,0xac,0x3a,0x9c,0x31,0x98,0xe3,0xba,0x54,0x72,0xa2,0x55,0x52,0x49,0x0a, +0xd8,0xc8,0xe7,0xa1,0xaf,0xe9,0x9b,0xc6,0x1a,0x1d,0xc7,0x89,0x7c,0x2b,0xac,0x69, +0x16,0x9a,0x94,0xba,0x35,0xcd,0xfd,0x9c,0xb6,0xb1,0xea,0x10,0x20,0x69,0x2d,0x99, +0xd0,0xa8,0x91,0x01,0xe0,0xb2,0xe7,0x23,0x3c,0x64,0x0a,0xfc,0xdd,0xd4,0x3f,0xe0, +0x89,0x1a,0x41,0x95,0x5a,0xc7,0xe2,0x9d,0xea,0xc6,0x18,0x12,0x97,0x3a,0x42,0x31, +0x23,0xb8,0xca,0xca,0x3f,0x95,0x3b,0x92,0xd1,0xf2,0x97,0xc2,0x7f,0xf8,0x26,0x5f, +0xc6,0x3f,0x8c,0xbf,0x0d,0x34,0x4f,0x1b,0xe8,0x03,0x41,0x87,0x4b,0xd5,0xe2,0x69, +0xad,0xed,0xf5,0x0b,0xd7,0x86,0xe3,0x60,0x76,0x50,0xc5,0x7c,0xb2,0x30,0xdb,0x77, +0x0e,0x79,0x04,0x1a,0xd3,0xbc,0xff,0x00,0x82,0x4e,0x7e,0xd1,0x16,0xa4,0x88,0xf4, +0x0d,0x1e,0xe8,0x0e,0xf0,0xeb,0x30,0x8c,0xff,0x00,0xdf,0x44,0x57,0xed,0xff,0x00, +0x85,0x7c,0x35,0x63,0xe0,0xdf,0x0c,0xe9,0x3a,0x06,0x99,0x17,0x91,0xa6,0xe9,0x76, +0x91,0x59,0x5a,0xc5,0x9c,0xec,0x8a,0x34,0x08,0x83,0xf2,0x51,0x5a,0xb4,0x5c,0x2c, +0x8f,0xc0,0x4d,0x47,0xfe,0x09,0xa7,0xfb,0x47,0x69,0xcc,0xc0,0xfc,0x38,0x9a,0xe5, +0x57,0xf8,0xad,0xb5,0x1b,0x47,0x07,0xe9,0xfb,0xdc,0x9a,0xc6,0xd1,0xbf,0x60,0x7f, +0x8e,0xf7,0xde,0x25,0xd3,0x34,0xbb,0xcf,0x86,0x7e,0x20,0xb0,0x86,0xea,0xee,0x2b, +0x79,0x6f,0x5e,0xd7,0x74,0x50,0x2b,0x38,0x53,0x23,0x32,0x92,0x02,0xa8,0x39,0x27, +0x3d,0x05,0x7f,0x42,0x78,0xa0,0x80,0x7b,0x51,0x70,0xe5,0x46,0x2f,0x82,0xfc,0x29, +0x63,0xe0,0x5f,0x07,0x68,0x9e,0x1c,0xd3,0x23,0x58,0xb4,0xfd,0x26,0xce,0x1b,0x28, +0x11,0x46,0x00,0x48,0xd0,0x28,0xfd,0x05,0x7c,0x4f,0xff,0x00,0x05,0x7d,0xf8,0xb1, +0x73,0xe1,0x4f,0x80,0x9a,0x6f,0x82,0x34,0xd5,0xb8,0x6b,0xef,0x15,0xde,0xff,0x00, +0xa4,0x98,0x63,0x2c,0xa2,0xce,0xdf,0x6b,0xb8,0x62,0x3a,0x66,0x46,0x84,0x0f,0x50, +0x1b,0xd2,0xbe,0xf3,0xa6,0xb2,0x2b,0x75,0x00,0xfd,0x45,0x22,0x8f,0xe5,0xad,0xa3, +0x64,0x24,0x32,0xb2,0xe3,0xfb,0xc3,0x14,0xd1,0xcf,0x4e,0x6b,0xfa,0x8b,0xbc,0xd1, +0x74,0xfd,0x42,0x33,0x1d,0xd5,0x85,0xb5,0xca,0x1e,0xab,0x34,0x2a,0xe0,0xfe,0x04, +0x57,0x2d,0xab,0xfc,0x11,0xf8,0x77,0xaf,0xa9,0x5d,0x4b,0xc0,0x7e,0x19,0xbf,0x53, +0xd4,0x5c,0xe9,0x16,0xf2,0x67,0xf3,0x4a,0x77,0x23,0x94,0xfe,0x67,0x71,0x9a,0x2b, +0xfa,0x3a,0xba,0xfd,0x90,0x3e,0x07,0x5e,0xe7,0xcd,0xf8,0x43,0xe0,0x9c,0x9e,0xa5, +0x34,0x1b,0x64,0x3f,0x98,0x41,0x5c,0xbe,0xad,0xff,0x00,0x04,0xfb,0xfd,0x9e,0xb5, +0x9c,0xf9,0xdf,0x0b,0x74,0x58,0x73,0xff,0x00,0x3e,0x7e,0x6d,0xbf,0xfe,0x8b,0x75, +0xc5,0x3b,0x87,0x29,0xfc,0xf6,0xd1,0x5f,0xbd,0x17,0x5f,0xf0,0x4b,0x8f,0xd9,0xb2, +0xe9,0xcb,0x0f,0x01,0xcd,0x01,0x3f,0xf3,0xcb,0x5b,0xbe,0x03,0xf2,0xf3,0xab,0x9f, +0xd5,0x3f,0xe0,0x92,0x1f,0xb3,0xed,0xfe,0xef,0xb3,0xe9,0xba,0xf6,0x9b,0x9e,0x9f, +0x66,0xd5,0xdd,0xb1,0xff,0x00,0x7f,0x03,0x51,0x70,0xe5,0x3f,0x0d,0xe8,0xaf,0xd9, +0xab,0xef,0xf8,0x23,0x0f,0xc1,0xdb,0x87,0x63,0x6d,0xe2,0x8f,0x19,0x5a,0x03,0xd1, +0x7e,0xd5,0x6c,0xe0,0x7e,0x70,0x56,0x05,0xff,0x00,0xfc,0x11,0x43,0xc0,0x32,0x03, +0xf6,0x2f,0x88,0x9e,0x24,0xb7,0x3d,0xbe,0xd1,0x6f,0x6f,0x2e,0x3f,0x25,0x5a,0x2e, +0x1c,0xac,0xfc,0x89,0x8a,0xee,0x68,0x71,0xe5,0xcd,0x24,0x78,0xfe,0xeb,0x11,0x5a, +0xf6,0x3e,0x3b,0xf1,0x2e,0x98,0x41,0xb3,0xf1,0x0e,0xab,0x69,0x8e,0x9e,0x45,0xec, +0xa9,0xfc,0x9a,0xbf,0x4c,0x35,0x5f,0xf8,0x22,0x28,0x24,0xff,0x00,0x66,0x7c,0x59, +0xd8,0x3b,0x0b,0xbd,0x13,0x71,0xff,0x00,0xc7,0x67,0x15,0xcd,0xde,0xff,0x00,0xc1, +0x12,0xbc,0x5d,0x19,0x3f,0x64,0xf8,0x9d,0xa2,0x4e,0x3b,0x79,0xda,0x6c,0xd1,0xff, +0x00,0x27,0x6a,0x05,0x66,0x7c,0x2f,0xa6,0xfe,0xd0,0x9f,0x14,0x34,0x62,0x0d,0x8f, +0xc4,0x5f,0x15,0x5a,0xe3,0xa7,0x95,0xac,0xdc,0x2f,0xfe,0xcf,0x5d,0x56,0x9f,0xfb, +0x6a,0xfc,0x77,0xd2,0xc0,0x16,0xff,0x00,0x15,0xfc,0x53,0x81,0xda,0x5d,0x45,0xe4, +0xff,0x00,0xd0,0xb3,0x5f,0x4c,0x6a,0xdf,0xf0,0x46,0x1f,0x8b,0x96,0xc7,0xfe,0x25, +0xfe,0x2c,0xf0,0x85,0xf0,0xff,0x00,0xa6,0xb3,0x5c,0xc2,0x7f,0xf4,0x4b,0x57,0x29, +0x7d,0xff,0x00,0x04,0x87,0xf8,0xfd,0x68,0x48,0x8a,0x1f,0x0d,0x5e,0x81,0xde,0x1d, +0x57,0x19,0xff,0x00,0xbe,0xd1,0x68,0x1d,0x99,0xe6,0x56,0x1f,0xf0,0x50,0xcf,0xda, +0x23,0x4f,0x60,0x53,0xe2,0x86,0xab,0x28,0x1d,0xae,0x22,0x82,0x5f,0xfd,0x0a,0x33, +0x5d,0x4e,0x9b,0xff,0x00,0x05,0x4c,0xfd,0xa3,0x34,0xec,0x67,0xc6,0x36,0x97,0x80, +0x76,0xb9,0xd2,0x2d,0x9b,0x3f,0x92,0x03,0x4b,0xa9,0xff,0x00,0xc1,0x2c,0x7f,0x68, +0xdd,0x3c,0x9d,0x9e,0x0d,0xb4,0xbd,0x03,0xbd,0xb6,0xb1,0x68,0x73,0xf8,0x34,0x8a, +0x6b,0x8d,0xbf,0xff,0x00,0x82,0x7f,0xfe,0xd0,0xba,0x73,0xb2,0xc9,0xf0,0xb3,0x5a, +0x93,0x6f,0x7b,0x7f,0x2a,0x50,0x7e,0x9b,0x5c,0xe6,0x8d,0x03,0x53,0xd5,0xac,0x7f, +0xe0,0xaf,0x7f,0x1f,0x6d,0x14,0x09,0x64,0xf0,0xcd,0xe7,0xfb,0x53,0x69,0x44,0x1f, +0xfc,0x72,0x45,0xae,0x9f,0x4b,0xff,0x00,0x82,0xce,0xfc,0x5e,0xb4,0x50,0x2f,0x7c, +0x2f,0xe1,0x1b,0xff,0x00,0x53,0xf6,0x7b,0x88,0xcf,0xe9,0x35,0x7c,0xc5,0x7b,0xfb, +0x1b,0xfc,0x73,0xd3,0xf7,0x79,0xff,0x00,0x09,0xbc,0x5c,0x02,0x8c,0x92,0x9a,0x4c, +0xce,0x07,0xe2,0xaa,0x6b,0x90,0xd4,0x7e,0x0a,0xfc,0x42,0xd1,0xd9,0x96,0xfb,0xc0, +0x9e,0x25,0xb4,0x2b,0xf7,0xbc,0xed,0x22,0xe1,0x71,0xf9,0xa5,0x1a,0x05,0xd9,0xf7, +0xa6,0x9f,0xff,0x00,0x05,0xb3,0xf1,0x7c,0x48,0x3e,0xdd,0xf0,0xcb,0x44,0xb8,0x7f, +0x5b,0x7d,0x46,0x68,0x87,0xe4,0x55,0xab,0x7f,0x4f,0xff,0x00,0x82,0xdd,0xce,0x31, +0xf6,0xef,0x84,0x91,0xb7,0xa9,0xb7,0xd7,0x88,0xfd,0x0c,0x06,0xbf,0x32,0xee,0x7c, +0x31,0xac,0x59,0x92,0x27,0xd2,0xaf,0x61,0x23,0xaf,0x99,0x6c,0xeb,0x8f,0xcc,0x56, +0x73,0xa1,0x8d,0xb6,0xb0,0x2a,0xde,0x87,0x8a,0x34,0x0b,0xb3,0xf5,0xc7,0x4a,0xff, +0x00,0x82,0xd8,0xf8,0x36,0x54,0xce,0xa5,0xf0,0xd7,0x5d,0xb6,0x6e,0xe2,0xd2,0xfa, +0x19,0x87,0xfe,0x3c,0x12,0xba,0x0b,0x2f,0xf8,0x2d,0x17,0xc2,0x59,0x71,0xf6,0x9f, +0x06,0xf8,0xc6,0xdc,0xfa,0xa4,0x36,0xae,0x3f,0xf4,0x78,0xaf,0xc6,0xdc,0xe7,0xbd, +0x18,0x34,0x58,0x2e,0xcf,0xdb,0xbd,0x37,0xfe,0x0a,0xfd,0xf0,0x16,0xf5,0x03,0x5c, +0x7f,0xc2,0x4d,0x60,0x4f,0x69,0xb4,0xb0,0xf8,0xff,0x00,0xbe,0x24,0x6a,0xe9,0xec, +0xbf,0xe0,0xaa,0x5f,0xb3,0x75,0xdc,0x41,0xe4,0xf1,0xb5,0xdd,0xa3,0x1f,0xe0,0x9b, +0x44,0xbd,0x24,0x7e,0x2b,0x11,0x1f,0xad,0x7e,0x0e,0xe2,0x8a,0x2c,0x1c,0xc7,0xf4, +0x01,0x63,0xff,0x00,0x05,0x23,0xfd,0x9c,0x6f,0xc0,0xd9,0xf1,0x32,0xce,0x2c,0xf6, +0x9e,0xc6,0xee,0x3f,0xfd,0x0a,0x21,0x5d,0x6e,0x99,0xfb,0x6a,0xfc,0x06,0xd5,0xe3, +0x0f,0x07,0xc5,0xcf,0x08,0xc6,0x0f,0x6b,0xad,0x56,0x2b,0x73,0xf9,0x48,0x54,0xd7, +0xf3,0xa5,0x9a,0x29,0x58,0x39,0x8f,0xe9,0x32,0xcf,0xf6,0x9c,0xf8,0x3f,0xa8,0x15, +0x16,0xdf,0x15,0x3c,0x17,0x39,0x6e,0x82,0x3f,0x10,0x5a,0x1c,0xff,0x00,0xe4,0x4a, +0xeb,0xb4,0xdf,0x1f,0x78,0x63,0x59,0x50,0xd6,0x1e,0x22,0xd2,0x6f,0x94,0xf2,0x0d, +0xb5,0xf4,0x52,0x03,0xf9,0x31,0xaf,0xe6,0x16,0x9c,0xb2,0x32,0x10,0x55,0x8a,0x91, +0xdc,0x1a,0x2c,0x1c,0xc7,0xf5,0x25,0x14,0xf1,0xcc,0x9b,0xe3,0x75,0x75,0xf5,0x52, +0x08,0xa7,0xe6,0xbf,0x97,0x8b,0x7f,0x10,0xea,0xb6,0x98,0xf2,0x35,0x3b,0xc8,0x71, +0xd3,0xcb,0xb8,0x75,0xc7,0xe4,0x6b,0x7b,0x4f,0xf8,0xc3,0xe3,0xcd,0x2b,0x1f,0x62, +0xf1,0xb7,0x88,0xad,0x31,0xd3,0xc9,0xd5,0x67,0x4c,0x7e,0x4f,0x45,0x87,0xcc,0x7f, +0x4d,0x39,0xa5,0xaf,0xe7,0x07,0x4e,0xfd,0xae,0x3e,0x35,0xe9,0x48,0xa9,0x69,0xf1, +0x5b,0xc5,0xf0,0xa2,0xf0,0x17,0xfb,0x66,0x72,0x3f,0x22,0xd5,0xd1,0xe9,0xff,0x00, +0xb7,0xbf,0xed,0x07,0xa6,0xe3,0xca,0xf8,0xab,0xaf,0xc9,0x8e,0xd7,0x12,0x24,0xdf, +0xfa,0x1a,0x9a,0x2c,0x1c,0xc8,0xfe,0x86,0xe8,0xaf,0xc0,0xed,0x33,0xfe,0x0a,0x75, +0xfb,0x46,0xe9,0x7d,0x3c,0x7c,0x2e,0x87,0xa5,0xd6,0x99,0x69,0x27,0xf3,0x8f,0x35, +0xd2,0xd9,0x7f,0xc1,0x5b,0x3f,0x68,0x4b,0x5c,0x79,0xba,0xae,0x85,0x79,0xff,0x00, +0x5d,0xb4,0x88,0xc6,0x7f,0xef,0x82,0xb4,0x58,0x77,0x47,0xee,0x65,0x15,0xf8,0xa9, +0xa6,0xff,0x00,0xc1,0x63,0xbe,0x37,0x5a,0x11,0xf6,0xad,0x2f,0xc2,0x77,0xc3,0xbe, +0xeb,0x09,0x90,0xff,0x00,0xe3,0xb3,0x0a,0xea,0xf4,0xff,0x00,0xf8,0x2d,0x67,0xc4, +0x28,0x71,0xf6,0xdf,0x87,0xfe,0x1b,0xb9,0xff,0x00,0xae,0x33,0xdc,0x45,0xfc,0xd9, +0xa8,0xb0,0x5d,0x1f,0xb0,0x14,0x57,0xe4,0xf5,0x8f,0xfc,0x16,0xe7,0x5b,0x56,0x1f, +0x6c,0xf8,0x51,0x60,0xeb,0xdc,0xc1,0xad,0x3a,0x9f,0xd6,0x13,0x5d,0x66,0x99,0xff, +0x00,0x05,0xb7,0xd0,0x5d,0x07,0xf6,0x8f,0xc2,0xdd,0x4a,0x27,0xef,0xf6,0x5d,0x56, +0x37,0x1f,0xf8,0xf4,0x62,0x8b,0x05,0xd1,0xfa,0x6b,0x45,0x7e,0x77,0xd8,0xff,0x00, +0xc1,0x6a,0x7e,0x18,0xc8,0x83,0xed,0x7e,0x06,0xf1,0x6c,0x12,0x1e,0xa2,0x1f,0xb2, +0xc8,0x07,0xe2,0x65,0x5f,0xe5,0x5d,0x16,0x9b,0xff,0x00,0x05,0x8e,0xf8,0x23,0x76, +0x07,0xda,0x74,0xaf,0x17,0x58,0x9e,0xfb,0xec,0x21,0x7c,0x7f,0xdf,0x33,0x1a,0x56, +0x0b,0xa3,0xee,0xea,0x2b,0xe3,0xdd,0x33,0xfe,0x0a,0xbd,0xfb,0x3a,0xdf,0x45,0xbe, +0x7f,0x12,0x6a,0xba,0x71,0xfe,0xe5,0xce,0x8d,0x72,0xc7,0xff,0x00,0x21,0xab,0x0a, +0xdd,0xb2,0xff,0x00,0x82,0x9c,0x7e,0xcd,0xd7,0xcc,0x14,0x7c,0x43,0x10,0x93,0xff, +0x00,0x3d,0xb4,0xab,0xd4,0xfe,0x70,0xd0,0x3b,0x9f,0x52,0xd1,0x5e,0x13,0xa6,0xfe, +0xdd,0x5f,0x00,0x35,0x58,0x95,0xe2,0xf8,0xb1,0xe1,0xa8,0x81,0xed,0x75,0x77,0xe4, +0x1f,0xc9,0xc0,0x35,0xbd,0x6b,0xfb,0x59,0x7c,0x14,0xbd,0x0a,0x61,0xf8,0xb5,0xe0, +0xa6,0xdd,0xd0,0x1d,0x7e,0xd4,0x13,0xf8,0x17,0xa0,0x0f,0x58,0xa2,0xb8,0xed,0x33, +0xe3,0x27,0x80,0xb5,0xa4,0x56,0xd3,0xfc,0x6d,0xe1,0xdb,0xd5,0x6e,0x86,0xdf,0x55, +0x81,0xf3,0xf9,0x3d,0x74,0xd6,0x9a,0xb5,0x8d,0xfc,0x61,0xed,0xaf,0x2d,0xee,0x10, +0xf4,0x68,0xa5,0x56,0x07,0xf1,0x06,0x80,0x2d,0xd4,0x17,0x56,0x70,0x5e,0x46,0x63, +0x9e,0x08,0xe7,0x8c,0xf5,0x59,0x14,0x30,0x3f,0x81,0xa9,0x43,0x82,0x32,0x0e,0x7e, +0x94,0xb9,0xa4,0xd2,0x6a,0xcc,0x37,0x39,0x4b,0xff,0x00,0x85,0x9e,0x14,0xd4,0x41, +0x12,0xe8,0x56,0x6a,0x4f,0x56,0x85,0x3c,0xa3,0xf9,0xae,0x2b,0x02,0xf3,0xf6,0x7d, +0xf0,0x95,0xc6,0x7c,0xb8,0x6e,0xad,0x73,0xff,0x00,0x3c,0xae,0x09,0xff,0x00,0xd0, +0xb3,0x5e,0x95,0x9a,0x2b,0x86,0xa6,0x5f,0x84,0xab,0xf1,0xd2,0x8b,0xf9,0x23,0x07, +0x42,0x9c,0xb7,0x8a,0x3c,0x7e,0x6f,0xd9,0xa7,0x44,0x63,0xfb,0xad,0x57,0x50,0x4f, +0xf7,0xbc,0xb6,0xff,0x00,0xd9,0x45,0x56,0x6f,0xd9,0x9b,0x4f,0xcf,0xcb,0xad,0x5c, +0x8f,0xac,0x4a,0x7f,0xad,0x7b,0x55,0x26,0x2b,0x8d,0xe4,0xb9,0x7b,0xff,0x00,0x97, +0x4b,0xf1,0xff,0x00,0x33,0x3f,0xaa,0x50,0xfe,0x53,0xc6,0x13,0xf6,0x66,0xd3,0x54, +0xfc,0xda,0xcd,0xd1,0xff,0x00,0x76,0x35,0x15,0x7e,0xd3,0xf6,0x70,0xf0,0xdc,0x0c, +0x0c,0xd7,0x7a,0x85,0xcf,0xb3,0x48,0x8a,0x3f,0x45,0xaf,0x58,0xc5,0x2d,0x38,0xe4, +0xd8,0x08,0xed,0x49,0x02,0xc2,0xd1,0x5f,0x64,0xe2,0x74,0xcf,0x83,0x7e,0x11,0xd2, +0x88,0x29,0xa3,0xc5,0x3b,0x7a,0xdc,0xb3,0x4b,0xfa,0x31,0x22,0xba,0xfb,0x4b,0x2b, +0x7b,0x08,0x56,0x1b,0x68,0x23,0x82,0x25,0xe0,0x24,0x48,0x14,0x0f,0xc0,0x54,0xf4, +0x57,0xa5,0x4b,0x0f,0x46,0x82,0xb5,0x28,0x25,0xe8,0x8e,0x88,0xc2,0x30,0xf8,0x55, +0x82,0x8a,0x28,0xae,0x82,0xc2,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x0c,0xef,0x10, +0xcb,0xe4,0xe8,0x97,0xaf,0xe9,0x13,0x7f,0x2a,0xf8,0x0b,0xe2,0x14,0xe6,0x7f,0x11, +0x5d,0x31,0xe7,0xe6,0x35,0xf7,0x7f,0x8e,0x66,0xf2,0x3c,0x2d,0xa8,0x36,0x71,0xfb, +0xb2,0x2b,0xe0,0x2f,0x18,0x4b,0xe6,0xeb,0x37,0x6d,0xfe,0xd1,0xaf,0x88,0xe2,0x29, +0x7b,0xf4,0xa3,0xea,0x7c,0x67,0x12,0x4a,0xd4,0xa2,0x8f,0x00,0xf8,0xed,0x75,0xe5, +0x68,0x93,0x8c,0xf4,0x42,0x7f,0x4a,0xfd,0x6a,0xf8,0x37,0xa6,0xff,0x00,0x63,0x7c, +0x24,0xf0,0x55,0x81,0x50,0x86,0xdb,0x45,0xb3,0x88,0xa8,0x18,0xc1,0x10,0xa0,0xaf, +0xc8,0x7f,0x8e,0xbf,0xe9,0x36,0x82,0xd8,0x13,0x99,0x59,0x63,0xe3,0xfd,0xa3,0x8f, +0xeb,0x5f,0xb3,0x7a,0x25,0xa8,0xb1,0xd1,0xec,0x6d,0x87,0x48,0x60,0x8e,0x31,0xf8, +0x28,0x1f,0xd2,0xbd,0xcc,0xa9,0x5a,0x82,0x38,0xf8,0x3e,0x3f,0xec,0xd5,0x27,0xde, +0x45,0xea,0x28,0xa2,0xbd,0xb3,0xef,0xcf,0xcd,0xfd,0x0b,0x4e,0x93,0xc4,0x1e,0x25, +0x8e,0xce,0x20,0x5a,0x4b,0x8b,0x92,0xbf,0x9b,0x1a,0xfd,0x0a,0xf0,0xbe,0x8b,0x17, +0x87,0xb4,0x1b,0x1d,0x3a,0x15,0xc2,0x41,0x12,0xa7,0xe3,0x8e,0x6b,0xe1,0x7f,0x80, +0x9a,0xce,0x9f,0xa2,0x7c,0x4f,0x67,0xd6,0x07,0x96,0x6c,0xae,0x65,0x88,0xa3,0x8e, +0x56,0x40,0xe4,0x73,0x9f,0xa5,0x7d,0xb5,0x6f,0xf1,0x0b,0x40,0xb8,0x50,0x57,0x51, +0x8b,0xf1,0x35,0xf2,0x19,0x34,0x29,0xd1,0x9d,0x59,0xce,0x49,0x4a,0xf6,0xf9,0x1f, +0x11,0xc3,0x2a,0x9a,0xc3,0xca,0xa4,0x9f,0xbc,0xdd,0xbe,0xe3,0xa4,0xa2,0xb1,0xe3, +0xf1,0x6e,0x91,0x2f,0xdd,0xbf,0x84,0xff,0x00,0xc0,0xaa,0xd2,0x6b,0x76,0x12,0x7d, +0xdb,0xc8,0x4f,0xfc,0x0c,0x57,0xd5,0xaa,0x90,0x7b,0x34,0x7d,0xaa,0x94,0x5f,0x52, +0xf5,0x23,0x67,0x1c,0x75,0xf7,0xa8,0x12,0xf6,0xde,0x5f,0xb9,0x3c,0x6d,0xf4,0x61, +0x52,0x89,0x50,0xf4,0x70,0x7f,0x1a,0xbb,0xa6,0x3b,0x8e,0x19,0xc0,0xc8,0xe6,0x8a, +0x40,0xd9,0x1d,0x69,0x73,0x4c,0x62,0xd1,0x49,0x45,0x00,0x2d,0x14,0x51,0x40,0x05, +0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x8a,0x5a,0x28,0xa0, +0x02,0x8a,0x28,0xa0,0x02,0x92,0x96,0x8a,0x00,0x4c,0x0f,0x4a,0x31,0x4b,0x45,0x00, +0x25,0x2d,0x14,0x50,0x01,0x45,0x14,0x50,0x03,0x1e,0x24,0x91,0x4a,0xba,0x2b,0x29, +0xea,0x08,0xc8,0xac,0x4d,0x5b,0xc0,0x5e,0x19,0xd7,0xa2,0x31,0xea,0x7e,0x1d,0xd2, +0x75,0x18,0xcf,0x54,0xba,0xb1,0x8a,0x50,0x7f,0x06,0x53,0x5b,0xd4,0x50,0x07,0x98, +0xdf,0x7e,0xcb,0xdf,0x07,0x35,0x26,0x66,0xba,0xf8,0x51,0xe0,0xa9,0xd9,0xba,0xb3, +0xf8,0x7e,0xd0,0x93,0xf8,0xf9,0x75,0x85,0xa9,0xfe,0xc5,0x1f,0x01,0xb5,0x58,0xca, +0x4d,0xf0,0x8f,0xc2,0x31,0x8f,0x5b,0x6d,0x2a,0x28,0x0f,0xe7,0x18,0x53,0x5e,0xd7, +0x45,0x00,0x7c,0xcb,0xa9,0x7f,0xc1,0x35,0xff,0x00,0x67,0x0d,0x53,0x3e,0x67,0xc3, +0x4b,0x58,0x49,0xef,0x6d,0xa8,0x5d,0xc3,0xff,0x00,0xa0,0xca,0x2b,0x9e,0xbe,0xff, +0x00,0x82,0x54,0x7e,0xce,0x37,0x6b,0x88,0xbc,0x21,0x7f,0x64,0x7f,0xbd,0x06,0xb7, +0x78,0x4f,0xfe,0x3f,0x23,0x57,0xd7,0x74,0x50,0x16,0x3e,0x1b,0xd6,0x3f,0xe0,0x8f, +0x5f,0x02,0xb5,0x01,0xfe,0x89,0x71,0xe2,0x9d,0x2c,0xff,0x00,0xd3,0xbe,0xa4,0x8f, +0xff,0x00,0xa3,0x23,0x6a,0xe5,0xae,0xbf,0xe0,0x8a,0xff,0x00,0x0b,0x1c,0x9f,0xb3, +0xf8,0xe3,0xc6,0x10,0xe7,0xa7,0x98,0xd6,0xaf,0x8f,0xca,0x11,0x5f,0xa1,0xb4,0x50, +0x2b,0x23,0xf3,0x37,0x55,0xff,0x00,0x82,0x25,0x78,0x72,0x40,0xdf,0xd9,0x9f,0x14, +0x35,0x4b,0x73,0xdb,0xed,0x7a,0x5c,0x72,0xe3,0xfe,0xf9,0x75,0xae,0x4e,0xef,0xfe, +0x08,0x8b,0xab,0xab,0x1f,0xb2,0xfc,0x59,0xb1,0x91,0x7b,0x09,0xb4,0x37,0x53,0xf8, +0xe2,0x73,0x5f,0xab,0xd4,0x50,0x16,0x47,0xe4,0x0e,0xa5,0xff,0x00,0x04,0x51,0xf8, +0x81,0x10,0x3f,0x60,0xf8,0x85,0xe1,0xbb,0xa3,0xdb,0xcf,0xb7,0x9e,0x1c,0xfe,0x41, +0xab,0x8f,0xd4,0xff,0x00,0xe0,0x8e,0x7f,0x1c,0x2d,0x1b,0x16,0xba,0x97,0x84,0xaf, +0xc7,0xaa,0xea,0x12,0xa7,0xe8,0xd0,0xd7,0xed,0x6d,0x18,0xa7,0x70,0xb2,0x3f,0x0c, +0x35,0x0f,0xf8,0x24,0xc7,0xed,0x0d,0x65,0x9f,0x2b,0x45,0xd1,0x6f,0xb1,0xff,0x00, +0x3e,0xfa,0xc4,0x43,0x3f,0xf7,0xde,0xda,0xe5,0x35,0x6f,0xf8,0x26,0x9f,0xed,0x1d, +0xa4,0xb1,0x07,0xe1,0xcc,0xd7,0x60,0x75,0x6b,0x5d,0x42,0xd2,0x41,0xff,0x00,0xa3, +0x6b,0xf7,0xeb,0x14,0x62,0x8b,0x85,0x91,0xfc,0xf0,0x5e,0xfe,0xc2,0x3f,0xb4,0x05, +0x81,0x22,0x5f,0x85,0x1e,0x22,0x6c,0x7f,0xcf,0x1b,0x71,0x2f,0xfe,0x80,0x4d,0x72, +0xfa,0xa7,0xec,0xb7,0xf1,0x8b,0x46,0x62,0xb7,0x9f,0x0b,0x7c,0x5f,0x16,0x3a,0x91, +0xa2,0x5c,0x38,0x1f,0x8a,0xa1,0x15,0xfd,0x23,0xd1,0x8a,0x2e,0x2b,0x1f,0xcc,0x7d, +0xff,0x00,0xc2,0xef,0x19,0xe9,0x4c,0x56,0xf7,0xc2,0x5a,0xed,0x99,0x1d,0x44,0xfa, +0x6c,0xc9,0x8f,0xcd,0x6b,0x02,0xe7,0x4e,0xbb,0xb3,0x62,0xb3,0xda,0xcd,0x03,0x0e, +0xa2,0x48,0xca,0x91,0xf9,0x8a,0xfe,0xa3,0xf0,0x2a,0xbd,0xc6,0x99,0x67,0x76,0x8c, +0x93,0xda,0xc1,0x32,0xb7,0x05,0x64,0x8c,0x30,0x3f,0x98,0xa2,0xe1,0xca,0x7f,0x2e, +0x18,0xa2,0xbf,0xa6,0x6d,0x43,0xe0,0xc7,0xc3,0xed,0x58,0xb1,0xbe,0xf0,0x2f,0x86, +0xaf,0x0b,0x72,0xc6,0x7d,0x22,0xdd,0xc9,0xfa,0xe5,0x2b,0x9e,0xbd,0xfd,0x95,0xbe, +0x0c,0xea,0x0a,0xcb,0x3f,0xc2,0x8f,0x06,0x3e,0xee,0xa4,0x68,0x36,0xca,0x7f,0x30, +0x80,0xd1,0x71,0x72,0x9f,0xcd,0xd5,0x18,0x3d,0x6b,0xfa,0x1a,0xd5,0x7f,0x60,0x8f, +0xd9,0xf7,0x58,0x56,0x13,0xfc,0x29,0xd0,0x23,0xdd,0xd4,0xda,0xc4,0xd0,0x1f,0xcd, +0x18,0x57,0x23,0x77,0xff,0x00,0x04,0xbb,0xfd,0x9b,0x2e,0xd9,0x9b,0xfe,0x15,0xfc, +0x90,0x33,0x73,0x98,0x75,0xbb,0xf1,0xfa,0x79,0xf8,0x1f,0x95,0x3b,0x87,0x29,0xf8, +0x27,0x45,0x7e,0xe5,0xeb,0x3f,0xf0,0x49,0x4f,0xd9,0xef,0x53,0x8c,0xad,0xae,0x91, +0xad,0xe9,0x07,0xb3,0x5a,0x6b,0x12,0xb9,0x1f,0xf7,0xf7,0x7d,0x71,0xd7,0xbf,0xf0, +0x46,0x0f,0x83,0x73,0xb9,0x6b,0x7f,0x14,0xf8,0xd6,0xdb,0x3f,0xc3,0xf6,0xcb,0x47, +0x03,0xf3,0xb6,0xcf,0xeb,0x45,0xc3,0x94,0xfc,0x65,0xa2,0xbf,0x5f,0xb5,0x5f,0xf8, +0x22,0x97,0xc3,0xc9,0x50,0x0d,0x37,0xe2,0x0f,0x89,0xed,0x5f,0xd6,0xea,0x1b,0x79, +0xc7,0xe4,0xa8,0x95,0xc8,0xea,0x7f,0xf0,0x44,0x58,0x49,0x3f,0xd9,0xdf,0x16,0x9d, +0x7d,0x05,0xd6,0x85,0x9f,0xd5,0x67,0x14,0x5c,0x56,0x67,0xe5,0x7d,0x48,0x97,0x33, +0x45,0xf7,0x25,0x74,0xff,0x00,0x75,0x88,0xaf,0xd2,0x8b,0xef,0xf8,0x22,0x57,0x8a, +0x63,0xcf,0xd8,0xfe,0x28,0xe9,0x13,0xfa,0x79,0xfa,0x54,0xb1,0x67,0xf2,0x91,0xab, +0x95,0xd4,0xff,0x00,0xe0,0x8c,0x1f,0x16,0xad,0xc9,0xfb,0x0f,0x8b,0x3c,0x27,0x7a, +0x07,0x4f,0x32,0x6b,0x88,0x89,0xff,0x00,0xc8,0x46,0x80,0xb3,0x3e,0x19,0xd3,0xfc, +0x77,0xe2,0x5d,0x25,0x95,0xac,0x7c,0x43,0xaa,0xd9,0x95,0xe4,0x1b,0x7b,0xd9,0x13, +0x1f,0x93,0x57,0x63,0xa7,0x7e,0xd3,0xbf,0x17,0xf4,0x95,0x55,0xb3,0xf8,0xa1,0xe2, +0xfb,0x74,0x5e,0x8a,0x9a,0xdd,0xc8,0x03,0xf0,0xdf,0x5f,0x47,0x5e,0x7f,0xc1,0x20, +0x7e,0x3e,0x5b,0x13,0xe5,0x8f,0x0b,0xdd,0x81,0xd3,0xc9,0xd5,0x58,0x67,0xfe,0xfa, +0x8c,0x57,0x35,0xa9,0xff,0x00,0xc1,0x2b,0xff,0x00,0x68,0xcd,0x3c,0x31,0x8f,0xc2, +0x16,0x77,0xd8,0xff,0x00,0x9f,0x5d,0x5e,0xd8,0xe7,0xe9,0xb9,0xd6,0x80,0xd4,0xf3, +0x8b,0x4f,0xdb,0x7b,0xe3,0xdd,0x96,0x3c,0xaf,0x8b,0x3e,0x29,0x38,0xe9,0xe6,0xdf, +0xb4,0x9f,0xfa,0x16,0x6b,0xa5,0xd3,0x7f,0xe0,0xa3,0xbf,0xb4,0x5e,0x99,0x81,0x1f, +0xc4,0xbb,0xd9,0x80,0xed,0x73,0x69,0x6d,0x2e,0x7f,0xef,0xa8,0xcd,0x56,0xbf,0xff, +0x00,0x82,0x78,0x7e,0xd1,0x3a,0x71,0x3e,0x67,0xc2,0xed,0x52,0x4c,0x7f,0xcf,0x09, +0xed,0xe5,0xff,0x00,0xd0,0x64,0x35,0xcd,0x6a,0x5f,0xb1,0x97,0xc7,0x4d,0x28,0x91, +0x71,0xf0,0x9f,0xc5,0x9c,0x75,0x30,0xe9,0x92,0x4a,0x3f,0x34,0x06,0x80,0xd4,0xf5, +0x8b,0x2f,0xf8,0x2a,0xd7,0xed,0x17,0x68,0xa0,0x3f,0x8a,0x34,0xdb,0xac,0x77,0x9f, +0x46,0xb7,0xe7,0xfe,0xf9,0x51,0x5b,0xf6,0x1f,0xf0,0x57,0xff,0x00,0x8f,0x56,0xa4, +0x79,0xeb,0xe1,0x8b,0xc0,0x3a,0xf9,0xba,0x5b,0x29,0x3f,0xf7,0xcc,0x82,0xbe,0x5b, +0xd4,0xfe,0x04,0xfc,0x49,0xd1,0x5c,0xa5,0xf7,0xc3,0xff,0x00,0x14,0x5a,0x30,0xea, +0x25,0xd1,0xee,0x17,0xff,0x00,0x64,0xae,0x7e,0xf3,0xc1,0x5e,0x21,0xd3,0xce,0x2e, +0xb4,0x1d,0x4e,0xd8,0xff,0x00,0xd3,0x6b,0x39,0x13,0xf9,0xad,0x03,0xd4,0xfb,0xcb, +0x4d,0xff,0x00,0x82,0xd2,0xfc,0x51,0xb7,0x50,0x2f,0x7c,0x15,0xe1,0x5b,0xcf,0x52, +0x82,0xe2,0x23,0xff,0x00,0xa3,0x0d,0x74,0x56,0x5f,0xf0,0x5b,0x5f,0x14,0x2e,0x05, +0xdf,0xc3,0x0d,0x22,0x5f,0x53,0x06,0xa7,0x2a,0x7f,0x34,0x35,0xf9,0xab,0x34,0x12, +0xdb,0xb6,0xd9,0x63,0x78,0x9b,0xd1,0xd4,0x83,0x4c,0xa3,0x40,0xbb,0x3f,0x54,0x74, +0xbf,0xf8,0x2d,0xcd,0xbe,0x40,0xd4,0x7e,0x14,0x4a,0x07,0x73,0x6b,0xad,0x03,0xfa, +0x34,0x35,0xd4,0x58,0xff,0x00,0xc1,0x6b,0xfc,0x07,0x20,0x1f,0x6c,0xf8,0x77,0xe2, +0x38,0x0f,0xfd,0x30,0xb9,0xb7,0x93,0xf9,0x95,0xaf,0xc8,0x6c,0x51,0x45,0x85,0xcc, +0xcf,0xd9,0x9d,0x3b,0xfe,0x0b,0x39,0xf0,0x82,0xe4,0x81,0x77,0xe1,0x8f,0x17,0xd9, +0x67,0xf8,0xbe,0xcd,0x6f,0x20,0x1f,0x94,0xd5,0xd7,0x69,0xdf,0xf0,0x56,0xff,0x00, +0xd9,0xf6,0xf2,0x20,0xd7,0x1a,0x96,0xbd,0xa7,0xb1,0xfe,0x19,0xf4,0x99,0x18,0x8f, +0xfb,0xe0,0xb0,0xaf,0xc3,0x8a,0xb5,0xa4,0xd8,0xbe,0xa7,0xaa,0xd9,0xd9,0xc4,0xbb, +0xa5,0xb8,0x99,0x21,0x50,0x3b,0x96,0x60,0x07,0xf3,0xa2,0xc3,0xb9,0xfd,0x3f,0xe8, +0x3a,0xd5,0xb7,0x88,0xf4,0x4d,0x3f,0x56,0xb3,0x2e,0x6c,0xef,0xed,0xe3,0xba,0x84, +0xc8,0xa5,0x58,0xa3,0xa8,0x65,0xca,0x9e,0x41,0xc1,0x1c,0x1a,0xbf,0x55,0x34,0xab, +0x18,0xf4,0xcd,0x32,0xd2,0xce,0x14,0x11,0xc5,0x6f,0x0a,0x44,0x88,0x3a,0x28,0x55, +0x00,0x0f,0xd2,0xad,0xd4,0x96,0x14,0x51,0x45,0x00,0x72,0x3f,0x14,0xe7,0xfb,0x3f, +0x83,0x6f,0x4f,0xa8,0xc5,0x7c,0x0d,0xe2,0x29,0x37,0xdf,0xdd,0x37,0xab,0x9a,0xfb, +0x9b,0xe3,0x65,0xcf,0x91,0xe0,0xc9,0x87,0xf7,0x8e,0x3f,0x4a,0xf8,0x43,0x5a,0x7d, +0xd3,0x4e,0xde,0xac,0x6b,0xe0,0x33,0xe7,0x7c,0x54,0x23,0xd9,0x1f,0x01,0xc4,0xf3, +0xb2,0x48,0xf1,0x4f,0x1a,0x42,0x35,0x2f,0x88,0x9e,0x12,0xb1,0x64,0xf3,0x16,0xe7, +0x5a,0xb2,0x84,0xa6,0x33,0xb8,0x34,0xe8,0x08,0xfc,0x8d,0x7e,0xcc,0xa0,0x0a,0xa1, +0x40,0xc0,0x1c,0x57,0xe3,0xef,0x87,0xac,0x9f,0x5c,0xfd,0xa4,0xfe,0x19,0x59,0x2f, +0x3b,0xbc,0x47,0x67,0x26,0x3d,0x92,0x40,0xe7,0xff,0x00,0x40,0xaf,0xd8,0x31,0x5f, +0x57,0x97,0x46,0xd4,0x11,0xd7,0xc2,0x71,0xe5,0xcb,0xef,0xdd,0xb1,0x68,0xa2,0x8a, +0xf5,0x0f,0xb4,0x3f,0x3c,0xbf,0x6b,0x4f,0x07,0xde,0xfc,0x28,0xf8,0xc1,0x3e,0xbf, +0x6f,0x19,0x5d,0x0b,0xc4,0x4d,0xf6,0x95,0x78,0xc6,0x04,0x73,0x80,0x04,0xaa,0x7d, +0xc9,0xf9,0xff,0x00,0xe0,0x47,0xd2,0xb9,0x0d,0x2b,0xc6,0x12,0x5d,0xc4,0xaf,0x15, +0xeb,0xe0,0x8e,0xcf,0x5f,0xa1,0xbf,0x13,0xfe,0x1a,0x68,0xdf,0x15,0xfc,0x21,0x77, +0xe1,0xfd,0x6e,0x0f,0x36,0xda,0x61,0xba,0x39,0x57,0x1b,0xe0,0x90,0x0f,0x96,0x44, +0x3d,0x88,0xcf,0xe3,0xc8,0x3c,0x1a,0xfc,0xed,0xf8,0x9f,0xfb,0x2e,0xf8,0xe3,0xe1, +0x16,0xa9,0x33,0xdb,0xac,0x97,0xda,0x46,0xec,0xc3,0x7f,0x6e,0xa4,0xc6,0xc3,0x3c, +0x06,0x1f,0xc2,0x7d,0x8f,0xe1,0x9a,0xf9,0x3c,0xcb,0x2d,0x84,0xe4,0xea,0x6c,0x7e, +0x4f,0x9d,0xe5,0x78,0x9c,0x16,0x22,0x58,0xac,0x22,0x6e,0x13,0x77,0x69,0x74,0x66, +0xfc,0x3e,0x28,0xd4,0x23,0xe6,0x3b,0xf9,0x47,0xfc,0x0e,0xaf,0x43,0xe3,0x9d,0x6e, +0x1f,0xbb,0xa9,0x4b,0xf8,0xb5,0x78,0xb9,0xb9,0xf1,0x3e,0x9f,0xf2,0x4d,0x68,0x5c, +0x8e,0xf8,0xe4,0xd2,0x8f,0x15,0xeb,0x11,0x7d,0xfb,0x09,0x3f,0x23,0x5f,0x35,0xf5, +0x19,0xaf,0x86,0x4b,0xef,0x3c,0x48,0xe2,0x71,0xd1,0x5f,0x0c,0xbe,0xf3,0xdd,0x21, +0xf8,0x9f,0xe2,0x38,0x0f,0xcb,0xa8,0xb9,0xad,0x1b,0x7f,0x8c,0xfe,0x26,0xb7,0xe9, +0x7a,0xcd,0xf5,0xaf,0x9f,0x57,0xc7,0x97,0x91,0xfd,0xfb,0x49,0x57,0xf0,0x35,0x22, +0x7c,0x46,0x2b,0xf7,0xe2,0x90,0x1f,0x71,0x4d,0x61,0x71,0x31,0xf8,0x64,0xfe,0xf3, +0x55,0x99,0x63,0x61,0xba,0x91,0xf4,0x94,0x1f,0xb4,0x1f,0x8a,0x21,0xc7,0xef,0xf3, +0xf8,0xd6,0xa5,0xbf,0xed,0x33,0xe2,0x38,0xb1,0xbc,0x96,0xc7,0xbd,0x7c,0xc2,0x9f, +0x12,0x60,0xfe,0x2d,0xc3,0xf0,0xab,0x31,0xfc,0x44,0xb4,0x60,0x32,0xff,0x00,0xa5, +0x5a,0x58,0xf8,0xed,0x37,0xf7,0x9b,0x47,0x3c,0xc5,0x43,0x79,0x4b,0xee,0x3e,0xa8, +0xb5,0xfd,0xaa,0x75,0x98,0x88,0xf3,0x22,0xdc,0x3f,0x3a,0xd5,0xb7,0xfd,0xac,0xae, +0x86,0x3c,0xcb,0x6c,0xfa,0xfc,0xa2,0xbe,0x4c,0x8f,0xc7,0x96,0x4d,0xff,0x00,0x2d, +0x16,0xac,0xa7,0x8c,0xac,0x9f,0x1f,0xbd,0x43,0xf8,0xd5,0xac,0x46,0x63,0x0f,0xb4, +0xcd,0xe3,0xc4,0x98,0x88,0xef,0x3f,0xc0,0xfa,0xfe,0xd7,0xf6,0xb2,0x84,0xe3,0xce, +0xb6,0xff,0x00,0xc7,0x6b,0x52,0xdb,0xf6,0xab,0xd2,0xe4,0x23,0xcc,0x80,0x0f,0xc0, +0xd7,0xc6,0x69,0xe2,0x8b,0x37,0xe9,0x2a,0xfe,0x06,0xa7,0x4d,0x7a,0xd5,0xfa,0x38, +0x3f,0x8d,0x52,0xcc,0x73,0x18,0x6e,0xff,0x00,0x03,0xaa,0x3c,0x51,0x5b,0xf9,0x91, +0xf6,0xdd,0xbf,0xed,0x3b,0xe1,0xe9,0x00,0xde,0x30,0x4f,0xfb,0x55,0xa9,0x6d,0xfb, +0x43,0xf8,0x66,0x7c,0x66,0x5d,0xbf,0xf0,0x21,0x5f,0x0a,0xae,0xad,0x6e,0xdd,0x1c, +0x54,0x83,0x50,0x84,0xf4,0x93,0xf5,0xad,0x16,0x73,0x8f,0x8e,0xf6,0xfb,0x8e,0xb8, +0x71,0x45,0x4e,0xb6,0x3e,0xf8,0xb7,0xf8,0xdf,0xe1,0x99,0xc8,0xc5,0xd0,0x1f,0x88, +0xad,0x28,0x3e,0x2a,0xf8,0x72,0x71,0x91,0x7e,0xa3,0xf2,0xaf,0xcf,0xa5,0xbf,0x51, +0xf7,0x66,0x23,0xe8,0x6a,0x64,0xd4,0xe4,0x5f,0xbb,0x70,0xc3,0xfe,0x05,0x5a,0xac, +0xfb,0x14,0xbe,0x28,0x2f,0xc4,0xeb,0x8f,0x13,0xcb,0xac,0x51,0xfa,0x19,0x17,0x8f, +0xb4,0x29,0xbe,0xee,0xa1,0x1f,0xe7,0x57,0x23,0xf1,0x4e,0x95,0x2f,0xdd,0xbe,0x84, +0xff,0x00,0xc0,0xab,0xf3,0xbe,0x3d,0x6e,0xf1,0x3e,0xe5,0xe4,0xa3,0xe8,0xf5,0x66, +0x3f,0x15,0xea,0xb1,0x11,0xb7,0x50,0x9b,0xfe,0xfb,0x35,0xb2,0xe2,0x1a,0x8b,0xe2, +0xa7,0xf8,0x9d,0x51,0xe2,0x58,0x3d,0xe0,0x7e,0x88,0xa6,0xb1,0x63,0x27,0xdd,0xbb, +0x88,0xff,0x00,0xc0,0xc5,0x4a,0xb7,0x90,0x3f,0xdd,0x99,0x0f,0xd1,0x85,0x7e,0x7b, +0x43,0xe3,0xfd,0x7a,0x2f,0xbb,0xa8,0xcb,0xf9,0xd5,0xf8,0x3e,0x2b,0x78,0x8e,0x0c, +0x62,0xf9,0xcf,0xd4,0xd6,0xeb,0x88,0xa3,0xf6,0xa9,0xbf,0xbc,0xe8,0x8f,0x11,0xd0, +0x7b,0xc5,0x9f,0x7f,0x09,0x14,0xff,0x00,0x10,0xfc,0xe9,0x73,0xef,0x5f,0x08,0xc1, +0xf1,0xbf,0xc4,0xd0,0x7f,0xcb,0xd1,0x6f,0xc4,0xd6,0x9d,0xb7,0xed,0x11,0xe2,0x58, +0x3a,0xcb,0x9f,0xf8,0x11,0xad,0xe3,0xc4,0x34,0x1e,0xf0,0x67,0x44,0x78,0x83,0x0a, +0xf7,0xb9,0xf6,0xe0,0x34,0x66,0xbe,0x37,0xb6,0xfd,0xa7,0x35,0xf8,0x71,0xbf,0x2d, +0xf8,0xd6,0xad,0xbf,0xed,0x57,0xaa,0x2f,0xfa,0xc8,0x49,0x1f,0x85,0x6d,0x1c,0xfb, +0x08,0xf7,0xbf,0xdc,0x6f,0x1c,0xf3,0x06,0xfe,0xd1,0xf5,0x9e,0x68,0x07,0x35,0xf3, +0x0d,0xbf,0xed,0x65,0x28,0xff,0x00,0x59,0x6f,0x9f,0xf8,0x0e,0x6b,0x52,0xdb,0xf6, +0xb1,0xb5,0x38,0xf3,0x6d,0xc0,0xfc,0x2b,0xa2,0x39,0xd6,0x09,0xfd,0xaf,0xc0,0xe9, +0x8e,0x6d,0x83,0x97,0xdb,0x3e,0x8b,0xa2,0xbc,0x26,0x0f,0xda,0xa3,0x47,0x7c,0x07, +0x88,0x03,0xdf,0xad,0x6a,0x5b,0x7e,0xd2,0xde,0x1e,0x98,0x0d,0xe4,0x2f,0xfc,0x0a, +0xb7,0x8e,0x6b,0x83,0x97,0xfc,0xbc,0x46,0xf1,0xc7,0xe1,0xa5,0xb4,0xd1,0xec,0x54, +0x57,0x98,0xdb,0xfe,0xd0,0x3e,0x19,0x9f,0xfe,0x5b,0x05,0xff,0x00,0x81,0x56,0x9c, +0x1f,0x19,0xfc,0x35,0x36,0x3f,0xd3,0x00,0xfc,0x45,0x74,0x47,0x1d,0x86,0x96,0xd5, +0x17,0xde,0x6e,0xb1,0x34,0x65,0xb4,0xd1,0xdd,0xd1,0x5c,0xa4,0x1f,0x13,0xfc,0x3d, +0x38,0x18,0xbe,0x41,0xf5,0x35,0x76,0x2f,0x1c,0xe8,0x93,0x7d,0xdb,0xf8,0x8f,0xe3, +0x5b,0x2c,0x45,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0xb4,0xde,0xd2,0x46,0xf5,0x15,0x97, +0x1f,0x89,0x74,0xc9,0x47,0xcb,0x7d,0x09,0xff,0x00,0x81,0x55,0x94,0xd5,0xac,0xe4, +0xfb,0xb7,0x51,0x1f,0xf8,0x10,0xad,0x54,0xe2,0xf6,0x65,0xa9,0x27,0xb3,0x2d,0xd1, +0x51,0x0b,0xa8,0x5b,0xa4,0xa8,0x7f,0xe0,0x42,0x9e,0x1d,0x58,0x64,0x10,0x7e,0x86, +0xaa,0xe8,0xab,0x8e,0xa2,0x93,0x34,0x66,0x98,0x0b,0x45,0x26,0x45,0x19,0xa0,0x05, +0xa2,0x93,0x34,0xb4,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14, +0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14, +0x00,0x51,0x45,0x14,0x00,0x94,0x6d,0x06,0x96,0x8a,0x00,0x4c,0x51,0x8a,0x5a,0x28, +0x01,0x31,0x4d,0x31,0xa1,0x04,0x15,0x04,0x1e,0xb9,0x14,0xfa,0x28,0x03,0x1e,0xfb, +0xc1,0xba,0x06,0xa9,0x9f,0xb6,0x68,0x7a,0x6d,0xde,0x7a,0xf9,0xf6,0x91,0xbe,0x7f, +0x31,0x5c,0xe5,0xf7,0xc0,0x6f,0x86,0x7a,0x9e,0xef,0xb5,0xfc,0x3c,0xf0,0xad,0xc9, +0x6e,0xa6,0x5d,0x16,0xd9,0x89,0xfc,0x4a,0x57,0x77,0x45,0x00,0x78,0xd6,0xa9,0xfb, +0x1a,0x7c,0x0b,0xd6,0x15,0xc5,0xcf,0xc2,0x6f,0x09,0x12,0xfd,0x5a,0x2d,0x2a,0x28, +0x9b,0xfe,0xfa,0x40,0x08,0xae,0x2e,0xfb,0xfe,0x09,0xb1,0xfb,0x37,0x5f,0xbb,0xb4, +0x9f,0x0c,0xad,0x23,0x2d,0xd7,0xc8,0xd4,0x6f,0x22,0x03,0xe8,0x16,0x60,0x05,0x7d, +0x33,0x45,0x00,0x7c,0x97,0x7f,0xff,0x00,0x04,0xb0,0xfd,0x9b,0xaf,0x22,0x65,0x8f, +0xc1,0x17,0x56,0x6c,0x7f,0x8e,0x0d,0x6e,0xf4,0x91,0xff,0x00,0x7d,0x4a,0xc3,0xf4, +0xac,0x5d,0x0f,0xfe,0x09,0x3f,0xf0,0x43,0xc3,0x5e,0x2b,0xd2,0x3c,0x41,0xa7,0x37, +0x89,0x21,0xba,0xd2,0xef,0x61,0xbe,0x86,0x17,0xd4,0x52,0x48,0x59,0xe3,0x70,0xe1, +0x58,0x34,0x44,0x95,0x25,0x40,0x23,0x3d,0x3b,0xd7,0xd9,0xd4,0x50,0x2b,0x05,0x14, +0x51,0x40,0xc2,0x8a,0x28,0xa0,0x0f,0x29,0xfd,0xa1,0x2e,0x7c,0x9f,0x0a,0x05,0xce, +0x32,0x58,0xfe,0x95,0xf0,0xf6,0xaa,0xfc,0x48,0x7d,0xcd,0x7d,0x97,0xfb,0x4b,0xdc, +0xf9,0x7a,0x24,0x29,0x9f,0xe1,0x3c,0x57,0xc5,0xda,0xb3,0xe2,0x27,0x3f,0x5a,0xfc, +0xeb,0x38,0x7c,0xd8,0xfb,0x76,0x48,0xfc,0xd3,0x8a,0x27,0xef,0xdb,0xc8,0xe4,0x3e, +0x04,0xda,0x0d,0x63,0xf6,0xc8,0xf8,0x6d,0x01,0xc9,0xf2,0xaf,0xe6,0xb9,0xe3,0xfe, +0x99,0xdb,0xca,0xc3,0xf9,0x57,0xeb,0x58,0xaf,0xcb,0x1f,0xd8,0xe7,0x4f,0x6d,0x5f, +0xf6,0xce,0xd0,0xa5,0x03,0x29,0x61,0xa7,0xdf,0x5d,0x37,0xb0,0xf2,0xbc,0xb1,0xfa, +0xc8,0x2b,0xf5,0x38,0x77,0xaf,0xb7,0xc1,0xab,0x51,0x47,0xd1,0xf0,0xd4,0x39,0x32, +0xca,0x7e,0x62,0xd1,0x45,0x15,0xdc,0x7d,0x40,0x98,0xa6,0xc9,0x0a,0x4a,0xa5,0x5d, +0x43,0xa1,0xe0,0xab,0x0c,0x83,0x4f,0xa2,0x80,0x38,0xad,0x6b,0xe0,0xcf,0x83,0x35, +0xf9,0x1a,0x4b,0xbd,0x02,0xd7,0xcc,0x61,0x82,0xd0,0x83,0x17,0xe8,0xa4,0x0a,0xe5, +0xaf,0x7f,0x65,0x8f,0x01,0x5d,0x9c,0xad,0x95,0xc5,0xbf,0xb4,0x53,0x7f,0xf1,0x40, +0xd7,0xaf,0x51,0x5c,0xd2,0xc3,0x51,0x96,0xf0,0x47,0x24,0xb0,0x98,0x79,0xbb,0xca, +0x9a,0xfb,0x8f,0x09,0xba,0xfd,0x8f,0x3c,0x13,0x36,0x4a,0x4d,0xa8,0x46,0x7d,0xdd, +0x08,0xff,0x00,0xd0,0x2b,0x02,0xff,0x00,0xf6,0x26,0xd0,0x27,0xcf,0xd9,0xf5,0x69, +0x22,0x3f,0xf4,0xd2,0xdc,0x3f,0xf2,0x61,0x5f,0x4a,0x51,0xf8,0xd6,0x4f,0x03,0x87, +0x7f,0x60,0xe7,0x79,0x6e,0x16,0x5f,0x63,0xf3,0x3e,0x50,0xbc,0xfd,0x84,0xec,0x64, +0xe6,0x2d,0x6a,0x17,0x3f,0xed,0xda,0x95,0xff,0x00,0xd9,0x8d,0x73,0xd7,0xdf,0xb0, +0x65,0xd9,0x62,0x20,0xbb,0xd3,0x5c,0x76,0x2c,0x59,0x4f,0xfe,0x81,0x5f,0x68,0x62, +0x8c,0x56,0x4f,0x2e,0xa0,0xfa,0x3f,0xbd,0x98,0xbc,0xa7,0x0a,0xfe,0xcb,0xfb,0xd9, +0xf0,0x8d,0xe7,0xec,0x1d,0xae,0x2a,0xb1,0x8d,0x6c,0x65,0x3d,0x82,0x4d,0x8c,0xfe, +0x78,0xae,0x7a,0xfb,0xf6,0x20,0xf1,0x54,0x07,0xe4,0xd3,0x0b,0x0f,0xfa,0x67,0x70, +0x87,0xff,0x00,0x66,0xaf,0xd0,0xfc,0x51,0x8a,0x87,0x96,0xd3,0xe9,0x27,0xf7,0x9c, +0xf2,0xc8,0xf0,0xb2,0xef,0xf8,0x7f,0x91,0xf9,0xa7,0x7b,0xfb,0x1f,0x78,0xc6,0xd4, +0x90,0xba,0x46,0xa0,0x4f,0xfb,0x1f,0x30,0xfd,0x2b,0x0a,0xef,0xf6,0x69,0xf1,0x85, +0x91,0x3b,0xb4,0xed,0x4e,0x3c,0x7a,0xdb,0xb7,0xf8,0x57,0xea,0x4e,0x29,0x0a,0xe6, +0xa1,0xe5,0xab,0xa4,0xdf,0xe0,0x72,0xcb,0x87,0x70,0xd2,0xeb,0xf8,0x23,0xf2,0x7a, +0xef,0xe0,0xd7,0x8a,0x6c,0x72,0x59,0x6e,0xa3,0x03,0xfb,0xf1,0x11,0x59,0xef,0xe0, +0x3f,0x13,0xdb,0x74,0x91,0xce,0x3d,0x54,0xd7,0xeb,0x83,0x44,0xae,0x30,0xc0,0x11, +0xe8,0x45,0x55,0x9f,0x45,0xb0,0xba,0xff,0x00,0x5d,0x65,0x6f,0x30,0xff,0x00,0x6e, +0x25,0x3f,0xd2,0xb2,0x79,0x6c,0xba,0x4f,0xf0,0x38,0xe5,0xc2,0xf8,0x79,0x76,0xfb, +0xbf,0xe0,0x9f,0x92,0x6d,0xa0,0x78,0xaa,0xdf,0xdf,0xeb,0x9a,0x88,0xa7,0x8a,0x2d, +0xfe,0xf4,0x3b,0xbe,0x86,0xbf,0x57,0xee,0x3c,0x03,0xe1,0xbb,0xa0,0x7c,0xdd,0x07, +0x4d,0x7c,0xf7,0x36,0xa9,0xfe,0x15,0x97,0x73,0xf0,0x6f,0xc1,0x77,0x79,0xf3,0x3c, +0x3b,0x67,0xff,0x00,0x00,0x52,0x9f,0xc8,0x8a,0xc9,0xe5,0xb5,0x3b,0xa6,0x72,0x4b, +0x84,0xe9,0x74,0xb7,0xe2,0x8f,0xcb,0x31,0xaa,0xf8,0x8a,0x0f,0xbf,0x68,0xc6,0x94, +0x78,0xab,0x58,0x8b,0xef,0xd8,0xcb,0xc7,0xfb,0x26,0xbf,0x4d,0xae,0x7f,0x67,0x8f, +0x00,0xdd,0x67,0x3a,0x12,0x46,0x4f,0x74,0x99,0xff,0x00,0xf8,0xaa,0xc5,0xbb,0xfd, +0x94,0xfc,0x09,0x75,0x9d,0xb6,0xf7,0x70,0x67,0xfe,0x79,0xca,0xbf,0xd5,0x4d,0x63, +0x2c,0xb2,0xa7,0xf2,0xc5,0x9c,0xb2,0xe1,0x37,0xd3,0xff,0x00,0x4a,0x67,0xe7,0x32, +0xf8,0xee,0xf6,0x3f,0xbf,0x6b,0x28,0xfc,0x0d,0x4c,0x9f,0x11,0x4a,0x9f,0x9e,0x17, +0x1f,0x85,0x7d,0xf7,0x79,0xfb,0x1c,0x78,0x36,0x7f,0xf5,0x37,0x57,0xd1,0x1f,0xf6, +0x8a,0x37,0xfe,0xca,0x2b,0x02,0xf3,0xf6,0x22,0xd1,0x26,0x72,0x62,0xd6,0x9d,0x17, +0xd1,0xed,0x43,0x1f,0xcf,0x78,0xac,0x1e,0x59,0x3e,0xb4,0x97,0xde,0x73,0x4b,0x85, +0xab,0xaf,0x86,0xff,0x00,0x7a,0x3e,0x2b,0x4f,0x89,0x10,0xff,0x00,0x10,0x65,0xfa, +0x8a,0xb1,0x1f,0xc4,0x4b,0x46,0xea,0xf8,0xaf,0xac,0x2f,0x7f,0x61,0x2b,0x49,0x01, +0xf2,0x35,0x88,0x1d,0xbb,0x09,0x2d,0x8a,0xff,0x00,0x53,0x5c,0xf5,0xe7,0xec,0x19, +0xa8,0x1f,0xf5,0x77,0x5a,0x63,0x8f,0xf7,0x98,0x7f,0xec,0xb5,0x83,0xcb,0x5f,0x5a, +0x4c,0xe7,0x97,0x0e,0xe2,0xe3,0xb3,0x97,0xe0,0xcf,0x9e,0xa3,0xf1,0xed,0x9b,0xff, +0x00,0xcb,0x45,0x15,0x66,0x3f,0x19,0xd9,0x3f,0xfc,0xb5,0x4f,0xce,0xbd,0x7a,0xfb, +0xf6,0x11,0xd7,0xe3,0x62,0x23,0x86,0xce,0x61,0xeb,0x1c,0xc0,0x67,0xf3,0xc5,0x73, +0xf7,0x9f,0xb1,0x27,0x8b,0x21,0xdd,0xb3,0x4a,0x76,0x03,0xfe,0x79,0xdc,0x21,0xff, +0x00,0xd9,0xab,0x09,0x65,0xb1,0x5b,0xd3,0x92,0xf9,0x1c,0xd2,0xc9,0x31,0xd1,0xea, +0xff,0x00,0xf0,0x13,0x89,0x4f,0x14,0xd9,0xbf,0xfc,0xb5,0x4f,0xfb,0xea,0xa7,0x4d, +0x7e,0xd5,0xff,0x00,0x8d,0x4f,0xe2,0x2b,0x4a,0xf7,0xf6,0x43,0xf1,0x8d,0xa0,0x2d, +0xfd,0x8f,0xa8,0x81,0xe9,0x1a,0x16,0xfe,0x42,0xb0,0xef,0x7f,0x66,0xdf,0x17,0x58, +0xf2,0xda,0x76,0xa7,0x17,0xfb,0xf6,0xed,0xfe,0x15,0xcf,0x2c,0xbe,0x9a,0xee,0xbe, +0x47,0x3c,0xb2,0xdc,0x74,0x3a,0xfe,0x0c,0xbe,0xba,0xb5,0xbb,0x7f,0x18,0xa9,0x17, +0x51,0x80,0xff,0x00,0x18,0xae,0x46,0xe7,0xe1,0x07,0x89,0xac,0x8e,0x1b,0xed,0x28, +0x47,0x67,0x88,0xd5,0x17,0xf0,0x2f,0x89,0xad,0x8f,0x12,0x3f,0x1e,0xaa,0x6b,0x17, +0x81,0xa5,0xd2,0x46,0x2f,0x0d,0x8d,0x8f,0x63,0xd0,0x16,0xfa,0x23,0xd2,0x4f,0xd6, +0xa5,0x5b,0xdc,0x7d,0xd9,0x88,0xfc,0x6b,0xcc,0xdb,0x42,0xf1,0x4d,0xbe,0x79,0x27, +0xeb,0x9a,0x66,0xcf,0x13,0x41,0xf7,0xa2,0x2d,0x8f,0x43,0x51,0xfd,0x9f,0x17,0xb4, +0x85,0xc9,0x8d,0x8f,0xd8,0xfc,0x4f,0x55,0x4d,0x52,0x74,0xfb,0xb7,0x4e,0x3e,0x8d, +0x56,0x23,0xd7,0xef,0xe3,0xfb,0x97,0xb2,0x8f,0xa3,0x1a,0xf2,0x1f,0xed,0x5f,0x10, +0xc2,0x3e,0x6b,0x47,0x3f,0x4a,0x51,0xe2,0x9d,0x62,0x3f,0xbf,0x67,0x27,0xfd,0xf3, +0x51,0xfd,0x9d,0x2e,0x92,0x41,0xed,0x31,0xb0,0xde,0x9b,0xfb,0xcf,0x67,0x8f,0xc6, +0x1a,0xc4,0x5f,0x77,0x50,0x97,0xfe,0xfa,0xab,0xb0,0x7c,0x44,0xd7,0xe0,0xfb,0xba, +0x84,0x9f,0x8d,0x78,0x7a,0xf8,0xea,0xf2,0x3f,0xf5,0x96,0xb2,0x8f,0xf8,0x09,0xa9, +0x53,0xe2,0x29,0x5f,0xbf,0x14,0x8b,0xf5,0x14,0x96,0x06,0xbc,0x7e,0x17,0xf8,0x94, +0xb1,0xd8,0xb8,0x6f,0x19,0x23,0xde,0x60,0xf8,0xb7,0xe2,0x48,0x3f,0xe5,0xf4,0x9f, +0xad,0x69,0x43,0xf1,0xd7,0xc4,0xd0,0x81,0x8b,0x8c,0xe3,0xdc,0xd7,0xcf,0x91,0xfc, +0x48,0x87,0xb8,0x65,0xfc,0x2a,0xcc,0x7f,0x11,0x2d,0x5b,0xab,0xe3,0xea,0x2a,0x95, +0x0c,0x5c,0x7e,0x19,0x3f,0xbc,0xd5,0x67,0x18,0x98,0x6e,0xe4,0xbe,0x47,0xd1,0xb6, +0xbf,0xb4,0x67,0x88,0xe0,0x00,0x17,0xcf,0xd0,0xd6,0xa5,0xbf,0xed,0x3f,0xae,0x46, +0x7e,0x70,0xc7,0xf1,0xaf,0x99,0xe3,0xf1,0xed,0x9b,0x7f,0xcb,0x41,0xf8,0xd5,0x98, +0xfc,0x69,0x66,0xf8,0xfd,0xea,0x7e,0x75,0x4a,0x58,0xf8,0x6d,0x26,0x6f,0x1e,0x20, +0xaf,0x1f,0xb6,0xfe,0xe3,0xea,0x5b,0x7f,0xda,0xb3,0x50,0x4c,0x6f,0x84,0x93,0xf4, +0x15,0xa9,0x6b,0xfb,0x58,0x37,0x1e,0x6c,0x39,0xff,0x00,0x80,0xd7,0xc9,0xd1,0xf8, +0xae,0xd1,0xff,0x00,0xe5,0xa2,0x7e,0x75,0x3a,0x78,0x86,0xd5,0xfa,0x3a,0xfe,0x75, +0x6b,0x19,0x98,0xc3,0xed,0x33,0xa6,0x3c,0x4d,0x59,0x7f,0xcb,0xc4,0x7d,0x7f,0x6f, +0xfb,0x56,0xd9,0x39,0xc3,0xc2,0x07,0xd4,0x56,0xad,0xb7,0xed,0x45,0xa2,0xc9,0x8f, +0x31,0x00,0xfc,0x6b,0xe3,0x15,0xd6,0x2d,0xdb,0xf8,0x87,0xe7,0x52,0x2e,0xa5,0x03, +0x7f,0x1e,0x2b,0x45,0x9a,0xe6,0x11,0xdd,0xfe,0x07,0x5c,0x38,0x9a,0xb7,0xf3,0x26, +0x7d,0xbb,0x6d,0xfb,0x48,0x78,0x7a,0x7c,0x6e,0x60,0xbf,0xf0,0x2a,0xd4,0x83,0xe3, +0xdf,0x86,0x66,0xc7,0xef,0xc0,0xff,0x00,0x81,0x0a,0xf8,0x48,0x5f,0x44,0x7a,0x3f, +0xeb,0x4f,0x5b,0xc5,0xea,0x25,0xc7,0xe3,0x5a,0x2c,0xef,0x1b,0x1d,0xd2,0xfb,0x8e, +0xc8,0xf1,0x35,0x5e,0xa9,0x33,0xef,0xd8,0x3e,0x30,0xf8,0x6e,0x7c,0x62,0xec,0x0f, +0xc4,0x55,0xe8,0x7e,0x25,0x78,0x7e,0x7c,0x6d,0xbe,0x4f,0xc6,0xbf,0x3e,0x56,0xf9, +0x86,0x31,0x3b,0x7f,0xdf,0x55,0x3a,0x6a,0xd7,0x51,0xfd,0xcb,0xb9,0x07,0xd1,0xab, +0x65,0xc4,0x18,0x85,0xbc,0x11,0xd5,0x1e,0x25,0x7d,0x60,0x7e,0x86,0x47,0xe3,0x4d, +0x16,0x5c,0x62,0xfe,0x2f,0xc4,0xd5,0xa8,0xfc,0x45,0xa6,0xcb,0xf7,0x6f,0x61,0x3f, +0xf0,0x2a,0xfc,0xf1,0x8f,0xc4,0x7a,0x8c,0x7f,0x76,0xf6,0x51,0xff,0x00,0x02,0xab, +0x91,0x78,0xdf,0x5a,0x87,0xee,0xea,0x12,0x7e,0x75,0xb2,0xe2,0x29,0xaf,0x8a,0x9f, +0xe2,0x74,0x47,0x89,0x21,0xd6,0x07,0xe8,0x52,0xea,0x96,0x8f,0xf7,0x6e,0x62,0x3f, +0x46,0x15,0x2a,0xdc,0x44,0xdd,0x24,0x43,0xf4,0x22,0xbf,0x3f,0x20,0xf8,0x97,0xe2, +0x08,0x08,0xdb,0x7c,0xe7,0xeb,0x57,0xe1,0xf8,0xc5,0xe2,0x48,0x7f,0xe5,0xec,0x9a, +0xde,0x3c,0x45,0x0f,0xb5,0x4d,0x9d,0x31,0xe2,0x2c,0x3b,0xde,0x2c,0xfb,0xdc,0x3a, +0x9e,0x8c,0x0f,0xe3,0x4b,0x9a,0xf8,0x66,0xdf,0xe3,0xdf,0x89,0x2d,0xff,0x00,0xe5, +0xb6,0x7f,0x13,0x5a,0x96,0xdf,0xb4,0x87,0x88,0x21,0xc6,0xe6,0x2d,0xf8,0x9a,0xdd, +0x71,0x0e,0x1d,0xef,0x16,0x8d,0xe3,0x9f,0xe1,0x1e,0xec,0xfb,0x4b,0x38,0xa3,0x22, +0xbe,0x42,0xb7,0xfd,0xa8,0xb5,0x98,0xf1,0xb9,0x0f,0xe7,0x9a,0xd4,0xb5,0xfd,0xab, +0x2e,0xd7,0x1e,0x64,0x44,0xfe,0x15,0xba,0xcf,0xb0,0x8f,0x7b,0xfd,0xc7,0x44,0x73, +0xac,0x1c,0xbe,0xd1,0xf5,0x4e,0x45,0x15,0xf3,0x55,0xb7,0xed,0x5c,0xac,0x47,0x99, +0x00,0x03,0xfd,0xda,0xd5,0xb7,0xfd,0xaa,0x74,0xe6,0xc6,0xf8,0x97,0xf2,0x35,0xbc, +0x73,0x9c,0x14,0xbe,0xd9,0xd1,0x1c,0xd3,0x09,0x2d,0xa6,0x8f,0xa0,0x33,0x4b,0x5e, +0x25,0x6b,0xfb,0x4e,0x68,0xb2,0xfd,0xf0,0x8b,0xf8,0x9a,0xd5,0xb7,0xfd,0xa2,0xfc, +0x3b,0x36,0x01,0x60,0x0f,0xfb,0xd5,0xd1,0x1c,0xcf,0x07,0x2d,0xaa,0x23,0x75,0x8e, +0xc3,0xcb,0x69,0xa3,0xd6,0x28,0xaf,0x3a,0x83,0xe3,0x9f,0x86,0xe6,0xc7,0xfa,0x40, +0x5c,0xff,0x00,0xb4,0x2b,0x46,0xdf,0xe2,0xdf,0x87,0x6e,0x31,0x8b,0xb5,0x1f,0x52, +0x2b,0x75,0x8d,0xc3,0x4b,0x6a,0x8b,0xef,0x36,0x58,0x8a,0x2f,0x69,0x23,0xb4,0xa2, +0xb9,0xa8,0xfe,0x22,0xe8,0x12,0xfd,0xdb,0xf4,0xcd,0x5b,0x8b,0xc6,0x1a,0x44,0xdf, +0x76,0xfa,0x2f,0xc4,0xd6,0xca,0xbd,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0x90,0x7b,0x33, +0x6a,0x8a,0xce,0x4f,0x10,0x69,0xd2,0x7d,0xdb,0xc8,0x5b,0xfe,0x05,0x56,0x13,0x51, +0xb6,0x7e,0x97,0x11,0x1f,0xf8,0x18,0xad,0x14,0xe2,0xf6,0x65,0x73,0x2e,0xe5,0x9a, +0x2a,0x35,0xb8,0x89,0xfe,0xec,0x88,0x7e,0x8d,0x4f,0xdc,0x3d,0x45,0x55,0xca,0x16, +0x8a,0x29,0x33,0x4c,0x05,0xa2,0x93,0x34,0x66,0x80,0x16,0x8a,0x4a,0x33,0x40,0x0b, +0x45,0x14,0x94,0x01,0xf3,0xdf,0xed,0x45,0x77,0xb6,0xde,0x38,0xf3,0xd2,0x3c,0x57, +0xc7,0x5e,0x24,0xbc,0x5b,0x7b,0x39,0x58,0x9c,0x61,0x4d,0x7d,0x53,0xfb,0x54,0x5f, +0x88,0xee,0x4a,0x93,0x8c,0x28,0x02,0xbe,0x1a,0xf8,0x97,0xe2,0x95,0xb6,0xb3,0x78, +0x95,0xf2,0xc4,0x73,0xcd,0x7e,0x79,0x88,0xa6,0xeb,0xe6,0x53,0xf2,0xb1,0xf9,0x1f, +0x13,0xd4,0x73,0xc4,0xaa,0x31,0xdd,0x9e,0xad,0xff,0x00,0x04,0xe8,0xd3,0xe6,0xd6, +0x3f,0x69,0x8f,0x14,0xea,0xe1,0x37,0xda,0x69,0xfe,0x1f,0x92,0x06,0x7c,0xfd,0xd9, +0x25,0xb8,0x8b,0x60,0xfc,0x44,0x4f,0xf9,0x57,0xe9,0x78,0xaf,0x87,0x7f,0xe0,0x96, +0xbe,0x07,0x96,0xcb,0xc1,0x1e,0x34,0xf1,0xa4,0xe0,0x8f,0xed,0xcd,0x42,0x3b,0x3b, +0x70,0xc3,0xac,0x56,0xca,0xd9,0x61,0xf5,0x69,0x98,0x7f,0xc0,0x2b,0xee,0x3a,0xfb, +0xba,0x11,0xe5,0xa6,0x91,0xfa,0x46,0x59,0x43,0xea,0xf8,0x3a,0x74,0xfb,0x20,0xa2, +0x8a,0x2b,0xa0,0xf5,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0, +0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0, +0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x93,0x14,0xb4,0x50,0x02,0x62,0x8c, +0x52,0xd1,0x40,0x0d,0x23,0xd2,0x94,0x0a,0x5a,0x28,0x01,0x31,0x46,0xd1,0x4b,0x45, +0x00,0x46,0xd0,0xa3,0x82,0x19,0x15,0x81,0xec,0x45,0x54,0x9b,0x40,0xd3,0x6e,0x46, +0x26,0xd3,0xed,0x65,0x1f,0xed,0xc2,0xa7,0xfa,0x55,0xfa,0x2a,0x5c,0x53,0xdd,0x12, +0xe2,0x9e,0xe8,0xe7,0x6e,0x7e,0x1e,0x78,0x62,0xf3,0xfd,0x76,0x81,0xa7,0x3f,0xfd, +0xbb,0x20,0xfe,0x42,0xb2,0xee,0x7e,0x0b,0xf8,0x26,0xef,0x3e,0x67,0x87,0x2c,0xc6, +0x7f,0xb8,0xa5,0x3f,0x91,0x15,0xdb,0x51,0x59,0xba,0x34,0x9e,0xf1,0x5f,0x71,0x93, +0xa1,0x4a,0x5b,0xc1,0x7d,0xc8,0xf3,0x2b,0xbf,0xd9,0xc7,0xc0,0x37,0x60,0x8f,0xec, +0x51,0x1f,0xba,0x4c,0xff,0x00,0xd4,0x9a,0xc7,0xba,0xfd,0x93,0xfc,0x09,0x70,0x72, +0xb0,0xdd,0xc3,0xec,0x92,0xaf,0xf5,0x53,0x5e,0xcb,0x45,0x64,0xf0,0x94,0x1f,0xd8, +0x46,0x0f,0x03,0x86,0x7b,0xd3,0x5f,0x71,0xe0,0x37,0xbf,0xb1,0xaf,0x84,0x27,0xcf, +0x91,0x77,0x79,0x11,0x3f,0xdf,0xd8,0xf8,0xfd,0x05,0x61,0x5d,0x7e,0xc3,0xba,0x2c, +0xb9,0xf2,0xf5,0xc6,0x5f,0x4d,0xd6,0x80,0xff,0x00,0xec,0xf5,0xf4,0xdd,0x15,0x9b, +0xc0,0xe1,0xdf,0xd9,0xfc,0xcc,0x9e,0x5b,0x84,0x7f,0x63,0xf3,0x3e,0x46,0xd4,0x3f, +0x61,0x38,0x98,0x9f,0xb3,0x6a,0xd6,0x92,0x0f,0xfa,0x69,0x01,0x4f,0xe5,0x9a,0xe7, +0xef,0x3f,0x60,0xcd,0x49,0x89,0xf2,0xee,0xb4,0xb7,0x1d,0xbe,0x77,0x07,0xff,0x00, +0x40,0xaf,0xb6,0x31,0x46,0x2b,0x37,0x97,0x50,0xe9,0x75,0xf3,0x31,0x79,0x46,0x15, +0xf4,0x7f,0x79,0xf0,0x45,0xff,0x00,0xec,0x29,0xe2,0x18,0x81,0x31,0x5b,0x5a,0x4d, +0x8e,0xd1,0xdc,0x00,0x4f,0xe7,0x8a,0xc0,0xba,0xfd,0x89,0xbc,0x5d,0x10,0x24,0x69, +0x12,0x71,0xfd,0xcb,0x84,0x3f,0xc9,0xab,0xf4,0x5b,0x14,0x98,0x35,0x1f,0xd9,0xb4, +0xfa,0x49,0x9c,0xf2,0xc8,0xf0,0xd2,0xea,0xff,0x00,0x0f,0xf2,0x3f,0x33,0x2f,0xbf, +0x64,0xaf,0x18,0x59,0x96,0x1f,0xd8,0xda,0x96,0x47,0xfc,0xf3,0x8d,0x98,0x7e,0x60, +0x56,0x15,0xdf,0xec,0xe7,0xe2,0xcb,0x30,0x49,0xd3,0xf5,0x38,0xc0,0xea,0x5a,0xdd, +0xb1,0xfc,0xab,0xf5,0x47,0x14,0x9b,0x73,0xd6,0xb3,0x79,0x6f,0x6a,0x8c,0xe5,0x97, +0x0e,0xe1,0xe5,0xd7,0xf0,0x47,0xe4,0xbd,0xcf,0xc2,0x3f,0x11,0xd9,0x83,0x93,0x70, +0x9f,0xef,0x46,0x45,0x51,0x93,0xc0,0xfe,0x25,0xb7,0xe9,0x23,0xf1,0xea,0xa6,0xbf, +0x5c,0xde,0xde,0x39,0x06,0x19,0x15,0x87,0xa3,0x0c,0xd5,0x3b,0x8f,0x0f,0x69,0x77, +0x9f,0xeb,0xf4,0xeb,0x49,0xbf,0xdf,0x81,0x5b,0xf9,0x8a,0xcd,0xe5,0xd3,0xe9,0x3f, +0xc0,0xe3,0x9f,0x0b,0xd0,0x97,0x6f,0xbb,0xfe,0x09,0xf9,0x24,0xda,0x1f,0x8a,0x2d, +0xfb,0x96,0xc7,0xd6,0xa3,0x2b,0xe2,0x58,0x3a,0xc5,0xbb,0xe8,0x6b,0xf5,0x7a,0xe3, +0xe1,0xb7,0x85,0x6e,0xb3,0xe6,0xf8,0x7b,0x4d,0x6c,0xf5,0x3f,0x66,0x40,0x7f,0x41, +0x59,0x57,0x5f,0x04,0x7c,0x0f,0x77,0xf7,0xfc,0x3b,0x68,0x3d,0x76,0xee,0x5f,0xe4, +0x6b,0x27,0x96,0xd5,0xee,0x99,0xc7,0x2e,0x14,0xa6,0xf6,0xb7,0xe2,0x7e,0x5a,0xff, +0x00,0x6a,0xf8,0x86,0x1f,0xbd,0x6a,0xc7,0x1e,0x94,0xe1,0xe2,0x9d,0x62,0x2f,0xbf, +0x67,0x27,0xfd,0xf3,0x5f,0xa6,0x37,0x7f,0xb3,0x5f,0x80,0x2e,0xff,0x00,0xe6,0x0c, +0x61,0xff,0x00,0xae,0x73,0x3f,0xf5,0x26,0xb1,0xee,0xbf,0x64,0xbf,0x01,0xdc,0x92, +0x56,0x1b,0xd8,0x7d,0x92,0x65,0xfe,0xaa,0x6b,0x17,0x96,0xd5,0xfe,0x58,0x9c,0xb2, +0xe1,0x3e,0xcb,0xf1,0x7f,0xe4,0x7e,0x74,0x8f,0x1c,0xde,0xc6,0x7e,0x7b,0x59,0x07, +0xe0,0x6a,0x54,0xf8,0x88,0xeb,0xf7,0xe2,0x71,0xf9,0xd7,0xde,0xd7,0xbf,0xb1,0x87, +0x85,0x27,0xcf,0x91,0x7f,0x79,0x0f,0xfb,0xea,0xaf,0xfe,0x15,0x89,0x75,0xfb,0x0e, +0x68,0xf2,0x92,0x63,0xd7,0x18,0x7b,0x35,0xa0,0x3f,0xfb,0x3d,0x61,0x2c,0xb6,0xa7, +0x5a,0x6b,0xef,0x39,0xa5,0xc2,0xd5,0x97,0xc3,0x7f,0xbd,0x1f,0x16,0xc7,0xf1,0x1e, +0x2e,0xe0,0x8a,0xb3,0x1f,0xc4,0x4b,0x66,0xea,0xf5,0xf5,0x5e,0xa1,0xfb,0x08,0x29, +0xcf,0xd9,0xb5,0x6b,0x39,0x07,0x6f,0x36,0x16,0x5f,0xe5,0x9a,0xe7,0xee,0xff,0x00, +0x60,0xbd,0x4c,0x82,0x52,0xe7,0x4a,0x7f,0x6d,0xce,0x3f,0xf6,0x4a,0xc2,0x59,0x6b, +0xeb,0x49,0x9c,0xd2,0xe1,0xcc,0x5c,0x76,0x72,0xfc,0x19,0xf3,0xec,0x7e,0x3d,0xb4, +0x7c,0x66,0x40,0x3e,0xb5,0x66,0x3f,0x1a,0xd9,0xbe,0x3f,0x7a,0xb5,0xea,0xfa,0x87, +0xec,0x2f,0xe2,0x58,0x58,0x88,0xac,0x6d,0xe7,0x03,0xbc,0x57,0x0a,0x07,0xea,0x45, +0x61,0x5e,0x7e,0xc5,0x3e,0x2f,0x81,0x49,0x1a,0x3c,0xa7,0x1f,0xf3,0xce,0x74,0x6f, +0xe4,0xd5,0x83,0xcb,0xa3,0xd6,0x9c,0x97,0xc8,0xe7,0x96,0x49,0x8e,0x8e,0xd2,0x7f, +0xf8,0x09,0xc6,0xc7,0xe2,0xcb,0x47,0xc7,0xef,0x53,0xf3,0xa9,0xd3,0xc4,0x76,0xaf, +0xd2,0x45,0x3f,0x8d,0x5d,0xbc,0xfd,0x93,0x7c,0x61,0x66,0x0b,0x7f,0x62,0xea,0x60, +0x7f,0xb1,0x13,0x37,0xf2,0x15,0x87,0x79,0xfb,0x3b,0xf8,0xb2,0xc7,0xef,0xe9,0xfa, +0x9c,0x5f,0xef,0xdb,0xb0,0xfe,0x95,0xce,0xf0,0x14,0x97,0x46,0xbe,0x47,0x3c,0xb2, +0xec,0x74,0x3e,0xd7,0xe0,0xcd,0x55,0xd6,0xad,0xdb,0xf8,0x87,0xe7,0x52,0x0d,0x4e, +0x06,0xfe,0x31,0x5c,0x6d,0xc7,0xc2,0x9f,0x10,0xda,0x31,0x52,0xd3,0xa1,0x07,0x18, +0x68,0xc8,0xaa,0x72,0x78,0x23,0xc4,0x96,0xfd,0x24,0x63,0x8f,0xf6,0x4d,0x66,0xf0, +0x34,0xba,0x48,0xc1,0xe1,0x71,0xb1,0xec,0xcf,0x41,0x17,0xf0,0xff,0x00,0x7a,0x9e, +0xb7,0x91,0xf6,0x7f,0xd6,0xbc,0xd1,0xb4,0x4f,0x13,0x41,0xdc,0x9f,0x6e,0x69,0xa4, +0x78,0x96,0x0e,0xb1,0x16,0xfc,0x6b,0x37,0x97,0xc5,0xed,0x22,0x7d,0x9e,0x35,0x7d, +0x84,0xfe,0x67,0xa8,0xad,0xe0,0x1d,0x25,0x23,0xf1,0xa9,0x93,0x50,0x95,0x7e,0xed, +0xc3,0x8f,0xa3,0x57,0x93,0xff,0x00,0x6a,0xf8,0x82,0x1f,0xbd,0x6a,0xc7,0x1e,0x94, +0xa3,0xc5,0x3a,0xbc,0x5f,0x7e,0xd2,0x4f,0xfb,0xe6,0xa1,0xe5,0xcf,0xa4,0x90,0x73, +0x62,0xe3,0xbd,0x37,0xf7,0x9e,0xbd,0x1e,0xb5,0x7b,0x11,0xf9,0x2e,0xe4,0x1f,0x47, +0x35,0x65,0x3c,0x55,0xaa,0xc7,0xf7,0x6f,0xa5,0xff,0x00,0xbe,0x8d,0x78,0xe0,0xf1, +0xcd,0xe4,0x7f,0x7e,0xda,0x41,0xff,0x00,0x01,0x35,0x2a,0x7c,0x44,0x61,0xf7,0xa2, +0x71,0x51,0xfd,0x9f,0x55,0x6c,0xff,0x00,0x11,0xac,0x5e,0x26,0x3b,0xc2,0x47,0xb4, +0xc3,0xe3,0xcd,0x72,0x0f,0xbb,0x7d,0x27,0xe2,0x6a,0xec,0x3f,0x14,0x7c,0x43,0x0e, +0x31,0x7a,0xe7,0xea,0x6b,0xc4,0x13,0xe2,0x3c,0x47,0x19,0xdd,0x56,0xa3,0xf8,0x89, +0x6c,0x71,0x97,0x22,0x8f,0xa9,0xe2,0x63,0xb5,0xfe,0xf3,0x45,0x9a,0x57,0x86,0xfc, +0xcb,0xef,0x3d,0xda,0xdf,0xe3,0x4f,0x89,0x20,0xc6,0x2e,0x4f,0xe6,0x6b,0x46,0xdb, +0xe3,0xff,0x00,0x88,0xa0,0xc6,0x64,0x2c,0x7d,0x77,0x57,0x81,0x47,0xe3,0xdb,0x46, +0xff,0x00,0x96,0x95,0x66,0x3f,0x1a,0xda,0x37,0xfc,0xb5,0x5a,0x7c,0x98,0xc8,0x6d, +0x27,0xf7,0x9b,0x47,0x3c,0xad,0x1f,0xb6,0xfe,0xe3,0xe8,0x8b,0x7f,0xda,0x53,0x5f, +0x8b,0x86,0x27,0x1e,0xcd,0x5a,0x96,0xdf,0xb5,0x26,0xab,0x10,0x1b,0xe3,0x63,0xf5, +0x35,0xf3,0x5c,0x7e,0x2d,0xb4,0x7e,0x92,0xaf,0xe7,0x53,0xaf,0x88,0xed,0x5f,0xa3, +0xaf,0xe7,0x56,0xab,0xe3,0xe1,0xb4,0xd9,0xd3,0x1e,0x22,0xac,0xbf,0xe5,0xe1,0xf5, +0x0d,0xb7,0xed,0x59,0x73,0x91,0xe6,0xa1,0xff,0x00,0xbe,0x45,0x6b,0x5b,0x7e,0xd5, +0xb0,0xb6,0x03,0xc2,0x3e,0xa4,0x57,0xc9,0xc9,0xad,0xdb,0xbf,0xf1,0x8f,0xce,0xa5, +0x5d,0x52,0x06,0xfe,0x2a,0xb5,0x98,0x66,0x10,0xfb,0x6f,0xee,0x3a,0xe1,0xc4,0x95, +0x97,0xdb,0x47,0xd8,0x16,0xbf,0xb5,0x26,0x9a,0xc3,0xf7,0xa8,0xbf,0x91,0xad,0x4b, +0x6f,0xda,0x5b,0x44,0x9b,0x19,0x0a,0x3f,0x1a,0xf8,0xb4,0x6a,0x30,0x9e,0x77,0x0a, +0x6b,0xea,0xb0,0x20,0x3f,0x3f,0xeb,0x5b,0x47,0x36,0xc7,0xad,0x2f,0x7f,0x91,0xd4, +0xb8,0x9e,0xac,0x77,0x68,0xfb,0xa2,0xdf,0xf6,0x84,0xf0,0xec,0xa0,0x66,0x50,0x0f, +0xb3,0x0a,0xb7,0x37,0xc7,0x8f,0x0d,0x43,0x6e,0x65,0x7b,0x8c,0x01,0xdb,0x70,0xcd, +0x7e,0x7b,0xdf,0xf8,0xce,0xd6,0xc9,0x09,0x33,0x85,0xc7,0xfb,0x55,0xc0,0x78,0x93, +0xe2,0xcc,0x80,0x34,0x76,0x92,0xb1,0x27,0xbe,0x6b,0xd5,0xa1,0x8f,0xcc,0x2a,0xbd, +0x52,0x17,0xfa,0xd9,0x56,0x4f,0x96,0x9d,0x3e,0x66,0x7b,0xb7,0xed,0x37,0xf1,0xc6, +0xcf,0x5f,0xd5,0xee,0xe4,0xb5,0x93,0x31,0x74,0x8c,0x1e,0xb5,0xf2,0xd7,0x87,0x3c, +0x2b,0xaf,0xfc,0x6d,0xf1,0xe6,0x9f,0xe1,0x8d,0x0a,0x16,0xb8,0xd4,0x35,0x09,0x76, +0x6e,0xfe,0x08,0x63,0xcf,0xcd,0x23,0x9e,0xca,0xa3,0x24,0x9f,0x6f,0x5a,0x93,0xc2, +0xbe,0x13,0xf1,0x57,0xc6,0x6f,0x16,0x41,0xa3,0x68,0x36,0x13,0x6a,0xba,0x95,0xc3, +0x70,0x89,0xf7,0x51,0x7b,0xbb,0xb1,0xe1,0x54,0x77,0x27,0xfa,0x8a,0xfd,0x46,0xfd, +0x97,0x3f,0x65,0xdd,0x1b,0xf6,0x79,0xf0,0xdb,0x39,0x31,0xea,0x5e,0x2b,0xbe,0x41, +0xfd,0xa1,0xa9,0xe3,0x8c,0x75,0xf2,0xa2,0xcf,0x21,0x01,0xfc,0x58,0xf2,0x7b,0x01, +0xe9,0x61,0x70,0xaf,0x99,0xce,0x5b,0xbd,0x5b,0x34,0xcb,0x30,0x15,0x73,0x1c,0x53, +0xc6,0x62,0x3f,0xe0,0x7a,0x23,0xd2,0xfe,0x17,0x7c,0x3e,0xd3,0x7e,0x15,0xf8,0x03, +0x44,0xf0,0xa6,0x92,0x81,0x6c,0x74,0xbb,0x65,0x81,0x5b,0x1c,0xbb,0x75,0x67,0x3e, +0xec,0xc4,0x93,0xf5,0xae,0xaa,0x90,0x0c,0x52,0xd7,0xd0,0x25,0x6d,0x0f,0xd2,0xd2, +0xb2,0xb2,0x0a,0x28,0xa2,0x81,0x85,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14, +0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x46,0x29,0x68,0xa0,0x04,0xc5,0x18,0xa5,0xa2, +0x80,0x13,0x6d,0x26,0xda,0x75,0x14,0x01,0x13,0xda,0xc3,0x26,0x77,0xc4,0x8d,0x9e, +0xb9,0x50,0x6a,0x8d,0xc7,0x86,0xb4,0x9b,0xa0,0x44,0xda,0x5d,0x9c,0xca,0x7a,0x89, +0x20,0x43,0xfd,0x2b,0x4e,0x8a,0x97,0x18,0xbd,0xd1,0x2e,0x31,0x7b,0xa3,0x98,0xb9, +0xf8,0x65,0xe1,0x3b,0xb1,0xfb,0xdf,0x0e,0xe9,0xa7,0xe9,0x6c,0x8b,0xfc,0x85,0x65, +0xdd,0x7c,0x0e,0xf0,0x35,0xd9,0x26,0x4f,0x0e,0x5a,0x0f,0xf7,0x37,0x27,0xf2,0x22, +0xbb,0xba,0x2b,0x37,0x42,0x93,0xde,0x2b,0xee,0x31,0x78,0x7a,0x32,0xde,0x0b,0xee, +0x47,0x96,0x5d,0xfe,0xcc,0xfe,0x00,0xbb,0x24,0xff,0x00,0x64,0x34,0x24,0xff,0x00, +0xcf,0x39,0x9b,0x8f,0xcc,0x9a,0xc7,0xba,0xfd,0x91,0xfc,0x0b,0x71,0xf7,0x12,0xf6, +0x13,0xfe,0xcc,0xaa,0x7f,0x9a,0xd7,0xb5,0xd1,0x59,0x3c,0x25,0x07,0xf6,0x11,0x8b, +0xc0,0xe1,0x9f,0xfc,0xbb,0x47,0xcf,0x37,0xbf,0xb1,0x77,0x85,0x67,0x27,0xc8,0xd4, +0x2e,0xe1,0x1e,0x8e,0x88,0xff,0x00,0xcb,0x15,0x8b,0x75,0xfb,0x0d,0x69,0x12,0xe7, +0xcb,0xd7,0x58,0x7a,0x6f,0xb4,0x07,0xff,0x00,0x66,0xaf,0xa8,0x28,0xac,0xde,0x07, +0x0e,0xfe,0xcf,0xe6,0x64,0xf2,0xcc,0x2b,0xfb,0x1f,0x8b,0x3e,0x3e,0xbf,0xfd,0x84, +0x1c,0x93,0xf6,0x7d,0x56,0xc6,0x40,0x7f,0xe7,0xac,0x4c,0xbf,0xc8,0x1a,0xc1,0xbd, +0xfd,0x83,0x35,0x65,0xc9,0x8e,0xe7,0x4b,0x97,0xe8,0xee,0x0f,0xea,0xa2,0xbe,0xdf, +0xa4,0x6e,0x95,0x93,0xcb,0xa8,0x74,0xbf,0xde,0x60,0xf2,0x8c,0x2b,0xe8,0xfe,0xf3, +0xe0,0x0b,0xef,0xd8,0x67,0xc4,0xd1,0x93,0xe5,0xe9,0xf0,0x4c,0x3f,0xe9,0x95,0xc2, +0x0f,0xe6,0x45,0x61,0x5e,0x7e,0xc5,0x7e,0x30,0xb7,0x04,0x8d,0x16,0x63,0xff,0x00, +0x5c,0xe7,0x46,0xfe,0x4c,0x6b,0xf4,0x6c,0x75,0xa0,0x75,0xac,0xde,0x5d,0x4f,0xa4, +0x99,0xcf,0x2c,0x8f,0x0c,0xfa,0xbf,0xc3,0xfc,0x8f,0xcc,0x3b,0xcf,0xd9,0x53,0xc5, +0xd6,0x8c,0x41,0xd1,0x35,0x51,0x8f,0xee,0xc0,0xec,0x3f,0x30,0x2b,0x16,0xfb,0xf6, +0x7b,0xf1,0x56,0x9e,0xa5,0xa4,0xb1,0xd4,0xa1,0x03,0xbb,0xc0,0xc3,0xfa,0x57,0xea, +0xb8,0xe9,0x4d,0x3c,0xd4,0x3c,0xbb,0xb4,0xd9,0xcb,0x2e,0x1d,0xc3,0xbe,0xbf,0x82, +0x3f,0x24,0x67,0xf8,0x59,0xaf,0xda,0x9c,0x16,0x99,0x7f,0xde,0x42,0x2a,0xa3,0xf8, +0x2b,0xc4,0x50,0x1e,0x25,0x6f,0xc4,0x1a,0xfd,0x75,0x96,0xd6,0x19,0x57,0xe7,0x89, +0x1f,0xfd,0xe5,0x06,0xb3,0x2f,0x3c,0x37,0xa4,0x5d,0xff,0x00,0xaf,0xd2,0xec,0xa6, +0xff,0x00,0xae,0x96,0xe8,0xdf,0xcc,0x57,0x34,0xf0,0x72,0x8f,0xdb,0xfc,0x3f,0xe0, +0x9e,0x65,0x5e,0x1d,0xc3,0xc7,0xb7,0xdd,0xff,0x00,0x04,0xfc,0x94,0x9b,0x44,0xf1, +0x2c,0x2b,0xc3,0x13,0xf4,0xcd,0x64,0x5d,0xe8,0x9e,0x28,0x94,0x13,0x99,0x31,0xec, +0x09,0xaf,0xd4,0x6f,0x14,0x78,0x37,0x40,0x44,0x98,0xae,0x87,0xa6,0x83,0x8e,0xa2, +0xd2,0x3f,0xf0,0xac,0x0f,0x06,0xf8,0x4b,0x43,0x9e,0xf1,0xd6,0x5d,0x1b,0x4f,0x91, +0x72,0x38,0x7b,0x54,0x23,0xf9,0x57,0x1c,0x63,0x25,0x2b,0x2b,0x7d,0xc7,0x8f,0x2c, +0x97,0x0c,0xa5,0xca,0x92,0xfb,0x8f,0xcc,0x9b,0x2f,0x86,0x9e,0x2d,0xf1,0x2d,0xd8, +0xb7,0xb3,0xd3,0xef,0x75,0x19,0xd8,0xf1,0x15,0xbc,0x4c,0xed,0xcf,0xb0,0x15,0xf4, +0x27,0xc2,0x4f,0xf8,0x27,0x6f,0x8a,0x7c,0x4d,0x3c,0x37,0x7e,0x31,0xb9,0x5f,0x0d, +0xe9,0x99,0x05,0xa0,0x52,0x24,0xba,0x71,0xd7,0x85,0x1f,0x2a,0xfd,0x58,0xe4,0x7f, +0x76,0xbf,0x46,0x74,0xed,0x2e,0xcf,0x4c,0xb7,0x58,0xac,0xed,0x20,0xb4,0x8c,0x0e, +0x12,0x08,0xd5,0x00,0xfc,0x00,0xab,0x8b,0x5e,0xfd,0x1c,0x3d,0xd2,0x94,0xdd,0xcf, +0xa2,0xc0,0xf0,0xed,0x18,0x5a,0x75,0x26,0xe4,0xbb,0x5a,0xc8,0xe2,0x7e,0x16,0xfc, +0x1b,0xf0,0xa7,0xc1,0xcd,0x0c,0x69,0x9e,0x18,0xd2,0xe3,0xb3,0x46,0x03,0xce,0xb8, +0x6f,0x9a,0x79,0xc8,0xef,0x23,0xf5,0x3f,0x4e,0x83,0xb0,0x15,0xdb,0x8e,0x28,0x1d, +0x29,0x6b,0xd0,0x49,0x25,0x64,0x7d,0x8c,0x29,0xc6,0x9c,0x54,0x20,0xac,0x90,0x51, +0x45,0x14,0xcd,0x02,0x8a,0x28,0xa0,0x0f,0xff,0xd9,}; + +static const unsigned int dummy_align__runtime_shtml = 3; +static const unsigned char data__runtime_shtml[] = { +/* /runtime.shtml (15 chars) */ +0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00, + +/* HTTP header */ +/* "HTTP/1.0 200 OK +" (17 bytes) */ +0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d, +0x0a, +/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip) +" (63 bytes) */ +0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33, +0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e, +0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70, +0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a, +/* "Content-type: text/html +Expires: Fri, 10 Apr 2008 14:00:00 GMT +Pragma: no-cache + +" (85 bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65, +0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73, +0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30, +0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d, +0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68, +0x65,0x0d,0x0a,0x0d,0x0a, +/* raw file data (882 bytes) */ +0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50, +0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, +0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61, +0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22, +0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, +0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65, +0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a, +0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74, +0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72, +0x67,0x20,0x75,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,0x72, +0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,0x20, +0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,0x44, +0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,0x77, +0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,0x6f, +0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,0x3d, +0x27,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,0x26, +0x71,0x75,0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,0x3c, +0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,0x6c, +0x22,0x3e,0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,0x64, +0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,0x53, +0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62, +0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,0x69, +0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,0x69, +0x6d,0x65,0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e, +0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x73, +0x74,0x61,0x74,0x73,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x43,0x50,0x20, +0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f, +0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x74,0x63,0x70,0x2e, +0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x43,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x69,0x6f, +0x6e,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20, +0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, +0x77,0x77,0x77,0x2e,0x66,0x72,0x65,0x65,0x72,0x74,0x6f,0x73,0x2e,0x6f,0x72,0x67, +0x2f,0x22,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x20,0x48,0x6f,0x6d,0x65, +0x70,0x61,0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62, +0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6f,0x2e,0x73,0x68, +0x74,0x6d,0x6c,0x22,0x3e,0x49,0x4f,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c, +0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x6c,0x6f, +0x67,0x6f,0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,0x6a,0x70,0x67,0x3c, +0x2f,0x61,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x68, +0x72,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x68,0x32, +0x3e,0x52,0x75,0x6e,0x2d,0x74,0x69,0x6d,0x65,0x20,0x73,0x74,0x61,0x74,0x69,0x73, +0x74,0x69,0x63,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x50,0x61,0x67,0x65,0x20, +0x77,0x69,0x6c,0x6c,0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x65,0x76,0x65, +0x72,0x79,0x20,0x32,0x20,0x73,0x65,0x63,0x6f,0x6e,0x64,0x73,0x2e,0x3c,0x70,0x3e, +0x0d,0x0a,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x63,0x6f, +0x75,0x72,0x69,0x65,0x72,0x22,0x3e,0x3c,0x70,0x72,0x65,0x3e,0x54,0x61,0x73,0x6b, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x41,0x62,0x73,0x20, +0x54,0x69,0x6d,0x65,0x20,0x20,0x20,0x20,0x20,0x20,0x25,0x20,0x54,0x69,0x6d,0x65, +0x3c,0x62,0x72,0x3e,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3c,0x62,0x72,0x3e, +0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,0x75,0x6e,0x5f,0x73,0x74,0x61,0x74,0x73, +0x2d,0x2d,0x3e,0x0d,0x0d,0x0a,0x3c,0x2f,0x70,0x72,0x65,0x3e,0x3c,0x2f,0x66,0x6f, +0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f, +0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a, +0x0d,0x0a,}; + + + +const struct fsdata_file file__404_html[] = { { +file_NULL, +data__404_html, +data__404_html + 12, +sizeof(data__404_html) - 12, +1, +}}; + +const struct fsdata_file file__index_shtml[] = { { +file__404_html, +data__index_shtml, +data__index_shtml + 16, +sizeof(data__index_shtml) - 16, +1, +}}; + +const struct fsdata_file file__logo_jpg[] = { { +file__index_shtml, +data__logo_jpg, +data__logo_jpg + 12, +sizeof(data__logo_jpg) - 12, +1, +}}; + +const struct fsdata_file file__runtime_shtml[] = { { +file__logo_jpg, +data__runtime_shtml, +data__runtime_shtml + 16, +sizeof(data__runtime_shtml) - 16, +1, +}}; + +#define FS_ROOT file__runtime_shtml +#define FS_NUMFILES 4 + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.h new file mode 100644 index 000000000..6f6c557f3 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/fsdata.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __FSDATA_H__ +#define __FSDATA_H__ + +#include "lwip/opt.h" +#include "fs.h" + +struct fsdata_file { + const struct fsdata_file *next; + const unsigned char *name; + const unsigned char *data; + int len; + u8_t http_header_included; +#if HTTPD_PRECALCULATED_CHECKSUM + u16_t chksum_count; + const struct fsdata_chksum *chksum; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ +}; + +#endif /* __FSDATA_H__ */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.c new file mode 100644 index 000000000..6f1132caf --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.c @@ -0,0 +1,2184 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* This httpd supports for a + * rudimentary server-side-include facility which will replace tags of the form + * in any file whose extension is .shtml, .shtm or .ssi with + * strings provided by an include handler whose pointer is provided to the + * module via function http_set_ssi_handler(). + * Additionally, a simple common + * gateway interface (CGI) handling mechanism has been added to allow clients + * to hook functions to particular request URIs. + * + * To enable SSI support, define label LWIP_HTTPD_SSI in lwipopts.h. + * To enable CGI support, define label LWIP_HTTPD_CGI in lwipopts.h. + * + * By default, the server assumes that HTTP headers are already present in + * each file stored in the file system. By defining LWIP_HTTPD_DYNAMIC_HEADERS in + * lwipopts.h, this behavior can be changed such that the server inserts the + * headers automatically based on the extension of the file being served. If + * this mode is used, be careful to ensure that the file system image used + * does not already contain the header information. + * + * File system images without headers can be created using the makefsfile + * tool with the -h command line option. + * + * + * Notes about valid SSI tags + * -------------------------- + * + * The following assumptions are made about tags used in SSI markers: + * + * 1. No tag may contain '-' or whitespace characters within the tag name. + * 2. Whitespace is allowed between the tag leadin "". + * 3. The maximum tag name length is LWIP_HTTPD_MAX_TAG_NAME_LEN, currently 8 characters. + * + * Notes on CGI usage + * ------------------ + * + * The simple CGI support offered here works with GET method requests only + * and can handle up to 16 parameters encoded into the URI. The handler + * function may not write directly to the HTTP output but must return a + * filename that the HTTP server will send to the browser as a response to + * the incoming CGI request. + * + * @todo: + * - don't use mem_malloc() (for SSI/dynamic headers) + * - split too long functions into multiple smaller functions? + * - support more file types? + */ +#include "lwip/debug.h" +#include "lwip/stats.h" +#include "httpd.h" +#include "httpd_structs.h" +#include "lwip/tcp.h" +#include "fs.h" + +#include +#include + +#if LWIP_TCP + +#ifndef HTTPD_DEBUG +#define HTTPD_DEBUG LWIP_DBG_OFF +#endif + +/** Set this to 1 and add the next line to lwippools.h to use a memp pool + * for allocating struct http_state instead of the heap: + * + * LWIP_MEMPOOL(HTTPD_STATE, 20, 100, "HTTPD_STATE") + */ +#ifndef HTTPD_USE_MEM_POOL +#define HTTPD_USE_MEM_POOL 0 +#endif + +/** The server port for HTTPD to use */ +#ifndef HTTPD_SERVER_PORT +#define HTTPD_SERVER_PORT 80 +#endif + +/** Maximum retries before the connection is aborted/closed. + * - number of times pcb->poll is called -> default is 4*500ms = 2s; + * - reset when pcb->sent is called + */ +#ifndef HTTPD_MAX_RETRIES +#define HTTPD_MAX_RETRIES 4 +#endif + +/** The poll delay is X*500ms */ +#ifndef HTTPD_POLL_INTERVAL +#define HTTPD_POLL_INTERVAL 4 +#endif + +/** Priority for tcp pcbs created by HTTPD (very low by default). + * Lower priorities get killed first when running out of memroy. + */ +#ifndef HTTPD_TCP_PRIO +#define HTTPD_TCP_PRIO TCP_PRIO_MIN +#endif + +/** Set this to 1 to enabled timing each file sent */ +#ifndef LWIP_HTTPD_TIMING +#define LWIP_HTTPD_TIMING 0 +#endif +#ifndef HTTPD_DEBUG_TIMING +#define HTTPD_DEBUG_TIMING LWIP_DBG_OFF +#endif + +/** Set this to 1 on platforms where strnstr is not available */ +#ifndef LWIP_HTTPD_STRNSTR_PRIVATE +#define LWIP_HTTPD_STRNSTR_PRIVATE 1 +#endif + +/** Set this to one to show error pages when parsing a request fails instead + of simply closing the connection. */ +#ifndef LWIP_HTTPD_SUPPORT_EXTSTATUS +#define LWIP_HTTPD_SUPPORT_EXTSTATUS 0 +#endif + +/** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */ +#ifndef LWIP_HTTPD_SUPPORT_V09 +#define LWIP_HTTPD_SUPPORT_V09 1 +#endif + +/** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */ +#ifndef LWIP_HTTPD_SUPPORT_REQUESTLIST +#define LWIP_HTTPD_SUPPORT_REQUESTLIST 0 +#endif + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST +/** Number of rx pbufs to enqueue to parse an incoming request (up to the first + newline) */ +#ifndef LWIP_HTTPD_REQ_QUEUELEN +#define LWIP_HTTPD_REQ_QUEUELEN 10 +#endif + +/** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming + request (up to the first double-newline) */ +#ifndef LWIP_HTTPD_REQ_BUFSIZE +#define LWIP_HTTPD_REQ_BUFSIZE LWIP_HTTPD_MAX_REQ_LENGTH +#endif + +/** Defines the maximum length of a HTTP request line (up to the first CRLF, + copied from pbuf into this a global buffer when pbuf- or packet-queues + are received - otherwise the input pbuf is used directly) */ +#ifndef LWIP_HTTPD_MAX_REQ_LENGTH +#define LWIP_HTTPD_MAX_REQ_LENGTH 1023 +#endif +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + +/** Maximum length of the filename to send as response to a POST request, + * filled in by the application when a POST is finished. + */ +#ifndef LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN +#define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63 +#endif + +/** Set this to 0 to not send the SSI tag (default is on, so the tag will + * be sent in the HTML page */ +#ifndef LWIP_HTTPD_SSI_INCLUDE_TAG +#define LWIP_HTTPD_SSI_INCLUDE_TAG 1 +#endif + +/** Set this to 1 to call tcp_abort when tcp_close fails with memory error. + * This can be used to prevent consuming all memory in situations where the + * HTTP server has low priority compared to other communication. */ +#ifndef LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR +#define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR 0 +#endif + +#ifndef true +#define true ((u8_t)1) +#endif + +#ifndef false +#define false ((u8_t)0) +#endif + +/** Minimum length for a valid HTTP/0.9 request: "GET /\r\n" -> 7 bytes */ +#define MIN_REQ_LEN 7 + +#define CRLF "\r\n" + +/** These defines check whether tcp_write has to copy data or not */ + +/** This was TI's check whether to let TCP copy data or not +#define HTTP_IS_DATA_VOLATILE(hs) ((hs->file < (char *)0x20000000) ? 0 : TCP_WRITE_FLAG_COPY)*/ +#ifndef HTTP_IS_DATA_VOLATILE +#if LWIP_HTTPD_SSI +/* Copy for SSI files, no copy for non-SSI files */ +#define HTTP_IS_DATA_VOLATILE(hs) ((hs)->tag_check ? TCP_WRITE_FLAG_COPY : 0) +#else /* LWIP_HTTPD_SSI */ +/** Default: don't copy if the data is sent from file-system directly */ +#define HTTP_IS_DATA_VOLATILE(hs) (((hs->file != NULL) && (hs->handle != NULL) && (hs->file == \ + (char*)hs->handle->data + hs->handle->len - hs->left)) \ + ? 0 : TCP_WRITE_FLAG_COPY) +#endif /* LWIP_HTTPD_SSI */ +#endif + +/** Default: headers are sent from ROM */ +#ifndef HTTP_IS_HDR_VOLATILE +#define HTTP_IS_HDR_VOLATILE(hs, ptr) 0 +#endif + +#if LWIP_HTTPD_SSI +/** Default: Tags are sent from struct http_state and are therefore volatile */ +#ifndef HTTP_IS_TAG_VOLATILE +#define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY +#endif +#endif /* LWIP_HTTPD_SSI */ + +typedef struct +{ + const char *name; + u8_t shtml; +} default_filename; + +const default_filename g_psDefaultFilenames[] = { + {"/index.shtml", true }, + {"/index.ssi", true }, + {"/index.shtm", true }, + {"/index.html", false }, + {"/index.htm", false } +}; + +#define NUM_DEFAULT_FILENAMES (sizeof(g_psDefaultFilenames) / \ + sizeof(default_filename)) + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST +/** HTTP request is copied here from pbufs for simple parsing */ +static char httpd_req_buf[LWIP_HTTPD_MAX_REQ_LENGTH+1]; +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + +#if LWIP_HTTPD_SUPPORT_POST +/** Filename for response file to send when POST is finished */ +static char http_post_response_filename[LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN+1]; +#endif /* LWIP_HTTPD_SUPPORT_POST */ + +#if LWIP_HTTPD_DYNAMIC_HEADERS +/* The number of individual strings that comprise the headers sent before each + * requested file. + */ +#define NUM_FILE_HDR_STRINGS 3 +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + +#if LWIP_HTTPD_SSI + +#define HTTPD_LAST_TAG_PART 0xFFFF + +const char * const g_pcSSIExtensions[] = { + ".shtml", ".shtm", ".ssi", ".xml" +}; + +#define NUM_SHTML_EXTENSIONS (sizeof(g_pcSSIExtensions) / sizeof(const char *)) + +enum tag_check_state { + TAG_NONE, /* Not processing an SSI tag */ + TAG_LEADIN, /* Tag lead in "" being processed */ + TAG_SENDING /* Sending tag replacement string */ +}; +#endif /* LWIP_HTTPD_SSI */ + +struct http_state { + struct fs_file *handle; + char *file; /* Pointer to first unsent byte in buf. */ + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + struct pbuf *req; +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + +#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS + char *buf; /* File read buffer. */ + int buf_len; /* Size of file read buffer, buf. */ +#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ + u32_t left; /* Number of unsent bytes in buf. */ + u8_t retries; +#if LWIP_HTTPD_SSI + const char *parsed; /* Pointer to the first unparsed byte in buf. */ +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + const char *tag_started;/* Poitner to the first opening '<' of the tag. */ +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */ + const char *tag_end; /* Pointer to char after the closing '>' of the tag. */ + u32_t parse_left; /* Number of unparsed bytes in buf. */ + u16_t tag_index; /* Counter used by tag parsing state machine */ + u16_t tag_insert_len; /* Length of insert in string tag_insert */ +#if LWIP_HTTPD_SSI_MULTIPART + u16_t tag_part; /* Counter passed to and changed by tag insertion function to insert multiple times */ +#endif /* LWIP_HTTPD_SSI_MULTIPART */ + u8_t tag_check; /* true if we are processing a .shtml file else false */ + u8_t tag_name_len; /* Length of the tag name in string tag_name */ + char tag_name[LWIP_HTTPD_MAX_TAG_NAME_LEN + 1]; /* Last tag name extracted */ + char tag_insert[LWIP_HTTPD_MAX_TAG_INSERT_LEN + 1]; /* Insert string for tag_name */ + enum tag_check_state tag_state; /* State of the tag processor */ +#endif /* LWIP_HTTPD_SSI */ +#if LWIP_HTTPD_CGI + char *params[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Params extracted from the request URI */ + char *param_vals[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Values for each extracted param */ +#endif /* LWIP_HTTPD_CGI */ +#if LWIP_HTTPD_DYNAMIC_HEADERS + const char *hdrs[NUM_FILE_HDR_STRINGS]; /* HTTP headers to be sent. */ + u16_t hdr_pos; /* The position of the first unsent header byte in the + current string */ + u16_t hdr_index; /* The index of the hdr string currently being sent. */ +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ +#if LWIP_HTTPD_TIMING + u32_t time_started; +#endif /* LWIP_HTTPD_TIMING */ +#if LWIP_HTTPD_SUPPORT_POST + u32_t post_content_len_left; +#if LWIP_HTTPD_POST_MANUAL_WND + u32_t unrecved_bytes; + struct tcp_pcb *pcb; + u8_t no_auto_wnd; +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ +#endif /* LWIP_HTTPD_SUPPORT_POST*/ +}; + +static err_t http_find_file(struct http_state *hs, const char *uri, int is_09); +static err_t http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri); +static err_t http_poll(void *arg, struct tcp_pcb *pcb); + +#if LWIP_HTTPD_SSI +/* SSI insert handler function pointer. */ +tSSIHandler g_pfnSSIHandler = NULL; +int g_iNumTags = 0; +const char **g_ppcTags = NULL; + +#define LEN_TAG_LEAD_IN 5 +const char * const g_pcTagLeadIn = ""; +#endif /* LWIP_HTTPD_SSI */ + +#if LWIP_HTTPD_CGI +/* CGI handler information */ +const tCGI *g_pCGIs; +int g_iNumCGIs; +#endif /* LWIP_HTTPD_CGI */ + +#if LWIP_HTTPD_STRNSTR_PRIVATE +/** Like strstr but does not need 'buffer' to be NULL-terminated */ +static char* +strnstr(const char* buffer, const char* token, size_t n) +{ + const char* p; + int tokenlen = (int)strlen(token); + if (tokenlen == 0) { + return (char *)buffer; + } + for (p = buffer; *p && (p + tokenlen <= buffer + n); p++) { + if ((*p == *token) && (strncmp(p, token, tokenlen) == 0)) { + return (char *)p; + } + } + return NULL; +} +#endif /* LWIP_HTTPD_STRNSTR_PRIVATE */ + +/** Allocate a struct http_state. */ +static struct http_state* +http_state_alloc(void) +{ + struct http_state *ret; +#if HTTPD_USE_MEM_POOL + ret = (struct http_state *)memp_malloc(MEMP_HTTPD_STATE); +#else /* HTTPD_USE_MEM_POOL */ + ret = (struct http_state *)mem_malloc(sizeof(struct http_state)); +#endif /* HTTPD_USE_MEM_POOL */ + if (ret != NULL) { + /* Initialize the structure. */ + memset(ret, 0, sizeof(struct http_state)); +#if LWIP_HTTPD_DYNAMIC_HEADERS + /* Indicate that the headers are not yet valid */ + ret->hdr_index = NUM_FILE_HDR_STRINGS; +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + } + return ret; +} + +/** Free a struct http_state. + * Also frees the file data if dynamic. + */ +static void +http_state_free(struct http_state *hs) +{ + if (hs != NULL) { + if(hs->handle) { +#if LWIP_HTTPD_TIMING + u32_t ms_needed = sys_now() - hs->time_started; + u32_t needed = LWIP_MAX(1, (ms_needed/100)); + LWIP_DEBUGF(HTTPD_DEBUG_TIMING, ("httpd: needed %"U32_F" ms to send file of %d bytes -> %"U32_F" bytes/sec\n", + ms_needed, hs->handle->len, ((((u32_t)hs->handle->len) * 10) / needed))); +#endif /* LWIP_HTTPD_TIMING */ + fs_close(hs->handle); + hs->handle = NULL; + } +#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS + if (hs->buf != NULL) { + mem_free(hs->buf); + hs->buf = NULL; + } +#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ +#if HTTPD_USE_MEM_POOL + memp_free(MEMP_HTTPD_STATE, hs); +#else /* HTTPD_USE_MEM_POOL */ + mem_free(hs); +#endif /* HTTPD_USE_MEM_POOL */ + } +} + +/** Call tcp_write() in a loop trying smaller and smaller length + * + * @param pcb tcp_pcb to send + * @param ptr Data to send + * @param length Length of data to send (in/out: on return, contains the + * amount of data sent) + * @param apiflags directly passed to tcp_write + * @return the return value of tcp_write + */ +static err_t +http_write(struct tcp_pcb *pcb, const void* ptr, u16_t *length, u8_t apiflags) +{ + u16_t len; + err_t err; + LWIP_ASSERT("length != NULL", length != NULL); + len = *length; + do { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Trying go send %d bytes\n", len)); + err = tcp_write(pcb, ptr, len, apiflags); + if (err == ERR_MEM) { + if ((tcp_sndbuf(pcb) == 0) || + (tcp_sndqueuelen(pcb) >= TCP_SND_QUEUELEN)) { + /* no need to try smaller sizes */ + len = 1; + } else { + len /= 2; + } + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, + ("Send failed, trying less (%d bytes)\n", len)); + } + } while ((err == ERR_MEM) && (len > 1)); + + if (err == ERR_OK) { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Sent %d bytes\n", len)); + } else { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Send failed with err %d (\"%s\")\n", err, lwip_strerr(err))); + } + + *length = len; + return err; +} + +/** + * The connection shall be actively closed. + * Reset the sent- and recv-callbacks. + * + * @param pcb the tcp pcb to reset callbacks + * @param hs connection state to free + */ +static err_t +http_close_conn(struct tcp_pcb *pcb, struct http_state *hs) +{ + err_t err; + LWIP_DEBUGF(HTTPD_DEBUG, ("Closing connection %p\n", (void*)pcb)); + +#if LWIP_HTTPD_SUPPORT_POST + if (hs != NULL) { + if ((hs->post_content_len_left != 0) +#if LWIP_HTTPD_POST_MANUAL_WND + || ((hs->no_auto_wnd != 0) && (hs->unrecved_bytes != 0)) +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + ) { + /* make sure the post code knows that the connection is closed */ + http_post_response_filename[0] = 0; + httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN); + } + } +#endif /* LWIP_HTTPD_SUPPORT_POST*/ + + + tcp_arg(pcb, NULL); + tcp_recv(pcb, NULL); + tcp_err(pcb, NULL); + tcp_poll(pcb, NULL, 0); + tcp_sent(pcb, NULL); + if(hs != NULL) { + http_state_free(hs); + } + + err = tcp_close(pcb); + if (err != ERR_OK) { + LWIP_DEBUGF(HTTPD_DEBUG, ("Error %d closing %p\n", err, (void*)pcb)); + /* error closing, try again later in poll */ + tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL); + } + return err; +} +#if LWIP_HTTPD_CGI +/** + * Extract URI parameters from the parameter-part of an URI in the form + * "test.cgi?x=y" @todo: better explanation! + * Pointers to the parameters are stored in hs->param_vals. + * + * @param hs http connection state + * @param params pointer to the NULL-terminated parameter string from the URI + * @return number of parameters extracted + */ +static int +extract_uri_parameters(struct http_state *hs, char *params) +{ + char *pair; + char *equals; + int loop; + + /* If we have no parameters at all, return immediately. */ + if(!params || (params[0] == '\0')) { + return(0); + } + + /* Get a pointer to our first parameter */ + pair = params; + + /* Parse up to LWIP_HTTPD_MAX_CGI_PARAMETERS from the passed string and ignore the + * remainder (if any) */ + for(loop = 0; (loop < LWIP_HTTPD_MAX_CGI_PARAMETERS) && pair; loop++) { + + /* Save the name of the parameter */ + hs->params[loop] = pair; + + /* Remember the start of this name=value pair */ + equals = pair; + + /* Find the start of the next name=value pair and replace the delimiter + * with a 0 to terminate the previous pair string. */ + pair = strchr(pair, '&'); + if(pair) { + *pair = '\0'; + pair++; + } else { + /* We didn't find a new parameter so find the end of the URI and + * replace the space with a '\0' */ + pair = strchr(equals, ' '); + if(pair) { + *pair = '\0'; + } + + /* Revert to NULL so that we exit the loop as expected. */ + pair = NULL; + } + + /* Now find the '=' in the previous pair, replace it with '\0' and save + * the parameter value string. */ + equals = strchr(equals, '='); + if(equals) { + *equals = '\0'; + hs->param_vals[loop] = equals + 1; + } else { + hs->param_vals[loop] = NULL; + } + } + + return loop; +} +#endif /* LWIP_HTTPD_CGI */ + +#if LWIP_HTTPD_SSI +/** + * Insert a tag (found in an shtml in the form of "" into the file. + * The tag's name is stored in hs->tag_name (NULL-terminated), the replacement + * should be written to hs->tag_insert (up to a length of LWIP_HTTPD_MAX_TAG_INSERT_LEN). + * The amount of data written is stored to hs->tag_insert_len. + * + * @todo: return tag_insert_len - maybe it can be removed from struct http_state? + * + * @param hs http connection state + */ +static void +get_tag_insert(struct http_state *hs) +{ + int loop; + size_t len; +#if LWIP_HTTPD_SSI_MULTIPART + u16_t current_tag_part = hs->tag_part; + hs->tag_part = HTTPD_LAST_TAG_PART; +#endif /* LWIP_HTTPD_SSI_MULTIPART */ + + if(g_pfnSSIHandler && g_ppcTags && g_iNumTags) { + + /* Find this tag in the list we have been provided. */ + for(loop = 0; loop < g_iNumTags; loop++) { + if(strcmp(hs->tag_name, g_ppcTags[loop]) == 0) { + hs->tag_insert_len = g_pfnSSIHandler(loop, hs->tag_insert, + LWIP_HTTPD_MAX_TAG_INSERT_LEN +#if LWIP_HTTPD_SSI_MULTIPART + , current_tag_part, &hs->tag_part +#endif /* LWIP_HTTPD_SSI_MULTIPART */ +#if LWIP_HTTPD_FILE_STATE + , hs->handle->state +#endif /* LWIP_HTTPD_FILE_STATE */ + ); + return; + } + } + } + + /* If we drop out, we were asked to serve a page which contains tags that + * we don't have a handler for. Merely echo back the tags with an error + * marker. */ +#define UNKNOWN_TAG1_TEXT "***UNKNOWN TAG " +#define UNKNOWN_TAG1_LEN 18 +#define UNKNOWN_TAG2_TEXT "***" +#define UNKNOWN_TAG2_LEN 7 + len = LWIP_MIN(strlen(hs->tag_name), + LWIP_HTTPD_MAX_TAG_INSERT_LEN - (UNKNOWN_TAG1_LEN + UNKNOWN_TAG2_LEN)); + MEMCPY(hs->tag_insert, UNKNOWN_TAG1_TEXT, UNKNOWN_TAG1_LEN); + MEMCPY(&hs->tag_insert[UNKNOWN_TAG1_LEN], hs->tag_name, len); + MEMCPY(&hs->tag_insert[UNKNOWN_TAG1_LEN + len], UNKNOWN_TAG2_TEXT, UNKNOWN_TAG2_LEN); + hs->tag_insert[UNKNOWN_TAG1_LEN + len + UNKNOWN_TAG2_LEN] = 0; + + len = strlen(hs->tag_insert); + LWIP_ASSERT("len <= 0xffff", len <= 0xffff); + hs->tag_insert_len = (u16_t)len; +} +#endif /* LWIP_HTTPD_SSI */ + +#if LWIP_HTTPD_DYNAMIC_HEADERS +/** + * Generate the relevant HTTP headers for the given filename and write + * them into the supplied buffer. + */ +static void +get_http_headers(struct http_state *pState, char *pszURI) +{ + unsigned int iLoop; + char *pszWork; + char *pszExt; + char *pszVars; + + /* Ensure that we initialize the loop counter. */ + iLoop = 0; + + /* In all cases, the second header we send is the server identification + so set it here. */ + pState->hdrs[1] = g_psHTTPHeaderStrings[HTTP_HDR_SERVER]; + + /* Is this a normal file or the special case we use to send back the + default "404: Page not found" response? */ + if (pszURI == NULL) { + pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND]; + pState->hdrs[2] = g_psHTTPHeaderStrings[DEFAULT_404_HTML]; + + /* Set up to send the first header string. */ + pState->hdr_index = 0; + pState->hdr_pos = 0; + return; + } else { + /* We are dealing with a particular filename. Look for one other + special case. We assume that any filename with "404" in it must be + indicative of a 404 server error whereas all other files require + the 200 OK header. */ + if (strstr(pszURI, "404")) { + pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND]; + } else if (strstr(pszURI, "400")) { + pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_BAD_REQUEST]; + } else if (strstr(pszURI, "501")) { + pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_IMPL]; + } else { + pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_OK]; + } + + /* Determine if the URI has any variables and, if so, temporarily remove + them. */ + pszVars = strchr(pszURI, '?'); + if(pszVars) { + *pszVars = '\0'; + } + + /* Get a pointer to the file extension. We find this by looking for the + last occurrence of "." in the filename passed. */ + pszExt = NULL; + pszWork = strchr(pszURI, '.'); + while(pszWork) { + pszExt = pszWork + 1; + pszWork = strchr(pszExt, '.'); + } + + /* Now determine the content type and add the relevant header for that. */ + for(iLoop = 0; (iLoop < NUM_HTTP_HEADERS) && pszExt; iLoop++) { + /* Have we found a matching extension? */ + if(!strcmp(g_psHTTPHeaders[iLoop].extension, pszExt)) { + pState->hdrs[2] = + g_psHTTPHeaderStrings[g_psHTTPHeaders[iLoop].headerIndex]; + break; + } + } + + /* Reinstate the parameter marker if there was one in the original URI. */ + if(pszVars) { + *pszVars = '?'; + } + } + + /* Does the URL passed have any file extension? If not, we assume it + is a special-case URL used for control state notification and we do + not send any HTTP headers with the response. */ + if(!pszExt) { + /* Force the header index to a value indicating that all headers + have already been sent. */ + pState->hdr_index = NUM_FILE_HDR_STRINGS; + } else { + /* Did we find a matching extension? */ + if(iLoop == NUM_HTTP_HEADERS) { + /* No - use the default, plain text file type. */ + pState->hdrs[2] = g_psHTTPHeaderStrings[HTTP_HDR_DEFAULT_TYPE]; + } + + /* Set up to send the first header string. */ + pState->hdr_index = 0; + pState->hdr_pos = 0; + } +} +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + +/** + * Try to send more data on this pcb. + * + * @param pcb the pcb to send data + * @param hs connection state + */ +static u8_t +http_send_data(struct tcp_pcb *pcb, struct http_state *hs) +{ + err_t err; + u16_t len; + u16_t mss; + u8_t data_to_send = false; +#if LWIP_HTTPD_DYNAMIC_HEADERS + u16_t hdrlen, sendlen; +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_send_data: pcb=%p hs=%p left=%d\n", (void*)pcb, + (void*)hs, hs != NULL ? hs->left : 0)); + +#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND + if (hs->unrecved_bytes != 0) { + return 0; + } +#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ + +#if LWIP_HTTPD_DYNAMIC_HEADERS + /* If we were passed a NULL state structure pointer, ignore the call. */ + if (hs == NULL) { + return 0; + } + + /* Assume no error until we find otherwise */ + err = ERR_OK; + + /* Do we have any more header data to send for this file? */ + if(hs->hdr_index < NUM_FILE_HDR_STRINGS) { + /* How much data can we send? */ + len = tcp_sndbuf(pcb); + sendlen = len; + + while(len && (hs->hdr_index < NUM_FILE_HDR_STRINGS) && sendlen) { + const void *ptr; + u16_t old_sendlen; + /* How much do we have to send from the current header? */ + hdrlen = (u16_t)strlen(hs->hdrs[hs->hdr_index]); + + /* How much of this can we send? */ + sendlen = (len < (hdrlen - hs->hdr_pos)) ? len : (hdrlen - hs->hdr_pos); + + /* Send this amount of data or as much as we can given memory + * constraints. */ + ptr = (const void *)(hs->hdrs[hs->hdr_index] + hs->hdr_pos); + old_sendlen = sendlen; + err = http_write(pcb, ptr, &sendlen, HTTP_IS_HDR_VOLATILE(hs, ptr)); + if ((err == ERR_OK) && (old_sendlen != sendlen)) { + /* Remember that we added some more data to be transmitted. */ + data_to_send = true; + } else if (err != ERR_OK) { + /* special case: http_write does not try to send 1 byte */ + sendlen = 0; + } + + /* Fix up the header position for the next time round. */ + hs->hdr_pos += sendlen; + len -= sendlen; + + /* Have we finished sending this string? */ + if(hs->hdr_pos == hdrlen) { + /* Yes - move on to the next one */ + hs->hdr_index++; + hs->hdr_pos = 0; + } + } + + /* If we get here and there are still header bytes to send, we send + * the header information we just wrote immediately. If there are no + * more headers to send, but we do have file data to send, drop through + * to try to send some file data too. */ + if((hs->hdr_index < NUM_FILE_HDR_STRINGS) || !hs->file) { + LWIP_DEBUGF(HTTPD_DEBUG, ("tcp_output\n")); + return 1; + } + } +#else /* LWIP_HTTPD_DYNAMIC_HEADERS */ + /* Assume no error until we find otherwise */ + err = ERR_OK; +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + + /* Have we run out of file data to send? If so, we need to read the next + * block from the file. */ + if (hs->left == 0) { +#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS + int count; +#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ + + /* Do we have a valid file handle? */ + if (hs->handle == NULL) { + /* No - close the connection. */ + http_close_conn(pcb, hs); + return 0; + } + if (fs_bytes_left(hs->handle) <= 0) { + /* We reached the end of the file so this request is done. + * @todo: don't close here for HTTP/1.1? */ + LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); + http_close_conn(pcb, hs); + return 0; + } +#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS + /* Do we already have a send buffer allocated? */ + if(hs->buf) { + /* Yes - get the length of the buffer */ + count = hs->buf_len; + } else { + /* We don't have a send buffer so allocate one up to 2mss bytes long. */ + count = 2 * tcp_mss(pcb); + do { + hs->buf = (char*)mem_malloc((mem_size_t)count); + if (hs->buf != NULL) { + hs->buf_len = count; + break; + } + count = count / 2; + } while (count > 100); + + /* Did we get a send buffer? If not, return immediately. */ + if (hs->buf == NULL) { + LWIP_DEBUGF(HTTPD_DEBUG, ("No buff\n")); + return 0; + } + } + + /* Read a block of data from the file. */ + LWIP_DEBUGF(HTTPD_DEBUG, ("Trying to read %d bytes.\n", count)); + + count = fs_read(hs->handle, hs->buf, count); + if(count < 0) { + /* We reached the end of the file so this request is done. + * @todo: don't close here for HTTP/1.1? */ + LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); + http_close_conn(pcb, hs); + return 1; + } + + /* Set up to send the block of data we just read */ + LWIP_DEBUGF(HTTPD_DEBUG, ("Read %d bytes.\n", count)); + hs->left = count; + hs->file = hs->buf; +#if LWIP_HTTPD_SSI + hs->parse_left = count; + hs->parsed = hs->buf; +#endif /* LWIP_HTTPD_SSI */ +#else /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ + LWIP_ASSERT("SSI and DYNAMIC_HEADERS turned off but eof not reached", 0); +#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ + } + +#if LWIP_HTTPD_SSI + if(!hs->tag_check) { +#endif /* LWIP_HTTPD_SSI */ + /* We are not processing an SHTML file so no tag checking is necessary. + * Just send the data as we received it from the file. */ + + /* We cannot send more data than space available in the send + buffer. */ + if (tcp_sndbuf(pcb) < hs->left) { + len = tcp_sndbuf(pcb); + } else { + len = (u16_t)hs->left; + LWIP_ASSERT("hs->left did not fit into u16_t!", (len == hs->left)); + } + mss = tcp_mss(pcb); + if(len > (2 * mss)) { + len = 2 * mss; + } + + err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); + if (err == ERR_OK) { + data_to_send = true; + hs->file += len; + hs->left -= len; + } +#if LWIP_HTTPD_SSI + } else { + /* We are processing an SHTML file so need to scan for tags and replace + * them with insert strings. We need to be careful here since a tag may + * straddle the boundary of two blocks read from the file and we may also + * have to split the insert string between two tcp_write operations. */ + + /* How much data could we send? */ + len = tcp_sndbuf(pcb); + + /* Do we have remaining data to send before parsing more? */ + if(hs->parsed > hs->file) { + /* We cannot send more data than space available in the send + buffer. */ + if (tcp_sndbuf(pcb) < (hs->parsed - hs->file)) { + len = tcp_sndbuf(pcb); + } else { + LWIP_ASSERT("Data size does not fit into u16_t!", + (hs->parsed - hs->file) <= 0xffff); + len = (u16_t)(hs->parsed - hs->file); + } + mss = tcp_mss(pcb); + if(len > (2 * mss)) { + len = 2 * mss; + } + + err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); + if (err == ERR_OK) { + data_to_send = true; + hs->file += len; + hs->left -= len; + } + + /* If the send buffer is full, return now. */ + if(tcp_sndbuf(pcb) == 0) { + return data_to_send; + } + } + + LWIP_DEBUGF(HTTPD_DEBUG, ("State %d, %d left\n", hs->tag_state, hs->parse_left)); + + /* We have sent all the data that was already parsed so continue parsing + * the buffer contents looking for SSI tags. */ + while((hs->parse_left) && (err == ERR_OK)) { + /* @todo: somewhere in this loop, 'len' should grow again... */ + if (len == 0) { + return data_to_send; + } + switch(hs->tag_state) { + case TAG_NONE: + /* We are not currently processing an SSI tag so scan for the + * start of the lead-in marker. */ + if(*hs->parsed == g_pcTagLeadIn[0]) { + /* We found what could be the lead-in for a new tag so change + * state appropriately. */ + hs->tag_state = TAG_LEADIN; + hs->tag_index = 1; +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + hs->tag_started = hs->parsed; +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */ + } + + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + break; + + case TAG_LEADIN: + /* We are processing the lead-in marker, looking for the start of + * the tag name. */ + + /* Have we reached the end of the leadin? */ + if(hs->tag_index == LEN_TAG_LEAD_IN) { + hs->tag_index = 0; + hs->tag_state = TAG_FOUND; + } else { + /* Have we found the next character we expect for the tag leadin? */ + if(*hs->parsed == g_pcTagLeadIn[hs->tag_index]) { + /* Yes - move to the next one unless we have found the complete + * leadin, in which case we start looking for the tag itself */ + hs->tag_index++; + } else { + /* We found an unexpected character so this is not a tag. Move + * back to idle state. */ + hs->tag_state = TAG_NONE; + } + + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + } + break; + + case TAG_FOUND: + /* We are reading the tag name, looking for the start of the + * lead-out marker and removing any whitespace found. */ + + /* Remove leading whitespace between the tag leading and the first + * tag name character. */ + if((hs->tag_index == 0) && ((*hs->parsed == ' ') || + (*hs->parsed == '\t') || (*hs->parsed == '\n') || + (*hs->parsed == '\r'))) { + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + break; + } + + /* Have we found the end of the tag name? This is signalled by + * us finding the first leadout character or whitespace */ + if((*hs->parsed == g_pcTagLeadOut[0]) || + (*hs->parsed == ' ') || (*hs->parsed == '\t') || + (*hs->parsed == '\n') || (*hs->parsed == '\r')) { + + if(hs->tag_index == 0) { + /* We read a zero length tag so ignore it. */ + hs->tag_state = TAG_NONE; + } else { + /* We read a non-empty tag so go ahead and look for the + * leadout string. */ + hs->tag_state = TAG_LEADOUT; + LWIP_ASSERT("hs->tag_index <= 0xff", hs->tag_index <= 0xff); + hs->tag_name_len = (u8_t)hs->tag_index; + hs->tag_name[hs->tag_index] = '\0'; + if(*hs->parsed == g_pcTagLeadOut[0]) { + hs->tag_index = 1; + } else { + hs->tag_index = 0; + } + } + } else { + /* This character is part of the tag name so save it */ + if(hs->tag_index < LWIP_HTTPD_MAX_TAG_NAME_LEN) { + hs->tag_name[hs->tag_index++] = *hs->parsed; + } else { + /* The tag was too long so ignore it. */ + hs->tag_state = TAG_NONE; + } + } + + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + + break; + + /* We are looking for the end of the lead-out marker. */ + case TAG_LEADOUT: + /* Remove leading whitespace between the tag leading and the first + * tag leadout character. */ + if((hs->tag_index == 0) && ((*hs->parsed == ' ') || + (*hs->parsed == '\t') || (*hs->parsed == '\n') || + (*hs->parsed == '\r'))) { + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + break; + } + + /* Have we found the next character we expect for the tag leadout? */ + if(*hs->parsed == g_pcTagLeadOut[hs->tag_index]) { + /* Yes - move to the next one unless we have found the complete + * leadout, in which case we need to call the client to process + * the tag. */ + + /* Move on to the next character in the buffer */ + hs->parse_left--; + hs->parsed++; + + if(hs->tag_index == (LEN_TAG_LEAD_OUT - 1)) { + /* Call the client to ask for the insert string for the + * tag we just found. */ +#if LWIP_HTTPD_SSI_MULTIPART + hs->tag_part = 0; /* start with tag part 0 */ +#endif /* LWIP_HTTPD_SSI_MULTIPART */ + get_tag_insert(hs); + + /* Next time through, we are going to be sending data + * immediately, either the end of the block we start + * sending here or the insert string. */ + hs->tag_index = 0; + hs->tag_state = TAG_SENDING; + hs->tag_end = hs->parsed; +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + hs->parsed = hs->tag_started; +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ + + /* If there is any unsent data in the buffer prior to the + * tag, we need to send it now. */ + if (hs->tag_end > hs->file) { + /* How much of the data can we send? */ +#if LWIP_HTTPD_SSI_INCLUDE_TAG + if(len > hs->tag_end - hs->file) { + len = (u16_t)(hs->tag_end - hs->file); + } +#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ + if(len > hs->tag_started - hs->file) { + /* we would include the tag in sending */ + len = (u16_t)(hs->tag_started - hs->file); + } +#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ + + err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); + if (err == ERR_OK) { + data_to_send = true; +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + if(hs->tag_started <= hs->file) { + /* pretend to have sent the tag, too */ + len += hs->tag_end - hs->tag_started; + } +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ + hs->file += len; + hs->left -= len; + } + } + } else { + hs->tag_index++; + } + } else { + /* We found an unexpected character so this is not a tag. Move + * back to idle state. */ + hs->parse_left--; + hs->parsed++; + hs->tag_state = TAG_NONE; + } + break; + + /* + * We have found a valid tag and are in the process of sending + * data as a result of that discovery. We send either remaining data + * from the file prior to the insert point or the insert string itself. + */ + case TAG_SENDING: + /* Do we have any remaining file data to send from the buffer prior + * to the tag? */ + if(hs->tag_end > hs->file) { + /* How much of the data can we send? */ +#if LWIP_HTTPD_SSI_INCLUDE_TAG + if(len > hs->tag_end - hs->file) { + len = (u16_t)(hs->tag_end - hs->file); + } +#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ + LWIP_ASSERT("hs->started >= hs->file", hs->tag_started >= hs->file); + if (len > hs->tag_started - hs->file) { + /* we would include the tag in sending */ + len = (u16_t)(hs->tag_started - hs->file); + } +#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ + if (len != 0) { + err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); + } else { + err = ERR_OK; + } + if (err == ERR_OK) { + data_to_send = true; +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + if(hs->tag_started <= hs->file) { + /* pretend to have sent the tag, too */ + len += hs->tag_end - hs->tag_started; + } +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ + hs->file += len; + hs->left -= len; + } + } else { +#if LWIP_HTTPD_SSI_MULTIPART + if(hs->tag_index >= hs->tag_insert_len) { + /* Did the last SSIHandler have more to send? */ + if (hs->tag_part != HTTPD_LAST_TAG_PART) { + /* If so, call it again */ + hs->tag_index = 0; + get_tag_insert(hs); + } + } +#endif /* LWIP_HTTPD_SSI_MULTIPART */ + + /* Do we still have insert data left to send? */ + if(hs->tag_index < hs->tag_insert_len) { + /* We are sending the insert string itself. How much of the + * insert can we send? */ + if(len > (hs->tag_insert_len - hs->tag_index)) { + len = (hs->tag_insert_len - hs->tag_index); + } + + /* Note that we set the copy flag here since we only have a + * single tag insert buffer per connection. If we don't do + * this, insert corruption can occur if more than one insert + * is processed before we call tcp_output. */ + err = http_write(pcb, &(hs->tag_insert[hs->tag_index]), &len, + HTTP_IS_TAG_VOLATILE(hs)); + if (err == ERR_OK) { + data_to_send = true; + hs->tag_index += len; + /* Don't return here: keep on sending data */ + } + } else { + /* We have sent all the insert data so go back to looking for + * a new tag. */ + LWIP_DEBUGF(HTTPD_DEBUG, ("Everything sent.\n")); + hs->tag_index = 0; + hs->tag_state = TAG_NONE; +#if !LWIP_HTTPD_SSI_INCLUDE_TAG + hs->parsed = hs->tag_end; +#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ + } + break; + } + } + } + + /* If we drop out of the end of the for loop, this implies we must have + * file data to send so send it now. In TAG_SENDING state, we've already + * handled this so skip the send if that's the case. */ + if((hs->tag_state != TAG_SENDING) && (hs->parsed > hs->file)) { + /* We cannot send more data than space available in the send + buffer. */ + if (tcp_sndbuf(pcb) < (hs->parsed - hs->file)) { + len = tcp_sndbuf(pcb); + } else { + LWIP_ASSERT("Data size does not fit into u16_t!", + (hs->parsed - hs->file) <= 0xffff); + len = (u16_t)(hs->parsed - hs->file); + } + if(len > (2 * tcp_mss(pcb))) { + len = 2 * tcp_mss(pcb); + } + + err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); + if (err == ERR_OK) { + data_to_send = true; + hs->file += len; + hs->left -= len; + } + } + } +#endif /* LWIP_HTTPD_SSI */ + + if((hs->left == 0) && (fs_bytes_left(hs->handle) <= 0)) { + /* We reached the end of the file so this request is done. + * This adds the FIN flag right into the last data segment. + * @todo: don't close here for HTTP/1.1? */ + LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); + http_close_conn(pcb, hs); + return 0; + } + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("send_data end.\n")); + return data_to_send; +} + +#if LWIP_HTTPD_SUPPORT_EXTSTATUS +/** Initialize a http connection with a file to send for an error message + * + * @param hs http connection state + * @param error_nr HTTP error number + * @return ERR_OK if file was found and hs has been initialized correctly + * another err_t otherwise + */ +static err_t +http_find_error_file(struct http_state *hs, u16_t error_nr) +{ + const char *uri1, *uri2, *uri3; + struct fs_file *file; + + if (error_nr == 501) { + uri1 = "/501.html"; + uri2 = "/501.htm"; + uri3 = "/501.shtml"; + } else { + /* 400 (bad request is the default) */ + uri1 = "/400.html"; + uri2 = "/400.htm"; + uri3 = "/400.shtml"; + } + file = fs_open(uri1); + if (file == NULL) { + file = fs_open(uri2); + if (file == NULL) { + file = fs_open(uri3); + if (file == NULL) { + LWIP_DEBUGF(HTTPD_DEBUG, ("Error page for error %"U16_F" not found\n", + error_nr)); + return ERR_ARG; + } + } + } + return http_init_file(hs, file, 0, NULL); +} +#else /* LWIP_HTTPD_SUPPORT_EXTSTATUS */ +#define http_find_error_file(hs, error_nr) ERR_ARG +#endif /* LWIP_HTTPD_SUPPORT_EXTSTATUS */ + +/** + * Get the file struct for a 404 error page. + * Tries some file names and returns NULL if none found. + * + * @param uri pointer that receives the actual file name URI + * @return file struct for the error page or NULL no matching file was found + */ +static struct fs_file * +http_get_404_file(const char **uri) +{ + struct fs_file *file; + + *uri = "/404.html"; + file = fs_open(*uri); + if(file == NULL) { + /* 404.html doesn't exist. Try 404.htm instead. */ + *uri = "/404.htm"; + file = fs_open(*uri); + if(file == NULL) { + /* 404.htm doesn't exist either. Try 404.shtml instead. */ + *uri = "/404.shtml"; + file = fs_open(*uri); + if(file == NULL) { + /* 404.htm doesn't exist either. Indicate to the caller that it should + * send back a default 404 page. + */ + *uri = NULL; + } + } + } + + return file; +} + +#if LWIP_HTTPD_SUPPORT_POST +static err_t +http_handle_post_finished(struct http_state *hs) +{ + /* application error or POST finished */ + /* NULL-terminate the buffer */ + http_post_response_filename[0] = 0; + httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN); + return http_find_file(hs, http_post_response_filename, 0); +} + +/** Pass received POST body data to the application and correctly handle + * returning a response document or closing the connection. + * ATTENTION: The application is responsible for the pbuf now, so don't free it! + * + * @param hs http connection state + * @param p pbuf to pass to the application + * @return ERR_OK if passed successfully, another err_t if the response file + * hasn't been found (after POST finished) + */ +static err_t +http_post_rxpbuf(struct http_state *hs, struct pbuf *p) +{ + err_t err; + + /* adjust remaining Content-Length */ + if (hs->post_content_len_left < p->tot_len) { + hs->post_content_len_left = 0; + } else { + hs->post_content_len_left -= p->tot_len; + } + err = httpd_post_receive_data(hs, p); + if ((err != ERR_OK) || (hs->post_content_len_left == 0)) { +#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND + if (hs->unrecved_bytes != 0) { + return ERR_OK; + } +#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ + /* application error or POST finished */ + return http_handle_post_finished(hs); + } + + return ERR_OK; +} + +/** Handle a post request. Called from http_parse_request when method 'POST' + * is found. + * + * @param pcb The tcp_pcb which received this packet. + * @param p The input pbuf (containing the POST header and body). + * @param hs The http connection state. + * @param data HTTP request (header and part of body) from input pbuf(s). + * @param data_len Size of 'data'. + * @param uri The HTTP URI parsed from input pbuf(s). + * @param uri_end Pointer to the end of 'uri' (here, the rest of the HTTP + * header starts). + * @return ERR_OK: POST correctly parsed and accepted by the application. + * ERR_INPROGRESS: POST not completely parsed (no error yet) + * another err_t: Error parsing POST or denied by the application + */ +static err_t +http_post_request(struct tcp_pcb *pcb, struct pbuf **inp, struct http_state *hs, + char *data, u16_t data_len, char *uri, char *uri_end) +{ + err_t err; + /* search for end-of-header (first double-CRLF) */ + char* crlfcrlf = strnstr(uri_end + 1, CRLF CRLF, data_len - (uri_end + 1 - data)); + +#if LWIP_HTTPD_POST_MANUAL_WND + hs->pcb = pcb; +#else /* LWIP_HTTPD_POST_MANUAL_WND */ + LWIP_UNUSED_ARG(pcb); /* only used for LWIP_HTTPD_POST_MANUAL_WND */ +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + + if (crlfcrlf != NULL) { + /* search for "Content-Length: " */ +#define HTTP_HDR_CONTENT_LEN "Content-Length: " +#define HTTP_HDR_CONTENT_LEN_LEN 16 +#define HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN 10 + char *scontent_len = strnstr(uri_end + 1, HTTP_HDR_CONTENT_LEN, crlfcrlf - (uri_end + 1)); + if (scontent_len != NULL) { + char *scontent_len_end = strnstr(scontent_len + HTTP_HDR_CONTENT_LEN_LEN, CRLF, HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN); + if (scontent_len_end != NULL) { + int content_len; + char *conten_len_num = scontent_len + HTTP_HDR_CONTENT_LEN_LEN; + *scontent_len_end = 0; + content_len = atoi(conten_len_num); + if (content_len > 0) { + /* adjust length of HTTP header passed to application */ + const char *hdr_start_after_uri = uri_end + 1; + u16_t hdr_len = LWIP_MIN(data_len, crlfcrlf + 4 - data); + u16_t hdr_data_len = LWIP_MIN(data_len, crlfcrlf + 4 - hdr_start_after_uri); + u8_t post_auto_wnd = 1; + http_post_response_filename[0] = 0; + err = httpd_post_begin(hs, uri, hdr_start_after_uri, hdr_data_len, content_len, + http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN, &post_auto_wnd); + if (err == ERR_OK) { + /* try to pass in data of the first pbuf(s) */ + struct pbuf *q = *inp; + u16_t start_offset = hdr_len; +#if LWIP_HTTPD_POST_MANUAL_WND + hs->no_auto_wnd = !post_auto_wnd; +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + /* set the Content-Length to be received for this POST */ + hs->post_content_len_left = (u32_t)content_len; + + /* get to the pbuf where the body starts */ + while((q != NULL) && (q->len <= start_offset)) { + struct pbuf *head = q; + start_offset -= q->len; + q = q->next; + /* free the head pbuf */ + head->next = NULL; + pbuf_free(head); + } + *inp = NULL; + if (q != NULL) { + /* hide the remaining HTTP header */ + pbuf_header(q, -(s16_t)start_offset); +#if LWIP_HTTPD_POST_MANUAL_WND + if (!post_auto_wnd) { + /* already tcp_recved() this data... */ + hs->unrecved_bytes = q->tot_len; + } +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + return http_post_rxpbuf(hs, q); + } else { + return ERR_OK; + } + } else { + /* return file passed from application */ + return http_find_file(hs, http_post_response_filename, 0); + } + } else { + LWIP_DEBUGF(HTTPD_DEBUG, ("POST received invalid Content-Length: %s\n", + conten_len_num)); + return ERR_ARG; + } + } + } + } + /* if we come here, the POST is incomplete */ +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + return ERR_INPROGRESS; +#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + return ERR_ARG; +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ +} + +#if LWIP_HTTPD_POST_MANUAL_WND +/** A POST implementation can call this function to update the TCP window. + * This can be used to throttle data reception (e.g. when received data is + * programmed to flash and data is received faster than programmed). + * + * @param connection A connection handle passed to httpd_post_begin for which + * httpd_post_finished has *NOT* been called yet! + * @param recved_len Length of data received (for window update) + */ +void httpd_post_data_recved(void *connection, u16_t recved_len) +{ + struct http_state *hs = (struct http_state*)connection; + if (hs != NULL) { + if (hs->no_auto_wnd) { + u16_t len = recved_len; + if (hs->unrecved_bytes >= recved_len) { + hs->unrecved_bytes -= recved_len; + } else { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_LEVEL_WARNING, ("httpd_post_data_recved: recved_len too big\n")); + len = (u16_t)hs->unrecved_bytes; + hs->unrecved_bytes = 0; + } + if (hs->pcb != NULL) { + if (len != 0) { + tcp_recved(hs->pcb, len); + } + if ((hs->post_content_len_left == 0) && (hs->unrecved_bytes == 0)) { + /* finished handling POST */ + http_handle_post_finished(hs); + http_send_data(hs->pcb, hs); + } + } + } + } +} +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + +#endif /* LWIP_HTTPD_SUPPORT_POST */ + +/** + * When data has been received in the correct state, try to parse it + * as a HTTP request. + * + * @param p the received pbuf + * @param hs the connection state + * @param pcb the tcp_pcb which received this packet + * @return ERR_OK if request was OK and hs has been initialized correctly + * ERR_INPROGRESS if request was OK so far but not fully received + * another err_t otherwise + */ +static err_t +http_parse_request(struct pbuf **inp, struct http_state *hs, struct tcp_pcb *pcb) +{ + char *data; + char *crlf; + u16_t data_len; + struct pbuf *p = *inp; +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + u16_t clen; +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ +#if LWIP_HTTPD_SUPPORT_POST + err_t err; +#endif /* LWIP_HTTPD_SUPPORT_POST */ + + LWIP_UNUSED_ARG(pcb); /* only used for post */ + LWIP_ASSERT("p != NULL", p != NULL); + LWIP_ASSERT("hs != NULL", hs != NULL); + + if ((hs->handle != NULL) || (hs->file != NULL)) { + LWIP_DEBUGF(HTTPD_DEBUG, ("Received data while sending a file\n")); + /* already sending a file */ + /* @todo: abort? */ + return ERR_USE; + } + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + + LWIP_DEBUGF(HTTPD_DEBUG, ("Received %"U16_F" bytes\n", p->tot_len)); + + /* first check allowed characters in this pbuf? */ + + /* enqueue the pbuf */ + if (hs->req == NULL) { + LWIP_DEBUGF(HTTPD_DEBUG, ("First pbuf\n")); + hs->req = p; + } else { + LWIP_DEBUGF(HTTPD_DEBUG, ("pbuf enqueued\n")); + pbuf_cat(hs->req, p); + } + + if (hs->req->next != NULL) { + data_len = LWIP_MIN(hs->req->tot_len, LWIP_HTTPD_MAX_REQ_LENGTH); + pbuf_copy_partial(hs->req, httpd_req_buf, data_len, 0); + data = httpd_req_buf; + } else +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + { + data = (char *)p->payload; + data_len = p->len; + if (p->len != p->tot_len) { + LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: incomplete header due to chained pbufs\n")); + } + } + + /* received enough data for minimal request? */ + if (data_len >= MIN_REQ_LEN) { + /* wait for CRLF before parsing anything */ + crlf = strnstr(data, CRLF, data_len); + if (crlf != NULL) { +#if LWIP_HTTPD_SUPPORT_POST + int is_post = 0; +#endif /* LWIP_HTTPD_SUPPORT_POST */ + int is_09 = 0; + char *sp1, *sp2; + u16_t left_len, uri_len; + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("CRLF received, parsing request\n")); + /* parse method */ + if (!strncmp(data, "GET ", 4)) { + sp1 = data + 3; + /* received GET request */ + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received GET request\"\n")); +#if LWIP_HTTPD_SUPPORT_POST + } else if (!strncmp(data, "POST ", 5)) { + /* store request type */ + is_post = 1; + sp1 = data + 4; + /* received GET request */ + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received POST request\n")); +#endif /* LWIP_HTTPD_SUPPORT_POST */ + } else { + /* null-terminate the METHOD (pbuf is freed anyway wen returning) */ + data[4] = 0; + /* unsupported method! */ + LWIP_DEBUGF(HTTPD_DEBUG, ("Unsupported request method (not implemented): \"%s\"\n", + data)); + return http_find_error_file(hs, 501); + } + /* if we come here, method is OK, parse URI */ + left_len = data_len - ((sp1 +1) - data); + sp2 = strnstr(sp1 + 1, " ", left_len); +#if LWIP_HTTPD_SUPPORT_V09 + if (sp2 == NULL) { + /* HTTP 0.9: respond with correct protocol version */ + sp2 = strnstr(sp1 + 1, CRLF, left_len); + is_09 = 1; +#if LWIP_HTTPD_SUPPORT_POST + if (is_post) { + /* HTTP/0.9 does not support POST */ + goto badrequest; + } +#endif /* LWIP_HTTPD_SUPPORT_POST */ + } +#endif /* LWIP_HTTPD_SUPPORT_V09 */ + uri_len = sp2 - (sp1 + 1); + if ((sp2 != 0) && (sp2 > sp1)) { + char *uri = sp1 + 1; + /* null-terminate the METHOD (pbuf is freed anyway wen returning) */ + *sp1 = 0; + uri[uri_len] = 0; + LWIP_DEBUGF(HTTPD_DEBUG, ("Received \"%s\" request for URI: \"%s\"\n", + data, uri)); +#if LWIP_HTTPD_SUPPORT_POST + if (is_post) { +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + struct pbuf **q = &hs->req; +#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + struct pbuf **q = inp; +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + err = http_post_request(pcb, q, hs, data, data_len, uri, sp2); + if (err != ERR_OK) { + /* restore header for next try */ + *sp1 = ' '; + *sp2 = ' '; + uri[uri_len] = ' '; + } + if (err == ERR_ARG) { + goto badrequest; + } + return err; + } else +#endif /* LWIP_HTTPD_SUPPORT_POST */ + { + return http_find_file(hs, uri, is_09); + } + } else { + LWIP_DEBUGF(HTTPD_DEBUG, ("invalid URI\n")); + } + } + } + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + clen = pbuf_clen(hs->req); + if ((hs->req->tot_len <= LWIP_HTTPD_REQ_BUFSIZE) && + (clen <= LWIP_HTTPD_REQ_QUEUELEN)) { + /* request not fully received (too short or CRLF is missing) */ + return ERR_INPROGRESS; + } else +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + { +#if LWIP_HTTPD_SUPPORT_POST +badrequest: +#endif /* LWIP_HTTPD_SUPPORT_POST */ + LWIP_DEBUGF(HTTPD_DEBUG, ("bad request\n")); + /* could not parse request */ + return http_find_error_file(hs, 400); + } +} + +/** Try to find the file specified by uri and, if found, initialize hs + * accordingly. + * + * @param hs the connection state + * @param uri the HTTP header URI + * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response) + * @return ERR_OK if file was found and hs has been initialized correctly + * another err_t otherwise + */ +static err_t +http_find_file(struct http_state *hs, const char *uri, int is_09) +{ + size_t loop; + struct fs_file *file = NULL; + char *params; +#if LWIP_HTTPD_CGI + int i; + int count; +#endif /* LWIP_HTTPD_CGI */ + +#if LWIP_HTTPD_SSI + /* + * By default, assume we will not be processing server-side-includes + * tags + */ + hs->tag_check = false; +#endif /* LWIP_HTTPD_SSI */ + + /* Have we been asked for the default root file? */ + if((uri[0] == '/') && (uri[1] == 0)) { + /* Try each of the configured default filenames until we find one + that exists. */ + for (loop = 0; loop < NUM_DEFAULT_FILENAMES; loop++) { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Looking for %s...\n", g_psDefaultFilenames[loop].name)); + file = fs_open((char *)g_psDefaultFilenames[loop].name); + uri = (char *)g_psDefaultFilenames[loop].name; + if(file != NULL) { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opened.\n")); +#if LWIP_HTTPD_SSI + hs->tag_check = g_psDefaultFilenames[loop].shtml; +#endif /* LWIP_HTTPD_SSI */ + break; + } + } + if (file == NULL) { + /* None of the default filenames exist so send back a 404 page */ + file = http_get_404_file(&uri); +#if LWIP_HTTPD_SSI + hs->tag_check = false; +#endif /* LWIP_HTTPD_SSI */ + } + } else { + /* No - we've been asked for a specific file. */ + /* First, isolate the base URI (without any parameters) */ + params = (char *)strchr(uri, '?'); + if (params != NULL) { + /* URI contains parameters. NULL-terminate the base URI */ + *params = '\0'; + params++; + } + +#if LWIP_HTTPD_CGI + /* Does the base URI we have isolated correspond to a CGI handler? */ + if (g_iNumCGIs && g_pCGIs) { + for (i = 0; i < g_iNumCGIs; i++) { + if (strcmp(uri, g_pCGIs[i].pcCGIName) == 0) { + /* + * We found a CGI that handles this URI so extract the + * parameters and call the handler. + */ + count = extract_uri_parameters(hs, params); + uri = g_pCGIs[i].pfnCGIHandler(i, count, hs->params, + hs->param_vals); + break; + } + } + } +#endif /* LWIP_HTTPD_CGI */ + + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opening %s\n", uri)); + + file = fs_open(uri); + if (file == NULL) { + file = http_get_404_file(&uri); + } +#if LWIP_HTTPD_SSI + if (file != NULL) { + /* + * See if we have been asked for an shtml file and, if so, + * enable tag checking. + */ + hs->tag_check = false; + for (loop = 0; loop < NUM_SHTML_EXTENSIONS; loop++) { + if (strstr(uri, g_pcSSIExtensions[loop])) { + hs->tag_check = true; + break; + } + } + } +#endif /* LWIP_HTTPD_SSI */ + } + return http_init_file(hs, file, is_09, uri); +} + +/** Initialize a http connection with a file to send (if found). + * Called by http_find_file and http_find_error_file. + * + * @param hs http connection state + * @param file file structure to send (or NULL if not found) + * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response) + * @param uri the HTTP header URI + * @return ERR_OK if file was found and hs has been initialized correctly + * another err_t otherwise + */ +static err_t +http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri) +{ + if (file != NULL) { + /* file opened, initialise struct http_state */ +#if LWIP_HTTPD_SSI + hs->tag_index = 0; + hs->tag_state = TAG_NONE; + hs->parsed = file->data; + hs->parse_left = file->len; + hs->tag_end = file->data; +#endif /* LWIP_HTTPD_SSI */ + hs->handle = file; + hs->file = (char*)file->data; + LWIP_ASSERT("File length must be positive!", (file->len >= 0)); + hs->left = file->len; + hs->retries = 0; +#if LWIP_HTTPD_TIMING + hs->time_started = sys_now(); +#endif /* LWIP_HTTPD_TIMING */ +#if !LWIP_HTTPD_DYNAMIC_HEADERS + LWIP_ASSERT("HTTP headers not included in file system", hs->handle->http_header_included); +#endif /* !LWIP_HTTPD_DYNAMIC_HEADERS */ +#if LWIP_HTTPD_SUPPORT_V09 + if (hs->handle->http_header_included && is_09) { + /* HTTP/0.9 responses are sent without HTTP header, + search for the end of the header. */ + char *file_start = strnstr(hs->file, CRLF CRLF, hs->left); + if (file_start != NULL) { + size_t diff = file_start + 4 - hs->file; + hs->file += diff; + hs->left -= (u32_t)diff; + } + } +#endif /* LWIP_HTTPD_SUPPORT_V09*/ + } else { + hs->handle = NULL; + hs->file = NULL; + hs->left = 0; + hs->retries = 0; + } +#if LWIP_HTTPD_DYNAMIC_HEADERS + /* Determine the HTTP headers to send based on the file extension of + * the requested URI. */ + if ((hs->handle == NULL) || !hs->handle->http_header_included) { + get_http_headers(hs, (char*)uri); + } +#else /* LWIP_HTTPD_DYNAMIC_HEADERS */ + LWIP_UNUSED_ARG(uri); +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + return ERR_OK; +} + +/** + * The pcb had an error and is already deallocated. + * The argument might still be valid (if != NULL). + */ +static void +http_err(void *arg, err_t err) +{ + struct http_state *hs = (struct http_state *)arg; + LWIP_UNUSED_ARG(err); + + LWIP_DEBUGF(HTTPD_DEBUG, ("http_err: %s", lwip_strerr(err))); + + if (hs != NULL) { + http_state_free(hs); + } +} + +/** + * Data has been sent and acknowledged by the remote host. + * This means that more data can be sent. + */ +static err_t +http_sent(void *arg, struct tcp_pcb *pcb, u16_t len) +{ + struct http_state *hs = (struct http_state *)arg; + + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_sent %p\n", (void*)pcb)); + + LWIP_UNUSED_ARG(len); + + if (hs == NULL) { + return ERR_OK; + } + + hs->retries = 0; + + http_send_data(pcb, hs); + + return ERR_OK; +} + +/** + * The poll function is called every 2nd second. + * If there has been no data sent (which resets the retries) in 8 seconds, close. + * If the last portion of a file has not been sent in 2 seconds, close. + * + * This could be increased, but we don't want to waste resources for bad connections. + */ +static err_t +http_poll(void *arg, struct tcp_pcb *pcb) +{ + struct http_state *hs = (struct http_state *)arg; + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: pcb=%p hs=%p pcb_state=%s\n", + (void*)pcb, (void*)hs, tcp_debug_state_str(pcb->state))); + + if (hs == NULL) { + err_t closed; + /* arg is null, close. */ + LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: arg is NULL, close\n")); + closed = http_close_conn(pcb, hs); + LWIP_UNUSED_ARG(closed); +#if LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR + if (closed == ERR_MEM) { + tcp_abort(pcb); + return ERR_ABRT; + } +#endif /* LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR */ + return ERR_OK; + } else { + hs->retries++; + if (hs->retries == HTTPD_MAX_RETRIES) { + LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: too many retries, close\n")); + http_close_conn(pcb, hs); + return ERR_OK; + } + + /* If this connection has a file open, try to send some more data. If + * it has not yet received a GET request, don't do this since it will + * cause the connection to close immediately. */ + if(hs && (hs->handle)) { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: try to send more data\n")); + if(http_send_data(pcb, hs)) { + /* If we wrote anything to be sent, go ahead and send it now. */ + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("tcp_output\n")); + tcp_output(pcb); + } + } + } + + return ERR_OK; +} + +/** + * Data has been received on this pcb. + * For HTTP 1.0, this should normally only happen once (if the request fits in one packet). + */ +static err_t +http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + err_t parsed = ERR_ABRT; + struct http_state *hs = (struct http_state *)arg; + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: pcb=%p pbuf=%p err=%s\n", (void*)pcb, + (void*)p, lwip_strerr(err))); + + if ((err != ERR_OK) || (p == NULL) || (hs == NULL)) { + /* error or closed by other side? */ + if (p != NULL) { + /* Inform TCP that we have taken the data. */ + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } + if (hs == NULL) { + /* this should not happen, only to be robust */ + LWIP_DEBUGF(HTTPD_DEBUG, ("Error, http_recv: hs is NULL, close\n")); + } + http_close_conn(pcb, hs); + return ERR_OK; + } + +#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND + if (hs->no_auto_wnd) { + hs->unrecved_bytes += p->tot_len; + } else +#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ + { + /* Inform TCP that we have taken the data. */ + tcp_recved(pcb, p->tot_len); + } + +#if LWIP_HTTPD_SUPPORT_POST + if (hs->post_content_len_left > 0) { + /* reset idle counter when POST data is received */ + hs->retries = 0; + /* this is data for a POST, pass the complete pbuf to the application */ + http_post_rxpbuf(hs, p); + /* pbuf is passed to the application, don't free it! */ + if (hs->post_content_len_left == 0) { + /* all data received, send response or close connection */ + http_send_data(pcb, hs); + } + return ERR_OK; + } else +#endif /* LWIP_HTTPD_SUPPORT_POST */ + { + if (hs->handle == NULL) { + parsed = http_parse_request(&p, hs, pcb); + LWIP_ASSERT("http_parse_request: unexpected return value", parsed == ERR_OK + || parsed == ERR_INPROGRESS ||parsed == ERR_ARG || parsed == ERR_USE); + } else { + LWIP_DEBUGF(HTTPD_DEBUG, ("http_recv: already sending data\n")); + } +#if LWIP_HTTPD_SUPPORT_REQUESTLIST + if (parsed != ERR_INPROGRESS) { + /* request fully parsed or error */ + if (hs->req != NULL) { + pbuf_free(hs->req); + hs->req = NULL; + } + } +#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + if (p != NULL) { + /* pbuf not passed to application, free it now */ + pbuf_free(p); + } +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + if (parsed == ERR_OK) { +#if LWIP_HTTPD_SUPPORT_POST + if (hs->post_content_len_left == 0) +#endif /* LWIP_HTTPD_SUPPORT_POST */ + { + LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: data %p len %"S32_F"\n", hs->file, hs->left)); + http_send_data(pcb, hs); + } + } else if (parsed == ERR_ARG) { + /* @todo: close on ERR_USE? */ + http_close_conn(pcb, hs); + } + } + return ERR_OK; +} + +/** + * A new incoming connection has been accepted. + */ +static err_t +http_accept(void *arg, struct tcp_pcb *pcb, err_t err) +{ + struct http_state *hs; + struct tcp_pcb_listen *lpcb = (struct tcp_pcb_listen*)arg; + LWIP_UNUSED_ARG(err); + LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept %p / %p\n", (void*)pcb, arg)); + + /* Decrease the listen backlog counter */ + tcp_accepted(lpcb); + /* Set priority */ + tcp_setprio(pcb, HTTPD_TCP_PRIO); + + /* Allocate memory for the structure that holds the state of the + connection - initialized by that function. */ + hs = http_state_alloc(); + if (hs == NULL) { + LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept: Out of memory, RST\n")); + return ERR_MEM; + } + + /* Tell TCP that this is the structure we wish to be passed for our + callbacks. */ + tcp_arg(pcb, hs); + + /* Set up the various callback functions */ + tcp_recv(pcb, http_recv); + tcp_err(pcb, http_err); + tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL); + tcp_sent(pcb, http_sent); + + return ERR_OK; +} + +/** + * Initialize the httpd with the specified local address. + */ +static void +httpd_init_addr(ip_addr_t *local_addr) +{ + struct tcp_pcb *pcb; + err_t err; + + pcb = tcp_new(); + LWIP_ASSERT("httpd_init: tcp_new failed", pcb != NULL); + tcp_setprio(pcb, HTTPD_TCP_PRIO); + /* set SOF_REUSEADDR here to explicitly bind httpd to multiple interfaces */ + err = tcp_bind(pcb, local_addr, HTTPD_SERVER_PORT); + LWIP_ASSERT("httpd_init: tcp_bind failed", err == ERR_OK); + pcb = tcp_listen(pcb); + LWIP_ASSERT("httpd_init: tcp_listen failed", pcb != NULL); + /* initialize callback arg and accept callback */ + tcp_arg(pcb, pcb); + tcp_accept(pcb, http_accept); +} + +/** + * Initialize the httpd: set up a listening PCB and bind it to the defined port + */ +void +httpd_init(void) +{ +#if HTTPD_USE_MEM_POOL + LWIP_ASSERT("memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state)", + memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state)); +#endif + LWIP_DEBUGF(HTTPD_DEBUG, ("httpd_init\n")); + + httpd_init_addr(IP_ADDR_ANY); +} + +#if LWIP_HTTPD_SSI +/** + * Set the SSI handler function. + * + * @param ssi_handler the SSI handler function + * @param tags an array of SSI tag strings to search for in SSI-enabled files + * @param num_tags number of tags in the 'tags' array + */ +void +http_set_ssi_handler(tSSIHandler ssi_handler, const char **tags, int num_tags) +{ + LWIP_DEBUGF(HTTPD_DEBUG, ("http_set_ssi_handler\n")); + + LWIP_ASSERT("no ssi_handler given", ssi_handler != NULL); + LWIP_ASSERT("no tags given", tags != NULL); + LWIP_ASSERT("invalid number of tags", num_tags > 0); + + g_pfnSSIHandler = ssi_handler; + g_ppcTags = tags; + g_iNumTags = num_tags; +} +#endif /* LWIP_HTTPD_SSI */ + +#if LWIP_HTTPD_CGI +/** + * Set an array of CGI filenames/handler functions + * + * @param cgis an array of CGI filenames/handler functions + * @param num_handlers number of elements in the 'cgis' array + */ +void +http_set_cgi_handlers(const tCGI *cgis, int num_handlers) +{ + LWIP_ASSERT("no cgis given", cgis != NULL); + LWIP_ASSERT("invalid number of handlers", num_handlers > 0); + + g_pCGIs = cgis; + g_iNumCGIs = num_handlers; +} +#endif /* LWIP_HTTPD_CGI */ + +#endif /* LWIP_TCP */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.h new file mode 100644 index 000000000..8c3c03d47 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd.h @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * This version of the file has been modified by Texas Instruments to offer + * simple server-side-include (SSI) and Common Gateway Interface (CGI) + * capability. + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" + + +/** Set this to 1 to support CGI */ +#ifndef LWIP_HTTPD_CGI +#define LWIP_HTTPD_CGI 0 +#endif + +/** Set this to 1 to support SSI (Server-Side-Includes) */ +#ifndef LWIP_HTTPD_SSI +#define LWIP_HTTPD_SSI 1 +#endif + +/** Set this to 1 to support HTTP POST */ +#ifndef LWIP_HTTPD_SUPPORT_POST +#define LWIP_HTTPD_SUPPORT_POST 0 +#endif + + +#if LWIP_HTTPD_CGI + +/* + * Function pointer for a CGI script handler. + * + * This function is called each time the HTTPD server is asked for a file + * whose name was previously registered as a CGI function using a call to + * http_set_cgi_handler. The iIndex parameter provides the index of the + * CGI within the ppcURLs array passed to http_set_cgi_handler. Parameters + * pcParam and pcValue provide access to the parameters provided along with + * the URI. iNumParams provides a count of the entries in the pcParam and + * pcValue arrays. Each entry in the pcParam array contains the name of a + * parameter with the corresponding entry in the pcValue array containing the + * value for that parameter. Note that pcParam may contain multiple elements + * with the same name if, for example, a multi-selection list control is used + * in the form generating the data. + * + * The function should return a pointer to a character string which is the + * path and filename of the response that is to be sent to the connected + * browser, for example "/thanks.htm" or "/response/error.ssi". + * + * The maximum number of parameters that will be passed to this function via + * iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in the incoming + * HTTP request above this number will be discarded. + * + * Requests intended for use by this CGI mechanism must be sent using the GET + * method (which encodes all parameters within the URI rather than in a block + * later in the request). Attempts to use the POST method will result in the + * request being ignored. + * + */ +typedef const char *(*tCGIHandler)(int iIndex, int iNumParams, char *pcParam[], + char *pcValue[]); + +/* + * Structure defining the base filename (URL) of a CGI and the associated + * function which is to be called when that URL is requested. + */ +typedef struct +{ + const char *pcCGIName; + tCGIHandler pfnCGIHandler; +} tCGI; + +void http_set_cgi_handlers(const tCGI *pCGIs, int iNumHandlers); + + +/* The maximum number of parameters that the CGI handler can be sent. */ +#ifndef LWIP_HTTPD_MAX_CGI_PARAMETERS +#define LWIP_HTTPD_MAX_CGI_PARAMETERS 16 +#endif + +#endif /* LWIP_HTTPD_CGI */ + +#if LWIP_HTTPD_SSI + +/** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more + * arguments indicating a counter for insert string that are too long to be + * inserted at once: the SSI handler function must then set 'next_tag_part' + * which will be passed back to it in the next call. */ +#ifndef LWIP_HTTPD_SSI_MULTIPART +#define LWIP_HTTPD_SSI_MULTIPART 0 +#endif + +/* + * Function pointer for the SSI tag handler callback. + * + * This function will be called each time the HTTPD server detects a tag of the + * form in a .shtml, .ssi or .shtm file where "name" appears as + * one of the tags supplied to http_set_ssi_handler in the ppcTags array. The + * returned insert string, which will be appended after the the string + * "" in file sent back to the client,should be written to pointer + * pcInsert. iInsertLen contains the size of the buffer pointed to by + * pcInsert. The iIndex parameter provides the zero-based index of the tag as + * found in the ppcTags array and identifies the tag that is to be processed. + * + * The handler returns the number of characters written to pcInsert excluding + * any terminating NULL or a negative number to indicate a failure (tag not + * recognized, for example). + * + * Note that the behavior of this SSI mechanism is somewhat different from the + * "normal" SSI processing as found in, for example, the Apache web server. In + * this case, the inserted text is appended following the SSI tag rather than + * replacing the tag entirely. This allows for an implementation that does not + * require significant additional buffering of output data yet which will still + * offer usable SSI functionality. One downside to this approach is when + * attempting to use SSI within JavaScript. The SSI tag is structured to + * resemble an HTML comment but this syntax does not constitute a comment + * within JavaScript and, hence, leaving the tag in place will result in + * problems in these cases. To work around this, any SSI tag which needs to + * output JavaScript code must do so in an encapsulated way, sending the whole + * HTML section as a single include. + */ +typedef u16_t (*tSSIHandler)(int iIndex, char *pcInsert, int iInsertLen +#if LWIP_HTTPD_SSI_MULTIPART + , u16_t current_tag_part, u16_t *next_tag_part +#endif /* LWIP_HTTPD_SSI_MULTIPART */ +#if LWIP_HTTPD_FILE_STATE + , void *connection_state +#endif /* LWIP_HTTPD_FILE_STATE */ + ); + +void http_set_ssi_handler(tSSIHandler pfnSSIHandler, + const char **ppcTags, int iNumTags); + +/* The maximum length of the string comprising the tag name */ +#ifndef LWIP_HTTPD_MAX_TAG_NAME_LEN +#define LWIP_HTTPD_MAX_TAG_NAME_LEN 8 +#endif + +/* The maximum length of string that can be returned to replace any given tag */ +#ifndef LWIP_HTTPD_MAX_TAG_INSERT_LEN +#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192 +#endif + +#endif /* LWIP_HTTPD_SSI */ + +#if LWIP_HTTPD_SUPPORT_POST + +/* These functions must be implemented by the application */ + +/** Called when a POST request has been received. The application can decide + * whether to accept it or not. + * + * @param connection Unique connection identifier, valid until httpd_post_end + * is called. + * @param uri The HTTP header URI receiving the POST request. + * @param http_request The raw HTTP request (the first packet, normally). + * @param http_request_len Size of 'http_request'. + * @param content_len Content-Length from HTTP header. + * @param response_uri Filename of response file, to be filled when denying the + * request + * @param response_uri_len Size of the 'response_uri' buffer. + * @param post_auto_wnd Set this to 0 to let the callback code handle window + * updates by calling 'httpd_post_data_recved' (to throttle rx speed) + * default is 1 (httpd handles window updates automatically) + * @return ERR_OK: Accept the POST request, data may be passed in + * another err_t: Deny the POST request, send back 'bad request'. + */ +err_t httpd_post_begin(void *connection, const char *uri, const char *http_request, + u16_t http_request_len, int content_len, char *response_uri, + u16_t response_uri_len, u8_t *post_auto_wnd); + +/** Called for each pbuf of data that has been received for a POST. + * ATTENTION: The application is responsible for freeing the pbufs passed in! + * + * @param connection Unique connection identifier. + * @param p Received data. + * @return ERR_OK: Data accepted. + * another err_t: Data denied, http_post_get_response_uri will be called. + */ +err_t httpd_post_receive_data(void *connection, struct pbuf *p); + +/** Called when all data is received or when the connection is closed. + * The application must return the filename/URI of a file to send in response + * to this POST request. If the response_uri buffer is untouched, a 404 + * response is returned. + * + * @param connection Unique connection identifier. + * @param response_uri Filename of response file, to be filled when denying the request + * @param response_uri_len Size of the 'response_uri' buffer. + */ +void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len); + +#ifndef LWIP_HTTPD_POST_MANUAL_WND +#define LWIP_HTTPD_POST_MANUAL_WND 0 +#endif + +#if LWIP_HTTPD_POST_MANUAL_WND +void httpd_post_data_recved(void *connection, u16_t recved_len); +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + +#endif /* LWIP_HTTPD_SUPPORT_POST */ + +void httpd_init(void); + +#endif /* __HTTPD_H__ */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd_structs.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd_structs.h new file mode 100644 index 000000000..1080a5597 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/httpd_structs.h @@ -0,0 +1,115 @@ +#ifndef __HTTPD_STRUCTS_H__ +#define __HTTPD_STRUCTS_H__ + +#include "httpd.h" + +/** This string is passed in the HTTP header as "Server: " */ +#ifndef HTTPD_SERVER_AGENT +#define HTTPD_SERVER_AGENT "lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)" +#endif + +/** Set this to 1 if you want to include code that creates HTTP headers + * at runtime. Default is off: HTTP headers are then created statically + * by the makefsdata tool. Static headers mean smaller code size, but + * the (readonly) fsdata will grow a bit as every file includes the HTTP + * header. */ +#ifndef LWIP_HTTPD_DYNAMIC_HEADERS +#define LWIP_HTTPD_DYNAMIC_HEADERS 0 +#endif + + +#if LWIP_HTTPD_DYNAMIC_HEADERS +/** This struct is used for a list of HTTP header strings for various + * filename extensions. */ +typedef struct +{ + const char *extension; + int headerIndex; +} tHTTPHeader; + +/** A list of strings used in HTTP headers */ +static const char * const g_psHTTPHeaderStrings[] = +{ + "Content-type: text/html\r\n\r\n", + "Content-type: text/html\r\nExpires: Fri, 10 Apr 2008 14:00:00 GMT\r\nPragma: no-cache\r\n\r\n", + "Content-type: image/gif\r\n\r\n", + "Content-type: image/png\r\n\r\n", + "Content-type: image/jpeg\r\n\r\n", + "Content-type: image/bmp\r\n\r\n", + "Content-type: image/x-icon\r\n\r\n", + "Content-type: application/octet-stream\r\n\r\n", + "Content-type: application/x-javascript\r\n\r\n", + "Content-type: application/x-javascript\r\n\r\n", + "Content-type: text/css\r\n\r\n", + "Content-type: application/x-shockwave-flash\r\n\r\n", + "Content-type: text/xml\r\n\r\n", + "Content-type: text/plain\r\n\r\n", + "HTTP/1.0 200 OK\r\n", + "HTTP/1.0 404 File not found\r\n", + "HTTP/1.0 400 Bad Request\r\n", + "HTTP/1.0 501 Not Implemented\r\n", + "HTTP/1.1 200 OK\r\n", + "HTTP/1.1 404 File not found\r\n", + "HTTP/1.1 400 Bad Request\r\n", + "HTTP/1.1 501 Not Implemented\r\n", + "Content-Length: ", + "Connection: Close\r\n", + "Server: "HTTPD_SERVER_AGENT"\r\n", + "\r\n

404: The requested file cannot be found.

\r\n" +}; + +/* Indexes into the g_psHTTPHeaderStrings array */ +#define HTTP_HDR_HTML 0 /* text/html */ +#define HTTP_HDR_SSI 1 /* text/html Expires... */ +#define HTTP_HDR_GIF 2 /* image/gif */ +#define HTTP_HDR_PNG 3 /* image/png */ +#define HTTP_HDR_JPG 4 /* image/jpeg */ +#define HTTP_HDR_BMP 5 /* image/bmp */ +#define HTTP_HDR_ICO 6 /* image/x-icon */ +#define HTTP_HDR_APP 7 /* application/octet-stream */ +#define HTTP_HDR_JS 8 /* application/x-javascript */ +#define HTTP_HDR_RA 9 /* application/x-javascript */ +#define HTTP_HDR_CSS 10 /* text/css */ +#define HTTP_HDR_SWF 11 /* application/x-shockwave-flash */ +#define HTTP_HDR_XML 12 /* text/xml */ +#define HTTP_HDR_DEFAULT_TYPE 13 /* text/plain */ +#define HTTP_HDR_OK 14 /* 200 OK */ +#define HTTP_HDR_NOT_FOUND 15 /* 404 File not found */ +#define HTTP_HDR_BAD_REQUEST 16 /* 400 Bad request */ +#define HTTP_HDR_NOT_IMPL 17 /* 501 Not Implemented */ +#define HTTP_HDR_OK_11 18 /* 200 OK */ +#define HTTP_HDR_NOT_FOUND_11 19 /* 404 File not found */ +#define HTTP_HDR_BAD_REQUEST_11 20 /* 400 Bad request */ +#define HTTP_HDR_NOT_IMPL_11 21 /* 501 Not Implemented */ +#define HTTP_HDR_CONTENT_LENGTH 22 /* Content-Length: (HTTP 1.1)*/ +#define HTTP_HDR_CONN_CLOSE 23 /* Connection: Close (HTTP 1.1) */ +#define HTTP_HDR_SERVER 24 /* Server: HTTPD_SERVER_AGENT */ +#define DEFAULT_404_HTML 25 /* default 404 body */ + +/** A list of extension-to-HTTP header strings */ +const static tHTTPHeader g_psHTTPHeaders[] = +{ + { "html", HTTP_HDR_HTML}, + { "htm", HTTP_HDR_HTML}, + { "shtml",HTTP_HDR_SSI}, + { "shtm", HTTP_HDR_SSI}, + { "ssi", HTTP_HDR_SSI}, + { "gif", HTTP_HDR_GIF}, + { "png", HTTP_HDR_PNG}, + { "jpg", HTTP_HDR_JPG}, + { "bmp", HTTP_HDR_BMP}, + { "ico", HTTP_HDR_ICO}, + { "class",HTTP_HDR_APP}, + { "cls", HTTP_HDR_APP}, + { "js", HTTP_HDR_JS}, + { "ram", HTTP_HDR_RA}, + { "css", HTTP_HDR_CSS}, + { "swf", HTTP_HDR_SWF}, + { "xml", HTTP_HDR_XML} +}; + +#define NUM_HTTP_HEADERS (sizeof(g_psHTTPHeaders) / sizeof(tHTTPHeader)) + +#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ + +#endif /* __HTTPD_STRUCTS_H__ */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/404.html b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/404.html new file mode 100644 index 000000000..40b343a91 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/404.html @@ -0,0 +1,21 @@ + +lwIP - A Lightweight TCP/IP Stack + + + + +
+ SICS logo + +

lwIP - A Lightweight TCP/IP Stack

+

404 - Page not found

+

+ Sorry, the page you are requesting was not found on this + server. +

+
+   +
+ + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/index.shtml b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/index.shtml new file mode 100644 index 000000000..67b82c8d8 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/index.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +
Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS Homepage | IO | 37K jpg +

+


+

+

Task statistics

+Page will refresh every 2 seconds.

+

Task          State  Priority  Stack	#
************************************************
+ +
+
+ + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/logo.jpg b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3670e4f0c726e023b83ad4b1a3e6bb6b2c2446a GIT binary patch literal 28602 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 literal 0 HcmV?d00001 diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/runtime.shtml b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/runtime.shtml new file mode 100644 index 000000000..5beab4ac7 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/fs/runtime.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS Homepage | IO | 37K jpg +

+


+

+

Run-time statistics

+Page will refresh every 2 seconds.

+

Task            Abs Time      % Time
****************************************
+ +
+
+ + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.c-source-file b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.c-source-file new file mode 100644 index 000000000..b065caa08 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.c-source-file @@ -0,0 +1,610 @@ +/** + * makefsdata: Converts a directory structure for use with the lwIP httpd. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jim Pettinato + * Simon Goldschmidt + * + * @todo: + * - take TCP_MSS, LWIP_TCP_TIMESTAMPS and + * PAYLOAD_ALIGN_TYPE/PAYLOAD_ALIGNMENT as arguments + */ + +#include +#include +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include "windows.h" +#else +#include +#endif +#include +#include + +/* Compatibility defines Win32 vs. DOS */ +#ifdef WIN32 + +#define FIND_T WIN32_FIND_DATAA +#define FIND_T_FILENAME(fInfo) (fInfo.cFileName) +#define FIND_T_IS_DIR(fInfo) ((fInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) +#define FIND_T_IS_FILE(fInfo) ((fInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) +#define FIND_RET_T HANDLE +#define FINDFIRST_FILE(path, result) FindFirstFileA(path, result) +#define FINDFIRST_DIR(path, result) FindFirstFileA(path, result) +#define FINDNEXT(ff_res, result) FindNextFileA(ff_res, result) +#define FINDFIRST_SUCCEEDED(ret) (ret != INVALID_HANDLE_VALUE) +#define FINDNEXT_SUCCEEDED(ret) (ret == TRUE) + +#define GETCWD(path, len) GetCurrentDirectoryA(len, path) +#define CHDIR(path) SetCurrentDirectoryA(path) + +#define NEWLINE "\r\n" +#define NEWLINE_LEN 2 + +#else + +#define FIND_T struct fflbk +#define FIND_T_FILENAME(fInfo) (fInfo.ff_name) +#define FIND_T_IS_DIR(fInfo) ((fInfo.ff_attrib & FA_DIREC) == FA_DIREC) +#define FIND_T_IS_FILE(fInfo) (1) +#define FIND_RET_T int +#define FINDFIRST_FILE(path, result) findfirst(path, result, FA_ARCH) +#define FINDFIRST_DIR(path, result) findfirst(path, result, FA_DIREC) +#define FINDNEXT(ff_res, result) FindNextFileA(ff_res, result) +#define FINDFIRST_SUCCEEDED(ret) (ret == 0) +#define FINDNEXT_SUCCEEDED(ret) (ret == 0) + +#define GETCWD(path, len) getcwd(path, len) +#define CHDIR(path) chdir(path) + +#endif + +/* define this to get the header variables we use to build HTTP headers */ +#define LWIP_HTTPD_DYNAMIC_HEADERS 1 +#include "../httpd_structs.h" + +#include "../../../lwip-1.4.0/src/core/ipv4/inet_chksum.c" +#include "../../../lwip-1.4.0/src/core/def.c" + +/** (Your server name here) */ +const char *serverID = "Server: "HTTPD_SERVER_AGENT"\r\n"; + +/* change this to suit your MEM_ALIGNMENT */ +#define PAYLOAD_ALIGNMENT 4 +/* set this to 0 to prevent aligning payload */ +#define ALIGN_PAYLOAD 1 +/* define this to a type that has the required alignment */ +#define PAYLOAD_ALIGN_TYPE "unsigned int" +static int payload_alingment_dummy_counter = 0; + +#define HEX_BYTES_PER_LINE 16 + +#define MAX_PATH_LEN 256 + +#define COPY_BUFSIZE 10240 + +int process_sub(FILE *data_file, FILE *struct_file); +int process_file(FILE *data_file, FILE *struct_file, const char *filename); +int file_write_http_header(FILE *data_file, const char *filename, int file_size, + u16_t *http_hdr_len, u16_t *http_hdr_chksum); +int file_put_ascii(FILE *file, const char *ascii_string, int len, int *i); +int s_put_ascii(char *buf, const char *ascii_string, int len, int *i); +void concat_files(const char *file1, const char *file2, const char *targetfile); + +static unsigned char file_buffer_raw[COPY_BUFSIZE]; +/* 5 bytes per char + 3 bytes per line */ +static char file_buffer_c[COPY_BUFSIZE * 5 + ((COPY_BUFSIZE / HEX_BYTES_PER_LINE) * 3)]; + +char curSubdir[MAX_PATH_LEN]; +char lastFileVar[MAX_PATH_LEN]; +char hdr_buf[4096]; + +unsigned char processSubs = 1; +unsigned char includeHttpHeader = 1; +unsigned char useHttp11 = 0; +unsigned char precalcChksum = 0; + +int main(int argc, char *argv[]) +{ + FIND_T fInfo; + FIND_RET_T fret; + char path[MAX_PATH_LEN]; + char appPath[MAX_PATH_LEN]; + FILE *data_file; + FILE *struct_file; + int filesProcessed; + int i; + char targetfile[MAX_PATH_LEN]; + strcpy(targetfile, "fsdata.c"); + + memset(path, 0, sizeof(path)); + memset(appPath, 0, sizeof(appPath)); + + printf(NEWLINE " makefsdata - HTML to C source converter" NEWLINE); + printf(" by Jim Pettinato - circa 2003 " NEWLINE); + printf(" extended by Simon Goldschmidt - 2009 " NEWLINE NEWLINE); + + strcpy(path, "fs"); + for(i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + if (strstr(argv[i], "-s")) { + processSubs = 0; + } else if (strstr(argv[i], "-e")) { + includeHttpHeader = 0; + } else if (strstr(argv[i], "-11")) { + useHttp11 = 1; + } else if (strstr(argv[i], "-c")) { + precalcChksum = 1; + } else if((argv[i][1] == 'f') && (argv[i][2] == ':')) { + strcpy(targetfile, &argv[i][3]); + printf("Writing to file \"%s\"\n", targetfile); + } + } else { + strcpy(path, argv[i]); + } + } + + /* if command line param or subdir named 'fs' not found spout usage verbiage */ + fret = FINDFIRST_DIR(path, &fInfo); + if (!FINDFIRST_SUCCEEDED(fret)) { + /* if no subdir named 'fs' (or the one which was given) exists, spout usage verbiage */ + printf(" Failed to open directory \"%s\"." NEWLINE NEWLINE, path); + printf(" Usage: htmlgen [targetdir] [-s] [-i] [-f:]" NEWLINE NEWLINE); + printf(" targetdir: relative or absolute path to files to convert" NEWLINE); + printf(" switch -s: toggle processing of subdirectories (default is on)" NEWLINE); + printf(" switch -e: exclude HTTP header from file (header is created at runtime, default is off)" NEWLINE); + printf(" switch -11: include HTTP 1.1 header (1.0 is default)" NEWLINE); + printf(" switch -c: precalculate checksums for all pages (default is off)" NEWLINE); + printf(" switch -f: target filename (default is \"fsdata.c\")" NEWLINE); + printf(" if targetdir not specified, htmlgen will attempt to" NEWLINE); + printf(" process files in subdirectory 'fs'" NEWLINE); + exit(-1); + } + + printf("HTTP %sheader will %s statically included." NEWLINE, + (includeHttpHeader ? (useHttp11 ? "1.1 " : "1.0 ") : ""), + (includeHttpHeader ? "be" : "not be")); + + sprintf(curSubdir, ""); /* start off in web page's root directory - relative paths */ + printf(" Processing all files in directory %s", path); + if (processSubs) { + printf(" and subdirectories..." NEWLINE NEWLINE); + } else { + printf("..." NEWLINE NEWLINE); + } + + GETCWD(appPath, MAX_PATH_LEN); + data_file = fopen("fsdata.tmp", "wb"); + if (data_file == NULL) { + printf("Failed to create file \"fsdata.tmp\"\n"); + exit(-1); + } + struct_file = fopen("fshdr.tmp", "wb"); + if (struct_file == NULL) { + printf("Failed to create file \"fshdr.tmp\"\n"); + exit(-1); + } + + CHDIR(path); + + fprintf(data_file, "#include \"fs.h\"" NEWLINE); + fprintf(data_file, "#include \"lwip/def.h\"" NEWLINE); + fprintf(data_file, "#include \"fsdata.h\"" NEWLINE NEWLINE NEWLINE); + + fprintf(data_file, "#define file_NULL (struct fsdata_file *) NULL" NEWLINE NEWLINE NEWLINE); + + sprintf(lastFileVar, "NULL"); + + filesProcessed = process_sub(data_file, struct_file); + + /* data_file now contains all of the raw data.. now append linked list of + * file header structs to allow embedded app to search for a file name */ + fprintf(data_file, NEWLINE NEWLINE); + fprintf(struct_file, "#define FS_ROOT file_%s" NEWLINE, lastFileVar); + fprintf(struct_file, "#define FS_NUMFILES %d" NEWLINE NEWLINE, filesProcessed); + + fclose(data_file); + fclose(struct_file); + + CHDIR(appPath); + /* append struct_file to data_file */ + printf(NEWLINE "Creating target file..." NEWLINE NEWLINE); + concat_files("fsdata.tmp", "fshdr.tmp", targetfile); + + /* if succeeded, delete the temporary files */ + remove("fsdata.tmp"); + remove("fshdr.tmp"); + + printf(NEWLINE "Processed %d files - done." NEWLINE NEWLINE, filesProcessed); + + return 0; +} + +static void copy_file(const char *filename_in, FILE *fout) +{ + FILE *fin; + size_t len; + fin = fopen(filename_in, "rb"); + if (fin == NULL) { + printf("Failed to open file \"%s\"\n", filename_in); + exit(-1); + } + + while((len = fread(file_buffer_raw, 1, COPY_BUFSIZE, fin)) > 0) + { + fwrite(file_buffer_raw, 1, len, fout); + } + fclose(fin); +} + +void concat_files(const char *file1, const char *file2, const char *targetfile) +{ + FILE *fout; + fout = fopen(targetfile, "wb"); + if (fout == NULL) { + printf("Failed to open file \"%s\"\n", targetfile); + exit(-1); + } + copy_file(file1, fout); + copy_file(file2, fout); + fclose(fout); +} + +int process_sub(FILE *data_file, FILE *struct_file) +{ + FIND_T fInfo; + FIND_RET_T fret; + int filesProcessed = 0; + char oldSubdir[MAX_PATH_LEN]; + + if (processSubs) { + /* process subs recursively */ + strcpy(oldSubdir, curSubdir); + fret = FINDFIRST_DIR("*", &fInfo); + if (FINDFIRST_SUCCEEDED(fret)) { + do { + const char *curName = FIND_T_FILENAME(fInfo); + if (curName == NULL) continue; + if (curName[0] == '.') continue; + if (strcmp(curName, "CVS") == 0) continue; + if (!FIND_T_IS_DIR(fInfo)) continue; + CHDIR(curName); + strcat(curSubdir, "/"); + strcat(curSubdir, curName); + printf(NEWLINE "processing subdirectory %s/..." NEWLINE, curSubdir); + filesProcessed += process_sub(data_file, struct_file); + CHDIR(".."); + strcpy(curSubdir, oldSubdir); + } while (FINDNEXT_SUCCEEDED(FINDNEXT(fret, &fInfo))); + } + } + + fret = FINDFIRST_FILE("*.*", &fInfo); + if (FINDFIRST_SUCCEEDED(fret)) { + /* at least one file in directory */ + do { + if (FIND_T_IS_FILE(fInfo)) { + const char *curName = FIND_T_FILENAME(fInfo); + printf("processing %s/%s..." NEWLINE, curSubdir, curName); + if (process_file(data_file, struct_file, curName) < 0) { + printf(NEWLINE "Error... aborting" NEWLINE); + return -1; + } + filesProcessed++; + } + } while (FINDNEXT_SUCCEEDED(FINDNEXT(fret, &fInfo))); + } + return filesProcessed; +} + +int get_file_size(const char* filename) +{ + FILE *inFile; + int file_size = -1; + inFile = fopen(filename, "rb"); + if (inFile == NULL) { + printf("Failed to open file \"%s\"\n", filename); + exit(-1); + } + fseek(inFile, 0, SEEK_END); + file_size = ftell(inFile); + fclose(inFile); + return file_size; +} + +void process_file_data(const char *filename, FILE *data_file) +{ + FILE *source_file; + size_t len, written, i, src_off=0; + + source_file = fopen(filename, "rb"); + + do { + size_t off = 0; + len = fread(file_buffer_raw, 1, COPY_BUFSIZE, source_file); + if (len > 0) { + for (i = 0; i < len; i++) { + sprintf(&file_buffer_c[off], "0x%02.2x,", file_buffer_raw[i]); + off += 5; + if ((++src_off % HEX_BYTES_PER_LINE) == 0) { + memcpy(&file_buffer_c[off], NEWLINE, NEWLINE_LEN); + off += NEWLINE_LEN; + } + } + written = fwrite(file_buffer_c, 1, off, data_file); + } + } while(len > 0); + fclose(source_file); +} + +int write_checksums(FILE *struct_file, const char *filename, const char *varname, + u16_t hdr_len, u16_t hdr_chksum) +{ + int chunk_size = TCP_MSS; + int offset; + size_t len; + int i = 0; + FILE *f; +#if LWIP_TCP_TIMESTAMPS + /* when timestamps are used, usable space is 12 bytes less per segment */ + chunk_size -= 12; +#endif + + fprintf(struct_file, "#if HTTPD_PRECALCULATED_CHECKSUM" NEWLINE); + fprintf(struct_file, "const struct fsdata_chksum chksums_%s[] = {" NEWLINE, varname); + + memset(file_buffer_raw, 0xab, sizeof(file_buffer_raw)); + f = fopen(filename, "rb"); + if (f == INVALID_HANDLE_VALUE) { + printf("Failed to open file \"%s\"\n", filename); + exit(-1); + } + if (hdr_len > 0) { + /* add checksum for HTTP header */ + fprintf(struct_file, "{%d, 0x%04x, %d}," NEWLINE, 0, hdr_chksum, hdr_len); + i++; + } + for (offset = hdr_len; ; offset += len) { + unsigned short chksum; + len = fread(file_buffer_raw, 1, chunk_size, f); + if (len == 0) { + break; + } + chksum = ~inet_chksum(file_buffer_raw, (u16_t)len); + /* add checksum for data */ + fprintf(struct_file, "{%d, 0x%04x, %d}," NEWLINE, offset, chksum, len); + i++; + } + fclose(f); + fprintf(struct_file, "};" NEWLINE); + fprintf(struct_file, "#endif /* HTTPD_PRECALCULATED_CHECKSUM */" NEWLINE); + return i; +} + +int process_file(FILE *data_file, FILE *struct_file, const char *filename) +{ + char *pch; + char varname[MAX_PATH_LEN]; + int i = 0; + char qualifiedName[MAX_PATH_LEN]; + int file_size; + u16_t http_hdr_chksum = 0; + u16_t http_hdr_len = 0; + int chksum_count = 0; + + /* create qualified name (TODO: prepend slash or not?) */ + sprintf(qualifiedName,"%s/%s", curSubdir, filename); + /* create C variable name */ + strcpy(varname, qualifiedName); + /* convert slashes & dots to underscores */ + while ((pch = strpbrk(varname, "./\\")) != NULL) { + *pch = '_'; + } +#if ALIGN_PAYLOAD + /* to force even alignment of array */ + fprintf(data_file, "static const " PAYLOAD_ALIGN_TYPE " dummy_align_%s = %d;" NEWLINE, varname, payload_alingment_dummy_counter++); +#endif /* ALIGN_PAYLOAD */ + fprintf(data_file, "static const unsigned char data_%s[] = {" NEWLINE, varname); + /* encode source file name (used by file system, not returned to browser) */ + fprintf(data_file, "/* %s (%d chars) */" NEWLINE, qualifiedName, strlen(qualifiedName)+1); + file_put_ascii(data_file, qualifiedName, strlen(qualifiedName)+1, &i); +#if ALIGN_PAYLOAD + /* pad to even number of bytes to assure payload is on aligned boundary */ + while(i % PAYLOAD_ALIGNMENT != 0) { + fprintf(data_file, "0x%02.2x,", 0); + i++; + } +#endif /* ALIGN_PAYLOAD */ + fprintf(data_file, NEWLINE); + + file_size = get_file_size(filename); + if (includeHttpHeader) { + file_write_http_header(data_file, filename, file_size, &http_hdr_len, &http_hdr_chksum); + } + if (precalcChksum) { + chksum_count = write_checksums(struct_file, filename, varname, http_hdr_len, http_hdr_chksum); + } + + /* build declaration of struct fsdata_file in temp file */ + fprintf(struct_file, "const struct fsdata_file file_%s[] = { {" NEWLINE, varname); + fprintf(struct_file, "file_%s," NEWLINE, lastFileVar); + fprintf(struct_file, "data_%s," NEWLINE, varname); + fprintf(struct_file, "data_%s + %d," NEWLINE, varname, i); + fprintf(struct_file, "sizeof(data_%s) - %d," NEWLINE, varname, i); + fprintf(struct_file, "%d," NEWLINE, includeHttpHeader); + if (precalcChksum) { + fprintf(struct_file, "#if HTTPD_PRECALCULATED_CHECKSUM" NEWLINE); + fprintf(struct_file, "%d, chksums_%s," NEWLINE, chksum_count, varname); + fprintf(struct_file, "#endif /* HTTPD_PRECALCULATED_CHECKSUM */" NEWLINE); + } + fprintf(struct_file, "}};" NEWLINE NEWLINE); + strcpy(lastFileVar, varname); + + /* write actual file contents */ + i = 0; + fprintf(data_file, NEWLINE "/* raw file data (%d bytes) */" NEWLINE, file_size); + process_file_data(filename, data_file); + fprintf(data_file, "};" NEWLINE NEWLINE); + + return 0; +} + +int file_write_http_header(FILE *data_file, const char *filename, int file_size, + u16_t *http_hdr_len, u16_t *http_hdr_chksum) +{ + int i = 0; + int response_type = HTTP_HDR_OK; + int file_type = HTTP_HDR_DEFAULT_TYPE; + const char *cur_string; + size_t cur_len; + int written = 0; + size_t hdr_len = 0; + u16_t acc; + const char *file_ext; + int j; + + memset(hdr_buf, 0, sizeof(hdr_buf)); + + if (useHttp11) { + response_type = HTTP_HDR_OK_11; + } + + fprintf(data_file, NEWLINE "/* HTTP header */"); + if (strstr(filename, "404") == filename) { + response_type = HTTP_HDR_NOT_FOUND; + if (useHttp11) { + response_type = HTTP_HDR_NOT_FOUND_11; + } + } else if (strstr(filename, "400") == filename) { + response_type = HTTP_HDR_BAD_REQUEST; + if (useHttp11) { + response_type = HTTP_HDR_BAD_REQUEST_11; + } + } else if (strstr(filename, "501") == filename) { + response_type = HTTP_HDR_NOT_IMPL; + if (useHttp11) { + response_type = HTTP_HDR_NOT_IMPL_11; + } + } + cur_string = g_psHTTPHeaderStrings[response_type]; + cur_len = strlen(cur_string); + fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len); + written += file_put_ascii(data_file, cur_string, cur_len, &i); + i = 0; + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], cur_string, cur_len); + hdr_len += cur_len; + } + + cur_string = serverID; + cur_len = strlen(cur_string); + fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len); + written += file_put_ascii(data_file, cur_string, cur_len, &i); + i = 0; + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], cur_string, cur_len); + hdr_len += cur_len; + } + + file_ext = filename; + while(strstr(file_ext, ".") != NULL) { + file_ext = strstr(file_ext, "."); + file_ext++; + } + if((file_ext == NULL) || (*file_ext == 0)) { + printf("failed to get extension for file \"%s\", using default.\n", filename); + } else { + for(j = 0; j < NUM_HTTP_HEADERS; j++) { + if(!strcmp(file_ext, g_psHTTPHeaders[j].extension)) { + file_type = g_psHTTPHeaders[j].headerIndex; + break; + } + } + if (j >= NUM_HTTP_HEADERS) { + printf("failed to get file type for extension \"%s\", using default.\n", file_ext); + file_type = HTTP_HDR_DEFAULT_TYPE; + } + } + + if (useHttp11) { + char intbuf[MAX_PATH_LEN]; + memset(intbuf, 0, sizeof(intbuf)); + + cur_string = g_psHTTPHeaderStrings[HTTP_HDR_CONTENT_LENGTH]; + cur_len = strlen(cur_string); + fprintf(data_file, NEWLINE "/* \"%s%d\r\n\" (%d+ bytes) */" NEWLINE, cur_string, file_size, cur_len+2); + written += file_put_ascii(data_file, cur_string, cur_len, &i); + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], cur_string, cur_len); + hdr_len += cur_len; + } + + _itoa(file_size, intbuf, 10); + strcat(intbuf, "\r\n"); + cur_len = strlen(intbuf); + written += file_put_ascii(data_file, intbuf, cur_len, &i); + i = 0; + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], intbuf, cur_len); + hdr_len += cur_len; + } + + cur_string = g_psHTTPHeaderStrings[HTTP_HDR_CONN_CLOSE]; + cur_len = strlen(cur_string); + fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len); + written += file_put_ascii(data_file, cur_string, cur_len, &i); + i = 0; + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], cur_string, cur_len); + hdr_len += cur_len; + } + } + + cur_string = g_psHTTPHeaderStrings[file_type]; + cur_len = strlen(cur_string); + fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len); + written += file_put_ascii(data_file, cur_string, cur_len, &i); + i = 0; + if (precalcChksum) { + memcpy(&hdr_buf[hdr_len], cur_string, cur_len); + hdr_len += cur_len; + + LWIP_ASSERT("hdr_len <= 0xffff", hdr_len <= 0xffff); + LWIP_ASSERT("strlen(hdr_buf) == hdr_len", strlen(hdr_buf) == hdr_len); + acc = ~inet_chksum(hdr_buf, (u16_t)hdr_len); + *http_hdr_len = (u16_t)hdr_len; + *http_hdr_chksum = acc; + } + + return written; +} + +int file_put_ascii(FILE *file, const char* ascii_string, int len, int *i) +{ + int x; + for(x = 0; x < len; x++) { + unsigned char cur = ascii_string[x]; + fprintf(file, "0x%02.2x,", cur); + if ((++(*i) % HEX_BYTES_PER_LINE) == 0) { + fprintf(file, NEWLINE); + } + } + return len; +} + +int s_put_ascii(char *buf, const char *ascii_string, int len, int *i) +{ + int x; + int idx = 0; + for(x = 0; x < len; x++) { + unsigned char cur = ascii_string[x]; + sprintf(&buf[idx], "0x%02.2x,", cur); + idx += 5; + if ((++(*i) % HEX_BYTES_PER_LINE) == 0) { + sprintf(&buf[idx], NEWLINE); + idx += NEWLINE_LEN; + } + } + return len; +} diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.exe b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/apps/httpserver_raw/makefsdata/makefsdata.exe new file mode 100644 index 0000000000000000000000000000000000000000..7d4271d0aa18c7f8eeb905dee82a49bce8ba89ab GIT binary patch literal 46592 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 See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* Standard includes. */ +#include + +/* lwIP core includes */ +#include "lwip/opt.h" +#include "lwip/sys.h" +#include "lwip/timers.h" +#include "lwip/debug.h" +#include "lwip/stats.h" +#include "lwip/init.h" +#include "lwip/tcpip.h" +#include "lwip/netif.h" +#include "lwip/tcp.h" +#include "lwip/udp.h" +#include "lwip/dns.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" + +/* lwIP netif includes */ +#include "netif/etharp.h" + +/* applications includes */ +#include "apps/httpserver_raw/httpd.h" + + +#define LWIP_PORT_INIT_IPADDR(addr) IP4_ADDR((addr), configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 ) +#define LWIP_PORT_INIT_GW(addr) IP4_ADDR((addr), configGW_IP_ADDR0, configGW_IP_ADDR1, configGW_IP_ADDR2, configGW_IP_ADDR3 ) +#define LWIP_PORT_INIT_NETMASK(addr) IP4_ADDR((addr), configNET_MASK0,configNET_MASK1,configNET_MASK2,configNET_MASK3) + +/* remember to change this MAC address to suit your needs! + the last octet will be increased by netif->num for each netif */ +#define LWIP_MAC_ADDR_BASE { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 } + +/* configuration for applications */ + +#define LWIP_CHARGEN_APP 0 +#define LWIP_DNS_APP 0 +#define LWIP_HTTPD_APP 1 + +static struct netif netif; + +static void apps_init( void ); + +#define ssiTASK_STATS_INDEX 0 +#define ssiRUN_TIME_STATS_INDEX 1 + + +/* + * The SSI handler callback function passed to lwIP. + */ +static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength ); + + +/* The SSI strings that are embedded in the served html files. */ +static const char *pccSSITags[] = +{ + "rtos_stats", + "run_stats" +}; + + +/* Called from the TCP/IP thread. */ +void lwIPAppsInit( void *pvArgument ) +{ +ip_addr_t ipaddr, netmask, gw; +extern err_t ethernetif_init( struct netif *netif ); + + ( void ) pvArgument; + + ip_addr_set_zero( &gw ); + ip_addr_set_zero( &ipaddr ); + ip_addr_set_zero( &netmask ); + + LWIP_PORT_INIT_GW(&gw); + LWIP_PORT_INIT_IPADDR(&ipaddr); + LWIP_PORT_INIT_NETMASK(&netmask); + + netif_set_default(netif_add(&netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, tcpip_input)); + + netif_set_up( &netif ); + apps_init(); + http_set_ssi_handler( uslwIPAppsSSIHandler, pccSSITags, sizeof( pccSSITags ) / sizeof( char * ) ); +} +/*-----------------------------------------------------------*/ + +/* This function initializes applications */ +static void apps_init( void ) +{ + /* Taken from the lwIP example code. */ + + #if LWIP_HTTPD_APP && LWIP_TCP + { + httpd_init(); + } + #endif /* LWIP_HTTPD_APP && LWIP_TCP */ +} +/*-----------------------------------------------------------*/ + +static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength ) +{ +static unsigned int uiUpdateCount = 0; +static char cUpdateString[ 200 ]; +extern char *pcMainGetTaskStatusMessage( void ); + + ( void ) iBufferLength; + + /* The SSI handler function that generates text depending on the index of + the SSI tag encountered. */ + + switch( iIndex ) + { + case ssiTASK_STATS_INDEX : + vTaskList( ( signed char * ) pcBuffer ); + break; + + case ssiRUN_TIME_STATS_INDEX : + vTaskGetRunTimeStats( ( signed char * ) pcBuffer ); + break; + } + + uiUpdateCount++; + sprintf( cUpdateString, "\r\n\r\n%u\r\nStatus - %s", uiUpdateCount, pcMainGetTaskStatusMessage() ); + strcat( pcBuffer, cUpdateString ); + return strlen( pcBuffer ); +} + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipcfg_MicroBlaze.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipcfg_MicroBlaze.h new file mode 100644 index 000000000..f7109fad1 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipcfg_MicroBlaze.h @@ -0,0 +1,15 @@ + +#define LWIP_PORT_INIT_IPADDR(addr) IP4_ADDR((addr), configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 ) +#define LWIP_PORT_INIT_GW(addr) IP4_ADDR((addr), configGW_IP_ADDR0, configGW_IP_ADDR1, configGW_IP_ADDR2, configGW_IP_ADDR3 ) +#define LWIP_PORT_INIT_NETMASK(addr) IP4_ADDR((addr), configNET_MASK0,configNET_MASK1,configNET_MASK2,configNET_MASK3) + +/* remember to change this MAC address to suit your needs! + the last octet will be increased by netif->num for each netif */ +#define LWIP_MAC_ADDR_BASE { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 } + +/* configuration for applications */ + +#define LWIP_CHARGEN_APP 0 +#define LWIP_DNS_APP 0 +#define LWIP_HTTPD_APP 1 + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipopts.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipopts.h new file mode 100644 index 000000000..15aea5dec --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/lwIP/lwIP_Apps/lwipopts.h @@ -0,0 +1,307 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include "xparameters.h" + +/* Define platform endianness (might already be defined) */ +#ifndef BYTE_ORDER + #if XPAR_MICROBLAZE_0_ENDIANNESS == 1 + #define BYTE_ORDER LITTLE_ENDIAN + #else + #define BYTE_ORDER BIG_ENDIAN + #endif +#endif /* BYTE_ORDER */ + +#define XLWIP_CONFIG_INCLUDE_EMACLITE 1 + +/* SSI options. */ +#define TCPIP_THREAD_NAME "tcpip" +#define LWIP_HTTPD_MAX_TAG_NAME_LEN 20 +#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 1024 +#define TCPIP_THREAD_PRIO configLWIP_TASK_PRIORITY +#define TCPIP_THREAD_STACKSIZE configMINIMAL_STACK_SIZE * 3 + +#define NO_SYS 0 +#define LWIP_SOCKET (NO_SYS==0) +#define LWIP_NETCONN (NO_SYS==0) + +#define LWIP_IGMP 0 +#define LWIP_ICMP 1 +#define LWIP_SNMP 0 + +#define LWIP_DNS 1 + +#define LWIP_HAVE_LOOPIF 1 +#define LWIP_NETIF_LOOPBACK 1 +#define LWIP_LOOPBACK_MAX_PBUFS 10 + +#define TCP_LISTEN_BACKLOG 0 + +#define LWIP_COMPAT_SOCKETS 1 +#define LWIP_SO_RCVTIMEO 1 +#define LWIP_SO_RCVBUF 1 + +#define LWIP_TCPIP_CORE_LOCKING 0 + +#define LWIP_NETIF_LINK_CALLBACK 0 +#define LWIP_NETIF_STATUS_CALLBACK 0 + + +#ifdef LWIP_DEBUG + +#define LWIP_DBG_MIN_LEVEL 0 +#define PPP_DEBUG LWIP_DBG_OFF +#define MEM_DEBUG LWIP_DBG_OFF +#define MEMP_DEBUG LWIP_DBG_OFF +#define PBUF_DEBUG LWIP_DBG_OFF +#define API_LIB_DEBUG LWIP_DBG_ON +#define API_MSG_DEBUG LWIP_DBG_ON +#define TCPIP_DEBUG LWIP_DBG_ON +#define NETIF_DEBUG LWIP_DBG_ON +#define SOCKETS_DEBUG LWIP_DBG_OFF +#define DNS_DEBUG LWIP_DBG_OFF +#define AUTOIP_DEBUG LWIP_DBG_OFF +#define DHCP_DEBUG LWIP_DBG_OFF +#define IP_DEBUG LWIP_DBG_O +#define IP_REASS_DEBUG LWIP_DBG_ON +#define ICMP_DEBUG LWIP_DBG_OFF +#define IGMP_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF +#define TCP_DEBUG LWIP_DBG_ON +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#define TCP_RTO_DEBUG LWIP_DBG_ON +#define TCP_CWND_DEBUG LWIP_DBG_ON +#define TCP_WND_DEBUG LWIP_DBG_ON +#define TCP_FR_DEBUG LWIP_DBG_ON +#define TCP_QLEN_DEBUG LWIP_DBG_ON +#define TCP_RST_DEBUG LWIP_DBG_ON +#endif + +#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) + +#define TCPIP_MBOX_SIZE 10 + +/* ---------- Memory options ---------- */ +/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which + lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2 + byte alignment -> define MEM_ALIGNMENT to 2. */ +/* MSVC port: intel processors don't need 4-byte alignment, + but are faster that way! */ +#define MEM_ALIGNMENT 4 + +/* MEM_SIZE: the size of the heap memory. If the application will send +a lot of data that needs to be copied, this should be set high. */ +#define MEM_SIZE 10240 + +/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application + sends a lot of data out of ROM (or other static memory), this + should be set high. */ +#define MEMP_NUM_PBUF 16 +/* MEMP_NUM_RAW_PCB: the number of UDP protocol control blocks. One + per active RAW "connection". */ +#define MEMP_NUM_RAW_PCB 3 +/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + per active UDP "connection". */ +#define MEMP_NUM_UDP_PCB 4 +/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP + connections. */ +#define MEMP_NUM_TCP_PCB 5 +/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP + connections. */ +#define MEMP_NUM_TCP_PCB_LISTEN 8 +/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP + segments. */ +#define MEMP_NUM_TCP_SEG 16 +/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active + timeouts. */ +#define MEMP_NUM_SYS_TIMEOUT 15 + +/* The following four are used only with the sequential API and can be + set to 0 if the application only will use the raw API. */ +/* MEMP_NUM_NETBUF: the number of struct netbufs. */ +#define MEMP_NUM_NETBUF 2 +/* MEMP_NUM_NETCONN: the number of struct netconns. */ +#define MEMP_NUM_NETCONN 10 +/* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used + for sequential API communication and incoming packets. Used in + src/api/tcpip.c. */ +#define MEMP_NUM_TCPIP_MSG_API 16 +#define MEMP_NUM_TCPIP_MSG_INPKT 16 + + +/* ---------- Pbuf options ---------- */ +/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ +#define PBUF_POOL_SIZE 100 + +/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ +#define PBUF_POOL_BUFSIZE 128 + +/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a + link level header. */ +#define PBUF_LINK_HLEN 16 + +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#define SYS_LIGHTWEIGHT_PROT (NO_SYS==0) + + +/* ---------- TCP options ---------- */ +#define LWIP_TCP 1 +#define TCP_TTL 255 + +/* Controls if TCP should queue segments that arrive out of + order. Define to 0 if your device is low on memory. */ +#define TCP_QUEUE_OOSEQ 1 + +/* TCP Maximum segment size. */ +#define TCP_MSS 1024 + +/* TCP sender buffer space (bytes). */ +#define TCP_SND_BUF 2048 + +/* TCP sender buffer space (pbufs). This must be at least = 2 * + TCP_SND_BUF/TCP_MSS for things to work. */ +#define TCP_SND_QUEUELEN (4 * TCP_SND_BUF/TCP_MSS) + +/* TCP writable space (bytes). This must be less than or equal + to TCP_SND_BUF. It is the amount of space which must be + available in the tcp snd_buf for select to return writable */ +#define TCP_SNDLOWAT (TCP_SND_BUF/2) + +/* TCP receive window. */ +#define TCP_WND 8096 + +/* Maximum number of retransmissions of data segments. */ +#define TCP_MAXRTX 12 + +/* Maximum number of retransmissions of SYN segments. */ +#define TCP_SYNMAXRTX 4 + + +/* ---------- ARP options ---------- */ +#define LWIP_ARP 1 +#define ARP_TABLE_SIZE 10 +#define ARP_QUEUEING 1 + + +/* ---------- IP options ---------- */ +/* Define IP_FORWARD to 1 if you wish to have the ability to forward + IP packets across network interfaces. If you are going to run lwIP + on a device with only one network interface, define this to 0. */ +#define IP_FORWARD 1 + +/* IP reassembly and segmentation.These are orthogonal even + * if they both deal with IP fragments */ +#define IP_REASSEMBLY 1 +#define IP_REASS_MAX_PBUFS 10 +#define MEMP_NUM_REASSDATA 10 +#define IP_FRAG 1 + + +/* ---------- ICMP options ---------- */ +#define ICMP_TTL 255 + + +/* ---------- DHCP options ---------- */ +/* Define LWIP_DHCP to 1 if you want DHCP configuration of + interfaces. */ +#define LWIP_DHCP 0 + +/* 1 if you want to do an ARP check on the offered address + (recommended). */ +#define DHCP_DOES_ARP_CHECK (LWIP_DHCP) + + +/* ---------- AUTOIP options ------- */ +#define LWIP_AUTOIP 0 +#define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP && LWIP_AUTOIP) + + +/* ---------- UDP options ---------- */ +#define LWIP_UDP 1 +#define LWIP_UDPLITE 1 +#define UDP_TTL 255 + + +/* ---------- Statistics options ---------- */ + +#define LWIP_STATS 1 +#define LWIP_STATS_DISPLAY 1 + +#if LWIP_STATS +#define LINK_STATS 1 +#define IP_STATS 1 +#define ICMP_STATS 1 +#define IGMP_STATS 1 +#define IPFRAG_STATS 1 +#define UDP_STATS 1 +#define TCP_STATS 1 +#define MEM_STATS 1 +#define MEMP_STATS 1 +#define PBUF_STATS 1 +#define SYS_STATS 1 +#endif /* LWIP_STATS */ + + +/* ---------- PPP options ---------- */ + +#define PPP_SUPPORT 0 /* Set > 0 for PPP */ + +#if PPP_SUPPORT + +#define NUM_PPP 1 /* Max PPP sessions. */ + + +/* Select modules to enable. Ideally these would be set in the makefile but + * we're limited by the command line length so you need to modify the settings + * in this file. + */ +#define PPPOE_SUPPORT 1 +#define PPPOS_SUPPORT 1 + +#define PAP_SUPPORT 1 /* Set > 0 for PAP. */ +#define CHAP_SUPPORT 1 /* Set > 0 for CHAP. */ +#define MSCHAP_SUPPORT 0 /* Set > 0 for MSCHAP (NOT FUNCTIONAL!) */ +#define CBCP_SUPPORT 0 /* Set > 0 for CBCP (NOT FUNCTIONAL!) */ +#define CCP_SUPPORT 0 /* Set > 0 for CCP (NOT FUNCTIONAL!) */ +#define VJ_SUPPORT 1 /* Set > 0 for VJ header compression. */ +#define MD5_SUPPORT 1 /* Set > 0 for MD5 (see also CHAP) */ + +#endif /* PPP_SUPPORT */ + +#endif /* __LWIPOPTS_H__ */ diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-blinky.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-blinky.c new file mode 100644 index 000000000..a68b78657 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-blinky.c @@ -0,0 +1,540 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + FreeRTOS supports many tools and architectures. V7.0.0 is sponsored by: + Atollic AB - Atollic provides professional embedded systems development + tools for C/C++ development, code analysis and test automation. + See http://www.atollic.com + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* + * main-blinky.c is included when the "Blinky" build configuration is used. + * main-full.c is included when the "Full" build configuration is used. + * + * main-blinky.c (this file) defines a very simple demo that creates two tasks, + * one queue, and one timer. It also demonstrates how MicroBlaze interrupts + * can interact with FreeRTOS tasks/timers. + * + * This simple demo project was developed and tested on the Spartan-6 SP605 + * development board, using the hardware configuration found in the hardware + * project that is already included in the Eclipse project. + * + * The idle hook function: + * The idle hook function demonstrates how to query the amount of FreeRTOS heap + * space that is remaining (see vApplicationIdleHook() defined in this file). + * + * The main() Function: + * main() creates one software timer, one queue, and two tasks. It then starts + * the scheduler. + * + * The Queue Send Task: + * The queue send task is implemented by the prvQueueSendTask() function in + * this file. prvQueueSendTask() sits in a loop that causes it to repeatedly + * block for 200 milliseconds, before sending the value 100 to the queue that + * was created within main(). Once the value is sent, the task loops back + * around to block for another 200 milliseconds. + * + * The Queue Receive Task: + * The queue receive task is implemented by the prvQueueReceiveTask() function + * in this file. prvQueueReceiveTask() sits in a loop that causes it to + * repeatedly attempt to read data from the queue that was created within + * main(). When data is received, the task checks the value of the data, and + * if the value equals the expected 100, toggles an LED. The 'block time' + * parameter passed to the queue receive function specifies that the task + * should be held in the Blocked state indefinitely to wait for data to be + * available on the queue. The queue receive task will only leave the Blocked + * state when the queue send task writes to the queue. As the queue send task + * writes to the queue every 200 milliseconds, the queue receive task leaves + * the Blocked state every 200 milliseconds, and therefore toggles the LED + * every 200 milliseconds. + * + * The LED Software Timer and the Button Interrupt: + * The user buttons are configured to generate an interrupt each time one is + * pressed. The interrupt service routine switches an LED on, and resets the + * LED software timer. The LED timer has a 5000 millisecond (5 second) period, + * and uses a callback function that is defined to just turn the LED off again. + * Therefore, pressing the user button will turn the LED on, and the LED will + * remain on until a full five seconds pass without the button being pressed. + */ + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "timers.h" + +/* BSP includes. */ +#include "xtmrctr.h" +#include "xgpio.h" + +/* Priorities at which the tasks are created. */ +#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) + +/* The rate at which data is sent to the queue, specified in milliseconds, and +converted to ticks using the portTICK_RATE_MS constant. */ +#define mainQUEUE_SEND_FREQUENCY_MS ( 200 / portTICK_RATE_MS ) + +/* The number of items the queue can hold. This is 1 as the receive task +will remove items as they are added because it has the higher priority, meaning +the send task should always find the queue empty. */ +#define mainQUEUE_LENGTH ( 1 ) + +/* The LED toggled by the queue receive task. */ +#define mainTASK_CONTROLLED_LED 0x01UL + +/* The LED turned on by the button interrupt, and turned off by the LED timer. */ +#define mainTIMER_CONTROLLED_LED 0x02UL + +/* A block time of 0 simply means, "don't block". */ +#define mainDONT_BLOCK ( portTickType ) 0 + +/*-----------------------------------------------------------*/ + +/* + * Setup the NVIC, LED outputs, and button inputs. + */ +static void prvSetupHardware( void ); + +/* + * The tasks as described in the comments at the top of this file. + */ +static void prvQueueReceiveTask( void *pvParameters ); +static void prvQueueSendTask( void *pvParameters ); + +/* + * The LED timer callback function. This does nothing but switch off the + * LED defined by the mainTIMER_CONTROLLED_LED constant. + */ +static void vLEDTimerCallback( xTimerHandle xTimer ); + +/* + * The handler executed each time a button interrupt is generated. This ensures + * the LED defined by mainTIMER_CONTROLLED_LED is on, and resets the timer so + * the timer will not turn the LED off for a full 5 seconds after the button + * interrupt occurred. + */ +static void prvButtonInputInterruptHandler( void *pvUnused ); + +/*-----------------------------------------------------------*/ + +/* The queue used by the queue send and queue receive tasks. */ +static xQueueHandle xQueue = NULL; + +/* The LED software timer. This uses vLEDTimerCallback() as its callback +function. */ +static xTimerHandle xLEDTimer = NULL; + +/* Maintains the current LED output state. */ +static volatile unsigned char ucGPIOState = 0U; + +/*-----------------------------------------------------------*/ + +/* Structures that hold the state of the various peripherals used by this demo. +These are used by the Xilinx peripheral driver API functions. */ +static XTmrCtr xTimer0Instance; +static XGpio xOutputGPIOInstance, xInputGPIOInstance; + +/* Constants required by the Xilinx peripheral driver API functions that are +relevant to the particular hardware set up. */ +static const unsigned long ulGPIOOutputChannel = 1UL, ulGPIOInputChannel = 1UL; + +/*-----------------------------------------------------------*/ + +int main( void ) +{ + /* ************************************************************************* + This is a very simple project suitable for getting started with FreeRTOS. + If you would prefer a more complex project that demonstrates a lot more + features and tests, then select the 'Full' build configuration within the + SDK Eclipse IDE. + ***************************************************************************/ + + /* Configure the interrupt controller, LED outputs and button inputs. */ + prvSetupHardware(); + + /* Create the queue used by the queue send and queue receive tasks as + described in the comments at the top of this file. */ + xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) ); + + /* Sanity check that the queue was created. */ + configASSERT( xQueue ); + + /* Start the two tasks as described in the comments at the top of this + file. */ + xTaskCreate( prvQueueReceiveTask, ( signed char * ) "Rx", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_RECEIVE_TASK_PRIORITY, NULL ); + xTaskCreate( prvQueueSendTask, ( signed char * ) "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL ); + + /* Create the software timer that is responsible for turning off the LED + if the button is not pushed within 5000ms, as described at the top of + this file. The timer is not actually started until a button interrupt is + pushed, as it is not until that point that the LED is turned on. */ + xLEDTimer = xTimerCreate( ( const signed char * ) "LEDTimer", /* A text name, purely to help debugging. */ + ( 5000 / portTICK_RATE_MS ), /* The timer period, in this case 5000ms (5s). */ + pdFALSE, /* This is a one shot timer, so xAutoReload is set to pdFALSE. */ + ( void * ) 0, /* The ID is not used, so can be set to anything. */ + vLEDTimerCallback /* The callback function that switches the LED off. */ + ); + + /* Start the tasks and timer running. */ + vTaskStartScheduler(); + + /* If all is well, the scheduler will now be running, and the following line + will never be reached. If the following line does execute, then there was + insufficient FreeRTOS heap memory available for the idle and/or timer tasks + to be created. See the memory management section on the FreeRTOS web site + for more details. */ + for( ;; ); +} +/*-----------------------------------------------------------*/ + +/* The callback is executed when the LED timer expires. */ +static void vLEDTimerCallback( xTimerHandle xTimer ) +{ + /* The timer has expired - so no button pushes have occurred in the last + five seconds - turn the LED off. NOTE - accessing the LED port should use + a critical section because it is accessed from multiple tasks, and the + button interrupt - in this trivial case, for simplicity, the critical + section is omitted. */ + ucGPIOState &= ~mainTIMER_CONTROLLED_LED; + XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ucGPIOState ); +} +/*-----------------------------------------------------------*/ + +/* The ISR is executed when the user button is pushed. */ +static void prvButtonInputInterruptHandler( void *pvUnused ) +{ +long lHigherPriorityTaskWoken = pdFALSE; + + /* The button was pushed, so ensure the LED is on before resetting the + LED timer. The LED timer will turn the LED off if the button is not + pushed within 5000ms. */ + ucGPIOState |= mainTIMER_CONTROLLED_LED; + XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ucGPIOState ); + + /* Ensure only the ISR safe reset API function is used, as this is executed + in an interrupt context. */ + xTimerResetFromISR( xLEDTimer, &lHigherPriorityTaskWoken ); + + /* Clear the interrupt before leaving. */ + XGpio_InterruptClear( &xInputGPIOInstance, ulGPIOInputChannel ); + + /* If calling xTimerResetFromISR() caused a task (in this case the timer + service/daemon task) to unblock, and the unblocked task has a priority + higher than or equal to the task that was interrupted, then + lHigherPriorityTaskWoken will now be set to pdTRUE, and calling + portEND_SWITCHING_ISR() will ensure the unblocked task runs next. */ + portYIELD_FROM_ISR( lHigherPriorityTaskWoken ); +} +/*-----------------------------------------------------------*/ + +static void prvQueueSendTask( void *pvParameters ) +{ +portTickType xNextWakeTime; +const unsigned long ulValueToSend = 100UL; + + /* Initialise xNextWakeTime - this only needs to be done once. */ + xNextWakeTime = xTaskGetTickCount(); + + for( ;; ) + { + /* Place this task in the blocked state until it is time to run again. + The block time is specified in ticks, the constant used converts ticks + to ms. While in the Blocked state this task will not consume any CPU + time. */ + vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS ); + + /* Send to the queue - causing the queue receive task to unblock and + toggle an LED. 0 is used as the block time so the sending operation + will not block - it shouldn't need to block as the queue should always + be empty at this point in the code. */ + xQueueSend( xQueue, &ulValueToSend, mainDONT_BLOCK ); + } +} +/*-----------------------------------------------------------*/ + +static void prvQueueReceiveTask( void *pvParameters ) +{ +unsigned long ulReceivedValue; + + for( ;; ) + { + /* Wait until something arrives in the queue - this task will block + indefinitely provided INCLUDE_vTaskSuspend is set to 1 in + FreeRTOSConfig.h. */ + xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY ); + + /* To get here something must have been received from the queue, but + is it the expected value? If it is, toggle the green LED. */ + if( ulReceivedValue == 100UL ) + { + /* NOTE - accessing the LED port should use a critical section + because it is accessed from multiple tasks, and the button interrupt + - in this trivial case, for simplicity, the critical section is + omitted. */ + if( ( ucGPIOState & mainTASK_CONTROLLED_LED ) != 0 ) + { + ucGPIOState &= ~mainTASK_CONTROLLED_LED; + } + else + { + ucGPIOState |= mainTASK_CONTROLLED_LED; + } + + XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ucGPIOState ); + } + } +} +/*-----------------------------------------------------------*/ + +static void prvSetupHardware( void ) +{ +portBASE_TYPE xStatus; +const unsigned char ucSetToOutput = 0U; + + /* Initialize the GPIO for the LEDs. */ + xStatus = XGpio_Initialize( &xOutputGPIOInstance, XPAR_LEDS_4BITS_DEVICE_ID ); + if( xStatus == XST_SUCCESS ) + { + /* All bits on this channel are going to be outputs (LEDs). */ + XGpio_SetDataDirection( &xOutputGPIOInstance, ulGPIOOutputChannel, ucSetToOutput ); + + /* Start with all LEDs off. */ + ucGPIOState = 0U; + XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ucGPIOState ); + } + + /* Initialise the GPIO for the button inputs. */ + if( xStatus == XST_SUCCESS ) + { + xStatus = XGpio_Initialize( &xInputGPIOInstance, XPAR_PUSH_BUTTONS_4BITS_DEVICE_ID ); + } + + if( xStatus == XST_SUCCESS ) + { + /* Install the handler defined in this task for the button input. + *NOTE* The FreeRTOS defined xPortInstallInterruptHandler() API function + must be used for this purpose. */ + xStatus = xPortInstallInterruptHandler( XPAR_MICROBLAZE_0_INTC_PUSH_BUTTONS_4BITS_IP2INTC_IRPT_INTR, prvButtonInputInterruptHandler, NULL ); + + if( xStatus == pdPASS ) + { + /* Set buttons to input. */ + XGpio_SetDataDirection( &xInputGPIOInstance, ulGPIOInputChannel, ~( ucSetToOutput ) ); + + /* Enable the button input interrupts in the interrupt controller. + *NOTE* The vPortEnableInterrupt() API function must be used for this + purpose. */ + vPortEnableInterrupt( XPAR_MICROBLAZE_0_INTC_PUSH_BUTTONS_4BITS_IP2INTC_IRPT_INTR ); + + /* Enable GPIO channel interrupts. */ + XGpio_InterruptEnable( &xInputGPIOInstance, ulGPIOInputChannel ); + XGpio_InterruptGlobalEnable( &xInputGPIOInstance ); + } + } + + configASSERT( ( xStatus == pdPASS ) ); +} +/*-----------------------------------------------------------*/ + +void vApplicationMallocFailedHook( void ) +{ + /* vApplicationMallocFailedHook() will only be called if + configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook + function that will get called if a call to pvPortMalloc() fails. + pvPortMalloc() is called internally by the kernel whenever a task, queue or + semaphore is created. It is also called by various parts of the demo + application. If heap_1.c or heap_2.c are used, then the size of the heap + available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in + FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used + to query the size of free heap space that remains (although it does not + provide information on how the remaining heap might be fragmented). */ + taskDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ) +{ + ( void ) pcTaskName; + ( void ) pxTask; + + /* vApplicationStackOverflowHook() will only be called if + configCHECK_FOR_STACK_OVERFLOW is set to either 1 or 2. The handle and name + of the offending task will be passed into the hook function via its + parameters. However, when a stack has overflowed, it is possible that the + parameters will have been corrupted, in which case the pxCurrentTCB variable + can be inspected directly. */ + taskDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +void vApplicationIdleHook( void ) +{ +volatile size_t xFreeHeapSpace; + + /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set + to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle + task. It is essential that code added to this hook function never attempts + to block in any way (for example, call xQueueReceive() with a block time + specified, or call vTaskDelay()). If the application makes use of the + vTaskDelete() API function (as this demo application does) then it is also + important that vApplicationIdleHook() is permitted to return to its calling + function, because it is the responsibility of the idle task to clean up + memory allocated by the kernel to any task that has since been deleted. */ + + /* This implementation of vApplicationIdleHook() simply demonstrates how + the xPortGetFreeHeapSize() function can be used. */ + xFreeHeapSpace = xPortGetFreeHeapSize(); + + if( xFreeHeapSpace > 100 ) + { + /* By now, the kernel has allocated everything it is going to, so + if there is a lot of heap remaining unallocated then + the value of configTOTAL_HEAP_SIZE in FreeRTOSConfig.h can be + reduced accordingly. */ + } +} +/*-----------------------------------------------------------*/ + +void vApplicationTickHook( void ) +{ + /* vApplicationTickHook() will only be called if configUSE_TICK_HOOK is set + to 1 in FreeRTOSConfig.h. It executes from an interrupt context so must + not use any FreeRTOS API functions that do not end in ...FromISR(). + + This simple blinky demo does not use the tick hook, but a tick hook is + required to be defined as the blinky and full demos share a + FreeRTOSConfig.h header file. */ +} +/*-----------------------------------------------------------*/ + +/* This is an application defined callback function used to install the tick +interrupt handler. It is provided as an application callback because the kernel +will run on lots of different MicroBlaze and FPGA configurations - not all of +which will have the same timer peripherals defined or available. This example +uses the AXI Timer 0. If that is available on your hardware platform then this +example callback implementation should not require modification. The name of +the interrupt handler that should be installed is vPortTickISR(), which the +function below declares as an extern. */ +void vApplicationSetupTimerInterrupt( void ) +{ +portBASE_TYPE xStatus; +const unsigned char ucTimerCounterNumber = ( unsigned char ) 0U; +const unsigned long ulCounterValue = ( ( XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL ); +extern void vPortTickISR( void *pvUnused ); + + /* Initialise the timer/counter. */ + xStatus = XTmrCtr_Initialize( &xTimer0Instance, XPAR_AXI_TIMER_0_DEVICE_ID ); + + if( xStatus == XST_SUCCESS ) + { + /* Install the tick interrupt handler as the timer ISR. + *NOTE* The xPortInstallInterruptHandler() API function must be used for + this purpose. */ + xStatus = xPortInstallInterruptHandler( XPAR_INTC_0_TMRCTR_0_VEC_ID, vPortTickISR, NULL ); + } + + if( xStatus == pdPASS ) + { + /* Enable the timer interrupt in the interrupt controller. + *NOTE* The vPortEnableInterrupt() API function must be used for this + purpose. */ + vPortEnableInterrupt( XPAR_INTC_0_TMRCTR_0_VEC_ID ); + + /* Configure the timer interrupt handler. */ + XTmrCtr_SetHandler( &xTimer0Instance, ( void * ) vPortTickISR, NULL ); + + /* Set the correct period for the timer. */ + XTmrCtr_SetResetValue( &xTimer0Instance, ucTimerCounterNumber, ulCounterValue ); + + /* Enable the interrupts. Auto-reload mode is used to generate a + periodic tick. Note that interrupts are disabled when this function is + called, so interrupts will not start to be processed until the first + task has started to run. */ + XTmrCtr_SetOptions( &xTimer0Instance, ucTimerCounterNumber, ( XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION ) ); + + /* Start the timer. */ + XTmrCtr_Start( &xTimer0Instance, ucTimerCounterNumber ); + } + + /* Sanity check that the function executed as expected. */ + configASSERT( ( xStatus == pdPASS ) ); +} +/*-----------------------------------------------------------*/ + +/* This is an application defined callback function used to clear whichever +interrupt was installed by the the vApplicationSetupTimerInterrupt() callback +function - in this case the interrupt generated by the AXI timer. It is +provided as an application callback because the kernel will run on lots of +different MicroBlaze and FPGA configurations - not all of which will have the +same timer peripherals defined or available. This example uses the AXI Timer 0. +If that is available on your hardware platform then this example callback +implementation should not require modification provided the example definition +of vApplicationSetupTimerInterrupt() is also not modified. */ +void vApplicationClearTimerInterrupt( void ) +{ +unsigned long ulCSR; + + /* Clear the timer interrupt */ + ulCSR = XTmrCtr_GetControlStatusReg( XPAR_AXI_TIMER_0_BASEADDR, 0 ); + XTmrCtr_SetControlStatusReg( XPAR_AXI_TIMER_0_BASEADDR, 0, ulCSR ); +} +/*-----------------------------------------------------------*/ + +/* These functions are not used by the Blinky build configuration. However, +they need to be defined because the Blinky and Full build configurations share +a FreeRTOSConifg.h configuration file. */ +void vMainConfigureTimerForRunTimeStats( void ) {} +unsigned long ulMainGetRunTimeCounterValue( void ) { return 1; } diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-full.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-full.c new file mode 100644 index 000000000..36c415932 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/main-full.c @@ -0,0 +1,617 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* **************************************************************************** + * main-blinky.c is included when the "Blinky" build configuration is used. + * main-full.c is included when the "Full" build configuration is used. + * + * main-full.c creates a lot of demo and test tasks and timers, and is + * therefore very comprehensive but also complex. If you would prefer a much + * simpler project to get started with, then select the 'Blinky' build + * configuration within the SDK Eclipse IDE. See the documentation page for + * this demo on the http://www.FreeRTOS.org web site for more information. + * **************************************************************************** + * + * main() creates all the demo application tasks and timers, then starts the + * scheduler. The web documentation provides more details of the standard demo + * application tasks, which provide no particular functionality, but do provide + * a good example of how to use the FreeRTOS API. + * + * In addition to the standard demo tasks, the following tasks and tests are + * defined and/or created within this file: + * + * TCP/IP ("lwIP") task - TBD _RB_ + * + * "Reg test" tasks - These test the task context switch mechanism by first + * filling the MicroBlaze registers with known values, before checking that each + * register maintains the value that was written to it as the tasks are switched + * in and out. The two register test tasks do not use the same values, and + * execute at a very low priority to ensure they are pre-empted regularly. + * + * "Check" timer - The check timer period is initially set to five seconds. + * The check timer callback function checks that all the standard demo tasks, + * and the register check tasks, are not only still executing, but are executing + * without reporting any errors. If the check timer discovers that a task has + * either stalled, or reported an error, then it changes its own period from + * the initial five seconds, to just 200ms. The check timer callback function + * also toggles an LED each time it is called. This provides a visual + * indication of the system status: If the LED toggles every five seconds then + * no issues have been discovered. If the LED toggles every 200ms then an issue + * has been discovered with at least one task. The last reported issue is + * latched into the pcStatusMessage variable. + * + * This file also includes example implementations of the vApplicationTickHook(), + * vApplicationIdleHook(), vApplicationStackOverflowHook(), + * vApplicationMallocFailedHook(), vApplicationClearTimerInterrupt(), and + * vApplicationSetupTimerInterrupt() callback (hook) functions. + */ + +/* Standard includes. */ +#include +#include + +/* BSP includes. */ +#include "xtmrctr.h" +#include "microblaze_exceptions_g.h" + +/* Kernel includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "timers.h" + +/* Standard demo includes. */ +#include "partest.h" +#include "flash.h" +#include "BlockQ.h" +#include "death.h" +#include "blocktim.h" +#include "semtest.h" +#include "PollQ.h" +#include "GenQTest.h" +#include "QPeek.h" +#include "recmutex.h" +#include "flop.h" +#include "dynamic.h" +#include "comtest_strings.h" +#include "TimerDemo.h" + +/* lwIP includes. */ +#include "lwip/tcpip.h" + + +/* Priorities at which the various tasks are created. */ +#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 1 ) +#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 ) +#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainFLASH_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) +#define mainuIP_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY ) +#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) +#define mainFLOP_TASK_PRIORITY ( tskIDLE_PRIORITY ) + +/* The LED toggled by the check task. */ +#define mainCHECK_LED ( 3 ) + +/* The rate at which mainCHECK_LED will toggle when all the tasks are running +without error. See the description of the check timer in the comments at the +top of this file. */ +#define mainNO_ERROR_CHECK_TIMER_PERIOD ( 5000 / portTICK_RATE_MS ) + +/* The rate at which mainCHECK_LED will toggle when an error has been reported +by at least one task. See the description of the check timer in the comments at +the top of this file. */ +#define mainERROR_CHECK_TIMER_PERIOD ( 200 / portTICK_RATE_MS ) + +/* A block time of zero simply means "don't block". */ +#define mainDONT_BLOCK ( ( portTickType ) 0 ) + +/* The LED used by the comtest tasks. See the comtest_strings.c file for more +information. In this case an invalid LED number is provided as all four +available LEDs (LEDs 0 to 3) are already in use. */ +#define mainCOM_TEST_LED ( 4 ) + +/* Baud rate used by the comtest tasks. The baud rate used is actually fixed in +UARTLite IP when the hardware was built, but the standard serial init function +required a baud rate parameter to be provided - in this case it is just +ignored. */ +#define mainCOM_TEST_BAUD_RATE ( XPAR_RS232_UART_1_BAUDRATE ) + +/* The timer test task generates a lot of timers that all use a different +period that is a multiple of the mainTIMER_TEST_PERIOD definition. */ +#define mainTIMER_TEST_PERIOD ( 20 ) + +/*-----------------------------------------------------------*/ + +/* + * The register test tasks as described in the comments at the top of this file. + * The nature of the register test tasks means they have to be implemented in + * assembler. + */ +extern void vRegisterTest1( void *pvParameters ); +extern void vRegisterTest2( void *pvParameters ); + +/* + * Defines the 'check' timer functionality as described at the top of this file. + * This function is the callback function associated with the 'check' timer. + */ +static void vCheckTimerCallback( xTimerHandle xTimer ); + +/* + * Configure the interrupt controller, LED outputs and button inputs. + */ +static void prvSetupHardware( void ); + +/* Defined in lwIPApps.c. */ +extern void lwIPAppsInit( void *pvArguments ); + +/*-----------------------------------------------------------*/ + +/* The check timer callback function sets pcStatusMessage to a string that +indicates the last reported error that it discovered. */ +static const char *pcStatusMessage = NULL; + +/* Structures that hold the state of the various peripherals used by this demo. +These are used by the Xilinx peripheral driver API functions. In this case, +only the timer/counter is used directly within this file. */ +static XTmrCtr xTimer0Instance; + +/* The 'check' timer, as described at the top of this file. */ +static xTimerHandle xCheckTimer = NULL; + +/*-----------------------------------------------------------*/ + +int main( void ) +{ + /*************************************************************************** + This project includes a lot of demo and test tasks and timers, and is + therefore comprehensive, but complex. If you would prefer a much simpler + project to get started with, then select the 'Blinky' build configuration + within the SDK Eclipse IDE. + ***************************************************************************/ + + /* Configure the interrupt controller, LED outputs and button inputs. */ + prvSetupHardware(); + + /* This call creates the TCP/IP thread. */ + tcpip_init( lwIPAppsInit, NULL ); + + /* Start the reg test tasks, as described in the comments at the top of this + file. */ + xTaskCreate( vRegisterTest1, ( const signed char * const ) "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) 0, tskIDLE_PRIORITY, NULL ); + xTaskCreate( vRegisterTest2, ( const signed char * const ) "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) 0, tskIDLE_PRIORITY, NULL ); + + /* Create the standard demo tasks. */ + vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); + vCreateBlockTimeTasks(); + vStartSemaphoreTasks( mainSEM_TEST_PRIORITY ); + vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); + vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); + vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY ); + vStartQueuePeekTasks(); + vStartRecursiveMutexTasks(); + vStartComTestStringsTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED ); + vStartDynamicPriorityTasks(); + vStartTimerDemoTask( mainTIMER_TEST_PERIOD ); + + /* Note - the set of standard demo tasks contains two versions of + vStartMathTasks.c. One is defined in flop.c, and uses double precision + floating point numbers and variables. The other is defined in sp_flop.c, + and uses single precision floating point numbers and variables. The + MicroBlaze floating point unit only handles single precision floating. + Therefore, to test the floating point hardware, sp_flop.c should be included + in this project. */ + vStartMathTasks( mainFLOP_TASK_PRIORITY ); + + /* The suicide tasks must be created last as they need to know how many + tasks were running prior to their creation. This then allows them to + ascertain whether or not the correct/expected number of tasks are running at + any given time. */ + vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY ); + + /* Create the 'check' timer - the timer that periodically calls the + check function as described in the comments at the top of this file. Note + that, for reasons stated in the comments within vApplicationIdleHook() + (defined in this file), the check timer is not actually started until after + the scheduler has been started. */ + xCheckTimer = xTimerCreate( ( const signed char * ) "Check timer", mainNO_ERROR_CHECK_TIMER_PERIOD, pdTRUE, ( void * ) 0, vCheckTimerCallback ); + + /* Start the scheduler running. From this point on, only tasks and + interrupts will be executing. */ + vTaskStartScheduler(); + + /* If all is well then the following line will never be reached. If + execution does reach here, then it is highly probably that the heap size + is too small for the idle and/or timer tasks to be created within + vTaskStartScheduler(). */ + taskDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +static void vCheckTimerCallback( xTimerHandle xTimer ) +{ +extern unsigned long ulRegTest1CycleCount, ulRegTest2CycleCount; +static volatile unsigned long ulLastRegTest1CycleCount = 0UL, ulLastRegTest2CycleCount = 0UL; +static long lErrorAlreadyLatched = pdFALSE; +portTickType xExecutionRate = mainNO_ERROR_CHECK_TIMER_PERIOD; + + /* This is the callback function used by the 'check' timer, as described + in the comments at the top of this file. */ + + /* Check the standard demo tasks are running without error. */ + if( xAreGenericQueueTasksStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: GenQueue"; + } + else if( xAreQueuePeekTasksStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: QueuePeek\r\n"; + } + else if( xAreBlockingQueuesStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: BlockQueue\r\n"; + } + else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: BlockTime\r\n"; + } + else if( xAreSemaphoreTasksStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: SemTest\r\n"; + } + else if( xArePollingQueuesStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: PollQueue\r\n"; + } + else if( xIsCreateTaskStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: Death\r\n"; + } + else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE ) + { + pcStatusMessage = "Error: RecMutex\r\n"; + } + else if( xAreMathsTaskStillRunning() != pdPASS ) + { + pcStatusMessage = "Error: Flop\r\n"; + } + else if( xAreComTestTasksStillRunning() != pdPASS ) + { + pcStatusMessage = "Error: Comtest\r\n"; + } + else if( xAreDynamicPriorityTasksStillRunning() != pdPASS ) + { + pcStatusMessage = "Error: Dynamic\r\n"; + } + else if( xAreTimerDemoTasksStillRunning( xExecutionRate ) != pdTRUE ) + { + pcStatusMessage = "Error: TimerDemo"; + } + else if( ulRegTest1CycleCount == ulLastRegTest1CycleCount ) + { + /* Check the reg test tasks are still cycling. They will stop + incrementing their loop counters if they encounter an error. */ + pcStatusMessage = "Error: RegTest1\r\n"; + } + else if( ulRegTest2CycleCount == ulLastRegTest2CycleCount ) + { + pcStatusMessage = "Error: RegTest2\r\n"; + } + + /* Store a local copy of the current reg test loop counters. If these have + not incremented the next time this callback function is executed then the + reg test tasks have either stalled or discovered an error. */ + ulLastRegTest1CycleCount = ulRegTest1CycleCount; + ulLastRegTest2CycleCount = ulRegTest2CycleCount; + + /* Toggle the check LED to give an indication of the system status. If + the LED toggles every 5 seconds then everything is ok. A faster toggle + indicates an error. */ + vParTestToggleLED( mainCHECK_LED ); + + if( pcStatusMessage != NULL ) + { + if( lErrorAlreadyLatched == pdFALSE ) + { + /* An error has occurred, so change the period of the timer that + calls this callback function. This results in the LED toggling at + a faster rate - giving the user visual feedback that something is not + as it should be. This function is called from the context of the + timer service task so must ***not*** attempt to block while calling + this function. */ + if( xTimerChangePeriod( xTimer, mainERROR_CHECK_TIMER_PERIOD, mainDONT_BLOCK ) == pdPASS ) + { + /* If the command to change the timer period was sent to the + timer command queue successfully, then latch the fact that the + timer period has already been changed. This is just done to + prevent xTimerChangePeriod() being called on every execution of + this function once an error has been discovered. */ + lErrorAlreadyLatched = pdTRUE; + } + + /* Update the xExecutionRate variable too as the rate at which this + callback is executed has to be passed into the + xAreTimerDemoTasksStillRunning() function. */ + xExecutionRate = mainERROR_CHECK_TIMER_PERIOD; + } + } +} +/*-----------------------------------------------------------*/ + +/* This is an application defined callback function used to install the tick +interrupt handler. It is provided as an application callback because the kernel +will run on lots of different MicroBlaze and FPGA configurations - not all of +which will have the same timer peripherals defined or available. This example +uses the AXI Timer 0. If that is available on your hardware platform then this +example callback implementation should not require modification. The name of +the interrupt handler that should be installed is vPortTickISR(), which the +function below declares as an extern. */ +void vApplicationSetupTimerInterrupt( void ) +{ +portBASE_TYPE xStatus; +const unsigned char ucTimerCounterNumber = ( unsigned char ) 0U; +const unsigned long ulCounterValue = ( ( XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ / configTICK_RATE_HZ ) - 1UL ); +extern void vPortTickISR( void *pvUnused ); + + /* Initialise the timer/counter. */ + xStatus = XTmrCtr_Initialize( &xTimer0Instance, XPAR_AXI_TIMER_0_DEVICE_ID ); + + if( xStatus == XST_SUCCESS ) + { + /* Install the tick interrupt handler as the timer ISR. + *NOTE* The xPortInstallInterruptHandler() API function must be used for + this purpose. */ + xStatus = xPortInstallInterruptHandler( XPAR_INTC_0_TMRCTR_0_VEC_ID, vPortTickISR, NULL ); + } + + if( xStatus == pdPASS ) + { + /* Enable the timer interrupt in the interrupt controller. + *NOTE* The vPortEnableInterrupt() API function must be used for this + purpose. */ + vPortEnableInterrupt( XPAR_INTC_0_TMRCTR_0_VEC_ID ); + + /* Configure the timer interrupt handler. */ + XTmrCtr_SetHandler( &xTimer0Instance, ( void * ) vPortTickISR, NULL ); + + /* Set the correct period for the timer. */ + XTmrCtr_SetResetValue( &xTimer0Instance, ucTimerCounterNumber, ulCounterValue ); + + /* Enable the interrupts. Auto-reload mode is used to generate a + periodic tick. Note that interrupts are disabled when this function is + called, so interrupts will not start to be processed until the first + task has started to run. */ + XTmrCtr_SetOptions( &xTimer0Instance, ucTimerCounterNumber, ( XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION ) ); + + /* Start the timer. */ + XTmrCtr_Start( &xTimer0Instance, ucTimerCounterNumber ); + } + + /* Sanity check that the function executed as expected. */ + configASSERT( ( xStatus == pdPASS ) ); +} +/*-----------------------------------------------------------*/ + +/* This is an application defined callback function used to clear whichever +interrupt was installed by the the vApplicationSetupTimerInterrupt() callback +function - in this case the interrupt generated by the AXI timer. It is +provided as an application callback because the kernel will run on lots of +different MicroBlaze and FPGA configurations - not all of which will have the +same timer peripherals defined or available. This example uses the AXI Timer 0. +If that is available on your hardware platform then this example callback +implementation should not require modification provided the example definition +of vApplicationSetupTimerInterrupt() is also not modified. */ +void vApplicationClearTimerInterrupt( void ) +{ +unsigned long ulCSR; + + /* Clear the timer interrupt */ + ulCSR = XTmrCtr_GetControlStatusReg( XPAR_AXI_TIMER_0_BASEADDR, 0 ); + XTmrCtr_SetControlStatusReg( XPAR_AXI_TIMER_0_BASEADDR, 0, ulCSR ); +} +/*-----------------------------------------------------------*/ + +void vApplicationMallocFailedHook( void ) +{ + /* vApplicationMallocFailedHook() will only be called if + configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook + function that will get called if a call to pvPortMalloc() fails. + pvPortMalloc() is called internally by the kernel whenever a task, queue or + semaphore is created. It is also called by various parts of the demo + application. If heap_1.c or heap_2.c are used, then the size of the heap + available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in + FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used + to query the size of free heap space that remains (although it does not + provide information on how the remaining heap might be fragmented). */ + taskDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ) +{ + ( void ) pcTaskName; + ( void ) pxTask; + + /* vApplicationStackOverflowHook() will only be called if + configCHECK_FOR_STACK_OVERFLOW is set to either 1 or 2. The handle and name + of the offending task will be passed into the hook function via its + parameters. However, when a stack has overflowed, it is possible that the + parameters will have been corrupted, in which case the pxCurrentTCB variable + can be inspected directly. */ + taskDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +void vApplicationIdleHook( void ) +{ +static long lCheckTimerStarted = pdFALSE; + + /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set + to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle + task. It is essential that code added to this hook function never attempts + to block in any way (for example, call xQueueReceive() with a block time + specified, or call vTaskDelay()). If the application makes use of the + vTaskDelete() API function (as this demo application does) then it is also + important that vApplicationIdleHook() is permitted to return to its calling + function, because it is the responsibility of the idle task to clean up + memory allocated by the kernel to any task that has since been deleted. */ + + /* If the check timer has not already been started, then start it now. + Normally, the xTimerStart() API function can be called immediately after the + timer is created - how this demo application includes the timer demo tasks. + The timer demo tasks, as part of their test function, deliberately fill up + the timer command queue - meaning the check timer cannot be started until + after the scheduler has been started - at which point the timer command + queue will have been drained. */ + if( lCheckTimerStarted == pdFALSE ) + { + xTimerStart( xCheckTimer, mainDONT_BLOCK ); + lCheckTimerStarted = pdTRUE; + } +} +/*-----------------------------------------------------------*/ + +void vApplicationTickHook( void ) +{ + /* vApplicationTickHook() will only be called if configUSE_TICK_HOOK is set + to 1 in FreeRTOSConfig.h. It executes from an interrupt context so must + not use any FreeRTOS API functions that do not end in ...FromISR(). */ + + /* Call the periodic timer test, which tests the timer API functions that + can be called from an ISR. */ + vTimerPeriodicISRTests(); +} +/*-----------------------------------------------------------*/ + +void vApplicationExceptionRegisterDump( xPortRegisterDump *xRegisterDump ) +{ + ( void ) xRegisterDump; + + /* If configINSTALL_EXCEPTION_HANDLERS is set to 1 in FreeRTOSConfig.h, then + the kernel will automatically install its own exception handlers before the + kernel is started, if the application writer has not already caused them to + be installed by calling either of the vPortExceptionsInstallHandlers() + or xPortInstallInterruptHandler() API functions before that time. The + kernels exception handler populates an xPortRegisterDump structure with + the processor state at the point that the exception was triggered - and also + includes a strings that say what the exception cause was and which task was + running at the time. The exception handler then passes the populated + xPortRegisterDump structure into vApplicationExceptionRegisterDump() to + allow the application writer to perform any debugging that may be necessary. + However, defining vApplicationExceptionRegisterDump() within the application + itself is optional. The kernel will use a default implementation if the + application writer chooses not to provide their own. */ + for( ;; ) + { + portNOP(); + } +} +/*-----------------------------------------------------------*/ + +static void prvSetupHardware( void ) +{ + taskDISABLE_INTERRUPTS(); + + /* Configure the LED outputs. */ + vParTestInitialise(); + + /* Tasks inherit the exception and cache configuration of the MicroBlaze + at the point that they are created. */ + #if MICROBLAZE_EXCEPTIONS_ENABLED == 1 + microblaze_enable_exceptions(); + #endif + + #if XPAR_MICROBLAZE_USE_ICACHE == 1 + microblaze_invalidate_icache(); + microblaze_enable_icache(); + #endif + + #if XPAR_MICROBLAZE_USE_DCACHE == 1 + microblaze_invalidate_dcache(); + microblaze_enable_dcache(); + #endif + +} +/*-----------------------------------------------------------*/ + +void vMainConfigureTimerForRunTimeStats( void ) +{ +unsigned long ulRunTimeStatsDivisor; + + /* How many times does the counter counter increment in 10ms? */ + ulRunTimeStatsDivisor = 0UL / 1000UL; //_RB_ +} +/*-----------------------------------------------------------*/ + +unsigned long ulMainGetRunTimeCounterValue( void ) +{ +unsigned long ulReturn, ulCurrentCount; + + ulCurrentCount = 0UL; + ulReturn = 0UL; + + return ulReturn; +} +/*-----------------------------------------------------------*/ + +char *pcMainGetTaskStatusMessage( void ) +{ + return ( char * ) pcStatusMessage; +} + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/serial.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/serial.c new file mode 100644 index 000000000..f32e40a93 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/serial.c @@ -0,0 +1,209 @@ +/* + FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd. + + + *************************************************************************** + * * + * FreeRTOS tutorial books are available in pdf and paperback. * + * Complete, revised, and edited pdf reference manuals are also * + * available. * + * * + * Purchasing FreeRTOS documentation will not only help you, by * + * ensuring you get running as quickly as possible and with an * + * in-depth knowledge of how to use FreeRTOS, it will also help * + * the FreeRTOS project to continue with its mission of providing * + * professional grade, cross platform, de facto standard solutions * + * for microcontrollers - completely free of charge! * + * * + * >>> See http://www.FreeRTOS.org/Documentation for details. <<< * + * * + * Thank you for using FreeRTOS, and thank you for your support! * + * * + *************************************************************************** + + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + >>>NOTE<<< The modification to the GPL is included to allow you to + distribute a combined work that includes FreeRTOS without being obliged to + provide the source code for proprietary components outside of the FreeRTOS + kernel. FreeRTOS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* + BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR a UARTLite peripheral. +*/ + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "queue.h" +#include "comtest_strings.h" + +/* Library includes. */ +#include "xuartlite.h" +#include "xuartlite_l.h" + +/* Demo application includes. */ +#include "serial.h" + +/*-----------------------------------------------------------*/ + +/* Functions that are installed as the handler for interrupts that are caused by +Rx and Tx events respectively. */ +static void prvRxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount ); +static void prvTxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount ); + +/* Structure that hold the state of the UARTLite peripheral used by this demo. +This is used by the Xilinx peripheral driver API functions. */ +static XUartLite xUartLiteInstance; + +/* The queue used to hold received characters. */ +static xQueueHandle xRxedChars; + +/*-----------------------------------------------------------*/ + +xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength ) +{ +portBASE_TYPE xStatus; + + /* The standard demo header file requires a baud rate to be passed into this + function. However, in this case the baud rate is configured when the + hardware is generated, leaving the ulWantedBaud parameter redundant. */ + ( void ) ulWantedBaud; + + /* Create the queue used to hold Rx characters. */ + xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed char ) ); + + /* If the queue was created correctly, then setup the serial port + hardware. */ + if( xRxedChars != NULL ) + { + xStatus = XUartLite_Initialize( &xUartLiteInstance, XPAR_UARTLITE_1_DEVICE_ID ); + + if( xStatus == XST_SUCCESS ) + { + /* Complete initialisation of the UART and its associated + interrupts. */ + XUartLite_ResetFifos( &xUartLiteInstance ); + + /* Install the handlers that the standard Xilinx library interrupt + service routine will call when Rx and Tx events occur + respectively. */ + XUartLite_SetRecvHandler( &xUartLiteInstance, ( XUartLite_Handler ) prvRxHandler, NULL ); + XUartLite_SetSendHandler( &xUartLiteInstance, ( XUartLite_Handler ) prvTxHandler, NULL ); + + /* Install the standard Xilinx library interrupt handler itself. + *NOTE* The xPortInstallInterruptHandler() API function must be used + for this purpose. */ + xStatus = xPortInstallInterruptHandler( XPAR_INTC_0_UARTLITE_1_VEC_ID, ( XInterruptHandler ) XUartLite_InterruptHandler, &xUartLiteInstance ); + + /* Enable the interrupt in the peripheral. */ + XUartLite_EnableIntr( xUartLiteInstance.RegBaseAddress ); + + /* Enable the interrupt in the interrupt controller. + *NOTE* The vPortEnableInterrupt() API function must be used for this + purpose. */ + vPortEnableInterrupt( XPAR_INTC_0_UARTLITE_1_VEC_ID ); + } + + configASSERT( xStatus == pdPASS ); + } + + /* This demo file only supports a single port but something must be + returned to comply with the standard demo header file. */ + return ( xComPortHandle ) 0; +} +/*-----------------------------------------------------------*/ + +portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime ) +{ + /* The port handle is not required as this driver only supports one port. */ + ( void ) pxPort; + + /* Get the next character from the receive queue. Return false if no + characters are available, or arrive before xBlockTime expires. */ + if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) ) + { + return pdTRUE; + } + else + { + return pdFALSE; + } +} +/*-----------------------------------------------------------*/ + +void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength ) +{ + ( void ) pxPort; + + /* Output uxStringLength bytes starting from pcString. */ + XUartLite_Send( &xUartLiteInstance, ( unsigned char * ) pcString, usStringLength ); +} +/*-----------------------------------------------------------*/ + +static void prvRxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount ) +{ +signed char cRxedChar; +portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + ( void ) pvUnused; + ( void ) uxByteCount; + + /* Place any received characters into the receive queue. */ + while( XUartLite_IsReceiveEmpty( xUartLiteInstance.RegBaseAddress ) == pdFALSE ) + { + cRxedChar = XUartLite_ReadReg( xUartLiteInstance.RegBaseAddress, XUL_RX_FIFO_OFFSET); + xQueueSendFromISR( xRxedChars, &cRxedChar, &xHigherPriorityTaskWoken ); + } + + /* If calling xQueueSendFromISR() caused a task to unblock, and the task + that unblocked has a priority equal to or greater than the task currently + in the Running state (the task that was interrupted), then + xHigherPriorityTaskWoken will have been set to pdTRUE internally within the + xQueueSendFromISR() API function. If xHigherPriorityTaskWoken is equal to + pdTRUE then a context switch should be requested to ensure that the + interrupt returns to the highest priority task that is able to run. */ + portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); +} +/*-----------------------------------------------------------*/ + +static void prvTxHandler( void *pvUnused, unsigned portBASE_TYPE uxByteCount ) +{ + ( void ) pvUnused; + ( void ) uxByteCount; + + /* Nothing to do here. The Xilinx library function takes care of the + transmission. */ + portNOP(); +} + + + + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_header.h new file mode 100644 index 000000000..ca11dd5bb --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_header.h @@ -0,0 +1,56 @@ +#define TESTAPP_GEN + +/* $Id: emaclite_header.h,v 1.1.2.2 2010/09/16 12:57:34 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2003-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef EMACLITE_HEADER_H /* prevent circular inclusions */ +#define EMACLITE_HEADER_H /* by using protection macros */ + + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + +int EmacLitePolledExample(u16 DeviceId); + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_intr_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_intr_header.h new file mode 100644 index 000000000..90ff393ed --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/emaclite_intr_header.h @@ -0,0 +1,57 @@ +#define TESTAPP_GEN + +/* $Id: emaclite_intr_header.h,v 1.1.2.2 2010/09/16 12:57:34 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2003-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef EMACLITE_INTR_HEADER_H /* prevent circular inclusions */ +#define EMACLITE_INTR_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + +int EmacLiteIntrExample(XIntc* IntcInstancePtr, + XEmacLite* EmacLiteInstPtr, + u16 EmacLiteDeviceId, + u16 EmacLiteIntrId); + +#endif + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_header.h new file mode 100644 index 000000000..2ff58eca8 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_header.h @@ -0,0 +1,56 @@ +#define TESTAPP_GEN + +/* $Id: gpio_header.h,v 1.1.2.2 2010/09/16 13:03:37 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2003-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef GPIO_HEADER_H /* prevent circular inclusions */ +#define GPIO_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + +int GpioOutputExample(u16 DeviceId, u32 GpioWidth); +int GpioInputExample(u16 DeviceId, u32 *DataRead); + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_intr_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_intr_header.h new file mode 100644 index 000000000..d7dbffeff --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/gpio_intr_header.h @@ -0,0 +1,62 @@ +#define TESTAPP_GEN + +/* $Id: gpio_intr_header.h,v 1.1.2.2 2010/09/16 13:03:37 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2005-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef GPIO_INTR_HEADER_H /* prevent circular inclusions */ +#define GPIO_INTR_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + + +int GpioIntrExample(XIntc* IntcInstancePtr, + XGpio* InstancePtr, + u16 DeviceId, + u16 IntrId, + u16 IntrMask, + u32 *DataRead); + + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/intc_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/intc_header.h new file mode 100644 index 000000000..eface144e --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/intc_header.h @@ -0,0 +1,55 @@ +#define TESTAPP_GEN + +/* $Id: intc_header.h,v 1.1.4.1 2010/09/17 05:32:46 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2006-2009 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef INTC_HEADER_H /* prevent circular inclusions */ +#define INTC_HEADER_H /* by using protection macros */ + +#include "xil_assert.h" +#include "xil_types.h" +#include "xstatus.h" + +int IntcSelfTestExample(u16 DeviceId); +int IntcInterruptSetup(XIntc *IntcInstancePtr, u16 DeviceId); + +#endif + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/lscript.ld b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/lscript.ld new file mode 100644 index 000000000..c076755fb --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/lscript.ld @@ -0,0 +1,213 @@ +/*******************************************************************/ +/* */ +/* This file is automatically generated by linker script generator.*/ +/* */ +/* Version: Xilinx EDK 13.1 EDK_O.40d */ +/* */ +/* Copyright (c) 2010 Xilinx, Inc. All rights reserved. */ +/* */ +/* Description : MicroBlaze Linker Script */ +/* */ +/*******************************************************************/ + +_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400; +_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x8; + +/* Define Memories in the system */ + +MEMORY +{ + microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl : ORIGIN = 0x00000050, LENGTH = 0x00001FB0 + MCB_DDR3_S0_AXI_BASEADDR : ORIGIN = 0xC0000000, LENGTH = 0x08000000 +} + +/* Specify the default entry point to the program */ + +ENTRY(_start) + +/* Define the sections, and where they are mapped in memory */ + +SECTIONS +{ +.vectors.reset 0x00000000 : { + *(.vectors.reset) +} + +.vectors.sw_exception 0x00000008 : { + *(.vectors.sw_exception) +} + +.vectors.interrupt 0x00000010 : { + *(.vectors.interrupt) +} + +.vectors.hw_exception 0x00000020 : { + *(.vectors.hw_exception) +} + +.text : { + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) +} > MCB_DDR3_S0_AXI_BASEADDR + +.init : { + KEEP (*(.init)) +} > MCB_DDR3_S0_AXI_BASEADDR + +.fini : { + KEEP (*(.fini)) +} > MCB_DDR3_S0_AXI_BASEADDR + +.rodata : { + __rodata_start = .; + *(.rodata) + *(.rodata.*) + *(.gnu.linkonce.r.*) + __rodata_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.sdata2 : { + . = ALIGN(8); + __sdata2_start = .; + *(.sdata2) + *(.sdata2.*) + *(.gnu.linkonce.s2.*) + . = ALIGN(8); + __sdata2_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.sbss2 : { + __sbss2_start = .; + *(.sbss2) + *(.sbss2.*) + *(.gnu.linkonce.sb2.*) + __sbss2_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.data : { + . = ALIGN(4); + __data_start = .; + *(.data) + *(.data.*) + *(.gnu.linkonce.d.*) + __data_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.got : { + *(.got) +} > MCB_DDR3_S0_AXI_BASEADDR + +.got1 : { + *(.got1) +} > MCB_DDR3_S0_AXI_BASEADDR + +.got2 : { + *(.got2) +} > MCB_DDR3_S0_AXI_BASEADDR + +.ctors : { + __CTOR_LIST__ = .; + ___CTORS_LIST___ = .; + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __CTOR_END__ = .; + ___CTORS_END___ = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.dtors : { + __DTOR_LIST__ = .; + ___DTORS_LIST___ = .; + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __DTOR_END__ = .; + ___DTORS_END___ = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.eh_frame : { + *(.eh_frame) +} > MCB_DDR3_S0_AXI_BASEADDR + +.jcr : { + *(.jcr) +} > MCB_DDR3_S0_AXI_BASEADDR + +.gcc_except_table : { + *(.gcc_except_table) +} > MCB_DDR3_S0_AXI_BASEADDR + +.sdata : { + . = ALIGN(8); + __sdata_start = .; + *(.sdata) + *(.sdata.*) + *(.gnu.linkonce.s.*) + __sdata_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.sbss : { + . = ALIGN(4); + __sbss_start = .; + *(.sbss) + *(.sbss.*) + *(.gnu.linkonce.sb.*) + . = ALIGN(8); + __sbss_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.tdata : { + __tdata_start = .; + *(.tdata) + *(.tdata.*) + *(.gnu.linkonce.td.*) + __tdata_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.tbss : { + __tbss_start = .; + *(.tbss) + *(.tbss.*) + *(.gnu.linkonce.tb.*) + __tbss_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.bss : { + . = ALIGN(4); + __bss_start = .; + *(.bss) + *(.bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + __bss_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +_SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 ); + +_SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 ); + +/* Generate Stack and Heap definitions */ + +.heap : { + . = ALIGN(8); + _heap = .; + _heap_start = .; + . += _HEAP_SIZE; + _heap_end = .; +} > MCB_DDR3_S0_AXI_BASEADDR + +.stack : { + _stack_end = .; + . += _STACK_SIZE; + . = ALIGN(8); + _stack = .; + __stack = _stack; +} > MCB_DDR3_S0_AXI_BASEADDR + +_end = .; +} + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/testperiph.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/testperiph.c new file mode 100644 index 000000000..d18632d9a --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/testperiph.c @@ -0,0 +1,246 @@ +/* + * + * Xilinx, Inc. + * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A + * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS + * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR + * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION + * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE + * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION + * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO + * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO + * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE + * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* + * + * + * This file is a generated sample test application. + * + * This application is intended to test and/or illustrate some + * functionality of your system. The contents of this file may + * vary depending on the IP in your system and may use existing + * IP driver functions. These drivers will be generated in your + * SDK application project when you run the "Generate Libraries" menu item. + * + */ + + +#include +#include "xparameters.h" +#include "xenv_standalone.h" +#include "xintc.h" +#include "intc_header.h" +#include "xbasic_types.h" +#include "xgpio.h" +#include "gpio_header.h" +#include "xbasic_types.h" +#include "xgpio.h" +#include "gpio_header.h" +#include "gpio_intr_header.h" +#include "uartlite_header.h" +#include "xtmrctr.h" +#include "tmrctr_header.h" +#include "tmrctr_intr_header.h" +#include "xemaclite.h" +#include "xemaclite_example.h" +#include "emaclite_header.h" +#include "emaclite_intr_header.h" + + +#define GPIO_CHANNEL1 1 + +int xmain() +{ + + static XIntc intc; + static XGpio Push_Buttons_4Bits_Gpio; + static XTmrCtr axi_timer_0_Timer; + static XEmacLite Ethernet_Lite_EmacLite; + + XCACHE_ENABLE_ICACHE(); + XCACHE_ENABLE_DCACHE(); + + print("---Entering main---\n\r"); + + + + { + int status; + + print("\r\n Running IntcSelfTestExample() for microblaze_0_intc...\r\n"); + + status = IntcSelfTestExample(XPAR_MICROBLAZE_0_INTC_DEVICE_ID); + + if (status == 0) { + print("IntcSelfTestExample PASSED\r\n"); + } + else { + print("IntcSelfTestExample FAILED\r\n"); + } + } + + { + int Status; + + Status = IntcInterruptSetup(&intc, XPAR_MICROBLAZE_0_INTC_DEVICE_ID); + if (Status == 0) { + print("Intc Interrupt Setup PASSED\r\n"); + } + else { + print("Intc Interrupt Setup FAILED\r\n"); + } + } + + + { + u32 status; + + print("\r\nRunning GpioOutputExample() for LEDs_4Bits...\r\n"); + + status = GpioOutputExample(XPAR_LEDS_4BITS_DEVICE_ID,4); + + if (status == 0) { + print("GpioOutputExample PASSED.\r\n"); + } + else { + print("GpioOutputExample FAILED.\r\n"); + } + } + + + { + u32 status; + + print("\r\nRunning GpioInputExample() for Push_Buttons_4Bits...\r\n"); + + u32 DataRead; + + status = GpioInputExample(XPAR_PUSH_BUTTONS_4BITS_DEVICE_ID, &DataRead); + + if (status == 0) { + xil_printf("GpioInputExample PASSED. Read data:0x%X\r\n", DataRead); + } + else { + print("GpioInputExample FAILED.\r\n"); + } + } + { + + int Status; + + u32 DataRead; + + print(" Press button to Generate Interrupt\r\n"); + + Status = GpioIntrExample(&intc, &Push_Buttons_4Bits_Gpio, \ + XPAR_PUSH_BUTTONS_4BITS_DEVICE_ID, \ + XPAR_MICROBLAZE_0_INTC_PUSH_BUTTONS_4BITS_IP2INTC_IRPT_INTR, \ + GPIO_CHANNEL1, &DataRead); + + if (Status == 0 ){ + if(DataRead == 0) + print("No button pressed. \r\n"); + else + print("Gpio Interrupt Test PASSED. \r\n"); + } + else { + print("Gpio Interrupt Test FAILED.\r\n"); + } + + } + + /* + * Peripheral SelfTest will not be run for RS232_Uart_1 + * because it has been selected as the STDOUT device + */ + + + + { + int status; + + print("\r\nRunning UartLiteSelfTestExample() for debug_module...\r\n"); + status = UartLiteSelfTestExample(XPAR_DEBUG_MODULE_DEVICE_ID); + if (status == 0) { + print("UartLiteSelfTestExample PASSED\r\n"); + } + else { + print("UartLiteSelfTestExample FAILED\r\n"); + } + } + + + { + int status; + + print("\r\n Running TmrCtrSelfTestExample() for axi_timer_0...\r\n"); + + status = TmrCtrSelfTestExample(XPAR_AXI_TIMER_0_DEVICE_ID, 0x0); + + if (status == 0) { + print("TmrCtrSelfTestExample PASSED\r\n"); + } + else { + print("TmrCtrSelfTestExample FAILED\r\n"); + } + } + { + int Status; + + print("\r\n Running Interrupt Test for axi_timer_0...\r\n"); + + Status = TmrCtrIntrExample(&intc, &axi_timer_0_Timer, \ + XPAR_AXI_TIMER_0_DEVICE_ID, \ + XPAR_MICROBLAZE_0_INTC_AXI_TIMER_0_INTERRUPT_INTR, 0); + + if (Status == 0) { + print("Timer Interrupt Test PASSED\r\n"); + } + else { + print("Timer Interrupt Test FAILED\r\n"); + } + + } + + + { + int status; + + print("\r\nRunning EmacLitePolledExample() for Ethernet_Lite...\r\n"); + status = EmacLitePolledExample(XPAR_ETHERNET_LITE_DEVICE_ID); + if (status == 0) { + print("EmacLite Polled Example PASSED\r\n"); + } + else { + print("EmacLite Polled Example FAILED\r\n"); + } + } + { + int Status; + + print("\r\n Running Interrupt Test for Ethernet_Lite...\r\n"); + + Status = EmacLiteIntrExample(&intc, &Ethernet_Lite_EmacLite, \ + XPAR_ETHERNET_LITE_DEVICE_ID, \ + XPAR_MICROBLAZE_0_INTC_ETHERNET_LITE_IP2INTC_IRPT_INTR); + + if (Status == 0) { + print("EmacLite Interrupt Test PASSED\r\n"); + } + else { + print("EmacLite Interrupt Test FAILED\r\n"); + } + + } + + print("---Exiting main---\n\r"); + + XCACHE_DISABLE_ICACHE(); + XCACHE_DISABLE_DCACHE(); + + return 0; +} + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_header.h new file mode 100644 index 000000000..f8c5f5f96 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_header.h @@ -0,0 +1,55 @@ +#define TESTAPP_GEN + +/* $Id: tmrctr_header.h,v 1.1.2.1 2010/12/01 07:53:56 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2005-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef TMRCTR_HEADER_H /* prevent circular inclusions */ +#define TMRCTR_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + +int TmrCtrSelfTestExample(u16 DeviceId, u8 TmrCtrNumber); + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_intr_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_intr_header.h new file mode 100644 index 000000000..8beef56c5 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/tmrctr_intr_header.h @@ -0,0 +1,60 @@ +#define TESTAPP_GEN + +/* $Id: tmrctr_intr_header.h,v 1.1.2.1 2010/12/01 07:53:56 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2005-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef TMRCTR_INTR_HEADER_H /* prevent circular inclusions */ +#define TMRCTR_INTR_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + + +int TmrCtrIntrExample(XIntc* IntcInstancePtr, + XTmrCtr* InstancePtr, + u16 DeviceId, + u16 IntrId, + u8 TmrCtrNumber); + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/uartlite_header.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/uartlite_header.h new file mode 100644 index 000000000..422602e57 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/uartlite_header.h @@ -0,0 +1,55 @@ +#define TESTAPP_GEN + +/* $Id: uartlite_header.h,v 1.1.2.2 2010/09/16 12:12:57 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2006-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +#ifndef UARTLITE_HEADER_H /* prevent circular inclusions */ +#define UARTLITE_HEADER_H /* by using protection macros */ + +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" + +int UartLiteSelfTestExample(u16 DeviceId); + +#endif + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example.h b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example.h new file mode 100644 index 000000000..8326c34bb --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example.h @@ -0,0 +1,135 @@ +#define TESTAPP_GEN + +/* $Id: xemaclite_example.h,v 1.1.2.1 2010/07/12 08:34:24 svemula Exp $ +*/ +/****************************************************************************** +* +* (c) Copyright 2009 - 2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* +* @file xemaclite_example.h +* +* Defines common data types, prototypes, and includes the proper headers +* for use with the EmacLite example code residing in this directory. +* +* This file along with xemaclite_example_util.c are utilized with the specific +* example code in the other source code files provided. +* +* These examples are designed to be compiled and utilized within the EDK +* standalone BSP development environment. The readme file contains more +* information on build requirements needed by these examples. +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date     Changes
+* ----- ---- -------- -------------------------------------------------------
+* 2.00a ktn  04/13/09 First release
+* 
+* +******************************************************************************/ +#ifndef XEMACLITE_EXAMPLE_H +#define XEMACLITE_EXAMPLE_H + +/***************************** Include Files *********************************/ + +#include "xparameters.h" +#include "xemaclite.h" + +/************************** Constant Definitions ****************************/ + +#define PHY_REG0_OFFSET 0 /* Register 0 of PHY device */ +#define PHY_REG1_OFFSET 1 /* Register 1 of PHY device */ + +#define PHY_REG0_RESET_MASK 0x8000 /* Reset Phy device */ +#define PHY_REG0_LOOPBACK_MASK 0x4000 /* Loopback Enable in Phy */ +#define PHY_REG0_SPD_100_MASK 0x2000 /* Speed of 100Mbps for Phy */ + +#define PHY_REG1_DETECT_MASK 0x1808 /* Mask to detect PHY device */ + +#define EMACLITE_PHY_DELAY_SEC 4 /* Amount of time to delay waiting on + * PHY to reset. + */ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. + */ +#define EMAC_DEVICE_ID XPAR_EMACLITE_0_DEVICE_ID + +/***************** Macros (Inline Functions) Definitions *********************/ + +/**************************** Type Definitions ******************************/ + +/************************** Function Prototypes *****************************/ + +/* + * Utility functions implemented in xemaclite_example_util.c + */ +void EmacLitePhyDelay(unsigned int Seconds); +u32 EmacLitePhyDetect(XEmacLite *InstancePtr); +int EmacLiteEnablePhyLoopBack(XEmacLite *InstancePtr, u32 PhyAddress); +int EmacLiteDisablePhyLoopBack(XEmacLite *InstancePtr, u32 PhyAddress); + +/************************** Variable Definitions ****************************/ +/* + * Set up valid local MAC addresses. This loop back test uses the LocalAddress + * both as a source and destination MAC address. + */ + +XEmacLite EmacLiteInstance; /* Instance of the EmacLite */ + +/* + * Buffers used for Transmission and Reception of Packets. These are declared + * as global so that they are not a part of the stack. + */ +u8 TxFrame[XEL_MAX_FRAME_SIZE]; +u8 RxFrame[XEL_MAX_FRAME_SIZE]; + +volatile u32 RecvFrameLength; /* Indicates the length of the Received packet + */ +volatile int TransmitComplete; /* Flag to indicate that the Transmission + * is complete + */ +#endif /* XTEMAC_EXAMPLE_H */ + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example_util.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example_util.c new file mode 100644 index 000000000..c85d7ef03 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_example_util.c @@ -0,0 +1,265 @@ +#define TESTAPP_GEN + +/* $Id: xemaclite_example_util.c,v 1.1.2.1 2010/07/12 08:34:25 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2009-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* +* @file xemaclite_example_util.c +* +* This file implements the utility functions for the EmacLite example code. +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date     Changes
+* ----- ---- -------- -------------------------------------------------------
+* 2.00a  ktn 04/13/09 First release
+* 2.00a  ktn 06/13/09 Changed the EmacLitePhyDetect function so that
+*		      the function is not in an infinite loop in case of a
+*		      faulty Phy device.
+* 
+* +******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xemaclite_example.h" +#include "stdio.h" + +/************************** Variable Definitions ****************************/ + +/******************************************************************************/ +/** +* +* This function detects the PHY address by looking for successful MII status +* register contents (PHY register 1). It looks for a PHY that supports +* auto-negotiation and 10Mbps full-duplex and half-duplex. So, this code +* won't work for PHYs that don't support those features, but it's a bit more +* general purpose than matching a specific PHY manufacturer ID. +* +* Note also that on some (older) Xilinx ML4xx boards, PHY address 0 does not +* properly respond to this query. But, since the default is 0 and assuming +* no other address responds, then it seems to work OK. +* +* @param InstancePtr is the pointer to the instance of EmacLite driver. +* +* @return The address of the PHY device detected (returns 0 if not +* detected). +* +* @note +* The bit mask (0x1808) of the MII status register +* (PHY Register 1) used in this function are: +* 0x1000: 10Mbps full duplex support. +* 0x0800: 10Mbps half duplex support. +* 0x0008: Auto-negotiation support. +* +******************************************************************************/ +u32 EmacLitePhyDetect(XEmacLite *InstancePtr) +{ + u16 PhyData; + int PhyAddr; + + /* + * Verify all 32 MDIO ports. + */ + for (PhyAddr = 31; PhyAddr >= 0; PhyAddr--) { + XEmacLite_PhyRead(InstancePtr, PhyAddr, PHY_REG1_OFFSET, + &PhyData); + + if (PhyData != 0xFFFF) { + if ((PhyData & PHY_REG1_DETECT_MASK) == + PHY_REG1_DETECT_MASK) { + return PhyAddr; /* Found a valid PHY device */ + } + } + } + /* + * Unable to detect PHY device returning the default address of 0. + */ + return 0; +} + +/******************************************************************************/ +/** +* +* This function enables the MAC loopback on the PHY. +* +* @param InstancePtr is the pointer to the instance of EmacLite driver. +* @param PhyAddress is the address of the Phy device. +* +* @return +* - XST_SUCCESS if the loop back is enabled. +* - XST_FAILURE if the loop back was not enabled. +* +* @note None. +* +******************************************************************************/ +int EmacLiteEnablePhyLoopBack(XEmacLite *InstancePtr, u32 PhyAddress) +{ + int Status; + u16 PhyData = 0; + + /* + * Set the speed and put the PHY in reset. + */ + PhyData |= PHY_REG0_SPD_100_MASK; + Status = XEmacLite_PhyWrite(InstancePtr, PhyAddress, PHY_REG0_OFFSET, + PhyData | PHY_REG0_RESET_MASK); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Give sufficient delay for Phy Reset. + */ + EmacLitePhyDelay(EMACLITE_PHY_DELAY_SEC); + + /* + * Set the PHY in loop back. + */ + XEmacLite_PhyWrite(InstancePtr, PhyAddress, PHY_REG0_OFFSET, + PhyData | PHY_REG0_LOOPBACK_MASK); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Give sufficient delay for Phy Loopback Enable. + */ + EmacLitePhyDelay(1); + + return XST_SUCCESS; +} + +/******************************************************************************/ +/** +* +* This function disables the MAC loopback on the PHY. +* +* @param InstancePtr is the pointer to the instance of EmacLite driver. +* @param PhyAddress is the address of the Phy device. +* +* @return +* - XST_SUCCESS if the loop back was disabled. +* - XST_FAILURE if the loop back was not disabled. +* +* @note None. +* +******************************************************************************/ +int EmacLiteDisablePhyLoopBack(XEmacLite *InstancePtr, u32 PhyAddress) +{ + int Status; + u16 PhyData; + + /* + * Disable loop back through PHY register using MDIO support. + */ + Status = XEmacLite_PhyRead(InstancePtr, PhyAddress, PHY_REG0_OFFSET, + &PhyData); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + Status = XEmacLite_PhyWrite(InstancePtr,PhyAddress, PHY_REG0_OFFSET, + PhyData & ~(PHY_REG0_LOOPBACK_MASK)); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} + +/******************************************************************************/ +/** +* +* For PPC we use a usleep call, for Microblaze we use an assembly loop that +* is roughly the same regardless of optimization level, although caches and +* memory access time can make the delay vary. Just keep in mind that after +* resetting or updating the PHY modes, the PHY typically needs time to recover. +* +* @return None +* +* @note None +* +******************************************************************************/ +void EmacLitePhyDelay(unsigned int Seconds) +{ +#ifdef __MICROBLAZE__ + static int WarningFlag = 0; + + /* If MB caches are disabled or do not exist, this delay loop could + * take minutes instead of seconds (e.g., 30x longer). Print a warning + * message for the user (once). If only MB had a built-in timer! + */ + if (((mfmsr() & 0x20) == 0) && (!WarningFlag)) { +#ifdef STDOUT_BASEADDRESS + xil_printf("Warning: This example will take "); + xil_printf("minutes to complete without I-cache enabled \r\n"); +#endif + WarningFlag = 1; + } + +#define ITERS_PER_SEC (XPAR_CPU_CORE_CLOCK_FREQ_HZ / 6) + asm volatile ("\n" + "1: \n\t" + "addik r7, r0, %0 \n\t" + "2: \n\t" + "addik r7, r7, -1 \n\t" + "bneid r7, 2b \n\t" + "or r0, r0, r0 \n\t" + "bneid %1, 1b \n\t" + "addik %1, %1, -1 \n\t" + :: "i"(ITERS_PER_SEC), "d" (Seconds)); + +#else + + usleep(Seconds * 1000000); + +#endif +} + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_intr_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_intr_example.c new file mode 100644 index 000000000..faa642017 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_intr_example.c @@ -0,0 +1,684 @@ +#define TESTAPP_GEN + +/* $Id: xemaclite_intr_example.c,v 1.1.2.2 2010/08/06 15:11:04 anirudh Exp $ +*/ +/****************************************************************************** +* +* (c) Copyright 2003-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +2* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* @file xemaclite_intr_example.c +* +* This file contains an example for using the EmacLite hardware and driver. +* This file contains an interrupt example outlining the use of interrupts and +* callbacks in the transmission/reception of an Ethernet frame of 1000 bytes of +* payload. +* +* If the MDIO interface is NOT configured in the EmacLite core then this example +* will transmit a frame. +* If the MDIO interface is configured in the EmacLite core then this example +* will enable the MAC loopback in the PHY device, then transmit the frame and +* compare the received frame. +* +* @note +* +* None +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date     Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.01a ecm  05/21/04 First release
+* 1.01a sv   06/06/05 Minor changes to comply to Doxygen and coding guidelines
+* 1.01a sv   06/06/06 Minor changes for supporting Test App Interrupt examples
+* 2.00a ktn  02/25/09 Updated to use PHY loop back if MDIO is configured in
+*		      core
+* 3.00a ktn  10/22/09 Updated the example to use the HAL APIs/macros.
+*		      Updated example to use the macros that have been changed
+*		      in the driver to remove _m from the name of the macro.
+* 3.01a ktn  07/08/10 Updated example to support Little Endian MicroBlaze.
+*
+* 
+* +******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xemaclite_example.h" +#include "xintc.h" +#include "xil_exception.h" +#include "xil_io.h" + +/************************** Constant Definitions *****************************/ + +#ifndef TESTAPP_GEN +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. + */ +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#define INTC_EMACLITE_ID XPAR_INTC_0_EMACLITE_0_VEC_ID +#endif + +/* + * The Size of the Test Frame. + */ +#define EMACLITE_TEST_FRAME_SIZE 1000 + +/**************************** Type Definitions *******************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ + +int EmacLiteIntrExample(XIntc *IntcInstancePtr, + XEmacLite *EmacLiteInstPtr, + u16 EmacLiteDeviceId, + u16 EmacLiteIntrId); + +static int EmacLiteSendFrame(XEmacLite *EmacLiteInstPtr, + u32 PayloadSize); +static int EmacLiteRecvFrame(u32 PayloadSize); +static void EmacLiteRecvHandler(void *CallBackRef); +static void EmacLiteSendHandler(void *CallBackRef); +static void EmacLiteDisableIntrSystem(XIntc *IntcInstancePtr, + u16 EmacLiteIntrId); +static int EmacLiteSetupIntrSystem(XIntc *IntcInstancePtr, + XEmacLite *EmacLiteInstPtr, u16 EmacLiteIntrId); + +/************************** Variable Definitions *****************************/ + +XIntc IntcInstance; /* Instance of the Interrupt Controller */ + +/* + * Set up valid local and remote MAC addresses. This loop back test uses the + * LocalAddress both as a source and destination MAC address. + */ +static u8 RemoteAddress[XEL_MAC_ADDR_SIZE] = +{ + 0x00, 0x10, 0xa4, 0xb6, 0xfd, 0x09 +}; +static u8 LocalAddress[XEL_MAC_ADDR_SIZE] = +{ + 0x00, 0x0A, 0x35, 0x01, 0x02, 0x03 +}; + +/****************************************************************************/ +/** +* +* This function is the main function of the EmacLite interrupt example. +* +* @param None. +* +* @return XST_SUCCESS if successful, otherwise XST_FAILURE. +* +* @note None. +* +*****************************************************************************/ +#ifndef TESTAPP_GEN +int main() +{ + int Status; + + /* + * Run the EmacLite interrupt example , specify the parameters + * generated in xparameters.h. + */ + Status = EmacLiteIntrExample(&IntcInstance, + &EmacLiteInstance, + EMAC_DEVICE_ID, + INTC_EMACLITE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} +#endif + +/*****************************************************************************/ +/** +* +* The main entry point for the EmacLite driver example in interrupt mode. + +* This function will transmit/receive the Ethernet frames and verify the +* data in the received frame (if the MDIO interface is configured in the +* EmacLite core). +* This function simply transmits a frame if the MDIO interface is not +* configured in the EmacLite core. +* +* @param IntcInstancePtr is a pointer to the instance of the Intc. +* @param EmacLiteInstPtr is a pointer to the instance of the EmacLite. +* @param EmacLiteDeviceId is device ID of the XEmacLite Device , +* typically XPAR__DEVICE_ID value from +* xparameters.h. +* @param EmacLiteIntrId is the interrupt ID and is typically +* XPAR___VEC_ID value from +* xparameters.h. +* +* @return XST_SUCCESS if successful, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +int EmacLiteIntrExample(XIntc *IntcInstancePtr, + XEmacLite *EmacLiteInstPtr, + u16 EmacLiteDeviceId, + u16 EmacLiteIntrId) +{ + int Status; + u32 PhyAddress = 0; + XEmacLite_Config *ConfigPtr; + + /* + * Initialize the EmacLite device. + */ + ConfigPtr = XEmacLite_LookupConfig(EmacLiteDeviceId); + if (ConfigPtr == NULL) { + return XST_FAILURE; + } + Status = XEmacLite_CfgInitialize(EmacLiteInstPtr, + ConfigPtr, + ConfigPtr->BaseAddress); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Set the MAC address. + */ + XEmacLite_SetMacAddress(EmacLiteInstPtr, LocalAddress); + + /* + * Empty any existing receive frames. + */ + XEmacLite_FlushReceive(EmacLiteInstPtr); + + + /* + * Check if there is a Tx buffer available, if there isn't it is an + * error. + */ + if (XEmacLite_TxBufferAvailable(EmacLiteInstPtr) != TRUE) { + return XST_FAILURE; + } + + + /* + * Set up the interrupt infrastructure. + */ + Status = EmacLiteSetupIntrSystem(IntcInstancePtr, + EmacLiteInstPtr, + EmacLiteIntrId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Setup the EmacLite handlers. + */ + XEmacLite_SetRecvHandler((EmacLiteInstPtr), (void *)(EmacLiteInstPtr), + (XEmacLite_Handler)EmacLiteRecvHandler); + XEmacLite_SetSendHandler((EmacLiteInstPtr), (void *)(EmacLiteInstPtr), + (XEmacLite_Handler)EmacLiteSendHandler); + + + /* + * Enable the interrupts in the EmacLite controller. + */ + XEmacLite_EnableInterrupts(EmacLiteInstPtr); + RecvFrameLength = 0; + + /* + * If the MDIO is configured in the device. + */ + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + /* + * Detect the PHY device and enable the MAC Loop back + * in the PHY. + */ + PhyAddress = EmacLitePhyDetect(EmacLiteInstPtr); + Status = EmacLiteEnablePhyLoopBack(EmacLiteInstPtr, + PhyAddress); + if (Status != XST_SUCCESS) { + XEmacLite_DisableInterrupts(EmacLiteInstPtr); + EmacLiteDisableIntrSystem(IntcInstancePtr, + EmacLiteIntrId); + return XST_FAILURE; + } + } + + /* + * Transmit an Ethernet frame. + */ + Status = EmacLiteSendFrame(EmacLiteInstPtr, + EMACLITE_TEST_FRAME_SIZE); + if (Status != XST_SUCCESS) { + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + /* + * Disable the MAC Loop back in the PHY and + * disable/disconnect the EmacLite Interrupts. + */ + EmacLiteDisablePhyLoopBack(EmacLiteInstPtr, + PhyAddress); + XEmacLite_DisableInterrupts(EmacLiteInstPtr); + EmacLiteDisableIntrSystem(IntcInstancePtr, + EmacLiteIntrId); + return XST_FAILURE; + } + } + + /* + * Wait for the frame to be transmitted. + */ + while (TransmitComplete == FALSE); + + /* + * If the MDIO is not configured in the core then return XST_SUCCESS + * as the frame has been transmitted. + */ + if (!XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + + /* + * Disable and disconnect the EmacLite Interrupts. + */ + XEmacLite_DisableInterrupts(EmacLiteInstPtr); + EmacLiteDisableIntrSystem(IntcInstancePtr, EmacLiteIntrId); + return XST_SUCCESS; + } + + /* + * Wait for the frame to be received. + */ + while (RecvFrameLength == 0); + + /* + * Check the received frame. + */ + Status = EmacLiteRecvFrame(EMACLITE_TEST_FRAME_SIZE); + + /* + * Diasble the Loop Back. + */ + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + /* + * Disable the MAC Loop back in the PHY. + */ + Status |= EmacLiteDisablePhyLoopBack(EmacLiteInstPtr, + PhyAddress); + } + + /* + * Disable and disconnect the EmacLite Interrupts. + */ + XEmacLite_DisableInterrupts(EmacLiteInstPtr); + EmacLiteDisableIntrSystem(IntcInstancePtr, EmacLiteIntrId); + if ((Status != XST_SUCCESS) && (Status != XST_NO_DATA)) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + +/******************************************************************************/ +/** +* +* This function sends a frame of given size. This function assumes interrupt +* mode and sends the frame. +* +* @param EmacLiteInstPtr is a pointer to the EmacLite instance. +* @param PayloadSize is the size of the frame to create. The size only +* reflects the payload size, it does not include the Ethernet +* header size (14 bytes) nor the Ethernet CRC size (4 bytes). +* +* @return XST_SUCCESS if successful, else XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +static int EmacLiteSendFrame(XEmacLite *EmacLiteInstPtr, u32 PayloadSize) +{ + int Status; + u8 *FramePtr; + u32 Index; + + /* + * Set the Complete flag to false. + */ + TransmitComplete = FALSE; + + /* + * Assemble the frame with a destination address and the source address. + */ + FramePtr = (u8 *)TxFrame; + + /* + * Set up the destination address as the local address for + * Phy Loopback and Internal loopback. + */ + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr) || + XEmacLite_IsLoopbackConfigured(EmacLiteInstPtr)) { + + *FramePtr++ = LocalAddress[0]; + *FramePtr++ = LocalAddress[1]; + *FramePtr++ = LocalAddress[2]; + *FramePtr++ = LocalAddress[3]; + *FramePtr++ = LocalAddress[4]; + *FramePtr++ = LocalAddress[5]; + } else { + /* + * Fill in the valid Destination MAC address if + * the Loopback is not enabled. + */ + *FramePtr++ = RemoteAddress[0]; + *FramePtr++ = RemoteAddress[1]; + *FramePtr++ = RemoteAddress[2]; + *FramePtr++ = RemoteAddress[3]; + *FramePtr++ = RemoteAddress[4]; + *FramePtr++ = RemoteAddress[5]; + } + + /* + * Fill in the source MAC address. + */ + *FramePtr++ = LocalAddress[0]; + *FramePtr++ = LocalAddress[1]; + *FramePtr++ = LocalAddress[2]; + *FramePtr++ = LocalAddress[3]; + *FramePtr++ = LocalAddress[4]; + *FramePtr++ = LocalAddress[5]; + + /* + * Set up the type/length field - be sure its in network order. + */ + *((u16 *)FramePtr) = Xil_Htons(PayloadSize); + FramePtr++; + FramePtr++; + + /* + * Now fill in the data field with known values so we can verify them. + */ + for (Index = 0; Index < PayloadSize; Index++) { + *FramePtr++ = (u8)Index; + } + + /* + * Now send the frame. + */ + Status = XEmacLite_Send(EmacLiteInstPtr, (u8 *)TxFrame, + PayloadSize + XEL_HEADER_SIZE); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + +/******************************************************************************/ +/** +* +* This function receives a frame of given size. This function assumes interrupt +* mode, receives the frame and verifies its contents. +* +* @param PayloadSize is the size of the frame to receive. +* The size only reflects the payload size, it does not include the +* Ethernet header size (14 bytes) nor the Ethernet CRC size (4 +* bytes). +* +* @return XST_SUCCESS if successful, a driver-specific return code if not. +* +* @note None. +* +******************************************************************************/ +static int EmacLiteRecvFrame(u32 PayloadSize) +{ + u8 *FramePtr; + + /* + * This assumes MAC does not strip padding or CRC. + */ + if (RecvFrameLength != 0) { + int Index; + + /* + * Verify length, which should be the payload size. + */ + if ((RecvFrameLength- (XEL_HEADER_SIZE + XEL_FCS_SIZE)) != + PayloadSize) { + return XST_LOOPBACK_ERROR; + } + + /* + * Verify the contents of the Received Frame. + */ + FramePtr = (u8 *)RxFrame; + FramePtr += XEL_HEADER_SIZE; /* Get past the header */ + + for (Index = 0; Index < PayloadSize; Index++) { + if (*FramePtr++ != (u8)Index) { + return XST_LOOPBACK_ERROR; + } + } + } + + return XST_SUCCESS; +} + + +/******************************************************************************/ +/** +* +* This function handles the receive callback from the EmacLite driver. +* +* @param CallBackRef is the call back reference provided to the Handler. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +static void EmacLiteRecvHandler(void *CallBackRef) +{ + XEmacLite *XEmacInstancePtr; + + /* + * Convert the argument to something useful. + */ + XEmacInstancePtr = (XEmacLite *)CallBackRef; + + /* + * Handle the Receive callback. + */ + RecvFrameLength = XEmacLite_Recv(XEmacInstancePtr, (u8 *)RxFrame); + +} + +/******************************************************************************/ +/** +* +* This function handles the transmit callback from the EmacLite driver. +* +* @param CallBackRef is the call back reference provided to the Handler. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +static void EmacLiteSendHandler(void *CallBackRef) +{ + XEmacLite *XEmacInstancePtr; + + /* + * Convert the argument to something useful. + */ + XEmacInstancePtr = (XEmacLite *)CallBackRef; + + /* + * Handle the Transmit callback. + */ + TransmitComplete = TRUE; + +} + +/*****************************************************************************/ +/** +* +* This function setups the interrupt system such that interrupts can occur +* for the EmacLite device. This function is application specific since the +* actual system may or may not have an interrupt controller. The EmacLite +* could be directly connected to a processor without an interrupt controller. +* The user should modify this function to fit the application. +* +* @param IntcInstancePtr is a pointer to the instance of the Intc. +* @param EmacLiteInstPtr is a pointer to the instance of the EmacLite. +* @param EmacLiteIntrId is the interrupt ID and is typically +* XPAR___VEC_ID +* value from xparameters.h +* +* @return XST_SUCCESS if successful, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +static int EmacLiteSetupIntrSystem(XIntc *IntcInstancePtr, + XEmacLite *EmacLiteInstPtr, u16 EmacLiteIntrId) +{ + int Status; + +#ifndef TESTAPP_GEN + /* + * Initialize the interrupt controller driver so that it is ready to + * use. + */ + Status = XIntc_Initialize(IntcInstancePtr, INTC_DEVICE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } +#endif + /* + * Connect a device driver handler that will be called when an interrupt + * for the device occurs, the device driver handler performs the + * specific interrupt processing for the device. + */ + Status = XIntc_Connect(IntcInstancePtr, + EmacLiteIntrId, + XEmacLite_InterruptHandler, + (void *)(EmacLiteInstPtr)); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + +#ifndef TESTAPP_GEN + /* + * Start the interrupt controller such that interrupts are enabled for + * all devices that cause interrupts, specific real mode so that + * the EmacLite can cause interrupts thru the interrupt controller. + */ + Status = XIntc_Start(IntcInstancePtr, XIN_REAL_MODE); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } +#endif + + /* + * Enable the interrupt for the EmacLite in the Interrupt controller. + */ + XIntc_Enable(IntcInstancePtr, EmacLiteIntrId); + +#ifndef TESTAPP_GEN + + /* + * Initialize the exception table. + */ + Xil_ExceptionInit(); + + /* + * Register the interrupt controller handler with the exception table. + */ + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler) XIntc_InterruptHandler, + IntcInstancePtr); + + /* + * Enable non-critical exceptions. + */ + Xil_ExceptionEnable(); + +#endif /* TESTAPP_GEN */ + + return XST_SUCCESS; +} + + +/*****************************************************************************/ +/** +* +* This function disables the interrupts that occur for the EmacLite device. +* +* @param IntcInstancePtr is the pointer to the instance of the INTC +* component. +* @param EmacLiteIntrId is the interrupt ID and is typically +* XPAR___VEC_ID +* value from xparameters.h. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +static void EmacLiteDisableIntrSystem(XIntc *IntcInstancePtr, + u16 EmacLiteIntrId) +{ + /* + * Disconnect and disable the interrupts for the EmacLite device. + */ + XIntc_Disconnect(IntcInstancePtr, EmacLiteIntrId); + +} + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_polled_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_polled_example.c new file mode 100644 index 000000000..c4b64057b --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xemaclite_polled_example.c @@ -0,0 +1,409 @@ +#define TESTAPP_GEN + +/* $Id: xemaclite_polled_example.c,v 1.1.2.2 2010/08/06 15:11:04 anirudh Exp $ +*/ +/****************************************************************************** +* +* (c) Copyright 2004-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* @file xemaclite_polled_example.c +* +* This file contains an example for using the EmacLite hardware and driver. +* This file contains an polled mode example outlining the transmission/reception +* of an Ethernet frame of 1000 bytes of payload. +* +* If the MDIO interface is NOT configured in the EmacLite core then this example +* will only transmit a frame. +* If the MDIO interface is configured in the EmacLite core then this example +* will enable the MAC loopback in the PHY device, then transmit the frame and +* compare the received frame. +* +* @note +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date     Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.01a ecm  21/05/04 First release
+* 1.01a sv   06/06/05 Minor changes to comply to Doxygen and coding guidelines
+* 2.00a ktn  02/25/09 Updated to use PHY loop back if MDIO is configured in
+*		      core and updated to be used in Test App
+* 3.00a ktn  10/22/09 Updated example to use the macros that have been changed
+*		      in the driver to remove _m from the name of the macro.
+* 3.01a ktn  07/08/10 Updated example to support Little Endian MicroBlaze.
+*
+* 
+* +*****************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xemaclite_example.h" + +/************************** Constant Definitions *****************************/ + +/* + * The Size of the Test Frame. + */ +#define EMACLITE_TEST_FRAME_SIZE 1000 + +/**************************** Type Definitions *******************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ + +int EmacLitePolledExample(u16 DeviceId); + +static int EmacLiteSendFrame(XEmacLite *InstancePtr, u32 PayloadSize); + +static int EmacLiteRecvFrame(u32 PayloadSize); + +/************************** Variable Definitions *****************************/ + +/* + * Set up valid local and remote MAC addresses. This loop back test uses the + * LocalAddress both as a source and destination MAC address. + */ +static u8 LocalAddress[XEL_MAC_ADDR_SIZE] = +{ + 0x00, 0x0A, 0x35, 0x01, 0x02, 0x03 +}; +static u8 RemoteAddress[XEL_MAC_ADDR_SIZE] = +{ + 0x00, 0x10, 0xa4, 0xb6, 0xfd, 0x09 +}; + +/****************************************************************************/ +/** +* +* This function is the main function of the EmacLite polled example. +* +* @param None. +* +* @return XST_SUCCESS to indicate success, otherwise XST_FAILURE . +* +* @note None. +* +*****************************************************************************/ +#ifndef TESTAPP_GEN +int main() +{ + int Status; + + /* + * Run the EmacLite Polled example, specify the Device ID that is + * generated in xparameters.h. + */ + Status = EmacLitePolledExample(EMAC_DEVICE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} +#endif + +/*****************************************************************************/ +/** +* +* The main entry point for the EmacLite driver example in polled mode. +* +* This function will transmit/receive the Ethernet frames and verify the +* data in the received frame (if the MDIO interface is configured in the +* EmacLite core). +* This function simply transmits a frame if the MDIO interface is not +* configured in the EmacLite core. +* +* @param DeviceId is device ID of the XEmacLite Device , typically +* XPAR__DEVICE_ID value from xparameters.h. +* +* @return XST_SUCCESS to indicate success, XST_FAILURE otherwise. +* +* @note None. +* +******************************************************************************/ +int EmacLitePolledExample(u16 DeviceId) +{ + int Status; + XEmacLite *EmacLiteInstPtr = &EmacLiteInstance; + u32 PhyAddress = 0; + RecvFrameLength = 0; + XEmacLite_Config *ConfigPtr; + + /* + * Initialize the EmacLite device. + */ + ConfigPtr = XEmacLite_LookupConfig(DeviceId); + if (ConfigPtr == NULL) { + return XST_FAILURE; + } + Status = XEmacLite_CfgInitialize(EmacLiteInstPtr, + ConfigPtr, + ConfigPtr->BaseAddress); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Set the MAC address. + */ + XEmacLite_SetMacAddress(EmacLiteInstPtr, LocalAddress); + + /* + * Empty any existing receive frames. + */ + XEmacLite_FlushReceive(EmacLiteInstPtr); + + /* + * Check if there is a TX buffer available, if there isn't it is an + * error. + */ + if (XEmacLite_TxBufferAvailable(EmacLiteInstPtr) != TRUE) { + return XST_FAILURE; + } + + /* + * If the MDIO is configured in the device. + */ + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + /* + * Detect the PHY device and enable the MAC Loop back + * in the PHY. + */ + PhyAddress = EmacLitePhyDetect(EmacLiteInstPtr); + Status = EmacLiteEnablePhyLoopBack(EmacLiteInstPtr, + PhyAddress); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + } + + + /* + * Reset the receive frame length to zero. + */ + RecvFrameLength = 0; + Status = EmacLiteSendFrame(EmacLiteInstPtr, EMACLITE_TEST_FRAME_SIZE); + if (Status != XST_SUCCESS) { + if (XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + /* + * Disable the MAC Loop back in the PHY. + */ + EmacLiteDisablePhyLoopBack(EmacLiteInstPtr, + PhyAddress); + return XST_FAILURE; + } + } + + /* + * If the MDIO is not configured in the core then return XST_SUCCESS + * as the frame has been transmitted. + */ + if (!XEmacLite_IsMdioConfigured(EmacLiteInstPtr)) { + return XST_SUCCESS; + } + + + /* + * Poll for receive packet. + */ + while ((volatile u32)RecvFrameLength == 0) { + RecvFrameLength = XEmacLite_Recv(EmacLiteInstPtr, + (u8 *)RxFrame); + } + + /* + * Check the received frame. + */ + Status = EmacLiteRecvFrame(EMACLITE_TEST_FRAME_SIZE); + if ((Status != XST_SUCCESS) && (Status != XST_NO_DATA)) { + /* + * Disable the MAC Loop back in the PHY. + */ + EmacLiteDisablePhyLoopBack(EmacLiteInstPtr, PhyAddress); + return XST_FAILURE; + } + + + /* + * Disable the MAC Loop back in the PHY. + */ + EmacLiteDisablePhyLoopBack(EmacLiteInstPtr, PhyAddress); + + return XST_SUCCESS; +} + +/******************************************************************************/ +/** +* +* This function sends a frame of given size. +* +* @param XEmacInstancePtr is a pointer to the XEmacLite instance. +* @param PayloadSize is the size of the frame to create. The size only +* reflects the payload size, it does not include the Ethernet +* header size (14 bytes) nor the Ethernet CRC size (4 bytes). +* +* @return XST_SUCCESS if successful, else a driver-specific return code. +* +* @note None. +* +******************************************************************************/ +static int EmacLiteSendFrame(XEmacLite *InstancePtr, u32 PayloadSize) +{ + u8 *FramePtr; + int Index; + FramePtr = (u8 *)TxFrame; + + /* + * Set up the destination address as the local address for + * Phy Loopback. + */ + if (XEmacLite_IsMdioConfigured(InstancePtr)) { + + *FramePtr++ = LocalAddress[0]; + *FramePtr++ = LocalAddress[1]; + *FramePtr++ = LocalAddress[2]; + *FramePtr++ = LocalAddress[3]; + *FramePtr++ = LocalAddress[4]; + *FramePtr++ = LocalAddress[5]; + } else { + /* + * Fill in the valid Destination MAC address if + * the Loopback is not enabled. + */ + *FramePtr++ = RemoteAddress[0]; + *FramePtr++ = RemoteAddress[1]; + *FramePtr++ = RemoteAddress[2]; + *FramePtr++ = RemoteAddress[3]; + *FramePtr++ = RemoteAddress[4]; + *FramePtr++ = RemoteAddress[5]; + } + + /* + * Fill in the source MAC address. + */ + *FramePtr++ = LocalAddress[0]; + *FramePtr++ = LocalAddress[1]; + *FramePtr++ = LocalAddress[2]; + *FramePtr++ = LocalAddress[3]; + *FramePtr++ = LocalAddress[4]; + *FramePtr++ = LocalAddress[5]; + + /* + * Set up the type/length field - be sure its in network order. + */ + *((u16 *)FramePtr) = Xil_Htons(PayloadSize); + FramePtr++; + FramePtr++; + + /* + * Now fill in the data field with known values so we can verify them + * on receive. + */ + for (Index = 0; Index < PayloadSize; Index++) { + *FramePtr++ = (u8)Index; + } + + /* + * Now send the frame. + */ + return XEmacLite_Send(InstancePtr, (u8 *)TxFrame, + PayloadSize + XEL_HEADER_SIZE); + +} + +/******************************************************************************/ +/** +* +* This function receives a frame of given size. This function assumes interrupt +* mode, receives the frame and verifies its contents. +* +* @param PayloadSize is the size of the frame to receive. +* The size only reflects the payload size, it does not include the +* Ethernet header size (14 bytes) nor the Ethernet CRC size (4 +* bytes). +* +* @return XST_SUCCESS if successful, a driver-specific return code if not. +* +* @note None. +* +******************************************************************************/ +static int EmacLiteRecvFrame(u32 PayloadSize) +{ + u8 *FramePtr; + + /* + * This assumes MAC does not strip padding or CRC. + */ + if (RecvFrameLength != 0) { + int Index; + + /* + * Verify length, which should be the payload size. + */ + if ((RecvFrameLength- (XEL_HEADER_SIZE + XEL_FCS_SIZE)) != + PayloadSize) { + return XST_LOOPBACK_ERROR; + } + + /* + * Verify the contents of the Received Frame. + */ + FramePtr = (u8 *)RxFrame; + FramePtr += XEL_HEADER_SIZE; /* Get past the header */ + + for (Index = 0; Index < PayloadSize; Index++) { + if (*FramePtr++ != (u8)Index) { + return XST_LOOPBACK_ERROR; + } + } + } + + return XST_SUCCESS; +} + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_intr_tapp_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_intr_tapp_example.c new file mode 100644 index 000000000..45ee87bab --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_intr_tapp_example.c @@ -0,0 +1,386 @@ +#define TESTAPP_GEN + +/* $Id: xgpio_intr_tapp_example.c,v 1.1.2.1 2009/11/25 07:38:15 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2002-2009 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* @file xgpio_intr_tapp_example.c +* +* This file contains a design example using the GPIO driver (XGpio) in an +* interrupt driven mode of operation. This example does assume that there is +* an interrupt controller in the hardware system and the GPIO device is +* connected to the interrupt controller. +* +* This file is used by the TestAppGen utility to include a simplified test for +* gpio interrupts. + +* The buttons and LEDs are on 2 seperate channels of the GPIO so that interrupts +* are not caused when the LEDs are turned on and off. +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date	 Changes
+* ----- ---- -------- -------------------------------------------------------
+* 2.01a sn   05/09/06 Modified to be used by TestAppGen to include test for
+*		      interrupts.
+* 3.00a ktn  11/21/09 Updated to use HAL Processor APIs and minior changes
+*		      as per coding guidelines.
+*
+* +******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xparameters.h" +#include "xgpio.h" +#include "xil_exception.h" +#include "xintc.h" + +/************************** Constant Definitions *****************************/ +#ifndef TESTAPP_GEN +/* + * The following constants map to the names of the hardware instances that + * were created in the EDK XPS system. They are only defined here such that + * a user can easily change all the needed device IDs in one place. + */ +#define GPIO_DEVICE_ID XPAR_PUSH_BUTTONS_5BIT_DEVICE_ID +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#define INTC_GPIO_INTERRUPT_ID XPAR_INTC_0_GPIO_3_VEC_ID +#define GPIO_CHANNEL1 1 +/* + * The following constants define the positions of the buttons and LEDs each + * channel of the GPIO + */ +#define GPIO_ALL_LEDS 0xFFFF +#define GPIO_ALL_BUTTONS 0xFFFF + +/* + * The following constants define the GPIO channel that is used for the buttons + * and the LEDs. They allow the channels to be reversed easily. + */ +#define BUTTON_CHANNEL 1 /* Channel 1 of the GPIO Device */ +#define LED_CHANNEL 2 /* Channel 2 of the GPIO Device */ +#define BUTTON_INTERRUPT XGPIO_IR_CH1_MASK /* Channel 1 Interrupt Mask */ + +/* + * The following constant determines which buttons must be pressed at the same + * time to cause interrupt processing to stop and start + */ +#define INTERRUPT_CONTROL_VALUE 0x7 + +/* + * The following constant is used to wait after an LED is turned on to make + * sure that it is visible to the human eye. This constant might need to be + * tuned for faster or slower processor speeds. + */ +#define LED_DELAY 1000000 + +#endif + +#define INTR_DELAY 0x00FFFFFF + + +/************************** Function Prototypes ******************************/ +void GpioDriverHandler(void *CallBackRef); + +int GpioIntrExample(XIntc* IntcInstancePtr, XGpio* InstancePtr, + u16 DeviceId, u16 IntrId, + u16 IntrMask, u32 *DataRead); + +int GpioSetupIntrSystem(XIntc* IntcInstancePtr, XGpio* InstancePtr, + u16 DeviceId, u16 IntrId, u16 IntrMask); + +void GpioDisableIntr(XIntc* IntcInstancePtr, XGpio* InstancePtr, + u16 IntrId, u16 IntrMask); + +/************************** Variable Definitions *****************************/ + +/* + * The following are declared globally so they are zeroed and so they are + * easily accessible from a debugger + */ +XGpio Gpio; /* The Instance of the GPIO Driver */ + +XIntc Intc; /* The Instance of the Interrupt Controller Driver */ + + +static u16 GlobalIntrMask; /* GPIO channel mask that is needed by + * the Interrupt Handler */ + +static volatile u32 IntrFlag; /* Interrupt Handler Flag */ + +/****************************************************************************/ +/** +* This function is the main function of the GPIO example. It is responsible +* for initializing the GPIO device, setting up interrupts and providing a +* foreground loop such that interrupt can occur in the background. +* +* @param None. +* +* @return +* - XST_SUCCESS to indicate success. +* - XST_FAILURE to indicate failure. +* +* @note None. +* +*****************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + int Status; + u32 DataRead; + + print(" Press button to Generate Interrupt\r\n"); + + Status = GpioIntrExample(&Intc, &Gpio, + GPIO_DEVICE_ID, + INTC_GPIO_INTERRUPT_ID, + GPIO_CHANNEL1, &DataRead); + + if (Status == 0 ){ + if(DataRead == 0) + print("No button pressed. \r\n"); + else + print("Gpio Interrupt Test PASSED. \r\n"); + } else { + print("Gpio Interrupt Test FAILED.\r\n"); + } +} +#endif + +/******************************************************************************/ +/** +* +* This is the entry function from the TestAppGen tool generated application +* which tests the interrupts when enabled in the GPIO +* +* @param IntcInstancePtr is a reference to the Interrupt Controller +* driver Instance +* @param InstancePtr is a reference to the GPIO driver Instance +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param IntrId is XPAR___IP2INTC_IRPT_INTR +* value from xparameters.h +* @param IntrMask is the GPIO channel mask +* @param DataRead is the pointer where the data read from GPIO Input is +* returned +* +* @return XST_SUCCESS if the Test is successful, otherwise XST_FAILURE +* +* @note None. +* +******************************************************************************/ +int GpioIntrExample(XIntc* IntcInstancePtr, XGpio* InstancePtr, u16 DeviceId, + u16 IntrId, u16 IntrMask, u32 *DataRead) +{ + int Status; + u32 delay; + + /* Initialize the GPIO driver. If an error occurs then exit */ + + Status = XGpio_Initialize(InstancePtr, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + Status = GpioSetupIntrSystem(IntcInstancePtr, + InstancePtr, + DeviceId, + IntrId, + IntrMask); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + IntrFlag = 0; + delay = 0; + + while(!IntrFlag && (delay < INTR_DELAY)) { + delay++; + } + + GpioDisableIntr(IntcInstancePtr, + InstancePtr, + IntrId, + IntrMask); + + *DataRead = IntrFlag; + + return Status; + +} + + +/******************************************************************************/ +/** +* +* This function performs the GPIO set up for Interrupts +* +* @param IntcInstancePtr is a reference to the Interrupt Controller +* driver Instance +* @param InstancePtr is a reference to the GPIO driver Instance +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param IntrId is XPAR___IP2INTC_IRPT_INTR +* value from xparameters.h +* @param IntrMask is the GPIO channel mask +* +* @return XST_SUCCESS if the Test is successful, otherwise XST_FAILURE +* +* @note None. +* +******************************************************************************/ +int GpioSetupIntrSystem(XIntc* IntcInstancePtr, XGpio* InstancePtr, + u16 DeviceId, u16 IntrId, u16 IntrMask) + +{ + int Result; + + GlobalIntrMask = IntrMask; + +#ifndef TESTAPP_GEN + /* + * Initialize the interrupt controller driver so that it's ready to use. + * specify the device ID that was generated in xparameters.h + */ + Result = XIntc_Initialize(IntcInstancePtr, INTC_DEVICE_ID); + if (Result != XST_SUCCESS) { + return Result; + } +#endif + + /* Hook up simple interrupt service routine for TestApp */ + + Result = XIntc_Connect(IntcInstancePtr, IntrId, + (XInterruptHandler)GpioDriverHandler, + InstancePtr); + + /* + * Enable the GPIO channel interrupts so that push button can be detected + * and enable interrupts for the GPIO device + */ + XGpio_InterruptEnable(InstancePtr, IntrMask); + XGpio_InterruptGlobalEnable(InstancePtr); + + /* Enable the interrupt vector at the interrupt controller */ + XIntc_Enable(IntcInstancePtr, IntrId); + +#ifndef TESTAPP_GEN + + /* + * Initialize the exception table and register the interrupt + * controller handler with the exception table + */ + Xil_ExceptionInit(); + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler)XIntc_InterruptHandler, + IntcInstancePtr); + + /* Enable non-critical exceptions */ + Xil_ExceptionEnable(); + + /* + * Start the interrupt controller such that interrupts are recognized + * and handled by the processor + */ + Result = XIntc_Start(IntcInstancePtr, XIN_REAL_MODE); +#endif + + if (Result != XST_SUCCESS) { + return Result; + } + + return XST_SUCCESS; +} + + +/******************************************************************************/ +/** +* +* This is the interrupt handler routine for the GPIO for this example. +* +* @param CallbackRef is the Callback reference for the handler. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +void GpioDriverHandler(void *CallbackRef) +{ + XGpio *GpioPtr = (XGpio *)CallbackRef; + + IntrFlag = 1; + /* + * Clear the Interrupt + */ + XGpio_InterruptClear(GpioPtr, GlobalIntrMask); + +} + +/******************************************************************************/ +/** +* +* This function disables the interrupts for the GPIO +* +* @param IntcInstancePtr is a pointer to the Interrupt Controller +* driver Instance +* @param InstancePtr is a pointer to the GPIO driver Instance +* @param IntrId is XPAR___IP2INTC_IRPT_INTR +* value from xparameters.h +* @param IntrMask is the GPIO channel mask +* +* @return None +* +* @note None. +* +******************************************************************************/ +void GpioDisableIntr(XIntc* IntcInstancePtr, XGpio* InstancePtr, + u16 IntrId, u16 IntrMask) +{ + XGpio_InterruptDisable(InstancePtr, IntrMask); + XIntc_Disable(IntcInstancePtr, IntrId); + return; +} + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_tapp_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_tapp_example.c new file mode 100644 index 000000000..5e94be998 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xgpio_tapp_example.c @@ -0,0 +1,294 @@ +#define TESTAPP_GEN + +/* $Id: xgpio_tapp_example.c,v 1.1.2.1 2009/11/25 07:38:15 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2005-2009 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ + +/*****************************************************************************/ +/** +* @file xgpio_tapp_example.c +* +* This file contains a example for using GPIO hardware and driver. +* This example assumes that there is a UART Device or STDIO Device in the +* hardware system. +* +* This example can be run on the Xilinx ML300 board using the Prototype Pins & +* LEDs of the board connected to the GPIO and the Push Buttons connected. +* +* @note +* +* None +* +*
+* MODIFICATION HISTORY:
+*
+* Ver	Who  Date	  Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.00a sv   04/15/05 Initial release for TestApp integration.
+* 3.00a sv   11/21/09 Updated to use HAL Processor APIs.
+* 
+* +*****************************************************************************/ + +/***************************** Include Files ********************************/ + +#include "xparameters.h" +#include "xgpio.h" +#include "stdio.h" +#include "xstatus.h" + +/************************** Constant Definitions ****************************/ + +/* + * The following constant is used to wait after an LED is turned on to make + * sure that it is visible to the human eye. This constant might need to be + * tuned for faster or slower processor speeds. + */ +#define LED_DELAY 1000000 + +/* following constant is used to determine which channel of the GPIO is + * used if there are 2 channels supported in the GPIO. + */ +#define LED_CHANNEL 1 + +#define LED_MAX_BLINK 0x1 /* Number of times the LED Blinks */ + +#define GPIO_BITWIDTH 16 /* This is the width of the GPIO */ + +#define printf xil_printf /* A smaller footprint printf */ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. + */ +#ifndef TESTAPP_GEN +#define GPIO_OUTPUT_DEVICE_ID XPAR_LEDS_4BIT_DEVICE_ID +#define GPIO_INPUT_DEVICE_ID XPAR_LEDS_4BIT_DEVICE_ID +#endif /* TESTAPP_GEN */ + +/**************************** Type Definitions ******************************/ + + +/***************** Macros (Inline Functions) Definitions *******************/ + + +/************************** Function Prototypes ****************************/ + +int GpioOutputExample(u16 DeviceId, u32 GpioWidth); + +int GpioInputExample(u16 DeviceId, u32 *DataRead); + +void GpioDriverHandler(void *CallBackRef); + + +/************************** Variable Definitions **************************/ + +/* + * The following are declared globally so they are zeroed and so they are + * easily accessible from a debugger + */ +XGpio GpioOutput; /* The driver instance for GPIO Device configured as O/P */ +XGpio GpioInput; /* The driver instance for GPIO Device configured as I/P */ + +/*****************************************************************************/ +/** +* Main function to call the example.This function is not included if the +* example is generated from the TestAppGen test tool. +* +* @param None +* +* @return XST_SUCCESS if successful, XST_FAILURE if unsuccessful +* +* @note None +* +******************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + int Status; + u32 InputData; + + Status = GpioOutputExample(GPIO_OUTPUT_DEVICE_ID, GPIO_BITWIDTH); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + Status = GpioInputExample(GPIO_INPUT_DEVICE_ID, &InputData); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + printf("Data read from GPIO Input is 0x%x \n", (int)InputData); + + return XST_SUCCESS; +} +#endif + + +/*****************************************************************************/ +/** +* +* This function does a minimal test on the GPIO device configured as OUTPUT +* and driver as a example. +* +* +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param GpioWidth is the width of the GPIO +* +* @return XST_SUCCESS if successful, XST_FAILURE if unsuccessful +* +* @note None +* +****************************************************************************/ +int GpioOutputExample(u16 DeviceId, u32 GpioWidth) +{ + u32 Data; + volatile int Delay; + u32 LedBit; + u32 LedLoop; + int Status; + + /* + * Initialize the GPIO driver so that it's ready to use, + * specify the device ID that is generated in xparameters.h + */ + Status = XGpio_Initialize(&GpioOutput, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + + /* + * Set the direction for all signals to be outputs + */ + XGpio_SetDataDirection(&GpioOutput, LED_CHANNEL, 0x0); + + /* + * Set the GPIO outputs to low + */ + XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, 0x0); + + for (LedBit = 0x0; LedBit < GpioWidth; LedBit++) { + + for (LedLoop = 0; LedLoop < LED_MAX_BLINK; LedLoop++) { + + /* + * Set the GPIO Output to High + */ + XGpio_DiscreteWrite(&GpioOutput, LED_CHANNEL, + 1 << LedBit); + +#ifndef __SIM__ + /* + * Wait a small amount of time so the LED is visible + */ + for (Delay = 0; Delay < LED_DELAY; Delay++); + +#endif + /* + * Clear the GPIO Output + */ + XGpio_DiscreteClear(&GpioOutput, LED_CHANNEL, + 1 << LedBit); + + +#ifndef __SIM__ + /* + * Wait a small amount of time so the LED is visible + */ + for (Delay = 0; Delay < LED_DELAY; Delay++); +#endif + + } + + } + + return XST_SUCCESS; + +} + + +/******************************************************************************/ +/** +* +* This function performs a test on the GPIO driver/device with the GPIO +* configured as INPUT +* +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param DataRead is the pointer where the data read from GPIO Input is +* returned +* +* @return XST_SUCCESS if the Test is successful, otherwise XST_FAILURE +* +* @note None. +* +******************************************************************************/ +int GpioInputExample(u16 DeviceId, u32 *DataRead) +{ + int Status; + + /* + * Initialize the GPIO driver so that it's ready to use, + * specify the device ID that is generated in xparameters.h + */ + Status = XGpio_Initialize(&GpioInput, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Set the direction for all signals to be inputs + */ + XGpio_SetDataDirection(&GpioInput, LED_CHANNEL, 0xFFFFFFFF); + + /* + * Read the state of the data so that it can be verified + */ + *DataRead = XGpio_DiscreteRead(&GpioInput, LED_CHANNEL); + + return XST_SUCCESS; + +} + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xintc_tapp_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xintc_tapp_example.c new file mode 100644 index 000000000..a759313fd --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xintc_tapp_example.c @@ -0,0 +1,265 @@ +#define TESTAPP_GEN + + +/* $Id: xintc_tapp_example.c,v 1.1.4.1 2010/09/17 05:32:46 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2002-2009 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/******************************************************************************/ +/** +* +* @file xintc_tapp_example.c +* +* This file contains a self test example using the Interrupt Controller driver +* (XIntc) and hardware device. Please reference other device driver examples to +* see more examples of how the Intc and interrupts can be used by a software +* application. +* +* This example shows the use of the Interrupt Controller both with a PowerPC405 +* and MicroBlaze processor. +* +* The TestApp Gen utility uses this file to perform the self test and setup +* of Intc for interrupts. +* +* @note +* +* None +* +*
+*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date	 Changes
+* ----- ---- -------- --------------------------------------------------------
+* 1.00a sv   06/29/05  Created for Test App Integration
+* 1.00c sn   05/09/06  Added Interrupt Setup Function
+* 2.00a ktn  10/20/09  Updated to use HAL Processor APIs and minor changes as
+*		       per coding guidelines.
+* 
+******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xparameters.h" +#include "xstatus.h" +#include "xintc.h" +#include "xil_exception.h" + + +/************************** Constant Definitions *****************************/ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. This definition is not + * included if the example is generated from the TestAppGen test tool. + */ +#ifndef TESTAPP_GEN +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#endif + +/**************************** Type Definitions *******************************/ + + +/***************** Macros (Inline Functions) Definitions *********************/ + + +/************************** Function Prototypes ******************************/ + +int IntcSelfTestExample(u16 DeviceId); +int IntcInterruptSetup(XIntc *IntcInstancePtr, u16 DeviceId); + +/************************** Variable Definitions *****************************/ + +static XIntc InterruptController; /* Instance of the Interrupt Controller */ + + +/*****************************************************************************/ +/** +* +* This is the main function for the Interrupt Controller example. This +* function is not included if the example is generated from the TestAppGen test +* tool. +* +* @param None. +* +* @return XST_SUCCESS to indicate success, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + int Status; + + /* + * Run the Intc example , specify the Device ID generated in + * xparameters.h. + */ + Status = IntcSelfTestExample(INTC_DEVICE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} +#endif + +/*****************************************************************************/ +/** +* +* This function runs a self-test on the driver/device. This is a destructive +* test. This function is an example of how to use the interrupt controller +* driver component (XIntc) and the hardware device. This function is designed +* to work without any hardware devices to cause interrupts. It may not return +* if the interrupt controller is not properly connected to the processor in +* either software or hardware. +* +* This function relies on the fact that the interrupt controller hardware +* has come out of the reset state such that it will allow interrupts to be +* simulated by the software. +* +* @param DeviceId is device ID of the Interrupt Controller Device, +* typically XPAR__DEVICE_ID value from +* xparameters.h. +* +* @return XST_SUCCESS to indicate success, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +int IntcSelfTestExample(u16 DeviceId) +{ + int Status; + + /* + * Initialize the interrupt controller driver so that it is ready to use. + */ + Status = XIntc_Initialize(&InterruptController, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + + /* + * Perform a self-test to ensure that the hardware was built correctly. + */ + Status = XIntc_SelfTest(&InterruptController); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} + + +/*****************************************************************************/ +/** +* +* This function is used by the TestAppGen generated application to setup +* the interrupt controller. +* +* @param IntcInstancePtr is the reference to the Interrupt Controller +* instance. +* @param DeviceId is device ID of the Interrupt Controller Device, +* typically XPAR__DEVICE_ID value from +* xparameters.h. +* +* @return XST_SUCCESS to indicate success, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +int IntcInterruptSetup(XIntc *IntcInstancePtr, u16 DeviceId) +{ + + int Status; + + /* + * Initialize the interrupt controller driver so that it is + * ready to use. + */ + Status = XIntc_Initialize(IntcInstancePtr, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Perform a self-test to ensure that the hardware was built correctly. + */ + Status = XIntc_SelfTest(IntcInstancePtr); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Initialize the exception table. + */ + Xil_ExceptionInit(); + + /* + * Register the interrupt controller handler with the exception table. + */ + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler)XIntc_DeviceInterruptHandler, + (void*) 0); + + /* + * Enable exceptions. + */ + Xil_ExceptionEnable(); + + /* + * Start the interrupt controller such that interrupts are enabled for + * all devices that cause interrupts. + */ + Status = XIntc_Start(IntcInstancePtr, XIN_REAL_MODE); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_intr_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_intr_example.c new file mode 100644 index 000000000..067a0abd5 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_intr_example.c @@ -0,0 +1,457 @@ +#define TESTAPP_GEN + +/* $Id: xtmrctr_intr_example.c,v 1.1.2.1 2010/12/01 07:53:56 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2002-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* @file xtmrctr_intr_example.c +* +* This file contains a design example using the timer counter driver +* (XTmCtr) and hardware device using interrupt mode.This example assumes +* that the interrupt controller is also present as a part of the system +* +* This file can be used as a standalone example or by the TestAppGen utility +* to include a test for Timer interrupts. +* +* +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date	 Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.00b jhl  02/13/02 First release
+* 1.00b sv   04/26/05 Minor changes to comply to Doxygen and coding guidelines
+* 1.00b sn   05/09/06 Modified to be used by TestAppGen to include test for
+*		      interrupts.
+* 2.00a ktn  10/30/09 Updated to use HAL API's and minor changes as per coding
+*		      guidelines.
+*
+******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xparameters.h" +#include "xtmrctr.h" +#include "xintc.h" +#include "xil_exception.h" + +/************************** Constant Definitions *****************************/ +#ifndef TESTAPP_GEN +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are only defined here such that a user can easily + * change all the needed parameters in one place. + */ +#define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#define TMRCTR_INTERRUPT_ID XPAR_INTC_0_TMRCTR_0_VEC_ID + +/* + * The following constant determines which timer counter of the device that is + * used for this example, there are currently 2 timer counters in a device + * and this example uses the first one, 0, the timer numbers are 0 based + */ +#define TIMER_CNTR_0 0 + +#endif +/* + * The following constant is used to set the reset value of the timer counter, + * making this number larger reduces the amount of time this example consumes + * because it is the value the timer counter is loaded with when it is started + */ +#define RESET_VALUE 0xF0000000 + + + +/**************************** Type Definitions *******************************/ + + +/***************** Macros (Inline Functions) Definitions *********************/ + + +/************************** Function Prototypes ******************************/ + +int TmrCtrIntrExample(XIntc* IntcInstancePtr, + XTmrCtr* InstancePtr, + u16 DeviceId, + u16 IntrId, + u8 TmrCtrNumber); + +static int TmrCtrSetupIntrSystem(XIntc* IntcInstancePtr, + XTmrCtr* InstancePtr, + u16 DeviceId, + u16 IntrId, + u8 TmrCtrNumber); + +void TimerCounterHandler(void *CallBackRef, u8 TmrCtrNumber); + +void TmrCtrDisableIntr(XIntc* IntcInstancePtr, u16 IntrId); + +/************************** Variable Definitions *****************************/ +#ifndef TESTAPP_GEN +XIntc InterruptController; /* The instance of the Interrupt Controller */ + +XTmrCtr TimerCounterInst; /* The instance of the Timer Counter */ +#endif +/* + * The following variables are shared between non-interrupt processing and + * interrupt processing such that they must be global. + */ +volatile int TimerExpired; + + +/*****************************************************************************/ +/** +* This function is the main function of the Tmrctr example using Interrupts. +* +* @param None. +* +* @return XST_SUCCESS to indicate success, else XST_FAILURE to indicate a +* Failure. +* +* @note None. +* +******************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + + int Status; + + /* + * Run the Timer Counter - Interrupt example. + */ + Status = TmrCtrIntrExample(&InterruptController, + &TimerCounterInst, + TMRCTR_DEVICE_ID, + TMRCTR_INTERRUPT_ID, + TIMER_CNTR_0); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} +#endif + +/*****************************************************************************/ +/** +* This function does a minimal test on the timer counter device and driver as a +* design example. The purpose of this function is to illustrate how to use the +* XTmrCtr component. It initializes a timer counter and then sets it up in +* compare mode with auto reload such that a periodic interrupt is generated. +* +* This function uses interrupt driven mode of the timer counter. +* +* @param IntcInstancePtr is a pointer to the Interrupt Controller +* driver Instance +* @param TmrCtrInstancePtr is a pointer to the XTmrCtr driver Instance +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param IntrId is XPAR___INTERRUPT_INTR +* value from xparameters.h +* @param TmrCtrNumber is the number of the timer to which this +* handler is associated with. +* +* @return XST_SUCCESS if the Test is successful, otherwise XST_FAILURE +* +* @note This function contains an infinite loop such that if interrupts +* are not working it may never return. +* +*****************************************************************************/ +int TmrCtrIntrExample(XIntc* IntcInstancePtr, + XTmrCtr* TmrCtrInstancePtr, + u16 DeviceId, + u16 IntrId, + u8 TmrCtrNumber) +{ + int Status; + int LastTimerExpired = 0; + + /* + * Initialize the timer counter so that it's ready to use, + * specify the device ID that is generated in xparameters.h + */ + Status = XTmrCtr_Initialize(TmrCtrInstancePtr, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Perform a self-test to ensure that the hardware was built + * correctly, use the 1st timer in the device (0) + */ + Status = XTmrCtr_SelfTest(TmrCtrInstancePtr, TmrCtrNumber); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Connect the timer counter to the interrupt subsystem such that + * interrupts can occur. This function is application specific. + */ + Status = TmrCtrSetupIntrSystem(IntcInstancePtr, + TmrCtrInstancePtr, + DeviceId, + IntrId, + TmrCtrNumber); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Setup the handler for the timer counter that will be called from the + * interrupt context when the timer expires, specify a pointer to the + * timer counter driver instance as the callback reference so the handler + * is able to access the instance data + */ + XTmrCtr_SetHandler(TmrCtrInstancePtr, TimerCounterHandler, + TmrCtrInstancePtr); + + /* + * Enable the interrupt of the timer counter so interrupts will occur + * and use auto reload mode such that the timer counter will reload + * itself automatically and continue repeatedly, without this option + * it would expire once only + */ + XTmrCtr_SetOptions(TmrCtrInstancePtr, TmrCtrNumber, + XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION); + + /* + * Set a reset value for the timer counter such that it will expire + * eariler than letting it roll over from 0, the reset value is loaded + * into the timer counter when it is started + */ + XTmrCtr_SetResetValue(TmrCtrInstancePtr, TmrCtrNumber, RESET_VALUE); + + /* + * Start the timer counter such that it's incrementing by default, + * then wait for it to timeout a number of times + */ + XTmrCtr_Start(TmrCtrInstancePtr, TmrCtrNumber); + + while (1) { + /* + * Wait for the first timer counter to expire as indicated by the + * shared variable which the handler will increment + */ + while (TimerExpired == LastTimerExpired) { + } + LastTimerExpired = TimerExpired; + + /* + * If it has expired a number of times, then stop the timer counter + * and stop this example + */ + if (TimerExpired == 3) { + + XTmrCtr_Stop(TmrCtrInstancePtr, TmrCtrNumber); + break; + } + } + + TmrCtrDisableIntr(IntcInstancePtr, DeviceId); + return XST_SUCCESS; +} + +/*****************************************************************************/ +/** +* This function is the handler which performs processing for the timer counter. +* It is called from an interrupt context such that the amount of processing +* performed should be minimized. It is called when the timer counter expires +* if interrupts are enabled. +* +* This handler provides an example of how to handle timer counter interrupts +* but is application specific. +* +* @param CallBackRef is a pointer to the callback function +* @param TmrCtrNumber is the number of the timer to which this +* handler is associated with. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +void TimerCounterHandler(void *CallBackRef, u8 TmrCtrNumber) +{ + XTmrCtr *InstancePtr = (XTmrCtr *)CallBackRef; + + /* + * Check if the timer counter has expired, checking is not necessary + * since that's the reason this function is executed, this just shows + * how the callback reference can be used as a pointer to the instance + * of the timer counter that expired, increment a shared variable so + * the main thread of execution can see the timer expired + */ + if (XTmrCtr_IsExpired(InstancePtr, TmrCtrNumber)) { + TimerExpired++; + if(TimerExpired == 3) { + XTmrCtr_SetOptions(InstancePtr, TmrCtrNumber, 0); + } + } +} + +/*****************************************************************************/ +/** +* This function setups the interrupt system such that interrupts can occur +* for the timer counter. This function is application specific since the actual +* system may or may not have an interrupt controller. The timer counter could +* be directly connected to a processor without an interrupt controller. The +* user should modify this function to fit the application. +* +* @param IntcInstancePtr is a pointer to the Interrupt Controller +* driver Instance. +* @param TmrCtrInstancePtr is a pointer to the XTmrCtr driver Instance. +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h. +* @param IntrId is XPAR___VEC_ID +* value from xparameters.h. +* @param TmrCtrNumber is the number of the timer to which this +* handler is associated with. +* +* @return XST_SUCCESS if the Test is successful, otherwise XST_FAILURE. +* +* @note This function contains an infinite loop such that if interrupts +* are not working it may never return. +* +******************************************************************************/ +static int TmrCtrSetupIntrSystem(XIntc* IntcInstancePtr, + XTmrCtr* TmrCtrInstancePtr, + u16 DeviceId, + u16 IntrId, + u8 TmrCtrNumber) +{ + int Status; + + #ifndef TESTAPP_GEN + /* + * Initialize the interrupt controller driver so that + * it's ready to use, specify the device ID that is generated in + * xparameters.h + */ + Status = XIntc_Initialize(IntcInstancePtr, INTC_DEVICE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } +#endif + /* + * Connect a device driver handler that will be called when an interrupt + * for the device occurs, the device driver handler performs the specific + * interrupt processing for the device + */ + Status = XIntc_Connect(IntcInstancePtr, IntrId, + (XInterruptHandler)XTmrCtr_InterruptHandler, + (void *)TmrCtrInstancePtr); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + +#ifndef TESTAPP_GEN + /* + * Start the interrupt controller such that interrupts are enabled for + * all devices that cause interrupts, specific real mode so that + * the timer counter can cause interrupts thru the interrupt controller. + */ + Status = XIntc_Start(IntcInstancePtr, XIN_REAL_MODE); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } +#endif + + /* + * Enable the interrupt for the timer counter + */ + XIntc_Enable(IntcInstancePtr, IntrId); + +#ifndef TESTAPP_GEN + /* + * Initialize the exception table. + */ + Xil_ExceptionInit(); + + /* + * Register the interrupt controller handler with the exception table. + */ + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler) + XIntc_InterruptHandler, + IntcInstancePtr); + + /* + * Enable non-critical exceptions. + */ + Xil_ExceptionEnable(); + +#endif + return XST_SUCCESS; +} + + +/******************************************************************************/ +/** +* +* This function disables the interrupts for the Timer. +* +* @param IntcInstancePtr is a reference to the Interrupt Controller +* driver Instance. +* @param IntrId is XPAR___VEC_ID +* value from xparameters.h. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +void TmrCtrDisableIntr(XIntc* IntcInstancePtr, u16 IntrId) +{ + /* + * Disable the interrupt for the timer counter + */ + XIntc_Disable(IntcInstancePtr, IntrId); + + return; +} + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_selftest_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_selftest_example.c new file mode 100644 index 000000000..fe5ef0139 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xtmrctr_selftest_example.c @@ -0,0 +1,174 @@ +#define TESTAPP_GEN + +/* $Id: xtmrctr_selftest_example.c,v 1.1.2.1 2010/12/01 07:53:56 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2002-2010 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/*****************************************************************************/ +/** +* @file xtmrctr_selftest_example.c +* +* This file contains a example for using the Timer Counter hardware and +* driver +* +* @note +* +* None +* +*
+* MODIFICATION HISTORY:
+*
+* Ver   Who  Date	 Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.00a sv   04/25/05 Initial release for TestApp integration.
+* 2.00a ktn  11/26/09 Minor changes as per coding guidelines.
+* 
+* +*****************************************************************************/ + +/***************************** Include Files ********************************/ + +#include "xparameters.h" +#include "xtmrctr.h" + + +/************************** Constant Definitions ****************************/ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. + */ +#define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID + +/* + * This example only uses the 1st of the 2 timer counters contained in a + * single timer counter hardware device + */ +#define TIMER_COUNTER_0 0 + +/**************************** Type Definitions ******************************/ + + +/***************** Macros (Inline Functions) Definitions *******************/ + + +/************************** Function Prototypes ****************************/ + +int TmrCtrSelfTestExample(u16 DeviceId, u8 TmrCtrNumber); + +/************************** Variable Definitions **************************/ + +XTmrCtr TimerCounter; /* The instance of the timer counter */ + + +/*****************************************************************************/ +/** +* Main function to call the example. This function is not included if the +* example is generated from the TestAppGen test tool. +* +* @param None +* +* @return XST_SUCCESS to indicate success, else XST_FAILURE to indicate +* a Failure. +* +* @note None +* +******************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + int Status; + + Status = TmrCtrSelfTestExample(TMRCTR_DEVICE_ID, TIMER_COUNTER_0); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} +#endif + + +/*****************************************************************************/ +/** +* +* This function does a minimal test on the TmrCtr device and driver as a +* design example. The purpose of this function is to illustrate +* how to use the XTmrCtr component. +* +* +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h +* @param TmrCtrNumber is the timer counter of the device to operate on. +* Each device may contain multiple timer counters. +* The timer number is a zero based number with a range of +* 0 - (XTC_DEVICE_TIMER_COUNT - 1). +* +* @return XST_SUCCESS if successful, XST_FAILURE if unsuccessful +* +* @note None +* +****************************************************************************/ +int TmrCtrSelfTestExample(u16 DeviceId, u8 TmrCtrNumber) +{ + int Status; + XTmrCtr *TmrCtrInstancePtr = &TimerCounter; + + /* + * Initialize the TmrCtr driver so that it iss ready to use + */ + Status = XTmrCtr_Initialize(TmrCtrInstancePtr, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Perform a self-test to ensure that the hardware was built + * correctly, use the 1st timer in the device (0) + */ + Status = XTmrCtr_SelfTest(TmrCtrInstancePtr, TmrCtrNumber); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xuartlite_selftest_example.c b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xuartlite_selftest_example.c new file mode 100644 index 000000000..12a0aa0d2 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/src/xuartlite_selftest_example.c @@ -0,0 +1,166 @@ +#define TESTAPP_GEN + +/* $Id: xuartlite_selftest_example.c,v 1.1.2.1 2009/11/24 05:14:25 svemula Exp $ */ +/****************************************************************************** +* +* (c) Copyright 2005-2009 Xilinx, Inc. All rights reserved. +* +* This file contains confidential and proprietary information of Xilinx, Inc. +* and is protected under U.S. and international copyright and other +* intellectual property laws. +* +* DISCLAIMER +* This disclaimer is not a license and does not grant any rights to the +* materials distributed herewith. Except as otherwise provided in a valid +* license issued to you by Xilinx, and to the maximum extent permitted by +* applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL +* FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, +* IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF +* MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; +* and (2) Xilinx shall not be liable (whether in contract or tort, including +* negligence, or under any other theory of liability) for any loss or damage +* of any kind or nature related to, arising under or in connection with these +* materials, including for any direct, or any indirect, special, incidental, +* or consequential loss or damage (including loss of data, profits, goodwill, +* or any type of loss or damage suffered as a result of any action brought by +* a third party) even if such damage or loss was reasonably foreseeable or +* Xilinx had been advised of the possibility of the same. +* +* CRITICAL APPLICATIONS +* Xilinx products are not designed or intended to be fail-safe, or for use in +* any application requiring fail-safe performance, such as life-support or +* safety devices or systems, Class III medical devices, nuclear facilities, +* applications related to the deployment of airbags, or any other applications +* that could lead to death, personal injury, or severe property or +* environmental damage (individually and collectively, "Critical +* Applications"). Customer assumes the sole risk and liability of any use of +* Xilinx products in Critical Applications, subject only to applicable laws +* and regulations governing limitations on product liability. +* +* THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE +* AT ALL TIMES. +* +******************************************************************************/ +/****************************************************************************/ +/** +* +* @file xuartlite_selftest_example.c +* +* This file contains a design example using the UartLite driver (XUartLite) and +* hardware device. +* +* @note +* +* None +* +* MODIFICATION HISTORY: +*
+* Ver   Who  Date	 Changes
+* ----- ---- -------- -----------------------------------------------
+* 1.00a ecm  01/25/04 First Release.
+* 1.00a sv   06/13/05 Minor changes to comply to Doxygen and Coding guidelines
+* 2.00a ktn  10/20/09 Minor changes as per coding guidelines.
+* 
+******************************************************************************/ + +/***************************** Include Files *********************************/ + +#include "xparameters.h" +#include "xuartlite.h" + +/************************** Constant Definitions *****************************/ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are defined here such that a user can easily + * change all the needed parameters in one place. + */ +#define UARTLITE_DEVICE_ID XPAR_UARTLITE_0_DEVICE_ID + + +/**************************** Type Definitions *******************************/ + + +/***************** Macros (Inline Functions) Definitions *********************/ + + +/************************** Function Prototypes ******************************/ + +int UartLiteSelfTestExample(u16 DeviceId); + +/************************** Variable Definitions *****************************/ + +XUartLite UartLite; /* Instance of the UartLite device */ + +/*****************************************************************************/ +/** +* +* Main function to call the example. This function is not included if the +* example is generated from the TestAppGen test tool. +* +* @param None. +* +* @return XST_SUCCESS if successful, otherwise XST_FAILURE. +* +* @note None. +* +******************************************************************************/ +#ifndef TESTAPP_GEN +int main(void) +{ + int Status; + + /* + * Run the UartLite self test example, specify the Device ID that is + * generated in xparameters.h + */ + Status = UartLiteSelfTestExample(UARTLITE_DEVICE_ID); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; + +} +#endif + +/*****************************************************************************/ +/** +* +* This function does a minimal test on the UartLite device and driver as a +* design example. The purpose of this function is to illustrate +* how to use the XUartLite component. +* +* +* @param DeviceId is the XPAR__DEVICE_ID value from +* xparameters.h. +* +* @return XST_SUCCESS if successful, otherwise XST_FAILURE. +* +* @note None. +* +****************************************************************************/ +int UartLiteSelfTestExample(u16 DeviceId) +{ + int Status; + + /* + * Initialize the UartLite driver so that it is ready to use. + */ + Status = XUartLite_Initialize(&UartLite, DeviceId); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + /* + * Perform a self-test to ensure that the hardware was built correctly. + */ + Status = XUartLite_SelfTest(&UartLite); + if (Status != XST_SUCCESS) { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + + -- 2.39.5

%4lcjiu_ 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ϝ-cpZ_?e&GY~Obt|8V@n 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 zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmzX$0?E6h8mt8gkN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kicC)Ah`={pa~>E0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wnNWB%nRix~+a~QQiM6OLy*~e09Y;JDltE zx^U5T=?A%vgL4ncUsk%a_qgS`?VVdJ$JNKV#q?s><#X;q=`NphU49oX+U3H|b@|J3 zonGf2RPH^}zdx$(b*{6^xo&$`o{M*GG2Mj|PyGuiS9^(4A5y>L;$8T#ZX>hLZC|x} zBeVCo?oBWG8}*Pnn_T7*!ZKChjuXbI@j{`jq@3^{-|01XPcm{ zGhMsw-a)SEkIvp{O{~vxcI}6JF8_?{wsZaDo|^lq)4#}d`;D`&=(_qX+Me;tA)vGC zjf47=OLzH~W9`Yc7VUT8yVZ3ycJ{fjb5D7JIq#kFJmb3foSUc+q1eQH()exSBk%{V zU5l>GqLkBnRQJ!MUtLhXbBpDlH0Vs=r z%DeOk$o2mCt9l=R|K&S>{HOaQtN;C-{Zf(U-FHw9HD0=?PyOcAwfh_3atJ1<(ZNg( z%5hNo(vghSgMa_$Yxg&&Ob+M=2h~WaeS6v=sNMxknty%A$# WUfWUE*L?Mld-o#tjLWf?`~Lxr3rS-D literal 0 HcmV?d00001 diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.xml b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.xml new file mode 100644 index 000000000..d786585e8 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system.xml @@ -0,0 +1,9646 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MicroBlaze Debug Module (MDM) + Debug module for MicroBlaze Soft Processor. + + + + + + + Device Family + + + Specifies the JTAG user-defined register used + + + Specifies the Bus Interface for the JTAG UART + + + Base Address + + + High Address + + + PLB Address Bus Width + + + PLB Data Bus Width + + + PLB Slave Uses P2P Topology + + + Master ID Bus Width of PLB + + + Number of PLB Masters + + + Native Data Bus Width of PLB Slave + + + PLB Slave is Capable of Bursts + + + Number of MicroBlaze debug ports + + + Enable JTAG UART + + + AXI Address Width + + + AXI Data Width + + + AXI4LITE protocal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MicroBlaze + The MicroBlaze 32 bit soft processor + + + + + + + + + + + + + + Enable Fault Tolerance Support + + + + + + Select implementation to optimize area (with lower instruction throughput) + + + + Select Bus Interfaces + + + Select Stream Interfaces + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enable Additional Machine Status Register Instructions + + + Enable Pattern Comparator + + + Enable Barrel Shifter + + + Enable Integer Divider + + + Enable Integer Multiplier + + + Enable Floating Point Unit + + + Enable Unaligned Data Exception + + + Enable Illegal Instruction Exception + + + Enable Instruction-side AXI Exception + + + Enable Data-side AXI Exception + + + Enable Instruction-side PLB Exception + + + Enable Data-side PLB Exception + + + Enable Integer Divide Exception + + + Enable Floating Point Unit Exceptions + + + Enable Stream Exception + + + <qt>Enable stack protection</qt> + + + Specifies Processor Version Register + + + Specify USER1 Bits in Processor Version Register + + + Specify USER2 Bits in Processor Version Registers + + + Enable MicroBlaze Debug Module Interface + + + Number of PC Breakpoints + + + Number of Read Address Watchpoints + + + Number of Write Address Watchpoints + + + Sense Interrupt on Edge vs. Level + + + Sense Interrupt on Rising vs. Falling Edge + + + Specify Reset Value for Select MSR Bits + + + <qt>Generate Illegal Instruction Exception for NULL Instruction</qt> + + + Number of Stream Links + + + + Enable Additional Stream Instructions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base Address + + + High Address + + + Enable Instruction Cache + + + Enable Writes + + + + Size in Bytes + + + + Line Length + + + Use Cache Links for All Memory Accesses + + + + Number of Victims + + + Number of Streams + + + Use Distributed RAM for Tags + + + Data Width + + + + + + + + + + + + + + + + + + + Base Address + + + High Address + + + Enable Data Cache + + + Enable Writes + + + + Size in Bytes + + + + Line Length + + + Use Cache Links for All Memory Accesses + + + + Enable Write-back Storage Policy + + + Number of Victims + + + Use Distributed RAM for Tags + + + Data Width + + + + + + + + + + + + + + + + + + + + + Memory Management + + + Data Shadow Translation Look-Aside Buffer Size + + + Instruction Shadow Translation Look-Aside Buffer Size + + + Enable Access to Memory Management Special Registers + + + Number of Memory Protection Zones + + + Privileged Instructions + + + + + + Enable Branch Target Cache + + + Branch Target Cache Size + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Local Memory Bus (LMB) 1.0 + 'The LMB is a fast, local bus for connecting MicroBlaze I and D ports to peripherals and BRAM' + + + + + + + Number of Bus Slaves + + + LMB Address Bus Width + + + LMB Data Bus Width + + + Active High External Reset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Local Memory Bus (LMB) 1.0 + 'The LMB is a fast, local bus for connecting MicroBlaze I and D ports to peripherals and BRAM' + + + + + + + Number of Bus Slaves + + + LMB Address Bus Width + + + LMB Data Bus Width + + + Active High External Reset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMB BRAM Controller + Local Memory Bus (LMB) Block RAM (BRAM) Interface Controller connects to an lmb bus + + + + + + + LMB BRAM Base Address + + + LMB BRAM High Address + + + + LMB Address Decode Mask + + + LMB Address Bus Width + + + LMB Data Bus Width + + + Error Correction Code + + + Select Interconnect + + + Fault Inject Registers + + + Correctable Error First Failing Register + + + Uncorrectable Error First Failing Register + + + ECC Status and Control Register + + + ECC On/Off Register + + + ECC On/Off Reset Value + + + Correctable Error Counter Register Width + + + Write Access setting + + + Base Address for PLB Interface + + + High Address for PLB Interface + + + PLB Address Bus Width + + + PLB Data Bus Width + + + PLB Slave Uses P2P Topology + + + Master ID Bus Width of PLB + + + Number of PLB Masters + + + PLB Slave is Capable of Bursts + + + Native Data Bus Width of PLB Slave + + + Frequency of PLB Slave + + + S_AXI_CTRL Clock Frequency + + + S_AXI_CTRL Base Address + + + S_AXI_CTRL High Address + + + S_AXI_CTRL Address Width + + + S_AXI_CTRL Data Width + + + S_AXI_CTRL Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMB BRAM Controller + Local Memory Bus (LMB) Block RAM (BRAM) Interface Controller connects to an lmb bus + + + + + + + LMB BRAM Base Address + + + LMB BRAM High Address + + + + LMB Address Decode Mask + + + LMB Address Bus Width + + + LMB Data Bus Width + + + Error Correction Code + + + Select Interconnect + + + Fault Inject Registers + + + Correctable Error First Failing Register + + + Uncorrectable Error First Failing Register + + + ECC Status and Control Register + + + ECC On/Off Register + + + ECC On/Off Reset Value + + + Correctable Error Counter Register Width + + + Write Access setting + + + Base Address for PLB Interface + + + High Address for PLB Interface + + + PLB Address Bus Width + + + PLB Data Bus Width + + + PLB Slave Uses P2P Topology + + + Master ID Bus Width of PLB + + + Number of PLB Masters + + + PLB Slave is Capable of Bursts + + + Native Data Bus Width of PLB Slave + + + Frequency of PLB Slave + + + S_AXI_CTRL Clock Frequency + + + S_AXI_CTRL Base Address + + + S_AXI_CTRL High Address + + + S_AXI_CTRL Address Width + + + S_AXI_CTRL Data Width + + + S_AXI_CTRL Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Block RAM (BRAM) Block + The BRAM Block is a configurable memory module that attaches to a variety of BRAM Interface Controllers. + + + + + + + Size of BRAM(s) in Bytes + + + Data Width of Port A and B + + + Address Width of Port A and B + + + Number of Byte Write Enables + + + Device Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI S6 Memory Controller(DDR/DDR2/DDR3) + Spartan-6 memory controller + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Clock Generator + Clock generator for processor system. + + + + + + + Family + + + Device + + + Package + + + Speed Grade + + + Input Clock Frequency (Hz) + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Varaible Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Varaible Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase + + + Required Frequency (Hz) + + + Clock Deskew + + + Required Frequency (Hz) + + + Required Phase + + + Required Group + + + Buffered + + + Variable Phase Shift + + + + Clock Primitive Feedback Buffer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Processor System Reset Module + Reset management module + + + + + + + Device Subfamily + + + Number of Clocks Before Input Change is Recognized On The External Reset Input + + + Number of Clocks Before Input Change is Recognized On The Auxiliary Reset Input + + + External Reset Active High + + + Auxiliary Reset Active High + + + Number of Bus Structure Reset Registered Outputs + + + Number of Peripheral Reset Registered Outputs + + + Number of Active Low Interconnect Reset Registered Outputs + + + Number of Active Low Peripheral Reset Registered Outputs + + + Device Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Interconnect + AXI4 Memory-Mapped Interconnect + + + + + + + Family + + + Base Family + + + Number of Slave Slots + + + Number of Master Slots + + + AXI ID Widgth + + + AXI Address Widgth + + + AXI Data Maximum Width + + + Slave AXI Data Width + + + Master AXI Data Width + + + Interconnect Crossbar Data Width + + + AXI Protocol + + + Master AXI Protocol + + + Master AXI Base Address + + + Master AXI High Address + + + Slave AXI Base ID + + + Slave AXI Thread ID Width + + + Slave AXI Is Interconnect + + + Slave AXI ACLK Ratio + + + Slvave AXI Is ACLK ASYNC + + + Master AXI ACLK Ratio + + + Master AXI Is ACLK ASYNC + + + Interconnect Crossbar ACLK Frequency Ratio + + + Slave AXI Supports Write + + + Slave AXI Supports Read + + + Master AXI Supports Write + + + Master AXI Supports Read + + + Propagate USER Signals + + + AWUSER Signal Width + + + ARUSER Signal Width + + + WUSER Signal Width + + + RUSER Signal Width + + + BUSER Signal Width + + + AXI Connectivity + + + Slave AXI Single Thread + + + Master AXI Supports Reordering + + + Master generates narrow bursts + + + Slave accepts narrow bursts + + + Slave AXI Write Acceptance + + + Slave AXI Read Acceptance + + + Master AXI Write Issuing + + + Master AXI Read Issuing + + + Slave AXI ARB Priority + + + Master AXI Secure + + + Master AXI Write FIFO Depth + + + Slave AXI Write FIFO Type + + + Slave AXI Write FIFO Delay + + + Slave AXI Read FIFO Depth + + + Slave AXI Read FIFO Type + + + Slave AXI Read FIFO Delay + + + Master AXI Write FIFO Depth + + + Master AXI Write FIFO Type + + + Master AXI Write FIFO Delay + + + Master AXI Read FIFO Depth + + + Master AXI Read FIFO Type + + + Master AXI Read FIFO Delay + + + Slave AXI AW Register + + + Slave AXI AR Register + + + Slave AXI W Register + + + Slave AXI R Register + + + Slave AXI B Register + + + Master AXI AW Register + + + Master AXI AR Register + + + Master AXI W Register + + + Master AXI R Register + + + Master AXI B Register + + + C_INTERCONNECT_R_REGISTER + + + Interconnect Architecture + + + Use Diagnostic Slave Port + + + Generate Interrupts + + + Check for transaction errors (DECERR) + + + Slave AXI CTRL Protocol + + + Slave AXI CTRL Address Width + + + Slave AXI CTRL Data Width + + + Diagnostic Slave Port Base Address + + + Diagnostic Slave Port High Address + + + Simulation debug + + + Select SI slot for DEBUG outputs + + + Select MI slot for DEBUG outputs + + + Thread depth of DEBUG signal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Interconnect + AXI4 Memory-Mapped Interconnect + + + + + + + Family + + + Base Family + + + Number of Slave Slots + + + Number of Master Slots + + + AXI ID Widgth + + + AXI Address Widgth + + + AXI Data Maximum Width + + + Slave AXI Data Width + + + Master AXI Data Width + + + Interconnect Crossbar Data Width + + + AXI Protocol + + + Master AXI Protocol + + + Master AXI Base Address + + + Master AXI High Address + + + Slave AXI Base ID + + + Slave AXI Thread ID Width + + + Slave AXI Is Interconnect + + + Slave AXI ACLK Ratio + + + Slvave AXI Is ACLK ASYNC + + + Master AXI ACLK Ratio + + + Master AXI Is ACLK ASYNC + + + Interconnect Crossbar ACLK Frequency Ratio + + + Slave AXI Supports Write + + + Slave AXI Supports Read + + + Master AXI Supports Write + + + Master AXI Supports Read + + + Propagate USER Signals + + + AWUSER Signal Width + + + ARUSER Signal Width + + + WUSER Signal Width + + + RUSER Signal Width + + + BUSER Signal Width + + + AXI Connectivity + + + Slave AXI Single Thread + + + Master AXI Supports Reordering + + + Master generates narrow bursts + + + Slave accepts narrow bursts + + + Slave AXI Write Acceptance + + + Slave AXI Read Acceptance + + + Master AXI Write Issuing + + + Master AXI Read Issuing + + + Slave AXI ARB Priority + + + Master AXI Secure + + + Master AXI Write FIFO Depth + + + Slave AXI Write FIFO Type + + + Slave AXI Write FIFO Delay + + + Slave AXI Read FIFO Depth + + + Slave AXI Read FIFO Type + + + Slave AXI Read FIFO Delay + + + Master AXI Write FIFO Depth + + + Master AXI Write FIFO Type + + + Master AXI Write FIFO Delay + + + Master AXI Read FIFO Depth + + + Master AXI Read FIFO Type + + + Master AXI Read FIFO Delay + + + Slave AXI AW Register + + + Slave AXI AR Register + + + Slave AXI W Register + + + Slave AXI R Register + + + Slave AXI B Register + + + Master AXI AW Register + + + Master AXI AR Register + + + Master AXI W Register + + + Master AXI R Register + + + Master AXI B Register + + + C_INTERCONNECT_R_REGISTER + + + Interconnect Architecture + + + Use Diagnostic Slave Port + + + Generate Interrupts + + + Check for transaction errors (DECERR) + + + Slave AXI CTRL Protocol + + + Slave AXI CTRL Address Width + + + Slave AXI CTRL Data Width + + + Diagnostic Slave Port Base Address + + + Diagnostic Slave Port High Address + + + Simulation debug + + + Select SI slot for DEBUG outputs + + + Select MI slot for DEBUG outputs + + + Thread depth of DEBUG signal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Interconnect + AXI4 Memory-Mapped Interconnect + + + + + + + Family + + + Base Family + + + Number of Slave Slots + + + Number of Master Slots + + + AXI ID Widgth + + + AXI Address Widgth + + + AXI Data Maximum Width + + + Slave AXI Data Width + + + Master AXI Data Width + + + Interconnect Crossbar Data Width + + + AXI Protocol + + + Master AXI Protocol + + + Master AXI Base Address + + + Master AXI High Address + + + Slave AXI Base ID + + + Slave AXI Thread ID Width + + + Slave AXI Is Interconnect + + + Slave AXI ACLK Ratio + + + Slvave AXI Is ACLK ASYNC + + + Master AXI ACLK Ratio + + + Master AXI Is ACLK ASYNC + + + Interconnect Crossbar ACLK Frequency Ratio + + + Slave AXI Supports Write + + + Slave AXI Supports Read + + + Master AXI Supports Write + + + Master AXI Supports Read + + + Propagate USER Signals + + + AWUSER Signal Width + + + ARUSER Signal Width + + + WUSER Signal Width + + + RUSER Signal Width + + + BUSER Signal Width + + + AXI Connectivity + + + Slave AXI Single Thread + + + Master AXI Supports Reordering + + + Master generates narrow bursts + + + Slave accepts narrow bursts + + + Slave AXI Write Acceptance + + + Slave AXI Read Acceptance + + + Master AXI Write Issuing + + + Master AXI Read Issuing + + + Slave AXI ARB Priority + + + Master AXI Secure + + + Master AXI Write FIFO Depth + + + Slave AXI Write FIFO Type + + + Slave AXI Write FIFO Delay + + + Slave AXI Read FIFO Depth + + + Slave AXI Read FIFO Type + + + Slave AXI Read FIFO Delay + + + Master AXI Write FIFO Depth + + + Master AXI Write FIFO Type + + + Master AXI Write FIFO Delay + + + Master AXI Read FIFO Depth + + + Master AXI Read FIFO Type + + + Master AXI Read FIFO Delay + + + Slave AXI AW Register + + + Slave AXI AR Register + + + Slave AXI W Register + + + Slave AXI R Register + + + Slave AXI B Register + + + Master AXI AW Register + + + Master AXI AR Register + + + Master AXI W Register + + + Master AXI R Register + + + Master AXI B Register + + + C_INTERCONNECT_R_REGISTER + + + Interconnect Architecture + + + Use Diagnostic Slave Port + + + Generate Interrupts + + + Check for transaction errors (DECERR) + + + Slave AXI CTRL Protocol + + + Slave AXI CTRL Address Width + + + Slave AXI CTRL Data Width + + + Diagnostic Slave Port Base Address + + + Diagnostic Slave Port High Address + + + Simulation debug + + + Select SI slot for DEBUG outputs + + + Select MI slot for DEBUG outputs + + + Thread depth of DEBUG signal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Interconnect + AXI4 Memory-Mapped Interconnect + + + + + + + Family + + + Base Family + + + Number of Slave Slots + + + Number of Master Slots + + + AXI ID Widgth + + + AXI Address Widgth + + + AXI Data Maximum Width + + + Slave AXI Data Width + + + Master AXI Data Width + + + Interconnect Crossbar Data Width + + + AXI Protocol + + + Master AXI Protocol + + + Master AXI Base Address + + + Master AXI High Address + + + Slave AXI Base ID + + + Slave AXI Thread ID Width + + + Slave AXI Is Interconnect + + + Slave AXI ACLK Ratio + + + Slvave AXI Is ACLK ASYNC + + + Master AXI ACLK Ratio + + + Master AXI Is ACLK ASYNC + + + Interconnect Crossbar ACLK Frequency Ratio + + + Slave AXI Supports Write + + + Slave AXI Supports Read + + + Master AXI Supports Write + + + Master AXI Supports Read + + + Propagate USER Signals + + + AWUSER Signal Width + + + ARUSER Signal Width + + + WUSER Signal Width + + + RUSER Signal Width + + + BUSER Signal Width + + + AXI Connectivity + + + Slave AXI Single Thread + + + Master AXI Supports Reordering + + + Master generates narrow bursts + + + Slave accepts narrow bursts + + + Slave AXI Write Acceptance + + + Slave AXI Read Acceptance + + + Master AXI Write Issuing + + + Master AXI Read Issuing + + + Slave AXI ARB Priority + + + Master AXI Secure + + + Master AXI Write FIFO Depth + + + Slave AXI Write FIFO Type + + + Slave AXI Write FIFO Delay + + + Slave AXI Read FIFO Depth + + + Slave AXI Read FIFO Type + + + Slave AXI Read FIFO Delay + + + Master AXI Write FIFO Depth + + + Master AXI Write FIFO Type + + + Master AXI Write FIFO Delay + + + Master AXI Read FIFO Depth + + + Master AXI Read FIFO Type + + + Master AXI Read FIFO Delay + + + Slave AXI AW Register + + + Slave AXI AR Register + + + Slave AXI W Register + + + Slave AXI R Register + + + Slave AXI B Register + + + Master AXI AW Register + + + Master AXI AR Register + + + Master AXI W Register + + + Master AXI R Register + + + Master AXI B Register + + + C_INTERCONNECT_R_REGISTER + + + Interconnect Architecture + + + Use Diagnostic Slave Port + + + Generate Interrupts + + + Check for transaction errors (DECERR) + + + Slave AXI CTRL Protocol + + + Slave AXI CTRL Address Width + + + Slave AXI CTRL Data Width + + + Diagnostic Slave Port Base Address + + + Diagnostic Slave Port High Address + + + Simulation debug + + + Select SI slot for DEBUG outputs + + + Select MI slot for DEBUG outputs + + + Thread depth of DEBUG signal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI UART (16550-style) + AXI 16550/450 UART (Universal Asynchronous Receiver/Transmitter) + + + + + + + Device Family + + + AXI Clock Frequency + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + Uart Configuration + + + External XIN is Present + + + External RCLK is Present + + + XIN Clock Frequency + + + AXI4LITE protocol + + + Include Modem Interface Ports + + + Include User Interface Ports + + + + + Serial Data Input + + + Serial Data Output + + + + + + Freeze UART + + + + + + + + + + + + + + + + + + + + Transmitter Clock + + + Clear To Send + + + Data Carrier Detect + + + Driver disable + + + Data Set Ready + + + Data Terminal Ready + + + User Controlled Output + + + User Controlled Output + + + Receiver 16x Clock + + + Ring Indicator + + + Request To Send + + + DMA Control Signal + + + DMA Control Signal + + + Baudrate Generator Reference Clock + + + Inverted XIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Timer/Counter + Timer counter with AXI interface + + + + + + + AXI4LITE protocol + + + Device Family + + + The Width of Counter in Timer + Count Width + + + Only One Timer is present + + + TRIG0 Active Level + + + TRIG1 Active Level + + + GEN0 Active Level + + + GEN1 Active Level + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + + + + + Capture Trig 0 + + + Capture Trig 1 + + + Generate Out 0 + + + Generate Out 1 + + + Pulse Width Modulation 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Interrupt Controller + intc core attached to the AXI + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + Number of Interrupt Inputs + + + Type of Interrupt for Each Input + + + Type of Each Edge Senstive Interrupt + + + Type of Each Level Sensitive Interrupt + + + Support IPR + + + Support SIE + + + Support CIE + + + Support IVR + + + IRQ Output Use Level + + + The Sense of IRQ Output + + + AXI4LITE protocol + + + + + + Interrupt Request Output + + + + + + + + + + + + + Interrupt Inputs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI SPI Interface + AXI to Motorola Serial Peripheral Interface (SPI) adapter + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + Include both Receiver and Transmitter FIFOs + Include Receive and Transmit FIFO + + + Ratio of AXI Clock Frequency To SCK Frequency + C_SCK_RATIO + + + Total Number of Slave Select Bits in SS Vector + C_NUM_SS_BITS + + + Number of SPI transfer bits + C_NUM_TRANSFER_BITS + + + AXI4LITE protocol + + + + + + Local SPI Slave Select Active LOW Input + + + + + + Master Out Slave In + + + SPI Bus Clock + + + Slave Select Vector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Master In Slave Out + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Utility IO Multiplexor + Utility IO multiplexor + + + + + + + Size of The Vector + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI IIC Interface + AXI interface to Philips I2C bus v2.1 + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + Output Frequency of SCL Signal + + + Use 10-bit Address + + + Width of GPIO + + + AXI Clock Frequency + + + Width of glitches removed on SCL input + + + Width of glitches removed on SDA input + + + SDA level when Master transmit throttling occurs + + + AXI4LITE protocol + + + + + + IIC Serial Clock + + + IIC Serial Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + IIC General Purpose Output + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI General Purpose IO + General Purpose Input/Output (GPIO) core for the AXI bus. + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + GPIO Data Channel Width + GPIO Data Width + + + GPIO2 Data Channel Width + + + Channel 1 is Input Only + + + Channel 2 is Input Only + + + GPIO Supports Interrupts + + + Channel 1 Data Out Default Value + + + Channel 1 Tri-state Default Value + + + Enable Channel 2 + + + Channel 2 Data Out Default Value + + + Channel 2 Tri-state Default Value + + + AXI4LITE protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPIO1 Data IO + + + GPIO2 Data IO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI General Purpose IO + General Purpose Input/Output (GPIO) core for the AXI bus. + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + GPIO Data Channel Width + GPIO Data Width + + + GPIO2 Data Channel Width + + + Channel 1 is Input Only + + + Channel 2 is Input Only + + + GPIO Supports Interrupts + + + Channel 1 Data Out Default Value + + + Channel 1 Tri-state Default Value + + + Enable Channel 2 + + + Channel 2 Data Out Default Value + + + Channel 2 Tri-state Default Value + + + AXI4LITE protocol + + + + + GPIO1 Data IO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPIO2 Data IO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI General Purpose IO + General Purpose Input/Output (GPIO) core for the AXI bus. + + + + + + + Device Family + + + AXI Base Address + + + AXI High Address + + + AXI Address Width + + + AXI Data Width + + + GPIO Data Channel Width + GPIO Data Width + + + GPIO2 Data Channel Width + + + Channel 1 is Input Only + + + Channel 2 is Input Only + + + GPIO Supports Interrupts + + + Channel 1 Data Out Default Value + + + Channel 1 Tri-state Default Value + + + Enable Channel 2 + + + Channel 2 Data Out Default Value + + + Channel 2 Tri-state Default Value + + + AXI4LITE protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPIO1 Data IO + + + GPIO2 Data IO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI BRAM Controller + Attaches BRAM to the AXI + + + + + + + Device Family + + + AXI4 Protocol + + + AXI Slave IP Base Address + + + AXI Slave IP High Address + + + AXI Slave IP Address Width + + + AXI Slave IP Data Width or BRAM Data Width + + + AXI Slave IP ID Width + + + Slave AXI Supports Narrow Bursts + + + Slave Single Port BRAM + + + Inteconnect Slave AXI Read Address Channel Register + + + Inteconnect Slave AXI Write Address Channel Register + + + Inteconnect Slave AXI Write Back Channel Register + + + Inteconnect Slave AXI Read Data Channel Register + + + Inteconnect Slave AXI Write Data Channel Register + + + Inteconnect Slave AXI Write Acceptance + + + Inteconnect Slave AXI Read Acceptance + + + AXI4-Lite Protocol + + + AXI4-Lite Slave IP Address Width + + + AXI4-Lite Slave Data Width + + + AXI4-Lite Slave IP Base Address + + + AXI4-Lite Slave IP High Address + + + Inteconnect Slave AXI Control Read Support + + + Inteconnect Slave AXI Control Write Support + + + Enable ECC Functionality + + + Enable AXI4-Lite ECC Fault Injection Registers + + + Set ECC On/Off Reset Value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Block RAM (BRAM) Block + The BRAM Block is a configurable memory module that attaches to a variety of BRAM Interface Controllers. + + + + + + + Size of BRAM(s) in Bytes + + + Data Width of Port A and B + + + Address Width of Port A and B + + + Number of Byte Write Enables + + + Device Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Utility Bus Split + Bus splitting primitive + + + + + + + Vector Size of Input Bus + + + The Left Bit Position of The Out1 Output Bus + + + First Bit of The Out2 Output Bus + + + + + + + + + + + AXI External Memory Controller (SRAM/Flash/Cellular RAM) + AXI External Memory Controller (SRAM/Flash/Cellular RAM) + + + + + + + Family Supported + + + AXI Register Interface Enable + + + AXI Register Interface Addresses Width + + + AXI Register Interface Data Width + + + AXI Memory Interface ID Width + + + AXI Memory Interface Addresses Width + + + AXI Memory Interface Data Width + + + AXI4 Memory Interface protocol + + + AXI4 Register Interface protocol + + + axi clock period to calculate wait state pulse widths + + + Number of Banks + + + Include negative edge IO registers + + + Data Bus Width of Bank 0 + + + Data Bus Width of Bank 1 + + + Data Bus Width of Bank 2 + + + Data Bus Width of Bank 3 + + + Execute Multiple Memory Accesses To Match Bank 0 Data Bus Width To AXI Data Bus Width + + + Execute Multiple Memory Accesses To Match Bank 1 Data Bus Width To AXI Data Bus Width + + + Execute Multiple Memory Accesses To Match Bank 2 Data Bus Width To AXI Data Bus Width + + + Execute Multiple Memory Accesses To Match Bank 3 Data Bus Width To AXI Data Bus Width + + + Memory type for Bank 0 + + + Pipeline Latency of Bank 0 + + + Type of parity of Bank 0 + + + TCEDV of Bank 0 + + + TAVDV of Bank 0 + + + TPACC of Bank 0 + + + THZCE of Bank 0 + + + THZOE of Bank 0 + + + TWC of Bank 0 + + + TWP of Bank 0 + + + TWPH of Bank 0 + + + TLZWE of Bank 0 + + + Memory type for Bank 1 + + + Pipeline Latency of Bank 1 + + + Type of parity of Bank 1 + + + TCEDV of Bank 1 + + + TAVDV of Bank 1 + + + TPACC of Bank 1 + + + THZCE of Bank 1 + + + THZOE of Bank 1 + + + TWC of Bank 1 + + + TWP of Bank 1 + + + TWPH of Bank 1 + + + TLZWE of Bank 1 + + + Memory type for Bank 2 + + + Pipeline Latency of Bank 2 + + + Type of parity of Bank 2 + + + TCEDV of Bank 2 + + + TAVDV of Bank 2 + + + TPACC of Bank 2 + + + THZCE of Bank 2 + + + THZOE of Bank 2 + + + TWC of Bank 2 + + + TWP of Bank 2 + + + TWPH of Bank 2 + + + TLZWE of Bank 2 + + + Memory type for Bank 3 + + + Pipeline Latency of Bank 3 + + + Type of parity of Bank 3 + + + TCEDV of Bank 3 + + + TAVDV of Bank 3 + + + TPACC of Bank 3 + + + THZCE of Bank 3 + + + THZOE of Bank 3 + + + TWC of Bank 3 + + + TWP of Bank 3 + + + TWPH of Bank 3 + + + TLZWE of Bank 3 + + + Maximum data bus width of all memory banks + + + Base Address of Register + + + High Address of Register + + + Base Address of Bank 0 + + + High Address of Bank 0 + + + Base Address of Bank 1 + + + High Address of Bank 1 + + + Base Address of Bank 2 + + + High Address of Bank 2 + + + Base Address of Bank 3 + + + High Address of Bank 3 + + + + + + + + Memory Address Bus + + + Memory Write Enable + + + + + + Memory Output Enable + + + Memory Chip Enable Active Low + + + Memory Advanced Burst Address/Load New Address + + + Memory Reset/Power Down + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Memory Chip Enable Active High + + + Memory Qualified Write Enable + + + Memory Byte Enable + + + Memory Linear/Interleaved Burst Order + + + Memory Clock Enable + + + Memory Read Not Write + + + + + + Memory Clock Enable + + + Memory Data Bus + + + Memory Data Parity Bus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI DMA Engine + AXI MemoryMap to/from AXI Stream Direct Memory Access Engine + + + + + + + AXI Lite Address Width + + + AXI Lite Data Width + + + Delay Timer Counter Resolution + + + Primary clock Is Asynchronous + + + Include Scatter Gather Engine + + + Include Scatter Gather Descriptor Queuing + + + Include AXI Status and Control Streams + + + Use Status Stream App Length + + + Buffer Length Field Width + + + AXI SG Address Width + + + AXI SG Data Width + + + AXI Control Stream Width + + + AXI Status Stream Width + + + Include MM2S Channel + + + Include MM2S Data Realignment Engine + + + Maximum Memory Map Burst Size for MM2S + + + MM2S Address Width + + + MM2S Memory Map Data Width + + + MM2S Stream Data Width + + + Include S2MM Channel + + + Include S2MM Data Realignment Engine + + + Maximum Memory Map Burst Size for S2MM (data beats) + + + S2MM Address Width + + + S2MM Memory Map Data Width + + + S2MM Stream Data Width + + + Device Family + + + Base Address + + + High Address + + + AXI Lite Clock Frequency + + + AXI Scatter Gather Clock Frequency + + + AXI MM2S Clock Frequency + + + AXI S2MM Clock Frequency + + + AXI Lite Protocol + + + AXI Lite Supports Read Access + + + AXI Lite Supports Write Access + + + AXI SG Protocol + + + AXI SG Support Threads + + + Base Address + + + AXI SG Supports Narrow Bursts + + + AXI SG Generates Read Accesses + + + AXI SG Generates Write Accesses + + + AXI MM2S Protocol + + + AXI MM2S Support Threads + + + AXI MM2S Thread ID Width + + + AXI MM2S Supports Narrow Bursts + + + AXI MM2S Generates Read Accesses + + + AXI MM2S Generates Write Accesses + + + AXI MM2S Interface Read Issuing + + + AXI MM2S Interface Read FIFO Depth + + + AXI S2MM Protocol + + + AXI S2MM Support Threads + + + AXI S2MM Thread ID Width + + + AXI S2MM Supports Narrow Bursts + + + AXI S2MM Generates Write Accesses + + + AXI S2MM Generates Read Accesses + + + AXI S2MM Interface Write Issuing + + + AXI S2MM Interface Write FIFO Depth + + + AXI MM2S Stream Interface Protocol + + + AXI S2MM Stream Interface Protocol + + + AXI MM2S Control Stream Interface Protocol + + + AXI S2MM Status Stream Interface Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI Ethernet Embedded IP + Embedded Ethernet core that implements a Tri-mode (10/100/1000 Mbps) Ethernet MAC or a 10/100 Mbps Ethernet MAC to support MII/GMII/SGMII/RGMII/1000Base-X PHY types + + + + + + + AXI Protocol + + + AXI Stream Bus Width + + + AXI Stream Bus Width + + + AXI Stream Bus Width + + + AXI Stream Bus Width + + + AXI Stream Protocol + + + AXI Stream Protocol + + + AXI Stream Protocol + + + AXI Stream Protocol + + + AXI Stream Protocol + + + AXI Stream Protocol + + + Device Family + + + AXI Clock Freq in HZ + + + Base Address + + + High Address + + + AXI Address Width + + + AXI Data Width + + + AXI ID Width + + + Spartan 6 Transceiver Side + + + PHY Address + + + Include IO and BUFG as Needed for the PHY Interface Selected + + + Type of TEMAC + + + Physical Interface Type + + + Enable Half Duplex mode + + + TX Memory Depth + + + RX Memory Depth + + + Enable TX Checksum Offload + + + Enable RX Checksum Offload + + + Transmit VLAN translation + + + Receive VLAN translation + + + Transmit VLAN tagging + + + Receive VLAN tagging + + + Transmit VLAN stripping + + + Receive VLAN stripping + + + Receive Extended Multicast Address Filtering + + + Statistics Counters + + + Audio Video Bridging (AVB) - license required + + + Simulation Mode + + + C_STATS_WIDTH + + + AXI Stream Tx Clock Freq + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AXI System ACE Interface Controller(Compact Flash) + Interface between the AXI and the Microprocessor Interface (MPU) of the System ACE Compact Flash solution peripheral + + + + + + + C_S_AXI_PROTOCOL + + + C_FAMILY + + + C_BASEADDR + + + C_HIGHADDR + + + C_S_AXI_ADDR_WIDTH + + + C_S_AXI_DATA_WIDTH + + + C_MEM_WIDTH + + + + + Clock Input + + + Active high Interrupt Output + + + Address Input + + + Active LOW Chip Enable + + + Active LOW Output Enable + + + Active LOW Write Enable + + + Data Input/Output + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system_bd.bmm b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system_bd.bmm new file mode 100644 index 000000000..f834a2cf1 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/HardwareWithEthernet/system_bd.bmm @@ -0,0 +1,104 @@ +// BMM LOC annotation file. +// +// Release 13.2 - Data2MEM O.61xd, build 2.2 May 20, 2011 +// Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. + + +/////////////////////////////////////////////////////////////////////////////// +// +// Processor 'microblaze_0', ID 100, memory map. +// +/////////////////////////////////////////////////////////////////////////////// + +ADDRESS_MAP microblaze_0 MICROBLAZE-LE 100 + + + /////////////////////////////////////////////////////////////////////////////// + // + // Processor 'microblaze_0' address space 'lmb_bram_combined' 0x00000000:0x0000FFFF (64 KBytes). + // + /////////////////////////////////////////////////////////////////////////////// + + ADDRESS_SPACE lmb_bram_combined RAMB16 [0x00000000:0x0000FFFF] + BUS_BLOCK + system_i/lmb_bram/lmb_bram/ramb16bwer_0 [31:31] INPUT = lmb_bram_combined_0.mem PLACED = X2Y30; + system_i/lmb_bram/lmb_bram/ramb16bwer_1 [30:30] INPUT = lmb_bram_combined_1.mem PLACED = X2Y28; + system_i/lmb_bram/lmb_bram/ramb16bwer_2 [29:29] INPUT = lmb_bram_combined_2.mem PLACED = X3Y22; + system_i/lmb_bram/lmb_bram/ramb16bwer_3 [28:28] INPUT = lmb_bram_combined_3.mem PLACED = X3Y20; + system_i/lmb_bram/lmb_bram/ramb16bwer_4 [27:27] INPUT = lmb_bram_combined_4.mem PLACED = X3Y30; + system_i/lmb_bram/lmb_bram/ramb16bwer_5 [26:26] INPUT = lmb_bram_combined_5.mem PLACED = X2Y26; + system_i/lmb_bram/lmb_bram/ramb16bwer_6 [25:25] INPUT = lmb_bram_combined_6.mem PLACED = X2Y18; + system_i/lmb_bram/lmb_bram/ramb16bwer_7 [24:24] INPUT = lmb_bram_combined_7.mem PLACED = X2Y20; + system_i/lmb_bram/lmb_bram/ramb16bwer_8 [23:23] INPUT = lmb_bram_combined_8.mem PLACED = X3Y28; + system_i/lmb_bram/lmb_bram/ramb16bwer_9 [22:22] INPUT = lmb_bram_combined_9.mem PLACED = X3Y26; + system_i/lmb_bram/lmb_bram/ramb16bwer_10 [21:21] INPUT = lmb_bram_combined_10.mem PLACED = X3Y24; + system_i/lmb_bram/lmb_bram/ramb16bwer_11 [20:20] INPUT = lmb_bram_combined_11.mem PLACED = X2Y10; + system_i/lmb_bram/lmb_bram/ramb16bwer_12 [19:19] INPUT = lmb_bram_combined_12.mem PLACED = X2Y12; + system_i/lmb_bram/lmb_bram/ramb16bwer_13 [18:18] INPUT = lmb_bram_combined_13.mem PLACED = X2Y24; + system_i/lmb_bram/lmb_bram/ramb16bwer_14 [17:17] INPUT = lmb_bram_combined_14.mem PLACED = X2Y16; + system_i/lmb_bram/lmb_bram/ramb16bwer_15 [16:16] INPUT = lmb_bram_combined_15.mem PLACED = X2Y14; + system_i/lmb_bram/lmb_bram/ramb16bwer_16 [15:15] INPUT = lmb_bram_combined_16.mem PLACED = X1Y22; + system_i/lmb_bram/lmb_bram/ramb16bwer_17 [14:14] INPUT = lmb_bram_combined_17.mem PLACED = X1Y24; + system_i/lmb_bram/lmb_bram/ramb16bwer_18 [13:13] INPUT = lmb_bram_combined_18.mem PLACED = X1Y30; + system_i/lmb_bram/lmb_bram/ramb16bwer_19 [12:12] INPUT = lmb_bram_combined_19.mem PLACED = X1Y28; + system_i/lmb_bram/lmb_bram/ramb16bwer_20 [11:11] INPUT = lmb_bram_combined_20.mem PLACED = X0Y22; + system_i/lmb_bram/lmb_bram/ramb16bwer_21 [10:10] INPUT = lmb_bram_combined_21.mem PLACED = X0Y20; + system_i/lmb_bram/lmb_bram/ramb16bwer_22 [9:9] INPUT = lmb_bram_combined_22.mem PLACED = X0Y16; + system_i/lmb_bram/lmb_bram/ramb16bwer_23 [8:8] INPUT = lmb_bram_combined_23.mem PLACED = X0Y28; + system_i/lmb_bram/lmb_bram/ramb16bwer_24 [7:7] INPUT = lmb_bram_combined_24.mem PLACED = X1Y26; + system_i/lmb_bram/lmb_bram/ramb16bwer_25 [6:6] INPUT = lmb_bram_combined_25.mem PLACED = X0Y26; + system_i/lmb_bram/lmb_bram/ramb16bwer_26 [5:5] INPUT = lmb_bram_combined_26.mem PLACED = X0Y24; + system_i/lmb_bram/lmb_bram/ramb16bwer_27 [4:4] INPUT = lmb_bram_combined_27.mem PLACED = X1Y20; + system_i/lmb_bram/lmb_bram/ramb16bwer_28 [3:3] INPUT = lmb_bram_combined_28.mem PLACED = X1Y14; + system_i/lmb_bram/lmb_bram/ramb16bwer_29 [2:2] INPUT = lmb_bram_combined_29.mem PLACED = X1Y18; + system_i/lmb_bram/lmb_bram/ramb16bwer_30 [1:1] INPUT = lmb_bram_combined_30.mem PLACED = X1Y16; + system_i/lmb_bram/lmb_bram/ramb16bwer_31 [0:0] INPUT = lmb_bram_combined_31.mem PLACED = X0Y18; + END_BUS_BLOCK; + END_ADDRESS_SPACE; + + + /////////////////////////////////////////////////////////////////////////////// + // + // Processor 'microblaze_0' address space 'axi_bram_0_combined' 0x4A000000:0x4A00FFFF (64 KBytes). + // + /////////////////////////////////////////////////////////////////////////////// + + ADDRESS_SPACE axi_bram_0_combined RAMB16 [0x4A000000:0x4A00FFFF] + BUS_BLOCK + system_i/axi_bram_0/axi_bram_0/ramb16bwer_0 [31:31] INPUT = axi_bram_0_combined_0.mem PLACED = X2Y54; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_1 [30:30] INPUT = axi_bram_0_combined_1.mem PLACED = X2Y50; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_2 [29:29] INPUT = axi_bram_0_combined_2.mem PLACED = X3Y52; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_3 [28:28] INPUT = axi_bram_0_combined_3.mem PLACED = X2Y52; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_4 [27:27] INPUT = axi_bram_0_combined_4.mem PLACED = X3Y46; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_5 [26:26] INPUT = axi_bram_0_combined_5.mem PLACED = X2Y48; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_6 [25:25] INPUT = axi_bram_0_combined_6.mem PLACED = X3Y48; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_7 [24:24] INPUT = axi_bram_0_combined_7.mem PLACED = X3Y50; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_8 [23:23] INPUT = axi_bram_0_combined_8.mem PLACED = X3Y42; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_9 [22:22] INPUT = axi_bram_0_combined_9.mem PLACED = X3Y44; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_10 [21:21] INPUT = axi_bram_0_combined_10.mem PLACED = X2Y44; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_11 [20:20] INPUT = axi_bram_0_combined_11.mem PLACED = X2Y42; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_12 [19:19] INPUT = axi_bram_0_combined_12.mem PLACED = X3Y38; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_13 [18:18] INPUT = axi_bram_0_combined_13.mem PLACED = X3Y40; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_14 [17:17] INPUT = axi_bram_0_combined_14.mem PLACED = X3Y36; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_15 [16:16] INPUT = axi_bram_0_combined_15.mem PLACED = X3Y34; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_16 [15:15] INPUT = axi_bram_0_combined_16.mem PLACED = X2Y36; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_17 [14:14] INPUT = axi_bram_0_combined_17.mem PLACED = X1Y40; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_18 [13:13] INPUT = axi_bram_0_combined_18.mem PLACED = X2Y40; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_19 [12:12] INPUT = axi_bram_0_combined_19.mem PLACED = X2Y38; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_20 [11:11] INPUT = axi_bram_0_combined_20.mem PLACED = X1Y38; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_21 [10:10] INPUT = axi_bram_0_combined_21.mem PLACED = X0Y32; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_22 [9:9] INPUT = axi_bram_0_combined_22.mem PLACED = X0Y34; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_23 [8:8] INPUT = axi_bram_0_combined_23.mem PLACED = X1Y36; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_24 [7:7] INPUT = axi_bram_0_combined_24.mem PLACED = X0Y36; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_25 [6:6] INPUT = axi_bram_0_combined_25.mem PLACED = X1Y42; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_26 [5:5] INPUT = axi_bram_0_combined_26.mem PLACED = X0Y38; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_27 [4:4] INPUT = axi_bram_0_combined_27.mem PLACED = X0Y40; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_28 [3:3] INPUT = axi_bram_0_combined_28.mem PLACED = X0Y46; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_29 [2:2] INPUT = axi_bram_0_combined_29.mem PLACED = X1Y46; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_30 [1:1] INPUT = axi_bram_0_combined_30.mem PLACED = X1Y44; + system_i/axi_bram_0/axi_bram_0/ramb16bwer_31 [0:0] INPUT = axi_bram_0_combined_31.mem PLACED = X0Y44; + END_BUS_BLOCK; + END_ADDRESS_SPACE; + +END_ADDRESS_MAP; + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.cproject b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.cproject new file mode 100644 index 000000000..f8a5e99b8 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.cproject @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.project b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.project new file mode 100644 index 000000000..caf9d0e9a --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.project @@ -0,0 +1,77 @@ + + + RTOSDemoBSP + + + HardwareWithEthernet + + + + org.eclipse.cdt.make.core.makeBuilder + clean,full,incremental, + + + org.eclipse.cdt.core.errorOutputParser + org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.MakeErrorParser; + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.build.arguments + + + + org.eclipse.cdt.make.core.build.command + make + + + org.eclipse.cdt.make.core.build.target.auto + all + + + org.eclipse.cdt.make.core.build.target.clean + clean + + + org.eclipse.cdt.make.core.build.target.inc + all + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.enabledIncrementalBuild + true + + + org.eclipse.cdt.make.core.environment + + + + org.eclipse.cdt.make.core.stopOnError + false + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + + com.xilinx.sdk.sw.SwProjectNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.make.core.makeNature + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.sdkproject b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.sdkproject new file mode 100644 index 000000000..d75738c3f --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/.sdkproject @@ -0,0 +1,3 @@ +THIRPARTY=false +PROCESSOR=microblaze_0 +MSS_FILE=system.mss diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/Makefile b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/Makefile new file mode 100644 index 000000000..fe2a0efc7 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/Makefile @@ -0,0 +1,21 @@ +# Makefile generated by Xilinx SDK. + +-include libgen.options + +LIBRARIES = ${PROCESSOR}/lib/libxil.a +MSS = system.mss + +all: libs + @echo 'Finished building libraries' + +libs: $(LIBRARIES) + +$(LIBRARIES): $(MSS) + libgen -hw ${HWSPEC}\ + ${REPOSITORIES}\ + -pe ${PROCESSOR} \ + -log libgen.log \ + $(MSS) + +clean: + rm -rf ${PROCESSOR} diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.log b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.log new file mode 100644 index 000000000..9e9b6c8aa --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.log @@ -0,0 +1,20 @@ +Release 13.1 - libgen Xilinx EDK 13.1 Build EDK_O.40d + (nt) +Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. + +Command Line: libgen -hw ../HardwareWithEthernet/system.xml -pe microblaze_0 +-log libgen.log system.mss + + +Staging source files. +Running DRCs. +Running generate. +Running post_generate. +Running include - 'make -s include "COMPILER=mb-gcc" "ARCHIVER=mb-ar" +"COMPILER_FLAGS=-mlittle-endian -mno-xl-soft-mul -mxl-barrel-shift +-mxl-pattern-compare -mcpu=v8.20.a -O2 -c" "EXTRA_COMPILER_FLAGS=-g"'. + +Running libs - 'make -s libs "COMPILER=mb-gcc" "ARCHIVER=mb-ar" +"COMPILER_FLAGS=-mlittle-endian -mno-xl-soft-mul -mxl-barrel-shift +-mxl-pattern-compare -mcpu=v8.20.a -O2 -c" "EXTRA_COMPILER_FLAGS=-g"'. +Running execs_generate. diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.options b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.options new file mode 100644 index 000000000..5d2dc11e3 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/libgen.options @@ -0,0 +1,3 @@ +PROCESSOR=microblaze_0 +REPOSITORIES= +HWSPEC=../HardwareWithEthernet/system.xml diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/system.mss b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/system.mss new file mode 100644 index 000000000..1953429dd --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoBSP/system.mss @@ -0,0 +1,123 @@ + + PARAMETER VERSION = 2.2.0 + + +BEGIN OS + PARAMETER OS_NAME = standalone + PARAMETER OS_VER = 3.01.a + PARAMETER PROC_INSTANCE = microblaze_0 + PARAMETER STDIN = Debug_Module + PARAMETER STDOUT = Debug_Module +END + + +BEGIN PROCESSOR + PARAMETER DRIVER_NAME = cpu + PARAMETER DRIVER_VER = 1.13.a + PARAMETER HW_INSTANCE = microblaze_0 +END + + +BEGIN DRIVER + PARAMETER DRIVER_NAME = axidma + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = AXI_DMA_Ethernet +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = s6_ddrx + PARAMETER DRIVER_VER = 1.00.a + PARAMETER HW_INSTANCE = DDR3_SDRAM +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = gpio + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = DIP_Switches_4Bit +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = uartlite + PARAMETER DRIVER_VER = 2.00.a + PARAMETER HW_INSTANCE = Debug_Module +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = tmrctr + PARAMETER DRIVER_VER = 2.03.a + PARAMETER HW_INSTANCE = Dual_Timer_Counter +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = emc + PARAMETER DRIVER_VER = 3.01.a + PARAMETER HW_INSTANCE = FLASH +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = iic + PARAMETER DRIVER_VER = 2.02.a + PARAMETER HW_INSTANCE = IIC_EEPROM +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = bram + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = Internal_BRAM +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = intc + PARAMETER DRIVER_VER = 2.02.a + PARAMETER HW_INSTANCE = Interrupt_Cntlr +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = gpio + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = LEDs_4Bit +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = bram + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = LocalMemory_Cntlr_D +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = bram + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = LocalMemory_Cntlr_I +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = gpio + PARAMETER DRIVER_VER = 3.00.a + PARAMETER HW_INSTANCE = Push_Buttons_4Bit +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = uartns550 + PARAMETER DRIVER_VER = 2.00.a + PARAMETER HW_INSTANCE = RS232_Uart_1 +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = spi + PARAMETER DRIVER_VER = 3.01.a + PARAMETER HW_INSTANCE = SPI_FLASH +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = axiethernet + PARAMETER DRIVER_VER = 1.01.a + PARAMETER HW_INSTANCE = Soft_Ethernet_MAC +END + +BEGIN DRIVER + PARAMETER DRIVER_NAME = sysace + PARAMETER DRIVER_VER = 2.00.a + PARAMETER HW_INSTANCE = SysACE_CompactFlash +END + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.cproject b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.cproject new file mode 100644 index 000000000..3d78ded57 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.cproject @@ -0,0 +1,1985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.project b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.project new file mode 100644 index 000000000..40ea64679 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/.project @@ -0,0 +1,82 @@ + + + RTOSDemoSource + RTOSDemoBSP - microblaze_0 + + RTOSDemoBSP + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/RTOSDemoSource/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + true + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk new file mode 100644 index 000000000..058cef715 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk @@ -0,0 +1,12 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +O_SRCS += \ +../Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/port.o \ +../Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/portasm.o + + +# Each subdirectory must supply rules for building sources it contributes + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk new file mode 100644 index 000000000..fefa53f1d --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk @@ -0,0 +1,11 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +O_SRCS += \ +../Debug/FreeRTOS_Source/portable/MemMang/heap_2.o + + +# Each subdirectory must supply rules for building sources it contributes + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/subdir.mk new file mode 100644 index 000000000..af2acbdcd --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/FreeRTOS_Source/subdir.mk @@ -0,0 +1,14 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +O_SRCS += \ +../Debug/FreeRTOS_Source/list.o \ +../Debug/FreeRTOS_Source/queue.o \ +../Debug/FreeRTOS_Source/tasks.o \ +../Debug/FreeRTOS_Source/timers.o + + +# Each subdirectory must supply rules for building sources it contributes + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/src/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/src/subdir.mk new file mode 100644 index 000000000..2aa30b4f7 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/src/subdir.mk @@ -0,0 +1,20 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +O_SRCS += \ +../Debug/src/testperiph.o \ +../Debug/src/xemaclite_example_util.o \ +../Debug/src/xemaclite_intr_example.o \ +../Debug/src/xemaclite_polled_example.o \ +../Debug/src/xgpio_intr_tapp_example.o \ +../Debug/src/xgpio_tapp_example.o \ +../Debug/src/xintc_tapp_example.o \ +../Debug/src/xtmrctr_intr_example.o \ +../Debug/src/xtmrctr_selftest_example.o \ +../Debug/src/xuartlite_selftest_example.o + + +# Each subdirectory must supply rules for building sources it contributes + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/subdir.mk new file mode 100644 index 000000000..a902c61c1 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/Debug/subdir.mk @@ -0,0 +1,12 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +O_SRCS += \ +../Debug/ParTest.o \ +../Debug/main-blinky.o + + +# Each subdirectory must supply rules for building sources it contributes + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/makefile b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/makefile new file mode 100644 index 000000000..0b174705c --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/makefile @@ -0,0 +1,72 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include subdir.mk +-include src/subdir.mk +-include Debug/src/subdir.mk +-include Debug/subdir.mk +-include Debug/FreeRTOS_Source/subdir.mk +-include Debug/FreeRTOS_Source/portable/MemMang/subdir.mk +-include Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +ifneq ($(strip $(S_UPPER_DEPS)),) +-include $(S_UPPER_DEPS) +endif +endif + +-include ../makefile.defs + +# Add inputs and outputs from these tool invocations to the build variables +ELFSIZE += \ +RTOSDemoSource.elf.size \ + +ELFCHECK += \ +RTOSDemoSource.elf.elfcheck \ + + +# All Target +all: RTOSDemoSource.elf secondary-outputs + +# Tool invocations +RTOSDemoSource.elf: $(OBJS) ../src/lscript.ld $(USER_OBJS) + @echo Building target: $@ + @echo Invoking: MicroBlaze gcc linker + mb-gcc -Wl,-T -Wl,../src/lscript.ld -L../../RTOSDemoBSP/microblaze_0/lib -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -o"RTOSDemoSource.elf" $(OBJS) $(USER_OBJS) $(LIBS) + @echo Finished building target: $@ + @echo ' ' + +RTOSDemoSource.elf.size: RTOSDemoSource.elf + @echo Invoking: MicroBlaze Print Size + mb-size RTOSDemoSource.elf |tee "RTOSDemoSource.elf.size" + @echo Finished building: $@ + @echo ' ' + +RTOSDemoSource.elf.elfcheck: RTOSDemoSource.elf + @echo Invoking: Xilinx ELF Check + elfcheck RTOSDemoSource.elf -hw ../../HardwareWithEthernetLite/system.xml -pe microblaze_0 |tee "RTOSDemoSource.elf.elfcheck" + @echo Finished building: $@ + @echo ' ' + +# Other Targets +clean: + -$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES)$(ELFSIZE)$(ELFCHECK)$(S_UPPER_DEPS) RTOSDemoSource.elf + -@echo ' ' + +secondary-outputs: $(ELFSIZE) $(ELFCHECK) + +.PHONY: all clean dependents +.SECONDARY: + +-include ../makefile.targets diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/objects.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/objects.mk new file mode 100644 index 000000000..dc31e16c6 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/objects.mk @@ -0,0 +1,8 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/sources.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/sources.mk new file mode 100644 index 000000000..8f020319e --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/sources.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +O_SRCS := +C_SRCS := +LD_SRCS := +S_UPPER_SRCS := +S_SRCS := +OBJ_SRCS := +OBJS := +C_DEPS := +EXECUTABLES := +ELFSIZE := +ELFCHECK := +S_UPPER_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +src \ +. \ +Debug/src \ +Debug \ +Debug/FreeRTOS_Source \ +Debug/FreeRTOS_Source/portable/MemMang \ +Debug/FreeRTOS_Source/portable/GCC/MicroBlaze \ + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/src/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/src/subdir.mk new file mode 100644 index 000000000..d90434bae --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/src/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/xemaclite_example_util.c + +LD_SRCS += \ +../src/lscript.ld + +OBJS += \ +./src/xemaclite_example_util.o + +C_DEPS += \ +./src/xemaclite_example_util.d + + +# Each subdirectory must supply rules for building sources it contributes +src/%.o: ../src/%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource\lwIP\lwIP_Apps\apps\httpserver_raw" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource\lwIP\lwIP_Apps" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/subdir.mk new file mode 100644 index 000000000..a955d86c9 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Blilnky/subdir.mk @@ -0,0 +1,24 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../main-blinky.c + +OBJS += \ +./main-blinky.o + +C_DEPS += \ +./main-blinky.d + + +# Each subdirectory must supply rules for building sources it contributes +%.o: ../%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource\lwIP\lwIP_Apps\apps\httpserver_raw" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_Ethernet\RTOSDemoSource\lwIP\lwIP_Apps" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/CreateProjectDirectoryStructure.bat b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/CreateProjectDirectoryStructure.bat new file mode 100644 index 000000000..6c5b434d2 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/CreateProjectDirectoryStructure.bat @@ -0,0 +1,92 @@ +REM This file should be executed from the command line prior to the first +REM build. It will be necessary to refresh the Eclipse project once the +REM .bat file has been executed (normally just press F5 to refresh). + +REM Copies all the required files from their location within the standard +REM FreeRTOS directory structure to under the Eclipse project directory. +REM This permits the Eclipse project to be used in 'managed' mode and without +REM having to setup any linked resources. + +REM Have the files already been copied? +IF EXIST FreeRTOS_Source Goto END + + REM Create the required directory structure. + MD FreeRTOS_Source + MD FreeRTOS_Source\include + MD FreeRTOS_Source\portable\GCC + MD FreeRTOS_Source\portable\GCC\MicroBlazeV8 + MD FreeRTOS_Source\portable\MemMang + MD Demo_Source + MD Demo_Source\include + MD lwIP\api + MD lwIP\core + MD lwIP\core\ipv4 + MD lwIP\include + MD lwIP\include\ipv4 + MD lwIP\include\ipv4\lwip + MD lwIP\include\lwip + MD lwIP\include\netif + MD lwIP\netif + MD lwIP\netif\include + MD lwIP\netif\include\arch + + REM Copy the core kernel files. + copy ..\..\..\..\Source\tasks.c FreeRTOS_Source + copy ..\..\..\..\Source\queue.c FreeRTOS_Source + copy ..\..\..\..\Source\list.c FreeRTOS_Source + copy ..\..\..\..\Source\timers.c FreeRTOS_Source + + REM Copy the common header files + copy ..\..\..\..\Source\include\*.* FreeRTOS_Source\include + + REM Copy the portable layer files + copy ..\..\..\..\Source\portable\GCC\MicroBlazeV8\*.* FreeRTOS_Source\portable\GCC\MicroBlazeV8 + + REM Copy the basic memory allocation files + copy ..\..\..\..\Source\portable\MemMang\heap_2.c FreeRTOS_Source\portable\MemMang + + REM Copy the files that define the common demo tasks. + copy ..\..\..\Common\minimal\dynamic.c Demo_Source + copy ..\..\..\Common\minimal\BlockQ.c Demo_Source + copy ..\..\..\Common\minimal\death.c Demo_Source + copy ..\..\..\Common\minimal\blocktim.c Demo_Source + copy ..\..\..\Common\minimal\semtest.c Demo_Source + copy ..\..\..\Common\minimal\PollQ.c Demo_Source + copy ..\..\..\Common\minimal\GenQTest.c Demo_Source + copy ..\..\..\Common\minimal\QPeek.c Demo_Source + copy ..\..\..\Common\minimal\recmutex.c Demo_Source + copy ..\..\..\Common\minimal\sp_flop.c Demo_Source + copy ..\..\..\Common\minimal\flash.c Demo_Source + copy ..\..\..\Common\minimal\comtest_strings.c Demo_Source + copy ..\..\..\Common\minimal\TimerDemo.c Demo_Source + + REM Copy the common demo file headers. + copy ..\..\..\Common\include\dynamic.h Demo_Source\include + copy ..\..\..\Common\include\partest.h Demo_Source\include + copy ..\..\..\Common\include\BlockQ.h Demo_Source\include + copy ..\..\..\Common\include\death.h Demo_Source\include + copy ..\..\..\Common\include\blocktim.h Demo_Source\include + copy ..\..\..\Common\include\semtest.h Demo_Source\include + copy ..\..\..\Common\include\PollQ.h Demo_Source\include + copy ..\..\..\Common\include\GenQTest.h Demo_Source\include + copy ..\..\..\Common\include\QPeek.h Demo_Source\include + copy ..\..\..\Common\include\recmutex.h Demo_Source\include + copy ..\..\..\Common\include\flop.h Demo_Source\include + copy ..\..\..\Common\include\flash.h Demo_Source\include + copy ..\..\..\Common\include\comtest_strings.h Demo_Source\include + copy ..\..\..\Common\include\serial.h Demo_Source\include + copy ..\..\..\Common\include\comtest.h Demo_Source\include + copy ..\..\..\Common\include\TimerDemo.h Demo_Source\include + + REM Copy the required lwIP files + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\api\*.c lwIP\api + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\core\*.c lwIP\core + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\core\ipv4\*.c lwIP\core\ipv4 + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\*.h lwIP\include\ipv4\lwip + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\include\lwip\*.h lwIP\include\lwip + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\include\netif\*.h lwIP\include\netif + copy ..\..\..\Common\ethernet\lwip-1.4.0\src\netif\etharp.c lwIP\netif + copy ..\..\..\Common\ethernet\lwip-1.4.0\ports\MicroBlaze-Ethernet-Lite lwip\netif + copy ..\..\..\Common\ethernet\lwip-1.4.0\ports\MicroBlaze-Ethernet-Lite\include\arch lwip\netif\include\arch + +: END diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/list.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/list.d new file mode 100644 index 000000000..5369730ef --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/list.d @@ -0,0 +1,28 @@ +FreeRTOS_Source/list.d FreeRTOS_Source/list.o: ../FreeRTOS_Source/list.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/port.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/port.d new file mode 100644 index 000000000..fee068dbb --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/port.d @@ -0,0 +1,72 @@ +FreeRTOS_Source/portable/GCC/MicroBlaze/port.d \ + FreeRTOS_Source/portable/GCC/MicroBlaze/port.o: \ + ../FreeRTOS_Source/portable/GCC/MicroBlaze/port.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc_i.h \ + ../../RTOSDemoBSP/microblaze_0/include/xintc.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h \ + ../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_exception.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc_i.h: + +../../RTOSDemoBSP/microblaze_0/include/xintc.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr.h: + +../../RTOSDemoBSP/microblaze_0/include/xtmrctr_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_exception.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk new file mode 100644 index 000000000..e831ef5ad --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/GCC/MicroBlaze/subdir.mk @@ -0,0 +1,35 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../FreeRTOS_Source/portable/GCC/MicroBlaze/port.c + +S_SRCS += \ +../FreeRTOS_Source/portable/GCC/MicroBlaze/portasm.s + +OBJS += \ +./FreeRTOS_Source/portable/GCC/MicroBlaze/port.o \ +./FreeRTOS_Source/portable/GCC/MicroBlaze/portasm.o + +C_DEPS += \ +./FreeRTOS_Source/portable/GCC/MicroBlaze/port.d + + +# Each subdirectory must supply rules for building sources it contributes +FreeRTOS_Source/portable/GCC/MicroBlaze/%.o: ../FreeRTOS_Source/portable/GCC/MicroBlaze/%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\Demo_Source\Common_Demo_Files\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\portable\GCC\MicroBlaze" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + +FreeRTOS_Source/portable/GCC/MicroBlaze/%.o: ../FreeRTOS_Source/portable/GCC/MicroBlaze/%.s + @echo Building file: $< + @echo Invoking: MicroBlaze gcc assembler + mb-as -mlittle-endian -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/heap_2.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/heap_2.d new file mode 100644 index 000000000..c87ff28e1 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/heap_2.d @@ -0,0 +1,33 @@ +FreeRTOS_Source/portable/MemMang/heap_2.d \ + FreeRTOS_Source/portable/MemMang/heap_2.o: \ + ../FreeRTOS_Source/portable/MemMang/heap_2.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk new file mode 100644 index 000000000..608d2fac8 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/portable/MemMang/subdir.mk @@ -0,0 +1,24 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../FreeRTOS_Source/portable/MemMang/heap_2.c + +OBJS += \ +./FreeRTOS_Source/portable/MemMang/heap_2.o + +C_DEPS += \ +./FreeRTOS_Source/portable/MemMang/heap_2.d + + +# Each subdirectory must supply rules for building sources it contributes +FreeRTOS_Source/portable/MemMang/%.o: ../FreeRTOS_Source/portable/MemMang/%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\Demo_Source\Common_Demo_Files\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\portable\GCC\MicroBlaze" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/queue.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/queue.d new file mode 100644 index 000000000..50ad56f91 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/queue.d @@ -0,0 +1,35 @@ +FreeRTOS_Source/queue.d FreeRTOS_Source/queue.o: \ + ../FreeRTOS_Source/queue.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/croutine.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/croutine.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/subdir.mk b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/subdir.mk new file mode 100644 index 000000000..5bdf41d1d --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/subdir.mk @@ -0,0 +1,33 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../FreeRTOS_Source/list.c \ +../FreeRTOS_Source/queue.c \ +../FreeRTOS_Source/tasks.c \ +../FreeRTOS_Source/timers.c + +OBJS += \ +./FreeRTOS_Source/list.o \ +./FreeRTOS_Source/queue.o \ +./FreeRTOS_Source/tasks.o \ +./FreeRTOS_Source/timers.o + +C_DEPS += \ +./FreeRTOS_Source/list.d \ +./FreeRTOS_Source/queue.d \ +./FreeRTOS_Source/tasks.d \ +./FreeRTOS_Source/timers.d + + +# Each subdirectory must supply rules for building sources it contributes +FreeRTOS_Source/%.o: ../FreeRTOS_Source/%.c + @echo Building file: $< + @echo Invoking: MicroBlaze gcc compiler + mb-gcc -Wall -O0 -g3 -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\Demo_Source\Common_Demo_Files\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\include" -I"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\MicroBlaze_Spartan-6_EthernetLite\SDKProjects\RTOSDemoSource\FreeRTOS_Source\portable\GCC\MicroBlaze" -c -fmessage-length=0 -I../../RTOSDemoBSP/microblaze_0/include -mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-soft-div -mcpu=v8.10.a -mno-xl-soft-mul -mhard-float -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + @echo Finished building: $< + @echo ' ' + + diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/tasks.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/tasks.d new file mode 100644 index 000000000..12be85ccc --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/tasks.d @@ -0,0 +1,38 @@ +FreeRTOS_Source/tasks.d FreeRTOS_Source/tasks.o: \ + ../FreeRTOS_Source/tasks.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/StackMacros.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/StackMacros.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/timers.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/timers.d new file mode 100644 index 000000000..c063ba07e --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/FreeRTOS_Source/timers.d @@ -0,0 +1,38 @@ +FreeRTOS_Source/timers.d FreeRTOS_Source/timers.o: \ + ../FreeRTOS_Source/timers.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/queue.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/task.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/list.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/queue.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/timers.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/ParTest.d b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/ParTest.d new file mode 100644 index 000000000..da602ab54 --- /dev/null +++ b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/ParTest.d @@ -0,0 +1,49 @@ +ParTest.d ParTest.o: ../ParTest.c \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h \ + ../../RTOSDemoBSP/microblaze_0/include/xparameters.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h \ + C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/Demo_Source/Common_Demo_Files/include/partest.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_assert.h \ + ../../RTOSDemoBSP/microblaze_0/include/xstatus.h \ + ../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h \ + ../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h \ + ../../RTOSDemoBSP/microblaze_0/include/xil_io.h + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/FreeRTOS.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/projdefs.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOSConfig.h: + +../../RTOSDemoBSP/microblaze_0/include/xparameters.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/portable.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/portable/GCC/MicroBlaze/portmacro.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/FreeRTOS_Source/include/mpu_wrappers.h: + +C:/E/Dev/FreeRTOS/WorkingCopy/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemoSource/Demo_Source/Common_Demo_Files/include/partest.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_assert.h: + +../../RTOSDemoBSP/microblaze_0/include/xstatus.h: + +../../RTOSDemoBSP/microblaze_0/include/xbasic_types.h: + +../../RTOSDemoBSP/microblaze_0/include/xgpio_l.h: + +../../RTOSDemoBSP/microblaze_0/include/xil_io.h: diff --git a/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf b/Demo/MicroBlaze_Spartan-6_Ethernet/RTOSDemoSource/Debug/RTOSDemoSource.elf new file mode 100644 index 0000000000000000000000000000000000000000..13c299295379b541a5d9474b977197b2fa35a309 GIT binary patch literal 1576492 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 z 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