From 2881d35680acb4b6292cc3adfab505d4f0dbbd86 Mon Sep 17 00:00:00 2001 From: pcem_emulator Date: Sun, 30 Jul 2017 10:39:27 +0100 Subject: [PATCH] Changes to wxWidgets/SDL2 port : - Updated UI - OpenGL 3.0 with GLSL/GLSLP-support - Improvements to Windows version - Minor changes/bugfixes Patch from bit. --- configure | 100 +- configure.ac | 8 +- src/Makefile.am | 5 +- src/Makefile.in | 454 +- src/Makefile.linux32-wx-sdl2 | 11 +- src/Makefile.linux64-wx-sdl2 | 13 +- src/Makefile.mingw-wx-sdl2 | 35 +- src/Makefile.osx64-wx-sdl2 | 6 +- src/cdrom-ioctl-linux.c | 1 + src/cdrom-ioctl-osx.c | 2 + src/config.c | 76 + src/config.h | 6 +- src/hdd.c | 11 +- src/hdd.h | 1 + src/icons/16x16/cd.png | Bin 0 -> 835 bytes src/icons/16x16/computer_add.png | Bin 0 -> 783 bytes src/icons/16x16/computer_delete.png | Bin 0 -> 774 bytes src/icons/16x16/computer_edit.png | Bin 0 -> 798 bytes src/icons/16x16/control_eject.png | Bin 0 -> 685 bytes src/icons/16x16/control_play_blue.png | Bin 0 -> 742 bytes src/icons/16x16/diskette.png | Bin 0 -> 730 bytes src/icons/16x16/door_out.png | Bin 0 -> 763 bytes src/icons/16x16/drive.png | Bin 0 -> 430 bytes src/icons/16x16/drive_add.png | Bin 0 -> 634 bytes src/icons/16x16/folder.png | Bin 0 -> 632 bytes src/icons/16x16/setting_tools.png | Bin 0 -> 1017 bytes src/icons/24x24/pause.png | Bin 0 -> 635 bytes src/icons/24x24/play.png | Bin 0 -> 758 bytes src/icons/24x24/refresh.png | Bin 0 -> 1144 bytes src/icons/24x24/stop.png | Bin 0 -> 622 bytes src/icons/32x32/add.png | Bin 0 -> 1815 bytes src/icons/32x32/computer_add.png | Bin 0 -> 2051 bytes src/icons/32x32/computer_delete.png | Bin 0 -> 2051 bytes src/icons/32x32/computer_edit.png | Bin 0 -> 2007 bytes src/icons/32x32/control_play_blue.png | Bin 0 -> 1971 bytes src/icons/32x32/delete.png | Bin 0 -> 1886 bytes src/icons/32x32/door_in.png | Bin 0 -> 1382 bytes src/icons/32x32/door_out.png | Bin 0 -> 1394 bytes src/icons/32x32/drive.png | Bin 0 -> 869 bytes src/icons/32x32/motherboard.png | Bin 0 -> 1852 bytes src/icons/32x32/mouse_pc.png | Bin 0 -> 1507 bytes src/icons/32x32/setting_tools.png | Bin 0 -> 2315 bytes src/icons/32x32/sound.png | Bin 0 -> 1855 bytes src/icons/32x32/textfield_rename.png | Bin 0 -> 856 bytes src/icons/32x32/video_mode.png | Bin 0 -> 1751 bytes src/icons/svg/pause.svg | 43 + src/icons/svg/play-button.svg | 41 + src/icons/svg/refresh.svg | 50 + src/icons/svg/stop.svg | 39 + src/paths.c | 25 + src/paths.h | 3 + src/pc.c | 2 + src/pc.xrc | 3341 ++++++---- src/video.c | 3 + src/video.h | 2 +- src/wx-app.cc | 22 +- src/wx-app.h | 46 +- src/wx-config.c | 1456 ++++- src/wx-config_sel.c | 202 +- src/wx-deviceconfig.cc | 239 +- src/wx-dialogbox.cc | 47 +- src/wx-dialogbox.h | 5 +- src/wx-display.h | 1 + src/wx-glsl.h | 155 + src/wx-glslp-parser.c | 328 + src/wx-glslp-parser.h | 54 + src/wx-resources.cpp | 8734 +++++++++++++++++-------- src/wx-sdl2-display-win.c | 984 +++ src/wx-sdl2-display.c | 102 +- src/wx-sdl2-glw.h | 92 + src/wx-sdl2-hdconf.c | 961 --- src/wx-sdl2-keyboard.c | 2 +- src/wx-sdl2-midi.c | 9 + src/wx-sdl2-mouse.c | 3 +- src/wx-sdl2-status.c | 3 +- src/wx-sdl2-video-gl3.c | 1656 +++++ src/wx-sdl2-video-gl3.h | 3 + src/wx-sdl2-video-renderer.c | 180 + src/wx-sdl2-video-renderer.h | 3 + src/wx-sdl2-video.c | 110 +- src/wx-sdl2-video.h | 32 +- src/wx-sdl2.c | 360 +- src/wx-sdl2.h | 2 + src/wx-shader_man.c | 230 + src/wx-shaderconfig.cc | 146 + src/wx-shaderconfig.h | 13 + src/wx-status.cc | 8 +- src/wx-utils.cc | 301 +- src/wx-utils.h | 43 +- src/wx.rc | 1 + 90 files changed, 15251 insertions(+), 5560 deletions(-) create mode 100644 src/icons/16x16/cd.png create mode 100644 src/icons/16x16/computer_add.png create mode 100644 src/icons/16x16/computer_delete.png create mode 100644 src/icons/16x16/computer_edit.png create mode 100644 src/icons/16x16/control_eject.png create mode 100644 src/icons/16x16/control_play_blue.png create mode 100644 src/icons/16x16/diskette.png create mode 100644 src/icons/16x16/door_out.png create mode 100644 src/icons/16x16/drive.png create mode 100644 src/icons/16x16/drive_add.png create mode 100644 src/icons/16x16/folder.png create mode 100644 src/icons/16x16/setting_tools.png create mode 100644 src/icons/24x24/pause.png create mode 100644 src/icons/24x24/play.png create mode 100644 src/icons/24x24/refresh.png create mode 100644 src/icons/24x24/stop.png create mode 100644 src/icons/32x32/add.png create mode 100644 src/icons/32x32/computer_add.png create mode 100644 src/icons/32x32/computer_delete.png create mode 100644 src/icons/32x32/computer_edit.png create mode 100644 src/icons/32x32/control_play_blue.png create mode 100644 src/icons/32x32/delete.png create mode 100644 src/icons/32x32/door_in.png create mode 100644 src/icons/32x32/door_out.png create mode 100644 src/icons/32x32/drive.png create mode 100644 src/icons/32x32/motherboard.png create mode 100644 src/icons/32x32/mouse_pc.png create mode 100644 src/icons/32x32/setting_tools.png create mode 100644 src/icons/32x32/sound.png create mode 100644 src/icons/32x32/textfield_rename.png create mode 100644 src/icons/32x32/video_mode.png create mode 100644 src/icons/svg/pause.svg create mode 100644 src/icons/svg/play-button.svg create mode 100644 src/icons/svg/refresh.svg create mode 100644 src/icons/svg/stop.svg create mode 100644 src/wx-glsl.h create mode 100644 src/wx-glslp-parser.c create mode 100644 src/wx-glslp-parser.h create mode 100644 src/wx-sdl2-display-win.c create mode 100644 src/wx-sdl2-glw.h delete mode 100644 src/wx-sdl2-hdconf.c create mode 100644 src/wx-sdl2-video-gl3.c create mode 100644 src/wx-sdl2-video-gl3.h create mode 100644 src/wx-sdl2-video-renderer.c create mode 100644 src/wx-sdl2-video-renderer.h create mode 100644 src/wx-shader_man.c create mode 100644 src/wx-shaderconfig.cc create mode 100644 src/wx-shaderconfig.h create mode 100644 src/wx.rc diff --git a/configure b/configure index 7f12c5e..632f62a 100755 --- a/configure +++ b/configure @@ -4495,7 +4495,7 @@ rm -f core conftest.err conftest.$ac_objext \ fi else - SDL_VERSION=2.0.0 + SDL_VERSION=2.0.1 @@ -5265,6 +5265,55 @@ $as_echo "no (version $WX_VERSION is not new enough)" >&6; } wxWidgets version is $reqwx or above. " "$LINENO" 5 fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glGetError in -lGL" >&5 +$as_echo_n "checking for glGetError in -lGL... " >&6; } +if ${ac_cv_lib_GL_glGetError+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char glGetError (); +int +main () +{ +return glGetError (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_GL_glGetError=yes +else + ac_cv_lib_GL_glGetError=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glGetError" >&5 +$as_echo "$ac_cv_lib_GL_glGetError" >&6; } +if test "x$ac_cv_lib_GL_glGetError" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGL 1 +_ACEOF + + LIBS="-lGL $LIBS" + +else + \ + echo "You need to install the OpenGL library." + exit -1 +fi + LIBS="$LIBS $WX_LIBS $SDL_LIBS" fi @@ -5317,55 +5366,6 @@ else exit -1 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alutInit in -lalut" >&5 -$as_echo_n "checking for alutInit in -lalut... " >&6; } -if ${ac_cv_lib_alut_alutInit+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lalut $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char alutInit (); -int -main () -{ -return alutInit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_alut_alutInit=yes -else - ac_cv_lib_alut_alutInit=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_alut_alutInit" >&5 -$as_echo "$ac_cv_lib_alut_alutInit" >&6; } -if test "x$ac_cv_lib_alut_alutInit" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBALUT 1 -_ACEOF - - LIBS="-lalut $LIBS" - -else - \ - echo "You need to install the ALUT library." - exit -1 -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } diff --git a/configure.ac b/configure.ac index 2d95478..449d532 100644 --- a/configure.ac +++ b/configure.ac @@ -70,7 +70,7 @@ if test "$enable_wx" != "yes"; then AM_PATH_ALLEGRO(, , AC_MSG_ERROR(building PCem requires Allegro to be installed)) fi else - SDL_VERSION=2.0.0 + SDL_VERSION=2.0.1 AM_PATH_SDL2($SDL_VERSION, :, AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]) @@ -89,15 +89,15 @@ else wxWidgets version is $reqwx or above. ]) fi + AC_CHECK_LIB([GL], [glGetError], [], \ + [echo "You need to install the OpenGL library." + exit -1]) LIBS="$LIBS $WX_LIBS $SDL_LIBS" fi AC_CHECK_LIB([openal], [alGetError], [], \ [echo "You need to install the OpenAL library." exit -1]) -AC_CHECK_LIB([alut], [alutInit], [], \ - [echo "You need to install the ALUT library." - exit -1]) AC_CHECK_LIB([pthread], [pthread_create]) diff --git a/src/Makefile.am b/src/Makefile.am index 9cf520b..3bd5a14 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -40,8 +40,9 @@ pcem_CXXFLAGS = $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) pcem_LDADD = @LIBS@ pcem_SOURCES += wx-main.cc wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc \ wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c wx-sdl2-video.c wx-sdl2-midi.c \ - wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-sdl2-hdconf.c wx-status.cc wx-sdl2-status.c \ - wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c + wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \ + wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c \ + wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc else pcem_CFLAGS = $(allegro_CFLAGS) -DPCEM_ALLEGRO pcem_LDADD = $(allegro_LIBS) -lopenal diff --git a/src/Makefile.in b/src/Makefile.in index 8db7178..fb3161e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -94,8 +94,9 @@ host_triplet = @host@ bin_PROGRAMS = pcem$(EXEEXT) @USE_WX_TRUE@am__append_1 = wx-main.cc wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc \ @USE_WX_TRUE@ wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c wx-sdl2-video.c wx-sdl2-midi.c \ -@USE_WX_TRUE@ wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-sdl2-hdconf.c wx-status.cc wx-sdl2-status.c \ -@USE_WX_TRUE@ wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c +@USE_WX_TRUE@ wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \ +@USE_WX_TRUE@ wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c \ +@USE_WX_TRUE@ wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc @USE_WX_FALSE@am__append_2 = allegro-gui.c allegro-gui-config-sel.c allegro-gui-configure.c \ @USE_WX_FALSE@ allegro-gui-deviceconfig.c allegro-gui-hdconf.c allegro-joystick.c \ @@ -121,37 +122,39 @@ am__pcem_SOURCES_DIST = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c \ acer386sx.c ali1429.c amstrad.c cdrom-ioctl-linux.c \ cdrom-image.cc cdrom-null.c codegen.c codegen_ops.c \ codegen_timing_486.c codegen_timing_686.c \ - codegen_timing_pentium.c codegen_timing_winchip.c compaq.c \ - config.c cpu.c dac.c dells200.c device.c disc.c disc_fdi.c \ - disc_img.c disc_sector.c dma.c fdc.c fdc37c665.c fdd.c \ - fdi2raw.c gameport.c hdd.c hdd_esdi.c headland.c i430lx.c \ - i430fx.c i430vx.c ide.c intel.c intel_flash.c io.c jim.c \ + codegen_timing_common.c codegen_timing_pentium.c \ + codegen_timing_winchip.c compaq.c config.c cpu.c dac.c \ + dells200.c device.c disc.c disc_fdi.c disc_img.c disc_sector.c \ + dma.c esdi_at.c fdc.c fdc37c665.c fdd.c fdi2raw.c gameport.c \ + hdd.c hdd_esdi.c hdd_file.c headland.c i430lx.c i430fx.c \ + i430vx.c ide.c intel.c intel_flash.c io.c jim.c \ joystick_ch_flightstick_pro.c joystick_standard.c \ joystick_sw_pad.c joystick_tm_fcs.c keyboard.c \ keyboard_amstrad.c keyboard_at.c keyboard_olim24.c \ - keyboard_pcjr.c keyboard_xt.c lpt.c mca.c mcr.c mem.c mfm_at.c \ - mfm_xebec.c model.c mouse.c mouse_ps2.c mouse_serial.c neat.c \ - nmi.c nvr.c olivetti_m24.c opti495.c pc.c pci.c pic.c piix.c \ - pit.c ppi.c ps1.c ps2.c ps2_mca.c ps2_nvr.c rom.c rtc.c scat.c \ - serial.c sis496.c sound.c sound_ad1848.c sound_adlib.c \ - sound_adlibgold.c sound_cms.c sound_emu8k.c sound_gus.c \ - sound_mpu401_uart.c sound_opl.c sound_pas16.c sound_ps1.c \ - sound_pssj.c sound_sb.c sound_sb_dsp.c sound_sn76489.c \ - sound_speaker.c sound_ssi2001.c sound_wss.c sound_ym7128.c \ - soundopenal.c tandy_eeprom.c tandy_rom.c timer.c um8669f.c \ - um8881f.c vid_ati_eeprom.c vid_ati_mach64.c vid_ati18800.c \ - vid_ati28800.c vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c \ - vid_colorplus.c vid_ega.c vid_et4000.c vid_et4000w32.c \ - vid_genius.c vid_hercules.c vid_icd2061.c vid_ics2595.c \ - vid_incolor.c vid_mda.c vid_olivetti_m24.c vid_oti067.c \ - vid_paradise.c vid_pc200.c vid_pc1512.c vid_pc1640.c \ - vid_pcjr.c vid_ps1_svga.c vid_s3.c vid_s3_virge.c \ - vid_sdac_ramdac.c vid_stg_ramdac.c vid_svga.c \ - vid_svga_render.c vid_tandy.c vid_tandysl.c vid_tgui9440.c \ - vid_tkd8001_ramdac.c vid_tvga.c vid_unk_ramdac.c vid_vga.c \ - vid_voodoo.c video.c wd76c10.c vid_wy700.c x86seg.c x87.c \ - xtide.c sound_dbopl.cc sound_resid.cc dosbox/cdrom_image.cpp \ - dosbox/dbopl.cpp dosbox/vid_cga_comp.c resid-fp/convolve.cc \ + keyboard_pcjr.c keyboard_xt.c laserxt.c lpt.c mca.c mcr.c \ + mem.c mfm_at.c mfm_xebec.c model.c mouse.c mouse_ps2.c \ + mouse_serial.c neat.c nmi.c nvr.c olivetti_m24.c opti495.c \ + paths.c pc.c pci.c pic.c piix.c pit.c ppi.c ps1.c ps2.c \ + ps2_mca.c ps2_nvr.c rom.c rtc.c scat.c serial.c sio.c sis496.c \ + sound.c sound_ad1848.c sound_adlib.c sound_adlibgold.c \ + sound_cms.c sound_emu8k.c sound_gus.c sound_mpu401_uart.c \ + sound_opl.c sound_pas16.c sound_ps1.c sound_pssj.c sound_sb.c \ + sound_sb_dsp.c sound_sn76489.c sound_speaker.c sound_ssi2001.c \ + sound_wss.c sound_ym7128.c soundopenal.c tandy_eeprom.c \ + tandy_rom.c timer.c um8669f.c um8881f.c vid_ati_eeprom.c \ + vid_ati_mach64.c vid_ati18800.c vid_ati28800.c \ + vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c vid_colorplus.c \ + vid_ega.c vid_et4000.c vid_et4000w32.c vid_genius.c \ + vid_hercules.c vid_icd2061.c vid_ics2595.c vid_incolor.c \ + vid_mda.c vid_olivetti_m24.c vid_oti067.c vid_paradise.c \ + vid_pc200.c vid_pc1512.c vid_pc1640.c vid_pcjr.c \ + vid_ps1_svga.c vid_s3.c vid_s3_virge.c vid_sdac_ramdac.c \ + vid_stg_ramdac.c vid_svga.c vid_svga_render.c vid_tandy.c \ + vid_tandysl.c vid_tgui9440.c vid_tkd8001_ramdac.c vid_tvga.c \ + vid_unk_ramdac.c vid_vga.c vid_voodoo.c video.c wd76c10.c \ + vid_wy700.c x86seg.c x87.c xtide.c sound_dbopl.cc \ + sound_resid.cc dosbox/cdrom_image.cpp dosbox/dbopl.cpp \ + dosbox/nukedopl.cpp dosbox/vid_cga_comp.c resid-fp/convolve.cc \ resid-fp/convolve-sse.cc resid-fp/envelope.cc \ resid-fp/extfilt.cc resid-fp/filter.cc resid-fp/pot.cc \ resid-fp/sid.cc resid-fp/voice.cc resid-fp/wave6581_PS_.cc \ @@ -162,12 +165,14 @@ am__pcem_SOURCES_DIST = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c \ wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc \ wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c \ wx-sdl2-video.c wx-sdl2-midi.c wx-sdl2.c wx-config.c \ - wx-deviceconfig.cc wx-sdl2-hdconf.c wx-status.cc \ - wx-sdl2-status.c wx-resources.cpp wx-thread.c wx-common.c \ - wx-sdl2-display.c allegro-gui.c allegro-gui-config-sel.c \ - allegro-gui-configure.c allegro-gui-deviceconfig.c \ - allegro-gui-hdconf.c allegro-joystick.c allegro-keyboard.c \ - allegro-main.c allegro-midi.c allegro-mouse.c allegro-video.c \ + wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \ + wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c \ + wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c wx-glslp-parser.c \ + wx-shader_man.c wx-shaderconfig.cc allegro-gui.c \ + allegro-gui-config-sel.c allegro-gui-configure.c \ + allegro-gui-deviceconfig.c allegro-gui-hdconf.c \ + allegro-joystick.c allegro-keyboard.c allegro-main.c \ + allegro-midi.c allegro-mouse.c allegro-video.c \ thread-pthread.c codegen_x86.c codegen_x86-64.c @USE_WX_TRUE@am__objects_1 = pcem-wx-main.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-config_sel.$(OBJEXT) \ @@ -180,12 +185,16 @@ am__pcem_SOURCES_DIST = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c \ @USE_WX_TRUE@ pcem-wx-sdl2-midi.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-sdl2.$(OBJEXT) pcem-wx-config.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-deviceconfig.$(OBJEXT) \ -@USE_WX_TRUE@ pcem-wx-sdl2-hdconf.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-status.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-sdl2-status.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-resources.$(OBJEXT) \ @USE_WX_TRUE@ pcem-wx-thread.$(OBJEXT) pcem-wx-common.$(OBJEXT) \ -@USE_WX_TRUE@ pcem-wx-sdl2-display.$(OBJEXT) +@USE_WX_TRUE@ pcem-wx-sdl2-display.$(OBJEXT) \ +@USE_WX_TRUE@ pcem-wx-sdl2-video-renderer.$(OBJEXT) \ +@USE_WX_TRUE@ pcem-wx-sdl2-video-gl3.$(OBJEXT) \ +@USE_WX_TRUE@ pcem-wx-glslp-parser.$(OBJEXT) \ +@USE_WX_TRUE@ pcem-wx-shader_man.$(OBJEXT) \ +@USE_WX_TRUE@ pcem-wx-shaderconfig.$(OBJEXT) @USE_WX_FALSE@am__objects_2 = pcem-allegro-gui.$(OBJEXT) \ @USE_WX_FALSE@ pcem-allegro-gui-config-sel.$(OBJEXT) \ @USE_WX_FALSE@ pcem-allegro-gui-configure.$(OBJEXT) \ @@ -208,16 +217,18 @@ am_pcem_OBJECTS = pcem-386.$(OBJEXT) pcem-386_dynarec.$(OBJEXT) \ pcem-codegen.$(OBJEXT) pcem-codegen_ops.$(OBJEXT) \ pcem-codegen_timing_486.$(OBJEXT) \ pcem-codegen_timing_686.$(OBJEXT) \ + pcem-codegen_timing_common.$(OBJEXT) \ pcem-codegen_timing_pentium.$(OBJEXT) \ pcem-codegen_timing_winchip.$(OBJEXT) pcem-compaq.$(OBJEXT) \ pcem-config.$(OBJEXT) pcem-cpu.$(OBJEXT) pcem-dac.$(OBJEXT) \ pcem-dells200.$(OBJEXT) pcem-device.$(OBJEXT) \ pcem-disc.$(OBJEXT) pcem-disc_fdi.$(OBJEXT) \ pcem-disc_img.$(OBJEXT) pcem-disc_sector.$(OBJEXT) \ - pcem-dma.$(OBJEXT) pcem-fdc.$(OBJEXT) pcem-fdc37c665.$(OBJEXT) \ - pcem-fdd.$(OBJEXT) pcem-fdi2raw.$(OBJEXT) \ - pcem-gameport.$(OBJEXT) pcem-hdd.$(OBJEXT) \ - pcem-hdd_esdi.$(OBJEXT) pcem-headland.$(OBJEXT) \ + pcem-dma.$(OBJEXT) pcem-esdi_at.$(OBJEXT) pcem-fdc.$(OBJEXT) \ + pcem-fdc37c665.$(OBJEXT) pcem-fdd.$(OBJEXT) \ + pcem-fdi2raw.$(OBJEXT) pcem-gameport.$(OBJEXT) \ + pcem-hdd.$(OBJEXT) pcem-hdd_esdi.$(OBJEXT) \ + pcem-hdd_file.$(OBJEXT) pcem-headland.$(OBJEXT) \ pcem-i430lx.$(OBJEXT) pcem-i430fx.$(OBJEXT) \ pcem-i430vx.$(OBJEXT) pcem-ide.$(OBJEXT) pcem-intel.$(OBJEXT) \ pcem-intel_flash.$(OBJEXT) pcem-io.$(OBJEXT) \ @@ -227,65 +238,67 @@ am_pcem_OBJECTS = pcem-386.$(OBJEXT) pcem-386_dynarec.$(OBJEXT) \ pcem-keyboard.$(OBJEXT) pcem-keyboard_amstrad.$(OBJEXT) \ pcem-keyboard_at.$(OBJEXT) pcem-keyboard_olim24.$(OBJEXT) \ pcem-keyboard_pcjr.$(OBJEXT) pcem-keyboard_xt.$(OBJEXT) \ - pcem-lpt.$(OBJEXT) pcem-mca.$(OBJEXT) pcem-mcr.$(OBJEXT) \ - pcem-mem.$(OBJEXT) pcem-mfm_at.$(OBJEXT) \ + pcem-laserxt.$(OBJEXT) pcem-lpt.$(OBJEXT) pcem-mca.$(OBJEXT) \ + pcem-mcr.$(OBJEXT) pcem-mem.$(OBJEXT) pcem-mfm_at.$(OBJEXT) \ pcem-mfm_xebec.$(OBJEXT) pcem-model.$(OBJEXT) \ pcem-mouse.$(OBJEXT) pcem-mouse_ps2.$(OBJEXT) \ pcem-mouse_serial.$(OBJEXT) pcem-neat.$(OBJEXT) \ pcem-nmi.$(OBJEXT) pcem-nvr.$(OBJEXT) \ pcem-olivetti_m24.$(OBJEXT) pcem-opti495.$(OBJEXT) \ - pcem-pc.$(OBJEXT) pcem-pci.$(OBJEXT) pcem-pic.$(OBJEXT) \ - pcem-piix.$(OBJEXT) pcem-pit.$(OBJEXT) pcem-ppi.$(OBJEXT) \ - pcem-ps1.$(OBJEXT) pcem-ps2.$(OBJEXT) pcem-ps2_mca.$(OBJEXT) \ - pcem-ps2_nvr.$(OBJEXT) pcem-rom.$(OBJEXT) pcem-rtc.$(OBJEXT) \ - pcem-scat.$(OBJEXT) pcem-serial.$(OBJEXT) \ - pcem-sis496.$(OBJEXT) pcem-sound.$(OBJEXT) \ - pcem-sound_ad1848.$(OBJEXT) pcem-sound_adlib.$(OBJEXT) \ - pcem-sound_adlibgold.$(OBJEXT) pcem-sound_cms.$(OBJEXT) \ - pcem-sound_emu8k.$(OBJEXT) pcem-sound_gus.$(OBJEXT) \ - pcem-sound_mpu401_uart.$(OBJEXT) pcem-sound_opl.$(OBJEXT) \ - pcem-sound_pas16.$(OBJEXT) pcem-sound_ps1.$(OBJEXT) \ - pcem-sound_pssj.$(OBJEXT) pcem-sound_sb.$(OBJEXT) \ - pcem-sound_sb_dsp.$(OBJEXT) pcem-sound_sn76489.$(OBJEXT) \ - pcem-sound_speaker.$(OBJEXT) pcem-sound_ssi2001.$(OBJEXT) \ - pcem-sound_wss.$(OBJEXT) pcem-sound_ym7128.$(OBJEXT) \ - pcem-soundopenal.$(OBJEXT) pcem-tandy_eeprom.$(OBJEXT) \ - pcem-tandy_rom.$(OBJEXT) pcem-timer.$(OBJEXT) \ - pcem-um8669f.$(OBJEXT) pcem-um8881f.$(OBJEXT) \ - pcem-vid_ati_eeprom.$(OBJEXT) pcem-vid_ati_mach64.$(OBJEXT) \ - pcem-vid_ati18800.$(OBJEXT) pcem-vid_ati28800.$(OBJEXT) \ - pcem-vid_ati68860_ramdac.$(OBJEXT) pcem-vid_cga.$(OBJEXT) \ - pcem-vid_cl5429.$(OBJEXT) pcem-vid_colorplus.$(OBJEXT) \ - pcem-vid_ega.$(OBJEXT) pcem-vid_et4000.$(OBJEXT) \ - pcem-vid_et4000w32.$(OBJEXT) pcem-vid_genius.$(OBJEXT) \ - pcem-vid_hercules.$(OBJEXT) pcem-vid_icd2061.$(OBJEXT) \ - pcem-vid_ics2595.$(OBJEXT) pcem-vid_incolor.$(OBJEXT) \ - pcem-vid_mda.$(OBJEXT) pcem-vid_olivetti_m24.$(OBJEXT) \ - pcem-vid_oti067.$(OBJEXT) pcem-vid_paradise.$(OBJEXT) \ - pcem-vid_pc200.$(OBJEXT) pcem-vid_pc1512.$(OBJEXT) \ - pcem-vid_pc1640.$(OBJEXT) pcem-vid_pcjr.$(OBJEXT) \ - pcem-vid_ps1_svga.$(OBJEXT) pcem-vid_s3.$(OBJEXT) \ - pcem-vid_s3_virge.$(OBJEXT) pcem-vid_sdac_ramdac.$(OBJEXT) \ - pcem-vid_stg_ramdac.$(OBJEXT) pcem-vid_svga.$(OBJEXT) \ - pcem-vid_svga_render.$(OBJEXT) pcem-vid_tandy.$(OBJEXT) \ - pcem-vid_tandysl.$(OBJEXT) pcem-vid_tgui9440.$(OBJEXT) \ - pcem-vid_tkd8001_ramdac.$(OBJEXT) pcem-vid_tvga.$(OBJEXT) \ - pcem-vid_unk_ramdac.$(OBJEXT) pcem-vid_vga.$(OBJEXT) \ - pcem-vid_voodoo.$(OBJEXT) pcem-video.$(OBJEXT) \ - pcem-wd76c10.$(OBJEXT) pcem-vid_wy700.$(OBJEXT) \ - pcem-x86seg.$(OBJEXT) pcem-x87.$(OBJEXT) pcem-xtide.$(OBJEXT) \ + pcem-paths.$(OBJEXT) pcem-pc.$(OBJEXT) pcem-pci.$(OBJEXT) \ + pcem-pic.$(OBJEXT) pcem-piix.$(OBJEXT) pcem-pit.$(OBJEXT) \ + pcem-ppi.$(OBJEXT) pcem-ps1.$(OBJEXT) pcem-ps2.$(OBJEXT) \ + pcem-ps2_mca.$(OBJEXT) pcem-ps2_nvr.$(OBJEXT) \ + pcem-rom.$(OBJEXT) pcem-rtc.$(OBJEXT) pcem-scat.$(OBJEXT) \ + pcem-serial.$(OBJEXT) pcem-sio.$(OBJEXT) pcem-sis496.$(OBJEXT) \ + pcem-sound.$(OBJEXT) pcem-sound_ad1848.$(OBJEXT) \ + pcem-sound_adlib.$(OBJEXT) pcem-sound_adlibgold.$(OBJEXT) \ + pcem-sound_cms.$(OBJEXT) pcem-sound_emu8k.$(OBJEXT) \ + pcem-sound_gus.$(OBJEXT) pcem-sound_mpu401_uart.$(OBJEXT) \ + pcem-sound_opl.$(OBJEXT) pcem-sound_pas16.$(OBJEXT) \ + pcem-sound_ps1.$(OBJEXT) pcem-sound_pssj.$(OBJEXT) \ + pcem-sound_sb.$(OBJEXT) pcem-sound_sb_dsp.$(OBJEXT) \ + pcem-sound_sn76489.$(OBJEXT) pcem-sound_speaker.$(OBJEXT) \ + pcem-sound_ssi2001.$(OBJEXT) pcem-sound_wss.$(OBJEXT) \ + pcem-sound_ym7128.$(OBJEXT) pcem-soundopenal.$(OBJEXT) \ + pcem-tandy_eeprom.$(OBJEXT) pcem-tandy_rom.$(OBJEXT) \ + pcem-timer.$(OBJEXT) pcem-um8669f.$(OBJEXT) \ + pcem-um8881f.$(OBJEXT) pcem-vid_ati_eeprom.$(OBJEXT) \ + pcem-vid_ati_mach64.$(OBJEXT) pcem-vid_ati18800.$(OBJEXT) \ + pcem-vid_ati28800.$(OBJEXT) pcem-vid_ati68860_ramdac.$(OBJEXT) \ + pcem-vid_cga.$(OBJEXT) pcem-vid_cl5429.$(OBJEXT) \ + pcem-vid_colorplus.$(OBJEXT) pcem-vid_ega.$(OBJEXT) \ + pcem-vid_et4000.$(OBJEXT) pcem-vid_et4000w32.$(OBJEXT) \ + pcem-vid_genius.$(OBJEXT) pcem-vid_hercules.$(OBJEXT) \ + pcem-vid_icd2061.$(OBJEXT) pcem-vid_ics2595.$(OBJEXT) \ + pcem-vid_incolor.$(OBJEXT) pcem-vid_mda.$(OBJEXT) \ + pcem-vid_olivetti_m24.$(OBJEXT) pcem-vid_oti067.$(OBJEXT) \ + pcem-vid_paradise.$(OBJEXT) pcem-vid_pc200.$(OBJEXT) \ + pcem-vid_pc1512.$(OBJEXT) pcem-vid_pc1640.$(OBJEXT) \ + pcem-vid_pcjr.$(OBJEXT) pcem-vid_ps1_svga.$(OBJEXT) \ + pcem-vid_s3.$(OBJEXT) pcem-vid_s3_virge.$(OBJEXT) \ + pcem-vid_sdac_ramdac.$(OBJEXT) pcem-vid_stg_ramdac.$(OBJEXT) \ + pcem-vid_svga.$(OBJEXT) pcem-vid_svga_render.$(OBJEXT) \ + pcem-vid_tandy.$(OBJEXT) pcem-vid_tandysl.$(OBJEXT) \ + pcem-vid_tgui9440.$(OBJEXT) pcem-vid_tkd8001_ramdac.$(OBJEXT) \ + pcem-vid_tvga.$(OBJEXT) pcem-vid_unk_ramdac.$(OBJEXT) \ + pcem-vid_vga.$(OBJEXT) pcem-vid_voodoo.$(OBJEXT) \ + pcem-video.$(OBJEXT) pcem-wd76c10.$(OBJEXT) \ + pcem-vid_wy700.$(OBJEXT) pcem-x86seg.$(OBJEXT) \ + pcem-x87.$(OBJEXT) pcem-xtide.$(OBJEXT) \ pcem-sound_dbopl.$(OBJEXT) pcem-sound_resid.$(OBJEXT) \ pcem-cdrom_image.$(OBJEXT) pcem-dbopl.$(OBJEXT) \ - pcem-vid_cga_comp.$(OBJEXT) pcem-convolve.$(OBJEXT) \ - pcem-convolve-sse.$(OBJEXT) pcem-envelope.$(OBJEXT) \ - pcem-extfilt.$(OBJEXT) pcem-filter.$(OBJEXT) \ - pcem-pot.$(OBJEXT) pcem-sid.$(OBJEXT) pcem-voice.$(OBJEXT) \ - pcem-wave6581_PS_.$(OBJEXT) pcem-wave6581_PST.$(OBJEXT) \ - pcem-wave6581_P_T.$(OBJEXT) pcem-wave6581__ST.$(OBJEXT) \ - pcem-wave8580_PS_.$(OBJEXT) pcem-wave8580_PST.$(OBJEXT) \ - pcem-wave8580_P_T.$(OBJEXT) pcem-wave8580__ST.$(OBJEXT) \ - pcem-wave.$(OBJEXT) $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) + pcem-nukedopl.$(OBJEXT) pcem-vid_cga_comp.$(OBJEXT) \ + pcem-convolve.$(OBJEXT) pcem-convolve-sse.$(OBJEXT) \ + pcem-envelope.$(OBJEXT) pcem-extfilt.$(OBJEXT) \ + pcem-filter.$(OBJEXT) pcem-pot.$(OBJEXT) pcem-sid.$(OBJEXT) \ + pcem-voice.$(OBJEXT) pcem-wave6581_PS_.$(OBJEXT) \ + pcem-wave6581_PST.$(OBJEXT) pcem-wave6581_P_T.$(OBJEXT) \ + pcem-wave6581__ST.$(OBJEXT) pcem-wave8580_PS_.$(OBJEXT) \ + pcem-wave8580_PST.$(OBJEXT) pcem-wave8580_P_T.$(OBJEXT) \ + pcem-wave8580__ST.$(OBJEXT) pcem-wave.$(OBJEXT) \ + $(am__objects_1) $(am__objects_2) $(am__objects_3) \ + $(am__objects_4) pcem_OBJECTS = $(am_pcem_OBJECTS) am__DEPENDENCIES_1 = @USE_WX_FALSE@pcem_DEPENDENCIES = $(am__DEPENDENCIES_1) @@ -490,37 +503,39 @@ pcem_SOURCES = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c \ acer386sx.c ali1429.c amstrad.c cdrom-ioctl-linux.c \ cdrom-image.cc cdrom-null.c codegen.c codegen_ops.c \ codegen_timing_486.c codegen_timing_686.c \ - codegen_timing_pentium.c codegen_timing_winchip.c compaq.c \ - config.c cpu.c dac.c dells200.c device.c disc.c disc_fdi.c \ - disc_img.c disc_sector.c dma.c fdc.c fdc37c665.c fdd.c \ - fdi2raw.c gameport.c hdd.c hdd_esdi.c headland.c i430lx.c \ - i430fx.c i430vx.c ide.c intel.c intel_flash.c io.c jim.c \ + codegen_timing_common.c codegen_timing_pentium.c \ + codegen_timing_winchip.c compaq.c config.c cpu.c dac.c \ + dells200.c device.c disc.c disc_fdi.c disc_img.c disc_sector.c \ + dma.c esdi_at.c fdc.c fdc37c665.c fdd.c fdi2raw.c gameport.c \ + hdd.c hdd_esdi.c hdd_file.c headland.c i430lx.c i430fx.c \ + i430vx.c ide.c intel.c intel_flash.c io.c jim.c \ joystick_ch_flightstick_pro.c joystick_standard.c \ joystick_sw_pad.c joystick_tm_fcs.c keyboard.c \ keyboard_amstrad.c keyboard_at.c keyboard_olim24.c \ - keyboard_pcjr.c keyboard_xt.c lpt.c mca.c mcr.c mem.c mfm_at.c \ - mfm_xebec.c model.c mouse.c mouse_ps2.c mouse_serial.c neat.c \ - nmi.c nvr.c olivetti_m24.c opti495.c pc.c pci.c pic.c piix.c \ - pit.c ppi.c ps1.c ps2.c ps2_mca.c ps2_nvr.c rom.c rtc.c scat.c \ - serial.c sis496.c sound.c sound_ad1848.c sound_adlib.c \ - sound_adlibgold.c sound_cms.c sound_emu8k.c sound_gus.c \ - sound_mpu401_uart.c sound_opl.c sound_pas16.c sound_ps1.c \ - sound_pssj.c sound_sb.c sound_sb_dsp.c sound_sn76489.c \ - sound_speaker.c sound_ssi2001.c sound_wss.c sound_ym7128.c \ - soundopenal.c tandy_eeprom.c tandy_rom.c timer.c um8669f.c \ - um8881f.c vid_ati_eeprom.c vid_ati_mach64.c vid_ati18800.c \ - vid_ati28800.c vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c \ - vid_colorplus.c vid_ega.c vid_et4000.c vid_et4000w32.c \ - vid_genius.c vid_hercules.c vid_icd2061.c vid_ics2595.c \ - vid_incolor.c vid_mda.c vid_olivetti_m24.c vid_oti067.c \ - vid_paradise.c vid_pc200.c vid_pc1512.c vid_pc1640.c \ - vid_pcjr.c vid_ps1_svga.c vid_s3.c vid_s3_virge.c \ - vid_sdac_ramdac.c vid_stg_ramdac.c vid_svga.c \ - vid_svga_render.c vid_tandy.c vid_tandysl.c vid_tgui9440.c \ - vid_tkd8001_ramdac.c vid_tvga.c vid_unk_ramdac.c vid_vga.c \ - vid_voodoo.c video.c wd76c10.c vid_wy700.c x86seg.c x87.c \ - xtide.c sound_dbopl.cc sound_resid.cc dosbox/cdrom_image.cpp \ - dosbox/dbopl.cpp dosbox/vid_cga_comp.c resid-fp/convolve.cc \ + keyboard_pcjr.c keyboard_xt.c laserxt.c lpt.c mca.c mcr.c \ + mem.c mfm_at.c mfm_xebec.c model.c mouse.c mouse_ps2.c \ + mouse_serial.c neat.c nmi.c nvr.c olivetti_m24.c opti495.c \ + paths.c pc.c pci.c pic.c piix.c pit.c ppi.c ps1.c ps2.c \ + ps2_mca.c ps2_nvr.c rom.c rtc.c scat.c serial.c sio.c sis496.c \ + sound.c sound_ad1848.c sound_adlib.c sound_adlibgold.c \ + sound_cms.c sound_emu8k.c sound_gus.c sound_mpu401_uart.c \ + sound_opl.c sound_pas16.c sound_ps1.c sound_pssj.c sound_sb.c \ + sound_sb_dsp.c sound_sn76489.c sound_speaker.c sound_ssi2001.c \ + sound_wss.c sound_ym7128.c soundopenal.c tandy_eeprom.c \ + tandy_rom.c timer.c um8669f.c um8881f.c vid_ati_eeprom.c \ + vid_ati_mach64.c vid_ati18800.c vid_ati28800.c \ + vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c vid_colorplus.c \ + vid_ega.c vid_et4000.c vid_et4000w32.c vid_genius.c \ + vid_hercules.c vid_icd2061.c vid_ics2595.c vid_incolor.c \ + vid_mda.c vid_olivetti_m24.c vid_oti067.c vid_paradise.c \ + vid_pc200.c vid_pc1512.c vid_pc1640.c vid_pcjr.c \ + vid_ps1_svga.c vid_s3.c vid_s3_virge.c vid_sdac_ramdac.c \ + vid_stg_ramdac.c vid_svga.c vid_svga_render.c vid_tandy.c \ + vid_tandysl.c vid_tgui9440.c vid_tkd8001_ramdac.c vid_tvga.c \ + vid_unk_ramdac.c vid_vga.c vid_voodoo.c video.c wd76c10.c \ + vid_wy700.c x86seg.c x87.c xtide.c sound_dbopl.cc \ + sound_resid.cc dosbox/cdrom_image.cpp dosbox/dbopl.cpp \ + dosbox/nukedopl.cpp dosbox/vid_cga_comp.c resid-fp/convolve.cc \ resid-fp/convolve-sse.cc resid-fp/envelope.cc \ resid-fp/extfilt.cc resid-fp/filter.cc resid-fp/pot.cc \ resid-fp/sid.cc resid-fp/voice.cc resid-fp/wave6581_PS_.cc \ @@ -648,6 +663,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_ops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_timing_486.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_timing_686.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_timing_common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_timing_pentium.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_timing_winchip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-codegen_x86-64.Po@am__quote@ @@ -667,6 +683,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-disc_sector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-dma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-envelope.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-esdi_at.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-extfilt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-fdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-fdc37c665.Po@am__quote@ @@ -676,6 +693,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-gameport.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-hdd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-hdd_esdi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-hdd_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-headland.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-i430fx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-i430lx.Po@am__quote@ @@ -695,6 +713,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-keyboard_olim24.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-keyboard_pcjr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-keyboard_xt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-laserxt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-lpt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-mca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-mcr.Po@am__quote@ @@ -707,9 +726,11 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-mouse_serial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-neat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-nmi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-nukedopl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-nvr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-olivetti_m24.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-opti495.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-paths.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-pc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-pci.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-pic.Po@am__quote@ @@ -726,6 +747,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-scat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-serial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-sid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-sio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-sis496.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-sound_ad1848.Po@am__quote@ @@ -814,17 +836,21 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-config_sel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-deviceconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-dialogbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-glslp-parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-resources.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-display.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-hdconf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-joystick.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-midi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-mouse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-status.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-video-gl3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-video-renderer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2-video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-sdl2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-shader_man.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-shaderconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-status.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcem-wx-utils.Po@am__quote@ @@ -1028,6 +1054,20 @@ pcem-codegen_timing_686.obj: codegen_timing_686.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-codegen_timing_686.obj `if test -f 'codegen_timing_686.c'; then $(CYGPATH_W) 'codegen_timing_686.c'; else $(CYGPATH_W) '$(srcdir)/codegen_timing_686.c'; fi` +pcem-codegen_timing_common.o: codegen_timing_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-codegen_timing_common.o -MD -MP -MF $(DEPDIR)/pcem-codegen_timing_common.Tpo -c -o pcem-codegen_timing_common.o `test -f 'codegen_timing_common.c' || echo '$(srcdir)/'`codegen_timing_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-codegen_timing_common.Tpo $(DEPDIR)/pcem-codegen_timing_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codegen_timing_common.c' object='pcem-codegen_timing_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-codegen_timing_common.o `test -f 'codegen_timing_common.c' || echo '$(srcdir)/'`codegen_timing_common.c + +pcem-codegen_timing_common.obj: codegen_timing_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-codegen_timing_common.obj -MD -MP -MF $(DEPDIR)/pcem-codegen_timing_common.Tpo -c -o pcem-codegen_timing_common.obj `if test -f 'codegen_timing_common.c'; then $(CYGPATH_W) 'codegen_timing_common.c'; else $(CYGPATH_W) '$(srcdir)/codegen_timing_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-codegen_timing_common.Tpo $(DEPDIR)/pcem-codegen_timing_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codegen_timing_common.c' object='pcem-codegen_timing_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-codegen_timing_common.obj `if test -f 'codegen_timing_common.c'; then $(CYGPATH_W) 'codegen_timing_common.c'; else $(CYGPATH_W) '$(srcdir)/codegen_timing_common.c'; fi` + pcem-codegen_timing_pentium.o: codegen_timing_pentium.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-codegen_timing_pentium.o -MD -MP -MF $(DEPDIR)/pcem-codegen_timing_pentium.Tpo -c -o pcem-codegen_timing_pentium.o `test -f 'codegen_timing_pentium.c' || echo '$(srcdir)/'`codegen_timing_pentium.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-codegen_timing_pentium.Tpo $(DEPDIR)/pcem-codegen_timing_pentium.Po @@ -1210,6 +1250,20 @@ pcem-dma.obj: dma.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-dma.obj `if test -f 'dma.c'; then $(CYGPATH_W) 'dma.c'; else $(CYGPATH_W) '$(srcdir)/dma.c'; fi` +pcem-esdi_at.o: esdi_at.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-esdi_at.o -MD -MP -MF $(DEPDIR)/pcem-esdi_at.Tpo -c -o pcem-esdi_at.o `test -f 'esdi_at.c' || echo '$(srcdir)/'`esdi_at.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-esdi_at.Tpo $(DEPDIR)/pcem-esdi_at.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='esdi_at.c' object='pcem-esdi_at.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-esdi_at.o `test -f 'esdi_at.c' || echo '$(srcdir)/'`esdi_at.c + +pcem-esdi_at.obj: esdi_at.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-esdi_at.obj -MD -MP -MF $(DEPDIR)/pcem-esdi_at.Tpo -c -o pcem-esdi_at.obj `if test -f 'esdi_at.c'; then $(CYGPATH_W) 'esdi_at.c'; else $(CYGPATH_W) '$(srcdir)/esdi_at.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-esdi_at.Tpo $(DEPDIR)/pcem-esdi_at.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='esdi_at.c' object='pcem-esdi_at.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-esdi_at.obj `if test -f 'esdi_at.c'; then $(CYGPATH_W) 'esdi_at.c'; else $(CYGPATH_W) '$(srcdir)/esdi_at.c'; fi` + pcem-fdc.o: fdc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-fdc.o -MD -MP -MF $(DEPDIR)/pcem-fdc.Tpo -c -o pcem-fdc.o `test -f 'fdc.c' || echo '$(srcdir)/'`fdc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-fdc.Tpo $(DEPDIR)/pcem-fdc.Po @@ -1308,6 +1362,20 @@ pcem-hdd_esdi.obj: hdd_esdi.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-hdd_esdi.obj `if test -f 'hdd_esdi.c'; then $(CYGPATH_W) 'hdd_esdi.c'; else $(CYGPATH_W) '$(srcdir)/hdd_esdi.c'; fi` +pcem-hdd_file.o: hdd_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-hdd_file.o -MD -MP -MF $(DEPDIR)/pcem-hdd_file.Tpo -c -o pcem-hdd_file.o `test -f 'hdd_file.c' || echo '$(srcdir)/'`hdd_file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-hdd_file.Tpo $(DEPDIR)/pcem-hdd_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hdd_file.c' object='pcem-hdd_file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-hdd_file.o `test -f 'hdd_file.c' || echo '$(srcdir)/'`hdd_file.c + +pcem-hdd_file.obj: hdd_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-hdd_file.obj -MD -MP -MF $(DEPDIR)/pcem-hdd_file.Tpo -c -o pcem-hdd_file.obj `if test -f 'hdd_file.c'; then $(CYGPATH_W) 'hdd_file.c'; else $(CYGPATH_W) '$(srcdir)/hdd_file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-hdd_file.Tpo $(DEPDIR)/pcem-hdd_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hdd_file.c' object='pcem-hdd_file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-hdd_file.obj `if test -f 'hdd_file.c'; then $(CYGPATH_W) 'hdd_file.c'; else $(CYGPATH_W) '$(srcdir)/hdd_file.c'; fi` + pcem-headland.o: headland.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-headland.o -MD -MP -MF $(DEPDIR)/pcem-headland.Tpo -c -o pcem-headland.o `test -f 'headland.c' || echo '$(srcdir)/'`headland.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-headland.Tpo $(DEPDIR)/pcem-headland.Po @@ -1574,6 +1642,20 @@ pcem-keyboard_xt.obj: keyboard_xt.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-keyboard_xt.obj `if test -f 'keyboard_xt.c'; then $(CYGPATH_W) 'keyboard_xt.c'; else $(CYGPATH_W) '$(srcdir)/keyboard_xt.c'; fi` +pcem-laserxt.o: laserxt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-laserxt.o -MD -MP -MF $(DEPDIR)/pcem-laserxt.Tpo -c -o pcem-laserxt.o `test -f 'laserxt.c' || echo '$(srcdir)/'`laserxt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-laserxt.Tpo $(DEPDIR)/pcem-laserxt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='laserxt.c' object='pcem-laserxt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-laserxt.o `test -f 'laserxt.c' || echo '$(srcdir)/'`laserxt.c + +pcem-laserxt.obj: laserxt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-laserxt.obj -MD -MP -MF $(DEPDIR)/pcem-laserxt.Tpo -c -o pcem-laserxt.obj `if test -f 'laserxt.c'; then $(CYGPATH_W) 'laserxt.c'; else $(CYGPATH_W) '$(srcdir)/laserxt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-laserxt.Tpo $(DEPDIR)/pcem-laserxt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='laserxt.c' object='pcem-laserxt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-laserxt.obj `if test -f 'laserxt.c'; then $(CYGPATH_W) 'laserxt.c'; else $(CYGPATH_W) '$(srcdir)/laserxt.c'; fi` + pcem-lpt.o: lpt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-lpt.o -MD -MP -MF $(DEPDIR)/pcem-lpt.Tpo -c -o pcem-lpt.o `test -f 'lpt.c' || echo '$(srcdir)/'`lpt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-lpt.Tpo $(DEPDIR)/pcem-lpt.Po @@ -1784,6 +1866,20 @@ pcem-opti495.obj: opti495.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-opti495.obj `if test -f 'opti495.c'; then $(CYGPATH_W) 'opti495.c'; else $(CYGPATH_W) '$(srcdir)/opti495.c'; fi` +pcem-paths.o: paths.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-paths.o -MD -MP -MF $(DEPDIR)/pcem-paths.Tpo -c -o pcem-paths.o `test -f 'paths.c' || echo '$(srcdir)/'`paths.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-paths.Tpo $(DEPDIR)/pcem-paths.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='paths.c' object='pcem-paths.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-paths.o `test -f 'paths.c' || echo '$(srcdir)/'`paths.c + +pcem-paths.obj: paths.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-paths.obj -MD -MP -MF $(DEPDIR)/pcem-paths.Tpo -c -o pcem-paths.obj `if test -f 'paths.c'; then $(CYGPATH_W) 'paths.c'; else $(CYGPATH_W) '$(srcdir)/paths.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-paths.Tpo $(DEPDIR)/pcem-paths.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='paths.c' object='pcem-paths.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-paths.obj `if test -f 'paths.c'; then $(CYGPATH_W) 'paths.c'; else $(CYGPATH_W) '$(srcdir)/paths.c'; fi` + pcem-pc.o: pc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-pc.o -MD -MP -MF $(DEPDIR)/pcem-pc.Tpo -c -o pcem-pc.o `test -f 'pc.c' || echo '$(srcdir)/'`pc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-pc.Tpo $(DEPDIR)/pcem-pc.Po @@ -1980,6 +2076,20 @@ pcem-serial.obj: serial.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` +pcem-sio.o: sio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-sio.o -MD -MP -MF $(DEPDIR)/pcem-sio.Tpo -c -o pcem-sio.o `test -f 'sio.c' || echo '$(srcdir)/'`sio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-sio.Tpo $(DEPDIR)/pcem-sio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sio.c' object='pcem-sio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-sio.o `test -f 'sio.c' || echo '$(srcdir)/'`sio.c + +pcem-sio.obj: sio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-sio.obj -MD -MP -MF $(DEPDIR)/pcem-sio.Tpo -c -o pcem-sio.obj `if test -f 'sio.c'; then $(CYGPATH_W) 'sio.c'; else $(CYGPATH_W) '$(srcdir)/sio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-sio.Tpo $(DEPDIR)/pcem-sio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sio.c' object='pcem-sio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-sio.obj `if test -f 'sio.c'; then $(CYGPATH_W) 'sio.c'; else $(CYGPATH_W) '$(srcdir)/sio.c'; fi` + pcem-sis496.o: sis496.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-sis496.o -MD -MP -MF $(DEPDIR)/pcem-sis496.Tpo -c -o pcem-sis496.o `test -f 'sis496.c' || echo '$(srcdir)/'`sis496.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-sis496.Tpo $(DEPDIR)/pcem-sis496.Po @@ -3100,20 +3210,6 @@ pcem-wx-config.obj: wx-config.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-config.obj `if test -f 'wx-config.c'; then $(CYGPATH_W) 'wx-config.c'; else $(CYGPATH_W) '$(srcdir)/wx-config.c'; fi` -pcem-wx-sdl2-hdconf.o: wx-sdl2-hdconf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-hdconf.o -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-hdconf.Tpo -c -o pcem-wx-sdl2-hdconf.o `test -f 'wx-sdl2-hdconf.c' || echo '$(srcdir)/'`wx-sdl2-hdconf.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-hdconf.Tpo $(DEPDIR)/pcem-wx-sdl2-hdconf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-hdconf.c' object='pcem-wx-sdl2-hdconf.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-hdconf.o `test -f 'wx-sdl2-hdconf.c' || echo '$(srcdir)/'`wx-sdl2-hdconf.c - -pcem-wx-sdl2-hdconf.obj: wx-sdl2-hdconf.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-hdconf.obj -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-hdconf.Tpo -c -o pcem-wx-sdl2-hdconf.obj `if test -f 'wx-sdl2-hdconf.c'; then $(CYGPATH_W) 'wx-sdl2-hdconf.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-hdconf.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-hdconf.Tpo $(DEPDIR)/pcem-wx-sdl2-hdconf.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-hdconf.c' object='pcem-wx-sdl2-hdconf.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-hdconf.obj `if test -f 'wx-sdl2-hdconf.c'; then $(CYGPATH_W) 'wx-sdl2-hdconf.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-hdconf.c'; fi` - pcem-wx-sdl2-status.o: wx-sdl2-status.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-status.o -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-status.Tpo -c -o pcem-wx-sdl2-status.o `test -f 'wx-sdl2-status.c' || echo '$(srcdir)/'`wx-sdl2-status.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-status.Tpo $(DEPDIR)/pcem-wx-sdl2-status.Po @@ -3170,6 +3266,62 @@ pcem-wx-sdl2-display.obj: wx-sdl2-display.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-display.obj `if test -f 'wx-sdl2-display.c'; then $(CYGPATH_W) 'wx-sdl2-display.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-display.c'; fi` +pcem-wx-sdl2-video-renderer.o: wx-sdl2-video-renderer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-video-renderer.o -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-video-renderer.Tpo -c -o pcem-wx-sdl2-video-renderer.o `test -f 'wx-sdl2-video-renderer.c' || echo '$(srcdir)/'`wx-sdl2-video-renderer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-video-renderer.Tpo $(DEPDIR)/pcem-wx-sdl2-video-renderer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-video-renderer.c' object='pcem-wx-sdl2-video-renderer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-video-renderer.o `test -f 'wx-sdl2-video-renderer.c' || echo '$(srcdir)/'`wx-sdl2-video-renderer.c + +pcem-wx-sdl2-video-renderer.obj: wx-sdl2-video-renderer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-video-renderer.obj -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-video-renderer.Tpo -c -o pcem-wx-sdl2-video-renderer.obj `if test -f 'wx-sdl2-video-renderer.c'; then $(CYGPATH_W) 'wx-sdl2-video-renderer.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-video-renderer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-video-renderer.Tpo $(DEPDIR)/pcem-wx-sdl2-video-renderer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-video-renderer.c' object='pcem-wx-sdl2-video-renderer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-video-renderer.obj `if test -f 'wx-sdl2-video-renderer.c'; then $(CYGPATH_W) 'wx-sdl2-video-renderer.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-video-renderer.c'; fi` + +pcem-wx-sdl2-video-gl3.o: wx-sdl2-video-gl3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-video-gl3.o -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-video-gl3.Tpo -c -o pcem-wx-sdl2-video-gl3.o `test -f 'wx-sdl2-video-gl3.c' || echo '$(srcdir)/'`wx-sdl2-video-gl3.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-video-gl3.Tpo $(DEPDIR)/pcem-wx-sdl2-video-gl3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-video-gl3.c' object='pcem-wx-sdl2-video-gl3.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-video-gl3.o `test -f 'wx-sdl2-video-gl3.c' || echo '$(srcdir)/'`wx-sdl2-video-gl3.c + +pcem-wx-sdl2-video-gl3.obj: wx-sdl2-video-gl3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-sdl2-video-gl3.obj -MD -MP -MF $(DEPDIR)/pcem-wx-sdl2-video-gl3.Tpo -c -o pcem-wx-sdl2-video-gl3.obj `if test -f 'wx-sdl2-video-gl3.c'; then $(CYGPATH_W) 'wx-sdl2-video-gl3.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-video-gl3.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-sdl2-video-gl3.Tpo $(DEPDIR)/pcem-wx-sdl2-video-gl3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-sdl2-video-gl3.c' object='pcem-wx-sdl2-video-gl3.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-sdl2-video-gl3.obj `if test -f 'wx-sdl2-video-gl3.c'; then $(CYGPATH_W) 'wx-sdl2-video-gl3.c'; else $(CYGPATH_W) '$(srcdir)/wx-sdl2-video-gl3.c'; fi` + +pcem-wx-glslp-parser.o: wx-glslp-parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-glslp-parser.o -MD -MP -MF $(DEPDIR)/pcem-wx-glslp-parser.Tpo -c -o pcem-wx-glslp-parser.o `test -f 'wx-glslp-parser.c' || echo '$(srcdir)/'`wx-glslp-parser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-glslp-parser.Tpo $(DEPDIR)/pcem-wx-glslp-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-glslp-parser.c' object='pcem-wx-glslp-parser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-glslp-parser.o `test -f 'wx-glslp-parser.c' || echo '$(srcdir)/'`wx-glslp-parser.c + +pcem-wx-glslp-parser.obj: wx-glslp-parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-glslp-parser.obj -MD -MP -MF $(DEPDIR)/pcem-wx-glslp-parser.Tpo -c -o pcem-wx-glslp-parser.obj `if test -f 'wx-glslp-parser.c'; then $(CYGPATH_W) 'wx-glslp-parser.c'; else $(CYGPATH_W) '$(srcdir)/wx-glslp-parser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-glslp-parser.Tpo $(DEPDIR)/pcem-wx-glslp-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-glslp-parser.c' object='pcem-wx-glslp-parser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-glslp-parser.obj `if test -f 'wx-glslp-parser.c'; then $(CYGPATH_W) 'wx-glslp-parser.c'; else $(CYGPATH_W) '$(srcdir)/wx-glslp-parser.c'; fi` + +pcem-wx-shader_man.o: wx-shader_man.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-shader_man.o -MD -MP -MF $(DEPDIR)/pcem-wx-shader_man.Tpo -c -o pcem-wx-shader_man.o `test -f 'wx-shader_man.c' || echo '$(srcdir)/'`wx-shader_man.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-shader_man.Tpo $(DEPDIR)/pcem-wx-shader_man.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-shader_man.c' object='pcem-wx-shader_man.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-shader_man.o `test -f 'wx-shader_man.c' || echo '$(srcdir)/'`wx-shader_man.c + +pcem-wx-shader_man.obj: wx-shader_man.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-wx-shader_man.obj -MD -MP -MF $(DEPDIR)/pcem-wx-shader_man.Tpo -c -o pcem-wx-shader_man.obj `if test -f 'wx-shader_man.c'; then $(CYGPATH_W) 'wx-shader_man.c'; else $(CYGPATH_W) '$(srcdir)/wx-shader_man.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-shader_man.Tpo $(DEPDIR)/pcem-wx-shader_man.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wx-shader_man.c' object='pcem-wx-shader_man.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -c -o pcem-wx-shader_man.obj `if test -f 'wx-shader_man.c'; then $(CYGPATH_W) 'wx-shader_man.c'; else $(CYGPATH_W) '$(srcdir)/wx-shader_man.c'; fi` + pcem-allegro-gui.o: allegro-gui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CFLAGS) $(CFLAGS) -MT pcem-allegro-gui.o -MD -MP -MF $(DEPDIR)/pcem-allegro-gui.Tpo -c -o pcem-allegro-gui.o `test -f 'allegro-gui.c' || echo '$(srcdir)/'`allegro-gui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-allegro-gui.Tpo $(DEPDIR)/pcem-allegro-gui.Po @@ -3450,6 +3602,20 @@ pcem-dbopl.obj: dosbox/dbopl.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-dbopl.obj `if test -f 'dosbox/dbopl.cpp'; then $(CYGPATH_W) 'dosbox/dbopl.cpp'; else $(CYGPATH_W) '$(srcdir)/dosbox/dbopl.cpp'; fi` +pcem-nukedopl.o: dosbox/nukedopl.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -MT pcem-nukedopl.o -MD -MP -MF $(DEPDIR)/pcem-nukedopl.Tpo -c -o pcem-nukedopl.o `test -f 'dosbox/nukedopl.cpp' || echo '$(srcdir)/'`dosbox/nukedopl.cpp +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-nukedopl.Tpo $(DEPDIR)/pcem-nukedopl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dosbox/nukedopl.cpp' object='pcem-nukedopl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-nukedopl.o `test -f 'dosbox/nukedopl.cpp' || echo '$(srcdir)/'`dosbox/nukedopl.cpp + +pcem-nukedopl.obj: dosbox/nukedopl.cpp +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -MT pcem-nukedopl.obj -MD -MP -MF $(DEPDIR)/pcem-nukedopl.Tpo -c -o pcem-nukedopl.obj `if test -f 'dosbox/nukedopl.cpp'; then $(CYGPATH_W) 'dosbox/nukedopl.cpp'; else $(CYGPATH_W) '$(srcdir)/dosbox/nukedopl.cpp'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-nukedopl.Tpo $(DEPDIR)/pcem-nukedopl.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dosbox/nukedopl.cpp' object='pcem-nukedopl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-nukedopl.obj `if test -f 'dosbox/nukedopl.cpp'; then $(CYGPATH_W) 'dosbox/nukedopl.cpp'; else $(CYGPATH_W) '$(srcdir)/dosbox/nukedopl.cpp'; fi` + pcem-convolve.o: resid-fp/convolve.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -MT pcem-convolve.o -MD -MP -MF $(DEPDIR)/pcem-convolve.Tpo -c -o pcem-convolve.o `test -f 'resid-fp/convolve.cc' || echo '$(srcdir)/'`resid-fp/convolve.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-convolve.Tpo $(DEPDIR)/pcem-convolve.Po @@ -3786,6 +3952,20 @@ pcem-wx-resources.obj: wx-resources.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-wx-resources.obj `if test -f 'wx-resources.cpp'; then $(CYGPATH_W) 'wx-resources.cpp'; else $(CYGPATH_W) '$(srcdir)/wx-resources.cpp'; fi` +pcem-wx-shaderconfig.o: wx-shaderconfig.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -MT pcem-wx-shaderconfig.o -MD -MP -MF $(DEPDIR)/pcem-wx-shaderconfig.Tpo -c -o pcem-wx-shaderconfig.o `test -f 'wx-shaderconfig.cc' || echo '$(srcdir)/'`wx-shaderconfig.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-shaderconfig.Tpo $(DEPDIR)/pcem-wx-shaderconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wx-shaderconfig.cc' object='pcem-wx-shaderconfig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-wx-shaderconfig.o `test -f 'wx-shaderconfig.cc' || echo '$(srcdir)/'`wx-shaderconfig.cc + +pcem-wx-shaderconfig.obj: wx-shaderconfig.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -MT pcem-wx-shaderconfig.obj -MD -MP -MF $(DEPDIR)/pcem-wx-shaderconfig.Tpo -c -o pcem-wx-shaderconfig.obj `if test -f 'wx-shaderconfig.cc'; then $(CYGPATH_W) 'wx-shaderconfig.cc'; else $(CYGPATH_W) '$(srcdir)/wx-shaderconfig.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcem-wx-shaderconfig.Tpo $(DEPDIR)/pcem-wx-shaderconfig.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wx-shaderconfig.cc' object='pcem-wx-shaderconfig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcem_CXXFLAGS) $(CXXFLAGS) -c -o pcem-wx-shaderconfig.obj `if test -f 'wx-shaderconfig.cc'; then $(CYGPATH_W) 'wx-shaderconfig.cc'; else $(CYGPATH_W) '$(srcdir)/wx-shaderconfig.cc'; fi` + .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po diff --git a/src/Makefile.linux32-wx-sdl2 b/src/Makefile.linux32-wx-sdl2 index 2c109cd..1c97379 100644 --- a/src/Makefile.linux32-wx-sdl2 +++ b/src/Makefile.linux32-wx-sdl2 @@ -3,6 +3,7 @@ CPP = g++ CC = gcc WXRC = wxrc CFLAGS = -O3 -fomit-frame-pointer -msse2 -m32 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) +CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl-linux.o cdrom-image.o cdrom-null.o \ codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.c compaq.o config.o cpu.o \ dac.o dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \ @@ -21,12 +22,12 @@ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ -wx-sdl2.o wx-config.o wx-deviceconfig.o wx-sdl2-hdconf.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o +wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ +wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o - -LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) +LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) -lGL PCem-wx-SDL2: $(OBJ) $(DBOBJ) $(SIDOBJ) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem-wx-SDL2" $(LIBS) @@ -45,7 +46,7 @@ wx-resources.o : pc.xrc $(CC) $(CFLAGS) -c $< %.o : %.cc - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< %.o : %.cpp - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< diff --git a/src/Makefile.linux64-wx-sdl2 b/src/Makefile.linux64-wx-sdl2 index 6d6b385..a4e5963 100644 --- a/src/Makefile.linux64-wx-sdl2 +++ b/src/Makefile.linux64-wx-sdl2 @@ -2,7 +2,8 @@ VPATH = . dosbox resid-fp CPP = g++ CC = gcc WXRC = wxrc -CFLAGS = -Doff64_t=__off64_t -O3 -fomit-frame-pointer -msse2 -m64 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) +CFLAGS = -O3 -fomit-frame-pointer -msse2 -m64 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) +CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl-linux.o cdrom-image.o cdrom-null.o \ codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \ dac.o dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \ @@ -21,12 +22,12 @@ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ -wx-sdl2.o wx-config.o wx-deviceconfig.o wx-sdl2-hdconf.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o +wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ +wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o - -LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) +LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) -lGL PCem64-wx-SDL2: $(OBJ) $(DBOBJ) $(SIDOBJ) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem64-wx-SDL2" $(LIBS) @@ -45,7 +46,7 @@ wx-resources.o : pc.xrc $(CC) $(CFLAGS) -c $< %.o : %.cc - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< %.o : %.cpp - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< diff --git a/src/Makefile.mingw-wx-sdl2 b/src/Makefile.mingw-wx-sdl2 index 0ecfaa4..50d78cd 100644 --- a/src/Makefile.mingw-wx-sdl2 +++ b/src/Makefile.mingw-wx-sdl2 @@ -1,8 +1,12 @@ VPATH = . dosbox resid-fp CPP = g++ CC = gcc -WXRC = wxrc -CFLAGS = -DRELEASE_BUILD -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign +WINDRES = windres.exe +WXRC = ../utils/wx/wxrc.exe +WXVERSION = 31 +WXINCLUDE = C:/MinGW/include/wx/ +CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Werror -fno-strict-aliasing -IC:\MinGW\lib\mswu +CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-image.o \ codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \ device.o dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ @@ -18,29 +22,38 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \ vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \ vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o \ - vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o \ - wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ - wx-sdl2.o wx-config.o wx-deviceconfig.o wx-sdl2-hdconf.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o + vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o win-midi.o \ + wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \ + wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \ + wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx.res DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o - -LIBS = -mwindows -lopenal32 -lstdc++ -lwxbase31u -lwxmsw31u_core -lwxmsw31u_xrc -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static +LIBS = -Wl,--subsystem,windows -mthreads -mwindows -lwxmsw$(WXVERSION)u_xrc -lwxmsw$(WXVERSION)u_html -lwxmsw$(WXVERSION)u_adv -lwxbase$(WXVERSION)u_xml -lwxmsw$(WXVERSION)u_core -lwxbase$(WXVERSION)u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -lcomdlg32 -lwinspool -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lmingw32 -lopengl32 -lopenal32 -lstdc++ -lSDL2main -lSDL2 -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc PCem-wx-SDL2.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem-wx-SDL2.exe" $(LIBS) + strip -s PCem-wx-SDL2.exe all : PCem-wx-SDL2.exe clean : - del *.o - del PCem-wx-SDL2.exe + rm *.o + rm PCem-wx-SDL2.exe + rm *.res + +wx-resources.o : pc.xrc + $(WXRC) -c pc.xrc -o wx-resources.cpp + $(CPP) $(CXXFLAGS) -c wx-resources.cpp %.o : %.c $(CC) $(CFLAGS) -c $< %.o : %.cc - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< %.o : %.cpp - $(CPP) $(CFLAGS) -c $< + $(CPP) $(CXXFLAGS) -c $< + +wx.res: wx.rc + $(WINDRES) -I$(WXINCLUDE)/../ -i wx.rc --input-format=rc -o wx.res -O coff diff --git a/src/Makefile.osx64-wx-sdl2 b/src/Makefile.osx64-wx-sdl2 index 9fc9bd3..9b2983a 100644 --- a/src/Makefile.osx64-wx-sdl2 +++ b/src/Makefile.osx64-wx-sdl2 @@ -21,12 +21,12 @@ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ -wx-sdl2.o wx-config.o wx-deviceconfig.o wx-sdl2-hdconf.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o +wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ +wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o - -LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) -L/usr/local/opt/openal-soft/lib +LIBS = -lopenal -lstdc++ -lpthread -lm $(shell wx-config --libs) $(shell sdl2-config --libs) -L/usr/local/opt/openal-soft/lib -framework OpenGL PCem64-wx-SDL2: $(OBJ) $(DBOBJ) $(SIDOBJ) $(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem64-wx-SDL2" $(LIBS) diff --git a/src/cdrom-ioctl-linux.c b/src/cdrom-ioctl-linux.c index cd89b36..820e7e6 100644 --- a/src/cdrom-ioctl-linux.c +++ b/src/cdrom-ioctl-linux.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "ibm.h" #include "ide.h" #include "cdrom-ioctl.h" diff --git a/src/cdrom-ioctl-osx.c b/src/cdrom-ioctl-osx.c index 5243ebd..7f1e750 100644 --- a/src/cdrom-ioctl-osx.c +++ b/src/cdrom-ioctl-osx.c @@ -7,6 +7,8 @@ static ATAPI ioctl_atapi; +int old_cdrom_drive; + void ioctl_audio_callback(int16_t *output, int len) { memset(output, 0, len * 2); diff --git a/src/config.c b/src/config.c index 48c917a..e888507 100644 --- a/src/config.c +++ b/src/config.c @@ -98,6 +98,43 @@ void config_free(int is_global) } } +int config_free_section(int is_global, char *name) +{ + section_t *current_section, *prev_section; + list_t *head = is_global ? &global_config_head : &machine_config_head; + current_section = (section_t *)head->next; + prev_section = 0; + + while (current_section) + { + section_t *next_section = (section_t *)current_section->list.next; + if (!strcmp(current_section->name, name)) + { + entry_t *current_entry; + + current_entry = (entry_t *)current_section->entry_head.next; + + while (current_entry) + { + entry_t *next_entry = (entry_t *)current_entry->list.next; + + free(current_entry); + current_entry = next_entry; + } + + free(current_section); + if (!prev_section) + head->next = (list_t*)next_section; + else + prev_section->list.next = (list_t*)next_section; + return 1; + } + prev_section = current_section; + current_section = next_section; + } + return 0; +} + void config_load(int is_global, char *fn) { FILE *f = fopen(fn, "rt"); @@ -279,6 +316,27 @@ int config_get_int(int is_global, char *head, char *name, int def) return value; } +float config_get_float(int is_global, char *head, char *name, float def) +{ + section_t *section; + entry_t *entry; + float value; + + section = find_section(head, is_global); + + if (!section) + return def; + + entry = find_entry(section, name); + + if (!entry) + return def; + + sscanf(entry->data, "%f", &value); + + return value; +} + char *config_get_string(int is_global, char *head, char *name, char *def) { section_t *section; @@ -315,6 +373,24 @@ void config_set_int(int is_global, char *head, char *name, int val) sprintf(entry->data, "%i", val); } +void config_set_float(int is_global, char *head, char *name, float val) +{ + section_t *section; + entry_t *entry; + + section = find_section(head, is_global); + + if (!section) + section = create_section(head, is_global); + + entry = find_entry(section, name); + + if (!entry) + entry = create_entry(section, name); + + sprintf(entry->data, "%f", val); +} + void config_set_string(int is_global, char *head, char *name, char *val) { section_t *section; diff --git a/src/config.h b/src/config.h index 174c437..16d513e 100644 --- a/src/config.h +++ b/src/config.h @@ -1,9 +1,13 @@ +float config_get_float(int is_global, char *head, char *name, float def); int config_get_int(int is_global, char *head, char *name, int def); char *config_get_string(int is_global, char *head, char *name, char *def); +void config_set_float(int is_global, char *head, char *name, float val); void config_set_int(int is_global, char *head, char *name, int val); void config_set_string(int is_global, char *head, char *name, char *val); -void add_config_callback(void (*loadconfig)(), void (*saveconfig)(), void (*onloaded)()); +int config_free_section(int is_global, char *head); + +void add_config_callback(void(*loadconfig)(), void(*saveconfig)(), void(*onloaded)()); char *get_filename(char *s); void append_filename(char *dest, char *s1, char *s2, int size); diff --git a/src/hdd.c b/src/hdd.c index 05b1ffd..9cf3a40 100644 --- a/src/hdd.c +++ b/src/hdd.c @@ -53,16 +53,16 @@ int hdd_controller_available(int hdd) return device_available(hdd_controllers[hdd].device); } -int hdd_controller_current_is_mfm() +int hdd_controller_is_mfm(char* internal_name) { int c = 0; while (hdd_controllers[c].device) { - if (!strcmp(hdd_controller_name, hdd_controllers[c].internal_name)) + if (!strcmp(internal_name, hdd_controllers[c].internal_name)) { hdd_controller_current = c; - if (strcmp(hdd_controller_name, "none")) + if (strcmp(internal_name, "none")) return hdd_controllers[c].is_mfm; } c++; @@ -71,6 +71,11 @@ int hdd_controller_current_is_mfm() return 0; } +int hdd_controller_current_is_mfm() +{ + return hdd_controller_is_mfm(hdd_controller_name); +} + void hdd_controller_init(char *internal_name) { int c = 0; diff --git a/src/hdd.h b/src/hdd.h index c0443e0..26faa2b 100644 --- a/src/hdd.h +++ b/src/hdd.h @@ -2,6 +2,7 @@ char *hdd_controller_get_name(int hdd); char *hdd_controller_get_internal_name(int hdd); int hdd_controller_get_flags(int hdd); int hdd_controller_available(int hdd); +int hdd_controller_is_mfm(char* internal_name); int hdd_controller_current_is_mfm(); void hdd_controller_init(char *internal_name); diff --git a/src/icons/16x16/cd.png b/src/icons/16x16/cd.png new file mode 100644 index 0000000000000000000000000000000000000000..6afc04b7a91eff61c711563d1f424af719667adf GIT binary patch literal 835 zcmV-J1HAl+P)Pn}N!-cGfVj~ZcP`v$Oe6&2N;lwwjY5Jk5J@y*M3g8()PSfI z`3j}<$1uO=otg4cUvegs_wG6O-23k1@Xu;}`ng@x*+s_SVyQh2knA?@;g!1b#+|W@ zg19YW@AwHtV||B%IVdmmBjDx`)qo5;5Z_=J53OME%L1G>uD1D9MgLy{t-WIxY#i5l zy1Epqz+*lE=sMux0XL!4Yr4Q{QpKYe69%!ixvrw$5U?2nilTMaRvo~+#$z@PxM(+9 zB)EVamqnJ68q}DMx+D7`t7_k-b4N?hhxYQ~TqNucI4Enn6Ug%bUdMK=@`jG-P!h{w z8UBEXqrqI`n6%_0wsE#m!;h#Xy>d-5xqcUIougxadzSfQ?_`yAlR&go9$ zYtuD`Z2AodB#^TGovbES7arWbbn==U3qM}c={ksIkf}=0rNApXtsXF@!=9=&x~9OF z=DM8Xo_pvy@~6{G~i>|7E)FOTXnFMLai zFcDEN7wzJ4tVlG;;SI`87GiN72G10TtuA%H9-Tdx#b-iNRq&!6Ho=a{Vjh*7&M0(# zowDne{h!kdh=zZ6r=}DIce)0rkC&DqKhKLaav-{B3KbxsSe9u7%*+yz*WwB$hu`9A zeN7<^Qpgyj(5E-gn+B)8LJ%1>hcg?sLUtpHg*DZ}GFh1#d56)VfhL1zmSB83TW)rM z)MZ&|t2tDHz4?0(XPjx-Ks3n^nV-dK=o>x`y=>|*;v-@2|GR|ey>wlX^gKyVa@`vS&KY!F zd!=txD5X?z95>m1=`@5RHsxrBhR*v#$t?*OV{l!UAdt!C@M&U-G*`)2Z$}PPsvLby zag&0k!IKVr`^AOZ^8_rP>&IN-!tYG?s81ohWS&H>lK~8k8jX_m5EToY zZKxw654zvy8%+DatZ_H2-vX?aEDB;F#0!InL<2B`I!uEjOvPcc z&RmX+O{W*fXjPr+zd_{4q7L1+yJTe%G=qcy!e$5_4bUao9BD|ho(L6Sc%lj4V}oE{ zp&Y%oE)rpq2*|;bm4P0J!lo&tZ3aOtfC^<+z_mCkon{;?8N|t>KyBGId`xv=e6k<8 zNDACRZ|CBCGtV|1(&tmRhEyI^?RaoPp=?MV7= zp7c~AXEY=p!`#j$9NGie4sf$x;`T73Ap_$-)NY}Q5cdmi^gj6otT~n(!b&(>}uD5N_HFv>G|1#c%tOo+G^83hlStizQ?`o zeU05{GmCJ>f8}qboyN1FR!Uq5V N002ovPDHLkV1jYEU=RQR literal 0 HcmV?d00001 diff --git a/src/icons/16x16/computer_delete.png b/src/icons/16x16/computer_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..06eb7c65b716d29c040b620923ebf23e58a1539a GIT binary patch literal 774 zcmV+h1Nr=kP)DW6dcpQ7}zN zIbOXZo;F6oB;rpoAx*bSQ(A)%=VWMhPHEIX@Xoxh3$t=gv$&$bt zR4!loHmK2e;uvkCb=j2y8V-`j!t?qu_|RuqGt*POp9TkZw)FQy$5C`|Qpve(f*&rz zY1@YEY=d}sgESNja>wY58Ah;RYp4>szvcRaekYN{>dIt*ANiR^dMbmOffv{|{sGm+ zW&ohI!q;hqFFf>yow?ExH2c1f^sljwM6&$I{A$zsjZgk=e{}VH`>VRz=CWAP0S(q9 zW3KyTPtW^iw&*WVNwsp(*(lWysw%4T1?LmmR07*qoM6N<$ Ef?t?k761SM literal 0 HcmV?d00001 diff --git a/src/icons/16x16/computer_edit.png b/src/icons/16x16/computer_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..88f128fa3668a6f4e15c9ae99711af03e850b8fc GIT binary patch literal 798 zcmV+(1L6FMP){tUEMHJ zq|yov49R+lh@yw+Wht;If(j!IABwUfkX`~of+(XvEM220D9R!$p@$?QOVeJg2cakx z)1-BGoxRMpe|8Nbb>N?wbI$jF|Lr@hsqHZqdo0`TGEFOF+YYUqe@+-UjzJLkC&EIG zj^kv^FwD@o+G<#aH4np!Jepe{gcc-VjKMTbG7G7+jt^gcP|P{xiaMNEJ2xbXb7VB1I+7@iu5^So|vg}Zn#Q7%-Ao3h8-+GjBqNL!>&4nN-FbHrc zw3!GT2yUJAHM_t$7PvXjY!9+LZZtQNX))XgKga%kJ0RbDhvd~h=zb!wEEDNe8XKC% zkRR~C>lNWqM5q!6l?PPLfk*@m+eDfQ!^5^_)Knb7#P}4Bj>o`J3D6R0I9???&O zhE@WjKY^Jj-uKy@1-I8{&V31GMdorA>~-Esx% z9gPHK!JVE%;&264Lgshp-`H|@K=B7rRJ0uY+lvU6mSbmy58-QJyeU2p+1AKcCym${ zx$7ydmo;4K$cV=<3`C|UJAC;Chb<-{IQA5>nMCzE8EZ~-RV{L1XV`xmg=EVX0DfHT c%Ks5y0O6fOEc%yjw*UYD07*qoM6N<$f+%%if&c&j literal 0 HcmV?d00001 diff --git a/src/icons/16x16/control_eject.png b/src/icons/16x16/control_eject.png new file mode 100644 index 0000000000000000000000000000000000000000..00deee0d20af0726ca13158a544ac10785270fc3 GIT binary patch literal 685 zcmV;e0#f~nP)+n?#>9k(?{;>e>v}Si$-Mn90G%aEHMPDD$%JpsCc0f4n#TiY zJVq!K#MxL3QW>_&Wjd-L4B%k^W=^G2uZVRRaq`Hgp9&xnAUGNi5ex?LsPGuqlSy=?+{MK+>ZVRRaq`HgAAfxATi86x zsgo!0rdpkyuClwF=`#u7_xlx?PNxwF1mN*-KokdKX`TNcLnZQ{q_&$$4n$MQ_c&S}&> zegOSkESAsbomQ*ubUIzfvi>--M2^gSBGfI*QaE|!)6ZR`X1!j|R4UuBEE9g+uQqNl z7)*q^Uq(orJo4!`X=15VdcnKb>lIg5uV88Eyu3N`Z`U=A<)T*mgx%fu%Gu@PsLk$) zik!>kau1@>=neU=Phow-FkTDxQ2y_W7;|6a)QO24KUy;PNDJ}HEqnTN{wu%$cuGOZ T6S&mg00000NkvXXu0mjfVEjtx literal 0 HcmV?d00001 diff --git a/src/icons/16x16/control_play_blue.png b/src/icons/16x16/control_play_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..184be23125a64eb0a80617582aa9e45c6f0e8c58 GIT binary patch literal 742 zcmVA-TnxX&OtGGJ9Wl9&at> z64AfGk*-8jW5*!%ji%`L0eUi4SZHM6v>KBKEQj>>WiQCI2u7w!vB_@dJWeh^$fvA-VU>18;| zfD;BK*&2BtFFTCx*GhLOySwhGvGONLMk=jWfx{L#JjFwu~?wkz~_uRx5khd9>ep_ zQ}9EA1QVX{MYpmC*>wNV`){a;^4cvEmdOU(IJj>co;;1C|MqG4zMMDdgu)ZP=!z-o z8gC5H$Dd0yohO>e5GDEMrE)}{e)%++CHk6Kf%JtZe9;vz()Y~7o2zXPM=?8>M|HWZ zlcVt+-N14ARN>it8@Voh;R#=KrSGC*&)N1?aqf9FMalVq=Hv}9RCwBqQ%y)!K^Q%A@7(vE_o>eo zlKmUjqT1WW7A-1i7qkhB2%>1?wjw3+iP)l*e~T7|B(_j=6BfRL5W&ZoFDpqK1Oy*Tyl3hv#|jpA*=#wa#ImpKF3} zB_k{w1p2TvbNac(lHV`ebnNI8oA&vFdixEE#m z(B9EaRfRY{aB08u>TN=G5U%fm>Iu~fDZNdbmHOU z9h4?Uk@4Z?tu@3Rb{yeqNn?ff=Q+xEe7!WAFH^3DIaxi8Xw-#WK@;gJNRCwB)Q%y)zQ562}&%19%GtkI> zh>CuYD1vCnb&C-S!zi#KYEy1BB3wjJJ1GdFg@hCmp`~raf`p1(2`Q59)I}|VLU3ha zIWuqO-uL?MD@>Pl;4sYNobPN>qea64E;mJD^OF4_f=- zvJTQ^p^_}L2+1aZ4pchL*%;O(s91rhRHRgX_h?ZC$^CP^82@w;r2-H%4}e1vENntB zbChx{L1I)m$+9`uFo7?nJU#FL4$18^ckp4p4T%EowqD{YEdrC^#&AEfvj#E02k9!4 zl)mJete4bbFT0hbHzT0bpqZyrGr1IQwDM3@a)}Q*zym0Kn8EFBWK;c zscR?Ou&8?RWC$t!LEVR{#cj}`K+LTK!g~;Lr2=&|A);d8_Z^(*#`LSJ$O+jy)p7b1 zOlBBcCOZKg5s9lY)JUR^hheGLZz1Hhm7`^ZoHA08&%BX z@&XkBSjanYG{9NE#stN}GOCS)j!glzW0!HhRZcg3oWc9}5LAYpr0ttmj@n6j;yoZ6 zniCb5IfyHUv^;elf)aT9Z4WD#_&R8{So;<%bM$jH4%Qcukpw8v#QKftOFE2yjGGsZ tG&OAB(ABtahZ6X|sAKN*5BQe=0{|&L5m;-6DpCLd002ovPDHLkV1n8DQX&8V literal 0 HcmV?d00001 diff --git a/src/icons/16x16/drive.png b/src/icons/16x16/drive.png new file mode 100644 index 0000000000000000000000000000000000000000..e3979a83d4f080ff2e75f836e97065cde5a87a74 GIT binary patch literal 430 zcmV;f0a5;mP)YOW36Z*}C?aTQL3in(b?nlh9n!nx%y&kIs@Au{1 zy?a7yjZwnFh~ez+?ITSySeD>gmrA99K$0Z6c7Ljhxht%#u7E5vK+;R#`5u;+7IR(~8qo*pH}CxKmsi(@A!`g|Pr~*=LVeEj)Ncw%osMvm@;;|-A28BwD8-WV5a%2Y%pIIf9#K~&=LRMjjsX> Y00BI)n_shN)Bpeg07*qoM6N<$f-RN5#Q*>R literal 0 HcmV?d00001 diff --git a/src/icons/16x16/drive_add.png b/src/icons/16x16/drive_add.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6b97c49e8c0164204c3622940ccfb480a56389 GIT binary patch literal 634 zcmV-=0)_pFP)I^8Bir7(`&SOUv zFRMP{A52ugg7m~|T>^n$DFL_S615|E>ToLa@lU;#Y&BwHiZDWkINa98rr36HL&!j& zO7PJlk%&!hZIyU@YgM2USM{2Za7bsbl397e{c&|_Ku7pIcwLnYbT?zMD6_MlH^4f& zo^zC`AJ@n^X-*x1_8ke{Wrvxbdql|ohNWTCvTz)yy#8*sijKpBOq%1(uwH=uTZVWw zH_Se@f18`Y%IEWMQmMxsQpy_rR<#EXW(yo@>gQn7o$~qRcFBkA0F$2v%bn80-&}8S zeIvX-&<{907*qoM6N<$f>#J9uK)l5 literal 0 HcmV?d00001 diff --git a/src/icons/16x16/folder.png b/src/icons/16x16/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ed9abe0338be5a0401f4aee1b3bb168b4d815f GIT binary patch literal 632 zcmV-;0*C#HP)4gUbq(tw1lgoXx`HVs0gK|-QT;Nk*gBnKlTn_z-{ zmhYU)-7d3t&KJ-ik94}dotgJ$-pr9P27{QufTqgxGmAP3uNoaE7bGM|sxpx{$6x!S zseeO+ZJ)Bq=VzY*TTvP$C03r?ILjc0=nnu+A|W7D<`Wa0NdS!2oVvxShDKmPGuu1Z{X#D3g|-0BZ&qN9*G%zO46N zD4sVu^%@Qrc`Ds1baRPAMG7LbeA>HftOGIA&>{S+y14WB!(!4xyYUUh=}X*79hA*; zs@NUjK4So91b$-;-y6->tMfCSvO&Q{3%OG#fnJLTF^s=9aIa;Dv9bIfwI98O6QfM# z&RzC+V0j(IuuEljHs;@Ei!vnIlXu^Ym7iYmY~+PRvHvr>_inmd1OCpx1sDLU%fF)P S!b7P50000 literal 0 HcmV?d00001 diff --git a/src/icons/16x16/setting_tools.png b/src/icons/16x16/setting_tools.png new file mode 100644 index 0000000000000000000000000000000000000000..81857cd8d05218020365367fa5ef5b2d5732e45f GIT binary patch literal 1017 zcmVW}`hKTLnv#$eiNXap^y z5?ab`nwF)tbz#>6U3O;K2kd)hcDzGK{NqVZ=FXjazVF=gWvIUXL5QLV1%euZoiah9T}1B@b+WqE^wAYQ6`x!m&h zTW_MPyW4$jWaQ%#qft&vO|_SmmLThiCm~28BH;)ej``w8%S(=p0?A|&k|cd!yn9z| zb(IM}T)vEx9qs$cr@!Ana@4!CumChgW8%+Agu`Kk!Xbd7NYf-3MVy_T4UXe#&89tY z%rBrYzW}Xm9W5G-_GmO3)#`LQ+`s=9v}zSx|G3cH)M&&e7-Id3Ac{4X!v`_<;32l? z^?2-dE3S?ZS8MTDY@<^~Mh0k_Mk0|wPv04vBnqI&J54T7v$whmv-W#R7`Sz72BTx6 zX!)cGMMXtTF;XBFOMoSzDz?oglM=ctDWMTXN=4->RqLThZf2$)0lyDt2M69sPh+)d zY|756S1VwgRoS2>bfSN zJN@&8L&Nj(jesnFaos8ZI`Wfzs|8>l3W-{u}(N@dtOS_J_t=`2ga@C(mw zt2?nT55xET@Wql?;(hQq?_8VfZ7^GGsgslIdi0NTXxneVYxy}AQ4)vgES&}lx29_j z4jp=tbmm}RiDS_lz@l?*jO(p$+}?ftE(ux7`8fEa626-7;MBWC8ycF}Q!EltI5+J_ zFd^d+&tb`BAM^DdKGyeXvolGh!2S7wkG!tgv1KoZKupHqA3n%Llfs(n5G8+M#Lt@_ z2P4mUR(S+Gu5rG{@?lroaU!O1Q&os9``+^}pRSo=c2^e%6Y<A+Z@c&Rop1HXW{42l!jXJr?mY+(D00000NkvXXu0mjfaunFH literal 0 HcmV?d00001 diff --git a/src/icons/24x24/pause.png b/src/icons/24x24/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2e38dd63b138abaa117818bab099b862405092 GIT binary patch literal 635 zcmV->0)+jEP)u)O4UuFX*)xxw2Q3#3~p<|L_;e<5u~_Pap9^6`Vm|!2zAqx zC{0q_`Vri9A%sFF(?;sTO7TzT&2`Zvn7_u*IWUWN-HvH@J= z|L`5S>#o*Ie+NycCCNuBQXGRE;1cjY*i1g`dxNI(Vt3Lp5CJz^HxU58=z3zq-EQUL zT)>>4ZvSUbd;pwDudO5c`31E#rYg0Wfv# zT|0L2`4!(jt@qgF80R_gzyyW46vDm!HJ0dHn{%gMM{HtHectzru4ho29ibG*fg_>K z7!_F}CWz>D1G*Sj0!0@LFhgt**AOov0}{lTATU5RHiMvQfSuUW9+nO!;jAj*?wKOdi5c-$iIJ2Gp9#!;#7g22P~GCi%6pj*ZKNKNBptsQ9yl~MhhCjNjN@EOgfOtV)_&Vw@MXX?M=Z#B~#voUb6Z4e_ zKvrj6vaMz?#+^rQS6DK8kN77HfUV}b7yLr%9%}X-CNqBPs@jF6)d1paZ%9!q9Q1O_ z&AkUXv^^PDm6wyl+!^j;HXMp3i4zt#)nGa0QCJZp!pR*OJl|hRX<}Mre=nA0W0e_2 zi&sfN!oFdXTZeBK4RgW2vj95<5w{!u|5dPNP*{^Y~-cPhKzP&N22S~x&We?eeO{tcM$AP~PsKf7tM zoy_jMib(_TzUb7rsyPifYXEmq0^NBPlZysUZ_%08f?NgM|C$BLm7b!rEuJGYr=$M3 zpmi~{YZ`IS^%MkJJx3-$Z=t_gZ984jyFfUqmY}s_JDE%2p0A2|Wp&mi+gN4bmY|Zh o@Y$jeG|(0jx4FL{Fy_Vh3s&UrRLgmF$^ZZW07*qoM6N<$f)CJCK>z>% literal 0 HcmV?d00001 diff --git a/src/icons/24x24/refresh.png b/src/icons/24x24/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c5054b3ecfe3aab1296d4f35c3412dfa78afdb02 GIT binary patch literal 1144 zcmV-;1c&>HP)^L1O-V% zK~zY`m6m->)m0eBKj+-v6@-gQOkfv81Oi`5B+Qk$98flJOYM)gYq)Z*tu?c(t=gJy z+WM#Uvaqc`nyV?kOy?g8wlxB*HqjX(w!9K>r-0!L?_5Cc%kSwAytn(p1$zEF=Q+>! zd(QVf&v}kw1}m;Rm1Sz*7Nyt>WCNLxTs^=oL~1RDK6_=OqdOLcnr^bN{#1rV`S*kD z0xZmICQ6+#;lpbsj$5-56gM8PYFpqW3Sf0(b*3TO87j**doCa6uf3o#G zmdyD!zFSku8_jiePXyN_VUYvCo2t0(RF+tLuF!1xY5f+`;u5I2>*9d(G7{rf6Adfh z7nM<9OXlK0FYmNo2vgCg%xsH&=PR!R6``Kav0*yKhWXajiaA5t?9M49WnMh#@rf*% zpTw#KDLj{A=hwbF2xzUeOAAsS8F*>nE=RhY_(f*S%RbKpg$ox4#~V`YcuYU$qc{<% z(4g`n1Fc%4m6|p2k9D_kV{{-m?)N<8n~rOtHIS=8(jx;uTe+UMmOVKufhoelo0sv) zl#rjdH#6e%gf7W2B7-)h*eP4Q1iuLN_q%Cx56(!^?jGVumy-fpGQZsKiY~n3hU0Al z`GKrBy{;md<8AIicKq@4taqW6!cZEI>5p{X)B>)+Xiv_XAUHsQEg45jZ*8C(+K3z_ES~l}^ z*aOQG3sN{-^a3xYX5leS_B)#*2@YQ`sq9hzH5i{0ND6oZZ;U-Y5r8qD7uWbOUem-L zZzDZ^O1g)BKl_|bG&~4vY9q?Q+M{ls2it106D`nP%zDWrdgI(FHcs1j35-irJ zi~X(t4pp74+#VkZ?{LD_t7Y43q8m=bi9LdR9ocZKT2r)eF}aD0uqeg7$#GhS9?<8R zm@c8-Ybo1)C}ztnYB=$-LaIaMnxl=N%-61#RMv(iLgcEJQpY(lj9fvg0N)&dO^~C? z@Gp-9kNK+z*y_gWOasdnFgGJ=S?ITAs)#u6Rpz9)WocT>1=DKL3aY$+!owJ+!hI8&a^X8r>9D$uwF78;9L77p4 z1W4>)MO%Vts0KApY$aJ)Y7XL%e#PeX+_-1ti3sz6UcQg6>eRpu!c_}P90s^Dl==^)RmzG_NuS>w)iq!_8sdbjAJA_#8Dgt*7Kc=QMgKE&}#-rMkm0O0nSIqFXM)2 z5g4Eyp+MUJ^$0(5-JrS|8NEo&cw#Gn9|6C2!gy6DSy^f}()j`hv;X(+|K=TZIzx_% z_kDs!7GveLmIGh|ed=4e1&noH*x%X?&zIw1Pp!A`D-SNzieC`D{hzD~1er^eSHJ!d zIEjtoD}hHq@K59-4<{;x>cGhSoX)2MVYSz;VQmqkvlHvZ+Q7&Jh`Y;f=cJiZcn)~O zbPc+K^{2z+18)^w941``Wd>mqh;^4h>%gXCeK%HKYYpP~37k!{rb~+v)Bpeg07*qo IM6N<$f=pQ%$^ZZW literal 0 HcmV?d00001 diff --git a/src/icons/32x32/add.png b/src/icons/32x32/add.png new file mode 100644 index 0000000000000000000000000000000000000000..60a7a2910eeaefb1c1d3ec231d08ec1312667c73 GIT binary patch literal 1815 zcmV+y2k7{TP)dFD!z@3;hSH-KzJ#7g5~qxjO{z?*M9{VtjxXhv8W zf`TBON z);?PO$@8Bhf?h;5KZYm%#@KW>rb2y)$5q4amKKLB!{b_s(&9C6+G=oP&1{ zl85ZL(svFclL-t@V&v>WtjaecUyZ!|82qoazOek6$95tv^`oo*M+}T~L6QJbm6v-dQ79Fhr)o;irRY$K$cm>qcHShHl`M@Xhu!%1)R1VCR(0o z+>iSmF6`UW{33*+X>|6VBog&xZk~NR2H&;59S2%;L-;p8)AP8_=fW{Rg0ahZxPCio zE6K%9>|-p;`<4N+XEjbd^~e?!mjKg|9{9#O)8L}H)fB1$#;v{OyE8!i+wg>tyO)K} z2V=dEYzf?7y8$&7Kt%&iFlNSpRZpP8ZpXTHE4?Tx5^=5nctLPvg&==vD7@DQ3F#T1 zy@0hzCM~Y8VD8*xFY`gs6(rOEDoed6 zCoiwwioHlv3wGIsSMMot!|8NjlnlsbHHTHx=fz@pp%m2hyuEq$%_;+^@YKQWB>%hd zDr3`~;S|Xw9=8aW(~S_3MlfBknS@iddABo2qCgCcXX<>Kistof;yj7tN&qz_O@;xC z$=GZF3sPz~Ni2xH39~`KLOkvQ4yH^QW7l)R0PZ9=WF(zZP0m&I3#*`TPCW1PAQ(ahQZ@sAj zVu27W);BBzDoCfFbTbBHF(zY+=Bzf?eF_J7hWl^08*0*lGFt<*MH&l}%NL%{4*qS- z3k8f|9Uj(2I(tbsV=xwDGPcds5gq&kozx&s4m+{?s^c7*))M=XL`3!Ha85AGS4V%F zQDlrsMo2#s3Z#FDREIKgGk))B#}LnlV>roJjF~+V8I|0330GINV2>cGu4vMShI_Y> zZxe`NI>TzKyNTj_tUAmmAgGlo$zmf5yJQmP32i~&A4hRL4~VHfQf zBnew1gp}v8B=?LP=ke3BCOkKnP>Vv*9yr7ztZ=tdp5JSH{%ArJDjB1jz$~&L!zHdj zxwHx8Xrytxj|Q7d=ntrT^JxNqmUIu0usc&X9m`30TJg5NhmT9Ev9pG7E6W5_lz3^P zsY7{jHKmn3r(URPl8Q_K6CuBmYRq;fTsVN!7eB)h<|@hLt;X_fBg#pZ*KESZ2VcZd zy9=v$lHp#?BITtbmsc(@ES%@bC|IvikbnP)pSOl5Il4l~IXwk2~Wx|uCA#AQs8 z1%?Gew-pc)*(h|QA4p4!w70z<=bjIL&wI`-x3CK9NuQqczV|)v^Lu~K?|I($D9rA% zI-Y#-Wy7@Ahhcc#FDa!E_}*WC`Te`^V$;)ovvK~=_7`@B%3QZ(NehB70ImlEJsHZt z@#8&Eq5tZyet6H9OCUb%Rkitv7ek**&$)g$S@5pgWW2m5@5?-THM0Pa416DM(Z{}H zz4#CjU^=BF$gqV|;kRZbL3!UW zkgzOld-;GCS82wu1f+}_c?#%wdFu^yj%mMH(^PFy)xotnl@&bl)Jyu=pmP=TD|b7U zLZa#;bQqwNAz_Ib6-NE#iWb}ayXSWn{a{_&;sw{G>Ja60tEp5{hQiS!CsC75qIKbo z@cqjm}yHa2yl1V^e4fiG&54s1h`rZJRWSaTshGG1I4k^w~WG;X@IP zWmpK6#5-D?inZnWR|9|yE4UugDRIb{Bn>z;o3lIgWLlA94Zw&2(6MEPusN4yL@P`s zZ4?R~9hg{t()Od`^X_`Lb$)(#Q9eqiF9-S{R9K>`S16tcYgAHaZ!&@Ji}7zQ01vSL$*!AeATk4{HjAjdQs%XwNDO^>EG@?Ak<1mH>xz%x}S!5vVD-5`b01RDd zB;dBAM9wVSdjtr1X z5t>B?7+DM#$c(a}BrF6Y?1-2`<(CRPL2;}}*32Z{K6fA9y|fE!KL1rLZvHVvS)s?} z+$>IsopP`o!E5Oc5Hv`XUv@8DF8-^fh^-_ zlYtCZJ&^H`DJo1**%{A3#*eKSw_}@NJSRP}=I%qI^E%qs{2HBSA4OOHpKviZi5=@h zZSvgJ|2z)#J&Fg`JPbGe25$Zi77Kc-v|AM@D7(f%=eN=@N|iknst&cWbc1%yMy7L=*RH_0F`K+u; z~7sdM0kOcqYcfkzFT?CI5gm-6Sii?SH)Q@RA_DbUC7h*tii-7M2qw1di+vHT$7 zQ=DG0oXs<_m9AQsCH2!En}_kq9D2?S;8d9yrnP literal 0 HcmV?d00001 diff --git a/src/icons/32x32/computer_delete.png b/src/icons/32x32/computer_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4416ec357ab312828d85a482b56f9e505ec71c GIT binary patch literal 2051 zcmV+e2>kbnP)fVv)Y1N+8LSNQqthAVRHaU9omy|j);bJ~ zMF$*;LKz(-q|~+$uEk(#ZX`L$x$M>F-Q9CINt!})CU17Xy?pQUKJW9s-?s|$`x)CG zf9?fMH#P=AaNRE{rQmz+o^9W__Z|-2@Y;NwfBz@X?hcf`p}l=M{J;mU2LnB6O2f&M zXP^S_Pd|8I)8~pH-tDjI;hoO~9z)OBUNBW~uiNB#c~9P#dBSMs0U+sn9&E?MOTFju zE;7Ir0Bdep3VC1Vp=IU+KuO-ku}pYp$I|F(Q2ICL?_lo*cz(dN1*P;G^OB&vuW2w1 z1Klqi3B^^MF(?8lqejkrI=;Pa5uIb&J!6`x4XWC|Hm4H7BTqaZo@;cjVt(bANTpy_ zEu=#q#R>_E%%~u`Uan}dhkyLL-HzvP=vcY*x>OyYoNiSrC8a5x=y?M*=_J}(-v`gT z3POG|c7y5H1V9R!zG3S(?}bQ1n`dJPV*BJB9oX@s-{9+CSPRGX%ji}((9;Ls4Q2sI z3Nk*5Z*BiMlBNbdPG%{cC>xihur%i6k~zl<(B1XbPz;Yge>kMO_@1Qg*5%D1!!rS> zfDaZNptdT7KMr>wWhz*fj)aw<&=gG5K!T`DT7u&QX%gdONYIFxJ~gD@JU|d06ww%( zfj~*Vqu^AmE!Ue30Pa?yXn-!?#@m&A-oL(yijm#BuP0-F?6UU z44NL9jK#qDfHWl0JN~t zNWv4A5;=$E7AS-zX!FFZs)qgV6ZqJ{XRz>>-wo9tt{MDie`pPI>%ItQ@mlx{a)t)L z+>rrtDMB;I05glh0+~?;l%$1VgdGu6puA#(CnybW!i1xlXxZ}%)Es*WD?jyVEaB<>Q15NK+~J8m4kAPUc=Q+CZY$b$Ape$Vj+e zu*OLjqhVTxt8a>_jf*k_JP;Xee>d#(w~gtYE_`15;YbM-t9VX~p@0kx%RVPI-poa7CT2} zRT_6SHHFslE$nlQnN_6nb?HCO6#~Hm6y+lO2GZ-El$As(kAe81DA0I9|T}wj^mb5frWPFNM;*_euV$SPo(vaou#H**Vf8h#L zztMyGrY1&d#+#1WTXHR;9d8Z{VgKORV?4F>IRIGIwGBgKx!~?fmek5+EofcRj3qbL z(&|xV88}N;4jw&@V~6&2J^Rd0f4Hh9RpaLJZ7nx8v1>|8=Yl5d3XgiY!cwRNaQyXC zI5Rf6x9hcwPtwnoxjxNOwC1|T=H=@)b$+jMLEWlow;WL*R8Ec$zr1hPlRHNK_uq>m zWJ%kvKDc~GYi;%VW$#^#`g&^GhzX`9hKGl7_TnX+9?iUXe@|bR5Fu%w3xIHC$)vPK zTJ?-?2+_?%EZos}ET38}_bqO`<1KxI`4HL{H%Va_}F&P8rNMUSK zke_a_PFp&Gl`^WNVp!MC_V)grzt878_uO*tmP)Cf^zC=gz2}_geV^xjzxO=?lRL}@ zfA!1`X_%i=N=^7CAq0HSef~%Hw0x1LZt&e?z<>D5-#w>Q_ruy8sYV6;*$G)yUc)p@+YD|7}QYonKml6@v z#D*P*gXGFTQRN*ephkc43EVuVj^HTz%`D1llUeOwoKqda&mP|%e3k?kA-{UH;&DXE zDhTK!Um+^bj8M7n3o}~Vx{ceOb3A`()BO4gWwk;f-D0eigcRuf>q(TC#xQ60mGHa^ zPUyoWxC>R3H`;+Xq_OmYdt0DWLr!vIP@#S1h9*4pi>J~0V%k$)if=yn1Y!{hBNTH?P86IMNH}&*4zzNPr?BDvZv@Hk@b*Ii-TGIbpbjHz zIcZ~X*J;?5qR0WEcwyE7rkBOB^PMKdBLdN=0V`@T(F7t96BfOS&@7%?e3&*~28%|Y zi78R~kC*9$2SIO4X)^Mh-kw456Iqm8Jr|?NBv!m}3>!lS0><@aS=&WvTmw>*m_$5I ziwczRb2M-$G%GaiNQ4gXdKLqOp?IH#Y?dl31I<@`7}wI8uBtp5CT|aBFF(lYtMXO*sklcawtb6CuTevMUq=| zl8iil?jvYu{Q??lYVp{%gD{*?oIHMlQUP1$25n$~mNat;FbQoZh(IzDDK*`>=*&oN zbqP9X18G-bIPC_BrX1=`Cw$VL$qL-xP=XQLz>0zU(AathQ2jOFl^^3?cRSYneH~aN z_|Dq(*tB(rh8?BZX0EI>11=+>1JpXuoo14Olqb+{3pyZ!jYbP@F&W`{LAmJ~_xUgD z^ZNKS%y@Dh7OcLV;429J5OAtZXDF^dzZsRS`;bnj^UbKB3g}rzGe9nNqM2lXDTcSR zJ_ZQx>jb3chL(tVpyd&U5jdo^cZ?`fvJ}mKT#^I-z}JCSHTbTe6_`WXOyl_7BhUYO@C5n4N(5kSx7Sh(|MYUqUVZ0#z)AbjYJ7#@d;ZjkC7)=*o+!^XMxJRlZk`HKN?~QW9f*r!qm$_X#eU?W_L17ESkP@Vkq^H@{ws z)6I|I#Y5DbuI@e15$vLSxay(Q3+9Ak2{ONV_ zIILWFFYv?PE;yiP^F(O*W4i4)_~-|#Fp^B8_e?)dDbgpSXdLLkhi-iYZr@&rYz77+ z-`aTvrmft~?RJFwf)~t-~`_v5+--qPO& zIrJt@^u3E?C+cvx?)$J_phLcci_PhJ^U5R>?fFa}&jI&ue`)_N=cGp$%x^%`yjiH2 zQHjmZ{s70#IMysah@HERpeM2rhtF26ZQr!40~32cLdf_#I`{tDt67{@bJ@(AS&Nsg zdZ4Ug<_+auKe{`6aOKo@QB^+=J?YEa_ddO0{owh3_VL;gJ@{P0_?QWE&mGSJEmBnH z0&OPkvinxw@zlWCW7~eayZa^G#X?Y>xI^Is)nta*i@lthAsZF6@?d|>0c!`c`6%!| p920#zwn9d{5ZK56>G+QT0|1pdf;dd=HYNZ7002ovPDHLkV1kQb-lYHl literal 0 HcmV?d00001 diff --git a/src/icons/32x32/control_play_blue.png b/src/icons/32x32/control_play_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f7345f3713a730b613faf82026caaa0adb375c GIT binary patch literal 1971 zcmV;k2Tb^hP)FuzPnw&Ga@2NOxDg`J$q# zyMDH*0$W!WL8Ha4>l%7TG>k;`q?i4whyuTa`Ew*l^#AdeAZp(J6tQUZrBl^gpQ0u0 zb_ghy`O6CHT< zz4qRZsyEM{OhTS&d1Lpkdza)rM9Q0cqUauqfy1pxw@w(xB!@^#Zy5cf3U=PJki20O zh(crc>HVAUNF*U8#=LTG-J!b{6>iwGr2^-IQCt~`LniGKnJx;P=@vv$Bv_d*B&<*D zo9|c{j_9}%HL!6-E-qgF%BNOrEa*A;_a-MX9Rk9Noz;sn3QGQ1^VoVyGM(ZbgG_Fe z9Jkw$XhEe7nS5-8!?1EfmFwbhEGZlLO(QlW*SG=N* zbxsf{TDvvd<8ha7q&olNdd#$lW6p_`2-0m@-_jPufydY3=PxwC>yl_qF!v_E@4(5Q z0C{!u>iJLC+=i@{uPDhjlSO1JZUKt`bw7`an)kb~_o21;>GN;G z*fNhxF{D`W&?PVA$+$aS8o<8fn=%_(S@mbetvJeZA9DAnVJCFzu&ZcJ^} zk|89`Mmcd)CKqUek(xk)2cm`u7r9%oW!IKu;<-0I#9#JqqY8q?5WZ>15q} zTs$1=ZaCZ43!fs)q6#bmnkZvlrWbYfC-B#O+vx^mK-aD7SxQ-Akwy*pTzenJLzf#^ zHxmd4{_*nR=C-TkQczc$*$eD5jeHyvDf5s06G!%w^0+>uh0XkB)e{tz}Z1oZdi5)jvZ;j(Q3Aw{K%IT2-C~hkm<|} zYCA_xc0iAgbqh%o2)oGEN$=&a-Ao0XD5$NRm`Fx^*|4 zZX74VM}|cxK@S`~kIuIaK60Zk5FoK}=RTm*!kE9TvgE6ny7-=D^URvojp<47I^PE- zuH`c+Hxp09oHPN?{<#^~dIHDWj{oj861&c+G(mv>={?(cA-?dw2lMA8e zsVTP}yHKs~ff+!abkm&9@Ctab@e*1-4-R~M;Nc&UXdlOa@|BFQ&3f=;?b|(B>+dhj z$@DHR@|$YRHa!bBC*7P#xrb(5x)(Uu(294@c7&RLy=@B}(?b}xjZPxK{*3aRxpJ!Z zonY4bZT-V>&o>v%BP$Z`gSdI`n{MP%Xk65;)2N!p!Ww>g_#Do(b`O&Bt^8R*807Ms z?o#T6BEm$1r)rzVvX|$d>KG}@O!uJTYd&ktCe^hC$(|8R)Z;Se4URQ;;$mZyjnF8@R%C-cR7$@7V2rnkDWlHjy+!Iw6DLNw`rbhHsoO zWGC6EtvL4oewPcJdE4r6-{OF literal 0 HcmV?d00001 diff --git a/src/icons/32x32/delete.png b/src/icons/32x32/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..30a45b821c6739e81891184332a263cf725e9af1 GIT binary patch literal 1886 zcmV-k2ch_hP)<# z`z>N=cJDg$-ERPfPEV?^2R}x6Xb{zjaX8Bb&U^4Q;cMv>qMcocALxOxcR&1M z0hNV3MlSvbh1tdYlb41%>B;(L9MIo6a$xe{nG@NzC%z;jbS9=S|CiU{l}eNsjeJq% znXkW?6TaukEUAe&TAw}%HIqRtH--F-QA`Yu%slzt^*#4Hp?m`TX!q@dr;fL^J${Vt z3aktaVCDVyAPhqS%czwHBrZG>cEqpO(b(6IrpF$qjNQV_@EE3sCuS)VyVpCRu0Qj? zAMJTHd+@*$dru#i;KlRjVP3ro(GZ2u^dNE}2>$`X_XIyfS<*Dvvw3)T?;>%y9}%wt zbGelGdUIp;TyEjbRbs9>p#0+Cp6-2#=pVlL{153{6{QOoV14)@)JQ}c3xJi)iBRP8 zg6!CZC7@bG;y^E=u7zTLslTTw_UE_fi%Sfwt){*|5joFn=kjtVZ^OKDg(7bV(!Sk` zblC~>)-d8k&{$hLI`$M`yZ(8)+ecz^J>g8YxuwA{dS$5*+m{Fa29>~7id=9c47Wi*$1m5l!?y)85j8u%Oj%?`nRIn+!J<=jKiLm1=nAT6m@pCu|EuN;f|P zBauQnoxr!+Tb^TVcED&7IGdsl$5(A^3_@QeoFdCaA-*X77KL?Kmu(OX^QcA+L{d8t zi>OHI+F8bC4m3m*rFRFnS5m3xW&)2XecauA+oqDT>2L4TI_f9e3zJr-(j^juGeJ(+ zg#u!aJc@Wk17k8aJD|zILLS2NWg8W&#Bf~8Kl?TGFFdv_4%V++Liwc^pfC(Mq2Q@7CYicIc)wT;RON({M2A3rF6+)({$Sz|AsEW3hGS`t^Oy%=p zYWN5gAM#R#SaZPVlBO(62SN|TT0`b(=J^40Wmlt2M51u6ez0wD)@2((R)dNNrsuuE zC^Nv_%P}j^qKy!ZO{7V!T6VJ-sxQAthZ&M^3mlXrCK8HROg1Fe6$WvONbNcs9q=t5 zBg>Py{h34(dRrTu>0Drd(?`7k(b(p}H;g$&1|mNx06m#PeQ6G+?ZWc>5ys{ta3-tv zz%rGeU$vmO?~)3NvN}|#Cul}cQd<$$Vcm7<*HbA}@;R84;7O}Cz}W0S^_7X)bG$}* z6%$HpE7WK-94g}fBVV#xeK&1SRbDbH z>zvr4(2v@fgh;0`fAMY1P$L|*oWK6^)}7Y~bD0;_H3#^gH}ZvRr<1X78mfpzH4g^O zaD~gyG{cBQFkChhJ(pNh6O>dE3k1Gcs$kyHmd?CC^eo-V^ZDPul5uf*f66Uhc-j!B z426c4UxU$>l@Xw9(UkM<9mfL+C*&{_nO5pKE=B&11kcsA#jpPRSZ z1)FCGIq{F<4f^S7u^f$hmK@Jo$8H)bu>jojWnC+{7qQ^7i&6C?De6Qc%&Ae#U%7}p z#X09_1p@yX*`6dRaQS`eT28{-O6MQ@_y6?s@rD!aojb9kg_=~HwwYv_*6viWO02$= zu#9sow!l5-ulhx^gyms<2qj;;qBMj>Z{rM z`+Dd|oP;J7k|fc!NqX;MQdLOqh9omX;QDr7PXAX%3|^zcA$Gs6ACjvYlG)vi(fb%707*qoM6N<$f(2Nb;{X5v literal 0 HcmV?d00001 diff --git a/src/icons/32x32/door_in.png b/src/icons/32x32/door_in.png new file mode 100644 index 0000000000000000000000000000000000000000..a65ed5884e371fad9d3c82212ec646eb7bda8cf5 GIT binary patch literal 1382 zcmV-s1)2JZP)GW zK}?BFU#gJwMGZm?Q7EP?eGp$1g7%@{yU+(geDF!AivK{d#3;pw`Vnih6as3sUsTaV z4AnHGX;VyMQ)-jAGjs3toI7_nyRyyBB4(45$nN}e=2>lySr<8ZRxk(xwFS$q6k6= zzLsvrKD7C{i8yJsJ|9(xMm>Mh)u_zuzPGCD*&ub z+G5dlOuhr+stuK=)~fl3G( zrD5jad$7+P#YqMzHHSbEWwK?{1i)zPG*M?wM3~nkl>S|K{;xN&BFf64Rm4D25pt|0 z(PeD|2IxnJq0`m97)S>ic%kogJll(*vBEhho23OQ+Elh+%H_M$fj7-Z&H^e#s)m7d z@f|FN8r$4OLc3O`BXSt*eGw&f0>3YR13NhYnF$H9P9g!P8SVEoE&&8NCss&Pkqg0k z7UbFa@mG)GR{3+ToV1W`u=itP{sa#6z6_Zj#(DWQ)GyD_#sTea5`@6UA~bOb*m?Iu zGw9elkGW{D(hD4b3_tmu@&dlS^2K_&6{F-BnEYcHgFS~RZI0uj97o&K0PP;dUN!*0 zS)h$^Pp_?T)IWIN5{65UVxXw23{*9+qUR|Xa3(Tjd?a|5HoEfX$9Q7T9z>lt-ASi% z+00ap2z@OepZQ!GCJdZTs#(BTR_zU_EUFAxQ&Uh<0WM8XAv53UY66%(VK**B!WSZ2 z(SdO+Y{{k(QX%pYh#BBbLv<6`JjG)Rk&vScnb=Zo!0aM$q0~k6?93D!|mWoj83ykG`kNb(+DK-7i6p`zW}^QpKQ`Ch<(SIB0_CdnrFe^&6!98fxmuLhPLhs_$!&IH0+Hx`*O zHL2(=Ppv&75!UtssxG)qw%~1<1dKDIID7GZysN43@OP<1Yn70m!kGF>$d*Y_kDwS! zdGB@{j=qMy{{JYFv0`~a;%3N&$TsK&eq3V)avL-w4#_OvOIFZyaI^}G7J3nBK)Twm z8vqD(u;Dxqcylu$FIE%-W=y~)9S113DsIKv)~#~=h8Pg3gcA|xu!}!LYYcD$;u+BX z3pO(lQXR;*Fp{~_>-w2ZJQ8sT;x35wk<5>VCMr`{bIAatMMQ58inFkV_X1uQ>n4_x zsDj{wW1vQanW3Sfa>I>i;n*^(ddYuF9s+G8&de0BBNw5w5F(#4h=*g&f^u~tas$c8 z$jEM<3mOsN&u9MY``H8Aa=F9Bo`Vl}wD)ZYJNw^WPW}GvWLwFo<>3xj oU4hN}DF3io4~D0jm45^n0OJvI9sH?~iU0rr07*qoM6N<$f?2tFk^lez literal 0 HcmV?d00001 diff --git a/src/icons/32x32/door_out.png b/src/icons/32x32/door_out.png new file mode 100644 index 0000000000000000000000000000000000000000..e4efe062692571e4bb70cf7cae814a69b72ac539 GIT binary patch literal 1394 zcmV-&1&#WNP){ zn`&r%FlxmXimjp2RDtf^J2Rd$_wKTb+uciyESzk1cg~z|zVn@P<^pT`66e49sBdxl zyI|z`ZcCq&-dY7dJ^t>ddp2%3CSf{+mw*zIzt6}u2(D%)$Hz9eG@oCZ`?+KKi#K6{ z073}Cg^OoT;P1H$5RyWXS>wZMVnD_NP$NPVsG*gs z0bp$cGhdBjDQn1&!%#pvIsL;B02OUk4Sbk7!{-6mh=FP; z@Oodtm`S1^S2*{I%*56JFXOeE02sZ30r%aq2+Q>W^~ey$c5FhwHmoS&nug4q6tT@( z`){K^?fXtw}Ne^94}9fXyjNLn<_zBu9@nmoZGadUraAOgjeP8j&hf zhAw#57WDUYJV7{Xkh=lA+H?%wUIIcZlb0JI&+dXygiP3qDPYYogHCj=00admR*Xd8 zQc$V^uV)Cyw{J!FW9@^OoOv5N?|mI_9N6bhBZS87HTy9*@-%8E71t(3F*g^14FNb2 znoxusyydPbG_IS)bkLih1r9)B&k_9oKpPq!ZGQ^qX5WHL0299+bQ?wcVb_-Jq+U23 zIP{eiX~Qbe#<Ljv%}wFd0j_C2LCDAB+Y+3cy8afsfBclV&Xxj9Vn$a@hO#W_8V^wqnG zAx^MFK_EBPfCwj_6)pv&0{nP!BR=^$gU%h97z6&l2 zwO{!nC0rSbi2h|EyE_<-_JBlKZWa_kOb`=vcX%z)gf4EKoOc#&cqfW65EuZR(6};` z%d^1ULM1eHLQj?-Mgo3YMT5;TP$a_Sz`#JZ>_+7H={&1?F8UNd1)9q5^Qn3?qyucI_mS}o z!pkvNLAG!sa^rY(baXTKh;jr(-zWd;^VuD@q|*ob+V`z*tn0k39{1;`p@=rmM8W>I zhtp{PI8A~0O)3;zf(06B0@##gfmG5`Po07*qoM6N<$g5UIn Avj6}9 literal 0 HcmV?d00001 diff --git a/src/icons/32x32/drive.png b/src/icons/32x32/drive.png new file mode 100644 index 0000000000000000000000000000000000000000..1b21050f31af873870dece6c794b29133bfe6c7b GIT binary patch literal 869 zcmV-r1DgDaP)1Q%!oX zm*@wAN%g#;i4htFQuG#4Bw~ml75yDi5r`yWCDD^o2t`UHrsQ)43DOol2dO)*J3Bk~ zcFrAl-CcEdSC;l=?{ar`?~ijn^S$Ss*=0fqsAf~3%B==a1E@Lx^O(~oUcR#ABF6S* zJd@%#u3t0ok}5|5ef;@^)!Nz$w(USV&4F`KR;N9*mu!$NvRSGE`smoW6^%yW%hzuZ z4u#R61NlnqrHIJ8b4BrixnaWTQzv0*X$kuKdUq&MXh|O#9kV(+I^g^AvK(k{I|J+M z>#(*Khh#DdiOo$<*@J-q`2BvUua7`oT^%eeewO1WT3TRkejWz;`|==i0rcUKr&f1& z7p$!O*qRb(%zy(84G@V$K-V=e48s$^vMflYY>3C>@OO0;p{=Z~=H}xtGcyZ=1Glpf z836t9lVR)1p~A2mx3{B%s1XHZ@Hv zQ~m)s|3M900000NkvXXu0mjf=;Mjm literal 0 HcmV?d00001 diff --git a/src/icons/32x32/motherboard.png b/src/icons/32x32/motherboard.png new file mode 100644 index 0000000000000000000000000000000000000000..ce695b10c6f3b7e61d873262071f6539478fca9f GIT binary patch literal 1852 zcmV-C2gCS@P)RTTdAKIh&$_s+F( zY}83JGlGmDsvkYbh~9)Ksbxh%We<8lN)M?BDyXomEU2XDVOB_wG0mR%Cqn-eRAi+= zk)$=6QO?Y5=A3)ZJ*RK2ebjr;%#cQP@HlIq{rdK|zP0wc27tfj&Xd+!#50kmY|8sz zK8F7c68P`UUHbV&KEIT08qGZMvZY9q2K$T~q;EEUgk@6v6RfFDF~;JH*YBDsdkcUz zL^ag=f5DawD*)@m*dj-Hy0d42f_2jq&bAqvC~<9BF>O8HzV_E#&{f+V9x*!&Yqjek+Cs`{1+F=R&^q$bdnmy~?*8 zmh&o=cC~%Zzx|zdeG4APvvbdJ_u|$!4S7w_m$%=tDEVB|7W*$-g*s+pL6_I23t)%zHt?+=;Oh4$(g^(#^y6+Ai@f#cn zJt5tVAaB!<2-7IbGjPJ9P1w1!7u9nwMEBuGBHD00md~zHs44mejN6D4-?)1&{8F29 z4FS!6;7#q5jXbg!)&t$hBklE^ZFG!tfk6&HIMj!4zTT{xj61Z86H{Ef+SjOEKFf*_ zRJonwx=?JZ=)`(3=t8NHGGe(f-!OD1we)v5l(Pv?#z|x`99jWH^$6{il4?N0q(UGo z7bK8j{r#Lk0ZP!1sg~*MvdaS$m;$re$+%fK6ljw1Orm~ou`>Y*kW?8k`vEkV9LnXg zMnT+&H3S!~iZszYb&2NyFxV>;r{}wg1(_PxsR>X0Z$$(3x{A%%5o}?AuXP!zm4OB+ zDbcqn0W=tP5{8v>Ns~;$3o-y9j=%UWmmxK)@)R-qOi7cE$G1)w7y|OVgnkc)*&;|8 zn`ObKFiZ{F$`x*C^wa{xE3~;Z>cx7>ed;&aWKlEIHqpZOedmHO)RW3aE+U$2VZ&qz zFdqfBSV3F0pa3KVr#$6~`LX(GFf5|yk=q!$i3*YAkQL~{(k}^k()bR=SkGveh{)Sc z4Xbm`(6g5Z{-4L zT6GsJvnNAQ!ccszIe{BTIok;^)rfJ|XcGgnh~(@!&kd+Adv5N)#n1F{(-bc+EaQ}` z@0VC@EdWfW1G?<9m+xb{*CHHs}ttP)%cqG7hMXKXTDgtBhL@OyrNuRsR=4Djrwu70Vr^5|KytR-}s zX^`-mHn|Hi@A@S(_Gp|3aTRyW_(Mko@fa*QV~?`lNZK9fbeIdEl}gBDbHe5KxYO>X zn}1Fkt@e_|{35A*jc^mPIQfM)H#8T_6ydC`tFv z8Qn>)&>9UuLB%E-+UQ+@?c2WBuBp?G#yNI1W= z?PJ_9!RgoBw|}mzPkn6dc?8qvErBBBh4$UL$5BW|)Bv;$$3U-JzQraw1V$`9b{#ATE@n;ui(IcBf9%_YWG-ewa(4@CU#)sy6n5O z59`#uj5W=f(9}NN^hs5UP-71M=jLxe?f1w?ea+vsZH?}^H^T`0X?#0J&p7}3BNR!l q{?TZ82QW#ai2wJI>-EpS1Q-D1Wh>VO{XJ*^00001ryqqwlyw4OLSS$ETQ&E! zZ9i90S+Qlu)>c~A)JPTO0kL+tx1aXCxKn(ePoyY35ut&rLo`1(e=Qc9dGhU7_Kf5b zS>h8va>dD|<6zIm55G8WTp7G>xIG=+y{_+}54-pFcW(ktE&*G-wER;NT(frgp&i?( zt#u>my2fG}%CbxzkB8E!lu*<(tmz_pGN)$S<`$AUJ!c1u8@%ji$+$U?mvQdt`lzq7 zWy789{2o#jg%m|yaAdIHNvBO*{Kk8%Ll63}gZ-hS$BqK8SOR{(zpQ;r%iRp7k*eup z_Yh=Ml1$S~CS%o&EFx{|Kp#Z5a^!rz(ieC!Pz(Y2-Oj^L1pK8`Sy4u+>ex9~JTiLm z_dluo(|)?QbrT)=@&x^Q<(fz|*6m2Bszz0nWpqbl9lhCc;PKpAz>}{AJXuAlYY0{m zx18zRDo*6s!?cHQj?wO?9wWR)&OiA4INjg2d7(z^Vndw(r#e{wEWbLDTMPLJc&lrJ zk5pBZGi8Z1E zrgO)95D~~^DaC_FGi(Bi+1pkMB$F-LgGAk$_Hw~BAOYCt75(m5r9K6R=L=`CB9V?P`NlY zM`{Wuz@;m(4Wb}>J*y_b1C2!`(%tRzjbbB}N?pG_Ju9jm&KG;UaDg4{XXA5}WIVSE zNFcX}`yi;j+j zCUCG@qt;k(G|TsaC<{JqV&X)EChL!c{vp@{2YAI2K*i4e`2Dx94vmJb%crrB=X|1D zq1QMSL!;vad*HZrz)A$L;lytP7p{gwH@~{{#|<;Ij(eY5^O{PeE9@6^=PJt&H8;ry3)|wa-EzMg0(KGMAU1_0VRsLpvLJ{|x7002ov JPDHLkV1ixr*k}L% literal 0 HcmV?d00001 diff --git a/src/icons/32x32/setting_tools.png b/src/icons/32x32/setting_tools.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1e72744479f7980973cc388a14300bb0a4bef4 GIT binary patch literal 2315 zcmV+m3H0`fP)Ran$O@M`*`EZE8B1X%mg1D)>ymAr_M{CaIk`W%965Q81mxv`xZe zQKX=gqVirrfqgH#?C#z7tLMMDo2-b)w7oNDcK6=@{@-_A-}#pZQ@plq-w~OZka$8Q z5)~&TB#4q{B*C<4(}1RFkl(upJw3g$lYe+~B`)0EEC!8613Vr+ z@Oo?Q4#xpp*N^M`WMAGCu;~M3hyExK2zE&~Zh-l@Il!YRP$-qq+WIg2R6$=~U*mhH zPwl|9hVtWY_9Z1GCM;XN6vT0H;P?9xoCi*)6Z-q_!PoT-pim5Fo_YVhK0<>3B=CI) z%4+iS@(_DH3v6YqP~X@DvgT&!>g=p!7|U?8tf>Xpy5Fd%?3*`tZbD(<66m;n7p`A# z1&jo1@zdiWH#-ZGlat_svw!Zv^&&LqWCZB_r3Y*B3-Y9!q#I#$)Bpyf5gHJ@x3^dS zR@I3uxJHL&Mq~Dt?0(Ei527iwbg!!*?`v zVoe6N1c>)Sp&-~}?L?s-AAwLFkK(`w5!{5;>j0<2 z33~k~7T$H(^qiDzzK*O7evuI1(|oqAz6IyAHSnZHqsA3ob$;FgP^#20Hf9F9!vzk9 z1MGwZwvk4wgRklvSun1Ozq`C1muhfu0OGOl1p+>jK;zTk_xUCzKo9~4v`FApIF%;&G0||ZrHPSCA6s+XdhBRidzM*X82%8qlf0}EsDs<$QZ1Y&}m^|=!}I0!=i5a;7@1v z;nxRT8@qU1D@LKEAc?nU&(0`JPELl7jt)3fw*P6oujfRBlyuD2&6|()F50!`x6dwv zyE;3l83(xi6x_Tw2h{R2Dn9eSYwuMTAFzY}f#e zZj~ZC1j$}lF%YJ@gRyv;>U}5>D}4s*?IjH>wgSa z2D#niBz=C@aT#4Xb{Q!KmEgK|~d6~1~#hHJvZ>XINc%leQC{(fg&KEDr zoLl|!@`dolIB+k5t8q?v3=iN`o&ac`4}O%t0CxVh58CxUFqzF)bjQ|h;qnhtk>ZD* z#gv@ezI=X8b=k8E;cCBu&3Q1m&TNEXtr8@+s{d)wsX>4Ov+=`r7^5QKFWZ;GvUzD6 z;||tc92e=wrr;s)=-18_uUI(0diRQKxNz6NR=d~#J-FU%0Ht~aj31U2-ERK!YM4+k z>u-YWG(mhC{C-sq{6lVmUo1!lwbd)pNmk|BWEU3z>hAgyZB;Zfpl$dGFC2@7 z>3(bk=;+egnmwx*OMjY~2p79XLGw89Pb;?A?l!mKJL*8E@N!lZT{Ay7uXfP7m2_iv1 z?viW|Uzi#qie%$!cTG+rK!6sP)t=q;lSM@<(ep>au`d}5C{z!?*?H}_{?qc0IDv8m zc|%CJnH!(AhU6@fxM^XkF!aeJ0tBYTu6f~N>FNboaKYey)^i3ABqPcJaNLnq=+7Vj zm;<+uE2{4lbutn!APKF_C(&oG&a*b1uL-oFXpT4vAK=cI^KV=2d+_@s{oppJWe9$b zlUOSUIR5em6jXI`=N?AUBhzY!!HU9bMI{(EIpA`)5lU8N;U5A4d#VZ$pwt!{P&k$d zII&=G&!|eKs@nbvm-EMgPfEguBy31R$++N^+FQV5j7?;~1yT^kEBN`AteJ698ap4H zxP=*y;X{ghsB)@i)yW-uaLq6`l)O{;H|2jM9sH0~QCKvx8iEmdr%Y2-{4zct4d?(S z3NjMPF4yuzVJUc`W{*x@?eG_>Q@ajwL&-QraF}4gr6j)g(P^PL`5BjPq(xO#{5x*X zu>b)w>toSoaFdYYMy8P~xUtFfe2OFjQ`XGY5$jN}5(>C;nvhdSAJ=B~|HAV})RjBN l3pmH@|ARyS-|IgD3;=X$f&6|~5VHUP002ovPDHLkV1lF~V^078 literal 0 HcmV?d00001 diff --git a/src/icons/32x32/sound.png b/src/icons/32x32/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2baf0439b195248a27b9a0f33163e32f1e286f GIT binary patch literal 1855 zcmV-F2f+A=P)_Fmedq37+!R!-#+~_Q@45G!^Zm~E`(B4qRTUoRkNTJEx$&>%T*d!x z48z!WY|ecOpMCAwfO%BlFJ(@TOCFML8x&73fyJ31TGT)3bqH<`^~L;;K>wQY~)g!SozfTH6Oh=YvV1ArbqC3{x) zm>wG6Hk%DB77G|nCQW#Q0Ssu3)TK;|j zn6a#Smb^}cy*-;8f@%61fy05Eaj&+M9A zh?mX(ouAo))fpXJk*259*$zm`kM4mfCCg*}*K0su4zlfZec2Eq+0SeyDoIPU|R zQXi;XLC5bI+e2fLVbF8`S!tz^6zL0jmhVc%I9HW`<;}ntRd9;}P|CvrkYyzhAvzEA z!aeVS;&0NTA$>)3a4w(zc1&ye`VIxM0DQ;J=oTt)$Ulz>lK^Nd{DL7UGfL=@dF9K@ zk3|5IcvQCcs12&*JW4*%kx9dFftx%VCaoRViUmaA!Xp3-G6Gr-Dzc)<6dAhQUDS!zcjc zK4suQbV5G}?q;}nxdDMIZGb=v;M!m+rf8a&LsVIw#<&-~KW~^sqQNlv)Bbp(7;)3g zRa(r2b(y2sYQG|ZqXF;(?QGgo)PX_Y_{$y!g-0!z34Ji&`TmfYmBiXeA|~-qsNUSU;vzFp*MG&Sv7I1b{bcUd4!a zr^F8P_!PB+L8Z!fl$|46I_(qZVm6%dTyip4Z`weVJol7b5(Qd1CV7yeDIJ%S>}y)I zXEi3A9949bONI0Eh(bE5f3b4?+=u!c4*@_Nqkc_sLz7;i6wN3|Z^faVYnpH0JZ-nz zR}UXC0t86}m)m`hBkB*KhVe4}#&s>C_CIn&V67eKBuq+1^s-Yl4esa}rpHQ{Ck3PI@Ui?!D zI%RL{3trImNugmFOb(&FoUEhtTN*BUvE?2qxLx_FFQ&ysVu^OTTv{oHwi_~xMrb5d zViR%z8Hz;ZDLA%~gXxESsJ7g%Z|1pp{$zN96Ra5aB- z?Q-o!eRFaE53!_dIeo-?=#zY1`OVP2@L}%-vTicza_!mUnEY-xH@j1NB_sliy#gsr z)m2ppz!3_dB|oXo8=`Ja$K6e7d%9w>@D}<1v*O@4jaM$66a-<*$WfypJS+@T2~Daa z)5bdAe|a?vG%6H@>H002ovPDHLkV1gQxf7k#3 literal 0 HcmV?d00001 diff --git a/src/icons/32x32/textfield_rename.png b/src/icons/32x32/textfield_rename.png new file mode 100644 index 0000000000000000000000000000000000000000..d35927feacb4e1d455a6e59bdceeb327fb7a0ce6 GIT binary patch literal 856 zcmV-e1E>6nP)K# zYCr^}XMBzVqX2R7$}r4+~a&tegOn+1+mUcN9gNWM|{GWwG^Jt=4%- z*A9cX+wC*;ywmAyGBy*aB%Xgg{04|vDljMgrHf4%V^(BV8WVwJEbp15nif@6c3kGf z#<+kG0;H4^vb-RB69fT-VYpC%Y@W>#5Ed4y!1tw)u=8+dZfy7EE(B;+K#y6)1gf?L z>o$2Pus?y9%bkj+QVsd`x%?ag$ zRwPScKx)5#(1@?=8+DMj1XCBqu~W=(79*z$a3&uR>J?=*(jJ-K$nwV$flkk9LGpt78B7>hUBhBpySvNA&8JBrx|mO48kk` zJtxFciO6ah6qtg2cznI2_b=w{2h{Yk#2pe>)ilg%s=x%3#?Ngvsa`)(*9vo+8uMql zMP&_|bbfQc2jPgyu;BS*4uk(XKA9v$f|&|I6eu`)c1zDFQo`a`>v+2!z`^!~q&{eY z1ur97k~{2dx}*pMgp8pAG{jF50oQeBx}iSzJdct#GKNsaW`QVfM5xQmumYDGgXO(u zHMV&}V;NgrvD_~uc96jtld;*|4YDn=#$0DC?+D0_$iCwkbe(K%sUZHN-8tDQ*-ZBU(^_S#%*YN~IzOG!*9{@F7qLg&x)DN)O>~;IU_5a`h|7#0Mn)B+u4-ZJ?tk+u8 z|Jj5P6i4Bqm$wgW!fPm4`HOG7e^5xLf5nRB6f=PT3j?%C061~tEa^D>;&I8Gq&@pS>Sx^ypcqH7*fi3nOgjIrQ!;TPcVb1dl%ipB*C?|Blkb^r$#uwl6?j+JOH*kRwY}gOZVj z7bu!T6aklX?}K%1AE`sRrAnmTNi$r5!D2?|VV&EK)p6C$MG*Lo{>000xG z(IyjSXw&JsP8uuIn1mgKGSR&n77}E=pwSY?P(D02J zgiWAW^XX;Yn#KabbPkXHw26Wv z&A1>7z;FPaUY!G}6-07mk*dr95X!()h5;(s$xT8;xGrl#I3ltz&&3uV1Bf^Z03d4O zg21>yQoa=A&&-EZA~~!w+;JJvW8G)ZInB2C0T;`=JmX&kTwVJpxzOk$>2C=!(g zpa|>u#s$;>z;R!T*afOdCb#SY5Nt)4w6P@KhXJsRQ#y^=jwPZwRkF@-NSkzPfO}q& zh~m5jC?TQerXLzqdNa1g$V z%iv&SRHX;wY$?nP#E;Z!sP3JCnEeJghtnFHm~-cDqRg$$&1Y5rkDl3S+yXo#bK+$&O@%zAGc<8Kd+?2R=@o zAd4UPbosAg@FoU%1>9Vuq2cj72|3O3>rcN8L;lW`1N7VK#BS0;*L^8;5(g;-gtJ``Im8tUBv7f*Dc9o9f=2t>(Ih#H+{nN|0u9C1Hm-R`{26u z-vB^6hH5wZRB&4Sq-YBeQp*<3r}AWl&YrtWXQq8YF^G9RT{Ne&gMR(xl(KjF{|tZ| zqF(pSpDU3|X>@#&D!!lNUFS>s&RIX-=xeQ|#ua@&N6V&dJ9l*T z^saMUw>xVBoP7BDwV|&LyuD{Hvm0`y6&JJ$K-di21-S__+k(nod0E*QgfrQ7h)*qi t=C%qT>$0L%?lg(*nl*dW>W2RaFaV=i$c7>F2WkKS002ovPDHLkV1gD1JgWcz literal 0 HcmV?d00001 diff --git a/src/icons/svg/pause.svg b/src/icons/svg/pause.svg new file mode 100644 index 0000000..537fa7f --- /dev/null +++ b/src/icons/svg/pause.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/icons/svg/play-button.svg b/src/icons/svg/play-button.svg new file mode 100644 index 0000000..9f46031 --- /dev/null +++ b/src/icons/svg/play-button.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/icons/svg/refresh.svg b/src/icons/svg/refresh.svg new file mode 100644 index 0000000..f3f25f1 --- /dev/null +++ b/src/icons/svg/refresh.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/icons/svg/stop.svg b/src/icons/svg/stop.svg new file mode 100644 index 0000000..65d7bf1 --- /dev/null +++ b/src/icons/svg/stop.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/paths.c b/src/paths.c index d401d64..e3265b8 100644 --- a/src/paths.c +++ b/src/paths.c @@ -9,6 +9,7 @@ char default_roms_paths[4096]; char default_nvr_path[512]; char default_configs_path[512]; char default_logs_path[512]; +char default_screenshots_path[512]; /* the number of roms paths */ int num_roms_paths; @@ -21,6 +22,8 @@ char nvr_path[512]; char configs_path[512]; /* this is where log-files as stored */ char logs_path[512]; +/* this is where screenshots as stored */ +char screenshots_path[512]; char get_path_separator() { @@ -106,6 +109,12 @@ void set_configs_path(char *s) append_slash(configs_path, 512); } +void set_screenshots_path(char *s) +{ + safe_strncpy(screenshots_path, s, 512); + append_slash(screenshots_path, 512); +} + /* set the default roms paths, this makes them permanent */ void set_default_roms_paths(char *s) { @@ -134,12 +143,20 @@ void set_default_configs_path(char *s) set_configs_path(s); } +/* set the default screenshots path, this makes it permanent */ +void set_default_screenshots_path(char *s) +{ + safe_strncpy(default_screenshots_path, s, 512); + set_screenshots_path(s); +} + void paths_loadconfig() { char *cfg_roms_paths = config_get_string(CFG_GLOBAL, "Paths", "roms_paths", 0); char *cfg_nvr_path = config_get_string(CFG_GLOBAL, "Paths", "nvr_path", 0); char *cfg_configs_path = config_get_string(CFG_GLOBAL, "Paths", "configs_path", 0); char *cfg_logs_path = config_get_string(CFG_GLOBAL, "Paths", "logs_path", 0); + char *cfg_screenshots_path = config_get_string(CFG_GLOBAL, "Paths", "screenshots_path", 0); if (cfg_roms_paths) safe_strncpy(default_roms_paths, cfg_roms_paths, 4096); @@ -149,6 +166,8 @@ void paths_loadconfig() safe_strncpy(default_configs_path, cfg_configs_path, 512); if (cfg_logs_path) safe_strncpy(default_logs_path, cfg_logs_path, 512); + if (cfg_screenshots_path) + safe_strncpy(default_screenshots_path, cfg_screenshots_path, 512); } void paths_saveconfig() @@ -157,6 +176,7 @@ void paths_saveconfig() config_set_string(CFG_GLOBAL, "Paths", "nvr_path", default_nvr_path); config_set_string(CFG_GLOBAL, "Paths", "configs_path", default_configs_path); config_set_string(CFG_GLOBAL, "Paths", "logs_path", default_logs_path); + config_set_string(CFG_GLOBAL, "Paths", "screenshots_path", default_screenshots_path); } void paths_onconfigloaded() @@ -173,6 +193,9 @@ void paths_onconfigloaded() if (strlen(default_logs_path) > 0) set_logs_path(default_logs_path); + if (strlen(default_screenshots_path) > 0) + set_screenshots_path(default_screenshots_path); + pclog("path = %s\n", pcem_path); } @@ -194,6 +217,8 @@ void paths_init() set_nvr_path(s); append_filename(s, pcem_path, "configs/", 512); set_configs_path(s); + append_filename(s, pcem_path, "screenshots/", 512); + set_screenshots_path(s); set_logs_path(pcem_path); add_config_callback(paths_loadconfig, paths_saveconfig, paths_onconfigloaded); diff --git a/src/paths.h b/src/paths.h index 991d0d3..ba54344 100644 --- a/src/paths.h +++ b/src/paths.h @@ -3,6 +3,7 @@ extern char pcem_path[512]; extern char configs_path[512]; extern char nvr_path[512]; extern char logs_path[512]; +extern char screenshots_path[512]; void get_pcem_path(char *s, int size); char get_path_separator(); @@ -16,9 +17,11 @@ void set_default_roms_paths(char *s); void set_default_nvr_path(char *s); void set_default_logs_path(char *s); void set_default_configs_path(char *s); +void set_default_screenshots_path(char *s); /* set the paths temporarily for this session */ void set_roms_paths(char* path); void set_nvr_path(char *s); void set_logs_path(char *s); void set_configs_path(char *s); +void set_screenshots_path(char *s); diff --git a/src/pc.c b/src/pc.c index 6bb02da..3a652dd 100644 --- a/src/pc.c +++ b/src/pc.c @@ -192,6 +192,8 @@ void onesec() { fps=framecount; framecount=0; + video_refresh_rate = video_frames; + video_frames = 0; win_title_update=1; } diff --git a/src/pc.xrc b/src/pc.xrc index ebdb59f..d0137d5 100644 --- a/src/pc.xrc +++ b/src/pc.xrc @@ -1,34 +1,38 @@ - + - icons/drive.png - icons/disk.png - icons/cd.png + icons/16x16/drive.png + icons/16x16/diskette.png + icons/16x16/cd.png - icons/play24.png + icons/24x24/play.png - icons/pause24.png + icons/24x24/pause.png - icons/stop24.png + icons/24x24/stop.png - icons/refresh24.png + icons/24x24/refresh.png + + + + @@ -59,9 +63,6 @@ - - - @@ -83,6 +84,10 @@ + + + + @@ -141,8 +146,63 @@ 1 + - + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 @@ -161,7 +221,7 @@ - + 1 @@ -178,57 +238,120 @@ 1 + + + 1 + + + + 1 + + + + 1 + + + + 1 + - - - - - 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + - - - 1 + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + - - - - 1 - - - - - - 1 + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + - - - 1 + + + - - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - - 1 - @@ -252,374 +375,43 @@ - - - - - - - - - - - - Configure PCem - 1 - - - - wxALL - 5 - - 3 - 0 - 0 - 0 - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - 50 - 10 - 200 - - - - wxALIGN_CENTER|wxALL - 0 - - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - 1 - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - + + + + + + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + 1 + + + + - + @@ -631,553 +423,1435 @@ - - Configure Hard Discs + + + + + Configure PCem 1 - - - wxALL - 5 - - 1 - 0 - 0 - 0 - - - - - 4 - 0 - 0 - 0 - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - - - - - - - 4 - 0 - 0 - 0 - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - - - - - - - 4 - 0 - 0 - 0 - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - - - - - - - 4 - 0 - 0 - 0 - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - - - wxALL - 0 - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - wxHORIZONTAL + + 0 + 1 + 0 + 0 + + + + + wxALL|wxEXPAND + 5 + + + + 1 + icons/32x32/motherboard.png + + + + 0 + 3 + 0 + 0 + 1 + - wxALIGN_CENTRE|wxALL - 0 - - 1 - + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 - wxALIGN_CENTRE|wxALL + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxALL + 5 + + icons/16x16/setting_tools.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 120,-1 + + + + + + + wxALL + 5 + + + 220,-1 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + 0,0 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 0 + 0 + 10 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + 0,0 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + + + 0 + icons/32x32/video_mode.png + + + + 0 + 3 + 0 + 0 + 1 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxALL + 5 + + icons/16x16/setting_tools.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxALL + 5 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 0 + + + + + + + wxALL + 5 + + icons/16x16/setting_tools.png + 0 + + + + + + + 0 + icons/32x32/sound.png + + + + 0 + 3 + 0 + 0 + 1 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxALL + 5 + + icons/16x16/setting_tools.png + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + + 0 + + + + + + + 0 + icons/32x32/drive.png + + + + 0 + 1 + 0 + 0 + 0 + + + + wxEXPAND 0 - - + + 0 + 2 + 0 + 0 + 1 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + + + + + + + + wxEXPAND | wxALL + 5 + + + + + + + wxEXPAND | wxALL + 5 + + + + + 1 + + + + 0 + 3 + 0 + 0 + 2 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 75,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + New + icons/16x16/drive_add.png + 0 + + + + + + + wxALL + 5 + + Browse + icons/16x16/folder.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + 350,-1 + + + + + + wxALL + 5 + + icons/16x16/control_eject.png + Eject + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + 1,3 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + + + + 0 + + + + 0 + 3 + 0 + 0 + 2 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 75,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + New + icons/16x16/drive_add.png + 0 + + + + + + + wxALL + 5 + + Browse + icons/16x16/folder.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + 350,-1 + + + + + + wxALL + 5 + + icons/16x16/control_eject.png + Eject + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + 1,3 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + + + + 0 + + + + 0 + 3 + 0 + 0 + 2 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 75,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + New + icons/16x16/drive_add.png + 0 + + + + + + + wxALL + 5 + + Browse + icons/16x16/folder.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + 350,-1 + + + + + + wxALL + 5 + + icons/16x16/control_eject.png + Eject + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + 1,3 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + + + + 0 + + + + 0 + 3 + 0 + 0 + 2 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 75,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + New + icons/16x16/drive_add.png + 0 + + + + + + + wxALL + 5 + + Browse + icons/16x16/folder.png + 0 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + 350,-1 + + + + + + wxALL + 5 + + icons/16x16/control_eject.png + Eject + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + 1,3 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + -1 + + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + + + + + + + + 0 + icons/32x32/mouse_pc.png + + + + 0 + 2 + 0 + 0 + 1 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + + 80,-1 + + -1 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + 350,-1 + + + + @@ -1185,6 +1859,39 @@ + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + + 1 + + + + + wxALL + 5 + + + 0 + + + + + @@ -1192,117 +1899,204 @@ New Hard Disc 1 - + + 0 + 1 + 0 + 0 + + - wxALL + + wxEXPAND 5 - 2 0 + 3 0 0 - + 1 + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + 80,-1 + + -1 + + + + wxALL - 0 + 5 + 350,-1 + - wxALIGN_CENTRE|wxALL - 0 - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - + wxALL - 0 - + 5 + + + icons/16x16/folder.png + 0 - - - wxALIGN_LEFT|wxALL - 0 - - - + + + wxEXPAND + 5 + 0,0 - wxALL - 0 - + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + - - - wxALIGN_LEFT|wxALL - 0 - - - + + + wxEXPAND + 5 + 0,0 - wxALL - 0 - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - wxALIGN_LEFT|wxALL - 0 + + wxALL | wxALIGN_CENTER_VERTICAL + 5 + -1 + wxALL - 0 + 5 - + + 350,-1 + + - + + + wxEXPAND + 5 + 0,0 + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxEXPAND + 5 + 0,0 + - wxALIGN_LEFT|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - 1 - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - + + wxALL + 5 + + + 1 + + + + + wxALL + 5 + + + 0 @@ -1312,119 +2106,186 @@ - Hard disc parameters + Hard Disc Parameters 1 - + + 0 + 1 + 0 + 0 + + - wxALL + + wxALL | wxALIGN_CENTER_VERTICAL 5 - - wxVERTICAL + + + -1 + + + + + wxEXPAND + 5 + + 0 + 3 + 0 + 0 + 1 + + + + wxEXPAND + 5 + 0,0 + - wxALIGN_LEFT|wxALL - 0 + + wxEXPAND + 5 + + 0 + 4 + 0 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALL + 5 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + -1 + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL | wxALIGN_CENTER_VERTICAL + 5 - + + -1 - wxALIGN_CENTRE|wxALL - 0 - - 2 - 0 - 0 - 0 - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - - - - - wxALL - 0 - - - - - - - wxALIGN_LEFT|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTRE|wxALL - 0 - - 1 - - - - - wxALIGN_CENTRE|wxALL - 0 - - - - - - + + wxALL + 5 + + + 350,-1 + + + + + + + wxEXPAND + 5 + 0,0 + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxEXPAND + 5 + 0,0 + + + + wxALL + 5 + + + 1 + + + + + wxALL + 5 + + + 0 @@ -1436,6 +2297,133 @@ PCem Configuration Manager 1 + + 1 + 1 + 0 + 0 + 0 + 0 + + + wxALL|wxEXPAND + 5 + + 2 + 2 + 0 + 0 + 0 + 0 + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALL|wxEXPAND + 5 + + + 250,300 + + + + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALL + 5 + + + Load + icons/32x32/control_play_blue.png + 1 + + + + + wxALL + 5 + + + Configure + icons/32x32/setting_tools.png + 0 + + + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALL + 5 + + + New + icons/32x32/computer_add.png + 0 + + + + + wxALL + 5 + + + Rename + icons/32x32/computer_edit.png + 0 + + + + + wxALL + 5 + + + Delete + icons/32x32/computer_delete.png + 0 + + + + + + + wxALL + 5 + + + Quit + icons/32x32/door_in.png + 0 + + + + + + + + + + PCem Shader Manager + 1 @@ -1448,7 +2436,7 @@ 0 - 200,300 + 300,350 @@ -1460,41 +2448,19 @@ wxALL 0 - - - 1 - - - - - - wxEXPAND - - - - wxALL - 0 - - + + wxALL 0 - - + + - - - wxALL - 0 - - - - - + wxEXPAND @@ -1511,8 +2477,16 @@ wxALL 0 - - + + + + + + + wxALL + 0 + + @@ -1521,11 +2495,26 @@ wxEXPAND + + wxALL + 0 + + + + + + wxALL + 0 + + + 1 + + wxALL 0 - + @@ -1537,6 +2526,7 @@ + PCem 1 @@ -1586,6 +2576,7 @@ 5 + 1 @@ -1613,7 +2604,7 @@ wxALL 5 - + -1 diff --git a/src/video.c b/src/video.c index a515919..2a1c8e1 100644 --- a/src/video.c +++ b/src/video.c @@ -167,6 +167,8 @@ int changeframecount=2; uint8_t rotatevga[8][256]; int frames = 0; +int video_frames = 0; +int video_refresh_rate = 0; int fullchange; @@ -522,6 +524,7 @@ void video_wait_for_buffer() void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h) { + video_frames++; if (h <= 0) return; video_wait_for_blit(); diff --git a/src/video.h b/src/video.h index c342b4c..e3565b6 100644 --- a/src/video.h +++ b/src/video.h @@ -67,7 +67,7 @@ extern int xsize,ysize; extern float cpuclock; -extern int emu_fps, frames; +extern int emu_fps, frames, video_frames, video_refresh_rate; extern int readflash; diff --git a/src/wx-app.cc b/src/wx-app.cc index b8c1179..ca70c16 100644 --- a/src/wx-app.cc +++ b/src/wx-app.cc @@ -5,6 +5,13 @@ #include "wx-utils.h" #include "wx-common.h" +#ifdef _WIN32 +#define BITMAP WINDOWS_BITMAP +#include +#include +#undef BITMAP +#endif + extern "C" { int wx_load_config(void*); @@ -29,6 +36,9 @@ wxDEFINE_EVENT(WX_STOP_EMULATION_EVENT, wxCommandEvent); wxDEFINE_EVENT(WX_EXIT_COMPLETE_EVENT, wxCommandEvent); wxDEFINE_EVENT(WX_SHOW_WINDOW_EVENT, wxCommandEvent); wxDEFINE_EVENT(WX_POPUP_MENU_EVENT, PopupMenuEvent); +#ifdef _WIN32 +wxDEFINE_EVENT(WX_WIN_SEND_MESSAGE_EVENT, WinSendMessageEvent); +#endif wxBEGIN_EVENT_TABLE(Frame, wxFrame) wxEND_EVENT_TABLE() @@ -80,6 +90,9 @@ Frame::Frame(App* app, const wxString& title, const wxPoint& pos, Bind(WX_EXIT_COMPLETE_EVENT, &Frame::OnExitCompleteEvent, this); Bind(WX_STOP_EMULATION_EVENT, &Frame::OnStopEmulationEvent, this); Bind(WX_CALLBACK_EVENT, &Frame::OnCallbackEvent, this); +#ifdef _WIN32 + Bind(WX_WIN_SEND_MESSAGE_EVENT, &Frame::OnWinSendMessageEvent, this); +#endif CenterOnScreen(); } @@ -103,7 +116,7 @@ void Frame::ShowConfigSelection() void Frame::OnCallbackEvent(CallbackEvent& event) { WX_CALLBACK callback = event.GetCallback(); - callback(); + callback(event.GetData()); } void Frame::OnStopEmulationEvent(wxCommandEvent& event) @@ -227,3 +240,10 @@ wxThread::ExitCode CExitThread::Entry() wxQueueEvent(frame, event); return 0; } + +#ifdef _WIN32 +void Frame::OnWinSendMessageEvent(WinSendMessageEvent& event) +{ + SendMessage((HWND)event.GetHWND(), event.GetMessage(), event.GetWParam(), event.GetLParam()); +} +#endif diff --git a/src/wx-app.h b/src/wx-app.h index 0c3b244..803f5d1 100644 --- a/src/wx-app.h +++ b/src/wx-app.h @@ -18,24 +18,64 @@ wxDECLARE_EVENT(WX_EXIT_COMPLETE_EVENT, wxCommandEvent); wxDECLARE_EVENT(WX_SHOW_WINDOW_EVENT, wxCommandEvent); wxDECLARE_EVENT(WX_POPUP_MENU_EVENT, PopupMenuEvent); +#ifdef _WIN32 +class WinSendMessageEvent; +wxDECLARE_EVENT(WX_WIN_SEND_MESSAGE_EVENT, WinSendMessageEvent); +class WinSendMessageEvent: public wxCommandEvent +{ +public: + WinSendMessageEvent(void* hwnd, int message, INT_PARAM wParam, LONG_PARAM lParam) : wxCommandEvent(WX_WIN_SEND_MESSAGE_EVENT) + { + this->hwnd = hwnd; + this->message = message; + this->wParam = wParam; + this->lParam = lParam; + } + WinSendMessageEvent(const WinSendMessageEvent& event) : wxCommandEvent(event) + { + this->hwnd = event.GetHWND(); + this->message = event.GetMessage(); + this->wParam = event.GetWParam(); + this->lParam = event.GetLParam(); + } + + wxEvent* Clone() const { return new WinSendMessageEvent(*this); } + + void* GetHWND() const { return hwnd; } + int GetMessage() const { return message; } + INT_PARAM GetWParam() const { return wParam; } + LONG_PARAM GetLParam() const { return lParam; } + +private: + void* hwnd; + int message; + INT_PARAM wParam; + LONG_PARAM lParam; +}; +#endif + class CallbackEvent: public wxCommandEvent { public: - CallbackEvent(WX_CALLBACK callback) : wxCommandEvent(WX_CALLBACK_EVENT) + CallbackEvent(WX_CALLBACK callback, void* data) : wxCommandEvent(WX_CALLBACK_EVENT) { this->callback = callback; + this->data = data; } CallbackEvent(const CallbackEvent& event) : wxCommandEvent(event) { this->callback = event.GetCallback(); + this->data = event.GetData(); } wxEvent* Clone() const { return new CallbackEvent(*this); } WX_CALLBACK GetCallback() const { return callback; } + void* GetData() const { return data; } private: WX_CALLBACK callback; + void* data; }; @@ -72,7 +112,6 @@ private: wxWindow* window; }; - class Frame; class App: public wxApp @@ -120,6 +159,9 @@ private: void OnPopupMenuEvent(PopupMenuEvent& event); void OnCallbackEvent(CallbackEvent& event); void OnClose(wxCloseEvent& event); +#ifdef _WIN32 + void OnWinSendMessageEvent(WinSendMessageEvent& event); +#endif void ShowConfigSelection(); wxMenu* menu; diff --git a/src/wx-config.c b/src/wx-config.c index 44368dc..6ce096c 100644 --- a/src/wx-config.c +++ b/src/wx-config.c @@ -1,6 +1,8 @@ #include "wx-utils.h" +#include "wx-sdl2.h" #include "ibm.h" +#include "ide.h" #include "cpu.h" #include "device.h" #include "fdd.h" @@ -26,7 +28,18 @@ static char *hdd_names[16]; int has_been_inited = 0; +static int hd_changed = 0; + +static char hd_new_name[512]; +static int hd_new_spt, hd_new_hpc, hd_new_cyl; +static int hd_new_type; +static int new_cdrom_channel; + +extern int pause; + extern void deviceconfig_open(void* hwnd, device_t *device); +extern int hdconf_init(void* hdlg); +extern int hdconf_update(void* hdlg); static int mouse_valid(int type, int model) { @@ -42,6 +55,15 @@ static int mouse_valid(int type, int model) return 1; } +static int mpu401_available(int sound_card) +{ + char* name = sound_card_get_internal_name(sound_card); + if (name && (!strcmp(name, "sb16") || !strcmp(name, "sbawe32"))) + return TRUE; + + return FALSE; +} + static void recalc_vid_list(void* hdlg, int model) { void* h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOVID")); @@ -184,6 +206,207 @@ static void recalc_hdd_list(void* hdlg, int model, int use_selected_hdd) } } +int config_dlgsave(void* hdlg) +{ + char temp_str[256]; + void* h; + int c, d; + int rom, gfx, fpu; + int temp_cpu, temp_cpu_m, temp_model; + int temp_GAMEBLASTER, temp_GUS, temp_SSI2001, temp_voodoo, temp_sound_card_current; + int temp_dynarec; + int cpu_flags; + int temp_fda_type, temp_fdb_type; + int temp_joystick_type; + int cpu_type; + int temp_mouse_type; + int hdd_changed; + char s[260]; + PcemHDC hd[4]; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO1")); + temp_model = listtomodel[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_MEMSPIN")); + int mem = wx_sendmessage(h, WX_UDM_GETPOS, 0, 0); + mem &= ~(models[temp_model].ram_granularity - 1); + if (mem < models[temp_model].min_ram) + mem = models[temp_model].min_ram; + else if (mem > models[temp_model].max_ram) + mem = models[temp_model].max_ram; + if ((models[temp_model].flags & MODEL_AT) && models[temp_model].ram_granularity < 128) + mem *= 1024; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOVID")); + wx_sendmessage(h, WX_CB_GETLBTEXT, wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0), + (LONG_PARAM) temp_str); + gfx = video_new_to_old(video_card_getid(temp_str)); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOCPUM")); + temp_cpu_m = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO3")); + temp_cpu = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + fpu = (models[temp_model].cpu[temp_cpu_m].cpus[temp_cpu].cpu_type + >= CPU_i486DX) ? 1 : 0; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECK3")); + temp_GAMEBLASTER = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKGUS")); + temp_GUS = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKSSI")); + temp_SSI2001 = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKSYNC")); + enable_sync = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKVOODOO")); + temp_voodoo = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSND")); + temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKDYNAREC")); + temp_dynarec = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBODRA")); + temp_fda_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBODRB")); + temp_fdb_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + + // h = wx_getdlgitem(hdlg, ID("IDC_COMBOJOY")); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOMOUSE")); + temp_mouse_type = settings_list_to_mouse[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD")); + c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + if (hdd_names[c]) + hdd_changed = strncmp(hdd_names[c], hdd_controller_name, sizeof(hdd_controller_name)-1); + + + if (temp_model != model || gfx != gfxcard || mem != mem_size || + fpu != hasfpu || temp_GAMEBLASTER != GAMEBLASTER || temp_GUS != GUS || + temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || + temp_voodoo != voodoo_enabled || temp_dynarec != cpu_use_dynarec || + temp_fda_type != fdd_get_type(0) || temp_fdb_type != fdd_get_type(1) || + temp_mouse_type != mouse_type || hdd_changed || hd_changed || cdrom_channel != new_cdrom_channel) + { + if (!has_been_inited || confirm()) + { + savenvr(); + model = temp_model; + romset = model_getromset(); + gfxcard = gfx; + mem_size = mem; + cpu_manufacturer = temp_cpu_m; + cpu = temp_cpu; + GAMEBLASTER = temp_GAMEBLASTER; + GUS = temp_GUS; + SSI2001 = temp_SSI2001; + sound_card_current = temp_sound_card_current; + voodoo_enabled = temp_voodoo; + cpu_use_dynarec = temp_dynarec; + mouse_type = temp_mouse_type; + + fdd_set_type(0, temp_fda_type); + fdd_set_type(1, temp_fdb_type); + + if (hdd_names[c]) + strncpy(hdd_controller_name, hdd_names[c], sizeof(hdd_controller_name)-1); + else + strcpy(hdd_controller_name, "none"); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].tracks); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[0]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].tracks); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[1]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].tracks); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[2]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].tracks); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[3]); + + hdc[0] = hd[0]; + hdc[1] = hd[1]; + hdc[2] = hd[2]; + hdc[3] = hd[3]; + + cdrom_channel = new_cdrom_channel; + + if (has_been_inited) + { + mem_resize(); + loadbios(); + resetpchard(); + } + } + else + return TRUE; + } + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSPD")); + video_speed = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + + cpu_manufacturer = temp_cpu_m; + cpu = temp_cpu; + cpu_set(); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOWS")); + cpu_waitstates = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + cpu_update_waitstates(); + + if (has_been_inited) + saveconfig(NULL); + + speedchanged(); + +// joystick_type = temp_joystick_type; +// gameport_update_joystick_type(); + + + return TRUE; +} + int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) { char temp_str[256]; @@ -245,8 +468,7 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO3")); c = 0; - while (models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[c].cpu_type - != -1) + while (models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[c].cpu_type != -1) { wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[c].name); @@ -412,150 +634,17 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) recalc_hdd_list(hdlg, romstomodel[romset], 0); + hd_changed = 0; + new_cdrom_channel = cdrom_channel; + + hdconf_init(hdlg); + return TRUE; } break; case WX_COMMAND: { - if (wParam == wxID_OK) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO1")); - temp_model = listtomodel[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_MEMSPIN")); - int mem = wx_sendmessage(h, WX_UDM_GETPOS, 0, 0); - mem &= ~(models[temp_model].ram_granularity - 1); - if (mem < models[temp_model].min_ram) - mem = models[temp_model].min_ram; - else if (mem > models[temp_model].max_ram) - mem = models[temp_model].max_ram; - if ((models[temp_model].flags & MODEL_AT) && models[temp_model].ram_granularity < 128) - mem *= 1024; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOVID")); - wx_sendmessage(h, WX_CB_GETLBTEXT, wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0), - (LONG_PARAM) temp_str); - gfx = video_new_to_old(video_card_getid(temp_str)); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOCPUM")); - temp_cpu_m = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO3")); - temp_cpu = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - fpu = (models[temp_model].cpu[temp_cpu_m].cpus[temp_cpu].cpu_type - >= CPU_i486DX) ? 1 : 0; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECK3")); - temp_GAMEBLASTER = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKGUS")); - temp_GUS = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKSSI")); - temp_SSI2001 = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKSYNC")); - enable_sync = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKVOODOO")); - temp_voodoo = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSND")); - temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, - WX_CB_GETCURSEL, 0, 0)]; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_CHECKDYNAREC")); - temp_dynarec = wx_sendmessage(h, WX_BM_GETCHECK, 0, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBODRA")); - temp_fda_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBODRB")); - temp_fdb_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - - // h = wx_getdlgitem(hdlg, ID("IDC_COMBOJOY")); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOMOUSE")); - temp_mouse_type = settings_list_to_mouse[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD")); - c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - if (hdd_names[c]) - hdd_changed = strncmp(hdd_names[c], hdd_controller_name, sizeof(hdd_controller_name)-1); - - if (temp_model != model || gfx != gfxcard || mem != mem_size || - fpu != hasfpu || temp_GAMEBLASTER != GAMEBLASTER || temp_GUS != GUS || - temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || - temp_voodoo != voodoo_enabled || temp_dynarec != cpu_use_dynarec || - temp_fda_type != fdd_get_type(0) || temp_fdb_type != fdd_get_type(1) || - temp_mouse_type != mouse_type || hdd_changed) - { - if (!has_been_inited || confirm()) - { - savenvr(); - model = temp_model; - romset = model_getromset(); - gfxcard = gfx; - mem_size = mem; - cpu_manufacturer = temp_cpu_m; - cpu = temp_cpu; - GAMEBLASTER = temp_GAMEBLASTER; - GUS = temp_GUS; - SSI2001 = temp_SSI2001; - sound_card_current = temp_sound_card_current; - voodoo_enabled = temp_voodoo; - cpu_use_dynarec = temp_dynarec; - mouse_type = temp_mouse_type; - - fdd_set_type(0, temp_fda_type); - fdd_set_type(1, temp_fdb_type); - - if (hdd_names[c]) - strncpy(hdd_controller_name, hdd_names[c], sizeof(hdd_controller_name)-1); - else - strcpy(hdd_controller_name, "none"); - - - if (has_been_inited) - { - mem_resize(); - loadbios(); - resetpchard(); - } - } - else - { - wx_enddialog(hdlg, 0); - pause = 0; - return TRUE; - } - } - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSPD")); - video_speed = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - - cpu_manufacturer = temp_cpu_m; - cpu = temp_cpu; - cpu_set(); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOWS")); - cpu_waitstates = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - cpu_update_waitstates(); - - if (has_been_inited) - saveconfig(NULL); - - speedchanged(); - -// joystick_type = temp_joystick_type; -// gameport_update_joystick_type(); - - } - if (wParam == wxID_OK || wParam == wxID_CANCEL) - { - wx_enddialog(hdlg, 0); - pause = 0; - return TRUE; - } - else if (wParam == WX_ID("IDC_COMBO1")) + if (wParam == WX_ID("IDC_COMBO1")) { h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO1")); temp_model = listtomodel[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; @@ -785,17 +874,14 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) else if (wParam == WX_ID("IDC_CONFIGURESND")) { h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSND")); - temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, - WX_CB_GETCURSEL, 0, 0)]; + temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; - deviceconfig_open(hdlg, - (void *) sound_card_getdevice(temp_sound_card_current)); + deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card_current)); } else if (wParam == WX_ID("IDC_COMBOSND")) { h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSND")); - temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, - WX_CB_GETCURSEL, 0, 0)]; + temp_sound_card_current = settings_list_to_sound[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)]; h = wx_getdlgitem(hdlg, WX_ID("IDC_CONFIGURESND")); if (sound_card_has_config(temp_sound_card_current)) @@ -807,57 +893,1045 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) { deviceconfig_open(hdlg, (void *) &voodoo_device); } + else if (wParam == WX_ID("IDC_COMBOHDD")) + { + hdconf_update(hdlg); + } // - // case IDC_COMBOJOY: - // if (HIWORD(wParam) == CBN_SELCHANGE) { - // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + // case IDC_COMBOJOY: + // if (HIWORD(wParam) == CBN_SELCHANGE) { + // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); // - // h = wx_getdlgitem(hdlg, IDC_JOY1); - // wx_enablewindow(h, - // (joystick_get_max_joysticks(temp_joystick_type) >= 1) ? - // TRUE : FALSE); - // h = wx_getdlgitem(hdlg, IDC_JOY2); - // wx_enablewindow(h, - // (joystick_get_max_joysticks(temp_joystick_type) >= 2) ? - // TRUE : FALSE); - // h = wx_getdlgitem(hdlg, IDC_JOY3); - // wx_enablewindow(h, - // (joystick_get_max_joysticks(temp_joystick_type) >= 3) ? - // TRUE : FALSE); - // h = wx_getdlgitem(hdlg, IDC_JOY4); - // wx_enablewindow(h, - // (joystick_get_max_joysticks(temp_joystick_type) >= 4) ? - // TRUE : FALSE); - // } - // break; + // h = wx_getdlgitem(hdlg, IDC_JOY1); + // wx_enablewindow(h, + // (joystick_get_max_joysticks(temp_joystick_type) >= 1) ? + // TRUE : FALSE); + // h = wx_getdlgitem(hdlg, IDC_JOY2); + // wx_enablewindow(h, + // (joystick_get_max_joysticks(temp_joystick_type) >= 2) ? + // TRUE : FALSE); + // h = wx_getdlgitem(hdlg, IDC_JOY3); + // wx_enablewindow(h, + // (joystick_get_max_joysticks(temp_joystick_type) >= 3) ? + // TRUE : FALSE); + // h = wx_getdlgitem(hdlg, IDC_JOY4); + // wx_enablewindow(h, + // (joystick_get_max_joysticks(temp_joystick_type) >= 4) ? + // TRUE : FALSE); + // } + // break; // - // case IDC_JOY1: - // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); - // joystickconfig_open(hdlg, 0, temp_joystick_type); - // break; - // case IDC_JOY2: - // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); - // joystickconfig_open(hdlg, 1, temp_joystick_type); - // break; - // case IDC_JOY3: - // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); - // joystickconfig_open(hdlg, 2, temp_joystick_type); - // break; - // case IDC_JOY4: - // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); - // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); - // joystickconfig_open(hdlg, 3, temp_joystick_type); - // break; + // case IDC_JOY1: + // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + // joystickconfig_open(hdlg, 0, temp_joystick_type); + // break; + // case IDC_JOY2: + // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + // joystickconfig_open(hdlg, 1, temp_joystick_type); + // break; + // case IDC_JOY3: + // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + // joystickconfig_open(hdlg, 2, temp_joystick_type); + // break; + // case IDC_JOY4: + // h = wx_getdlgitem(hdlg, IDC_COMBOJOY); + // temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0); + // joystickconfig_open(hdlg, 3, temp_joystick_type); + // break; return 0; } } } -void config_open(void* hwnd) +static struct { - wx_dialogbox(hwnd, "ConfigureDlg", config_dlgproc); + int cylinders; + int heads; +} hd_types[] = +{ + {306, 4}, {615, 4}, {615, 6}, {940, 8}, + {940, 6}, {615, 4}, {462, 8}, {733, 5}, + {900, 15}, {820, 3}, {855, 5}, {855, 7}, + {306, 8}, {733, 7}, {0, 0}, {612, 4}, + {977, 5}, {977, 7}, {1024, 7}, {733, 5}, + {733, 7}, {733, 5}, {306, 4}, {925, 7}, + {925, 9}, {754, 7}, {754, 11}, {699, 7}, + {823, 10}, {918, 7}, {1024, 11}, {1024, 15}, + {1024, 5}, {612, 2}, {1024, 9}, {1024, 8}, + {615, 8}, {987, 3}, {462, 7}, {820, 6}, + {977, 5}, {981, 5}, {830, 7}, {830, 10}, + {917, 15}, {1224, 15} +}; + +static int hdd_controller_selected_is_mfm(void* hdlg) +{ + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD")); + int c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + if (hdd_names[c]) + return hdd_controller_is_mfm(hdd_names[c]); + return 0; +} + +static void check_hd_type(void* hdlg, off64_t sz) +{ + int c; + + hd_new_type = 0; + + if (hdd_controller_selected_is_mfm(hdlg)) + { + for (c = 0; c < 46; c++) + { + if ((hd_types[c].cylinders * hd_types[c].heads * 17 * 512) == sz) + { + hd_new_spt = 17; + hd_new_hpc = hd_types[c].heads; + hd_new_cyl = hd_types[c].cylinders; + hd_new_type = c+1; + return; + } + } + hd_new_spt = 63; + hd_new_hpc = 16; + hd_new_cyl = ((sz / 512) / 16) / 63; + } + else + { + if ((sz % 17) == 0 && sz <= 142606336) + { + hd_new_spt = 17; + + if (sz <= 26738688) + hd_new_hpc = 4; + else if ((sz % 3072) == 0 && sz <= 53477376) + hd_new_hpc = 6; + else + { + for (c=5;c<16;c++) + { + if((sz % (c * 512)) == 0 && sz <= 1024*c*17*512) break; + if (c == 5) c++; + } + hd_new_hpc = c; + } + hd_new_cyl = (int)((sz / 512) / hd_new_hpc) / 17; + } + else + { + hd_new_spt = 63; + hd_new_hpc = 16; + hd_new_cyl = ((sz / 512) / 16) / 63; + } + } +} + +#define ID_IS(s) wParam == wx_xrcid(s) +#define ID_RANGE(a, b) wParam >= wx_xrcid(a) && wParam <= wx_xrcid(b) + +static void update_hdd_cdrom(void* hdlg) +{ + void* h; + int i, j, b; + char s[25]; + + int is_mfm = hdd_controller_selected_is_mfm(hdlg); + + for (i = 0; i < 4; ++i) + { + b = !is_mfm && (new_cdrom_channel == i); + sprintf(s, "IDC_HDD[%d]", i); + h = wx_getdlgitem(hdlg, WX_ID(s)); + wx_sendmessage(h, WX_BM_SETCHECK, b ? 0 : 1, 0); + sprintf(s, "IDC_CDROM[%d]", i); + h = wx_getdlgitem(hdlg, WX_ID(s)); + wx_sendmessage(h, WX_BM_SETCHECK, b ? 1 : 0, 0); + sprintf(s, "IDC_EDIT_FN[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_FILE[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_EJECT[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_NEW[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_EDIT_SPT[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_EDIT_HPC[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_EDIT_CYL[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + sprintf(s, "IDC_TEXT_SIZE[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + for (j = 1; j < 6; ++j) + { + sprintf(s, "IDC_HDD_LABEL[%d]", i*10+j); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !b); + } + } +} + +static int create_drive(void* data) +{ + int c; + uint8_t buf[512]; + FILE* f = (FILE*)data; + memset(buf, 0, 512); + for (c = 0; c < (hd_new_cyl * hd_new_hpc * hd_new_spt); c++) + fwrite(buf, 512, 1, f); + + fclose(f); + + return 1; +} + +static int hdnew_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) +{ + char s[260]; + void* h; + int c; + PcemHDC hd[4]; + FILE *f; + uint8_t buf[512]; + int hd_type; + + switch (message) + { + case WX_INITDIALOG: + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + sprintf(s, "%i", 63); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + sprintf(s, "%i", 16); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + sprintf(s, "%i", 511); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)""); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); + sprintf(s, "%imb", (((511*16*63)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + +// hd_type = 0; + h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)"Custom type"); + for (c = 1; c <= 46; c++) + { + sprintf(s, "Type %02i : cylinders=%i, heads=%i, size=%iMB", c, hd_types[c-1].cylinders, hd_types[c-1].heads, (hd_types[c-1].cylinders * hd_types[c-1].heads * 17 * 512) / (1024 * 1024)); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s); + } + wx_sendmessage(h, WX_CB_SETCURSEL, 0, 0); + + return TRUE; + case WX_COMMAND: + if (wParam == wxID_OK) { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); + wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)hd_new_name); + if (!hd_new_name[0]) + { + wx_messagebox(hdlg,"Please enter a valid filename","PCem error",WX_MB_OK); + return TRUE; + } + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_cyl); + + if (hd_new_spt > 63) + { + wx_messagebox(hdlg, "Drive has too many sectors (maximum is 63)", "PCem error", WX_MB_OK); + return TRUE; + } + if (hd_new_hpc > 16) + { + wx_messagebox(hdlg, "Drive has too many heads (maximum is 16)", "PCem error", WX_MB_OK); + return TRUE; + } + if (hd_new_cyl > 16383) + { + wx_messagebox(hdlg, "Drive has too many cylinders (maximum is 16383)", "PCem error", WX_MB_OK); + return TRUE; + } + + f = fopen64(hd_new_name, "wb"); + if (!f) + { + wx_messagebox(hdlg, "Can't open file for write", "PCem error", WX_MB_OK); + return TRUE; + } + wx_progressdialogpulse(hdlg, "PCem", "Creating drive, please wait...", create_drive, f); + + wx_messagebox(hdlg, "Drive created, remember to partition and format the new drive.", "PCem", WX_MB_OK); + + wx_enddialog(hdlg, 1); + return TRUE; + } else if (wParam == wxID_CANCEL) { + wx_enddialog(hdlg, 0); + return TRUE; + } else if (ID_IS("IDC_CFILE")) { + if (!getsfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "", NULL, "img")) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM) openfilestring); + } + return TRUE; + } else if (ID_IS("IDC_EDIT1") || ID_IS("IDC_EDIT2") || ID_IS("IDC_EDIT3")) { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + pclog("EDIT1: %s\n", s); + sscanf(s, "%i", &hd[0].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + pclog("EDIT2: %s\n", s); + sscanf(s, "%i", &hd[0].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + pclog("EDIT3: %s\n", s); + sscanf(s, "%i", &hd[0].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_type = 0; + for (c = 1; c <= 46; c++) + { + pclog("Compare %i,%i %i,%i %i,%i\n", hd[0].spt,17, hd[0].hpc,hd_types[c-1].heads, hd[0].tracks,hd_types[c-1].cylinders); + if (hd[0].spt == 17 && hd[0].hpc == hd_types[c-1].heads && hd[0].tracks == hd_types[c-1].cylinders) + { + hd_type = c; + break; + } + } + h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); + wx_sendmessage(h, WX_CB_SETCURSEL, hd_type, 0); + + return TRUE; + } else if (ID_IS("IDC_HDTYPE")) { + h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); + hd_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + if (hd_type) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + sprintf(s, "%i", hd_types[hd_type-1].cylinders); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + sprintf(s, "%i", hd_types[hd_type-1].heads); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)"17"); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); + sprintf(s, "%imb", (int)(((uint64_t)hd_types[hd_type-1].cylinders*hd_types[hd_type-1].heads*17*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + } + return TRUE; + } + break; + + } + return FALSE; +} + +static int hdsize_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) +{ + char s[260]; + void* h; + PcemHDC hd[2]; + int c; + + switch (message) + { + case WX_INITDIALOG: + h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)"Custom type"); + for (c = 1; c <= 46; c++) + { + sprintf(s, "Type %02i : cylinders=%i, heads=%i, size=%iMB", c, hd_types[c-1].cylinders, hd_types[c-1].heads, (hd_types[c-1].cylinders * hd_types[c-1].heads * 17 * 512) / (1024 * 1024)); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s); + } + wx_sendmessage(h, WX_CB_SETCURSEL, hd_new_type, 0); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); + sprintf(s, "%imb", (int)((((uint64_t)hd_new_spt*(uint64_t)hd_new_hpc*(uint64_t)hd_new_cyl)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + return TRUE; + case WX_COMMAND: + if (wParam == wxID_OK) { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd_new_cyl); + + if (hd_new_spt > 63) + { + wx_messagebox(hdlg,"Drive has too many sectors (maximum is 63)","PCem error",WX_MB_OK); + return TRUE; + } + if (hd_new_hpc > 16) + { + wx_messagebox(hdlg,"Drive has too many heads (maximum is 16)","PCem error",WX_MB_OK); + return TRUE; + } + if (hd_new_cyl > 16383) + { + wx_messagebox(hdlg,"Drive has too many cylinders (maximum is 16383)","PCem error",WX_MB_OK); + return TRUE; + } + + wx_enddialog(hdlg,1); + return TRUE; + } else if (wParam == wxID_CANCEL) { + wx_enddialog(hdlg,0); + return TRUE; + } else if (ID_IS("IDC_EDIT1") || ID_IS("IDC_EDIT2") || ID_IS("IDC_EDIT3")) { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + return TRUE; + } + + } + return FALSE; +} + +int hdconf_init(void* hdlg) +{ + char s[260]; + void* h; + PcemHDC hd[4]; + + hd[0] = hdc[0]; + hd[1] = hdc[1]; + hd[2] = hdc[2]; + hd[3] = hdc[3]; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); + sprintf(s, "%i", hdc[0].spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); + sprintf(s, "%i", hdc[0].hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); + sprintf(s, "%i", hdc[0].tracks); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[0]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); + sprintf(s, "%i", hdc[1].spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); + sprintf(s, "%i", hdc[1].hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); + sprintf(s, "%i", hdc[1].tracks); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[1]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); + sprintf(s, "%i", hdc[2].spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); + sprintf(s, "%i", hdc[2].hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); + sprintf(s, "%i", hdc[2].tracks); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[2]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); + sprintf(s, "%i", hdc[3].spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); + sprintf(s, "%i", hdc[3].hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); + sprintf(s, "%i", hdc[3].tracks); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[3]); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[1].tracks*(uint64_t)hd[1].hpc)*(uint64_t)hd[1].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[2].tracks*(uint64_t)hd[2].hpc)*(uint64_t)hd[2].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd[3].tracks*(uint64_t)hd[3].hpc)*(uint64_t)hd[3].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + return hdconf_update(hdlg); +} + +int hdconf_update(void* hdlg) +{ + char s[260]; + void* h; + + int is_mfm = hdd_controller_selected_is_mfm(hdlg); + + update_hdd_cdrom(hdlg); + + int i, j; + for (i = 0; i < 4; ++i) + { + sprintf(s, "IDC_HDD_LABEL[%d]", i*10); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_HDD[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_CDROM[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + if (i >= 2) + { + sprintf(s, "IDC_EDIT_FN[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_FILE[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_EJECT[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_NEW[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_EDIT_SPT[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_EDIT_HPC[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_EDIT_CYL[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + sprintf(s, "IDC_TEXT_SIZE[%d]", i); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + for (j = 1; j < 6; ++j) + { + sprintf(s, "IDC_HDD_LABEL[%d]", i*10+j); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID(s)), !is_mfm); + } + } + } + + return TRUE; +} + +int hdconf_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) +{ + char s[260]; + void* h; + PcemHDC hd[4]; + FILE *f; + off64_t sz; + switch (message) + { + case WX_INITDIALOG: + pause = 1; + return hdconf_init(hdlg); + + case WX_COMMAND: + if (ID_IS("IDC_EJECT[0]")) + { + hd[0].spt = 0; + hd[0].hpc = 0; + hd[0].tracks = 0; + ide_fn[0][0] = 0; + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[0]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[0]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[0]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[0]"), ""); + hd_changed = 1; + return TRUE; + } else if (ID_IS("IDC_EJECT[1]")) + { + hd[1].spt = 0; + hd[1].hpc = 0; + hd[1].tracks = 0; + ide_fn[1][0] = 0; + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[1]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[1]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[1]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[1]"), ""); + hd_changed = 1; + return TRUE; + } else if (ID_IS("IDC_EJECT[2]")) + { + hd[2].spt = 0; + hd[2].hpc = 0; + hd[2].tracks = 0; + ide_fn[2][0] = 0; + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[2]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[2]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[2]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[2]"), ""); + hd_changed = 1; + return TRUE; + } else if (ID_IS("IDC_EJECT[3]")) + { + hd[3].spt = 0; + hd[3].hpc = 0; + hd[3].tracks = 0; + ide_fn[3][0] = 0; + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[3]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[3]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[3]"), "0"); + wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[3]"), ""); + hd_changed = 1; + return TRUE; + } + else if (ID_IS("IDC_NEW[0]")) + { + if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + return TRUE; + } + else if (ID_IS("IDC_FILE[0]")) + { + if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) + { + f = fopen64(openfilestring, "rb"); + if (!f) + { + wx_messagebox(hdlg,"Can't open file for read","PCem error",WX_MB_OK); + return TRUE; + } + fseeko64(f, -1, SEEK_END); + sz = ftello64(f) + 1; + fclose(f); + check_hd_type(hdlg, sz); + + if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); + + h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + } + return TRUE; + + } + else if (ID_IS("IDC_NEW[1]")) + { + if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); + + h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + return TRUE; + } + else if (ID_IS("IDC_FILE[1]")) + { + if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) + { + f = fopen64(openfilestring, "rb"); + if (!f) + { + wx_messagebox(hdlg,"Can't open file for read","PCem error",WX_MB_OK); + return TRUE; + } + fseeko64(f, -1, SEEK_END); + sz = ftello64(f) + 1; + fclose(f); + check_hd_type(hdlg, sz); + + if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + } + return TRUE; + } + else if (ID_IS("IDC_NEW[2]")) + { + if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); + + h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + return TRUE; + } + else if (ID_IS("IDC_FILE[2]")) + { + if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) + { + f = fopen64(openfilestring, "rb"); + if (!f) + { + wx_messagebox(hdlg,"Can't open file for read","PCem error",WX_MB_OK); + return TRUE; + } + fseeko64(f, -1, SEEK_END); + sz = ftello64(f) + 1; + fclose(f); + check_hd_type(hdlg, sz); + + if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + } + return TRUE; + } + else if (ID_IS("IDC_NEW[3]")) + { + if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); + + h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + return TRUE; + } + else if (ID_IS("IDC_FILE[3]")) + { + if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) + { + f = fopen64(openfilestring, "rb"); + if (!f) + { + wx_messagebox(hdlg,"Can't open file for read","PCem error",WX_MB_OK); + return TRUE; + } + fseeko64(f, -1, SEEK_END); + sz = ftello64(f) + 1; + fclose(f); + check_hd_type(hdlg, sz); + + if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); + sprintf(s, "%i", hd_new_spt); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); + sprintf(s, "%i", hd_new_hpc); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); + sprintf(s, "%i", hd_new_cyl); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); + sprintf(s, "%imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + + hd_changed = 1; + } + } + return TRUE; + } + else if (ID_IS("IDC_EDIT_SPT[0]") || ID_IS("IDC_EDIT_HPC[0]") || ID_IS("IDC_EDIT_CYL[0]")) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[0].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); + sprintf(s, "%imb", ((((hd[0].tracks*hd[0].hpc)*hd[0].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + return TRUE; + } + else if (ID_IS("IDC_EDIT_SPT[1]") || ID_IS("IDC_EDIT_HPC[1]") || ID_IS("IDC_EDIT_CYL[1]")) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[1].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); + sprintf(s, "%imb", ((((hd[1].tracks*hd[1].hpc)*hd[1].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + return TRUE; + } + else if (ID_IS("IDC_EDIT_SPT[2]") || ID_IS("IDC_EDIT_HPC[2]") || ID_IS("IDC_EDIT_CYL[2]")) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[2].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); + sprintf(s, "%imb", ((((hd[2].tracks*hd[2].hpc)*hd[2].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + return TRUE; + } + else if (ID_IS("IDC_EDIT_SPT[3]") || ID_IS("IDC_EDIT_HPC[3]") || ID_IS("IDC_EDIT_CYL[3]")) + { + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].spt); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].hpc); + h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); + wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); + sscanf(s, "%i", &hd[3].tracks); + + h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); + sprintf(s, "%imb", ((((hd[3].tracks*hd[3].hpc)*hd[3].spt)*512)/1024)/1024); + wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); + return TRUE; + } + else if (ID_IS("IDC_HDD[0]")) + { + if (new_cdrom_channel == 0) + new_cdrom_channel = -1; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_HDD[1]")) + { + if (new_cdrom_channel == 1) + new_cdrom_channel = -1; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_HDD[2]")) + { + if (new_cdrom_channel == 2) + new_cdrom_channel = -1; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_HDD[3]")) + { + if (new_cdrom_channel == 3) + new_cdrom_channel = -1; + update_hdd_cdrom(hdlg); + return TRUE; + + } + else if (ID_IS("IDC_CDROM[0]")) + { + new_cdrom_channel = 0; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_CDROM[1]")) + { + new_cdrom_channel = 1; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_CDROM[2]")) + { + new_cdrom_channel = 2; + update_hdd_cdrom(hdlg); + return TRUE; + } + else if (ID_IS("IDC_CDROM[3]")) + { + new_cdrom_channel = 3; + update_hdd_cdrom(hdlg); + return TRUE; + } + + } + return FALSE; +} + +int config_dialog_proc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) +{ + void* h; + switch (message) + { + case WX_INITDIALOG: + pause = 1; + return config_dlgproc(hdlg, message, wParam, lParam); + case WX_COMMAND: + { + if (wParam == wxID_OK) + { + config_dlgsave(hdlg); + pause = 0; + wx_enddialog(hdlg, 1); + return TRUE; + } + else if (wParam == wxID_CANCEL) + { + pause = 0; + wx_enddialog(hdlg, 0); + return TRUE; + } + else if (wParam == WX_ID("IDC_NOTEBOOK")) + { + if (lParam == 3) + hdconf_update(hdlg); + } + break; + } + } + config_dlgproc(hdlg, message, wParam, lParam); + hdconf_dlgproc(hdlg, message, wParam, lParam); + return TRUE; +} + + +int config_open(void* hwnd) +{ + return wx_dialogbox(hwnd, "ConfigureDlg", config_dialog_proc); } diff --git a/src/wx-config_sel.c b/src/wx-config_sel.c index dda0fe7..6542dba 100644 --- a/src/wx-config_sel.c +++ b/src/wx-config_sel.c @@ -1,16 +1,35 @@ #include "ibm.h" #include "config.h" #include "wx-utils.h" -#include "wx-sdl2.h" #include "paths.h" -extern void config_open(void* hwnd); -extern void hdconf_open(void* hwnd); +extern int config_open(void* hwnd); + +static void select_config(void* hdlg, char* name) +{ + char s[512]; + int num, c, p; + void* h; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + num = wx_sendmessage(h, WX_LB_GETCOUNT, 0, 0); + + for (c = 0; c < num; c++) + { + wx_sendmessage(h, WX_LB_GETTEXT, c, (LONG_PARAM)s); + if (!strcmp(s, name)) + { + wx_sendmessage(h, WX_LB_SETCURSEL, c, 0); + return; + } + } + +} static void config_list_update(void* hdlg) { char s[512]; - int num, c; + int num, c, p; void* h; strcpy(s, configs_path); @@ -18,9 +37,11 @@ static void config_list_update(void* hdlg) strcat(s, "*.cfg"); pclog("Dir %s\n", s); + h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + p = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + wx_dlgdirlist(hdlg, s, WX_ID("IDC_LIST"), 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); num = wx_sendmessage(h, WX_LB_GETCOUNT, 0, 0); for (c = 0; c < num; c++) @@ -38,11 +59,52 @@ static void config_list_update(void* hdlg) wx_sendmessage(h, WX_LB_DELETESTRING, c, 0); wx_sendmessage(h, WX_LB_INSERTSTRING, c, (LONG_PARAM)s); } + + if (num > 0) + { + if (p >= num) + p = num-1; + else if (p < 0) + p = 0; + wx_sendmessage(h, WX_LB_SETCURSEL, p, 0); + } + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_RENAME")), num); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_DELETE")), num); + wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_CONFIG")), num); + wx_enablewindow(wx_getdlgitem(hdlg, wxID_OK), num); +} + +static int run(void* hdlg) +{ + char s[512]; + + int ret = wx_dlgdirselectex(hdlg, (LONG_PARAM)s, 512, WX_ID("IDC_LIST")); + + pclog("wx_dlgdirselectex returned %i %s\n", ret, s); + if (s[0]) + { + char cfg[512]; + + strcpy(cfg, configs_path); + put_backslash(cfg); + strcat(cfg, s); + strcat(cfg, "cfg"); +// sprintf(cfg, "%s\\configs\\%scfg", config_path, s); + pclog("Config name %s\n", cfg); + + strcpy(config_file_default, cfg); + + wx_enddialog(hdlg, 1); +// pause = 0; + return TRUE; + } + return FALSE; } static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) { //void* h; + int done = 0; switch (message) { @@ -58,31 +120,7 @@ static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, L case WX_COMMAND: { if (wParam == wxID_OK) - { - char s[512]; - - int ret = wx_dlgdirselectex(hdlg, (LONG_PARAM)s, 512, WX_ID("IDC_LIST")); - - pclog("wx_dlgdirselectex returned %i %s\n", ret, s); - if (s[0]) - { - char cfg[512]; - - strcpy(cfg, configs_path); - put_backslash(cfg); - strcat(cfg, s); - strcat(cfg, "cfg"); -// sprintf(cfg, "%s\\configs\\%scfg", config_path, s); - pclog("Config name %s\n", cfg); - - strcpy(config_file_default, cfg); - - wx_enddialog(hdlg, 1); -// pause = 0; - return TRUE; - } - return FALSE; - } + return run(hdlg); else if (wParam == wxID_CANCEL) { wx_enddialog(hdlg, 0); @@ -92,22 +130,37 @@ static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, L else if (wParam == WX_ID("IDC_NEW")) { char name[64]; + name[0] = 0; -// if (!getsfile(hdlg, "Configuration (*.cfg)|*.cfg|All files (*.*)|*.*", "", s, "cfg")) - if (wx_textentrydialog(hdlg, "Enter name:", "New config", 0, 1, 64, (LONG_PARAM)name)) + while (!done) { - strcpy(openfilestring, configs_path); - put_backslash(openfilestring); - strcat(openfilestring, name); - strcat(openfilestring, ".cfg"); + if (wx_textentrydialog(hdlg, "Enter name:", "New config", name, 1, 64, (LONG_PARAM)name)) + { + char cfg[512]; - pclog("Config %s\n", openfilestring); + strcpy(cfg, configs_path); + put_backslash(cfg); + strcat(cfg, name); + strcat(cfg, ".cfg"); - config_open(hdlg); + pclog("Config %s\n", cfg); - saveconfig(openfilestring); + if (!wx_file_exists(cfg)) + { + if (config_open(hdlg)) + { + saveconfig(cfg); - config_list_update(hdlg); + config_list_update(hdlg); + select_config(hdlg, name); + } + done = 1; + } + else + wx_simple_messagebox("Already exists", "A configuration with that name already exists."); + } + else + done = 1; } return TRUE; @@ -136,30 +189,6 @@ static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, L return TRUE; } - else if (wParam == WX_ID("IDC_HDCONF")) - { - char s[512]; - - int ret = wx_dlgdirselectex(hdlg, (LONG_PARAM)s, 512, WX_ID("IDC_LIST")); - - pclog("wx_dlgdirselectex returned %i %s\n", ret, s); - if (s[0]) - { - char cfg[512]; - - strcpy(cfg, configs_path); - put_backslash(cfg); - strcat(cfg, s); - strcat(cfg, "cfg"); - pclog("Config name %s\n", cfg); - - loadconfig(cfg); - hdconf_open(hdlg); - saveconfig(cfg); - } - - return TRUE; - } else if (wParam == WX_ID("IDC_RENAME")) { char name[64]; @@ -172,27 +201,39 @@ static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, L if (c >= 0) { wx_sendmessage(h, WX_LB_GETTEXT, c, (LONG_PARAM)old_name); + strcpy(name, old_name); - if (wx_textentrydialog(hdlg, "Enter name:", "New name", old_name, 1, 64, (LONG_PARAM)name)) + while (!done) { - char old_path[512]; - char new_path[512]; + if (wx_textentrydialog(hdlg, "Enter name:", "New name", name, 1, 64, (LONG_PARAM)name)) + { + char old_path[512]; + char new_path[512]; - strcpy(old_path, configs_path); - put_backslash(old_path); - strcat(old_path, old_name); - strcat(old_path, ".cfg"); + strcpy(old_path, configs_path); + put_backslash(old_path); + strcat(old_path, old_name); + strcat(old_path, ".cfg"); - strcpy(new_path, configs_path); - put_backslash(new_path); - strcat(new_path, name); - strcat(new_path, ".cfg"); + strcpy(new_path, configs_path); + put_backslash(new_path); + strcat(new_path, name); + strcat(new_path, ".cfg"); - pclog("Rename %s to %s\n", old_path, new_path); + pclog("Rename %s to %s\n", old_path, new_path); - rename(old_path, new_path); + if (!wx_file_exists(new_path)) + { + rename(old_path, new_path); - config_list_update(hdlg); + config_list_update(hdlg); + done = 1; + } + else + wx_simple_messagebox("Already exists", "A configuration with that name already exists."); + } + else + done = 1; } } @@ -223,6 +264,11 @@ static int config_selection_dlgproc(void* hdlg, int message, INT_PARAM wParam, L } } } + else if (wParam == WX_ID("IDC_LIST")) + { + if (lParam == WX_LBN_DBLCLK) + run(hdlg); + } } break; } diff --git a/src/wx-deviceconfig.cc b/src/wx-deviceconfig.cc index 3a280ce..6bd913f 100644 --- a/src/wx-deviceconfig.cc +++ b/src/wx-deviceconfig.cc @@ -13,36 +13,41 @@ extern "C" { - #include "config.h" - void saveconfig(char*); - void resetpchard(); - int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam); - device_t *config_device; - int confirm(); +#include "config.h" +#include "plat-midi.h" +void saveconfig(char*); +void resetpchard(); +int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, + LONG_PARAM lParam); +device_t *config_device; +int confirm(); } #define IDC_CONFIG_BASE 1000 - -int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) { - switch (message) { - case WX_INITDIALOG: { +int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, + LONG_PARAM lParam) +{ + switch (message) + { + case WX_INITDIALOG: + { int id = IDC_CONFIG_BASE; device_config_t *config = config_device->config; int c; - while (config->type != -1) { + while (config->type != -1) + { device_config_selection_t *selection = config->selection; void* h = 0; int val_int; - char *val_string; int num; - char s[80]; + char s[100]; - switch (config->type) { + switch (config->type) + { case CONFIG_BINARY: h = wx_getdlgitem(hdlg, id); - val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, - config->default_int); + val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, config->default_int); wx_sendmessage(h, WX_BM_SETCHECK, val_int, 0); @@ -50,14 +55,13 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l break; case CONFIG_SELECTION: - h = wx_getdlgitem(hdlg, id+1); - val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, - config->default_int); + h = wx_getdlgitem(hdlg, id + 1); + val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, config->default_int); c = 0; - while (selection->description[0]) { - wx_sendmessage(h, WX_CB_ADDSTRING, 0, - (LONG_PARAM) selection->description); + while (selection->description[0]) + { + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) selection->description); if (val_int == selection->value) wx_sendmessage(h, WX_CB_SETCURSEL, c, 0); selection++; @@ -68,19 +72,21 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l break; case CONFIG_MIDI: - // midi ignored -// val_int = config_get_int(CFG_MACHINE, NULL, config->name, config->default_int); -// -// num = midi_get_num_devs(); -// for (c = 0; c < num; c++) -// { -// midi_get_dev_name(c, s); -// SendMessage(h, CB_ADDSTRING, 0, (LONG_PARAM)s); -// if (val_int == c) -// SendMessage(h, CB_SETCURSEL, c, 0); -// } -// -// id += 2; + num = midi_get_num_devs(); + if (num > 0) + { + h = wx_getdlgitem(hdlg, id + 1); + val_int = config_get_int(CFG_MACHINE, NULL, config->name, config->default_int); + + for (c = 0; c < num; c++) + { + midi_get_dev_name(c, s); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) s); + if (val_int == c) + wx_sendmessage(h, WX_CB_SETCURSEL, c, 0); + } + id += 2; + } break; } config++; @@ -89,24 +95,26 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l return TRUE; case WX_COMMAND: - switch (wParam) { - case wxID_OK: { + switch (wParam) + { + case wxID_OK: + { int id = IDC_CONFIG_BASE; device_config_t *config = config_device->config; int c; int changed = 0; - while (config->type != -1) { + while (config->type != -1) + { device_config_selection_t *selection = config->selection; void* h = 0; int val_int; - char *val_string; - switch (config->type) { + switch (config->type) + { case CONFIG_BINARY: h = wx_getdlgitem(hdlg, id); - val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, - config->default_int); + val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, config->default_int); if (val_int != wx_sendmessage(h, WX_BM_GETCHECK, 0, 0)) changed = 1; @@ -115,9 +123,8 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l break; case CONFIG_SELECTION: - h = wx_getdlgitem(hdlg, id+1); - val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, - config->default_int); + h = wx_getdlgitem(hdlg, id + 1); + val_int = config_get_int(CFG_MACHINE, config_device->name, config->name, config->default_int); c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); @@ -131,27 +138,30 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l break; case CONFIG_MIDI: - // midi ignored -// val_int = config_get_int(CFG_MACHINE, NULL, config->name, -// config->default_int); -// -// c = SendMessage(h, CB_GETCURSEL, 0, 0); -// -// if (val_int != c) -// changed = 1; -// -// id += 2; + if (midi_get_num_devs() > 0) + { + h = wx_getdlgitem(hdlg, id + 1); + val_int = config_get_int(CFG_MACHINE, NULL, config->name, config->default_int); + + c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + + if (val_int != c) + changed = 1; + id += 2; + } break; } config++; } - if (!changed) { + if (!changed) + { wx_enddialog(hdlg, 0); return TRUE; } - if (has_been_inited && !confirm()) { + if (has_been_inited && !confirm()) + { wx_enddialog(hdlg, 0); return TRUE; } @@ -159,38 +169,40 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l id = IDC_CONFIG_BASE; config = config_device->config; - while (config->type != -1) { + while (config->type != -1) + { device_config_selection_t *selection = config->selection; void* h = 0; int val_int; - char *val_string; - switch (config->type) { + switch (config->type) + { case CONFIG_BINARY: h = wx_getdlgitem(hdlg, id); - config_set_int(CFG_MACHINE, config_device->name, config->name, - wx_sendmessage(h, WX_BM_GETCHECK, 0, 0)); + config_set_int(CFG_MACHINE, config_device->name, config->name, wx_sendmessage(h, WX_BM_GETCHECK, 0, 0)); id++; break; case CONFIG_SELECTION: - h = wx_getdlgitem(hdlg, id+1); + h = wx_getdlgitem(hdlg, id + 1); c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); for (; c > 0; c--) selection++; - config_set_int(CFG_MACHINE, config_device->name, config->name, - selection->value); + config_set_int(CFG_MACHINE, config_device->name, config->name, selection->value); id += 2; break; case CONFIG_MIDI: - // midi ignored -// c = SendMessage(h, CB_GETCURSEL, 0, 0); -// config_set_int(CFG_MACHINE, NULL, config->name, c); -// -// id += 2; + if (midi_get_num_devs() > 0) + { + h = wx_getdlgitem(hdlg, id + 1); + c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + config_set_int(CFG_MACHINE, NULL, config->name, c); + + id += 2; + } break; } config++; @@ -214,55 +226,68 @@ int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM l return FALSE; } +void deviceconfig_open(void* hwnd, device_t *device) +{ + char s[257]; + config_device = device; - -void deviceconfig_open(void* hwnd, device_t *device) { - config_device = device; - - PCemDialogBox dialog((wxWindow*) hwnd, deviceconfig_dlgproc); + PCemDialogBox dialog((wxWindow*) hwnd, deviceconfig_dlgproc); // dialog.SetWindowStyle(wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); - device_config_t *config = device->config; + device_config_t *config = device->config; - dialog.SetTitle("Device Configuration"); + dialog.SetTitle("Device Configuration"); - wxBoxSizer* root = new wxBoxSizer(wxVERTICAL); + wxFlexGridSizer* root = new wxFlexGridSizer(0, 1, 0, 0); + root->SetFlexibleDirection(wxBOTH); + root->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); dialog.SetSizer(root); - wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); - root->Add(sizer, 0, wxALL, 5); + wxFlexGridSizer* sizer = new wxFlexGridSizer(0, 2, 0, 0); + sizer->SetFlexibleDirection(wxBOTH); + sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + sizer->AddGrowableCol(1); + root->Add(sizer, 1, wxEXPAND, 5); - int id = IDC_CONFIG_BASE; + int id = IDC_CONFIG_BASE; - while (config->type != -1) { - switch (config->type) { - case CONFIG_BINARY: - sizer->Add(new wxCheckBox(&dialog, id++, config->description), 0, wxALL); - break; + while (config->type != -1) + { + switch (config->type) + { + case CONFIG_BINARY: + sizer->Add(0, 0, 1, wxEXPAND, 5); + sizer->Add(new wxCheckBox(&dialog, id++, config->description), 0, wxALL, 5); + break; - case CONFIG_SELECTION: { - sizer->Add(new wxStaticText(&dialog, id++, config->description), 0, wxALL); - wxComboBox* cb = new wxComboBox(&dialog, id++); - cb->SetEditable(false); - sizer->Add(cb, 0, wxALL); - } break; - case CONFIG_MIDI: - // midi ignored - break; - } + case CONFIG_SELECTION: + case CONFIG_MIDI: + { + if (config->type == CONFIG_MIDI && midi_get_num_devs() == 0) + break; + sprintf(s, "%s:", config->description); + sizer->Add(new wxStaticText(&dialog, id++, s), 0, wxALL | wxALIGN_CENTER_VERTICAL, 5); + wxBoxSizer* comboSizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(comboSizer, 1, wxEXPAND, 5); + wxComboBox* cb = new wxComboBox(&dialog, id++); + cb->SetEditable(false); + comboSizer->Add(cb, 1, wxALL, 5); + break; + } + } - config++; - } + config++; + } - wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL); + root->Add(okCancelSizer, 1, wxEXPAND, 5); - okCancelSizer->Add(new wxButton(&dialog, wxID_OK)); - okCancelSizer->Add(new wxButton(&dialog, wxID_CANCEL)); + okCancelSizer->Add(0, 0, 1, wxEXPAND, 5); + okCancelSizer->Add(new wxButton(&dialog, wxID_OK), 0, wxALL, 5); + okCancelSizer->Add(new wxButton(&dialog, wxID_CANCEL), 0, wxALL, 5); - sizer->Add(okCancelSizer); - - dialog.Fit(); - dialog.OnInit(); - dialog.ShowModal(); - dialog.Destroy(); + dialog.Fit(); + dialog.OnInit(); + dialog.ShowModal(); + dialog.Destroy(); } diff --git a/src/wx-dialogbox.cc b/src/wx-dialogbox.cc index 7b1fa7f..50d3c6b 100644 --- a/src/wx-dialogbox.cc +++ b/src/wx-dialogbox.cc @@ -1,5 +1,3 @@ -#include "wx-dialogbox.h" - #include #ifndef WX_PRECOMP @@ -7,19 +5,34 @@ #endif #include +#include + +#include "wx-dialogbox.h" +#include "wx-utils.h" BEGIN_EVENT_TABLE(PCemDialogBox, wxDialog) END_EVENT_TABLE() +class CommandValue: public wxObject +{ +public: + CommandValue(int value) { this->value = value; } + int GetValue() { return this->value; } +private: + int value; +}; + PCemDialogBox::PCemDialogBox(wxWindow* parent, int (*callback)(void* window, int message, INT_PARAM param1, LONG_PARAM param2)) : wxDialog(parent, -1, "No title") { this->callback = callback; + this->commandActive = false; } PCemDialogBox::PCemDialogBox(wxWindow* parent, const char* name, int (*callback)(void* window, int message, INT_PARAM param1, LONG_PARAM param2)) { wxXmlResource::Get()->LoadDialog(this, parent, name); this->callback = callback; + this->commandActive = false; } void PCemDialogBox::OnInit() @@ -28,8 +41,11 @@ void PCemDialogBox::OnInit() { callback(this, WX_INITDIALOG, 0, 0); Bind(wxEVT_BUTTON, &PCemDialogBox::OnCommand, this); + Bind(wxEVT_RADIOBUTTON, &PCemDialogBox::OnCommand, this); Bind(wxEVT_TEXT, &PCemDialogBox::OnCommand, this); Bind(wxEVT_COMBOBOX, &PCemDialogBox::OnCommand, this); + Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, &PCemDialogBox::OnNotebookChanged, this); + Bind(wxEVT_LISTBOX_DCLICK, &PCemDialogBox::OnCommand, this, wxID_ANY, wxID_ANY, new CommandValue(WX_LBN_DBLCLK)); } wxWindow* root = FindWindow(XRCID("ROOT_PANEL")); @@ -38,8 +54,31 @@ void PCemDialogBox::OnInit() Fit(); } -void PCemDialogBox::OnCommand(wxCommandEvent& event) +int PCemDialogBox::processEvent(int message, INT_PARAM param1, LONG_PARAM param2) { - callback(this, WX_COMMAND, event.GetId(), 0); + int result = 0; + /* lock the current command to prevent strange behavior */ + if (!commandActive) + { + commandActive = true; + result = callback(this, message, param1, param2); + commandActive = false; + } + return result; +} + +void PCemDialogBox::OnNotebookChanged(wxCommandEvent& event) +{ + wxBookCtrlEvent* ev = (wxBookCtrlEvent*)&event; + processEvent(WX_COMMAND, ev->GetId(), ev->GetSelection()); +} + +void PCemDialogBox::OnCommand(wxCommandEvent& event) +{ + LONG_PARAM val = 0; + CommandValue* c = (CommandValue*)event.GetEventUserData(); + if (c) + val = c->GetValue(); + processEvent(WX_COMMAND, event.GetId(), val); } diff --git a/src/wx-dialogbox.h b/src/wx-dialogbox.h index ca3ee4d..af8ed2d 100644 --- a/src/wx-dialogbox.h +++ b/src/wx-dialogbox.h @@ -12,8 +12,11 @@ public: virtual ~PCemDialogBox() {} void OnInit(); private: - void OnCommand(wxCommandEvent &event); + void OnNotebookChanged(wxCommandEvent& event); + void OnCommand(wxCommandEvent& event); + int processEvent(int message, INT_PARAM param1, LONG_PARAM param2); int(*callback)(void* window, int message, INT_PARAM param1, LONG_PARAM param2); + bool commandActive; DECLARE_EVENT_TABLE() }; diff --git a/src/wx-display.h b/src/wx-display.h index 4753579..2c98c75 100644 --- a/src/wx-display.h +++ b/src/wx-display.h @@ -25,6 +25,7 @@ extern int video_fullscreen_mode; extern int win_doresize; extern int window_doreset; +extern int window_dosetresize; extern int renderer_doreset; extern int window_dofullscreen; extern int window_dowindowed; diff --git a/src/wx-glsl.h b/src/wx-glsl.h new file mode 100644 index 0000000..ac371f3 --- /dev/null +++ b/src/wx-glsl.h @@ -0,0 +1,155 @@ +#ifndef SRC_WX_GLSL_H_ +#define SRC_WX_GLSL_H_ + +#define MAX_PREV 7 + +#define MAX_SHADERS 20 +#define MAX_TEXTURES 20 +#define MAX_PARAMETERS 100 + +#define MAX_USER_SHADERS 20 +//#define SDL2_SHADER_DEBUG + +struct shader_scale { + int mode[2]; + float value[2]; +}; + +struct shader_state { + float input_size[2]; + float input_texture_size[2]; + float output_texture_size[2]; + float output_size[2]; + float tex_coords[8]; +}; + +struct shader_vbo { + int vertex_coord; + int tex_coord; + int color; +}; + +struct shader_texture { + int id; + int width; + int height; + int type; + int internal_format; + int format; + int min_filter; + int mag_filter; + int wrap_mode; + void* data; + int mipmap; +}; + +struct shader_lut_texture { + char name[50]; + struct shader_texture texture; +}; + +struct shader_fbo { + int id; + struct shader_texture texture; + int srgb; +}; + +struct shader_prev { + struct shader_fbo fbo; + struct shader_vbo vbo; +}; + +struct shader_input { + int texture; + int input_size; + int texture_size; + int tex_coord; +}; + +struct shader_uniforms { + int mvp_matrix; + int vertex_coord; + int tex_coord; + int color; + + int texture; + int input_size; + int texture_size; + int output_size; + + int frame_count; + int frame_direction; + + struct shader_input orig; + struct shader_input pass[MAX_SHADERS]; + struct shader_input prev_pass[MAX_SHADERS]; + struct shader_input prev[MAX_PREV]; + + int parameters[MAX_PARAMETERS]; + int lut_textures[MAX_TEXTURES]; +}; + +struct shader_program { + int vertex_shader; + int fragment_shader; + int id; +}; + +struct shader_parameter { + char id[64]; + char description[64]; + float default_value; + float value; + float min; + float max; + float step; +}; + +struct shader_pass { + int active; + char alias[64]; + int vertex_array; + int frame_count_mod; + struct shader_program program; + struct shader_uniforms uniforms; + struct shader_fbo fbo; + struct shader_vbo vbo; + struct shader_state state; + struct shader_scale scale; +}; + +struct glsl_shader { + int active; + char name[64]; + + int num_passes; + struct shader_pass passes[MAX_SHADERS]; + + int num_lut_textures; + struct shader_lut_texture lut_textures[MAX_TEXTURES]; + + int num_parameters; + struct shader_parameter parameters[MAX_PARAMETERS]; + + struct shader_pass prev_scene; + struct shader_prev prev[MAX_PREV+1]; + + int last_prev_update; + int has_prev; + + float shader_refresh_rate; +}; + +typedef struct glsl_t { + int num_shaders; + struct glsl_shader shaders[MAX_USER_SHADERS]; + struct shader_pass scene; + struct shader_pass final_pass; + struct shader_pass fs_color; +#ifdef SDL2_SHADER_DEBUG + struct shader_pass debug; +#endif + int srgb; +} glsl_t; + +#endif diff --git a/src/wx-glslp-parser.c b/src/wx-glslp-parser.c new file mode 100644 index 0000000..02aa822 --- /dev/null +++ b/src/wx-glslp-parser.c @@ -0,0 +1,328 @@ +#include "wx-glslp-parser.h" + +#include +#include +#include +#include +#include "wx-utils.h" + +#define safe_strncpy(a,b,n) do { strncpy((a),(b),(n)-1); (a)[(n)-1] = 0; } while (0) + +extern char* get_filename(char*); +extern void pclog(const char *format, ...); + +static int endswith(const char* str, const char* ext) +{ + int i; + const char* p; + int elen = strlen(ext); + int slen = strlen(str); + if (slen >= elen) + { + p = &str[slen-elen]; + for (i = 0; i < elen; ++i) + { + if (tolower(p[i]) != tolower(ext[i])) + return 0; + } + return 1; + } + return 0; +} + +static char* load_file(const char* fn) +{ + FILE* f = fopen(fn, "rb"); + if (!f) + return 0; + fseek(f, 0, SEEK_END); + long fsize = ftell(f); + fseek(f, 0, SEEK_SET); + + char* data = malloc(fsize+1); + + long read = fread(data, fsize, 1, f); + fclose(f); + + data[fsize] = 0; + + return data; +} + +static void strip_lines(const char* program, const char* starts_with) +{ + /* strip parameters */ + char* ptr = strstr(program, starts_with); + while (ptr) + { + while (*ptr != '\n' && *ptr != '\0') + *ptr++ = ' '; + ptr = strstr(program, starts_with); + } +} + +static void strip_parameters(const char* program) +{ + /* strip parameters */ + strip_lines(program, "#pragma parameter"); +} + +static void strip_defines(const char* program) +{ + /* strip texture define */ + strip_lines(program, "#define texture"); +} + +static int has_parameter(glslp_t* glsl, char* id) +{ + int i; + for (i = 0; i < glsl->num_parameters; ++i) + if (!strcmp(glsl->parameters[i].id, id)) + return 1; + return 0; +} + +static int get_parameters(glslp_t* glsl) +{ + int i; + struct parameter p; + for (i = 0; i < glsl->num_shaders; ++i) + { + struct shader* shader = &glsl->shaders[i]; + FILE* f = fopen(shader->shader_fn, "rb"); + if (!f) + return 0; + + char line[1024]; + while (fgets(line, sizeof(line)-1, f) && glsl->num_parameters < MAX_PARAMETERS) + { + int num = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", p.id, p.description, &p.default_value, &p.min, &p.max, &p.step); + if (num < 5) + continue; + p.id[63] = 0; + p.description[63] = 0; + + if (num == 5) + p.step = 0.1f * (p.max-p.min); + + p.value = p.default_value; + + if (!has_parameter(glsl, p.id)) + { + memcpy(&glsl->parameters[glsl->num_parameters++], &p, sizeof(struct parameter)); + pclog("Read parameter: %s (%s) %f, %f -> %f (%f)\n", p.id, p.description, p.default_value, p.min, p.max, p.step); + } + } + + fclose(f); + } + + return 1; +} + +static struct parameter* get_parameter(glslp_t* glslp, const char* id) +{ + int i; + for (i = 0; i < glslp->num_parameters; ++i) + { + if (!strcmp(glslp->parameters[i].id, id)) { + return &glslp->parameters[i]; + } + } + return 0; +} + +static glslp_t* glsl_parse(const char* f) +{ + glslp_t* glslp = malloc(sizeof(glslp_t)); + memset(glslp, 0, sizeof(glslp_t)); + glslp->num_shaders = 1; + struct shader* shader = &glslp->shaders[0]; + strcpy(shader->shader_fn, f); + shader->shader_program = load_file(f); + if (!shader->shader_program) + { + wx_simple_messagebox("GLSL error", "Could not load shader %s\n", shader->shader_fn); + glslp_free(glslp); + return 0; + } + strip_parameters(shader->shader_program); + strip_defines(shader->shader_program); + shader->scale_x = shader->scale_y = 1.0f; + strcpy(shader->scale_type_x, "source"); + strcpy(shader->scale_type_y, "source"); + get_parameters(glslp); + return glslp; +} + +void get_glslp_name(const char* f, char* s, int size) +{ + safe_strncpy(s, get_filename((char*)f), size); +} + +glslp_t* glslp_parse(const char* f) +{ + int i, j, len, sublen; + char s[512], t[512], z[512]; + + s[511] = 0; + if (endswith(f, ".glsl")) + return glsl_parse(f); + + void* cfg = wx_config_load(f); + + if (!cfg) + { + wx_simple_messagebox("GLSLP error", "Could not load GLSLP-file %s\n", f); + return 0; + } + + glslp_t* glslp = malloc(sizeof(glslp_t)); + memset(glslp, 0, sizeof(glslp_t)); + + get_glslp_name(f, glslp->name, sizeof(glslp->name)); + + wx_config_get_int(cfg, "shaders", &glslp->num_shaders, 0); + + for (i = 0; i < glslp->num_shaders; ++i) + { + struct shader* shader = &glslp->shaders[i]; + + + snprintf(s, sizeof(s)-1, "shader%d", i); + if (!wx_config_get_string(cfg, s, t, sizeof(t), 0)) + { + /* shader doesn't exist, lets break here */ + glslp->num_shaders = i; + break; + } + strcpy(s, f); + *get_filename(s) = 0; + snprintf(shader->shader_fn, sizeof(shader->shader_fn)-1, "%s%s", s, t); + shader->shader_program = load_file(shader->shader_fn); + if (!shader->shader_program) + { + wx_simple_messagebox("GLSL error", "Could not load shader %s\n", shader->shader_fn); + glslp_free(glslp); + return 0; + } + strip_parameters(shader->shader_program); + strip_defines(shader->shader_program); + + snprintf(s, sizeof(s)-1, "alias%d", i); + wx_config_get_string(cfg, s, shader->alias, sizeof(shader->alias), 0); + + snprintf(s, sizeof(s)-1, "filter_linear%d", i); + wx_config_get_bool(cfg, s, &shader->filter_linear, 0); + + snprintf(s, sizeof(s)-1, "wrap_mode%d", i); + wx_config_get_string(cfg, s, shader->wrap_mode, sizeof(shader->wrap_mode), 0); + + snprintf(s, sizeof(s)-1, "float_framebuffer%d", i); + wx_config_get_bool(cfg, s, &shader->float_framebuffer, 0); + snprintf(s, sizeof(s)-1, "srgb_framebuffer%d", i); + wx_config_get_bool(cfg, s, &shader->srgb_framebuffer, 0); + + snprintf(s, sizeof(s)-1, "mipmap_input%d", i); + wx_config_get_bool(cfg, s, &shader->mipmap_input, 0); + + strcpy(shader->scale_type_x, "source"); + snprintf(s, sizeof(s)-1, "scale_type_x%d", i); + wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0); + strcpy(shader->scale_type_y, "source"); + snprintf(s, sizeof(s)-1, "scale_type_y%d", i); + wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0); + snprintf(s, sizeof(s)-1, "scale_type%d", i); + if (wx_config_has_entry(cfg, s)) + { + wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0); + wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0); + } + + snprintf(s, sizeof(s)-1, "scale_x%d", i); + wx_config_get_float(cfg, s, &shader->scale_x, 1.0f); + snprintf(s, sizeof(s)-1, "scale_y%d", i); + wx_config_get_float(cfg, s, &shader->scale_y, 1.0f); + snprintf(s, sizeof(s)-1, "scale%d", i); + if (wx_config_has_entry(cfg, s)) + { + wx_config_get_float(cfg, s, &shader->scale_x, 1.0f); + wx_config_get_float(cfg, s, &shader->scale_y, 1.0f); + } + + snprintf(s, sizeof(s)-1, "frame_count_mod%d", i); + wx_config_get_int(cfg, s, &shader->frame_count_mod, 0); + } + + /* textures */ + glslp->num_textures = 0; + wx_config_get_string(cfg, "textures", t, sizeof(t), 0); + + len = strlen(t); + j = 0; + sublen = 0; + for (i = 0; i < len; ++i) + { + if (t[i] == ';' || i == len-1) + { + sublen = (i-j) + ((i == len-1) ? 1 : 0) + 1; + safe_strncpy(s, t+j, sublen); + s[511 < sublen ? 511 : sublen] = 0; + + struct texture* tex = &glslp->textures[glslp->num_textures++]; + + strcpy(tex->name, s); + wx_config_get_string(cfg, s, tex->path, sizeof(tex->path), 0); + + snprintf(z, sizeof(z)-1, "%s_linear", s); + wx_config_get_bool(cfg, z, &tex->linear, 0); + + snprintf(z, sizeof(z)-1, "%s_mipmap", s); + wx_config_get_bool(cfg, z, &tex->mipmap, 0); + + snprintf(z, sizeof(z)-1, "%s_wrap_mode", s); + wx_config_get_string(cfg, z, tex->wrap_mode, sizeof(tex->wrap_mode), 0); + + j = i+1; + } + } + + /* parameters */ + get_parameters(glslp); + + wx_config_get_string(cfg, "parameters", t, sizeof(t), 0); + + len = strlen(t); + j = 0; + sublen = 0; + for (i = 0; i < len; ++i) + { + if (t[i] == ';' || i == len-1) + { + sublen = (i-j) + ((i == len-1) ? 1 : 0) + 1; + safe_strncpy(s, t+j, sublen); + s[511 < sublen ? 511 : sublen] = 0; + + struct parameter* p = get_parameter(glslp, s); + + if (p) + wx_config_get_float(cfg, s, &p->default_value, 0); + + j = i+1; + } + } + + wx_config_free(cfg); + + + return glslp; +} + +void glslp_free(glslp_t* p) +{ + int i; + for (i = 0; i < p->num_shaders; ++i) + if (p->shaders[i].shader_program) + free(p->shaders[i].shader_program); + free(p); +} diff --git a/src/wx-glslp-parser.h b/src/wx-glslp-parser.h new file mode 100644 index 0000000..94862d7 --- /dev/null +++ b/src/wx-glslp-parser.h @@ -0,0 +1,54 @@ +#ifndef SRC_WX_GLSLP_PARSER_H_ +#define SRC_WX_GLSLP_PARSER_H_ + +#include "wx-glsl.h" + +struct parameter { + char id[64]; + char description[64]; + float default_value; + float value; + float min; + float max; + float step; +}; + +struct texture { + char path[256]; + char name[50]; + int linear; + int mipmap; + char wrap_mode[50]; +}; + +struct shader { + char shader_fn[512]; + char* shader_program; + char alias[64]; + int filter_linear; + int float_framebuffer; + int srgb_framebuffer; + int mipmap_input; + int frame_count_mod; + char wrap_mode[50]; + char scale_type_x[9], scale_type_y[9]; + float scale_x, scale_y; +}; + +typedef struct glslp_t { + char name[64]; + int num_shaders; + struct shader shaders[MAX_SHADERS]; + + int num_textures; + struct texture textures[MAX_TEXTURES]; + + int num_parameters; + struct parameter parameters[MAX_PARAMETERS]; +} glslp_t; + +void get_glslp_name(const char* f, char* s, int size); +glslp_t* glslp_parse(const char* f); +void glslp_free(glslp_t* p); + +#endif /* SRC_WX_GLSLP_PARSER_H_ */ diff --git a/src/wx-resources.cpp b/src/wx-resources.cpp index c48e954..ec14ae4 100644 --- a/src/wx-resources.cpp +++ b/src/wx-resources.cpp @@ -21,93 +21,112 @@ wxMemoryFSHandler::AddFile(name, data, size) #endif -static size_t xml_res_size_0 = 346; +static size_t xml_res_size_0 = 430; static unsigned char xml_res_file_0[] = { -137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,4,0,0, -0,181,250,55,234,0,0,0,4,103,65,77,65,0,0,175,200,55,5,138,233,0,0,0,25, -116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109, -97,103,101,82,101,97,100,121,113,201,101,60,0,0,0,236,73,68,65,84,40,207, -165,145,61,74,4,65,16,133,191,94,123,214,192,31,132,197,64,23,4,51,111, -177,48,147,120,11,79,224,9,4,207,227,13,156,100,135,185,129,193,70,3,155, -8,6,130,152,8,130,83,221,213,101,208,189,131,145,201,86,80,73,189,247,190, -162,202,25,255,215,140,125,5,30,96,88,107,173,68,2,129,128,32,8,35,210, -221,53,224,140,97,53,239,207,145,201,147,183,170,232,121,109,238,59,15, -241,241,140,119,14,1,43,67,227,141,83,174,25,30,232,220,102,53,239,23,124, -149,224,136,225,56,160,226,132,35,90,182,141,123,89,95,212,134,96,37,220, -166,94,241,201,83,231,133,111,62,24,49,18,74,194,72,36,20,195,115,140,224, -165,6,65,217,224,152,21,175,145,184,66,89,34,181,31,137,68,20,197,145,10, -102,151,17,8,248,17,69,73,220,144,72,216,31,140,145,178,96,129,78,193,217, -191,3,93,18,241,63,237,243,173,48,230,219,33,72,185,103,198,90,235,246, -254,230,47,16,30,136,4,54,25,76,145,0,0,0,0,73,69,78,68,174,66,96,130}; +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,1,80,73,68,65,84,120,218,196,147,177,75,195,64,20,198,191,75,2,77,82, +2,66,58,171,32,130,171,130,179,10,34,138,173,155,131,56,248,143,137,184, +9,145,186,168,40,34,104,103,65,119,233,160,117,236,210,160,29,210,187,228, +204,119,70,135,170,181,218,193,7,71,238,184,239,247,229,221,189,123,66, +107,141,81,194,194,136,225,236,238,237,35,77,51,88,150,224,90,151,74,165, +129,64,146,36,252,136,44,211,176,109,11,14,87,89,150,209,68,215,170,235, +120,120,108,13,52,152,156,24,199,241,201,169,22,194,18,52,176,8,247,164, +212,27,181,106,14,63,209,28,66,124,61,184,71,13,181,100,200,58,105,154, +70,59,219,91,144,74,97,102,122,106,184,131,231,102,100,14,162,195,200,81, +74,109,198,207,47,56,59,191,40,118,127,170,138,185,43,172,173,174,128,44, +51,64,210,75,224,249,30,150,151,22,115,94,23,26,209,7,234,55,239,252,239, +151,87,215,134,33,107,12,100,79,194,247,92,40,41,113,115,123,247,113,222, +126,3,190,153,249,185,89,163,37,99,12,148,74,205,196,117,61,116,226,24, +149,74,88,24,124,14,26,80,67,45,25,178,38,3,222,102,185,236,227,190,217, +252,22,126,143,118,187,141,48,12,139,210,231,6,156,216,142,131,32,8,204, +24,54,200,152,50,118,187,221,70,189,126,180,240,219,158,96,166,249,171, +108,48,95,22,127,236,143,173,208,17,255,222,141,175,2,12,0,1,60,177,155, +95,179,104,212,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_1 = 620; +static size_t xml_res_size_1 = 730; static unsigned char xml_res_file_1[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, -0,31,243,255,97,0,0,0,4,103,65,77,65,0,0,175,200,55,5,138,233,0,0,0,25, -116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109, -97,103,101,82,101,97,100,121,113,201,101,60,0,0,1,254,73,68,65,84,24,25, -5,193,61,139,93,85,24,6,208,181,207,236,59,67,130,146,168,96,132,68,68, -3,10,86,1,101,32,241,163,21,127,130,133,104,145,42,66,208,34,165,54,86, -86,34,162,8,99,161,216,10,118,130,98,97,149,34,22,22,193,78,197,66,180, -18,197,12,222,153,123,246,126,31,215,106,135,111,124,247,22,30,195,243, -120,2,247,145,142,38,192,222,210,44,75,147,148,42,255,236,111,252,188,61, -93,223,187,243,241,203,95,118,60,125,116,235,218,117,154,167,46,30,8,82, -177,27,177,91,203,222,210,156,57,88,180,198,241,182,28,159,204,115,191, -254,121,124,229,243,111,126,249,228,240,198,215,231,22,188,32,124,117,231, -95,21,146,184,249,225,15,170,66,107,54,189,89,150,102,55,98,187,150,81, -218,180,244,215,94,186,252,208,153,131,253,143,22,60,18,84,197,58,202,58, -2,214,138,190,199,166,55,85,177,221,149,117,132,196,247,119,239,217,223, -236,217,158,142,253,142,179,163,130,216,238,10,44,173,17,54,125,209,52, -39,107,217,158,70,37,42,84,226,143,191,78,72,90,39,125,38,18,78,71,192, -219,175,95,177,233,139,190,176,206,248,239,180,140,42,85,68,164,202,58, -166,164,116,180,154,72,188,251,217,143,90,107,150,198,166,47,26,70,197, -24,37,0,56,127,254,65,235,216,35,209,133,74,169,154,30,190,112,145,70,19, -2,81,161,170,36,81,137,170,162,53,235,58,72,233,48,39,9,208,18,160,81,69, -18,68,130,68,75,36,101,93,155,164,116,24,179,16,16,209,52,18,73,164,74, -68,18,85,83,42,162,156,174,33,165,19,179,66,120,231,149,75,0,0,0,0,224, -214,209,79,198,136,164,244,165,53,179,136,72,248,224,246,117,0,0,0,112, -243,234,145,57,135,221,8,137,174,81,21,13,112,237,210,171,0,0,0,0,106,150, -185,6,165,39,201,172,52,2,110,255,254,5,0,0,0,120,246,209,23,205,57,173, -51,146,164,87,252,182,27,245,248,51,151,207,106,141,55,159,251,20,0,0,0, -192,133,251,203,156,129,191,219,225,141,111,223,79,242,36,185,42,121,128, -146,132,148,164,72,73,138,20,137,36,72,200,61,109,185,251,63,33,124,110, -139,109,16,176,162,0,0,0,0,73,69,78,68,174,66,96,130}; +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,2,124,73,68,65,84,120,218,140,83,77,72,85,65,24,61,115,239,220,247, +158,247,169,207,22,146,253,27,214,162,218,219,198,22,45,42,105,23,180,9, +139,8,162,104,227,182,34,37,242,137,216,162,149,127,139,22,134,36,182,80, +116,19,22,190,130,16,194,140,22,45,130,90,244,71,100,17,6,37,153,250,222, +157,59,157,111,238,141,90,132,116,185,115,103,238,204,57,223,249,190,51, +51,170,161,107,186,35,178,40,86,76,140,40,6,248,174,251,120,108,154,159, +192,247,160,21,58,81,127,109,218,62,91,180,118,246,83,100,255,247,17,172, +112,132,171,141,181,208,212,61,48,252,6,246,242,110,188,90,88,162,134,130, +229,215,198,49,136,135,231,121,238,159,19,216,179,181,206,97,159,159,107, +130,112,37,35,44,27,5,204,12,185,20,71,250,123,49,50,208,139,249,210,20, +158,148,38,81,21,102,113,171,175,7,79,31,76,113,110,50,169,99,102,48,225, +72,57,138,253,207,114,12,221,184,23,101,250,208,222,209,77,85,133,56,54, +46,19,202,162,253,74,55,98,167,102,177,90,49,14,43,28,225,122,138,185,253, +88,139,208,176,255,16,137,49,250,138,29,152,25,191,141,128,14,245,247,116, +226,225,228,29,148,38,70,145,241,225,230,173,53,196,30,118,28,225,106,73, +99,133,246,231,57,202,178,93,42,22,221,110,72,237,23,187,138,46,77,81,151, +224,199,78,158,66,46,0,242,126,194,113,37,72,150,107,252,41,4,10,247,222, +174,160,117,103,72,75,173,51,45,177,242,207,6,138,97,130,41,100,148,227, +8,87,75,149,101,30,132,2,229,175,207,125,199,213,217,111,88,51,169,106, +74,21,140,199,130,179,84,14,41,36,88,225,40,164,37,208,15,84,51,106,217, +120,56,219,164,208,214,188,233,47,101,155,54,133,209,249,207,24,251,96, +145,241,148,227,36,187,144,6,168,146,227,69,96,91,115,61,94,190,255,10, +95,7,78,186,82,137,16,27,227,220,150,181,137,143,139,196,38,1,84,122,50, +81,161,65,57,166,150,97,62,17,243,223,178,113,3,134,111,14,226,252,233, +19,216,198,113,192,5,173,53,162,85,67,140,114,88,225,224,119,9,177,245, +144,15,52,245,121,31,140,69,77,232,97,238,241,44,142,180,30,69,77,78,8, +190,108,139,91,11,57,206,7,158,227,184,0,98,142,246,125,212,133,1,116,133, +7,202,75,22,178,188,44,97,214,197,103,159,113,59,226,115,77,112,213,12, +32,28,199,141,190,188,27,186,113,23,23,162,216,98,169,108,112,166,118,23, +86,120,18,183,239,104,60,222,62,246,8,45,45,7,199,151,233,131,4,168,37, +113,224,254,107,212,242,84,81,25,194,21,31,196,242,205,255,184,185,47,210, +126,223,58,183,123,225,151,0,3,0,201,66,64,174,55,176,170,129,0,0,0,0,73, +69,78,68,174,66,96,130}; -static size_t xml_res_size_2 = 673; +static size_t xml_res_size_2 = 835; static unsigned char xml_res_file_2[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, -0,31,243,255,97,0,0,0,4,103,65,77,65,0,0,175,200,55,5,138,233,0,0,0,25, -116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109, -97,103,101,82,101,97,100,121,113,201,101,60,0,0,2,51,73,68,65,84,56,203, -133,147,91,110,218,80,16,134,179,129,172,160,27,137,212,141,116,71,221, -0,50,74,251,210,42,137,4,129,230,129,72,17,133,92,154,128,66,67,49,96,32, -52,220,66,76,205,197,177,9,190,128,1,131,253,119,142,129,134,164,84,69, -250,176,229,153,249,207,156,185,108,1,216,90,231,221,251,232,91,194,71, -100,9,133,24,16,21,194,207,108,175,253,215,3,183,9,142,176,191,242,34,74, -45,29,77,117,138,182,57,131,212,31,34,158,109,129,217,150,62,219,47,4,150, -193,209,131,139,10,230,142,11,73,7,142,210,6,190,20,12,124,239,79,49,38, -39,135,96,54,230,195,124,87,34,43,1,142,25,52,27,222,207,36,239,189,75, -13,159,174,159,32,104,14,92,250,70,15,232,206,194,190,20,225,60,1,122,217, -33,28,177,111,99,47,165,162,170,46,156,78,248,49,252,103,42,234,67,120, -25,244,232,207,164,231,148,225,186,76,192,97,177,222,233,49,186,223,73, -65,199,199,75,5,187,23,10,138,18,80,235,1,169,170,73,215,153,160,63,1,100, -18,208,41,149,193,28,48,136,216,162,38,28,19,200,11,162,134,207,201,71, -18,144,225,255,38,35,146,213,113,152,168,51,135,46,35,156,108,192,164,160, -54,101,83,125,2,132,246,28,130,168,51,123,158,9,168,183,210,136,78,150, -177,75,193,31,72,228,166,97,50,99,135,120,179,164,83,233,77,16,161,162, -134,50,154,71,81,178,152,143,250,71,192,127,46,131,59,237,193,119,218,69, -250,254,111,129,226,47,11,33,94,199,254,205,128,232,163,176,38,144,207, -63,12,192,157,119,189,224,32,169,87,85,23,44,237,213,21,14,19,13,36,27, -44,131,33,142,75,22,162,229,17,114,205,231,43,120,69,188,190,31,67,144, -129,150,5,52,12,66,3,42,143,19,148,58,19,164,154,51,132,114,35,236,211, -108,4,50,38,18,36,182,94,68,175,141,54,181,70,166,30,221,13,0,190,11,92, -137,64,188,62,199,241,237,20,225,188,133,0,111,225,224,135,137,32,111,146, -176,253,220,198,245,65,82,168,93,130,2,36,40,56,86,115,17,41,207,16,22, -198,8,102,23,193,1,222,64,90,180,95,14,210,235,81,150,12,23,57,202,32,94, -155,35,82,92,156,126,36,208,46,220,89,248,41,219,155,71,121,211,50,101, -31,116,148,187,83,175,6,25,42,8,251,246,207,101,250,207,58,43,203,119,223, -166,117,254,13,152,46,30,143,29,240,166,162,0,0,0,0,73,69,78,68,174,66, -96,130}; +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,2,229,73,68,65,84,120,218,100,83,75,76,19,81,20,61,211,118,166,157, +150,22,176,5,1,229,35,82,36,4,99,162,6,18,34,113,39,46,80,227,70,73,220, +201,202,128,184,209,24,119,46,220,104,76,36,4,226,74,55,224,130,141,66, +130,49,16,73,52,98,68,148,40,66,212,128,168,20,249,10,165,244,199,48,191, +231,157,153,242,81,95,114,38,147,247,238,57,247,220,251,238,227,240,207, +106,125,250,185,93,211,217,69,198,224,98,169,61,14,144,236,54,238,225,149, +186,242,198,157,177,140,130,184,45,98,239,248,9,69,99,125,135,131,57,40, +47,244,35,224,230,16,213,128,12,59,16,223,96,24,15,173,96,240,203,2,156, +54,174,182,249,84,69,255,95,2,173,189,99,23,108,28,215,121,186,186,20,170, +192,99,62,1,232,58,224,225,1,55,161,212,107,186,192,106,82,197,163,23,19, +6,177,182,185,174,162,223,16,176,25,2,138,162,117,214,86,29,192,188,198, +99,54,14,184,104,55,91,36,184,128,28,151,69,150,146,26,212,152,142,186, +35,251,33,171,106,223,166,115,71,75,207,135,246,242,226,92,36,236,14,56, +40,107,186,19,200,243,0,94,199,118,173,242,134,142,233,80,18,203,97,25, +254,128,136,163,193,92,220,35,30,29,53,58,84,85,107,40,200,11,128,217,45, +187,89,148,89,36,7,207,70,102,176,16,78,162,40,224,67,85,73,54,92,110,59, +50,152,0,191,223,129,116,33,11,195,95,102,26,76,1,6,221,233,243,216,192, +147,79,183,205,34,15,140,45,226,253,143,136,28,93,158,123,242,43,154,119, +86,222,224,132,218,170,221,88,161,174,166,251,28,224,204,206,233,78,227, +107,211,53,134,108,250,13,8,36,144,178,253,157,172,38,86,23,30,220,189, +116,242,154,28,11,63,94,210,233,58,136,101,144,169,74,208,165,192,43,58, +173,30,48,166,195,158,170,53,186,166,192,151,230,192,62,143,7,82,240,96, +195,253,87,139,170,162,234,245,133,89,110,243,156,46,1,235,4,141,8,177, +68,194,18,224,160,203,73,73,21,164,4,195,236,92,18,62,47,143,234,50,47, +124,75,138,48,17,81,47,23,237,226,113,172,72,52,201,225,13,202,78,22,98, +113,29,6,207,20,136,173,46,117,191,30,157,61,151,197,103,66,82,85,240,162, +29,54,193,142,202,98,30,149,155,206,40,116,126,157,178,235,150,253,159, +211,11,136,134,127,119,167,166,20,5,119,186,6,167,143,151,150,33,63,207, +139,52,114,32,186,104,10,21,32,161,88,150,105,4,204,204,18,145,215,226, +10,38,135,223,226,106,125,77,33,13,82,200,24,164,208,167,55,207,155,6,167, +190,66,16,25,53,135,51,27,181,66,118,35,138,133,53,213,194,50,89,153,26, +121,135,209,161,129,38,131,103,150,96,124,58,91,110,118,128,212,101,89, +105,171,57,84,130,189,249,123,16,103,156,105,217,64,52,201,16,153,159,197, +106,232,27,62,14,189,108,234,48,226,183,31,218,214,242,17,130,55,218,186, +174,251,50,3,103,232,64,112,137,46,200,146,100,4,201,107,225,229,158,91, +77,231,111,83,204,164,209,150,255,94,227,142,85,64,240,27,51,178,99,207, +172,106,211,246,206,231,252,71,128,1,0,112,7,72,225,52,89,175,48,0,0,0, +0,73,69,78,68,174,66,96,130}; static size_t xml_res_size_3 = 758; static unsigned char xml_res_file_3[] = { @@ -274,8 +293,1162 @@ static unsigned char xml_res_file_6[] = { 37,149,61,177,48,254,5,68,165,141,10,108,236,250,76,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_7 = 60429; +static size_t xml_res_size_7 = 1852; static unsigned char xml_res_file_7[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,6,222,73,68,65,84,120,218,188,87,107,136,85,85,20,254,246,62,231, +222,59,247,206,181,113,108,212,73,51,51,130,140,32,170,31,61,200,136,222, +132,40,169,101,69,66,101,15,122,64,74,15,169,8,42,168,176,172,44,168,164, +232,97,86,72,143,49,205,158,248,39,66,255,20,84,100,165,65,145,164,53,154, +81,206,204,109,230,156,123,206,61,167,111,173,125,212,123,207,204,144,70, +117,240,56,107,159,253,250,246,183,190,181,246,186,6,128,191,230,206,147, +214,90,196,51,145,166,108,202,251,95,62,134,255,12,18,248,239,205,93,250, +249,69,62,191,148,109,26,205,60,241,178,165,72,147,6,251,140,27,164,111, +54,126,132,101,82,252,19,172,169,78,49,198,226,139,215,239,154,41,123,11, +128,54,68,53,212,251,127,193,150,13,43,0,235,195,216,34,71,121,186,179, +103,129,130,117,211,19,206,182,25,154,40,113,109,89,49,109,61,223,190,246, +48,155,12,39,60,228,177,231,222,200,70,34,159,219,4,128,233,190,226,93, +108,217,253,43,112,198,114,76,232,158,130,223,215,95,201,157,139,4,98,80, +34,142,37,235,138,194,26,158,152,23,98,113,79,73,61,245,232,156,58,23,115, +27,196,13,89,60,129,37,177,150,136,19,93,155,182,109,181,27,137,65,20,69, +14,150,50,205,45,228,255,193,218,239,216,246,195,86,108,251,126,43,134, +6,251,224,179,211,231,66,190,245,200,128,65,165,189,202,183,29,150,243, +42,149,118,181,125,206,191,253,157,118,125,11,30,199,179,115,207,113,247, +226,214,55,13,121,77,208,151,183,223,178,40,249,92,211,227,137,210,198, +62,198,132,1,196,245,24,29,29,157,180,44,162,48,230,32,46,88,112,92,199, +113,130,123,207,236,229,73,98,244,15,0,247,204,24,212,239,181,26,176,244, +252,65,158,216,67,163,81,128,103,82,68,65,13,69,63,165,203,82,196,121,219, +75,245,48,150,135,75,243,0,18,175,132,142,113,19,148,144,196,248,40,149, +124,44,90,227,57,170,103,199,56,235,206,183,57,42,24,69,88,109,248,232, +161,121,40,148,44,194,48,32,213,6,30,65,141,102,147,84,100,126,217,15,96, +251,170,153,152,126,246,117,216,241,213,251,24,162,239,15,153,212,133,246, +234,24,245,43,82,30,21,60,58,23,129,231,187,87,158,70,236,222,98,164,227, +12,69,27,6,117,61,33,221,141,32,111,211,144,8,211,40,203,51,112,194,162, +77,216,185,179,23,213,115,47,68,247,225,71,34,218,112,61,150,207,174,81, +168,41,250,6,140,219,136,19,223,184,123,46,252,82,155,115,13,1,205,127, +224,77,237,147,141,60,178,23,214,3,221,200,35,237,245,156,109,116,140,115, +129,65,14,64,56,212,135,111,190,222,172,155,140,59,180,139,19,83,92,187, +218,215,168,93,62,203,138,16,84,185,157,227,186,80,108,171,232,196,122, +48,232,66,169,145,50,98,185,48,223,48,116,39,181,244,119,56,148,179,9,80, +198,73,100,49,28,90,1,68,245,8,237,149,146,106,64,194,164,66,32,43,23,36, +144,97,253,253,156,64,1,74,208,143,169,150,233,235,178,203,3,20,152,2,179, +217,201,184,89,56,20,104,146,241,76,162,126,111,177,51,1,10,144,84,25,48, +251,1,52,152,28,202,229,178,70,65,220,136,53,4,23,174,138,52,209,60,117, +137,231,0,48,216,43,20,167,231,187,137,5,153,26,215,169,9,79,253,111,69, +3,245,186,138,205,216,17,108,97,128,175,117,25,169,149,129,6,41,41,209, +183,41,1,52,24,118,18,134,149,114,73,147,76,193,11,50,0,33,142,191,248, +46,151,33,53,171,242,20,49,251,76,73,147,143,199,183,78,23,24,2,242,188, +132,126,15,135,217,34,72,25,155,101,193,166,48,76,13,218,202,21,110,104, +244,212,2,196,43,180,185,52,234,197,122,202,125,234,55,217,100,81,51,211, +54,209,194,247,125,231,130,48,212,147,202,70,46,34,154,108,97,195,100,9, +48,31,5,182,88,65,91,181,160,0,36,5,167,60,229,138,249,177,250,105,48,44, +162,231,145,219,24,186,137,10,145,228,144,21,232,194,210,47,9,120,210,248, +14,197,88,207,104,151,136,200,219,78,15,34,25,134,108,30,192,79,175,205, +199,49,167,205,70,255,207,155,17,51,17,217,73,157,184,236,133,72,7,172, +188,170,132,35,216,150,139,196,232,230,6,87,190,20,42,8,1,16,113,173,85, +11,61,141,28,137,2,35,241,78,218,131,156,237,244,0,141,4,168,188,155,68, +56,177,107,44,166,76,158,136,33,179,75,145,210,35,120,235,6,95,55,29,12, +24,13,84,251,94,6,164,111,229,2,104,90,117,23,44,179,39,67,81,194,80,124, +173,57,129,27,71,57,219,9,48,213,136,113,215,104,19,3,178,136,228,236,57, +207,13,168,47,123,110,238,192,197,207,244,113,211,20,47,47,44,227,148,171, +239,151,88,109,45,0,76,166,3,186,236,179,151,239,99,179,160,39,133,170, +61,29,102,187,44,232,106,129,97,137,72,65,48,20,229,150,219,91,144,136, +40,147,140,118,244,237,160,226,163,150,240,217,39,68,175,64,208,34,10,15, +53,138,45,74,172,18,92,11,162,97,182,176,103,108,50,92,132,178,110,196, +240,123,126,129,175,64,6,254,12,240,236,165,174,126,169,179,242,232,89, +177,172,37,116,154,105,144,240,154,54,185,11,49,239,250,37,51,246,104,156, +7,113,21,119,204,248,67,71,4,241,24,44,57,99,143,178,222,72,218,29,232, +116,152,11,160,149,74,200,100,115,194,229,247,184,211,238,165,155,127,78, +26,173,246,146,197,252,34,190,92,253,160,14,60,124,124,69,197,40,39,156, +220,85,209,80,145,156,114,68,247,33,168,199,188,150,69,43,34,70,242,146, +230,93,32,16,153,40,73,247,207,25,221,73,174,208,26,13,64,65,197,38,26, +218,232,93,129,237,219,190,215,174,169,211,142,198,57,118,53,102,63,177, +91,195,123,205,45,227,179,91,152,26,200,39,162,236,126,213,251,122,253, +139,79,114,239,88,35,224,111,235,91,17,22,147,209,81,147,15,149,124,132, +95,123,119,224,227,13,31,104,223,133,179,230,192,159,98,80,29,83,85,0,122, +11,90,151,199,82,140,0,64,228,34,7,154,181,248,97,98,25,65,112,163,49,64, +17,126,219,179,76,75,173,93,187,118,177,100,115,151,149,216,102,170,135, +158,155,164,174,48,8,162,84,43,36,185,8,61,164,35,48,160,138,207,92,112, +144,0,132,137,148,115,183,237,216,137,134,117,119,200,143,219,123,145,158, +108,113,206,195,187,181,253,225,109,227,113,222,178,221,252,59,97,248,93, +160,106,38,55,30,67,233,163,87,159,86,65,30,40,0,9,193,35,89,65,53,56,229, +246,83,123,181,0,145,185,113,50,196,248,239,192,187,139,198,105,197,20, +6,33,62,88,220,169,185,197,51,185,235,88,215,18,84,156,124,193,77,15,186, +10,232,32,24,248,110,237,99,220,48,193,233,215,220,183,127,174,172,79,125, +108,237,121,4,211,231,45,129,34,228,133,246,221,186,199,81,72,70,212,0, +180,12,199,64,175,91,228,128,126,246,24,93,84,42,99,125,250,126,105,154, +235,110,75,77,82,125,92,83,88,149,235,153,109,219,180,130,239,126,29,100, +101,120,90,198,198,181,175,224,192,127,35,186,251,117,106,247,88,109,181, +206,205,250,38,118,96,227,186,236,187,180,15,235,212,189,140,53,205,153, +208,212,62,221,244,73,85,138,80,99,14,254,231,230,111,63,237,247,200,72, +125,205,223,181,109,141,238,185,55,195,8,252,105,124,59,71,207,56,255,250, +35,20,73,174,254,209,104,121,7,48,73,163,136,255,247,145,235,245,207,191, +4,24,0,228,101,43,215,5,253,61,104,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_8 = 1017; +static unsigned char xml_res_file_8[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,3,155,73,68,65,84,120,218,108,83,107,76,28,85,24,61,51,204,192,62,200, +178,180,74,106,85,144,46,143,74,74,85,88,16,180,11,110,155,216,248,10,54, +45,93,72,140,105,13,49,77,68,34,36,45,2,41,181,42,225,33,5,234,143,254, +177,63,76,127,216,198,96,218,106,104,4,45,162,18,90,202,110,154,150,165, +181,117,97,215,2,93,118,102,217,7,236,123,102,118,188,67,72,252,227,73, +78,230,206,157,123,190,239,220,243,101,168,190,254,65,136,162,8,5,130,32, +32,22,143,127,89,110,44,237,96,24,6,118,187,29,222,213,213,31,95,42,41, +105,39,103,70,213,106,245,211,233,26,45,2,235,107,144,68,113,150,162,168, +3,140,34,148,101,121,131,130,32,94,170,124,185,220,242,246,91,111,162,171, +187,219,125,109,100,228,227,18,163,81,78,75,77,181,151,149,150,32,235,137, +39,33,72,34,34,225,8,28,142,249,226,71,203,75,142,141,2,201,100,18,146, +36,125,95,188,123,87,109,117,149,9,63,92,190,140,147,29,237,251,201,167, +191,223,63,114,212,187,179,176,0,52,69,99,226,207,73,132,195,97,132,194, +33,128,162,72,211,36,24,69,156,157,157,13,142,227,106,205,166,61,112,204, +47,160,48,191,0,173,109,29,45,26,141,246,104,52,26,213,234,116,58,220,191, +255,23,180,106,21,92,255,184,208,220,212,104,196,38,24,98,253,138,32,138, +53,150,195,7,49,247,224,33,182,232,245,120,236,118,43,174,142,16,87,107, +241,88,108,163,83,70,70,6,104,154,70,34,145,64,79,223,25,155,36,10,160, +200,59,77,46,80,179,183,186,10,179,246,123,74,24,184,117,107,6,163,99,163, +104,249,164,9,69,69,69,77,49,82,32,22,75,128,37,161,42,182,205,38,147,18, +186,44,41,161,17,69,74,69,229,43,85,235,161,72,110,102,166,30,1,191,15, +103,7,7,222,73,79,99,181,105,108,202,206,170,87,43,96,187,125,7,121,121, +6,50,157,4,52,42,21,114,178,159,65,69,121,25,12,134,92,204,88,109,65,138, +84,217,209,222,209,249,141,70,173,218,27,13,5,199,187,122,122,223,32,123, +79,25,142,159,183,165,179,236,214,241,70,51,22,22,221,120,224,88,128,213, +58,131,156,237,219,176,22,12,34,24,10,91,7,134,134,26,208,223,63,160,100, +177,131,176,84,121,234,186,38,160,59,253,243,133,67,195,243,242,141,128, +44,127,113,221,41,255,58,242,147,124,170,179,83,62,209,210,124,113,243, +156,194,130,158,207,78,130,58,119,166,15,52,153,109,171,184,135,36,42,66, +18,226,223,213,151,61,95,255,65,101,14,206,78,241,88,137,83,240,90,175, +98,244,152,25,211,55,167,197,11,172,241,219,95,238,58,245,44,203,214,42, +33,50,157,241,114,146,100,18,106,57,1,65,20,46,190,190,43,175,78,17,127, +61,229,129,63,46,195,195,251,201,68,224,187,125,99,82,180,101,84,100,181, +154,242,27,168,36,141,223,230,30,94,74,101,216,58,90,5,1,44,233,44,75,194, +240,11,207,110,171,59,177,47,15,195,247,252,240,197,146,88,226,125,240, +56,239,92,155,235,109,48,91,108,169,147,147,235,122,244,143,115,104,219, +111,192,107,249,57,22,81,18,135,233,44,157,6,10,183,166,107,14,14,29,122, +145,116,230,96,95,137,99,209,27,192,162,115,110,140,235,173,111,220,222, +125,253,46,9,89,203,249,56,248,163,18,190,154,240,224,212,187,69,27,26, +154,216,83,44,18,80,56,55,237,71,48,33,227,17,207,97,201,101,31,243,245, +30,62,214,247,105,179,51,73,165,192,253,249,129,143,188,174,217,177,101, +47,135,64,76,198,224,31,62,200,68,147,194,154,234,16,37,127,97,196,207, +155,31,7,35,207,121,86,121,4,60,174,113,190,199,242,97,87,219,113,34,166, +113,83,85,136,45,251,222,243,47,159,174,153,98,118,87,23,7,19,241,220,69, +158,199,154,119,229,119,10,255,193,64,168,223,92,251,9,23,240,255,80,70, +158,185,185,14,252,43,192,0,141,58,185,202,150,159,74,140,0,0,0,0,73,69, +78,68,174,66,96,130}; + +static size_t xml_res_size_9 = 1751; +static unsigned char xml_res_file_9[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,6,121,73,68,65,84,120,218,180,87,91,136,85,85,24,254,215,90,123, +239,115,206,92,116,116,38,157,48,47,35,90,80,129,89,116,33,51,74,165,34, +6,52,20,231,33,240,33,80,8,133,30,213,232,74,15,225,99,161,4,69,15,9,65, +23,203,140,30,122,200,64,208,138,233,98,150,24,42,90,94,162,209,156,25, +103,206,204,156,115,246,109,245,253,107,175,125,206,222,211,25,60,15,181, +14,63,251,236,117,251,191,245,255,223,255,255,107,11,74,154,243,234,190, +15,15,72,229,172,215,90,211,255,217,132,16,20,71,225,161,151,183,15,108, +194,107,40,88,249,139,111,188,127,80,72,167,127,197,138,229,20,51,128,255, +11,3,180,73,0,56,113,226,44,233,56,252,226,181,231,158,126,202,65,119,137, +148,211,191,107,251,102,138,211,137,186,233,218,186,76,111,26,157,241,204, +58,115,107,120,235,199,87,175,164,61,251,62,234,103,221,12,160,24,71,177, +217,96,235,243,111,153,73,137,21,120,168,13,82,32,137,101,5,242,129,116, +138,28,10,217,104,232,41,226,233,65,185,160,192,13,104,170,84,161,192,9, +208,111,182,36,129,245,18,187,122,88,231,106,159,164,134,14,40,241,107, +130,222,124,233,89,252,55,144,139,60,91,104,44,11,35,108,231,57,244,238, +43,91,41,136,24,4,143,63,4,159,29,35,23,255,142,210,195,244,168,56,98,182, +47,64,92,218,128,255,63,144,35,75,84,131,146,145,133,23,40,154,67,20,1, +151,116,239,38,225,118,193,176,130,222,115,183,65,158,161,118,108,18,3, +123,223,234,119,8,231,37,203,53,225,24,179,224,37,8,53,22,40,242,49,169, +234,91,0,162,0,243,181,225,28,34,81,139,71,135,57,55,108,32,60,128,232, +32,165,74,164,221,73,51,92,129,193,98,70,231,97,157,219,142,227,225,212, +174,36,23,90,92,69,198,118,133,130,194,1,67,86,154,176,191,1,32,162,2,102, +177,98,118,65,204,142,133,8,99,72,153,98,229,127,164,120,161,86,88,236, +130,84,108,106,215,116,198,152,18,179,185,148,34,161,48,19,34,164,224,215, +122,43,120,0,0,19,167,209,38,19,102,104,211,233,186,78,26,43,211,152,132, +29,132,52,118,144,117,97,104,248,161,95,113,143,204,14,202,186,48,128,236, +118,172,35,8,67,210,148,1,192,104,124,116,186,142,99,24,157,227,172,81, +172,140,58,202,1,144,38,164,164,129,34,76,167,200,1,80,117,0,217,208,98, +29,126,24,215,45,224,52,0,196,13,11,104,202,88,34,221,89,24,211,11,145, +181,128,74,237,208,240,141,25,132,77,160,88,243,233,101,222,154,198,2,193, +116,14,144,54,157,6,128,206,4,48,9,123,114,97,50,152,152,110,1,134,33,44, +0,101,215,240,160,163,12,8,33,99,195,5,193,134,180,137,130,35,205,184,32, +11,192,112,0,157,94,157,3,169,21,68,114,100,145,170,204,0,16,202,192,83, +134,1,42,217,201,77,66,68,184,46,107,66,56,34,178,48,207,197,22,30,3,136, +56,10,0,32,106,226,130,192,184,64,82,190,20,228,207,204,135,84,34,57,172, +50,220,119,17,142,78,194,129,9,68,64,0,193,160,30,27,36,25,118,80,36,125, +58,89,189,151,62,27,177,233,18,227,253,91,101,46,10,26,0,208,233,57,174, +209,217,160,128,74,34,192,18,141,149,59,214,56,19,52,73,99,250,34,77,196, +62,226,251,42,209,105,28,176,4,97,43,208,53,76,98,166,87,40,18,149,36,115, +177,5,0,160,8,235,248,198,5,212,0,192,113,95,139,216,5,170,73,38,183,236, +2,16,108,69,151,180,177,36,222,135,1,176,140,83,58,141,217,142,37,162,57, +85,178,206,112,72,155,116,107,128,123,94,146,136,226,188,5,40,33,161,231, +228,84,55,78,95,33,95,143,154,76,38,172,27,132,45,51,156,37,117,179,18, +37,40,71,104,157,141,2,63,110,146,9,131,216,48,148,67,152,73,156,112,16, +190,138,203,224,96,100,84,165,7,227,108,41,204,12,196,143,212,117,77,138, +247,141,44,119,209,39,177,111,253,126,17,89,147,115,30,168,54,18,81,61, +10,66,84,138,246,146,162,118,213,48,99,140,234,23,83,213,76,18,230,252, +105,127,186,99,144,171,221,179,38,237,56,120,160,149,15,64,62,69,126,148, +73,68,194,228,235,127,39,34,252,34,132,70,215,108,55,151,54,239,184,111, +45,117,247,44,166,8,12,94,57,188,140,244,96,99,236,133,7,214,210,169,238, +37,80,162,192,183,113,227,227,180,173,25,216,76,65,97,22,69,97,141,182, +109,185,147,244,19,141,177,67,131,14,85,107,97,179,76,24,26,23,100,155, +82,21,212,147,49,227,231,80,130,7,246,204,92,13,71,49,54,162,174,35,16, +81,148,162,169,252,186,145,9,84,197,8,0,2,170,141,84,97,67,84,194,72,112, +109,50,42,253,160,41,0,248,12,87,142,225,234,53,36,49,166,172,130,85,118, +163,118,187,73,4,201,128,46,169,17,132,85,68,10,99,187,162,157,228,98,12, +201,142,100,132,190,43,35,230,25,163,244,69,7,62,78,158,32,139,31,248,116, +249,175,97,240,38,6,121,5,220,92,164,161,225,241,60,9,57,205,242,235,79, +191,13,67,254,206,148,3,244,219,234,196,110,210,66,215,125,41,116,18,7, +41,5,132,185,69,105,147,57,181,176,25,84,219,117,118,140,245,40,176,188, +88,240,234,21,215,228,149,169,242,216,177,159,191,251,118,149,142,227,230, +87,66,109,57,155,62,51,253,211,203,183,176,239,162,73,89,79,223,4,64,84, +38,198,143,217,252,72,157,144,69,144,158,122,84,204,220,228,150,29,187, +215,47,233,91,190,177,216,57,167,55,59,80,45,143,14,253,241,251,217,79, +246,239,125,253,16,205,124,71,77,91,152,164,75,186,40,172,210,146,185,73, +54,191,244,26,208,107,250,7,22,61,242,228,198,193,9,228,139,123,238,186, +149,206,195,175,217,76,179,244,230,110,58,126,226,12,181,57,146,142,124, +249,233,253,135,63,255,224,2,205,124,193,231,126,230,102,197,177,104,202, +86,102,106,133,85,143,109,24,210,133,34,114,121,76,157,179,58,104,221,130, +121,117,38,179,111,175,150,167,200,3,193,52,204,251,224,186,245,223,0,64, +59,134,106,55,250,84,112,90,252,164,104,11,16,82,203,22,206,167,242,100, +133,206,158,187,76,103,166,125,65,49,136,121,61,93,52,167,179,131,126,253, +229,148,178,119,250,255,12,128,27,162,94,247,205,159,43,145,75,105,116, +124,146,42,190,159,227,96,9,245,191,103,118,7,133,65,64,199,185,182,39, +183,131,27,54,213,34,0,175,60,62,250,253,148,156,53,224,224,138,117,91, +223,2,186,125,233,45,180,184,119,46,164,155,22,245,246,96,163,152,78,158, +62,79,95,31,253,145,14,31,220,191,233,234,159,23,206,89,63,223,232,107, +173,165,198,21,125,62,71,203,166,109,59,119,116,245,244,174,115,92,183, +59,107,2,156,124,248,250,181,161,175,14,188,189,103,47,179,27,114,165,21, +23,180,10,64,216,12,220,5,185,9,50,219,130,202,94,121,89,217,24,132,51, +217,117,136,79,45,124,230,182,10,32,235,178,162,85,238,52,137,237,154,53, +123,212,234,134,255,8,48,0,163,88,200,134,33,243,7,106,0,0,0,0,73,69,78, +68,174,66,96,130}; + +static size_t xml_res_size_10 = 1855; +static unsigned char xml_res_file_10[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,6,225,73,68,65,84,120,218,196,87,123,80,84,85,24,255,238,115,31, +160,41,169,37,175,196,16,28,21,75,108,20,21,195,200,124,128,111,39,49,205, +7,154,38,249,154,177,153,242,143,254,232,53,163,142,53,227,24,67,89,227, +148,96,36,166,228,35,95,164,136,104,68,89,249,2,53,65,65,212,69,151,213, +117,217,221,123,239,62,238,189,125,231,238,93,220,20,84,172,198,157,249, +102,239,185,247,156,243,253,206,247,251,94,135,82,85,21,30,231,143,250, +151,235,185,241,175,229,92,197,255,110,12,195,216,119,108,206,125,10,159, +125,237,217,128,121,84,224,47,101,78,143,75,30,146,110,27,147,145,17,54, +120,200,16,56,117,226,132,41,50,246,217,163,245,53,213,117,237,217,136, +126,4,229,244,152,169,243,102,71,197,198,93,202,156,56,17,142,149,151,131, +44,203,160,42,10,72,130,139,107,239,158,108,59,149,51,25,211,22,108,141, +239,149,48,165,95,82,18,148,150,148,128,71,146,208,30,1,38,21,69,161,117, +0,242,255,1,128,203,156,182,240,242,144,212,212,238,70,163,17,126,173,172, +4,142,227,128,161,67,15,220,170,67,115,230,101,165,215,17,221,53,33,119, +228,192,187,125,132,126,40,190,51,178,226,38,207,90,234,205,156,48,161, +59,58,27,212,92,184,160,41,55,153,205,96,68,1,140,36,181,109,143,230,132, +245,233,131,128,162,227,17,136,131,140,219,3,128,30,61,37,123,86,247,152, +30,26,223,54,155,13,44,22,11,24,77,38,77,120,131,1,12,104,141,214,66,153, +75,91,222,17,21,90,77,11,126,200,198,161,71,248,44,125,56,248,164,75,230, +197,7,246,135,90,254,126,0,152,177,175,190,81,212,43,177,247,166,87,70, +143,134,134,250,122,112,58,157,96,34,202,81,169,1,149,27,117,105,13,128, +98,57,101,80,221,183,126,164,76,157,114,205,57,123,215,224,171,27,194,231, +25,51,129,225,134,153,230,22,78,15,234,38,72,216,171,27,83,118,240,148, +63,147,5,63,92,176,135,195,59,71,147,192,196,248,33,101,232,80,136,138, +142,134,250,186,58,77,9,81,126,143,34,244,126,85,231,159,82,149,22,36,114, +77,153,40,214,148,173,226,82,23,149,114,201,89,5,166,236,162,74,241,235, +172,98,127,245,190,121,108,223,140,111,113,202,118,20,145,0,48,113,224, +207,236,154,93,136,123,200,48,152,146,97,122,172,3,76,172,31,68,193,5,215, +209,228,132,111,138,106,157,97,2,140,8,165,146,35,41,154,207,240,243,183, +15,98,195,58,239,146,47,28,30,231,217,255,81,37,221,241,233,101,76,124, +218,122,252,182,217,123,104,109,37,219,103,172,100,156,181,105,154,84,48, +167,128,152,1,73,196,133,126,23,216,74,94,7,225,240,108,104,178,218,192, +106,181,130,219,237,214,156,140,240,77,184,110,77,200,55,208,40,64,16,1, +91,80,190,109,75,235,193,239,109,98,18,210,143,227,248,150,103,239,251, +251,65,246,93,53,205,223,182,2,199,130,234,188,94,68,133,117,33,190,193, +209,45,206,171,72,96,140,136,2,99,231,72,220,212,172,153,59,200,247,125, +5,231,168,119,232,144,53,163,56,44,94,33,111,204,12,213,43,156,49,231,236, +219,138,239,156,202,141,243,95,80,230,8,2,64,149,175,157,222,75,241,230, +52,114,248,128,19,170,148,6,192,208,169,27,208,157,187,1,75,51,192,178, +40,204,253,133,132,36,153,27,36,199,239,247,41,244,146,35,249,166,37,7, +139,113,104,247,253,178,113,37,112,198,151,53,165,13,191,87,32,143,102, +114,96,185,182,188,90,95,194,135,36,34,9,29,212,136,70,81,192,106,191,9, +102,222,139,156,62,184,82,146,12,16,23,254,76,208,2,172,146,155,182,18, +150,149,145,122,32,249,79,21,159,229,211,150,6,104,249,45,191,150,75,201, +14,56,104,93,133,61,152,99,2,0,52,7,147,192,121,173,6,194,13,42,88,155, +250,67,56,239,3,154,82,31,168,92,65,199,239,25,219,67,99,146,97,208,115, +255,89,105,165,144,20,233,11,121,150,239,74,197,56,87,149,128,229,205,192, +24,85,112,139,2,80,202,195,1,144,101,37,16,33,58,15,244,194,61,239,129, +226,111,210,162,33,125,69,116,112,46,159,254,118,76,107,249,250,14,5,178, +0,124,199,206,232,22,42,112,200,63,143,9,147,0,104,43,252,130,33,40,51, +74,232,145,121,229,203,204,143,69,0,146,120,84,182,247,168,13,170,228,60, +74,62,209,145,73,195,112,129,155,60,27,38,173,29,216,138,5,68,224,194,35, +0,12,50,2,96,129,193,47,12,57,24,2,104,51,7,144,116,41,203,45,3,154,97, +201,196,219,252,196,181,73,108,204,128,82,124,17,45,230,141,233,75,190, +210,79,68,173,80,155,27,183,107,96,58,69,167,130,79,172,214,64,6,236,134, +193,64,232,195,40,0,228,62,101,224,64,116,66,63,8,238,102,184,120,185,1, +129,43,109,128,64,11,224,218,96,42,166,104,154,152,67,84,89,158,198,184, +23,189,63,111,152,68,162,193,48,249,211,254,120,162,24,113,211,204,85,90, +204,133,117,153,163,216,106,191,34,129,163,1,240,3,237,108,218,82,212,129, +65,223,248,203,30,6,133,71,45,152,9,125,48,224,249,254,144,152,152,8,87, +26,27,193,227,241,220,3,130,168,165,21,165,197,136,138,94,90,124,219,151, +87,163,199,141,35,96,12,25,31,68,48,49,201,37,138,237,210,58,28,55,27,167, +174,75,70,48,145,82,81,206,102,226,164,4,128,55,106,94,197,136,119,167, +196,14,243,248,20,181,131,65,165,202,119,148,157,35,91,58,237,19,231,98, +54,156,241,92,114,50,88,111,218,64,148,60,247,148,92,18,5,90,58,38,121, +144,162,41,29,151,147,236,107,90,180,103,53,38,156,28,85,116,148,75,133, +243,243,136,66,58,170,127,177,114,253,220,135,250,28,15,1,64,28,163,126, +77,113,67,147,94,161,20,205,40,72,111,197,161,157,107,154,111,223,60,109, +183,219,87,15,31,49,2,4,73,4,151,219,125,143,35,234,15,161,134,241,50,253, +198,119,64,229,111,42,214,154,92,105,203,194,13,248,206,129,89,241,123, +240,121,234,164,173,111,21,232,0,20,86,143,79,146,24,28,33,0,20,253,185, +185,234,143,99,197,183,154,26,235,93,46,215,38,4,97,232,18,241,36,56,176, +44,7,21,170,161,32,66,126,114,213,110,159,80,181,187,143,62,188,109,94, +252,83,9,58,101,111,236,11,94,208,245,73,161,97,24,76,14,161,189,156,172, +163,244,91,26,46,122,177,229,30,41,184,93,249,169,47,166,197,69,98,137, +118,186,92,90,41,134,182,27,50,140,70,104,36,84,98,19,114,0,25,138,68,229, +41,56,182,145,131,233,135,124,168,182,220,175,111,230,185,120,254,100,137, +76,241,145,72,123,66,207,248,120,80,176,124,211,20,173,85,197,234,51,103, +64,112,53,127,119,237,114,237,69,125,115,114,0,15,177,164,108,57,125,196, +123,232,147,124,93,249,205,208,190,240,97,239,5,178,110,50,233,114,237, +217,227,152,252,110,55,55,187,83,123,37,36,2,139,189,2,41,76,213,85,85, +8,192,17,10,160,37,63,169,206,27,162,110,77,199,221,77,105,123,186,98,178, +240,22,249,255,179,226,224,55,141,87,46,157,20,4,97,203,200,81,163,32,60, +44,12,83,9,77,170,35,211,198,58,223,127,121,53,11,52,49,120,29,67,137,205, +204,90,184,147,166,153,78,152,35,156,187,10,243,72,214,179,180,231,94,240, +168,119,67,178,142,71,233,138,18,137,18,166,155,183,94,247,112,245,255, +6,208,210,125,235,202,57,221,204,238,246,94,78,31,251,239,111,1,6,0,48, +107,244,198,77,151,19,83,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_11 = 869; +static unsigned char xml_res_file_11[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,3,7,73,68,65,84,120,218,236,151,223,75,20,81,20,199,207,157,157, +31,251,83,77,122,176,151,232,7,130,73,245,188,161,137,17,26,5,82,244,22, +81,36,98,136,32,21,253,29,81,17,136,36,98,37,209,147,82,8,69,74,36,166, +228,115,5,9,210,22,61,7,169,59,174,59,59,59,247,118,206,29,119,221,93,117, +118,87,150,246,101,239,114,119,118,239,143,115,62,243,189,231,156,217,101, +66,8,168,102,83,160,202,173,6,80,3,168,58,0,243,152,211,39,94,190,178,228, +34,198,246,101,60,147,226,55,174,95,51,240,146,42,71,1,125,252,249,132, +213,218,218,10,182,237,64,58,205,129,115,81,86,167,61,180,151,108,144,45, +178,89,170,2,250,232,216,184,21,141,70,225,203,215,111,16,14,133,209,160, +3,249,74,236,165,136,200,187,115,69,241,129,185,97,194,233,83,39,97,105, +105,9,250,251,122,119,40,81,104,73,31,25,29,179,58,59,58,224,251,242,178, +28,104,111,59,3,235,235,235,176,182,22,135,100,50,9,137,205,77,79,217,131, +129,0,248,253,126,168,175,143,64,93,93,29,44,44,126,150,227,39,90,90,96, +110,126,30,6,250,251,242,32,114,1,244,225,145,167,86,119,119,23,172,172, +252,216,154,18,104,204,128,3,13,13,16,137,68,64,215,53,48,12,195,19,192, +178,44,72,165,108,136,199,227,240,119,117,21,161,173,172,173,230,230,227, +48,51,51,11,131,3,183,179,16,25,0,253,241,147,97,235,202,229,30,136,253, +252,85,16,72,180,85,184,178,150,250,220,192,163,162,227,146,175,2,141,143, +29,61,2,175,223,76,195,157,161,65,9,65,211,234,131,135,143,166,122,111, +221,236,177,237,116,246,28,119,59,94,81,78,106,177,189,103,53,77,133,241, +103,47,166,239,223,187,123,85,197,145,128,207,167,246,152,102,2,222,190, +123,47,23,8,193,161,210,79,73,169,8,83,228,157,92,186,120,1,200,39,249, +38,0,131,115,142,105,147,150,193,67,110,187,206,159,147,0,172,88,165,40, +169,24,184,202,17,192,236,135,143,210,28,249,34,159,228,155,0,20,250,98, +227,32,5,24,71,199,220,225,48,247,105,1,211,72,169,132,127,233,172,243, +108,59,6,177,14,10,130,216,219,0,10,1,64,70,1,85,85,229,6,51,177,1,145, +112,8,1,88,69,36,160,194,68,54,53,77,43,84,0,178,0,60,237,200,5,36,125, +10,83,39,16,8,238,187,4,239,86,146,201,166,134,55,72,54,201,87,1,0,82,98, +224,81,158,19,177,237,56,16,10,21,1,16,185,149,156,123,10,69,0,100,211, +48,52,169,40,249,34,159,249,10,224,32,41,64,45,22,139,121,58,151,249,45, +84,80,28,183,40,113,159,5,130,165,101,189,240,130,104,108,108,116,215,75, +128,130,35,16,130,242,211,53,216,212,116,168,72,158,51,116,238,207,27,227, +190,164,39,64,166,168,185,87,150,15,64,116,20,128,225,112,208,77,191,98, +71,47,92,5,124,220,5,118,20,82,0,55,177,226,0,164,172,12,118,177,125,4, +194,52,227,139,147,147,83,109,52,88,74,253,97,59,62,137,156,247,162,85, +90,66,36,18,27,139,238,173,0,68,176,31,198,126,48,163,200,127,104,84,243, +255,96,255,205,182,156,6,176,251,43,144,244,229,212,167,36,246,205,106, +255,36,196,176,169,253,53,171,1,84,185,253,19,96,0,249,4,138,17,171,4,193, +66,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_12 = 634; +static unsigned char xml_res_file_12[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,2,28,73,68,65,84,120,218,140,146,205,107,19,65,24,135,159,217,221,144, +108,194,162,104,244,80,177,181,136,32,130,7,169,90,240,82,197,34,86,91, +47,90,68,122,240,31,240,32,166,135,10,122,18,145,106,251,23,136,246,224, +65,76,27,15,106,81,36,82,5,123,144,106,148,94,10,173,45,181,133,32,10,37, +181,77,52,217,143,113,38,9,82,37,196,188,48,187,204,204,251,252,222,175, +17,119,239,141,224,251,1,134,33,80,38,195,225,48,245,172,88,44,234,159, +8,2,137,105,26,88,122,23,4,129,22,145,61,221,167,89,252,178,84,87,96,87, +75,51,79,159,141,75,33,12,161,5,12,13,151,92,87,158,233,233,86,240,178, +22,71,136,218,75,223,105,31,237,171,25,205,90,190,239,39,47,246,93,192, +245,60,246,238,217,77,67,166,196,52,243,48,57,154,180,60,207,235,93,93, +91,231,249,139,151,213,91,249,63,186,252,237,58,121,2,205,234,12,40,150, +138,216,81,155,206,99,71,21,47,171,62,226,31,76,84,191,130,244,196,107, +93,2,129,95,41,1,183,228,18,181,35,120,234,112,42,243,241,79,189,149,108, +53,98,98,138,48,66,134,56,220,214,198,166,216,118,112,67,200,64,160,74, +240,209,34,145,136,77,110,109,149,120,124,107,85,160,18,87,245,154,144, +112,72,103,175,146,89,121,194,253,113,117,106,64,71,248,60,120,93,149,12, +116,55,99,177,40,179,179,159,55,192,58,186,158,115,148,169,31,215,200,57, +105,78,29,129,246,29,9,222,101,135,153,158,123,68,200,254,134,165,97,211, +178,112,28,167,188,254,110,182,138,142,195,131,76,154,227,205,176,94,128, +253,91,134,120,53,55,204,62,181,127,155,155,192,202,231,243,111,82,169, +199,29,82,202,26,253,86,181,7,14,102,11,28,106,234,231,96,211,157,242,249, +229,118,201,135,236,0,147,159,6,203,157,210,195,223,92,111,112,125,35,188, +63,208,10,5,23,174,119,74,110,164,5,209,16,76,47,128,117,243,214,237,249, +90,209,193,80,209,109,102,90,47,81,248,202,216,124,152,115,59,227,48,185, +56,128,165,220,23,178,240,115,133,148,85,247,205,72,83,141,14,198,18,36, +122,135,16,249,95,156,157,89,30,212,15,177,12,143,246,115,69,208,184,169, +182,177,109,195,254,187,90,75,162,118,250,141,219,111,1,6,0,80,239,219, +105,146,138,192,9,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_13 = 632; +static unsigned char xml_res_file_13[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,2,26,73,68,65,84,120,218,164,83,61,111,19,65,16,125,179,187,103,7,131, +81,8,4,10,155,68,20,72,161,224,67,73,68,75,19,104,41,40,144,16,162,129, +34,5,13,255,0,209,210,128,132,172,132,134,6,148,54,13,66,164,65,66,162, +76,224,226,2,100,36,7,35,36,155,96,130,125,150,239,156,203,221,46,179,119, +206,23,208,32,143,116,186,189,157,153,247,102,222,204,145,49,6,131,152, +192,128,166,202,243,51,139,58,10,175,26,29,39,23,36,36,72,170,50,145,56, +199,95,251,163,169,127,67,132,109,159,178,201,231,103,159,1,91,81,26,36, +37,86,158,220,56,203,32,134,232,15,0,78,34,33,32,84,230,19,19,157,73,0, +140,214,156,188,137,176,242,16,198,16,156,194,53,76,206,62,231,230,250, +201,22,100,27,200,190,148,130,91,186,53,33,73,76,241,253,178,74,28,166, +203,142,3,236,151,136,214,95,241,197,203,36,150,24,196,196,26,65,199,239, +151,110,144,41,92,231,120,131,142,31,94,204,31,204,90,0,118,197,62,132, +51,196,71,105,139,220,97,214,172,75,229,157,139,160,213,177,44,236,225, +137,209,125,8,169,144,115,156,18,235,246,32,5,160,77,75,135,160,29,32,233, +59,165,67,109,165,130,209,177,17,28,191,89,2,18,145,77,250,88,191,147,129, +59,119,251,152,178,101,34,242,240,249,173,139,238,47,111,87,47,214,99,124, +234,52,142,20,142,98,171,250,136,171,214,73,233,22,64,230,138,8,197,4,154, +237,112,73,89,102,191,190,198,202,2,211,247,22,184,157,184,175,150,68,252, +181,4,109,120,85,40,147,150,159,0,107,6,24,71,235,227,42,190,172,247,94, +40,158,55,58,245,26,14,23,121,42,221,42,116,115,137,67,69,10,34,179,124, +218,187,107,172,3,49,211,208,33,252,172,186,184,243,248,195,98,210,66,187, +241,13,197,233,75,220,74,29,148,205,115,170,216,29,225,62,99,0,103,4,126, +99,13,223,27,205,215,171,243,51,158,178,65,193,70,11,185,83,39,129,94,139, +7,49,140,191,54,112,175,101,135,177,177,252,30,181,31,189,133,19,163,76, +230,206,93,246,120,96,121,29,197,176,75,101,118,54,230,223,102,139,50,36, +218,147,119,223,140,149,159,94,241,108,228,133,68,177,255,51,187,247,110, +186,91,3,254,206,191,5,24,0,171,203,191,162,234,194,67,169,0,0,0,0,73,69, +78,68,174,66,96,130}; + +static size_t xml_res_size_14 = 685; +static unsigned char xml_res_file_14[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, +65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, +0,0,2,79,73,68,65,84,120,218,100,83,61,108,82,81,20,254,30,63,15,144,194, +98,52,154,70,156,28,108,73,140,198,166,49,52,142,226,166,198,196,132,142, +154,176,72,88,93,89,93,136,65,106,28,180,12,38,52,150,69,55,113,174,49, +93,52,8,117,176,46,98,26,45,196,193,247,158,240,248,125,158,239,218,71, +16,110,114,184,156,243,125,231,231,158,115,158,134,153,83,40,20,54,70,163, +209,93,199,113,130,174,77,211,52,219,235,245,110,102,179,217,251,211,92, +225,64,115,149,98,177,120,173,223,239,87,19,107,107,136,199,227,56,22,10, +77,136,157,110,23,141,70,3,239,118,118,160,235,122,50,147,201,188,253,47, +0,157,37,75,53,181,190,14,201,132,111,205,38,186,93,27,154,199,3,103,60, +70,40,20,196,217,88,12,82,25,182,202,101,58,170,32,12,224,97,0,102,78,165, +82,176,237,30,190,236,127,21,226,24,225,112,24,229,242,150,186,169,211, +78,156,60,242,221,234,60,124,115,34,145,128,215,167,227,176,221,150,108, +33,44,44,132,241,236,249,38,86,46,175,168,155,58,237,196,201,35,159,126, +42,192,112,56,188,183,180,188,140,118,171,141,160,174,99,65,50,110,60,121, +138,171,210,139,131,131,239,234,166,78,59,113,242,200,167,159,10,32,18, +32,56,26,15,17,12,6,241,168,240,24,215,147,73,116,165,220,197,197,51,234, +166,78,59,113,242,200,167,31,127,124,238,91,216,60,202,169,147,39,240,166, +90,157,157,174,178,187,156,233,51,9,224,247,251,21,152,78,167,17,8,4,224, +241,112,64,20,7,99,105,162,221,235,73,19,109,197,155,13,208,55,76,83,103, +121,124,207,203,237,10,76,211,152,171,32,18,137,226,246,173,155,240,249, +124,16,190,26,158,10,96,154,230,171,207,123,123,119,46,92,188,4,91,22,198, +248,109,226,199,225,207,185,0,167,199,242,76,201,206,105,212,62,126,0,253, +92,44,150,207,231,157,86,171,237,116,58,93,199,178,254,56,178,68,142,204, +124,34,212,45,203,82,56,121,228,211,207,93,164,102,189,94,207,84,42,219, +176,44,19,126,221,175,54,110,48,24,76,132,186,95,70,72,156,60,242,233,55, +105,98,169,84,122,193,187,215,235,21,87,87,175,96,105,233,188,188,57,242, +111,215,53,141,229,162,86,251,132,221,221,247,202,217,229,227,168,205,238, +137,138,156,203,229,114,15,162,209,232,13,249,175,79,97,125,195,48,94,11, +246,80,254,239,139,24,115,95,227,212,137,137,28,63,90,50,247,72,11,241, +203,45,123,250,115,254,43,192,0,120,74,65,201,19,184,212,222,0,0,0,0,73, +69,78,68,174,66,96,130}; + +static size_t xml_res_size_15 = 1507; +static unsigned char xml_res_file_15[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,5,133,73,68,65,84,120,218,164,87,91,104,28,101,20,62,51,187,155, +236,230,158,77,210,52,218,180,138,109,76,177,105,161,96,125,17,159,4,81, +4,193,7,171,40,98,193,82,237,139,216,168,120,125,200,67,40,105,107,131, +68,107,193,104,180,10,26,168,20,193,90,16,108,169,109,173,13,84,107,45, +33,109,18,91,55,27,211,53,183,221,77,246,58,55,207,247,207,76,50,89,102, +147,221,56,112,216,221,249,207,249,206,247,159,219,255,175,100,24,6,229, +62,146,36,145,203,35,189,127,244,216,3,165,126,255,235,146,236,121,148, +117,2,146,44,145,71,146,73,51,116,50,116,131,24,43,101,232,218,169,76,58, +125,176,253,165,231,47,177,141,225,6,228,244,41,21,66,96,111,251,91,53, +247,181,109,63,87,81,89,177,101,199,214,86,90,215,212,72,21,229,1,177,118, +184,183,159,246,189,184,83,124,159,79,164,40,60,17,161,129,171,67,52,63, +55,127,45,22,155,121,242,237,87,246,140,228,18,89,226,19,63,114,197,201, +165,227,96,207,198,15,191,56,110,92,25,188,110,184,61,29,221,189,174,239, +161,15,187,247,246,119,111,2,78,46,1,91,188,180,252,83,18,92,179,118,248, +161,29,219,168,173,117,35,233,186,198,98,26,202,178,76,30,143,135,210,169, +148,80,212,52,172,233,34,122,50,167,102,219,230,22,146,57,61,103,7,140, +27,188,236,103,201,184,57,144,151,113,238,233,250,168,175,179,101,195,157, +236,252,30,82,21,133,20,69,93,112,100,176,224,73,167,77,92,252,198,123, +172,67,15,250,176,131,253,161,163,199,142,2,175,88,2,126,191,191,172,125, +75,203,221,12,166,145,170,233,98,247,16,100,84,146,76,211,76,38,99,213, +141,44,34,109,235,64,31,68,182,114,228,124,190,210,23,120,49,80,12,1,249, +221,206,195,79,4,252,165,84,89,81,70,170,234,216,57,87,60,50,122,241,247, +63,169,251,211,126,186,183,117,19,29,249,242,4,253,122,229,154,72,52,214, +237,72,168,170,70,85,149,101,116,71,99,29,189,217,113,224,241,220,90,192, +147,175,6,60,89,69,169,107,8,86,17,183,156,233,220,42,78,228,216,195,180, +135,111,142,209,238,167,30,35,188,70,206,63,248,252,56,221,223,182,121, +161,70,236,98,67,157,0,167,58,88,255,44,191,58,145,91,11,249,8,120,171, +107,131,143,84,85,148,51,101,137,52,46,62,195,65,0,223,51,156,251,88,60, +206,107,58,121,217,137,146,85,68,183,153,17,176,116,17,74,214,175,175,173, +166,146,82,255,195,252,179,180,80,2,62,159,215,183,189,154,195,39,138,139, +35,96,56,102,4,156,128,64,34,153,100,2,220,74,28,146,108,54,43,66,111,138, +163,149,217,182,134,211,104,152,157,80,82,104,10,124,178,215,215,212,24, +172,225,208,235,166,115,199,124,16,17,200,100,41,197,131,71,51,108,2,138, +217,219,86,10,36,147,45,218,131,68,221,154,246,114,193,53,32,1,216,231, +21,253,238,156,94,72,9,162,128,29,39,82,73,107,38,72,156,130,172,136,185, +196,250,50,153,4,160,43,51,57,172,75,134,235,84,206,59,138,215,236,239, +249,44,18,137,76,81,137,223,79,229,1,63,5,202,203,24,204,35,114,106,14, +33,123,51,38,33,56,84,181,197,90,65,42,146,201,148,72,149,194,51,161,161, +190,150,218,247,60,215,200,75,255,58,125,230,157,132,94,175,143,246,237, +222,73,149,85,85,86,251,229,18,181,59,106,177,224,12,59,83,18,45,137,64, +60,22,167,254,31,206,186,251,201,71,0,173,151,97,230,82,34,41,118,108,228, +9,225,114,15,34,3,242,89,85,17,159,69,17,128,67,49,86,185,216,188,37,190, +85,19,80,185,56,53,71,106,10,39,192,165,43,177,13,162,32,123,61,171,38, +192,3,141,69,37,210,221,237,243,141,98,35,149,74,93,191,61,61,43,170,29, +206,23,123,188,112,129,29,236,103,227,115,148,100,60,183,11,74,62,2,90, +54,155,30,139,70,19,230,208,201,20,79,194,158,21,152,35,192,1,30,112,11, +37,160,78,69,38,206,128,57,170,153,163,177,170,8,192,14,246,192,1,30,112, +11,37,144,253,233,212,119,39,39,103,162,100,48,130,162,42,34,151,246,73, +183,242,238,117,161,15,59,216,3,7,120,192,45,152,192,173,191,134,167,230, +19,233,76,44,54,47,58,154,239,120,124,38,232,43,166,66,172,179,94,98,62, +33,128,96,15,28,224,21,67,0,77,155,137,206,76,158,28,143,76,139,218,193, +113,28,103,18,56,227,209,33,112,146,43,120,143,117,232,225,148,68,201,193, +30,56,214,41,168,23,115,35,202,12,92,56,243,73,104,124,82,40,73,214,92, +136,207,205,81,42,157,182,28,88,103,63,214,144,115,126,143,117,232,65,159, +143,0,130,61,112,86,115,39,76,95,60,119,122,48,26,139,142,142,132,38,112, +176,91,163,214,88,112,52,203,247,129,40,11,62,109,98,226,68,132,38,235, +143,132,254,33,216,3,7,120,197,18,64,197,206,253,248,253,183,175,14,141, +134,173,203,167,177,144,231,124,162,91,161,215,56,21,67,163,227,4,123,224, +184,117,192,74,4,176,225,196,111,3,23,174,134,67,55,191,186,244,199,13, +51,180,142,123,159,91,245,99,29,55,168,243,151,7,9,118,176,7,78,190,127, +73,242,10,211,20,247,172,153,222,158,174,174,112,56,252,243,47,151,135, +204,123,30,31,78,246,17,108,159,132,230,93,209,60,180,160,7,125,216,193, +222,194,41,234,62,176,228,114,194,82,205,178,126,215,203,175,189,209,188, +254,174,103,54,52,55,210,186,181,245,84,230,47,17,249,6,149,100,58,75,225, +219,83,244,247,88,132,198,66,183,190,238,251,248,208,1,182,9,161,19,115, +39,96,209,255,13,173,67,171,138,165,169,54,88,223,252,244,174,189,239,212, +212,212,61,40,138,109,225,252,151,120,228,78,159,255,166,239,72,231,236, +204,20,198,46,87,46,197,221,114,191,26,2,118,36,240,231,162,134,165,193, +34,228,205,41,90,56,156,100,137,98,130,187,205,254,255,67,192,25,141,128, +117,197,150,115,135,151,229,88,93,14,192,233,243,63,1,6,0,218,58,168,206, +121,36,62,30,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_16 = 1971; +static unsigned char xml_res_file_16[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,7,85,73,68,65,84,120,218,156,87,123,76,149,231,25,255,125,215,115, +225,28,64,4,228,182,34,76,81,196,203,172,174,42,118,118,217,186,46,198, +75,170,105,154,213,206,118,107,27,99,155,45,157,201,178,196,54,248,135, +108,251,103,174,29,75,237,76,219,117,235,26,187,49,131,98,129,182,75,183, +214,86,165,245,194,102,13,181,5,122,40,194,17,116,28,176,128,192,185,125, +223,183,231,249,46,120,14,112,16,247,145,31,129,247,253,158,247,249,61, +247,247,19,48,203,103,245,238,154,116,247,220,226,39,116,81,122,84,135, +184,220,48,0,131,126,248,17,248,71,0,68,232,23,69,93,123,45,60,112,249, +149,243,135,158,30,158,205,185,194,173,246,215,237,249,83,169,232,203,174, +119,169,234,210,205,171,138,176,186,52,7,107,22,100,67,149,146,69,163,154, +129,51,95,132,112,46,208,143,166,127,7,17,137,70,91,245,27,161,251,63,122, +254,199,157,128,205,244,54,9,72,119,87,189,249,162,162,170,187,126,182, +169,2,91,87,22,65,163,197,174,235,26,122,71,52,140,68,245,164,151,253,170, +136,2,191,132,249,115,36,72,244,255,241,150,32,106,222,254,20,177,104,244, +165,83,213,91,159,162,37,237,118,8,40,149,251,154,46,175,89,144,155,95, +253,131,85,68,95,192,133,171,97,116,14,198,77,87,11,211,8,26,14,232,87, +105,150,130,111,228,187,160,107,58,246,213,182,224,124,160,191,239,244, +254,77,197,180,29,155,13,1,101,109,85,67,215,147,247,85,20,236,188,187, +4,29,131,26,254,211,23,6,157,5,145,149,11,169,89,59,4,116,130,36,2,43,243, +221,88,144,37,225,213,19,29,120,245,189,246,222,143,170,55,207,159,76,66, +158,106,121,99,247,174,123,151,228,61,68,202,155,123,162,232,30,138,129, +195,173,72,183,78,24,199,36,135,72,75,111,24,253,163,10,118,222,179,144, +188,97,20,136,66,99,247,233,253,155,239,72,36,33,37,198,188,114,111,221, +161,187,22,21,110,216,179,165,2,231,130,81,92,25,137,67,38,237,18,153,46, +10,156,233,22,68,81,36,88,153,47,36,172,79,236,155,239,88,24,142,232,184, +17,53,176,113,69,46,46,94,254,202,167,86,108,44,232,57,249,247,38,39,49, +29,2,194,138,157,213,139,50,10,74,254,88,243,216,122,74,50,157,226,29,131, +76,110,148,28,183,219,144,104,65,165,13,153,124,108,133,195,176,114,66, +152,10,209,6,147,112,209,251,247,86,228,161,190,229,202,157,25,69,139,254, +118,237,226,251,3,172,88,116,92,159,86,188,188,110,215,119,151,144,164, +136,246,129,40,41,191,105,185,3,137,44,87,101,9,245,31,180,226,153,63,52, +193,163,42,20,26,217,92,79,124,47,89,70,48,207,106,163,51,21,122,255,209, +111,151,193,87,188,162,142,117,78,16,40,90,187,53,219,227,113,151,111,164, +58,255,226,122,204,180,136,99,206,137,148,8,210,109,90,223,210,22,196,129, +199,215,225,231,47,52,192,235,146,104,77,48,247,38,191,239,192,201,159, +0,121,117,243,234,249,80,20,165,156,117,58,4,164,194,202,7,30,251,206,178, +66,68,168,82,7,198,226,166,219,197,20,144,236,82,24,167,184,86,255,112, +13,246,252,158,73,200,212,152,68,83,89,74,57,66,136,206,22,232,143,202, +242,60,20,145,78,88,252,72,214,237,223,113,103,105,46,41,215,233,197,169, +174,79,114,41,39,26,9,69,168,243,237,107,108,67,213,142,187,240,116,77, +3,60,46,133,14,74,29,14,62,147,101,89,199,202,146,28,72,30,255,14,214,205, +4,220,134,172,150,175,40,201,54,147,69,100,43,110,1,139,0,117,63,143,138, +154,247,187,176,247,161,181,248,233,243,111,194,227,182,194,33,73,41,100, +37,43,33,151,21,103,193,144,92,229,172,155,9,200,6,21,173,199,37,32,70, +29,68,18,82,91,239,128,159,24,21,81,26,17,240,121,93,120,165,57,136,170, +71,214,227,201,3,199,77,79,40,196,32,149,247,98,212,208,56,121,89,39,235, +22,97,85,146,217,189,132,25,98,159,8,126,194,26,149,163,170,130,134,20, +89,174,226,216,197,126,252,226,225,111,97,215,111,234,205,68,181,194,56, +73,214,44,120,3,126,159,236,76,39,65,78,236,163,188,200,117,158,170,227, +113,99,145,205,41,104,152,150,184,20,213,60,152,141,81,40,213,227,134,37, +233,148,158,110,76,109,213,146,33,36,205,70,57,113,83,38,23,104,130,145, +154,64,130,7,162,134,8,23,185,91,176,101,215,150,100,226,185,55,62,196, +95,246,110,163,10,137,155,171,162,48,149,128,64,139,253,67,209,9,29,38, +1,110,159,163,17,182,72,52,243,32,53,1,203,173,124,146,70,14,85,21,197, +148,93,146,151,134,131,181,39,240,250,51,219,17,166,49,205,30,113,114,101, +50,1,55,233,24,141,68,38,246,69,203,159,227,29,29,125,67,180,41,220,178, +2,36,187,119,198,13,217,140,127,113,118,26,94,175,59,129,55,170,182,211, +165,68,131,78,212,4,242,98,42,89,15,233,248,164,147,186,48,233,100,221, +124,92,60,28,234,110,56,219,214,11,159,34,204,162,10,44,2,154,40,99,94, +166,23,117,245,39,240,215,125,219,233,6,100,64,215,173,235,89,74,89,98, +145,70,13,248,92,123,31,198,67,151,27,88,55,19,8,7,254,241,242,225,230, +182,171,228,82,80,87,155,217,11,236,51,141,124,28,19,41,243,143,253,19, +71,246,147,242,184,62,163,229,14,124,42,119,80,141,166,226,0,2,239,188, +124,152,117,243,145,209,225,158,207,174,133,66,3,157,255,186,208,135,12, +234,237,220,205,36,187,110,147,192,217,65,86,110,88,118,7,142,29,105,194, +209,106,182,156,252,200,151,21,8,211,203,216,144,233,204,12,106,59,71,78, +118,64,143,142,117,14,145,78,214,45,57,213,161,141,13,93,26,76,95,188,227, +251,171,74,204,18,138,115,50,78,26,175,206,179,102,73,1,54,173,91,72,146, +84,53,186,117,55,156,110,28,39,194,71,134,69,40,65,15,28,61,143,206,183, +14,62,114,163,47,16,32,177,113,231,62,160,211,194,152,191,172,178,228,171, +152,186,248,158,101,243,204,154,214,141,233,73,240,58,223,7,38,174,229, +51,41,55,19,79,196,156,52,1,207,254,185,25,215,122,2,199,219,142,255,238, +53,18,187,206,169,52,65,128,255,233,61,219,120,33,190,240,190,7,243,231, +102,122,203,10,253,20,107,209,44,169,41,183,30,187,80,173,239,129,25,64, +158,116,211,156,206,240,10,120,177,241,18,90,62,15,14,124,124,224,225,31, +145,104,31,199,127,242,149,140,175,205,122,240,100,237,219,61,89,235,239, +47,204,201,244,46,46,242,155,106,204,54,61,11,55,39,221,156,72,185,135, +102,93,186,23,56,216,208,138,119,207,118,132,154,127,189,109,11,29,211, +67,24,182,141,78,34,192,254,140,242,156,185,114,170,246,157,96,214,250, +109,253,195,113,207,55,23,205,35,43,18,239,131,184,121,239,155,110,228, +82,104,92,212,174,211,168,154,198,194,26,126,121,248,28,206,180,118,15, +146,242,173,252,89,65,24,228,242,155,238,82,234,132,34,194,68,130,167,106, +155,198,178,151,231,159,234,24,41,203,76,247,160,226,107,62,107,204,38, +213,181,5,201,158,17,76,212,227,50,231,13,142,53,119,226,183,71,91,208, +213,254,121,211,153,231,118,238,182,149,135,38,95,203,83,126,152,16,230, +16,242,114,151,110,88,90,186,233,39,191,202,205,205,153,191,174,60,31,149, +84,1,165,121,126,202,234,155,51,133,15,225,86,254,201,151,131,248,248,82, +47,78,127,214,139,241,145,161,174,64,211,11,207,254,183,245,195,86,218, +190,106,39,93,236,182,62,205,8,20,65,204,37,228,120,231,22,206,251,250, +198,221,91,188,249,101,223,19,221,190,18,221,48,166,204,9,35,114,227,203, +209,190,246,119,3,111,29,106,24,27,184,194,117,222,79,224,219,239,216,237, +126,154,37,238,43,54,145,52,66,58,33,131,224,73,184,81,39,134,111,156,48, +100,39,217,168,173,56,246,255,126,156,78,231,17,149,7,154,61,69,167,251, +60,140,219,229,21,77,101,241,228,231,127,2,12,0,35,187,154,106,194,98,206, +112,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_17 = 2315; +static unsigned char xml_res_file_17[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,8,173,73,68,65,84,120,218,172,87,11,80,84,231,21,62,123,239,238, +178,32,225,189,8,136,32,136,202,242,168,10,212,166,81,177,106,173,113,212, +234,198,71,104,199,65,109,106,58,153,105,19,141,161,42,248,76,192,33,22, +147,49,38,169,157,56,101,242,176,81,81,48,157,198,180,77,194,99,81,164, +160,147,162,242,94,65,129,125,47,187,236,238,221,247,171,231,191,185,155, +172,136,200,180,189,51,103,118,247,222,255,254,223,119,94,223,249,151,7, +83,188,182,109,223,17,153,152,144,120,66,36,18,21,39,36,36,136,146,103, +36,193,180,105,211,128,166,105,144,223,187,7,61,61,189,178,147,127,120, +115,37,46,245,29,125,189,98,47,69,81,187,189,94,111,146,88,44,6,141,70, +3,60,30,62,240,122,107,237,14,199,1,92,215,143,235,252,100,95,222,20,176, +233,3,101,135,254,40,16,8,118,73,55,110,128,249,185,57,192,163,40,80,40, +149,208,218,250,47,252,84,65,95,95,95,227,123,167,79,237,192,181,134,242, +227,111,246,37,37,36,38,44,91,190,20,196,113,113,224,247,251,17,156,7,78, +167,19,250,251,239,193,215,245,13,160,80,12,103,158,121,255,189,62,66,130, +255,36,240,125,7,202,106,242,243,242,16,123,61,11,108,101,172,80,223,216, +4,178,230,102,232,234,236,172,100,24,203,112,179,172,169,5,215,186,223, +168,168,236,155,55,119,110,66,97,225,18,232,184,125,23,174,95,111,5,140, +4,107,241,211,227,33,55,59,11,146,147,147,224,131,179,127,238,193,245,34, +52,231,100,4,232,253,165,7,107,242,11,242,164,155,164,27,97,116,212,0,6, +163,17,26,16,188,183,183,87,255,86,213,137,45,184,70,135,102,70,99,246, +150,236,127,126,70,98,18,130,47,70,130,50,240,122,60,128,81,3,179,217,76, +60,134,174,238,46,104,168,175,103,131,78,211,20,217,63,108,50,2,36,236, +232,121,62,130,111,128,7,67,35,96,181,89,161,169,73,6,114,185,92,129,224, +91,113,205,16,9,57,154,11,77,24,17,17,113,148,132,189,227,118,39,11,78, +81,52,91,31,38,147,9,94,63,122,100,13,137,80,208,254,198,192,23,106,98, +240,195,53,63,44,40,144,110,122,110,3,220,127,48,132,155,140,1,133,121, +140,141,141,1,198,98,249,134,3,215,160,217,208,60,104,33,152,235,233,241, +113,98,80,171,213,108,206,41,138,7,124,62,159,45,62,188,6,209,238,4,25, +249,109,37,15,198,71,128,127,240,240,177,218,252,188,133,235,73,206,7,6, +239,99,8,25,112,185,156,224,241,122,97,235,230,77,64,83,212,186,136,200, +72,168,58,81,41,13,122,79,64,138,205,108,177,0,65,36,4,136,247,66,161,32, +216,99,237,68,161,30,31,129,80,30,143,226,192,7,17,220,132,213,235,0,167, +195,9,122,253,40,22,222,117,216,244,156,148,108,190,142,172,13,126,145, +16,224,211,124,182,173,190,5,231,179,53,240,164,70,163,198,21,93,117,126, +222,2,80,170,212,48,54,102,6,187,195,5,14,135,3,236,132,4,182,145,70,171, +131,175,234,27,89,48,174,138,191,187,188,30,151,106,112,112,0,226,177,239, +5,2,62,146,64,227,211,224,247,249,38,37,64,232,241,203,143,87,94,17,139, +227,215,166,166,204,132,140,217,233,108,222,195,195,195,17,216,9,46,52, +7,18,33,105,64,97,129,129,129,65,192,100,131,82,161,168,59,116,168,140, +116,130,23,45,118,247,158,189,117,69,69,69,75,163,163,163,161,95,46,103, +243,47,10,9,1,53,138,80,123,123,59,219,138,44,32,91,31,20,84,30,47,15,33, +5,204,231,194,190,246,197,95,239,100,23,212,55,52,193,32,134,159,20,79, +234,172,52,4,118,129,199,237,98,159,13,13,13,131,72,36,100,211,48,102,208, +73,159,162,125,231,119,151,30,218,246,70,233,129,51,171,214,174,95,58,111, +110,6,252,27,251,159,68,8,21,147,37,145,158,158,14,89,18,9,251,91,32,160, +65,165,84,195,229,186,186,1,174,13,89,2,66,139,197,212,84,115,169,118,153, +4,23,134,134,138,216,192,88,44,12,246,123,31,232,116,26,246,55,217,52,50, +34,2,22,204,159,15,183,218,219,32,43,39,27,62,14,95,182,57,230,200,231, +82,207,28,160,243,127,144,5,109,29,157,96,183,219,208,236,172,247,49,81, +81,236,123,108,129,162,30,116,247,244,64,119,119,55,234,193,215,123,131, +83,240,20,90,218,222,146,125,167,51,231,73,10,103,207,73,7,55,122,45,151, +15,64,111,79,119,125,91,91,235,37,1,95,192,195,40,248,211,82,102,110,217, +184,97,195,242,168,184,233,240,234,55,110,216,179,118,37,180,169,24,104, +31,82,65,138,91,5,175,102,248,96,72,163,135,230,235,45,138,200,200,200, +24,172,148,208,105,97,97,232,140,133,5,195,162,110,249,224,79,103,246,225, +215,7,92,27,187,120,92,43,70,161,165,32,137,183,103,207,206,40,76,78,78, +134,142,142,14,56,84,182,255,105,188,175,231,68,132,148,116,204,214,205, +155,143,245,46,218,181,230,183,207,46,131,187,58,59,168,25,7,184,253,20, +220,188,55,8,235,104,57,248,238,54,106,207,156,61,251,75,174,54,40,28,92, +225,168,13,86,78,47,76,28,112,64,192,252,52,153,94,68,18,201,141,27,45, +215,91,37,89,57,185,24,174,153,140,197,212,114,237,90,115,53,222,87,5,228, +54,116,69,113,140,117,197,75,85,37,107,22,195,109,173,29,84,22,59,184,125, +126,240,160,69,132,71,129,108,216,0,141,111,151,252,12,215,222,71,83,18, +242,12,195,40,57,13,208,112,210,109,10,86,197,224,38,37,100,162,209,146, +208,34,56,241,32,138,71,226,199,139,121,233,221,217,233,217,121,253,21, +235,127,12,87,229,70,80,90,28,44,176,27,253,116,251,121,160,192,57,17,230, +53,193,38,253,151,159,237,59,124,164,8,223,113,4,97,248,31,59,112,130,181, +132,11,11,195,129,147,48,217,201,253,152,223,188,147,134,224,242,242,245, +207,176,224,42,198,142,224,192,130,123,16,92,137,224,94,253,0,124,181,45, +27,36,146,121,153,179,226,197,153,127,175,111,168,157,12,120,162,8,76,40, +84,177,251,206,23,47,202,156,91,253,242,242,133,240,197,56,112,47,130,171, +113,78,120,12,15,224,84,158,0,104,158,15,126,148,191,0,118,254,181,15,218, +245,62,48,153,205,87,116,199,214,109,225,242,15,83,145,226,135,158,197, +148,156,219,190,124,126,78,117,217,179,11,225,106,191,129,205,121,48,184, +206,108,132,97,173,18,36,183,170,255,105,208,169,65,128,2,179,241,195,118, +24,163,34,224,47,219,151,194,178,121,105,27,227,14,214,93,28,23,233,199, +166,224,33,240,232,215,206,21,175,88,56,191,122,247,138,108,184,112,215, +192,86,187,215,255,61,184,222,108,0,165,122,4,140,31,150,21,221,110,254, +242,106,152,80,48,235,111,130,236,52,65,124,26,252,126,85,14,252,67,110, +129,95,44,72,6,181,213,43,209,73,86,229,218,100,23,46,77,148,146,137,82, +192,143,46,171,187,248,98,97,129,116,109,110,50,92,236,28,69,112,231,4, +224,195,96,188,80,249,188,237,78,211,77,174,224,18,231,190,115,227,230, +39,59,158,134,183,26,181,96,69,45,153,21,21,6,91,179,99,224,84,67,39,52, +118,245,215,233,203,165,1,233,126,108,4,232,232,210,218,154,61,171,23,75, +127,154,153,8,23,187,70,65,243,56,240,79,43,182,216,238,54,183,225,59,234, +64,167,240,114,86,20,92,233,181,166,122,169,112,32,135,30,135,219,3,35, +22,15,252,106,81,42,104,48,18,218,9,34,65,63,228,121,105,237,37,2,94,152, +17,15,53,232,185,198,58,49,184,179,171,165,194,84,255,201,231,28,184,147, +211,18,191,173,165,246,70,104,238,146,108,15,95,152,26,34,138,100,227,107, +119,77,78,34,64,128,22,151,213,158,221,245,147,69,69,43,209,243,71,193, +177,47,25,11,40,84,15,192,217,121,237,184,254,211,242,143,56,129,114,4, +121,67,72,184,153,27,159,181,134,228,44,145,184,105,97,170,48,244,201,36, +2,4,166,197,174,121,225,98,233,234,5,88,112,193,224,126,214,115,6,15,36, +35,202,1,112,220,145,85,232,207,31,255,152,3,183,143,43,170,239,20,117, +50,18,47,32,9,173,205,39,209,103,175,206,179,54,157,175,9,180,161,104,142, +56,10,31,224,206,152,243,111,91,237,123,240,251,35,253,224,54,168,101,8, +126,142,147,88,43,7,56,254,242,6,20,84,117,114,231,30,70,209,35,211,106, +135,193,138,194,107,69,37,24,54,57,224,114,183,17,74,86,101,225,31,2,1, +123,170,10,16,160,212,22,27,80,56,150,8,56,177,96,112,207,168,74,166,170, +218,254,10,151,243,199,129,79,74,194,134,36,108,72,66,201,184,224,149,218, +91,192,99,140,77,100,192,5,82,16,198,43,248,249,150,172,153,113,81,26,59, +31,156,184,133,25,143,225,67,138,123,168,114,170,102,213,201,29,123,112, +205,48,55,148,188,83,248,55,229,127,36,29,252,144,84,81,88,52,178,26,130, +17,121,167,76,83,85,252,50,62,31,13,232,0,38,10,50,18,202,46,215,242,68, +97,41,120,162,102,143,78,94,237,240,23,170,83,187,14,114,67,201,56,69,112, +152,96,192,165,36,190,246,209,105,161,56,249,25,151,110,164,69,85,85,252, +59,110,207,177,0,1,50,235,99,209,102,112,147,144,226,70,166,145,43,184, +177,201,244,124,138,36,2,83,214,204,213,17,235,80,176,18,10,184,115,154, +144,83,72,31,215,102,246,255,194,243,71,212,149,59,198,11,56,199,236,255, +131,67,255,223,235,63,2,12,0,116,106,129,252,126,87,16,179,0,0,0,0,73,69, +78,68,174,66,96,130}; + +static size_t xml_res_size_18 = 2051; +static unsigned char xml_res_file_18[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,7,165,73,68,65,84,120,218,156,87,125,108,85,103,25,255,189,231,227, +158,123,123,251,129,165,45,216,58,235,112,165,104,132,208,144,97,34,211, +12,199,88,2,24,166,76,103,166,243,47,157,157,78,99,252,136,35,200,76,101, +113,97,14,51,201,22,182,37,115,38,186,153,45,51,196,101,76,145,5,134,5, +66,183,21,16,18,217,40,116,163,31,72,75,139,180,183,189,31,231,158,15,127, +207,123,206,45,183,176,10,235,73,159,158,243,190,247,61,239,243,123,127, +207,239,121,222,247,40,204,238,178,58,158,124,241,101,195,180,214,135,97, +120,221,47,41,165,16,248,222,95,127,249,253,187,239,98,211,211,125,179, +113,254,208,246,23,118,134,202,92,183,100,73,11,130,48,0,174,7,3,61,25, +202,192,241,227,61,80,161,255,234,175,126,120,207,151,75,32,62,236,85,181, +249,137,23,67,159,75,207,185,126,56,89,240,174,219,100,188,188,39,239,203, +60,122,53,179,0,144,12,124,31,110,209,199,190,99,189,248,16,17,96,8,128, +149,75,23,64,222,151,121,104,153,217,0,80,18,119,113,44,19,126,177,109, +65,212,27,78,253,155,241,218,123,236,61,248,65,200,176,133,83,225,183,102, +37,65,121,223,48,144,176,44,108,123,249,128,22,87,105,198,176,4,164,140, +26,121,10,232,120,121,235,13,116,142,105,191,89,211,84,109,81,213,193,181, +57,149,21,60,242,212,75,250,217,160,115,21,243,43,119,59,149,66,162,234, +35,116,24,160,148,33,97,137,25,21,70,253,229,138,22,219,252,187,231,119, +22,253,96,93,219,226,5,215,165,234,16,229,116,171,169,84,82,134,194,209, +35,39,81,147,78,162,117,225,141,240,253,203,32,228,146,182,23,78,239,19, +0,41,24,230,186,77,15,220,13,145,134,49,203,194,16,198,118,199,45,109,216, +242,219,63,226,123,95,91,133,162,23,148,209,173,176,231,200,41,4,94,120, +21,128,164,32,227,80,252,160,227,25,36,19,6,204,56,152,83,225,68,89,187, +44,132,83,109,78,46,145,43,250,33,182,109,188,79,139,97,235,75,157,154, +238,210,123,18,182,101,45,141,154,225,43,1,168,144,3,11,69,160,182,42,133, +191,140,180,33,149,80,112,28,19,182,99,83,104,10,137,132,5,155,168,18,52, +155,109,155,52,137,113,24,108,26,49,211,167,129,244,217,61,4,225,67,17, +141,101,88,8,149,196,59,90,156,138,181,229,249,87,3,128,12,43,184,30,210, +41,113,200,152,36,13,56,52,155,179,59,244,100,90,145,99,13,192,136,1,208, +177,101,134,176,57,151,101,68,43,76,37,109,20,10,30,29,152,88,126,211,39, +53,3,174,114,225,154,17,237,158,235,106,13,148,107,44,202,2,14,204,187, +62,233,183,161,108,19,166,99,192,146,123,194,100,91,0,208,76,3,6,65,24, +4,192,63,138,62,212,119,131,119,165,57,134,126,95,22,98,4,9,60,81,152,7, +145,192,183,43,70,176,246,201,109,116,234,99,103,123,59,139,16,62,128,1, +118,20,138,46,146,164,156,169,168,29,26,182,69,51,35,147,182,24,25,32,14, +173,17,185,147,100,88,2,68,138,139,167,144,36,3,121,2,8,248,251,200,33, +106,66,184,191,221,196,249,87,30,137,116,115,255,253,4,21,76,223,88,74, +50,202,83,4,78,34,193,85,27,218,169,178,204,8,12,159,45,75,194,97,68,33, +48,37,246,12,7,29,123,158,199,204,97,152,18,146,62,33,42,28,135,11,41,178, +218,229,177,249,214,33,29,111,183,152,65,215,238,65,2,8,96,20,178,188,251, +31,192,128,136,208,45,234,21,24,6,29,27,178,98,83,135,193,74,68,119,143, +78,71,93,32,199,52,26,203,121,90,84,97,145,241,38,136,128,171,206,231,129, +205,139,146,96,152,17,6,228,38,84,58,169,109,134,195,116,165,252,250,4, +102,144,41,92,85,136,52,162,60,197,227,48,134,6,185,213,113,167,89,100, +32,235,43,12,184,138,0,12,93,104,36,224,182,163,68,206,58,221,196,79,192, +127,62,199,85,166,230,224,244,249,127,226,52,30,196,67,127,235,67,57,219, +139,26,150,98,121,243,79,208,210,180,129,176,172,43,53,0,198,142,12,144, +75,17,154,69,6,24,89,12,23,200,140,178,160,36,44,4,35,236,136,152,66,229, +151,10,60,65,113,172,73,214,204,36,222,62,119,31,222,189,180,11,107,62, +255,85,44,110,254,49,69,89,161,199,229,220,44,78,156,61,128,87,187,239, +197,80,110,55,157,110,184,50,11,124,166,79,81,51,32,69,165,64,170,38,115, +76,78,198,94,113,181,161,172,158,78,124,10,19,92,169,222,47,152,227,236, +212,21,142,249,131,134,226,122,156,207,239,197,198,13,219,209,63,246,38, +254,209,179,9,67,19,147,122,250,121,149,105,124,102,254,157,216,116,215, +118,108,127,237,103,204,156,225,41,0,70,137,129,44,227,104,147,129,12,87, +61,144,241,144,41,42,76,80,217,25,207,64,198,143,173,24,183,99,155,96,60, +39,61,178,230,238,67,163,243,58,218,215,252,26,157,103,31,69,87,255,159, +112,49,55,137,29,235,67,109,242,220,213,255,60,14,244,61,138,7,214,60,12, +55,253,6,110,254,14,22,11,122,171,180,91,21,40,40,187,198,65,231,183,210, +48,74,149,61,20,170,179,151,171,125,88,218,197,227,237,151,33,177,140,20, +182,254,253,97,180,54,127,29,71,207,253,1,163,217,1,93,152,92,53,253,32, +34,125,242,219,177,115,207,97,237,178,123,241,194,165,103,59,248,83,167, +21,159,48,168,169,16,199,123,47,226,95,167,71,167,85,249,255,119,226,49, +24,2,75,85,227,112,239,97,220,122,115,27,246,191,255,14,43,29,163,196,232, +184,101,2,148,103,51,136,106,71,127,230,223,88,121,227,42,10,29,43,100, +35,20,0,225,196,196,248,193,163,93,135,86,132,165,189,122,106,35,138,78, +47,21,73,7,147,217,124,124,226,0,210,21,73,100,243,5,50,69,241,161,26,102, +10,24,206,119,235,154,255,155,213,87,35,222,241,165,203,125,15,190,174, +40,196,183,74,91,184,84,126,228,127,191,245,231,223,229,189,174,236,128, +162,62,119,219,186,214,213,95,249,230,182,156,175,156,101,75,23,162,247, +63,163,83,147,44,248,232,92,116,31,59,133,234,36,247,253,79,124,10,39,187, +129,9,183,79,211,124,173,75,88,144,177,49,0,173,129,28,173,143,54,92,118, +76,79,174,186,243,27,123,84,170,2,14,249,172,172,74,227,182,198,250,169, +115,224,133,76,22,78,202,129,71,13,156,236,233,213,125,151,242,231,185, +139,178,24,237,83,186,4,231,41,208,199,239,136,86,254,163,221,44,211,86, +180,131,202,152,177,252,32,226,83,156,94,177,156,205,51,177,149,174,90, +151,37,245,211,31,155,135,241,201,28,122,206,12,224,84,153,24,228,12,216, +80,55,7,213,233,52,222,57,209,143,133,13,43,48,122,241,32,230,215,71,43, +20,13,24,101,108,84,208,105,133,29,239,31,204,220,225,11,220,39,178,56, +34,1,157,233,80,106,121,172,116,77,245,53,104,110,170,199,232,216,164,174, +241,165,44,112,108,27,115,107,210,80,92,234,9,175,7,222,224,74,156,153, +56,136,198,6,6,213,142,138,164,83,54,25,247,56,72,9,17,231,178,115,158, +121,15,24,236,198,227,162,79,115,6,0,78,117,109,253,133,75,185,112,117, +37,227,188,248,166,38,44,108,110,68,243,252,90,90,29,170,28,11,167,201, +202,222,67,221,120,243,141,93,27,119,62,179,227,177,186,69,168,25,47,48, +27,155,232,200,138,118,204,253,125,29,232,28,232,0,183,24,13,76,72,57,252, +54,211,177,15,175,188,245,28,158,102,243,191,51,125,154,81,215,104,156, +219,208,216,178,230,158,246,95,84,206,153,187,34,58,45,71,20,72,8,38,198, +70,14,190,246,231,167,183,140,14,157,123,95,132,44,97,251,194,79,177,165, +238,6,172,109,109,97,245,155,23,1,209,167,32,6,121,104,8,120,183,135,206, +251,177,107,255,99,216,200,238,179,18,246,153,0,8,88,97,177,150,70,98,153, +107,211,191,33,68,55,227,177,112,47,198,109,249,212,106,106,185,29,183, +124,252,179,104,79,84,99,73,217,193,25,238,56,142,247,117,225,169,158,61, +56,192,158,65,218,24,116,97,191,198,135,104,204,134,115,197,129,89,82,190, +16,103,80,233,3,83,194,153,142,65,75,74,87,198,125,250,68,78,155,160,141, +196,128,39,227,190,89,125,29,95,227,27,24,118,12,58,81,54,191,112,225,198, +128,139,229,223,112,255,19,96,0,111,126,151,122,57,77,224,198,0,0,0,0,73, +69,78,68,174,66,96,130}; + +static size_t xml_res_size_19 = 2007; +static unsigned char xml_res_file_19[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,7,121,73,68,65,84,120,218,172,87,13,108,85,103,25,126,190,239,156, +115,127,90,74,41,163,180,182,118,115,117,64,21,232,214,176,117,70,22,163, +27,209,17,152,110,254,85,97,63,49,76,129,110,26,166,38,58,38,234,28,209, +204,13,19,204,36,203,100,66,54,49,25,3,231,72,97,108,83,144,159,110,176, +78,91,58,129,149,50,170,164,98,88,215,206,246,246,254,157,191,207,231,59, +247,220,114,239,150,74,169,158,244,237,119,207,189,231,156,231,125,159, +231,125,191,247,61,2,147,59,204,7,127,245,204,14,105,152,159,83,74,77,248, +38,33,4,124,207,125,254,71,247,180,124,145,167,110,240,221,100,192,127, +248,203,223,61,167,132,177,180,177,113,22,124,229,3,19,241,129,72,82,72, +116,119,247,66,40,175,237,39,223,90,118,91,222,137,75,61,202,214,61,246, +140,242,24,122,218,246,84,50,235,78,216,244,245,250,62,125,191,126,78,16, +205,36,28,136,249,158,7,219,241,176,191,235,12,46,65,1,74,0,124,234,154, +122,232,251,245,115,104,137,201,56,32,180,238,26,88,63,240,198,166,250, +220,183,106,236,223,184,199,190,174,62,120,190,162,108,106,76,126,115,82, +41,168,239,151,18,17,211,196,134,29,135,131,228,202,63,81,229,29,41,160, +70,127,242,9,220,60,167,142,224,40,250,205,44,202,106,147,89,237,95,156, +83,29,193,207,30,223,30,124,150,4,23,33,191,122,181,226,113,68,202,42,8, +232,35,95,33,42,207,140,80,185,239,11,51,90,219,186,141,219,158,115,60, +127,105,211,252,250,9,101,181,66,33,221,98,172,148,132,20,232,252,235,73, +148,151,198,48,103,246,149,240,188,11,78,232,195,37,184,11,85,148,55,218, +129,56,164,177,244,129,123,91,160,83,67,78,114,99,80,161,125,230,134,38, +60,244,139,167,209,250,229,69,112,92,63,160,91,137,128,42,188,212,245,22, +60,189,23,200,98,9,98,218,83,94,138,111,62,248,4,98,17,9,35,20,115,76,78, +20,156,23,72,56,118,78,14,180,114,142,167,176,225,254,111,4,201,240,240, +246,67,1,221,250,87,159,160,14,35,107,57,105,99,112,215,105,216,149,162, +200,1,161,120,97,214,1,166,151,197,177,243,157,38,196,35,2,209,168,1,43, +106,49,209,4,34,17,19,22,189,138,208,44,158,91,124,152,54,94,6,139,70,159, +137,41,81,250,143,151,233,132,7,65,111,76,105,50,242,156,222,158,65,240, +19,89,148,92,61,23,163,201,36,86,188,113,12,27,67,7,2,198,245,101,89,219, +69,105,92,3,82,147,152,68,60,78,139,10,148,240,115,52,112,40,52,43,52,237, +72,132,14,240,122,22,3,132,161,120,159,133,108,150,42,43,3,205,87,125,24, +215,210,154,174,170,67,109,170,15,123,171,123,145,30,73,33,53,154,194,112, +85,29,58,214,108,57,79,232,72,174,10,200,64,198,246,72,191,5,97,25,48,162, +18,166,94,35,6,207,41,137,73,51,36,36,65,37,181,228,31,147,94,5,171,228, +42,130,58,67,112,191,14,68,168,8,54,218,85,176,249,221,151,122,118,226, +218,230,102,148,79,159,138,205,79,109,193,205,114,17,50,233,12,34,118,86, +35,151,202,124,89,101,29,27,49,82,206,82,36,160,9,105,105,51,194,149,22, +201,173,134,118,44,112,206,12,156,212,38,233,160,144,6,98,100,64,7,226, +9,19,231,142,0,63,255,253,92,68,167,76,195,148,242,105,232,61,117,26,85, +21,51,240,236,200,31,80,221,223,131,235,55,173,250,88,193,62,160,144,97, +18,68,35,17,62,88,6,192,194,52,114,206,104,16,2,88,100,34,200,1,67,107, +207,124,96,216,174,235,178,114,40,71,36,39,102,60,26,69,146,91,116,146, +140,60,126,238,35,104,104,253,2,26,106,106,241,216,182,131,48,156,81,156, +60,126,130,82,1,91,230,6,109,96,128,150,52,115,10,48,9,109,39,136,64,50, +18,41,53,221,185,232,204,72,110,117,9,58,104,3,105,87,97,56,237,6,137,166, +28,234,77,39,124,210,158,201,10,220,223,80,130,17,219,192,138,129,251,208, +216,122,7,80,253,53,224,149,31,227,94,119,59,214,252,125,29,88,36,248,206, +218,245,216,180,117,135,134,29,165,217,102,174,172,52,3,46,35,161,3,212, +58,208,157,102,146,129,148,39,208,111,11,58,32,131,141,70,11,110,49,25, +225,122,65,185,233,26,247,249,47,235,243,250,248,52,204,120,114,30,22,172, +190,157,224,43,8,254,16,112,170,77,103,40,174,62,191,25,149,173,251,144, +78,167,243,205,168,160,10,232,89,70,51,64,46,117,162,153,100,128,41,134, +183,179,62,6,8,238,235,4,164,230,134,150,136,121,160,229,17,134,17,56,164, +181,119,140,40,82,178,20,205,127,92,146,3,255,192,215,129,87,53,248,174, +160,229,111,58,82,131,219,158,124,11,118,54,9,155,201,151,219,31,10,123, +129,239,177,124,156,128,1,189,169,232,104,146,105,22,167,78,46,70,171,116, +244,4,244,116,205,145,145,160,95,72,62,132,181,238,144,129,97,21,195,129, +115,245,152,189,242,46,70,174,193,215,135,224,14,193,171,209,178,245,77, +188,120,224,13,152,194,99,222,120,69,219,243,24,3,41,234,104,145,129,4, +163,238,79,184,72,240,201,163,174,64,194,149,72,120,161,57,225,121,96,6, +134,61,11,67,254,20,236,239,187,8,248,190,46,220,188,112,62,244,134,231, +49,88,37,138,123,65,208,173,178,76,40,171,60,138,67,119,150,66,230,119, +118,69,173,84,234,194,110,175,242,93,92,192,147,22,183,215,82,12,255,244, +114,204,94,125,231,123,192,73,251,209,106,124,133,224,123,254,212,137,37, +159,104,194,158,63,191,198,156,50,130,6,245,190,118,204,9,131,57,165,208, +125,102,8,199,78,15,22,237,242,239,159,120,152,144,48,144,33,237,139,95, +93,130,235,90,239,10,53,15,193,165,135,39,94,171,193,242,45,199,177,123, +127,23,110,249,100,19,215,163,184,229,198,235,241,194,193,215,137,83,220, +33,181,3,106,116,116,164,189,243,232,43,11,85,190,87,143,53,162,220,244, +82,18,99,125,167,50,65,207,247,9,46,153,237,171,254,189,22,77,247,104,240, +187,139,192,55,191,94,139,211,205,143,224,197,67,212,156,174,238,61,208, +17,236,162,123,184,234,161,212,11,230,132,98,9,50,191,121,248,123,43,185, +206,40,24,80,196,199,111,90,58,231,211,159,191,125,67,218,19,209,5,215, +204,198,153,127,13,6,229,228,200,24,62,219,209,130,198,85,203,73,123,49, +248,175,59,106,80,118,119,27,154,157,4,213,179,115,114,9,81,48,122,171, +160,89,189,151,129,52,237,44,237,237,130,49,61,182,232,214,229,47,139,120, +9,162,164,108,74,89,41,110,170,153,201,182,106,97,176,251,121,76,93,244, +85,160,238,219,192,1,90,239,110,130,171,32,242,169,43,218,96,216,9,102, +181,29,200,90,56,172,92,120,47,240,195,223,46,56,160,103,243,68,104,249, +99,186,237,56,248,232,7,171,48,146,76,163,247,76,63,78,41,210,39,163,104, +28,232,192,135,110,125,4,110,223,94,136,108,6,6,35,223,218,121,5,166,173, +220,205,237,118,132,251,130,23,204,139,227,142,115,122,126,44,248,125,188, +161,212,212,245,90,91,89,142,43,106,43,49,52,156,98,103,19,48,250,247,227, +186,6,222,210,223,6,57,244,38,78,244,189,139,99,39,234,112,184,238,251, +176,94,160,67,190,131,139,205,233,122,243,202,36,19,237,249,76,31,207,1, +247,111,127,105,255,46,231,164,71,23,204,111,64,211,188,89,168,152,81,137, +205,207,254,0,199,205,56,214,44,62,136,157,187,142,160,39,178,16,135,207, +86,173,109,223,180,172,3,19,123,63,66,200,248,59,58,247,254,219,171,89, +156,86,115,217,204,154,89,139,151,173,122,160,172,98,230,13,229,94,63,186, +59,123,112,229,212,119,81,85,63,15,61,233,203,219,247,62,189,97,253,224, +249,127,246,241,218,17,61,248,92,194,248,152,9,115,207,29,207,1,45,82,84, +231,2,109,38,237,178,251,86,223,241,212,192,217,99,219,126,187,187,251, +37,221,197,66,80,157,184,67,225,3,213,100,134,217,139,189,156,154,33,27, +21,180,242,96,127,205,1,107,7,178,249,40,240,63,28,19,125,59,182,66,70, +188,16,216,199,255,233,248,143,0,3,0,149,57,130,56,76,237,54,38,0,0,0,0, +73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_20 = 2051; +static unsigned char xml_res_file_20[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,7,165,73,68,65,84,120,218,156,87,107,112,21,103,25,126,190,221,61, +187,231,228,228,2,185,181,73,4,148,66,130,117,200,52,182,214,81,42,14,45, +86,7,80,212,233,216,17,157,78,127,56,26,188,212,209,254,160,25,172,12,242, +163,211,25,227,84,165,78,107,157,90,111,197,214,58,12,140,69,7,28,138,66, +25,29,36,164,212,182,16,174,197,96,106,110,36,57,201,185,236,213,231,221, +221,115,56,73,154,66,115,38,111,118,191,189,124,239,243,62,239,243,190, +223,183,10,243,251,25,219,31,127,238,5,77,55,54,6,65,112,221,47,41,165, +224,123,238,158,109,223,184,247,30,14,221,240,218,124,156,127,255,39,207, +238,14,148,190,161,189,125,57,252,192,7,174,7,3,61,105,74,195,201,147,103, +160,2,239,79,63,120,96,211,231,138,32,222,237,175,234,225,157,207,5,30, +67,207,217,94,48,85,112,175,219,228,121,121,79,222,151,121,194,104,230, +1,32,233,123,30,108,199,195,75,189,231,241,46,50,192,20,0,107,110,89,10, +121,95,230,161,101,230,3,64,73,222,197,177,76,120,103,199,210,232,106,80, +250,55,231,239,96,239,5,120,126,192,180,5,165,244,27,243,146,160,188,175, +105,48,13,3,221,47,28,9,197,85,156,49,40,2,41,163,70,206,124,58,190,189, +109,17,157,99,218,61,99,154,170,13,170,218,191,54,167,18,193,35,79,60,31, +158,107,116,174,98,126,229,152,72,165,96,86,45,164,67,31,197,10,9,138,204, +168,32,186,94,174,104,177,135,127,252,187,221,142,231,111,232,88,185,244, +186,84,29,160,156,110,85,42,37,165,41,156,232,121,3,53,233,36,218,90,223, +7,207,187,10,66,126,50,118,131,233,215,4,64,10,154,190,97,235,55,239,133, +72,67,155,103,99,8,98,251,228,29,29,216,241,163,223,224,235,95,88,11,199, +245,203,232,86,56,208,211,7,223,13,102,1,72,10,50,62,138,111,109,255,57, +146,166,6,61,78,102,41,157,40,27,151,165,176,52,230,228,146,57,199,11,208, +221,245,213,80,12,143,62,127,56,164,187,248,158,164,237,214,229,205,33, +195,51,1,168,128,15,22,28,160,182,42,133,63,14,119,32,101,42,88,150,142, +132,149,160,208,20,76,211,64,130,168,76,90,130,227,4,105,18,227,99,72,208, +136,153,62,53,164,223,60,64,16,30,20,209,24,154,129,64,73,190,163,224,84, +172,45,215,155,13,0,242,88,193,118,145,78,137,67,230,36,169,193,162,37, +56,187,69,79,186,17,57,14,1,104,49,0,58,54,244,0,9,206,101,104,81,132,169, +100,2,133,130,75,7,58,110,95,118,83,200,128,173,108,216,122,68,187,107, +219,161,6,202,53,22,85,1,31,204,219,30,233,79,64,37,116,232,150,6,67,142, +166,206,177,0,160,233,26,52,130,208,8,128,127,20,125,16,30,53,30,85,200, +49,194,247,37,16,205,55,177,179,112,3,68,2,95,169,24,198,250,199,187,233, +212,195,238,206,78,54,33,188,13,3,188,80,112,108,36,73,57,75,49,116,168, +37,12,154,30,153,140,197,200,0,113,132,26,145,35,73,134,33,64,164,185,184, +10,73,50,144,39,0,159,247,135,143,82,19,194,253,39,116,188,181,247,145, +72,55,155,55,19,148,63,125,97,41,202,40,79,17,88,166,201,168,181,208,169, +50,244,8,12,207,13,67,210,161,69,41,208,37,247,76,7,29,187,174,203,202, +97,154,76,41,159,0,21,150,133,60,3,113,130,60,182,174,121,43,204,183,237, +78,224,31,251,251,9,192,135,42,228,24,172,247,54,12,136,8,109,39,140,64, +211,232,88,147,136,245,48,13,134,25,29,93,58,29,177,129,28,203,104,60,231, +134,162,10,28,230,155,32,124,70,157,47,0,91,87,88,200,178,18,10,204,77, +214,244,88,247,34,65,45,202,15,185,23,183,158,95,214,152,138,0,4,81,158, +226,177,152,67,141,220,134,121,167,25,100,32,235,41,244,219,138,0,180,176, +209,72,194,19,150,18,57,135,229,22,40,132,37,104,243,196,172,170,134,253, +239,19,248,216,193,103,176,240,151,223,13,213,31,174,25,252,103,127,104, +13,114,235,190,8,103,241,90,248,12,114,134,6,192,220,145,1,114,41,66,51, +200,0,51,139,193,2,153,81,6,148,164,133,96,132,29,17,83,160,188,98,131, +39,40,13,110,194,132,163,153,104,217,243,11,212,28,123,9,43,63,245,105, +44,232,188,31,122,170,34,138,58,155,197,149,87,123,209,191,179,11,133,83, +199,224,212,119,204,172,2,143,229,227,132,12,72,83,41,248,26,166,114,44, +78,230,94,49,218,64,162,215,117,120,20,38,200,72,184,94,176,198,73,23,163, +97,90,148,137,239,252,245,65,52,142,29,199,242,45,219,80,56,251,58,50,187, +158,130,59,52,16,57,105,104,66,213,135,87,163,253,161,109,56,245,179,199, +208,209,56,80,2,160,21,25,200,50,143,9,50,144,97,212,253,25,23,25,71,97, +146,202,206,184,26,50,94,108,78,60,46,26,155,215,132,151,192,77,255,249, +23,214,14,252,29,173,155,191,141,236,158,93,200,239,223,3,76,102,96,164, +171,67,147,115,185,150,231,189,247,119,62,128,246,129,215,208,125,243,226, +149,210,159,140,226,106,85,160,160,18,53,22,14,223,151,134,86,236,236,129, +80,157,189,218,237,131,226,42,30,47,63,164,223,75,86,96,104,203,211,104, +92,127,15,242,135,254,2,111,240,50,180,100,50,218,44,148,150,41,121,215, +8,239,21,254,182,15,139,214,109,196,7,126,255,219,237,188,113,216,136,119, +24,212,84,128,147,231,71,241,202,217,145,105,93,254,29,119,60,4,224,36, +211,88,125,232,0,106,30,124,8,83,71,254,12,197,86,28,176,227,205,94,82, +85,148,198,115,167,177,176,227,35,72,234,218,42,89,8,5,64,48,57,57,241, +242,137,127,30,93,21,20,215,234,210,66,20,237,94,42,146,22,166,178,249, +120,199,1,164,43,146,200,74,221,17,64,222,172,192,234,4,59,104,255,5,54, +40,133,154,23,123,223,113,213,28,223,120,27,212,165,115,69,120,210,249, +145,127,250,209,45,95,227,177,190,108,131,162,62,122,215,134,182,187,63, +255,229,238,156,167,172,91,111,105,197,249,129,145,210,36,75,155,234,112, +188,183,15,149,41,11,139,86,44,3,254,64,41,141,93,97,3,75,94,115,217,14, +159,225,179,44,31,20,53,144,163,93,162,13,150,37,45,185,246,179,95,58,160, +88,70,22,59,71,101,85,26,119,53,55,148,246,129,67,153,44,44,58,247,72,233, +169,190,11,104,147,53,111,108,20,122,117,13,38,55,221,25,54,167,89,185, +147,29,147,116,86,62,227,143,141,197,26,137,34,150,189,121,38,182,226,175, +214,118,28,220,252,158,27,48,49,149,195,153,115,253,232,43,155,80,246,128, +141,245,11,80,153,174,192,43,167,47,34,127,219,199,49,49,126,25,181,13, +245,240,172,100,212,106,103,75,32,124,143,31,51,24,30,27,199,132,235,245, +32,148,230,28,31,31,46,59,93,75,67,13,150,180,52,96,100,124,138,85,226, +148,170,192,98,206,235,106,210,144,229,238,196,171,167,177,127,225,10,84, +191,209,131,250,166,38,70,105,198,155,142,217,91,114,45,162,29,111,14,12, +97,255,224,216,99,60,181,245,57,0,88,213,181,13,67,99,185,224,238,74,150, +212,202,101,45,104,93,210,140,37,55,214,210,234,81,101,25,56,75,86,14,30, +61,142,99,135,246,117,61,251,204,79,127,184,170,38,85,227,230,242,109,45, +55,54,177,107,74,75,231,130,38,235,10,143,122,184,194,82,168,4,112,252, +245,83,56,51,54,185,183,235,181,139,79,210,207,149,185,62,205,82,180,230, +186,198,230,229,235,54,117,126,175,114,65,221,170,104,183,28,81,32,84,78, +142,15,191,188,111,215,147,59,70,254,247,223,139,34,100,73,219,175,62,184, +124,71,107,109,245,250,101,239,93,140,250,122,106,218,136,9,166,38,134, +135,135,113,246,226,37,156,30,205,188,120,127,79,95,151,16,33,105,159,11, +128,112,101,201,164,180,70,90,245,140,111,8,209,205,68,44,220,209,120,44, +159,90,45,247,45,110,188,227,51,77,181,157,117,134,222,126,117,59,10,140, +184,222,201,189,3,163,79,252,250,210,224,17,14,47,75,69,34,108,236,215, +248,16,141,217,176,102,108,152,101,161,43,196,21,84,252,192,148,116,166, +99,208,82,210,149,241,181,112,71,78,155,164,13,199,128,167,226,107,243, +250,58,190,198,55,48,18,49,104,115,122,47,134,29,3,118,202,219,228,255, +5,24,0,238,123,163,24,29,62,142,101,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_21 = 1382; +static unsigned char xml_res_file_21[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, +0,115,122,122,244,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101, +0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101, +60,0,0,5,8,73,68,65,84,120,218,188,87,221,107,28,85,20,255,221,123,247, +35,219,205,182,214,26,65,76,137,77,95,170,144,244,69,13,66,13,81,40,166, +44,125,16,95,20,130,246,161,224,187,208,7,65,124,240,73,168,138,255,64, +177,196,40,197,135,250,17,107,179,20,2,106,181,95,84,209,68,12,213,52,164, +105,83,76,98,83,106,147,184,51,115,239,245,156,59,119,55,187,178,205,206, +34,102,147,147,201,206,204,189,231,55,191,243,59,31,3,108,238,71,76,95, +248,178,184,58,247,67,244,193,145,126,75,223,51,169,205,114,124,169,244, +225,174,71,118,118,126,42,97,122,69,42,13,37,36,159,207,203,77,112,174, +230,127,42,125,178,187,187,107,122,109,233,183,222,185,179,199,96,162,8, +66,8,190,150,110,198,64,234,163,55,6,63,203,101,100,81,210,2,145,208,163, +177,22,65,16,160,187,103,31,186,30,123,10,225,234,45,220,152,248,14,209, +234,50,64,215,140,53,80,42,126,246,102,0,114,217,148,40,190,117,106,141, +130,69,0,18,34,48,198,98,229,239,0,151,15,237,195,181,159,199,113,119,105, +22,66,146,43,50,107,66,88,77,12,200,100,0,218,68,140,2,109,116,103,43,0, +172,77,227,250,247,35,88,43,27,90,199,110,200,33,61,57,253,194,16,0,229, +55,107,6,64,8,43,192,244,51,96,153,16,0,7,75,41,5,75,139,140,224,144,192, +81,15,27,135,71,235,176,162,1,36,200,2,11,73,241,106,5,0,127,248,126,118, +70,207,28,3,0,124,252,233,124,20,186,61,19,1,16,70,130,239,149,210,38,7, +64,247,17,1,68,55,135,194,186,135,175,0,176,158,129,74,8,26,165,97,230, +224,123,176,207,29,197,73,6,40,53,135,64,17,101,178,101,211,4,192,104,235, +52,81,103,77,68,152,215,36,148,254,93,120,254,175,55,177,34,202,202,161, +85,196,64,82,17,114,172,37,209,101,109,3,6,232,71,135,161,211,213,189,24, +72,7,26,120,161,239,117,60,219,139,161,177,194,57,40,155,165,5,41,218,84, +182,96,202,229,187,211,129,55,205,71,206,2,42,68,170,134,129,116,241,29, +44,134,26,219,220,69,66,187,86,166,35,114,24,236,125,17,37,117,2,191,47, +127,3,59,57,0,153,9,9,178,78,34,1,167,25,237,247,51,46,1,4,57,39,86,72, +83,145,11,193,122,22,228,217,249,241,87,143,225,86,249,115,174,156,180, +144,110,176,247,99,98,254,4,14,244,190,12,153,30,198,121,249,53,212,47, +207,208,198,1,237,110,18,132,192,198,34,52,113,8,216,121,247,67,51,232, +216,58,143,185,104,176,210,11,28,128,12,63,249,157,242,2,190,189,242,197, +122,185,21,163,228,24,152,252,99,24,131,61,135,40,109,142,227,162,28,71, +219,212,0,237,30,197,94,54,0,192,89,160,141,113,79,175,173,112,212,63,120, +223,18,134,75,143,98,160,168,171,12,84,53,176,162,231,41,24,112,38,50,100, +124,36,120,150,54,186,242,231,199,120,98,207,30,68,157,55,221,73,167,114, +217,204,84,141,8,125,45,32,159,249,92,26,38,12,156,78,170,89,192,88,86, +237,13,168,44,170,12,88,83,83,80,82,1,46,77,79,33,51,223,233,106,2,152, +62,97,55,46,68,194,23,34,91,209,129,113,44,108,201,166,17,82,33,242,17, +136,25,224,77,67,117,19,217,60,197,99,11,145,144,163,11,153,216,82,109, +192,236,34,112,161,212,69,244,239,39,2,168,182,43,56,10,155,153,246,121, +111,201,179,37,0,11,183,119,224,192,147,63,82,33,138,234,52,192,0,238,30, +29,62,215,206,8,89,48,148,37,120,229,165,56,202,87,175,3,151,199,186,80, +184,186,31,50,27,120,200,178,169,8,149,18,113,231,179,194,237,73,42,192, +212,181,157,56,125,62,143,190,167,203,117,205,40,56,117,4,253,116,220,238, +163,145,30,124,27,167,153,133,95,167,129,197,241,14,20,166,73,181,25,202, +77,105,155,59,175,134,64,212,133,192,161,162,221,219,243,169,184,25,249, +94,192,127,87,200,102,200,38,201,38,248,127,86,240,204,28,80,58,137,175, +6,150,30,135,205,26,206,206,4,194,91,55,22,153,49,53,169,232,45,79,173, +61,34,17,214,246,2,170,46,184,77,182,224,109,153,4,140,51,163,56,123,241, +125,188,171,169,240,240,119,169,68,107,149,144,158,194,152,250,74,200,150, +73,81,143,160,24,75,121,239,118,28,142,190,134,189,254,255,40,146,177,98, +121,65,226,102,200,133,200,54,232,5,126,92,99,6,114,27,52,35,14,201,44, +223,75,86,208,116,112,180,10,139,22,122,17,105,64,186,218,175,27,0,8,117, +176,225,60,16,120,115,51,33,47,86,20,3,102,76,192,38,29,7,40,182,42,110, +197,218,214,173,114,253,134,24,16,169,132,19,17,231,176,139,63,68,107,12, +112,3,226,25,208,254,11,54,51,16,82,29,200,183,48,146,185,210,235,250,153, +77,60,18,113,8,226,46,136,245,145,204,143,134,38,42,83,88,115,201,0,164, +69,68,111,15,138,179,176,133,247,2,94,23,235,38,150,146,168,130,224,131, +99,160,70,132,153,161,161,161,114,195,141,104,225,216,50,171,122,201,127, +75,30,2,109,37,206,204,20,176,35,23,161,179,16,34,159,50,136,135,99,206, +130,114,117,34,114,3,201,200,200,200,110,158,11,26,17,224,207,103,254,235, +251,217,3,219,114,185,195,197,158,131,15,119,180,247,109,47,96,111,165, +27,10,191,121,222,59,251,223,94,78,253,254,237,100,91,201,168,229,225,14, +87,93,129,205,251,40,255,176,89,15,134,167,154,149,127,4,24,0,227,17,114, +29,252,169,144,138,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_22 = 113420; +static unsigned char xml_res_file_22[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,33,45,45, 32,104,116,116,112,58,47,47,100,111,99,115,46,119,120,119,105,100,103,101, @@ -287,114 +1460,122 @@ static unsigned char xml_res_file_7[] = { 61,34,50,46,53,46,51,46,48,34,62,10,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101, 61,34,66,73,84,77,65,80,95,72,65,82,68,68,73,83,75,34,62,119,120,45,114, -101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,100, -114,105,118,101,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, -109,97,112,34,32,110,97,109,101,61,34,66,73,84,77,65,80,95,70,76,79,80, -80,89,34,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112, -36,105,99,111,110,115,95,100,105,115,107,46,112,110,103,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,66,73,84,77, -65,80,95,67,68,82,79,77,34,62,119,120,45,114,101,115,111,117,114,99,101, -115,46,99,112,112,36,105,99,111,110,115,95,99,100,46,112,110,103,60,47, -111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,84,111,111,108,66,97,114,34,32,110,97,109,101,61, -34,116,111,111,108,95,98,97,114,34,62,10,32,32,32,32,60,115,116,121,108, -101,62,119,120,84,66,95,70,76,65,84,124,119,120,84,66,95,78,79,68,73,86, -73,68,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101, -61,34,84,79,79,76,66,65,82,95,82,85,78,34,62,10,32,32,32,32,32,32,60,98, -105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46, -99,112,112,36,105,99,111,110,115,95,112,108,97,121,50,52,46,112,110,103, +101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49, +54,120,49,54,95,100,114,105,118,101,46,112,110,103,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,66,73,84,77,65, +80,95,70,76,79,80,80,89,34,62,119,120,45,114,101,115,111,117,114,99,101, +115,46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95,100,105,115, +107,101,116,116,101,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, +109,97,112,34,32,110,97,109,101,61,34,66,73,84,77,65,80,95,67,68,82,79, +77,34,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36, +105,99,111,110,115,95,49,54,120,49,54,95,99,100,46,112,110,103,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,84,111,111,108,66,97,114,34,32,110,97,109,101,61,34,116, +111,111,108,95,98,97,114,34,62,10,32,32,32,32,60,115,116,121,108,101,62, +119,120,84,66,95,70,76,65,84,124,119,120,84,66,95,78,79,68,73,86,73,68, +69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61, +34,84,79,79,76,66,65,82,95,82,85,78,34,62,10,32,32,32,32,32,32,60,98,105, +116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112, +112,36,105,99,111,110,115,95,50,52,120,50,52,95,112,108,97,121,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,82,117,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,84,79,79,76,66, +65,82,95,80,65,85,83,69,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97, +112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105, +99,111,110,115,95,50,52,120,50,52,95,112,97,117,115,101,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,82,117,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +62,80,97,117,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,84,79,79,76, +66,65,82,95,83,84,79,80,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97, +112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105, +99,111,110,115,95,50,52,120,50,52,95,115,116,111,112,46,112,110,103,60, +47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,116,111,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,84,79,79,76,66,65, -82,95,80,65,85,83,69,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, +82,95,82,69,83,69,84,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, 62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99, -111,110,115,95,112,97,117,115,101,50,52,46,112,110,103,60,47,98,105,116, -109,97,112,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,117,115, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116, -111,111,108,34,32,110,97,109,101,61,34,84,79,79,76,66,65,82,95,83,84,79, -80,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114, -101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,115, -116,111,112,50,52,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,116,111,112,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, -110,97,109,101,61,34,84,79,79,76,66,65,82,95,82,69,83,69,84,34,62,10,32, -32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117, -114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,114,101,102,114,101, -115,104,50,52,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,72,97,114,100,32,114,101,115,101,116,60, -47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,105,100,115,45,114,97, -110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,83,34,32, -115,116,97,114,116,61,34,49,48,48,48,34,47,62,10,32,32,60,105,100,115,45, -114,97,110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,83, -95,77,79,68,69,34,32,115,116,97,114,116,61,34,49,49,48,48,34,47,62,10,32, -32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73,68,77, -95,86,73,68,95,83,67,65,76,69,34,32,115,116,97,114,116,61,34,49,50,48,48, -34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101, -61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,95,77,79,68,69,34,32,115,116, -97,114,116,61,34,49,51,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97, -110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,78,68, -69,82,95,68,82,73,86,69,82,34,32,115,116,97,114,116,61,34,49,52,48,48,34, +111,110,115,95,50,52,120,50,52,95,114,101,102,114,101,115,104,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,97,114,100,32,114,101,115,101,116,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109, +101,61,34,73,68,77,95,83,67,82,69,69,78,83,72,79,84,95,70,79,82,77,65,84, +34,32,115,116,97,114,116,61,34,57,53,48,34,47,62,10,32,32,60,105,100,115, +45,114,97,110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70, +83,34,32,115,116,97,114,116,61,34,49,48,48,48,34,47,62,10,32,32,60,105, +100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73, +68,95,70,83,95,77,79,68,69,34,32,115,116,97,114,116,61,34,49,49,48,48,34, 47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61, -34,73,68,77,95,83,78,68,95,66,85,70,34,32,115,116,97,114,116,61,34,50,48, -48,48,34,47,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,66,97,114,34,32,110,97,109,101,61,34,115,116, -97,116,117,115,95,109,101,110,117,34,62,10,32,32,32,32,60,111,98,106,101, +34,73,68,77,95,86,73,68,95,83,67,65,76,69,34,32,115,116,97,114,116,61,34, +49,50,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110, +97,109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,95,77,79,68,69, +34,32,115,116,97,114,116,61,34,49,51,48,48,34,47,62,10,32,32,60,105,100, +115,45,114,97,110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73,68, +95,82,69,78,68,69,82,95,68,82,73,86,69,82,34,32,115,116,97,114,116,61,34, +49,52,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110, +97,109,101,61,34,73,68,77,95,83,78,68,95,66,85,70,34,32,115,116,97,114, +116,61,34,50,48,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103, +101,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78,80, +85,84,95,83,84,82,69,84,67,72,34,32,115,116,97,114,116,61,34,51,48,48,48, +34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101, +61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,67,65,76, +69,34,32,115,116,97,114,116,61,34,51,49,48,48,34,47,62,10,32,32,60,105, +100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73,68,77,95,86,73, +68,95,71,76,51,95,83,72,65,68,69,82,95,82,69,70,82,69,83,72,95,82,65,84, +69,34,32,115,116,97,114,116,61,34,51,50,48,48,34,47,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,66, +97,114,34,32,110,97,109,101,61,34,115,116,97,116,117,115,95,109,101,110, +117,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,95,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,68, +73,83,67,95,65,67,84,73,86,73,84,89,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,105,115,99,32,97,99,116,105,118,105,116,121,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,65,67,72,73,78,69,95, +77,79,85,78,84,95,80,65,84,72,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,77,111,117,110,116,32,112,97,116,104,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,77,95,83,72,79,87,95,83,84,65,84,85,83,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,116,117, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,80,69,69,68,95, +72,73,83,84,79,82,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,112,101,101,100,32,104,105,115,116,111,114,121,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +83,72,79,87,95,77,65,67,72,73,78,69,95,79,78,95,83,84,65,82,84,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,111,110, +32,115,116,97,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,95,79,112,116,105,111,110,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,77,95,68,73,83,67,95,65,67,84,73,86,73,84,89,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,99,32,97, -99,116,105,118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -77,65,67,72,73,78,69,95,77,79,85,78,84,95,80,65,84,72,83,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,117,110,116,32,112,97, -116,104,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,72,79,87,95, -83,84,65,84,85,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,116,97,116,117,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -83,80,69,69,68,95,72,73,83,84,79,82,89,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,112,101,101,100,32,104,105,115,116,111,114,121, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,83,72,79,87,95,77,65,67,72,73,78,69,95,79,78,95,83, -84,65,82,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -104,111,119,32,111,110,32,115,116,97,114,116,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,95,67,111,110, -102,105,103,117,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,79,78,70,73, -71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97,99,104, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,72,68,67,79,78,70,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,95,72,97,114,100,32,100,105,115,99,115,60,47,108, +32,32,32,32,60,108,97,98,101,108,62,95,67,111,110,102,105,103,117,114,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,67,79,78,70,73,71,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,77,97,99,104,105,110,101,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32, @@ -428,2278 +1609,4618 @@ static unsigned char xml_res_file_7[] = { 83,69,84,95,67,65,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,95,67,116,114,108,43,65,108,116,43,68,101,108,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,95,68,105,115,99,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,68,73,83,67,95,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,104,97,110,103,101,32,100,114,105,118,101,32,95,65,58,46, -46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,68,73,83,67,95,66,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,104,97,110,103,101,32,100,114,105,118,101,32,95, -66,58,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,77,95,69,74,69,67,84,95,65,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,95,69,106,101,99,116,32,100,114,105,118, -101,32,65,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,77,95,69,74,69,67,84,95,66,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,69,106,101,99,116,32,100,114,105,118,101, -32,66,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66,80,66, -95,68,73,83,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,68,105,115,97,98,108,101,32,66,80,66,32,99,104,101,99,107,105,110, -103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -77,95,67,68,82,79,77,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -95,67,68,45,82,79,77,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,68,82,79,77,95, -73,77,65,71,69,95,76,79,65,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,95,76,111,97,100,32,105,109,97,103,101,46,46,46,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,77,95,70,73,76,69,95,69,88,73,84,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,83,104,117,116,100,111, +119,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,95,68,105,115,99, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,68,73,83,67,95,65,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,100,114,105, +118,101,32,95,65,58,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,77,95,67,68,82,79,77,95,68,73,83,65, -66,76,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, -68,105,115,97,98,108,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,68,82,79,77,95, -69,77,80,84,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -95,69,109,112,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,68,82,79,77,95,73,77, -65,71,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,73, -109,97,103,101,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,86,105,100,101,111,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86, -73,68,95,82,69,83,73,90,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,82,101,115,105,122,97,98,108,101,32,119,105,110,100,111,119, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,77, -69,77,66,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,101,109,101,109,98,101,114,32,115,105,122,101,32,38,97,109,112,59,38, -97,109,112,59,32,112,111,115,105,116,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86, -73,68,95,70,85,76,76,83,67,82,69,69,78,95,84,79,71,71,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,111,103,103,108,101,32, -102,117,108,108,115,99,114,101,101,110,92,116,67,116,114,108,43,65,108, -116,43,80,97,103,101,68,111,119,110,60,47,108,97,98,101,108,62,10,32,32, +109,34,32,110,97,109,101,61,34,73,68,77,95,68,73,83,67,95,66,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,100, +114,105,118,101,32,95,66,58,46,46,46,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,85,76, -76,83,67,82,69,69,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,70,117,108,108,115,99,114,101,101,110,32,111,110,32,105,110,112, -117,116,32,103,114,97,98,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,69,74,69,67,84,95,65, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,69,106,101, +99,116,32,100,114,105,118,101,32,65,58,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,69,74,69,67,84,95,66, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,106,101,99, +116,32,100,114,105,118,101,32,66,58,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,66,80,66,95,68,73,83,65,66,76,69,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,97,98,108,101,32,66,80, +66,32,99,104,101,99,107,105,110,103,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,77,95,67,68,82,79,77,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,95,67,68,45,82,79,77,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,67,68,82,79,77,95,73,77,65,71,69,95,76,79,65,68,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,76,111,97,100,32,105,109, +97,103,101,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,116,114,101,116,99,104,32,109,111,100,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +67,68,82,79,77,95,68,73,83,65,66,76,69,68,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,95,68,105,115,97,98,108,101,100,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, +47,114,97,100,105,111,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,67,68,82,79,77,95,69,77,80,84,89,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,95,69,109,112,116,121,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97, +100,105,111,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +67,68,82,79,77,95,73,77,65,71,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,95,73,109,97,103,101,46,46,46,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97, +100,105,111,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,86,105,100,101,111,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,86,73,68,95,70,83,91,48,93,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,95,78,111,110,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, -47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,86,73,68,95,70,83,91,49,93,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,95,52,58,51,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, -47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,86,73,68,95,70,83,91,50,93,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,95,83,113,117,97,114,101,32,112, -105,120,101,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +34,73,68,77,95,86,73,68,95,82,69,83,73,90,69,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,82,101,115,105,122,97,98,108,101,32,119,105, +110,100,111,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73, +68,95,82,69,77,69,77,66,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,109,101,109,98,101,114,32,115,105,122,101,32,38,97, +109,112,59,38,97,109,112,59,32,112,111,115,105,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,86,73,68,95,70,85,76,76,83,67,82,69,69,78,95,84,79,71,71,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,111,103, +103,108,101,32,102,117,108,108,115,99,114,101,101,110,92,116,67,116,114, +108,43,65,108,116,43,80,97,103,101,68,111,119,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70, +85,76,76,83,67,82,69,69,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,70,117,108,108,115,99,114,101,101,110,32,111,110,32,105,110, +112,117,116,32,103,114,97,98,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,117,108,108,115, +99,114,101,101,110,32,109,111,100,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,86,73,68,95,70,83,95,77,79,68,69,91,48,93,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,95,66,111,114,100,101,114,108,101, +115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,83,95, +77,79,68,69,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,95,69,120,99,108,117,115,105,118,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114, +97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,78,68,69,82, +95,68,82,73,86,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,95,82,101,110,100,101,114,32,100,114,105,118,101,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,86,73,68,95,82,69,78,68,69,82,95,68,82,73,86, +69,82,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,117,116,111,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68, -95,70,83,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,95,73,110,116,101,103,101,114,32,115,99,97,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62, -49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,99,97,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,83, -67,65,76,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,48,46,53,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73, -68,95,83,67,65,76,69,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86, -73,68,95,83,67,65,76,69,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,49,46,53,120,60,47,108,97,98,101,108,62,10,32,32, +95,82,69,78,68,69,82,95,68,82,73,86,69,82,91,49,93,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,114,101,99,116,51,68,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,78,68,69,82,95, +68,82,73,86,69,82,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,79,112,101,110,71,76,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100, +105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,86,73,68,95,82,69,78,68,69,82,95,68,82,73,86,69,82,91,54,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101, +110,71,76,32,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68, +95,82,69,78,68,69,82,95,68,82,73,86,69,82,91,53,93,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,111,102,116,119,97,114,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,86,73,68,95,86,83,89,78,67,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,95,86,83,121,110,99,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,86,73,68,95,76,79,83,84,95,70,79,67,85,83,95,68,73, +77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,68,105,109, +32,100,105,115,112,108,97,121,32,111,110,32,108,111,115,116,32,102,111, +99,117,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,99,97,108,101,32,102,105,108,116,101, +114,105,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,83,67, +65,76,69,95,77,79,68,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,95,78,101,97,114,101,115,116,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, +47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,95,77,79,68,69,91,49,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,76,105, +110,101,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,79,117,116,112,117,116,32,115,116,114, +101,116,99,104,45,109,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,70,83,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,95,78,111,110,101,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105, 111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -77,95,86,73,68,95,83,67,65,76,69,91,51,93,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,50,120,60,47,108,97,98,101,108,62,10,32, +77,95,86,73,68,95,70,83,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,95,52,58,51,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105, +111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,86,73,68,95,70,83,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,95,83,113,117,97,114,101,32,112,105,120,101,108, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114, +97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,83,91,51, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,73, +110,116,101,103,101,114,32,115,99,97,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114, +97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116, +112,117,116,32,115,99,97,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,83,67,65,76,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,48,46,53,120,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100, 105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,70,117,108,108,115,99,114,101,101,110,32, -109,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,70,83, -95,77,79,68,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,95,66,111,114,100,101,114,108,101,115,115,60,47,108,97,98, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,86,73,68,95,83,67,65,76,69,91,49,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,49,120,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97, +100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,86,73,68,95,83,67,65,76,69,91,50,93,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,46,53,120,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, +47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,91,51,93,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,120,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49, 60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,77,95,86,73,68,95,70,83,95,77,79,68,69,91,49,93,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,69,120,99, -108,117,115,105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,76,79,83,84,95,70,79, -67,85,83,95,68,73,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,95,68,105,109,32,100,105,115,112,108,97,121,32,111,110,32,108,111, -115,116,32,102,111,99,117,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,99,97,108,101,32,102,105,108,116,101,114,105,110,103,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,95,77,79,68,69, -91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -95,78,101,97,114,101,115,116,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -86,73,68,95,83,67,65,76,69,95,77,79,68,69,91,49,93,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,95,76,105,110,101,97,114,60,47, +109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,91,52,93,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,46,53,120,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105, 111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,77,95,86,73, -68,95,82,69,78,68,69,82,95,68,82,73,86,69,82,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,95,82,101,110,100,101,114,32,100,114,105, -118,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,78, -68,69,82,95,68,82,73,86,69,82,91,48,93,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,65,117,116,111,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114, -97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,86,73,68,95,82,69,78,68,69,82,95,68,82,73,86,69,82,91,49, -93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105, -114,101,99,116,51,68,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,91,53,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,120,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76,69,91,54, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,46, +53,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114, +97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,83,67,65,76, +69,91,55,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,52,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76, +51,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101, +110,71,76,32,51,46,48,32,114,101,110,100,101,114,101,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,73,110,112,117,116,32,115,116,114,101,116, +99,104,45,109,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,84,82,69,84,67,72,91,48,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, +78,111,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,84,82,69,84,67,72,91,49,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, +52,58,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86, +73,68,95,71,76,51,95,73,78,80,85,84,95,83,84,82,69,84,67,72,91,50,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,83, +113,117,97,114,101,32,112,105,120,101,108,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47, +114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78,80,85,84, +95,83,84,82,69,84,67,72,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,95,73,110,116,101,103,101,114,32,115,99,97, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,112, +117,116,32,115,99,97,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,67,65,76,69,91,48,93,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,53, +120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68, -95,82,69,78,68,69,82,95,68,82,73,86,69,82,91,50,93,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101,110,71,76,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111, -62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111, +95,71,76,51,95,73,78,80,85,84,95,83,67,65,76,69,91,49,93,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,120,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105, +111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51, +95,73,78,80,85,84,95,83,67,65,76,69,91,50,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,49,46,53,120,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111, +62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78, +80,85,84,95,83,67,65,76,69,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,50,120,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114, +97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78,80,85,84,95, +83,67,65,76,69,91,52,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,50,46,53,120,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100, +105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,67,65, +76,69,91,53,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,86,73,68,95,71,76,51,95,73,78,80,85,84,95,83,67,65,76,69,91,54,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +46,53,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86, +73,68,95,71,76,51,95,73,78,80,85,84,95,83,67,65,76,69,91,55,93,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,120,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,100,101,114,32,114, +101,102,114,101,115,104,32,114,97,116,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,77,95,86,73,68,95,71,76,51,95,83,72,65,68,69,82,95,82,69,70,82, +69,83,72,95,82,65,84,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,109,101,32,97,115,32,101,109,117,108, +97,116,101,100,32,100,105,115,112,108,97,121,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47, +114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,86,73,68,95,82,69,78,68,69,82,95,68,82, -73,86,69,82,91,53,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,111,102,116,119,97,114,101,60,47,108,97,98,101,108,62,10, +110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,83,72,65,68,69, +82,95,82,69,70,82,69,83,72,95,82,65,84,69,91,49,48,93,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,32,104,122,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97, +100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76, +51,95,83,72,65,68,69,82,95,82,69,70,82,69,83,72,95,82,65,84,69,91,50,53, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +50,53,32,104,122,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +77,95,86,73,68,95,71,76,51,95,83,72,65,68,69,82,95,82,69,70,82,69,83,72, +95,82,65,84,69,91,51,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,51,48,32,104,122,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114, +97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,83,72,65,68,69,82, +95,82,69,70,82,69,83,72,95,82,65,84,69,91,53,48,93,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,48,32,104,122,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,71,76,51, +95,83,72,65,68,69,82,95,82,69,70,82,69,83,72,95,82,65,84,69,91,54,48,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54, +48,32,104,122,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,71,76,51,95,83,72,65,68,69,82,95,82,69,70,82,69,83,72,95,82, +65,84,69,91,55,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,50,32,104,122,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100, +105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,86,73,68,95,71,76,51,95,83,72,65,68,69,82,95,82,69, +70,82,69,83,72,95,82,65,84,69,91,56,53,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,56,53,32,104,122,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111, +62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +86,73,68,95,71,76,51,95,83,72,65,68,69,82,95,77,65,78,65,71,69,82,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,100, +101,114,32,109,97,110,97,103,101,114,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +111,117,110,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,66,117,102,102, +101,114,32,108,101,110,103,116,104,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +83,78,68,95,66,85,70,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,95,53,48,32,109,115,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97, 100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,86,73,68,95,86, -83,89,78,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, -86,83,121,110,99,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,111,117,110,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,95,66,117,102,102,101,114,32,108,101,110,103,116,104,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,83,78,68,95,66,85,70,91,48,93,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,53,48,32,109,115, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,83,78,68,95,66,85,70,91,49,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,95,49,48,48,32,109,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49, +60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,83,78,68,95,66,85,70,91,50,93,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,50,48,48,32,109,115, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,114,97,100, 105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,83,78,68,95,66,85,70,91,49,93,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,49,48,48, +34,32,110,97,109,101,61,34,73,68,77,95,83,78,68,95,66,85,70,91,51,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,52,48,48, 32,109,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,78,68,95,66,85, -70,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,95,50,48,48,32,109,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83, -78,68,95,66,85,70,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,95,52,48,48,32,109,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100, -105,111,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,84,65,84,85, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,95,77,97,99,104,105, -110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,105,115, +99,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,95,83,99,114,101,101,110,115,104, +111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,82,69,69,78,83,72, +79,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, +84,97,107,101,32,115,99,114,101,101,110,115,104,111,116,92,116,67,116,114, +108,43,65,108,116,43,80,97,103,101,85,112,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,95,70,111,114,109,97,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +83,67,82,69,69,78,83,72,79,84,95,70,79,82,77,65,84,91,48,93,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,78,71,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100, +105,111,62,49,60,47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,70,73,76,69,95,69,88, -73,84,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,95,83,116,111, -112,32,101,109,117,108,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,82,69,69,78,83, +72,79,84,95,70,79,82,77,65,84,91,49,93,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,84,73,70,70,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60, +47,114,97,100,105,111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,77,95,83,67,82,69,69,78,83,72,79,84,95,70, +79,82,77,65,84,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,77,80,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105, +111,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,83,67,82,69,69,78,83,72,79,84,95,70,79,82,77,65,84,91, +51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,74,80,71,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,114,97,100,105,111,62,49,60,47,114,97,100,105,111,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,82,69,69,78,83, +72,79,84,95,70,76,65,83,72,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,70,108,97,115,104,32,115,99,114,101,101,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,83,84,65,84,85,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,95,77,97,99,104,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,67,111,110,102, -105,103,117,114,101,68,108,103,34,62,10,32,32,32,32,60,116,105,116,108, -101,62,67,111,110,102,105,103,117,114,101,32,80,67,101,109,60,47,116,105, -116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, -47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109, -101,61,34,82,79,79,84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, -120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, -118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97, -112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,33,45,45,32,109,97,99,104,105,110,101,32,45,45,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, -84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,77,97,99,104,105,110,101,58,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32, +99,116,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101, +61,34,73,68,67,95,80,65,78,69,76,34,32,115,116,97,114,116,61,34,49,48,34, +47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61, +34,73,68,67,95,72,68,68,34,32,115,116,97,114,116,61,34,49,48,48,34,47,62, +10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73, +68,67,95,67,68,82,79,77,34,32,115,116,97,114,116,61,34,50,48,48,34,47,62, +10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73, +68,67,95,69,68,73,84,95,70,78,34,32,115,116,97,114,116,61,34,51,48,48,34, +47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61, +34,73,68,67,95,70,73,76,69,34,32,115,116,97,114,116,61,34,52,48,48,34,47, +62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34, +73,68,67,95,69,74,69,67,84,34,32,115,116,97,114,116,61,34,53,48,48,34,47, +62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34, +73,68,67,95,78,69,87,34,32,115,116,97,114,116,61,34,54,48,48,34,47,62,10, +32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61,34,73,68, +67,95,69,68,73,84,95,83,80,84,34,32,115,116,97,114,116,61,34,55,48,48,34, +47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97,109,101,61, +34,73,68,67,95,69,68,73,84,95,72,80,67,34,32,115,116,97,114,116,61,34,56, +48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110,97, +109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,34,32,115,116,97,114, +116,61,34,57,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101, +32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83,73,90,69,34,32,115, +116,97,114,116,61,34,49,48,48,48,34,47,62,10,32,32,60,105,100,115,45,114, +97,110,103,101,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66, +69,76,34,32,115,116,97,114,116,61,34,49,49,48,48,34,47,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,67,111,110,102,105,103,117,114,101,68,108, +103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,68,69,70,65, +85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69,60,47,115,116,121,108,101, +62,10,32,32,32,32,60,116,105,116,108,101,62,67,111,110,102,105,103,117, +114,101,32,80,67,101,109,60,47,116,105,116,108,101,62,10,32,32,32,32,60, +99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,82,79,79,84,95,80,65,78, +69,76,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111, +119,115,62,10,32,32,32,32,32,32,32,32,60,99,111,108,115,62,49,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60, +47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,99,111,108,115,47,62,10,32,32,32,32,32,32,32,32,60,103,114,111, +119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,78,111, +116,101,98,111,111,107,34,32,110,97,109,101,61,34,73,68,67,95,78,79,84, +69,66,79,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,78,66,95,68,69,70,65,85,76,84,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103, +101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101, +99,116,101,100,62,49,60,47,115,101,108,101,99,116,101,100,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45, +114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115, +95,51,50,120,51,50,95,109,111,116,104,101,114,98,111,97,114,100,46,112, +110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,84,65,66,95,84,82,65,86,69,82,83,65, +76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114, +111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104, +103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108, +115,62,49,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,97,99,104,105,110,101,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101, 61,34,73,68,67,95,67,79,77,66,79,49,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79, -80,68,79,87,78,32,124,32,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,67,95,67,79,78,70,73,71,85,82,69,77,79,68,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,102, -105,103,117,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82,69, +65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,33,45,45,32,118,105,100,101,111,32,45,45,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,85,82,69,77,79,68,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115, +46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95,115,101,116,116, +105,110,103,95,116,111,111,108,115,46,112,110,103,60,47,98,105,116,109, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, 105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,86,105,100,101,111,58,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97, -109,101,61,34,73,68,67,95,67,79,77,66,79,86,73,68,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95,82,69,65,68,79, -78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,73,68,67,95,67,79,78,70,73,71,85,82,69,86,73,68,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -110,102,105,103,117,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,33,45,45,32,118,105,100,101,111,32,115,112,101, -101,100,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,100,101,111,32,115, -112,101,101,100,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, -111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79, -77,66,79,83,80,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32, -124,32,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,33,45,45,32,99,112,117,32,116,121,112,101,32,45,45, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,80,85,32,116,121,112,101,58, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120, -34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79,67,80,85,77,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95, -82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -33,45,45,32,99,112,117,32,116,121,112,101,32,45,45,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, -84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,80,85,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67, -79,77,66,79,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124, -32,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,33,45,45,32,100,121,110,97,109,105,99,32,114,101,99,111, -109,112,105,108,101,114,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, -109,101,61,34,73,68,67,95,67,72,69,67,75,68,89,78,65,82,69,67,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -68,121,110,97,109,105,99,32,82,101,99,111,109,112,105,108,101,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,33,45,45,32,119,97,105,116,115,116,97,116,101,115,32, -45,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,97,105,116,115,116,97,116, -101,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109, -98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79, -87,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120, -67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,33,45,45,32,115,111,117,110,100,32,99,97,114,100,32,45,45,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,111,117,110,100,32,99,97,114, -100,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,80,85,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111, -66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79,83,78, -68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120, -67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61, +34,73,68,67,95,67,79,77,66,79,67,80,85,77,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95, +82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,49,50,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, +108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111, +120,34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79,51,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124, +119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,50,50,48,44,45,49,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110, +116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48, +44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,85, -82,69,83,78,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,110,102,105,103,117,114,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,72, -68,68,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,68,68,58,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110, -97,109,101,61,34,73,68,67,95,67,79,77,66,79,72,68,68,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95,82,69,65,68, -79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45, -32,70,68,68,49,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,68,68,49, -58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79,68,82,65,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95, -82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -33,45,45,32,70,68,68,50,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,70,68,68,50,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, -111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79, -77,66,79,68,82,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32, -124,32,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,33,45,45,32,109,101,109,111,114,121,32,45,45,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,77,101,109,111,114,121,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,112,105,110,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,77,69,77,83,80,73,78, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,83,80,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,83,80,95,65,82,82,79,87,95,75,69,89,83,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, -97,108,117,101,62,53,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,49,48,60,47, -109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,109,97,120,62,50,48,48,60,47,109,97,120,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, 76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,77,66,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,77,66,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,33,45,45,32,109,111,117,115,101,32,45,45,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,77,111,117,115,101,58,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110, -97,109,101,61,34,73,68,67,95,67,79,77,66,79,77,79,85,83,69,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,33, -45,45,32,84,79,68,79,58,32,106,111,121,115,116,105,99,107,32,45,45,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,99,109,115,32,47,32, -103,97,109,101,32,98,108,97,115,116,101,114,32,45,45,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,51,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -77,83,32,47,32,71,97,109,101,32,66,108,97,115,116,101,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,33,45,45,32,71,114,97,118,105,115,32,85,108,116,114,97,115, -111,117,110,100,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73, -68,67,95,67,72,69,67,75,71,85,83,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,97,118,105,115,32,85,108, -116,114,97,115,111,117,110,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,73,110,110, -111,118,97,116,105,111,110,32,83,83,73,45,50,48,48,49,32,45,45,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, 99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75, -83,83,73,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,73,110,110,111,118,97,116,105,111,110,32,83,83,73,45,50, -48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +68,89,78,65,82,69,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,121,110,97,109,105,99, +32,114,101,99,111,109,112,105,108,101,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,69,110,97,98,108,101,32,116, -105,109,101,32,115,121,110,99,32,45,45,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, -109,101,61,34,73,68,67,95,67,72,69,67,75,83,89,78,67,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,121,110, -99,104,114,111,110,105,115,101,32,116,105,109,101,32,116,111,32,104,111, -115,116,32,99,108,111,99,107,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,86,111,111, -100,111,111,32,71,114,97,112,104,105,99,115,32,45,45,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,86,79,79,68,79, -79,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,86,111,111,100,111,111,32,71,114,97,112,104,105,99,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,67,79,78,70,73,71,85,82,69,86,79,79,68,79,79,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,102, -105,103,117,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,109,111,114,121,58,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47, +111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,112,105,110,67,116,114,108,34,32,110, +97,109,101,61,34,73,68,67,95,77,69,77,83,80,73,78,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,83,80,95,65,82,82,79,87,95,75,69,89,83,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118, +97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,109,105,110,62,48,60,47,109,105,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,109,97,120,62,49,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,77,66,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,66,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,49,60,47,100, -101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, -67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,87,97,105,116,115,116,97,116,101,115,58,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,67,79,77,66,79,87,83,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120, +67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48, +44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, +99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75, +83,89,78,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,121,110,99,104,114,111,110,105, +122,101,32,116,105,109,101,32,116,111,32,104,111,115,116,32,99,108,111, +99,107,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112, +97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101, +108,101,99,116,101,100,62,48,60,47,115,101,108,101,99,116,101,100,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,51,50,120,51,50,95,118,105,100,101,111,95,109,111,100,101,46,112, +110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,84,65,66,95,84,82,65,86,69,82,83,65, +76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114, +111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104, +103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108, +115,62,49,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,68,101,118,105,99,101,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61, +34,73,68,67,95,67,79,77,66,79,86,73,68,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82, +69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, +108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,85,82,69,86,73,68,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115, +46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95,115,101,116,116, +105,110,103,95,116,111,111,108,115,46,112,110,103,60,47,98,105,116,109, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,112,101,101,100,58,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,67,79,77,66,79,83,80,68,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67, +66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,67,72,69,67,75,86,79,79,68,79,79,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,86,111,111,100,111,111,32,71,114,97,112,104, +105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,67,95,67,79,78,70,73,71,85,82,69,86,79,79,68,79,79,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, +116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112, +112,36,105,99,111,110,115,95,49,54,120,49,54,95,115,101,116,116,105,110, +103,95,116,111,111,108,115,46,112,110,103,60,47,98,105,116,109,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116, +101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,101,108,101,99,116,101,100,62,48,60,47,115,101,108,101, +99,116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, +116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112, +112,36,105,99,111,110,115,95,51,50,120,51,50,95,115,111,117,110,100,46, +112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,84,65,66,95,84,82,65,86,69,82,83, +65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60, +47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118, +103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111, +108,115,62,49,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119, +97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47, +111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,68,101,118,105,99,101,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61, +34,73,68,67,95,67,79,77,66,79,83,78,68,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82, +69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, +108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,85,82,69,83,78,68,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115, +46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95,115,101,116,116, +105,110,103,95,116,111,111,108,115,46,112,110,103,60,47,98,105,116,109, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99, +107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,51, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,77,83,32,47,32,71,97,109,101,32,66,108,97, +115,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,67,72,69,67,75,71,85,83,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,71,114,97,118,105,115,32,85,108,116,114,97,115,111,117,110,100,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110, +62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67, +95,67,72,69,67,75,83,83,73,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,110,111,118, +97,116,105,111,110,32,83,83,73,45,50,48,48,49,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,105,100,115,45,114,97,110, -103,101,32,110,97,109,101,61,34,73,68,67,95,80,65,78,69,76,34,32,115,116, -97,114,116,61,34,49,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103, -101,32,110,97,109,101,61,34,73,68,67,95,72,68,68,34,32,115,116,97,114,116, -61,34,49,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32, -110,97,109,101,61,34,73,68,67,95,67,68,82,79,77,34,32,115,116,97,114,116, -61,34,50,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32, -110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,34,32,115,116,97, -114,116,61,34,51,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103, -101,32,110,97,109,101,61,34,73,68,67,95,70,73,76,69,34,32,115,116,97,114, -116,61,34,52,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101, -32,110,97,109,101,61,34,73,68,67,95,69,74,69,67,84,34,32,115,116,97,114, -116,61,34,53,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101, -32,110,97,109,101,61,34,73,68,67,95,78,69,87,34,32,115,116,97,114,116,61, -34,54,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101,32,110, -97,109,101,61,34,73,68,67,95,69,68,73,84,95,83,80,84,34,32,115,116,97,114, -116,61,34,55,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110,103,101, -32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72,80,67,34,32,115,116, -97,114,116,61,34,56,48,48,34,47,62,10,32,32,60,105,100,115,45,114,97,110, -103,101,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,34, -32,115,116,97,114,116,61,34,57,48,48,34,47,62,10,32,32,60,105,100,115,45, -114,97,110,103,101,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83, -73,90,69,34,32,115,116,97,114,116,61,34,49,48,48,48,34,47,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,72,100,67,111,110,102,68,108,103,34, -62,10,32,32,32,32,60,116,105,116,108,101,62,67,111,110,102,105,103,117, -114,101,32,72,97,114,100,32,68,105,115,99,115,60,47,116,105,116,108,101, -62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, -110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61, -34,82,79,79,84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101, +98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,101,108,101,99,116,101,100,62,48,60,47,115,101,108,101, +99,116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, +116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112, +112,36,105,99,111,110,115,95,51,50,120,51,50,95,100,114,105,118,101,46, +112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,80,65,78,69,76,95,68,82, +73,86,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,84,65,66,95,84,82,65,86,69,82,83,65,76,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, +101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111, +119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,111,108,115,62,49,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104, +103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108, +115,62,48,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60, +47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114, +111,119,97,98,108,101,99,111,108,115,62,49,60,47,103,114,111,119,97,98, +108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111,119,115, +47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,56,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,72,68,68,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73, +68,67,95,67,79,77,66,79,72,68,68,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67, +66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,70,68,68,49,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47, +111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120, +34,32,110,97,109,101,61,34,73,68,67,95,67,79,77,66,79,68,82,65,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80, +68,79,87,78,124,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,53,48,44,45, +49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, +45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,68,68, +50,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60, +47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79, +77,66,79,68,82,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82,69,65, +68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116, +101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,32,124,32,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,76,105,110,101,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,32,124,32,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,67,104,111,105,99,101,98,111,111,107,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,67,72,66,95,68,69,70,65,85,76,84,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,99,104,111, +105,99,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,114,105,118,101,32,49,32,40,67,58,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,101,108,101,99,116,101,100,62,49,60,47,115,101,108,101,99,116,101, +100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80, +97,110,101,108,34,32,110,97,109,101,61,34,73,68,67,95,80,65,78,69,76,91, +48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,65,66,95,84,82, +65,86,69,82,83,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60, +47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111, +108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,50,60,47,103, +114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114, +111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,55,53,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,121,112,101,58,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, +68,67,95,72,68,68,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,97,114,100,32,100,114,105,118,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47, +118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,67,95,67,68,82,79,77,91,48,93,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,68,45,82,79,77,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48, +60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,78,69,87, +91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,78,101,119,60,47,116,111,111,108,116,105,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114, +101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49, +54,120,49,54,95,100,114,105,118,101,95,97,100,100,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101, +102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,67,95,70,73,76,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116, +111,111,108,116,105,112,62,66,114,111,119,115,101,60,47,116,111,111,108, +116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,49,54,120,49,54,95,102,111,108,100,101,114,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117, +108,116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,49,93,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,58,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62, +45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,48,93,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78, +76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,67,95,69,74,69,67,84,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115, +46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95,99,111,110,116, +114,111,108,95,101,106,101,99,116,46,112,110,103,60,47,98,105,116,109,97, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,69,106, +101,99,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44, +48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111, +119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,52,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60, +47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,99,111,108,115,62,49,44,51,60,47,103,114,111,119,97,98,108,101, +99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108, +101,114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,50,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,99,116,111,114,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84, +95,83,80,84,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,72,68,68,95,76,65,66,69,76,91,51,93,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,97,100,115,58,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,69,68,73,84,95,72,80,67,91,48,93,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65, +66,69,76,91,52,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,121,108,105,110,100,101,114,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60, +47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,69,68,73,84,95,67,89,76,91,48,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,53,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +105,122,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83,73,90, +69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,99,104, +111,105,99,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,68,114,105,118,101,32,50,32,40,68,58,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,101,108,101,99,116,101,100,62,48,60,47,115,101,108,101,99, +116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,67,95,80,65,78,69, +76,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,65,66,95, +84,82,65,86,69,82,83,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, +114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, +48,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47, +99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,50,60, +47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68, +68,95,76,65,66,69,76,91,49,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,55,53,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,121,112,101,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,72,68,68,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,72,97,114,100,32,100,114,105,118,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48, +60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,67,68,82,79,77,91,49,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,68,45,82,79,77,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, +62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, +109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, +78,69,87,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111, +111,108,116,105,112,62,78,101,119,60,47,116,111,111,108,116,105,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,49,54,120,49,54,95,100,114,105,118,101,95,97,100,100,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,67,95,70,73,76,69,91,49,93,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,116,111,111,108,116,105,112,62,66,114,111,119,115,101,60,47, +116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112, +36,105,99,111,110,115,95,49,54,120,49,54,95,102,111,108,100,101,114,46, +112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69, +76,91,49,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +70,105,108,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,49,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, +95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,69,74,69,67,84,91,49,93,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111, +117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49,54,120,49, +54,95,99,111,110,116,114,111,108,95,101,106,101,99,116,46,112,110,103,60, +47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,69,106,101,99,116,60,47,116,111,111,108,116,105,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101, +102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119, +115,62,48,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,103,114,111,119,97,98,108,101,99,111,108,115,62,49,44,51,60,47,103,114, +111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,49,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,99,116,111,114,115,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49, +60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,69,68,73,84,95,83,80,84,91,49,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,49,51, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,101,97,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72, +80,67,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,72,68,68,95,76,65,66,69,76,91,49,52,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,121,108,105,110,100,101,114,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119, +114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,91,49,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,49,53,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,105,122,101,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119, +114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,84,69,88,84,95,83,73,90,69,91,49,93,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,99,104,111,105,99,101,98,111,111,107,112,97,103,101, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,114,105,118,101,32,51,32,40,69,58,41, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,101,108,101,99,116,101,100,62,48,60, +47,115,101,108,101,99,116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73, +68,67,95,80,65,78,69,76,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,84,65,66,95,84,82,65,86,69,82,83,65,76,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103, +97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62, +48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108, +101,99,111,108,115,62,50,60,47,103,114,111,119,97,98,108,101,99,111,108, +115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111,119,115,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,50,48,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,53,44,45,49,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +121,112,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105, +111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,72,68, +68,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,97,114, +100,32,100,114,105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105, +111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,68, +82,79,77,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,68,45,82,79,77,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108, +117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,78,69,87,91,50,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112, +62,78,101,119,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111, +117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49,54,120,49, +54,95,100,114,105,118,101,95,97,100,100,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97, +117,108,116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105, +116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68, +67,95,70,73,76,69,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111, +111,108,116,105,112,62,66,114,111,119,115,101,60,47,116,111,111,108,116, +105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,49,54,120,49,54,95,102,111,108,100,101,114,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117, +108,116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,50,49,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112, +62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110, +97,109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,50,93,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65, +68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,67,95,69,74,69,67,84,91,50,93,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117, +114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49,54,120,49,54,95, +99,111,110,116,114,111,108,95,101,106,101,99,116,46,112,110,103,60,47,98, +105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116, +105,112,62,69,106,101,99,116,60,47,116,111,111,108,116,105,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101, +102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119, +115,62,48,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,103,114,111,119,97,98,108,101,99,111,108,115,62,49,44,51,60,47,103,114, +111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,50,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,99,116,111,114,115,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49, +60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,69,68,73,84,95,83,80,84,91,50,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,50,51, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,101,97,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72,80,67,91,50, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,50,52,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,121,108,105,110,100,101,114,58,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112, +62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,91,50,93,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,50, +53,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,105,122,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83, +73,90,69,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, +108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,99,104, +111,105,99,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,68,114,105,118,101,32,52,32,40,70,58,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,101,108,101,99,116,101,100,62,48,60,47,115,101,108,101,99, +116,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,67,95,80,65,78,69, +76,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,65,66,95, +84,82,65,86,69,82,83,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, +114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, +48,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47, +99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,50,60, +47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68, +68,95,76,65,66,69,76,91,51,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,55,53,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,121,112,101,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,72,68,68,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,72,97,114,100,32,100,114,105,118,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48, +60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,67,68,82,79,77,91,51,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,68,45,82,79,77,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, +62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, +109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, +78,69,87,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111, +111,108,116,105,112,62,78,101,119,60,47,116,111,111,108,116,105,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,49,54,120,49,54,95,100,114,105,118,101,95,97,100,100,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,67,95,70,73,76,69,91,51,93,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,116,111,111,108,116,105,112,62,66,114,111,119,115,101,60,47, +116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112, +36,105,99,111,110,115,95,49,54,120,49,54,95,102,111,108,100,101,114,46, +112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69, +76,91,51,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +70,105,108,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,51,93, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, +95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,69,74,69,67,84,91,51,93,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111, +117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,49,54,120,49, +54,95,99,111,110,116,114,111,108,95,101,106,101,99,116,46,112,110,103,60, +47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,69,106,101,99,116,60,47,116,111,111,108,116,105,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101, +102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119, +115,62,48,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,103,114,111,119,97,98,108,101,99,111,108,115,62,49,44,51,60,47,103,114, +111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,51,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,99,116,111,114,115,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49, +60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,69,68,73,84,95,83,80,84,91,51,93,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,72,68,68,95,76,65,66,69,76,91,51,51, +93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,101,97,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72, +80,67,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, +117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,72,68,68,95,76,65,66,69,76,91,51,52,93,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,121,108,105,110,100,101,114,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119, +114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,91,51,93,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68,95, +76,65,66,69,76,91,51,53,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,105,122,101,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119, +114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124, +32,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,84,69,88,84,95,83,73,90,69,91,51,93,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112, +97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101, +108,101,99,116,101,100,62,48,60,47,115,101,108,101,99,116,101,100,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,51,50,120,51,50,95,109,111,117,115,101,95,112,99,46,112,110,103, +60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, +101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,84,65,66,95,84,82,65,86,69,82,83,65,76,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, +120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119, +115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97, +112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,49, +60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101, +114,111,119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,56,48,44,45,49,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,77,111,117,115,101,58,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, +67,79,77,66,79,77,79,85,83,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82,69,65, +68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, +101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102, +97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, +78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108, +116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,72,100,78,101, +119,68,108,103,34,62,10,32,32,32,32,60,116,105,116,108,101,62,78,101,119, +32,72,97,114,100,32,68,105,115,99,60,47,116,105,116,108,101,62,10,32,32, +32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,82,79,79, +84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60, +47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,60,99,111,108,115,62,49, +60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,60,118,103,97,112,62, +48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,60,104,103,97,112, +62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,60,103,114,111, +119,97,98,108,101,99,111,108,115,47,62,10,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, 53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120, 71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,99,111,108,115,62,49,60,47,99,111,108,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62, +32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118, 103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112, 62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34, -32,110,97,109,101,61,34,73,68,67,95,80,65,78,69,76,91,48,93,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111, -119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97, -112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,67,95,72,68,68,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,82, -66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -72,97,114,100,32,100,114,105,118,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,68,82, -79,77,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,68,45,82,79,77,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68, -73,84,95,70,78,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,70,73,76,69,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,46,46,46,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,78,69,87,91,48,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,78,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,69,74,69,67,84,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,106,101,99,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34, -73,68,67,95,69,68,73,84,95,83,80,84,91,48,93,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +103,114,111,119,97,98,108,101,99,111,108,115,62,49,60,47,103,114,111,119, +97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,103,114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72,80, -67,91,48,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, 124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,58,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,91,48,93,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,84,69,88,84,95,83,73,90,69,91,48,93,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73, -68,67,95,80,65,78,69,76,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,52,60, -47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, -118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,68,58,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68, -91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,97,114,100,32,100,114, -105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,67,95,67,68,82,79,77,91,49,93,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,68,45,82,79,77,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,49,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,67,95,70,73,76,69,91,49,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,78,69,87,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,69,74,69,67,84,91,49,93,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,69,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,58,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,83,80, -84,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,72,58,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,72,80,67,91,49,93,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -69,68,73,84,95,67,89,76,91,49,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83,73,90,69,91, -49,93,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101, -108,34,32,110,97,109,101,61,34,73,68,67,95,80,65,78,69,76,91,50,93,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,99,111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114, -111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,67,95,72,68,68,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,82, -66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -72,97,114,100,32,100,114,105,118,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,68,82, -79,77,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,68,45,82,79,77,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68, -73,84,95,70,78,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,70,73,76,69,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,46,46,46,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,78,69,87,91,50,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,78,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,69,74,69,67,84,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,106,101,99,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34, -73,68,67,95,69,68,73,84,95,83,80,84,91,50,93,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,72,80, -67,91,50,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,58,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,67,89,76,91,50,93,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,84,69,88,84,95,83,73,90,69,91,50,93,34,47,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73, -68,67,95,80,65,78,69,76,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,52,60, -47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, -118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,70,58,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,72,68,68, -91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,97,114,100,32,100,114, -105,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,67,95,67,68,82,79,77,91,51,93,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,68,45,82,79,77,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,70,78,91,51,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,67,95,70,73,76,69,91,51,93,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, -95,78,69,87,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,69,74,69,67,84,91,51,93,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,69,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,58,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,95,83,80, -84,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,72,58,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,69,68,73,84,95,72,80,67,91,51,93,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -69,68,73,84,95,67,89,76,91,51,93,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,95,83,73,90,69,91, -51,93,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108, -116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,72,100, -78,101,119,68,108,103,34,62,10,32,32,32,32,60,116,105,116,108,101,62,78, -101,119,32,72,97,114,100,32,68,105,115,99,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,82, -79,79,84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48, -60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, 34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,67,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, 84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,70,73,76,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,53,48, +44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,101,99,116,111,114,115,58,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -69,68,73,84,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,97,100,115,58,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, -34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,50,34,47,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76, -69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,121,108,105,110,100,101,114,115,58,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,51,34,47,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,67,95,67,70,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66, +85,95,65,85,84,79,68,82,65,87,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119, +120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110, +115,95,49,54,120,49,54,95,102,111,108,100,101,114,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, 100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,49,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,105,122,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, -97,99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101, -58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,72,68,84,89,80,69,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97, -117,108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79, -75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105, +100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,52,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98, +108,101,99,111,108,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,103,114,111,119,97,98,108,101,114,111,119,115,47,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110, -99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,72,100,83,105,122,101,68,108,103,34,62,10,32,32,32,32,60,116, -105,116,108,101,62,72,97,114,100,32,100,105,115,99,32,112,97,114,97,109, -101,116,101,114,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, -110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -80,97,110,101,108,34,32,110,97,109,101,61,34,82,79,79,84,95,80,65,78,69, -76,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,73,110,105,116,105,97,108,32,115,101,116,116,105,110,103, -115,32,97,114,101,32,98,97,115,101,100,32,111,110,32,102,105,108,101,32, -115,105,122,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, -62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,99,116,111,114,115,58,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34, -73,68,67,95,69,68,73,84,49,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,99,116,111,114,115,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,49,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, +101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72, 101,97,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68, -73,84,50,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,108,105,110, -100,101,114,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68, -73,84,51,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95, -84,69,88,84,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,105,122,101,58,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101,58,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119, +114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120,34,32,110, -97,109,101,61,34,73,68,67,95,72,68,84,89,80,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,67,66,95,68,82,79,80,68,79,87,78,32,124,32,119,120,67,66,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34, +73,68,67,95,69,68,73,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,108,105,110,100,101,114, +115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, +69,68,73,84,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, 47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,105,122,101,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,67,95,84,69,88,84,49,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,48,109,98,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119, +114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,32,124,32,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101, +58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111, +120,34,32,110,97,109,101,61,34,73,68,67,95,72,68,84,89,80,69,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,67,66,95,68,82,79,80,68,79,87,78,124,119,120,67,66,95,82,69,65, +68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102, +97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, +78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108, +116,62,48,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,72,100,83,105, +122,101,68,108,103,34,62,10,32,32,32,32,60,116,105,116,108,101,62,72,97, +114,100,32,68,105,115,99,32,80,97,114,97,109,101,116,101,114,115,60,47, +116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100, +62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34, +32,110,97,109,101,61,34,82,79,79,84,95,80,65,78,69,76,34,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, +108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,60,114,111,119,115,62,48,60,47,114,111,119,115,62,10,32,32,32,32, +32,32,32,32,60,99,111,108,115,62,49,60,47,99,111,108,115,62,10,32,32,32, +32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32, +32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32, +32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,47, +62,10,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111, +119,115,47,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,105,116, +105,97,108,32,115,101,116,116,105,110,103,115,32,97,114,101,32,98,97,115, +101,100,32,111,110,32,102,105,108,101,32,115,105,122,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62, +45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114, +111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115, +62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108, +115,62,49,60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111, +119,115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, +108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,48,60,47,114,111,119, +115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108, +115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104, +103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,103, +114,111,119,97,98,108,101,99,111,108,115,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111,119, +115,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,99,116,111,114,115,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, +69,68,73,84,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,72,101,97,100,115,58,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, +32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121, +108,105,110,100,101,114,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45, +49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,69,68,73,84,51,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,105,122,101,58, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,67,95,84,69,88,84,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,109,98,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,32,124,32,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,121,112,101,58,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62, +45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73, +68,67,95,72,68,84,89,80,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,67,66,95,68,82,79,80,68,79, +87,78,124,119,120,67,66,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,51,53,48,44,45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117, +108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102, -97,117,108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97, +117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,67,111,110,102,105,103,117,114,101,83, +101,108,101,99,116,105,111,110,68,108,103,34,62,10,32,32,32,32,60,116,105, +116,108,101,62,80,67,101,109,32,67,111,110,102,105,103,117,114,97,116,105, +111,110,32,77,97,110,97,103,101,114,60,47,116,105,116,108,101,62,10,32, +32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,114,111,119,115,62,49,60,47,114,111,119,115,62, +10,32,32,32,32,32,32,60,99,111,108,115,62,49,60,47,99,111,108,115,62,10, +32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32, +32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32, +32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,48,60,47, +103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,60, +103,114,111,119,97,98,108,101,114,111,119,115,62,48,60,47,103,114,111,119, +97,98,108,101,114,111,119,115,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, +50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32, +32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,48, +60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32, +32,32,32,32,32,60,103,114,111,119,97,98,108,101,114,111,119,115,62,48,60, +47,103,114,111,119,97,98,108,101,114,111,119,115,62,10,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,67,111,110,102,105,103,117,114,101,83,101,108,101,99,116,105, -111,110,68,108,103,34,62,10,32,32,32,32,60,116,105,116,108,101,62,80,67, -101,109,32,67,111,110,102,105,103,117,114,97,116,105,111,110,32,77,97,110, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,67,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,48,44,51,48,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97, +112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,66,85,95,65,85,84,79,68,82,65,87,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,116,111,111,108,116,105,112,62,76,111,97,100,60,47,116,111,111,108, +116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117,114,99,101,115, +46,99,112,112,36,105,99,111,110,115,95,51,50,120,51,50,95,99,111,110,116, +114,111,108,95,112,108,97,121,95,98,108,117,101,46,112,110,103,60,47,98, +105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,66,85,95,65,85,84,79,68,82,65,87,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +116,111,111,108,116,105,112,62,67,111,110,102,105,103,117,114,101,60,47, +116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117, +114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,51,50,120,51,50,95, +115,101,116,116,105,110,103,95,116,111,111,108,115,46,112,110,103,60,47, +98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47, +111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, +105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,67,95,78,69,87,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +66,85,95,65,85,84,79,68,82,65,87,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116, +105,112,62,78,101,119,60,47,116,111,111,108,116,105,112,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62, +119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111, +110,115,95,51,50,120,51,50,95,99,111,109,112,117,116,101,114,95,97,100, +100,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,48, +60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105, +116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68, +67,95,82,69,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,65,85,84,79,68, +82,65,87,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,82,101,110,97, +109,101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114, +101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,51, +50,120,51,50,95,99,111,109,112,117,116,101,114,95,101,100,105,116,46,112, +110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101, +102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,68,69,76, +69,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,66,85,95,65,85,84,79,68,82,65,87,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,116,111,111,108,116,105,112,62,68,101,108,101,116,101,60,47, +116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,105,116,109,97,112,62,119,120,45,114,101,115,111,117, +114,99,101,115,46,99,112,112,36,105,99,111,110,115,95,51,50,120,51,50,95, +99,111,109,112,117,116,101,114,95,100,101,108,101,116,101,46,112,110,103, +60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97, +117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, +78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,66,85,95,65,85,84,79,68,82,65,87,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111, +108,116,105,112,62,81,117,105,116,60,47,116,111,111,108,116,105,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62, +119,120,45,114,101,115,111,117,114,99,101,115,46,99,112,112,36,105,99,111, +110,115,95,51,50,120,51,50,95,100,111,111,114,95,105,110,46,112,110,103, +60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,101,102,97,117,108,116,62,48,60,47,100,101,102,97,117,108,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,83,104,97,100,101,114,77,97,110,97,103,101,114,68,108, +103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,68,69,70,65, +85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69,124,119,120,83,84,65,89, +95,79,78,95,84,79,80,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116, +105,116,108,101,62,80,67,101,109,32,83,104,97,100,101,114,32,77,97,110, 97,103,101,114,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, 116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80, @@ -2724,7 +6245,7 @@ static unsigned char xml_res_file_7[] = { 83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, 121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108, 101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,50,48,48,44,51,48,48,60,47,115,105,122,101,62,10,32,32,32,32,32, +101,62,51,48,48,44,51,53,48,60,47,115,105,122,101,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, @@ -2743,69 +6264,36 @@ static unsigned char xml_res_file_7[] = { 32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -111,97,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117,108,116,62,49,60,47, -100,101,102,97,117,108,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,110,97,109,101,61,34,73,68,67,95,65,68,68,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, -78,69,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,101,119,46,46,46,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,67,95,82,69,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,110,97,109, -101,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,73,68,67,95,68,69,76,69,84,69,34,62, +111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,69,77,79,86,69,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,68,101,108,101,116,101,46,46,46,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +98,101,108,62,82,101,109,111,118,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, 32,110,97,109,101,61,34,73,68,67,95,67,79,78,70,73,71,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, @@ -2820,122 +6308,152 @@ static unsigned char xml_res_file_7[] = { 100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,67,95,72,68,67,79,78,70,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,68,68,46,46,46, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,105,116,60,47,108,97, +34,73,68,67,95,77,79,86,69,95,85,80,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,118,101, +32,117,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,73,68,67,95,77,79,86,69,95,68,79,87, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,111,118,101,32,100,111,119,110,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,67,111,110,102, -105,114,109,82,101,109,101,109,98,101,114,68,108,103,34,62,10,32,32,32, -32,60,116,105,116,108,101,62,80,67,101,109,60,47,116,105,116,108,101,62, -10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110, -116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,82, -79,79,84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, -105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,32,115, -116,111,99,107,95,105,100,61,34,119,120,65,82,84,95,81,85,69,83,84,73,79, -78,34,32,115,116,111,99,107,95,99,108,105,101,110,116,61,34,119,120,65, -82,84,95,67,77,78,95,68,73,65,76,79,71,34,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,65,80,80,76, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,112,112,108,121,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, +101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, +61,34,67,111,110,102,105,114,109,82,101,109,101,109,98,101,114,68,108,103, +34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,68,69,70,65,85,76, +84,95,68,73,65,76,79,71,95,83,84,89,76,69,124,119,120,83,84,65,89,95,79, +78,95,84,79,80,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116, +108,101,62,80,67,101,109,60,47,116,105,116,108,101,62,10,32,32,32,32,60, +99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,82,79,79,84,95,80,65,78, +69,76,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,66,105,116,109,97,112,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,105,116,109,97,112,32,115,116,111,99,107,95, +105,100,61,34,119,120,65,82,84,95,81,85,69,83,84,73,79,78,34,32,115,116, +111,99,107,95,99,108,105,101,110,116,61,34,119,120,65,82,84,95,67,77,78, +95,68,73,65,76,79,71,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,67, +79,78,70,73,82,77,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,68,67,95,67,79,78,70,73, +82,77,95,76,65,66,69,76,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62,45,49,60,47,119,114, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, -61,34,73,68,67,95,67,79,78,70,73,82,77,95,76,65,66,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,68, -67,95,67,79,78,70,73,82,77,95,76,65,66,69,76,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114,97,112,62, -45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, -67,79,78,70,73,82,77,95,82,69,77,69,77,66,69,82,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,68,67,95,67,79,78,70,73, -82,77,95,82,69,77,69,77,66,69,82,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, -110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,100,68,105,97,108,111,103,66,117,116,116,111,110,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,98,117,116,116,111,110,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,95,79,75,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, +99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,79,78,70,73, +82,77,95,82,69,77,69,77,66,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,73,68,67,95,67,79,78,70,73,82,77,95,82,69, +77,69,77,66,69,82,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,100,68,105,97,108,111,103,66,117,116,116,111,110,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,98,117,116,116,111,110,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, 78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, @@ -2943,80 +6461,93 @@ static unsigned char xml_res_file_7[] = { 32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95,67,97,110,99,101,108, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -68,105,97,108,111,103,34,32,110,97,109,101,61,34,65,98,111,117,116,68,108, -103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,68,69,70,65, -85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69,60,47,115,116,121,108,101, -62,10,32,32,32,32,60,116,105,116,108,101,47,62,10,32,32,32,32,60,99,101, -110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, +34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,95,79,75,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,97,117, +108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,98, +117,116,116,111,110,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -80,97,110,101,108,34,32,110,97,109,101,61,34,82,79,79,84,95,80,65,78,69, -76,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,101, -109,32,118,49,50,92,110,104,116,116,112,115,58,47,47,112,99,101,109,45, -101,109,117,108,97,116,111,114,46,99,111,46,117,107,47,92,110,92,110,84, -104,105,115,32,112,114,111,103,114,97,109,32,105,115,32,108,105,99,101, -110,115,101,100,32,117,110,100,101,114,32,116,104,101,32,71,78,85,32,71, -101,110,101,114,97,108,32,80,117,98,108,105,99,32,76,105,99,101,110,115, -101,32,118,101,114,115,105,111,110,32,50,46,92,110,83,101,101,32,67,79, -80,89,73,78,71,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105, -108,115,46,92,110,92,110,84,111,111,108,98,97,114,45,105,99,111,110,115, -32,109,97,100,101,32,98,121,32,82,111,117,110,100,105,99,111,110,115,32, -40,104,116,116,112,115,58,47,47,114,111,117,110,100,105,99,111,110,115, -46,99,111,109,47,41,32,102,114,111,109,32,119,119,119,46,102,108,97,116, -105,99,111,110,46,99,111,109,92,110,83,116,97,116,117,115,45,105,99,111, -110,115,32,109,97,100,101,32,98,121,32,77,97,114,107,32,74,97,109,101,115, -32,40,104,116,116,112,58,47,47,119,119,119,46,102,97,109,102,97,109,102, -97,109,46,99,111,109,47,108,97,98,47,105,99,111,110,115,47,115,105,108, -107,47,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,119,114,97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,69,88,80,65,78,68,32,124,32,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,76,105,110,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, -79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,95,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115, -111,117,114,99,101,62,10}; +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, +78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,95,67,97,110,99,101,108,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,65,98,111,117,116,68,108,103,34,62,10,32,32,32,32,60,115, +116,121,108,101,62,119,120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95, +83,84,89,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116, +108,101,47,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, +47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109, +101,61,34,82,79,79,84,95,80,65,78,69,76,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,80,67,101,109,32,118,49,50,92,110,104, +116,116,112,115,58,47,47,112,99,101,109,45,101,109,117,108,97,116,111,114, +46,99,111,46,117,107,47,92,110,92,110,84,104,105,115,32,112,114,111,103, +114,97,109,32,105,115,32,108,105,99,101,110,115,101,100,32,117,110,100, +101,114,32,116,104,101,32,71,78,85,32,71,101,110,101,114,97,108,32,80,117, +98,108,105,99,32,76,105,99,101,110,115,101,32,118,101,114,115,105,111,110, +32,50,46,92,110,83,101,101,32,67,79,80,89,73,78,71,32,102,111,114,32,109, +111,114,101,32,100,101,116,97,105,108,115,46,92,110,92,110,84,111,111,108, +98,97,114,45,105,99,111,110,115,32,109,97,100,101,32,98,121,32,82,111,117, +110,100,105,99,111,110,115,32,40,104,116,116,112,115,58,47,47,114,111,117, +110,100,105,99,111,110,115,46,99,111,109,47,41,32,102,114,111,109,32,119, +119,119,46,102,108,97,116,105,99,111,110,46,99,111,109,92,110,79,116,104, +101,114,32,105,99,111,110,115,32,109,97,100,101,32,98,121,32,70,97,116, +67,111,119,32,40,104,116,116,112,58,47,47,119,119,119,46,102,97,116,99, +111,119,46,99,111,109,47,102,114,101,101,45,105,99,111,110,115,47,41,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,119,114, +97,112,62,45,49,60,47,119,114,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,69,88,80,65,78,68,32,124,32,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +76,105,110,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,95, +79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117, +114,99,101,62,10}; void InitXmlResource() { @@ -3031,13 +6562,28 @@ void InitXmlResource() else wxFileSystem::AddHandler(new wxMemoryFSHandler); } - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_drive.png"), xml_res_file_0, xml_res_size_0, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_disk.png"), xml_res_file_1, xml_res_size_1, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_cd.png"), xml_res_file_2, xml_res_size_2, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_play24.png"), xml_res_file_3, xml_res_size_3, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_pause24.png"), xml_res_file_4, xml_res_size_4, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_stop24.png"), xml_res_file_5, xml_res_size_5, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_refresh24.png"), xml_res_file_6, xml_res_size_6, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$pc.xrc"), xml_res_file_7, xml_res_size_7, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_drive.png"), xml_res_file_0, xml_res_size_0, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_diskette.png"), xml_res_file_1, xml_res_size_1, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_cd.png"), xml_res_file_2, xml_res_size_2, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_24x24_play.png"), xml_res_file_3, xml_res_size_3, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_24x24_pause.png"), xml_res_file_4, xml_res_size_4, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_24x24_stop.png"), xml_res_file_5, xml_res_size_5, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_24x24_refresh.png"), xml_res_file_6, xml_res_size_6, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_motherboard.png"), xml_res_file_7, xml_res_size_7, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_setting_tools.png"), xml_res_file_8, xml_res_size_8, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_video_mode.png"), xml_res_file_9, xml_res_size_9, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_sound.png"), xml_res_file_10, xml_res_size_10, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_drive.png"), xml_res_file_11, xml_res_size_11, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_drive_add.png"), xml_res_file_12, xml_res_size_12, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_folder.png"), xml_res_file_13, xml_res_size_13, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_16x16_control_eject.png"), xml_res_file_14, xml_res_size_14, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_mouse_pc.png"), xml_res_file_15, xml_res_size_15, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_control_play_blue.png"), xml_res_file_16, xml_res_size_16, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_setting_tools.png"), xml_res_file_17, xml_res_size_17, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_computer_add.png"), xml_res_file_18, xml_res_size_18, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_computer_edit.png"), xml_res_file_19, xml_res_size_19, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_computer_delete.png"), xml_res_file_20, xml_res_size_20, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$icons_32x32_door_in.png"), xml_res_file_21, xml_res_size_21, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/wx-resources.cpp$pc.xrc"), xml_res_file_22, xml_res_size_22, wxT("text/xml")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/wx-resources.cpp$pc.xrc")); } diff --git a/src/wx-sdl2-display-win.c b/src/wx-sdl2-display-win.c new file mode 100644 index 0000000..9eaac1a --- /dev/null +++ b/src/wx-sdl2-display-win.c @@ -0,0 +1,984 @@ +#define _WIN32_WINNT 0x0501 +#include +#include "video.h" +#include "wx-sdl2-video.h" +#include "wx-utils.h" +#include "ibm.h" +#include "wx-display.h" +#include "plat-keyboard.h" + +#ifdef _WIN32 +#define BITMAP WINDOWS_BITMAP +#undef UNICODE +#include +#include +#undef BITMAP +#endif + +HHOOK hKeyboardHook; + +static HINSTANCE hinstance = 0; +static HWND hwnd = 0; +static HMENU menu = 0; + +#define szClassName "PCemMainWnd" +#define szSubClassName "PCemSubWnd" + +static RAWINPUTDEVICE device; +static uint16_t scancode_map[65536]; + +SDL_mutex* rendererMutex; +SDL_cond* rendererCond; +SDL_Thread* renderthread = NULL; + +SDL_Window* window = NULL; +SDL_Window* dummy_window = NULL; + +int rendering = 0; + +int mousecapture = 0; + +extern int pause; +extern int video_scale; +extern int take_screenshot; + +void* window_ptr; +void* menu_ptr; + +SDL_Rect remembered_rect; +int remembered_mouse_x = 0; +int remembered_mouse_y = 0; + +int win_doresize = 0; +int winsizex = 640, winsizey = 480; + +void renderer_start(); +void renderer_stop(int timeout); + +int trigger_fullscreen = 0; +int trigger_screenshot = 0; +int trigger_togglewindow = 0; +int trigger_inputrelease = 0; + +extern void device_force_redraw(); +extern void mouse_wheel_update(int); +extern void toggle_fullscreen(); + +void display_resize(int width, int height) +{ + winsizex = width*(video_scale+1) >> 1; + winsizey = height*(video_scale+1) >> 1; + + SDL_Rect rect; + rect.x = rect.y = 0; + rect.w = winsizex; + rect.h = winsizey; + sdl_scale(video_fullscreen_scale, rect, &rect, winsizex, winsizey); + winsizex = rect.w; + winsizey = rect.h; + + win_doresize = 1; +} + +void releasemouse() +{ + if (mousecapture) + { + SDL_SetWindowGrab(window, SDL_FALSE); + SDL_SetRelativeMouseMode(SDL_FALSE); + mousecapture = 0; + } +} + +int is_fullscreen() +{ + if (window) + { + int flags = SDL_GetWindowFlags(window); + return (flags&SDL_WINDOW_FULLSCREEN) || (flags&SDL_WINDOW_FULLSCREEN_DESKTOP); + } + return 0; +} + +/* This is so we can disambiguate scan codes that would otherwise conflict and get + passed on incorrectly. */ +UINT16 convert_scan_code(UINT16 scan_code) +{ + switch (scan_code) + { + case 0xE001: + return 0xF001; + case 0xE002: + return 0xF002; + case 0xE005: + return 0xF005; + case 0xE006: + return 0xF006; + case 0xE007: + return 0xF007; + case 0xE071: + return 0xF008; + case 0xE072: + return 0xF009; + case 0xE07F: + return 0xF00A; + case 0xE0E1: + return 0xF00B; + case 0xE0EE: + return 0xF00C; + case 0xE0F1: + return 0xF00D; + case 0xE0FE: + return 0xF00E; + case 0xE0EF: + return 0xF00F; + + default: + return scan_code; + } +} + +void get_registry_key_map() +{ + char *keyName = "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout"; + char *valueName = "Scancode Map"; + char buf[32768]; + DWORD bufSize; + HKEY hKey; + int j; + + /* First, prepare the default scan code map list which is 1:1. + Remappings will be inserted directly into it. + 65536 bytes so scan codes fit in easily and it's easy to find what each maps too, + since each array element is a scan code and provides for E0, etc. ones too. */ + for (j = 0; j < 65536; j++) + scancode_map[j] = convert_scan_code(j); + + bufSize = 32768; + pclog("Preparing scan code map list...\n"); + /* Get the scan code remappings from: + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout */ + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyName, 0, 1, &hKey) == ERROR_SUCCESS) + { + if(RegQueryValueEx(hKey, valueName, NULL, NULL, (LPBYTE)buf, &bufSize) == ERROR_SUCCESS) + { + UINT32 *bufEx2 = (UINT32 *) buf; + int scMapCount = bufEx2[2]; + pclog("%lu scan code mappings found!\n", scMapCount); + if ((bufSize != 0) && (scMapCount != 0)) + { + UINT16 *bufEx = (UINT16 *) (buf + 12); + pclog("More than zero scan code mappings found, processing...\n"); + for (j = 0; j < scMapCount*2; j += 2) + { + /* Each scan code is 32-bit: 16 bits of remapped scan code, + and 16 bits of original scan code. */ + int scancode_unmapped = bufEx[j + 1]; + int scancode_mapped = bufEx[j]; + + scancode_mapped = convert_scan_code(scancode_mapped); + + scancode_map[scancode_unmapped] = scancode_mapped; + pclog("Scan code mapping %u detected: %X -> %X\n", scancode_unmapped, scancode_mapped, scancode_map[scancode_unmapped]); + } + pclog("Done processing!\n"); + } + } + RegCloseKey(hKey); + } + pclog("Done preparing!\n"); +} + +LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) +{ + if (nCode < 0 || nCode != HC_ACTION || (!mousecapture && !video_fullscreen)) + return CallNextHookEx( hKeyboardHook, nCode, wParam, lParam); + + KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam; + + if (p->vkCode == VK_TAB && p->flags & LLKHF_ALTDOWN) return 1; //disable alt-tab + if (p->vkCode == VK_SPACE && p->flags & LLKHF_ALTDOWN) return 1; //disable alt-tab + if((p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN)) return 1;//disable windows keys + if (p->vkCode == VK_ESCAPE && p->flags & LLKHF_ALTDOWN) return 1;//disable alt-escape + BOOL bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);//checks ctrl key pressed + if (p->vkCode == VK_ESCAPE && bControlKeyDown) return 1; //disable ctrl-escape + + return CallNextHookEx( hKeyboardHook, nCode, wParam, lParam ); +} + +LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_COMMAND: + /* pass through commands to wx window */ + wx_winsendmessage(window_ptr, message, wParam, lParam); + return 0; + break; + case WM_INPUT: + { + UINT size; + RAWINPUT *raw; + + if (!infocus) + break; + + GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)); + + raw = malloc(size); + + /* Here we read the raw input data for the keyboard */ + GetRawInputData((HRAWINPUT)(lParam), RID_INPUT, raw, &size, sizeof(RAWINPUTHEADER)); + + /* If the input is keyboard, we process it */ + if (raw->header.dwType == RIM_TYPEKEYBOARD) + { + const RAWKEYBOARD rawKB = raw->data.keyboard; + USHORT scancode = rawKB.MakeCode; + + // pclog("Keyboard input received: S:%X VK:%X F:%X\n", c, d, e); + + /* If it's not a scan code that starts with 0xE1 */ + if (!(rawKB.Flags & RI_KEY_E1)) + { + if (rawKB.Flags & RI_KEY_E0) + scancode |= (0xE0 << 8); + + /* Remap it according to the list from the Registry */ + scancode = scancode_map[scancode]; + + if ((scancode >> 8) == 0xF0) + scancode |= 0x100; /* Extended key code in disambiguated format */ + else if ((scancode >> 8) == 0xE0) + scancode |= 0x80; /* Normal extended key code */ + + /* If it's not 0 (therefore not 0xE1, 0xE2, etc), + then pass it on to the rawinputkey array */ + if (!(scancode & 0xf00)) + rawinputkey[scancode & 0x1ff] = !(rawKB.Flags & RI_KEY_BREAK); + } + } + free(raw); + + } + break; + case WM_SETFOCUS: + infocus=1; + break; + case WM_KILLFOCUS: + infocus=0; + if (is_fullscreen()) + window_dowindowed = 1; + window_doinputrelease = 1; + memset(rawinputkey, 0, sizeof(rawinputkey)); + break; + case WM_CLOSE: + case WM_DESTROY: + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + case WM_KEYUP: + case WM_SYSKEYUP: + return 0; + + case WM_SYSCOMMAND: + if (wParam == SC_KEYMENU && HIWORD(lParam) <= 0 && (video_fullscreen || mousecapture)) + return 0; /*disable ALT key for menu*/ + break; + default: + break; + } + return DefWindowProc (hwnd, message, wParam, lParam); +} + +LRESULT CALLBACK subWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + default: + return DefWindowProc(hwnd, message, wParam, lParam); + } + return 0; +} + +int display_init() +{ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) + { + printf("SDL could not initialize! Error: %s\n", SDL_GetError()); + return 0; + } + + SDL_version ver; + SDL_GetVersion(&ver); + printf("SDL %i.%i.%i initialized.\n", ver.major, ver.minor, ver.patch); + + return 1; +} + +void display_close() +{ + SDL_Quit(); +} + +void display_start(void* wnd_ptr) +{ + window_ptr = wnd_ptr; + menu_ptr = wx_getmenu(wnd_ptr); + + get_registry_key_map(); + + infocus = 1; + + atexit(releasemouse); + rendererMutex = SDL_CreateMutex(); + rendererCond = SDL_CreateCond(); + renderer_start(); +} + +void display_stop() +{ + renderer_stop(10 * 1000); + + SDL_DestroyMutex(rendererMutex); + SDL_DestroyCond(rendererCond); + SDL_DetachThread(renderthread); + releasemouse(); + +} + +void sdl_set_window_title(const char* title) { + if (hwnd && !is_fullscreen()) + SetWindowText(hwnd, title); +} + +int get_border_size(int* top, int* left, int* bottom, int* right) +{ + int res = SDL_GetWindowBordersSize(window, top, left, bottom, right); + if (top) *top -= GetSystemMetrics(SM_CYMENUSIZE); + + return res; +} + +static const struct { + SDL_Scancode sdl; + int system; +} SDLScancodeToSystemScancode[] = { + { SDL_SCANCODE_A, 0x1e }, + { SDL_SCANCODE_B, 0x30 }, + { SDL_SCANCODE_C, 0x2e }, + { SDL_SCANCODE_D, 0x20 }, + { SDL_SCANCODE_E, 0x12 }, + { SDL_SCANCODE_F, 0x21 }, + { SDL_SCANCODE_G, 0x22 }, + { SDL_SCANCODE_H, 0x23 }, + { SDL_SCANCODE_I, 0x17 }, + { SDL_SCANCODE_J, 0x24 }, + { SDL_SCANCODE_K, 0x25 }, + { SDL_SCANCODE_L, 0x26 }, + { SDL_SCANCODE_M, 0x32 }, + { SDL_SCANCODE_N, 0x31 }, + { SDL_SCANCODE_O, 0x18 }, + { SDL_SCANCODE_P, 0x19 }, + { SDL_SCANCODE_Q, 0x10 }, + { SDL_SCANCODE_R, 0x13 }, + { SDL_SCANCODE_S, 0x1f }, + { SDL_SCANCODE_T, 0x14 }, + { SDL_SCANCODE_U, 0x16 }, + { SDL_SCANCODE_V, 0x2f }, + { SDL_SCANCODE_W, 0x11 }, + { SDL_SCANCODE_X, 0x2d }, + { SDL_SCANCODE_Y, 0x15 }, + { SDL_SCANCODE_Z, 0x2c }, + { SDL_SCANCODE_0, 0x0B }, + { SDL_SCANCODE_1, 0x02 }, + { SDL_SCANCODE_2, 0x03 }, + { SDL_SCANCODE_3, 0x04 }, + { SDL_SCANCODE_4, 0x05 }, + { SDL_SCANCODE_5, 0x06 }, + { SDL_SCANCODE_6, 0x07 }, + { SDL_SCANCODE_7, 0x08 }, + { SDL_SCANCODE_8, 0x09 }, + { SDL_SCANCODE_9, 0x0A }, + { SDL_SCANCODE_GRAVE, 0x29 }, + { SDL_SCANCODE_MINUS, 0x0c }, + { SDL_SCANCODE_EQUALS, 0x0d }, + { SDL_SCANCODE_NONUSBACKSLASH, 0x56 }, + { SDL_SCANCODE_BACKSLASH, 0x2b }, + { SDL_SCANCODE_BACKSPACE, 0x0e }, + { SDL_SCANCODE_SPACE, 0x39 }, + { SDL_SCANCODE_TAB, 0x0f }, + { SDL_SCANCODE_CAPSLOCK, 0x3a }, + { SDL_SCANCODE_LSHIFT, 0x2a }, + { SDL_SCANCODE_LCTRL, 0x1d }, + { SDL_SCANCODE_LGUI, 0xdb }, + { SDL_SCANCODE_LALT, 0x38 }, + { SDL_SCANCODE_RSHIFT, 0x36 }, + { SDL_SCANCODE_RCTRL, 0x9d }, + { SDL_SCANCODE_RGUI, 0xdc }, + { SDL_SCANCODE_RALT, 0xb8 }, + { SDL_SCANCODE_SYSREQ, 0x54 }, + { SDL_SCANCODE_APPLICATION, 0xdd }, + { SDL_SCANCODE_RETURN, 0x1c }, + { SDL_SCANCODE_ESCAPE, 0x01 }, + { SDL_SCANCODE_F1, 0x3B }, + { SDL_SCANCODE_F2, 0x3C }, + { SDL_SCANCODE_F3, 0x3D }, + { SDL_SCANCODE_F4, 0x3e }, + { SDL_SCANCODE_F5, 0x3f }, + { SDL_SCANCODE_F6, 0x40 }, + { SDL_SCANCODE_F7, 0x41 }, + { SDL_SCANCODE_F8, 0x42 }, + { SDL_SCANCODE_F9, 0x43 }, + { SDL_SCANCODE_F10, 0x44 }, + { SDL_SCANCODE_F11, 0x57 }, + { SDL_SCANCODE_F12, 0x58 }, + { SDL_SCANCODE_SCROLLLOCK, 0x46 }, + { SDL_SCANCODE_LEFTBRACKET, 0x1a }, + { SDL_SCANCODE_RIGHTBRACKET, 0x1b }, + { SDL_SCANCODE_INSERT, 0xd2 }, + { SDL_SCANCODE_HOME, 0xc7 }, + { SDL_SCANCODE_PAGEUP, 0xc9 }, + { SDL_SCANCODE_DELETE, 0xd3 }, + { SDL_SCANCODE_END, 0xcf }, + { SDL_SCANCODE_PAGEDOWN, 0xd1 }, + { SDL_SCANCODE_UP, 0xc8 }, + { SDL_SCANCODE_LEFT, 0xcb }, + { SDL_SCANCODE_DOWN, 0xd0 }, + { SDL_SCANCODE_RIGHT, 0xcd }, + { SDL_SCANCODE_NUMLOCKCLEAR, 0x45 }, + { SDL_SCANCODE_KP_DIVIDE, 0xb5 }, + { SDL_SCANCODE_KP_MULTIPLY, 0x37 }, + { SDL_SCANCODE_KP_MINUS, 0x4a }, + { SDL_SCANCODE_KP_PLUS, 0x4e }, + { SDL_SCANCODE_KP_ENTER, 0x9c }, + { SDL_SCANCODE_KP_PERIOD, 0x53 }, + { SDL_SCANCODE_KP_0, 0x52 }, + { SDL_SCANCODE_KP_1, 0x4f }, + { SDL_SCANCODE_KP_2, 0x50 }, + { SDL_SCANCODE_KP_3, 0x51 }, + { SDL_SCANCODE_KP_4, 0x48 }, + { SDL_SCANCODE_KP_5, 0x4c }, + { SDL_SCANCODE_KP_6, 0x4d }, + { SDL_SCANCODE_KP_7, 0x47 }, + { SDL_SCANCODE_KP_8, 0x48 }, + { SDL_SCANCODE_KP_9, 0x49 }, + { SDL_SCANCODE_SEMICOLON, 0x27 }, + { SDL_SCANCODE_APOSTROPHE, 0x28 }, + { SDL_SCANCODE_COMMA, 0x33 }, + { SDL_SCANCODE_PERIOD, 0x34 }, + { SDL_SCANCODE_SLASH, 0x35 }, + { SDL_SCANCODE_PRINTSCREEN, 0xb7 } +}; + +int sdl_scancode(SDL_Scancode scancode) +{ + int i; + for (i = 0; i < SDL_arraysize(SDLScancodeToSystemScancode); ++i) { + if (SDLScancodeToSystemScancode[i].sdl == scancode) { + return SDLScancodeToSystemScancode[i].system; + } + } + return -1; +} + +SDL_Event event; +SDL_Rect rect; +int border_x, border_y = 0; + +uint64_t render_time = 0; +int render_fps = 0; +uint32_t render_frame_time = 0; +uint32_t render_frames = 0; + +void window_setup() +{ + SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "0"); + SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1"); + SDL_SetHint(SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4, "1"); + + if (start_in_fullscreen) + { + start_in_fullscreen = 0; + window_dofullscreen = 1; + window_doinputgrab = 1; + } + + if (window_remember) + { + rect.x = window_x; + rect.y = window_y; + rect.w = window_w; + rect.h = window_h; + } + else + { + rect.x = SDL_WINDOWPOS_CENTERED; + rect.y = SDL_WINDOWPOS_CENTERED; + rect.w = 640; + rect.h = 480; + } +} + +int window_create() +{ + int i; + WNDCLASSEX wincl; /* Data structure for the windowclass */ + + hinstance = (HINSTANCE)GetModuleHandle(NULL); + /* The Window structure */ + wincl.hInstance = hinstance; + wincl.lpszClassName = szClassName; + wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ + wincl.style = CS_DBLCLKS; /* Catch double-clicks */ + wincl.cbSize = sizeof (WNDCLASSEX); + + /* Use default icon and mouse-pointer */ + wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); + wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); + wincl.hCursor = NULL;//LoadCursor (NULL, IDC_ARROW); + wincl.lpszMenuName = NULL; /* No menu */ + wincl.cbClsExtra = 0; /* No extra bytes after the window class */ + wincl.cbWndExtra = 0; /* structure or the window instance */ + /* Use Windows's default color as the background of the window */ + wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; + + /* Register the window class, and if it fails quit the program */ + if (!RegisterClassEx(&wincl)) + return 0; + + wincl.lpszClassName = szSubClassName; + wincl.lpfnWndProc = subWindowProcedure; /* This function is called by windows */ + + if (!RegisterClassEx(&wincl)) + return 0; + + menu = CreateMenu(); + HMENU native_menu = (HMENU)wx_getnativemenu(menu_ptr); + int count = GetMenuItemCount(native_menu); + MENUITEMINFO info; + for (i = 0; i < count; ++i) + { + char label[256]; + memset(&info, 0, sizeof(MENUITEMINFO)); + info.cbSize = sizeof(MENUITEMINFO); + info.fMask = MIIM_TYPE | MIIM_ID; + info.fType = MFT_STRING; + info.cch = 256; + info.dwTypeData = label; + if (GetMenuItemInfo(native_menu, i, 1, &info)) + AppendMenu(menu, MF_STRING | MF_POPUP, (UINT)GetSubMenu(native_menu, i), info.dwTypeData); + } + + /* The class is registered, let's create the program*/ + hwnd = CreateWindowEx ( + 0, /* Extended possibilites for variation */ + szClassName, /* Classname */ + "PCem v12", /* Title Text */ + WS_OVERLAPPEDWINDOW&~WS_SIZEBOX, /* default window */ + CW_USEDEFAULT, /* Windows decides the position */ + CW_USEDEFAULT, /* where the window ends up on the screen */ + 640+(GetSystemMetrics(SM_CXFIXEDFRAME)*2), /* The programs width */ + 480+(GetSystemMetrics(SM_CYFIXEDFRAME)*2)+GetSystemMetrics(SM_CYMENUSIZE)+GetSystemMetrics(SM_CYCAPTION)+1, /* and height in pixels */ + HWND_DESKTOP, /* The window is a child-window to desktop */ + menu, /* Menu */ + hinstance, /* Program Instance handler */ + NULL /* No Window Creation data */ + ); + + /* Make the window visible on the screen */ + ShowWindow(hwnd, 1); + + memset(rawinputkey, 0, sizeof(rawinputkey)); + device.usUsagePage = 0x01; + device.usUsage = 0x06; + device.dwFlags = RIDEV_NOHOTKEYS; + device.hwndTarget = hwnd; + + if (RegisterRawInputDevices(&device, 1, sizeof(device))) + pclog("Raw input registered!\n"); + else + pclog("Raw input registration failed!\n"); + + hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(NULL), 0 ); + + if (requested_render_driver.sdl_window_params & SDL_WINDOW_OPENGL) + { + /* create dummy window for opengl */ + dummy_window = SDL_CreateWindow("GL3 test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1, 1, SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL); + if (dummy_window) + { + char ptr[32]; + snprintf(ptr, 31, "%p", dummy_window); + ptr[31] = 0; + SDL_SetHint(SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, ptr); + } + } + window = SDL_CreateWindowFrom(hwnd); + if (!window) + { + char message[200]; + sprintf(message, + "SDL window could not be created! Error: %s\n", + SDL_GetError()); + wx_messagebox(window_ptr, message, "SDL Error", WX_MB_OK); + return 0; + } + + SDL_SetWindowPosition(window, rect.x, rect.y); + SDL_SetWindowSize(window, rect.w, rect.h); + + if (vid_resize) + window_dosetresize = 1; + + render_time = 0; + render_fps = 0; + render_frame_time = SDL_GetTicks(); + render_frames = 0; + return 1; +} + +void window_close() +{ + int i; + sdl_renderer_close(); + + int count = GetMenuItemCount(menu); + for (i = 0; i < count; ++i) + RemoveMenu(menu, 0, MF_BYPOSITION); + DestroyMenu(menu); + menu = 0; + SetMenu(hwnd, 0); + + if (window) { + SDL_GetWindowPosition(window, &rect.x, &rect.y); + SDL_GetWindowSize(window, &rect.w, &rect.h); + get_border_size(&border_y, &border_x, 0, 0); + rect.x -= border_x; + rect.y -= border_y; + + SDL_DestroyWindow(window); + } + window = NULL; + + if (dummy_window) + { + SDL_SetHint(SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, ""); + SDL_DestroyWindow(dummy_window); + } + dummy_window = NULL; + + UnhookWindowsHookEx( hKeyboardHook ); + DestroyWindow(hwnd); + hwnd = NULL; + + UnregisterClass(szSubClassName, hinstance); + UnregisterClass(szClassName, hinstance); + +} + +int render() +{ + uint64_t start_time = timer_read(); + uint64_t end_time; + + if (window_doreset) + { + pclog("window_doreset\n"); + window_doreset = 0; + renderer_doreset = 0; + return 0; + } + if (window_dosetresize) + { + window_dosetresize = 0; + SDL_GetWindowSize(window, &rect.w, &rect.h); + SDL_SetWindowResizable(window, vid_resize); + SDL_SetWindowSize(window, rect.w, rect.h); + } + if (renderer_doreset) + { + pclog("renderer_doreset\n"); + renderer_doreset = 0; + sdl_renderer_close(); + sdl_renderer_init(window); + + device_force_redraw(); + video_wait_for_blit(); + } + while(SDL_PollEvent(&event)) + { + switch (event.type) { + case SDL_MOUSEBUTTONUP: + if (!mousecapture) + { + if (event.button.button == SDL_BUTTON_LEFT && !pause) + { + window_doinputgrab = 1; + if (video_fullscreen) + window_dofullscreen = 1; + } + } + else if (event.button.button == SDL_BUTTON_MIDDLE && !is_fullscreen()) + window_doinputrelease = 1; + break; + case SDL_MOUSEWHEEL: + if (mousecapture) mouse_wheel_update(event.wheel.y); + break; + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_CLOSE) + wx_stop_emulation(window_ptr); + + if (window_remember) + { + int flags = SDL_GetWindowFlags(window); + if (!(flags&SDL_WINDOW_FULLSCREEN) && !(flags&SDL_WINDOW_FULLSCREEN_DESKTOP)) + { + if (event.window.event == SDL_WINDOWEVENT_MOVED) + { + get_border_size(&border_y, &border_x, 0, 0); + window_x = event.window.data1-border_x; + window_y = event.window.data2-border_y; + } + else if (event.window.event == SDL_WINDOWEVENT_RESIZED) + { + window_w = event.window.data1; + window_h = event.window.data2; + } + //save_window_pos = 1; + } + } + + break; + } + } + if (rawinputkey[sdl_scancode(SDL_SCANCODE_PAGEDOWN)] && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)]) && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LALT)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RALT)])) + trigger_fullscreen = 1; + else if (trigger_fullscreen) + { + trigger_fullscreen = 0; + toggle_fullscreen(); + } + else if (rawinputkey[sdl_scancode(SDL_SCANCODE_PAGEUP)] && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)]) && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LALT)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RALT)])) + trigger_screenshot = 1; + else if (trigger_screenshot) + { + trigger_screenshot = 0; + take_screenshot = 1; + } + else if (event.key.keysym.scancode == SDL_SCANCODE_END && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)])) + trigger_inputrelease = 1; + else if (trigger_inputrelease) + { + trigger_inputrelease = 0; + if (!is_fullscreen()) + window_doinputrelease = 1; + } + if (window_doremember) + { + window_doremember = 0; + SDL_GetWindowPosition(window, &window_x, &window_y); + SDL_GetWindowSize(window, &window_w, &window_h); + get_border_size(&border_y, &border_x, 0, 0); + window_x -= border_x; + window_y -= border_y; + saveconfig(NULL); + } + + if (window_dotogglefullscreen) + { + window_dotogglefullscreen = 0; + if (SDL_GetWindowGrab(window) || is_fullscreen()) + { + window_doinputrelease = 1; + if (is_fullscreen()) + window_dowindowed = 1; + } + else + { + window_doinputgrab = 1; + window_dofullscreen = 1; + } + } + + if (window_dofullscreen) + { + window_dofullscreen = 0; + SetMenu(hwnd, 0); + video_wait_for_blit(); + SDL_RaiseWindow(window); + SDL_GetGlobalMouseState(&remembered_mouse_x, &remembered_mouse_y); + SDL_GetWindowPosition(window, &remembered_rect.x, &remembered_rect.y); + get_border_size(&border_y, &border_x, 0, 0); + remembered_rect.x -= border_x; + remembered_rect.y -= border_y; + SDL_GetWindowSize(window, &remembered_rect.w, &remembered_rect.h); + SDL_SetWindowFullscreen(window, video_fullscreen_mode == 0 ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_FULLSCREEN); + } + if (window_doinputgrab) { + window_doinputgrab = 0; + mousecapture = 1; + SDL_GetRelativeMouseState(0, 0); + SDL_SetWindowGrab(window, SDL_TRUE); + SDL_SetRelativeMouseMode(SDL_TRUE); + } + if (mousecapture) + { + SDL_Rect rect; + SDL_GetWindowSize(window, &rect.w, &rect.h); + SDL_WarpMouseInWindow(window, rect.w/2, rect.h/2); + } + + if (window_doinputrelease) { + window_doinputrelease = 0; + releasemouse(); + } + if (window_dowindowed) + { + window_dowindowed = 0; + SetMenu(hwnd, menu); + SDL_SetWindowFullscreen(window, 0); + SDL_SetWindowSize(window, remembered_rect.w, remembered_rect.h); + SDL_SetWindowPosition(window, remembered_rect.x, remembered_rect.y); + SDL_WarpMouseGlobal(remembered_mouse_x, remembered_mouse_y); + } + + if (win_doresize) + { + win_doresize = 0; + if (!vid_resize || (flags&SDL_WINDOW_FULLSCREEN)) { + SDL_GetWindowSize(window, &rect.w, &rect.h); + if (rect.w != winsizex || rect.h != winsizey) { + SDL_GetWindowPosition(window, &rect.x, &rect.y); + SDL_SetWindowSize(window, winsizex, winsizey); + SDL_SetWindowPosition(window, rect.x, rect.y); + device_force_redraw(); + } + } + } + + if (sdl_renderer_update(window)) sdl_renderer_present(window); + + end_time = timer_read(); + render_time += end_time - start_time; + + ++render_frames; + uint32_t ticks = SDL_GetTicks(); + if (ticks-render_frame_time >= 1000) { + render_fps = render_frames/((ticks-render_frame_time)/1000.0); + render_frames = 0; + render_frame_time = ticks; + } + + return 1; +} + +int renderer_thread(void* params) +{ + int internal_rendering; + + SDL_LockMutex(rendererMutex); + SDL_CondSignal(rendererCond); + SDL_UnlockMutex(rendererMutex); + + window_setup(); + + rendering = 1; + while (rendering) { + + if (!window_create()) + rendering = 0; + + renderer_doreset = 1; + internal_rendering = 1; + while (rendering && internal_rendering) + { + if (!render()) + internal_rendering = 0; + + SDL_Delay(1); + } + window_close(); + } + + SDL_LockMutex(rendererMutex); + SDL_CondSignal(rendererCond); + SDL_UnlockMutex(rendererMutex); + + return SDL_TRUE; +} + +void* timer = 0; + +void render_timer() +{ +#ifdef PCEM_RENDER_TIMER_LOOP + /* For some reason this while-loop works on OSX, which also fixes missing events. No idea why though. */ + renderer_thread(0); +#else + if (rendering && !render()) + { + window_close(); + window_create(); + renderer_doreset = 1; + } +#endif +} + +void render_start_timer() +{ +#ifdef PCEM_RENDER_TIMER_LOOP + timer = wx_createtimer(render_timer); + wx_starttimer(timer, 500, 1); +#else + window_setup(); + if (window_create()) + { + rendering = 1; + renderer_doreset = 1; + wx_starttimer(timer, 1, 0); + } +#endif +} + +void renderer_start() +{ + if (!rendering) + { +#ifdef PCEM_RENDER_WITH_TIMER + render_start_timer(); +#else + SDL_LockMutex(rendererMutex); + renderthread = SDL_CreateThread(renderer_thread, "SDL2 Thread", NULL); + SDL_CondWait(rendererCond, rendererMutex); + SDL_UnlockMutex(rendererMutex); +#endif + } +} + +void renderer_stop(int timeout) +{ +#if defined(PCEM_RENDER_WITH_TIMER) && !defined(PCEM_RENDER_TIMER_LOOP) + rendering = 0; + window_close(); + wx_destroytimer(timer); +#else + if (rendering) + { + SDL_LockMutex(rendererMutex); + rendering = 0; + if (timeout) + SDL_CondWaitTimeout(rendererCond, rendererMutex, timeout); + else + SDL_CondWait(rendererCond, rendererMutex); + SDL_UnlockMutex(rendererMutex); + renderthread = NULL; + } + if (timer) + wx_destroytimer(timer); +#endif +} diff --git a/src/wx-sdl2-display.c b/src/wx-sdl2-display.c index b0fe236..3f1bd91 100644 --- a/src/wx-sdl2-display.c +++ b/src/wx-sdl2-display.c @@ -1,13 +1,14 @@ #include +#include "video.h" #include "wx-sdl2-video.h" #include "wx-utils.h" #include "ibm.h" -#include "video.h" #include "wx-display.h" #include "plat-keyboard.h" #ifdef __WINDOWS__ #define BITMAP WINDOWS_BITMAP +#undef UNICODE #include #include #undef BITMAP @@ -29,6 +30,7 @@ int mousecapture = 0; extern int pause; extern int video_scale; +extern int take_screenshot; void* ghwnd; void* menu; @@ -44,6 +46,7 @@ void renderer_start(); void renderer_stop(int timeout); int trigger_fullscreen = 0; +int trigger_screenshot = 0; int trigger_togglewindow = 0; int trigger_inputrelease = 0; @@ -53,27 +56,8 @@ extern void toggle_fullscreen(); void display_resize(int width, int height) { - /* Video scaling-code is borrowed from 86Box */ - switch(video_scale) - { - case 0: - winsizex = width >> 1; - winsizey = height >> 1; - break; - case 2: - winsizex = (width * 3) >> 1; - winsizey = (height * 3) >> 1; - break; - case 3: - winsizex = width << 1; - winsizey = height << 1; - break; - case 1: - default: - winsizex = width; - winsizey = height; - break; - } + winsizex = width*(video_scale+1) >> 1; + winsizey = height*(video_scale+1) >> 1; SDL_Rect rect; rect.x = rect.y = 0; @@ -144,7 +128,7 @@ int is_fullscreen() } void sdl_set_window_title(const char* title) { - if (window) + if (window && !is_fullscreen()) SDL_SetWindowTitle(window, title); } @@ -258,7 +242,7 @@ static const struct { { SDL_SCANCODE_KP_1, 0x4f }, { SDL_SCANCODE_KP_2, 0x50 }, { SDL_SCANCODE_KP_3, 0x51 }, - { SDL_SCANCODE_KP_4, 0x48 }, + { SDL_SCANCODE_KP_4, 0x4b }, { SDL_SCANCODE_KP_5, 0x4c }, { SDL_SCANCODE_KP_6, 0x4d }, { SDL_SCANCODE_KP_7, 0x47 }, @@ -365,12 +349,13 @@ LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) if (!mousecapture) key_state = -key_state; /* if key_state is 0 and modkeystate[c] is negative, - an sdl_event should not generated */ + an sdl_event should not be generated */ if (key_state > 0 || modkeystate[c] > 0) { - steal = 1; + steal = key_state != 0; SDL_Event event; event.key.keysym.scancode = s; + event.key.timestamp = p->time; event.type = key_state ? SDL_KEYDOWN : SDL_KEYUP; SDL_PushEvent(&event); @@ -389,7 +374,7 @@ int window_create() { window = SDL_CreateWindow("PCem Display", rect.x, rect.y, rect.w, rect.h, - vid_resize ? SDL_WINDOW_RESIZABLE : 0); + requested_render_driver.sdl_window_params | (vid_resize ? SDL_WINDOW_RESIZABLE : 0)); if (!window) { char message[200]; @@ -437,6 +422,17 @@ int render() uint64_t start_time = timer_read(); uint64_t end_time; + if (window_dosetresize) + { + window_dosetresize = 0; +#if SDL_VERSION_ATLEAST(2, 0, 5) + SDL_GetWindowSize(window, &rect.w, &rect.h); + SDL_SetWindowResizable(window, vid_resize); + SDL_SetWindowSize(window, rect.w, rect.h); +#else + window_doreset = 1; +#endif + } if (window_doreset) { pclog("window_doreset\n"); @@ -463,22 +459,22 @@ int render() if (event.button.button == SDL_BUTTON_LEFT && !pause) { window_doinputgrab = 1; - if (video_fullscreen) { + if (video_fullscreen) window_dofullscreen = 1; - } - } else if (event.button.button == SDL_BUTTON_RIGHT) - { - wx_popupmenu(ghwnd, menu, 0, 0); } + else if (event.button.button == SDL_BUTTON_RIGHT) + wx_popupmenu(ghwnd, menu, 0, 0); + } + else if (event.button.button == SDL_BUTTON_MIDDLE && !is_fullscreen()) + window_doinputrelease = 1; break; case SDL_MOUSEWHEEL: if (mousecapture) mouse_wheel_update(event.wheel.y); break; case SDL_WINDOWEVENT: - if (event.window.event == SDL_WINDOWEVENT_CLOSE) { + if (event.window.event == SDL_WINDOWEVENT_CLOSE) wx_stop_emulation(ghwnd); - } if (event.window.event == SDL_WINDOWEVENT_FOCUS_LOST) { if (is_fullscreen()) @@ -486,14 +482,19 @@ int render() window_doinputrelease = 1; } - if (window_remember) { + if (window_remember) + { int flags = SDL_GetWindowFlags(window); - if (!(flags&SDL_WINDOW_FULLSCREEN) && !(flags&SDL_WINDOW_FULLSCREEN_DESKTOP)) { - if (event.window.event == SDL_WINDOWEVENT_MOVED) { - get_border_size(&border_x, &border_y, 0, 0); + if (!(flags&SDL_WINDOW_FULLSCREEN) && !(flags&SDL_WINDOW_FULLSCREEN_DESKTOP)) + { + if (event.window.event == SDL_WINDOWEVENT_MOVED) + { + get_border_size(&border_y, &border_x, 0, 0); window_x = event.window.data1-border_x; window_y = event.window.data2-border_y; - } else if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + } + else if (event.window.event == SDL_WINDOWEVENT_RESIZED) + { window_w = event.window.data1; window_h = event.window.data2; } @@ -513,7 +514,7 @@ int render() #endif int key_idx = sdl_scancode(event.key.keysym.scancode); if (key_idx != -1) - rawinputkey[key_idx] = 1; + rawinputkey[key_idx] = event.key.timestamp; break; } case SDL_KEYUP: @@ -534,15 +535,15 @@ int render() trigger_fullscreen = 0; toggle_fullscreen(); } -// if (event.key.keysym.scancode == SDL_SCANCODE_PAGEUP && -// (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)]) && -// (rawinputkey[sdl_scancode(SDL_SCANCODE_LALT)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RALT)])) -// trigger_togglewindow = 1; -// else if (trigger_togglewindow) -// { -// trigger_togglewindow = 0; -// wx_togglewindow(ghwnd); -// } + else if (rawinputkey[sdl_scancode(SDL_SCANCODE_PAGEUP)] && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)]) && + (rawinputkey[sdl_scancode(SDL_SCANCODE_LALT)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RALT)])) + trigger_screenshot = 1; + else if (trigger_screenshot) + { + trigger_screenshot = 0; + take_screenshot = 1; + } else if (event.key.keysym.scancode == SDL_SCANCODE_END && (rawinputkey[sdl_scancode(SDL_SCANCODE_LCTRL)] || rawinputkey[sdl_scancode(SDL_SCANCODE_RCTRL)])) trigger_inputrelease = 1; @@ -552,7 +553,8 @@ int render() if (!is_fullscreen()) window_doinputrelease = 1; } - if (window_doremember) { + if (window_doremember) + { window_doremember = 0; SDL_GetWindowPosition(window, &window_x, &window_y); SDL_GetWindowSize(window, &window_w, &window_h); diff --git a/src/wx-sdl2-glw.h b/src/wx-sdl2-glw.h new file mode 100644 index 0000000..babf48b --- /dev/null +++ b/src/wx-sdl2-glw.h @@ -0,0 +1,92 @@ +#ifndef SRC_WX_SDL2_GLW_H_ +#define SRC_WX_SDL2_GLW_H_ + +typedef struct glw_t { + PFNGLACTIVETEXTUREPROC glActiveTexture; + PFNGLCREATESHADERPROC glCreateShader; + PFNGLSHADERSOURCEPROC glShaderSource; + PFNGLCOMPILESHADERPROC glCompileShader; + PFNGLGETSHADERIVPROC glGetShaderiv; + PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; + PFNGLCREATEPROGRAMPROC glCreateProgram; + PFNGLATTACHSHADERPROC glAttachShader; + PFNGLLINKPROGRAMPROC glLinkProgram; + PFNGLGETPROGRAMIVPROC glGetProgramiv; + PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; + PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; + PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; + PFNGLUSEPROGRAMPROC glUseProgram; + PFNGLGENERATEMIPMAPPROC glGenerateMipmap; + PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; + PFNGLDELETESHADERPROC glDeleteShader; + PFNGLDELETEPROGRAMPROC glDeleteProgram; + PFNGLDELETEBUFFERSPROC glDeleteBuffers; + PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; + PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; + PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; + PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; + PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; + PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; + PFNGLBINDVERTEXARRAYPROC glBindVertexArray; + PFNGLGENBUFFERSPROC glGenBuffers; + PFNGLBINDBUFFERPROC glBindBuffer; + PFNGLBUFFERDATAPROC glBufferData; + PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; + PFNGLUNIFORM1IPROC glUniform1i; + PFNGLUNIFORM1FPROC glUniform1f; + PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; + PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv; + PFNGLUNIFORM2FVPROC glUniform2fv; + PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; + PFNGLBUFFERSUBDATAPROC glBufferSubData; +} glw_t; + +glw_t* glw_init() +{ + glw_t* glw = malloc(sizeof(glw_t)); + glw->glActiveTexture = SDL_GL_GetProcAddress("glActiveTexture"); + glw->glCreateShader = SDL_GL_GetProcAddress("glCreateShader"); + glw->glShaderSource = SDL_GL_GetProcAddress("glShaderSource"); + glw->glCompileShader = SDL_GL_GetProcAddress("glCompileShader"); + glw->glGetShaderiv = SDL_GL_GetProcAddress("glGetShaderiv"); + glw->glGetShaderInfoLog = SDL_GL_GetProcAddress("glGetShaderInfoLog"); + glw->glCreateProgram = SDL_GL_GetProcAddress("glCreateProgram"); + glw->glAttachShader = SDL_GL_GetProcAddress("glAttachShader"); + glw->glLinkProgram = SDL_GL_GetProcAddress("glLinkProgram"); + glw->glGetProgramiv = SDL_GL_GetProcAddress("glGetProgramiv"); + glw->glGetProgramInfoLog = SDL_GL_GetProcAddress("glGetProgramInfoLog"); + glw->glGetUniformLocation = SDL_GL_GetProcAddress("glGetUniformLocation"); + glw->glGetAttribLocation = SDL_GL_GetProcAddress("glGetAttribLocation"); + glw->glUseProgram = SDL_GL_GetProcAddress("glUseProgram"); + glw->glGenerateMipmap = SDL_GL_GetProcAddress("glGenerateMipmap"); + glw->glDeleteFramebuffers = SDL_GL_GetProcAddress("glDeleteFramebuffers"); + glw->glDeleteShader = SDL_GL_GetProcAddress("glDeleteShader"); + glw->glDeleteProgram = SDL_GL_GetProcAddress("glDeleteProgram"); + glw->glDeleteBuffers = SDL_GL_GetProcAddress("glDeleteBuffers"); + glw->glDeleteVertexArrays = SDL_GL_GetProcAddress("glDeleteVertexArrays"); + glw->glGenFramebuffers = SDL_GL_GetProcAddress("glGenFramebuffers"); + glw->glBindFramebuffer = SDL_GL_GetProcAddress("glBindFramebuffer"); + glw->glFramebufferTexture2D = SDL_GL_GetProcAddress("glFramebufferTexture2D"); + glw->glCheckFramebufferStatus = SDL_GL_GetProcAddress("glCheckFramebufferStatus"); + glw->glGenVertexArrays = SDL_GL_GetProcAddress("glGenVertexArrays"); + glw->glBindVertexArray = SDL_GL_GetProcAddress("glBindVertexArray"); + glw->glGenBuffers = SDL_GL_GetProcAddress("glGenBuffers"); + glw->glBindBuffer = SDL_GL_GetProcAddress("glBindBuffer"); + glw->glBufferData = SDL_GL_GetProcAddress("glBufferData"); + glw->glVertexAttribPointer = SDL_GL_GetProcAddress("glVertexAttribPointer"); + glw->glUniform1i = SDL_GL_GetProcAddress("glUniform1i"); + glw->glUniform1f = SDL_GL_GetProcAddress("glUniform1f"); + glw->glEnableVertexAttribArray = SDL_GL_GetProcAddress("glEnableVertexAttribArray"); + glw->glUniformMatrix4fv = SDL_GL_GetProcAddress("glUniformMatrix4fv"); + glw->glUniform2fv = SDL_GL_GetProcAddress("glUniform2fv"); + glw->glDisableVertexAttribArray = SDL_GL_GetProcAddress("glDisableVertexAttribArray"); + glw->glBufferSubData = SDL_GL_GetProcAddress("glBufferSubData"); + return glw; +} + +void glw_free(glw_t* glw) +{ + free(glw); +} + +#endif /* SRC_WX_SDL2_GLW_H_ */ diff --git a/src/wx-sdl2-hdconf.c b/src/wx-sdl2-hdconf.c deleted file mode 100644 index b4e1e51..0000000 --- a/src/wx-sdl2-hdconf.c +++ /dev/null @@ -1,961 +0,0 @@ -#include "wx-utils.h" -#include "wx-sdl2.h" - -#include "ibm.h" -#include "ide.h" -#include "hdd.h" - -static struct -{ - int cylinders; - int heads; -} hd_types[] = -{ - {306, 4}, {615, 4}, {615, 6}, {940, 8}, - {940, 6}, {615, 4}, {462, 8}, {733, 5}, - {900, 15}, {820, 3}, {855, 5}, {855, 7}, - {306, 8}, {733, 7}, {0, 0}, {612, 4}, - {977, 5}, {977, 7}, {1024, 7}, {733, 5}, - {733, 7}, {733, 5}, {306, 4}, {925, 7}, - {925, 9}, {754, 7}, {754, 11}, {699, 7}, - {823, 10}, {918, 7}, {1024, 11}, {1024, 15}, - {1024, 5}, {612, 2}, {1024, 9}, {1024, 8}, - {615, 8}, {987, 3}, {462, 7}, {820, 6}, - {977, 5}, {981, 5}, {830, 7}, {830, 10}, - {917, 15}, {1224, 15} -}; - -static int hd_changed = 0; - -static char hd_new_name[512]; -static int hd_new_spt, hd_new_hpc, hd_new_cyl; -static int hd_new_type; -static int new_cdrom_channel; - -extern int pause; - -static void check_hd_type(off64_t sz) -{ - int c; - - hd_new_type = 0; - - if (hdd_controller_current_is_mfm()) - { - for (c = 0; c < 46; c++) - { - if ((hd_types[c].cylinders * hd_types[c].heads * 17 * 512) == sz) - { - hd_new_spt = 17; - hd_new_hpc = hd_types[c].heads; - hd_new_cyl = hd_types[c].cylinders; - hd_new_type = c+1; - return; - } - } - hd_new_spt = 63; - hd_new_hpc = 16; - hd_new_cyl = ((sz / 512) / 16) / 63; - } - else - { - if ((sz % 17) == 0 && sz <= 133693440) - { - hd_new_spt = 17; - - if (sz <= 26738688) - hd_new_hpc = 4; - else if ((sz % 3072) == 0 && sz <= 53477376) - hd_new_hpc = 6; - else - { - for (c=5;c<16;c++) - { - if((sz % (c * 512)) == 0 && sz <= 1024*c*17*512) break; - if (c == 5) c++; - } - hd_new_hpc = c; - } - - hd_new_cyl = (int)((sz / 512) / hd_new_hpc) / 17; - } - else - { - hd_new_spt = 63; - hd_new_hpc = 16; - hd_new_cyl = ((sz / 512) / 16) / 63; - } - } -} - -#define ID_IS(s) wParam == wx_xrcid(s) -#define ID_RANGE(a, b) wParam >= wx_xrcid(a) && wParam <= wx_xrcid(b) - -static void update_hdd_cdrom(void* hdlg) -{ - void* h; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDD[0]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 0) ? 0 : 1, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[0]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 0) ? 1 : 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDD[1]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 1) ? 0 : 1, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[1]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 1) ? 1 : 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDD[2]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 2) ? 0 : 1, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[2]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 2) ? 1 : 0, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDD[3]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 3) ? 0 : 1, 0); - h = wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[3]")); - wx_sendmessage(h, WX_BM_SETCHECK, (new_cdrom_channel == 3) ? 1 : 0, 0); -} - -static int hdnew_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) -{ - char s[260]; - void* h; - int c; - PcemHDC hd[4]; - FILE *f; - uint8_t buf[512]; - int hd_type; - - switch (message) - { - case WX_INITDIALOG: - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - sprintf(s, "%i", 63); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - sprintf(s, "%i", 16); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - sprintf(s, "%i", 511); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)""); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); - sprintf(s, "Size : %imb", (((511*16*63)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - -// hd_type = 0; - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); - wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)"Custom type"); - for (c = 1; c <= 46; c++) - { - sprintf(s, "Type %02i : cylinders=%i, heads=%i, size=%iMB", c, hd_types[c-1].cylinders, hd_types[c-1].heads, (hd_types[c-1].cylinders * hd_types[c-1].heads * 17 * 512) / (1024 * 1024)); - wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s); - } - wx_sendmessage(h, WX_CB_SETCURSEL, 0, 0); - - return TRUE; - case WX_COMMAND: - if (wParam == wxID_OK) { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); - wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)hd_new_name); - if (!hd_new_name[0]) - { - wx_messagebox(NULL,"Please enter a valid filename","PCem error",WX_MB_OK); - return TRUE; - } - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_cyl); - - if (hd_new_spt > 63) - { - wx_messagebox(NULL, "Drive has too many sectors (maximum is 63)", "PCem error", WX_MB_OK); - return TRUE; - } - if (hd_new_hpc > 16) - { - wx_messagebox(NULL, "Drive has too many heads (maximum is 16)", "PCem error", WX_MB_OK); - return TRUE; - } - if (hd_new_cyl > 16383) - { - wx_messagebox(NULL, "Drive has too many cylinders (maximum is 16383)", "PCem error", WX_MB_OK); - return TRUE; - } - - f = fopen64(hd_new_name, "wb"); - if (!f) - { - wx_messagebox(NULL, "Can't open file for write", "PCem error", WX_MB_OK); - return TRUE; - } - memset(buf, 0, 512); - for (c = 0; c < (hd_new_cyl * hd_new_hpc * hd_new_spt); c++) - fwrite(buf, 512, 1, f); - fclose(f); - - wx_messagebox(NULL, "Remember to partition and format the new drive", "PCem", WX_MB_OK); - - wx_enddialog(hdlg, 1); - return TRUE; - } else if (wParam == wxID_CANCEL) { - wx_enddialog(hdlg, 0); - return TRUE; - } else if (ID_IS("IDC_CFILE")) { - if (!getsfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "", NULL, "img")) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDITC")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM) openfilestring); - } - return TRUE; - } else if (ID_IS("IDC_EDIT1") || ID_IS("IDC_EDIT2") || ID_IS("IDC_EDIT3")) { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - pclog("EDIT1: %s\n", s); - sscanf(s, "%i", &hd[0].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - pclog("EDIT2: %s\n", s); - sscanf(s, "%i", &hd[0].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - pclog("EDIT3: %s\n", s); - sscanf(s, "%i", &hd[0].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_type = 0; - for (c = 1; c <= 46; c++) - { - pclog("Compare %i,%i %i,%i %i,%i\n", hd[0].spt,17, hd[0].hpc,hd_types[c-1].heads, hd[0].tracks,hd_types[c-1].cylinders); - if (hd[0].spt == 17 && hd[0].hpc == hd_types[c-1].heads && hd[0].tracks == hd_types[c-1].cylinders) - { - hd_type = c; - break; - } - } - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); - wx_sendmessage(h, WX_CB_SETCURSEL, hd_type, 0); - - return TRUE; - } else if (ID_IS("IDC_HDTYPE")) { - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); - hd_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); - if (hd_type) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - sprintf(s, "%i", hd_types[hd_type-1].cylinders); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - sprintf(s, "%i", hd_types[hd_type-1].heads); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)"17"); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); - sprintf(s, "Size : %imb", (int)(((uint64_t)hd_types[hd_type-1].cylinders*hd_types[hd_type-1].heads*17*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - } - return TRUE; - } - break; - - } - return FALSE; -} - -static int hdsize_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) -{ - char s[260]; - void* h; - PcemHDC hd[2]; - int c; - - switch (message) - { - case WX_INITDIALOG: - h = wx_getdlgitem(hdlg, WX_ID("IDC_HDTYPE")); - wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)"Custom type"); - for (c = 1; c <= 46; c++) - { - sprintf(s, "Type %02i : cylinders=%i, heads=%i, size=%iMB", c, hd_types[c-1].cylinders, hd_types[c-1].heads, (hd_types[c-1].cylinders * hd_types[c-1].heads * 17 * 512) / (1024 * 1024)); - wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s); - } - wx_sendmessage(h, WX_CB_SETCURSEL, hd_new_type, 0); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); - sprintf(s, "Size : %imb", (int)((((uint64_t)hd_new_spt*(uint64_t)hd_new_hpc*(uint64_t)hd_new_cyl)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - return TRUE; - case WX_COMMAND: - if (wParam == wxID_OK) { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd_new_cyl); - - if (hd_new_spt > 63) - { - wx_messagebox(NULL,"Drive has too many sectors (maximum is 63)","PCem error",WX_MB_OK); - return TRUE; - } - if (hd_new_hpc > 16) - { - wx_messagebox(NULL,"Drive has too many heads (maximum is 16)","PCem error",WX_MB_OK); - return TRUE; - } - if (hd_new_cyl > 16383) - { - wx_messagebox(NULL,"Drive has too many cylinders (maximum is 16383)","PCem error",WX_MB_OK); - return TRUE; - } - - wx_enddialog(hdlg,1); - return TRUE; - } else if (wParam == wxID_CANCEL) { - wx_enddialog(hdlg,0); - return TRUE; - } else if (ID_IS("IDC_EDIT1") || ID_IS("IDC_EDIT2") || ID_IS("IDC_EDIT3")) { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT1")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT2")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT3")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT1")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - return TRUE; - } - - } - return FALSE; -} - -static int hdconf_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) -{ - char s[260]; - void* h; - PcemHDC hd[4]; - FILE *f; - off64_t sz; - switch (message) - { - case WX_INITDIALOG: - pause = 1; - hd[0] = hdc[0]; - hd[1] = hdc[1]; - hd[2] = hdc[2]; - hd[3] = hdc[3]; - hd_changed = 0; - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); - sprintf(s, "%i", hdc[0].spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); - sprintf(s, "%i", hdc[0].hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); - sprintf(s, "%i", hdc[0].tracks); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[0]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); - sprintf(s, "%i", hdc[1].spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); - sprintf(s, "%i", hdc[1].hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); - sprintf(s, "%i", hdc[1].tracks); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[1]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); - sprintf(s, "%i", hdc[2].spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); - sprintf(s, "%i", hdc[2].hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); - sprintf(s, "%i", hdc[2].tracks); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[2]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); - sprintf(s, "%i", hdc[3].spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); - sprintf(s, "%i", hdc[3].hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); - sprintf(s, "%i", hdc[3].tracks); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h= wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)ide_fn[3]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[1].tracks*(uint64_t)hd[1].hpc)*(uint64_t)hd[1].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[2].tracks*(uint64_t)hd[2].hpc)*(uint64_t)hd[2].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd[3].tracks*(uint64_t)hd[3].hpc)*(uint64_t)hd[3].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - new_cdrom_channel = cdrom_channel; - - update_hdd_cdrom(hdlg); - - if (hdd_controller_current_is_mfm()) { - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_PANEL[2]")), 0); - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_PANEL[3]")), 0); - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_HDD[0]")), 0); - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_HDD[1]")), 0); - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[0]")), 0); - wx_enablewindow(wx_getdlgitem(hdlg, WX_ID("IDC_CDROM[1]")), 0); - } - return TRUE; - - case WX_COMMAND: - if (wParam == wxID_OK) - { - if (hd_changed || cdrom_channel != new_cdrom_channel) - { - if (!has_been_inited || confirm()) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].tracks); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[0]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].tracks); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[1]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].tracks); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[2]); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].tracks); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 511, (LONG_PARAM)ide_fn[3]); - - hdc[0] = hd[0]; - hdc[1] = hd[1]; - hdc[2] = hd[2]; - hdc[3] = hd[3]; - - cdrom_channel = new_cdrom_channel; - - if (has_been_inited) - { - saveconfig(NULL); - - resetpchard(); - } - } - } - } - if (wParam == wxID_OK || wParam == wxID_CANCEL) - { - wx_enddialog(hdlg, 0); - pause = 0; - return TRUE; - } else if (ID_IS("IDC_EJECT[0]")) - { - hd[0].spt = 0; - hd[0].hpc = 0; - hd[0].tracks = 0; - ide_fn[0][0] = 0; - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[0]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[0]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[0]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[0]"), ""); - hd_changed = 1; - return TRUE; - } else if (ID_IS("IDC_EJECT[1]")) - { - hd[1].spt = 0; - hd[1].hpc = 0; - hd[1].tracks = 0; - ide_fn[1][0] = 0; - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[1]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[1]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[1]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[1]"), ""); - hd_changed = 1; - return TRUE; - } else if (ID_IS("IDC_EJECT[2]")) - { - hd[2].spt = 0; - hd[2].hpc = 0; - hd[2].tracks = 0; - ide_fn[2][0] = 0; - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[2]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[2]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[2]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[2]"), ""); - hd_changed = 1; - return TRUE; - } else if (ID_IS("IDC_EJECT[3]")) - { - hd[3].spt = 0; - hd[3].hpc = 0; - hd[3].tracks = 0; - ide_fn[3][0] = 0; - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_SPT[3]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_HPC[3]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_CYL[3]"), "0"); - wx_setdlgitemtext(hdlg, WX_ID("IDC_EDIT_FN[3]"), ""); - hd_changed = 1; - return TRUE; - } - else if (ID_IS("IDC_NEW[0]")) - { - if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - return TRUE; - } - else if (ID_IS("IDC_FILE[0]")) - { - if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) - { - f = fopen64(openfilestring, "rb"); - if (!f) - { - wx_messagebox(NULL,"Can't open file for read","PCem error",WX_MB_OK); - return TRUE; - } - fseeko64(f, -1, SEEK_END); - sz = ftello64(f) + 1; - fclose(f); - check_hd_type(sz); - - if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[0]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); - - h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - } - return TRUE; - - } - else if (ID_IS("IDC_NEW[1]")) - { - if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); - - h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - return TRUE; - } - else if (ID_IS("IDC_FILE[1]")) - { - if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) - { - f = fopen64(openfilestring, "rb"); - if (!f) - { - wx_messagebox(NULL,"Can't open file for read","PCem error",WX_MB_OK); - return TRUE; - } - fseeko64(f, -1, SEEK_END); - sz = ftello64(f) + 1; - fclose(f); - check_hd_type(sz); - - if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[1]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - } - return TRUE; - } - else if (ID_IS("IDC_NEW[2]")) - { - if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); - - h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - return TRUE; - } - else if (ID_IS("IDC_FILE[2]")) - { - if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) - { - f = fopen64(openfilestring, "rb"); - if (!f) - { - wx_messagebox(NULL,"Can't open file for read","PCem error",WX_MB_OK); - return TRUE; - } - fseeko64(f, -1, SEEK_END); - sz = ftello64(f) + 1; - fclose(f); - check_hd_type(sz); - - if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[2]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - } - return TRUE; - } - else if (ID_IS("IDC_NEW[3]")) - { - if (wx_dialogbox(hdlg, "HdNewDlg", hdnew_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)hd_new_name); - - h= wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - return TRUE; - } - else if (ID_IS("IDC_FILE[3]")) - { - if (!getfile(hdlg, "Hard disc image (*.img)|*.img|All files (*.*)|*.*", "")) - { - f = fopen64(openfilestring, "rb"); - if (!f) - { - wx_messagebox(NULL,"Can't open file for read","PCem error",WX_MB_OK); - return TRUE; - } - fseeko64(f, -1, SEEK_END); - sz = ftello64(f) + 1; - fclose(f); - check_hd_type(sz); - - if (wx_dialogbox(hdlg, "HdSizeDlg", hdsize_dlgproc) == 1) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); - sprintf(s, "%i", hd_new_spt); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); - sprintf(s, "%i", hd_new_hpc); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); - sprintf(s, "%i", hd_new_cyl); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_FN[3]")); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)openfilestring); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); - sprintf(s, "Size : %imb", (int)(((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - - hd_changed = 1; - } - } - return TRUE; - } - else if (ID_IS("IDC_EDIT_SPT[0]") || ID_IS("IDC_EDIT_HPC[0]") || ID_IS("IDC_EDIT_CYL[0]")) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[0]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[0].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[0]")); - sprintf(s, "Size : %imb", ((((hd[0].tracks*hd[0].hpc)*hd[0].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - return TRUE; - } - else if (ID_IS("IDC_EDIT_SPT[1]") || ID_IS("IDC_EDIT_HPC[1]") || ID_IS("IDC_EDIT_CYL[1]")) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[1]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[1].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[1]")); - sprintf(s, "Size : %imb", ((((hd[1].tracks*hd[1].hpc)*hd[1].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - return TRUE; - } - else if (ID_IS("IDC_EDIT_SPT[2]") || ID_IS("IDC_EDIT_HPC[2]") || ID_IS("IDC_EDIT_CYL[2]")) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[2]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[2].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[2]")); - sprintf(s, "Size : %imb", ((((hd[2].tracks*hd[2].hpc)*hd[2].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - return TRUE; - } - else if (ID_IS("IDC_EDIT_SPT[3]") || ID_IS("IDC_EDIT_HPC[3]") || ID_IS("IDC_EDIT_CYL[3]")) - { - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_SPT[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].spt); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_HPC[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].hpc); - h = wx_getdlgitem(hdlg, WX_ID("IDC_EDIT_CYL[3]")); - wx_sendmessage(h, WX_WM_GETTEXT, 255, (LONG_PARAM)s); - sscanf(s, "%i", &hd[3].tracks); - - h = wx_getdlgitem(hdlg, WX_ID("IDC_TEXT_SIZE[3]")); - sprintf(s, "Size : %imb", ((((hd[3].tracks*hd[3].hpc)*hd[3].spt)*512)/1024)/1024); - wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM)s); - return TRUE; - } - else if (ID_IS("IDC_HDD[0]")) - { - if (new_cdrom_channel == 0) - new_cdrom_channel = -1; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_HDD[1]")) - { - if (new_cdrom_channel == 1) - new_cdrom_channel = -1; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_HDD[2]")) - { - if (new_cdrom_channel == 2) - new_cdrom_channel = -1; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_HDD[3]")) - { - if (new_cdrom_channel == 3) - new_cdrom_channel = -1; - update_hdd_cdrom(hdlg); - return TRUE; - - } - else if (ID_IS("IDC_CDROM[0]")) - { - new_cdrom_channel = 0; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_CDROM[1]")) - { - new_cdrom_channel = 1; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_CDROM[2]")) - { - new_cdrom_channel = 2; - update_hdd_cdrom(hdlg); - return TRUE; - } - else if (ID_IS("IDC_CDROM[3]")) - { - new_cdrom_channel = 3; - update_hdd_cdrom(hdlg); - return TRUE; - } - - } - return FALSE; -} - -void hdconf_open(void* hwnd) -{ - wx_dialogbox(hwnd, "HdConfDlg", hdconf_dlgproc); -} diff --git a/src/wx-sdl2-keyboard.c b/src/wx-sdl2-keyboard.c index df2cffe..12eb626 100644 --- a/src/wx-sdl2-keyboard.c +++ b/src/wx-sdl2-keyboard.c @@ -18,6 +18,6 @@ void keyboard_poll_host() int c; for (c = 0; c < 272; ++c) - pcem_key[c] = rawinputkey[c]; + pcem_key[c] = rawinputkey[c] > 0; } diff --git a/src/wx-sdl2-midi.c b/src/wx-sdl2-midi.c index 9ad75b0..9f89456 100644 --- a/src/wx-sdl2-midi.c +++ b/src/wx-sdl2-midi.c @@ -12,3 +12,12 @@ void midi_close() void midi_write(uint8_t val) { } + +int midi_get_num_devs() +{ + return 0; +} + +void midi_get_dev_name(int num, char *s) +{ +} diff --git a/src/wx-sdl2-mouse.c b/src/wx-sdl2-mouse.c index 1f61758..a9326cf 100644 --- a/src/wx-sdl2-mouse.c +++ b/src/wx-sdl2-mouse.c @@ -1,4 +1,5 @@ -#include +#include +#include #include "plat-mouse.h" int mouse_buttons; diff --git a/src/wx-sdl2-status.c b/src/wx-sdl2-status.c index 78bacfb..9286c9c 100644 --- a/src/wx-sdl2-status.c +++ b/src/wx-sdl2-status.c @@ -1,8 +1,9 @@ +#include +#include "video.h" #include "wx-sdl2.h" #include "wx-sdl2-video.h" #include "ibm.h" #include "device.h" -#include "video.h" #include "x86_ops.h" #include "mem.h" #include "codegen.h" diff --git a/src/wx-sdl2-video-gl3.c b/src/wx-sdl2-video-gl3.c new file mode 100644 index 0000000..2030190 --- /dev/null +++ b/src/wx-sdl2-video-gl3.c @@ -0,0 +1,1656 @@ +#include +#define BITMAP WINDOWS_BITMAP +#include +#if SDL_VERSION_ATLEAST(2, 0, 4) +#include +#endif +#undef BITMAP +#include "wx-sdl2-glw.h" +#include +#include +#include +#include "video.h" +#include "wx-sdl2-video.h" +#include "wx-sdl2-video-renderer.h" +#include "ibm.h" +#include "wx-glslp-parser.h" +#include "wx-utils.h" +#include "config.h" +#include "wx-glsl.h" + +extern char* get_filename(char*); + +extern int take_screenshot; +extern void screenshot_taken(unsigned char* rgb, int width, int height); + +#define SCALE_SOURCE 0 +#define SCALE_VIEWPORT 1 +#define SCALE_ABSOLUTE 2 + +float gl3_shader_refresh_rate = 0; +float gl3_input_scale = 1.0f; +int gl3_input_stretch = FULLSCR_SCALE_FULL; +char gl3_shader_file[MAX_USER_SHADERS][512]; + +static int max_texture_size; + +static SDL_GLContext context = NULL; +static struct shader_texture scene_texture; + +static glsl_t* active_shader; + +static glw_t* glw; + +static GLfloat matrix[] = { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 +}; + + +extern int video_scale_mode; +extern int video_vsync; +extern int video_focus_dim; +extern int video_refresh_rate; + +const char* vertex_shader_default_tex_src = + "#version 130\n" + "\n" + "in vec4 VertexCoord;\n" + "in vec2 TexCoord;\n" + "\n" + "out vec2 texCoord;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = VertexCoord;\n" + " texCoord = TexCoord;\n" + "}\n"; + +const char* fragment_shader_default_tex_src = + "#version 130\n" + "\n" + "in vec2 texCoord;\n" + "uniform sampler2D Texture;\n" + "\n" + "out vec4 color;" + "\n" + "void main()\n" + "{\n" + " color = texture(Texture, texCoord);\n" + "}\n"; + +const char* vertex_shader_default_color_src = + "#version 130\n" + "\n" + "in vec4 VertexCoord;\n" + "in vec4 Color;\n" + "\n" + "out vec4 color;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = VertexCoord;\n" + " color = Color;\n" + "}\n"; + +const char* fragment_shader_default_color_src = + "#version 130\n" + "\n" + "in vec4 color;\n" + "\n" + "out vec4 outColor;" + "\n" + "void main()\n" + "{\n" + " outColor = color;\n" + "}\n"; + +static int next_pow2(unsigned int n) +{ + n--; + n |= n >> 1; // Divide by 2^k for consecutive doublings of k up to 32, + n |= n >> 2; // and then or the results. + n |= n >> 4; + n |= n >> 8; + n |= n >> 16; + n++; + + return n; +} + +static int compile_shader(GLenum shader_type, const char* prepend, const char* program, int* dst) +{ + const char* source[3]; + source[0] = ""; + source[1] = prepend ? prepend : ""; + source[2] = 0; + char version[50]; + if (strstr(program, "#version")) + { + char* line = strchr(program, '\n'); + int len = (line-program)+1; + if (len >= sizeof(version)-1) len = sizeof(version)-1; + strncpy(version, program, len); + version[len] = 0; + source[0] = version; + source[2] = line; + } + else + { +// source[0] = "#version 130\n"; + source[2] = program; + } + + GLuint shader = glw->glCreateShader(shader_type); + glw->glShaderSource(shader, 3, source, NULL); + glw->glCompileShader(shader); + + GLint status = 0; + glw->glGetShaderiv(shader, GL_COMPILE_STATUS, &status); + if (!status) + { + GLint length; + glw->glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); + char* log = malloc(length); + glw->glGetShaderInfoLog(shader, length, &length, log); + wx_simple_messagebox("GLSL Error", "Could not compile shader:\n%s", log); + pclog("Could not compile shader: %s\n", log); +// pclog("Shader: %s\n", program); + + free(log); + return 0; + } + + *dst = shader; + + return 1; +} + +static int create_program(struct shader_program* program) +{ + GLint status; + program->id = glw->glCreateProgram(); + glw->glAttachShader(program->id, program->vertex_shader); + glw->glAttachShader(program->id, program->fragment_shader); + + glw->glLinkProgram(program->id); + + glw->glDeleteShader(program->vertex_shader); + glw->glDeleteShader(program->fragment_shader); + + program->vertex_shader = program->fragment_shader = 0; + + glw->glGetProgramiv(program->id, GL_LINK_STATUS, &status); + + if (!status) + { + int maxLength; + int length; + glw->glGetProgramiv(program->id, GL_INFO_LOG_LENGTH, &maxLength); + char* log = malloc(maxLength); + glw->glGetProgramInfoLog(program->id, maxLength, &length, log); + wx_simple_messagebox("GLSL Error", "Program not linked:\n%s", log); + free(log); + return 0; + } + + return 1; +} + +static GLuint get_uniform(GLuint program, const char* name) +{ + return glw->glGetUniformLocation(program, name); +} + +static GLuint get_attrib(GLuint program, const char* name) +{ + return glw->glGetAttribLocation(program, name); +} + +static void find_uniforms(struct glsl_shader* glsl, int num_pass) +{ + int i; + char s[50]; + struct shader_pass* pass = &glsl->passes[num_pass]; + int p = pass->program.id; + glw->glUseProgram(p); + + struct shader_uniforms* u = &pass->uniforms; + + u->mvp_matrix = get_uniform(p, "MVPMatrix"); + u->vertex_coord = get_attrib(p, "VertexCoord"); + u->tex_coord = get_attrib(p, "TexCoord"); + u->color = get_attrib(p, "Color"); + + u->frame_count = get_uniform(p, "FrameCount"); + u->frame_direction = get_uniform(p, "FrameDirection"); + + u->texture = get_uniform(p, "Texture"); + u->input_size = get_uniform(p, "InputSize"); + u->texture_size = get_uniform(p, "TextureSize"); + u->output_size = get_uniform(p, "OutputSize"); + + u->orig.texture = get_uniform(p, "OrigTexture"); + u->orig.input_size = get_uniform(p, "OrigInputSize"); + u->orig.texture_size = get_uniform(p, "OrigTextureSize"); + + for (i = 0; i < glsl->num_passes; ++i) + { + sprintf(s, "Pass%dTexture", (i+1)); + u->pass[i].texture = get_uniform(p, s); + sprintf(s, "Pass%dInputSize", (i+1)); + u->pass[i].input_size = get_uniform(p, s); + sprintf(s, "Pass%dTextureSize", (i+1)); + u->pass[i].texture_size = get_uniform(p, s); + + sprintf(s, "PassPrev%dTexture", num_pass-i); + u->prev_pass[i].texture = get_uniform(p, s); + sprintf(s, "PassPrev%dInputSize", num_pass-i); + u->prev_pass[i].input_size = get_uniform(p, s); + sprintf(s, "PassPrev%dTextureSize", num_pass-i); + u->prev_pass[i].texture_size = get_uniform(p, s); + } + + u->prev[0].texture = get_uniform(p, "PrevTexture"); + u->prev[0].tex_coord = get_attrib(p, "PrevTexCoord"); + for (i = 1; i < MAX_PREV; ++i) + { + sprintf(s, "Prev%dTexture", i); + u->prev[i].texture = get_uniform(p, s); + sprintf(s, "Prev%dTexCoord", i); + u->prev[i].tex_coord = get_attrib(p, s); + } + for (i = 0; i < MAX_PREV; ++i) + if (u->prev[i].texture >= 0) glsl->has_prev = 1; + + for (i = 0; i < glsl->num_lut_textures; ++i) + u->lut_textures[i] = get_uniform(p, glsl->lut_textures[i].name); + + for (i = 0; i < glsl->num_parameters; ++i) + u->parameters[i] = get_uniform(p, glsl->parameters[i].id); + + glw->glUseProgram(0); +} + +static void set_scale_mode(char* scale, int* dst) +{ + if (!strcmp(scale, "viewport")) + *dst = SCALE_VIEWPORT; + else if (!strcmp(scale, "absolute")) + *dst = SCALE_ABSOLUTE; + else + *dst = SCALE_SOURCE; +} + +static void setup_scale(struct shader* shader, struct shader_pass* pass) +{ + set_scale_mode(shader->scale_type_x, &pass->scale.mode[0]); + set_scale_mode(shader->scale_type_y, &pass->scale.mode[1]); + pass->scale.value[0] = shader->scale_x; + pass->scale.value[1] = shader->scale_y; +} + +static void create_texture(struct shader_texture* tex) +{ + if (tex->width > max_texture_size) + tex->width = max_texture_size; + if (tex->height > max_texture_size) + tex->height = max_texture_size; + pclog("Create texture with size %dx%d\n", tex->width, tex->height); + glGenTextures(1, &tex->id); + glBindTexture(GL_TEXTURE_2D, tex->id); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, tex->wrap_mode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, tex->wrap_mode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, tex->min_filter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, tex->mag_filter); + glTexImage2D(GL_TEXTURE_2D, 0, tex->internal_format, tex->width, tex->height, 0, tex->format, tex->type, tex->data); + if (tex->mipmap) + glw->glGenerateMipmap(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, 0); +} + +static void delete_texture(struct shader_texture* tex) +{ + if (tex->id > 0) + glDeleteTextures(1, &tex->id); + tex->id = 0; +} + +static void delete_fbo(struct shader_fbo* fbo) +{ + if (fbo->id >= 0) + { + glw->glDeleteFramebuffers(1, &fbo->id); + delete_texture(&fbo->texture); + } +} + +static void delete_program(struct shader_program* program) +{ + if (program->vertex_shader) glw->glDeleteShader(program->vertex_shader); + if (program->fragment_shader) glw->glDeleteShader(program->fragment_shader); + glw->glDeleteProgram(program->id); +} + +static void delete_vbo(struct shader_vbo* vbo) +{ + if (vbo->color >= 0) glw->glDeleteBuffers(1, &vbo->color); + glw->glDeleteBuffers(1, &vbo->vertex_coord); + glw->glDeleteBuffers(1, &vbo->tex_coord); +} + +static void delete_pass(struct shader_pass* pass) +{ + delete_fbo(&pass->fbo); + delete_vbo(&pass->vbo); + delete_program(&pass->program); + glw->glDeleteVertexArrays(1, &pass->vertex_array); +} + +static void delete_prev(struct shader_prev* prev) +{ + delete_fbo(&prev->fbo); + delete_vbo(&prev->vbo); +} + +static void delete_shader(struct glsl_shader* glsl) +{ + int i; + for (i = 0; i < glsl->num_passes; ++i) + delete_pass(&glsl->passes[i]); + if (glsl->has_prev) + { + delete_pass(&glsl->prev_scene); + for (i = 0; i < MAX_PREV; ++i) + delete_prev(&glsl->prev[i]); + } + for (i = 0; i < glsl->num_lut_textures; ++i) + delete_texture(&glsl->lut_textures[i].texture); +} + +static void delete_glsl(glsl_t* glsl) +{ + int i; + for (i = 0; i < glsl->num_shaders; ++i) + delete_shader(&glsl->shaders[i]); + delete_pass(&glsl->scene); + delete_pass(&glsl->fs_color); + delete_pass(&glsl->final_pass); +#ifdef SDL2_SHADER_DEBUG + delete_pass(&glsl->debug); +#endif +} + +static void create_fbo(struct shader_fbo* fbo) +{ + create_texture(&fbo->texture); + + glw->glGenFramebuffers(1, &fbo->id); + glw->glBindFramebuffer(GL_FRAMEBUFFER, fbo->id); + glw->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo->texture.id, 0); + + if (glw->glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) + pclog("Could not create framebuffer!\n"); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, 0); +} + +static void setup_fbo(struct shader* shader, struct shader_fbo* fbo) +{ + fbo->texture.internal_format = GL_RGBA8; + fbo->texture.format = GL_RGBA; + fbo->texture.min_filter = fbo->texture.mag_filter = shader->filter_linear ? GL_LINEAR : GL_NEAREST; + fbo->texture.width = 1024; + fbo->texture.height = 1024; + fbo->texture.type = GL_UNSIGNED_BYTE; + if (!strcmp(shader->wrap_mode, "repeat")) + fbo->texture.wrap_mode = GL_REPEAT; + else if (!strcmp(shader->wrap_mode, "mirrored_repeat")) + fbo->texture.wrap_mode = GL_MIRRORED_REPEAT; + else if (!strcmp(shader->wrap_mode, "clamp_to_edge")) + fbo->texture.wrap_mode = GL_CLAMP_TO_EDGE; + else + fbo->texture.wrap_mode = GL_CLAMP_TO_BORDER; + fbo->srgb = 0; + if (shader->srgb_framebuffer) + { + fbo->texture.internal_format = GL_SRGB8_ALPHA8; + fbo->srgb = 1; + } + else if (shader->float_framebuffer) + { + fbo->texture.internal_format = GL_RGBA32F; + fbo->texture.type = GL_FLOAT; + } + + if (fbo->texture.mipmap) + fbo->texture.min_filter = shader->filter_linear ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST; + + create_fbo(fbo); +} + +static void recreate_fbo(struct shader_fbo* fbo, int width, int height) +{ + if (width != fbo->texture.width || height != fbo->texture.height) + { + glw->glDeleteFramebuffers(1, &fbo->id); + glDeleteTextures(1, &fbo->texture.id); + fbo->texture.width = width; + fbo->texture.height = height; + create_fbo(fbo); + } +} + +static int create_default_shader_tex(struct shader_pass* pass) +{ + if ( + !compile_shader(GL_VERTEX_SHADER, 0, vertex_shader_default_tex_src, &pass->program.vertex_shader) || + !compile_shader(GL_FRAGMENT_SHADER, 0, fragment_shader_default_tex_src, &pass->program.fragment_shader) || + !create_program(&pass->program)) + return 0; + glw->glGenVertexArrays(1, &pass->vertex_array); + + struct shader_uniforms* u = &pass->uniforms; + int p = pass->program.id; + memset(u, -1, sizeof(struct shader_uniforms)); + u->vertex_coord = get_attrib(p, "VertexCoord"); + u->tex_coord = get_attrib(p, "TexCoord"); + u->texture = get_uniform(p, "Texture"); + pass->scale.mode[0] = pass->scale.mode[1] = SCALE_SOURCE; + pass->scale.value[0] = pass->scale.value[1] = 1.0f; + pass->fbo.id = -1; + pass->active = 1; + return 1; +} + +static int create_default_shader_color(struct shader_pass* pass) +{ + if ( + !compile_shader(GL_VERTEX_SHADER, 0, vertex_shader_default_color_src, &pass->program.vertex_shader) || + !compile_shader(GL_FRAGMENT_SHADER, 0, fragment_shader_default_color_src, &pass->program.fragment_shader) || + !create_program(&pass->program)) + return 0; + glw->glGenVertexArrays(1, &pass->vertex_array); + + struct shader_uniforms* u = &pass->uniforms; + int p = pass->program.id; + memset(u, -1, sizeof(struct shader_uniforms)); + u->vertex_coord = get_attrib(p, "VertexCoord"); + u->color = get_attrib(p, "Color"); + pass->scale.mode[0] = pass->scale.mode[1] = SCALE_SOURCE; + pass->scale.value[0] = pass->scale.value[1] = 1.0f; + pass->fbo.id = -1; + pass->active = 1; + return 1; +} + +/* create the default scene shader */ +static void create_scene_shader() +{ + struct shader scene_shader_conf; + memset(&scene_shader_conf, 0, sizeof(struct shader)); + create_default_shader_tex(&active_shader->scene); + setup_fbo(&scene_shader_conf, &active_shader->scene.fbo); + + memset(&scene_shader_conf, 0, sizeof(struct shader)); + create_default_shader_color(&active_shader->fs_color); + setup_fbo(&scene_shader_conf, &active_shader->fs_color.fbo); +} + +static int load_texture(const char* f, struct shader_texture* tex) +{ + void* img = wx_image_load(f); + if (!img) + return 0; + int width, height; + wx_image_get_size(img, &width, &height); + + if (width != next_pow2(width) || height != next_pow2(height)) + wx_image_rescale(img, next_pow2(width), next_pow2(height)); + + wx_image_get_size(img, &width, &height); + + GLubyte* rgb = wx_image_get_data(img); + GLubyte* alpha = wx_image_get_alpha(img); + + int bpp = alpha ? 4 : 3; + + GLubyte* data = malloc(width*height*bpp); + + int x, y, Y; + for (y = 0; y < height; ++y) + { + Y = height-y-1; + for (x = 0; x < width; x++) + { + data[(y*width+x)*bpp+0] = rgb[(Y*width+x)*3+0]; + data[(y*width+x)*bpp+1] = rgb[(Y*width+x)*3+1]; + data[(y*width+x)*bpp+2] = rgb[(Y*width+x)*3+2]; + + if (alpha) + data[(y*width+x)*bpp+3] = alpha[Y*width+x]; + } + } + wx_image_free(img); + + tex->width = width; + tex->height = height; + tex->internal_format = alpha ? GL_RGBA8 : GL_RGB8; + tex->format = alpha ? GL_RGBA : GL_RGB; + tex->type = GL_UNSIGNED_BYTE; + tex->data = data; + return 1; +} + +static glsl_t* load_glslp(glsl_t* glsl, int num_shader, const char* f) +{ + int i, j; + glslp_t* p = glslp_parse(f); + + if (p) + { + char path[512]; + char file[512]; + int failed = 0; + strcpy(path, f); + char* filename = get_filename(path); + + struct glsl_shader* gshader = &glsl->shaders[num_shader]; + + strcpy(gshader->name, p->name); + *filename = 0; + + gshader->num_lut_textures = p->num_textures; + + for (i = 0; i < p->num_textures; ++i) + { + struct texture* texture = &p->textures[i]; + + sprintf(file, "%s%s", path, texture->path); + + struct shader_lut_texture* tex = &gshader->lut_textures[i]; + strcpy(tex->name, texture->name); + + pclog("Load texture %s...\n", file); + + if (!load_texture(file, &tex->texture)) + { + wx_simple_messagebox("GLSL Error", "Could not load texture: %s", file); + pclog("Could not load texture %s!\n", file); + failed = 1; + break; + } + + if (!strcmp(texture->wrap_mode, "repeat")) + tex->texture.wrap_mode = GL_REPEAT; + else if (!strcmp(texture->wrap_mode, "mirrored_repeat")) + tex->texture.wrap_mode = GL_MIRRORED_REPEAT; + else if (!strcmp(texture->wrap_mode, "clamp_to_edge")) + tex->texture.wrap_mode = GL_CLAMP_TO_EDGE; + else + tex->texture.wrap_mode = GL_CLAMP_TO_BORDER; + + tex->texture.mipmap = texture->mipmap; + + tex->texture.min_filter = tex->texture.mag_filter = texture->linear ? GL_LINEAR : GL_NEAREST; + if (tex->texture.mipmap) + tex->texture.min_filter = texture->linear ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST; + + create_texture(&tex->texture); + free(tex->texture.data); + tex->texture.data = 0; + } + + if (!failed) + { + gshader->num_parameters = p->num_parameters; + for (j = 0; j < gshader->num_parameters; ++j) + memcpy(&gshader->parameters[j], &p->parameters[j], sizeof(struct shader_parameter)); + + gshader->num_passes = p->num_shaders; + + for (i = 0; i < p->num_shaders; ++i) + { + struct shader* shader = &p->shaders[i]; + struct shader_pass* pass = &gshader->passes[i]; + + strcpy(pass->alias, shader->alias); + if (!strlen(pass->alias)) + sprintf(pass->alias, "Pass %u", (i+1)); + + pclog("Creating pass %u (%s)\n", (i+1), pass->alias); + pclog("Loading shader %s...\n", shader->shader_fn); + if (!shader->shader_program) + { + wx_simple_messagebox("GLSL Error", "Could not load shader: %s", shader->shader_fn); + pclog("Could not load shader %s\n", shader->shader_fn); + failed = 1; + break; + } + else + pclog("Shader %s loaded\n", shader->shader_fn); + failed = + !compile_shader(GL_VERTEX_SHADER, "#define VERTEX\n#define PARAMETER_UNIFORM\n", shader->shader_program, &pass->program.vertex_shader) || + !compile_shader(GL_FRAGMENT_SHADER, "#define FRAGMENT\n#define PARAMETER_UNIFORM\n", shader->shader_program, &pass->program.fragment_shader); + if (failed) + break; + + if (!create_program(&pass->program)) + { + failed = 1; + break; + } + pass->frame_count_mod = shader->frame_count_mod; + + glw->glGenVertexArrays(1, &pass->vertex_array); + find_uniforms(gshader, i); + setup_scale(shader, pass); + if (i == p->num_shaders-1) /* last pass may or may not be an fbo depending on scale */ + { + if (num_shader == glsl->num_shaders-1) + { + pass->fbo.id = -1; + + for (j = 0; j < 2; ++j) + { + if (pass->scale.mode[j] != SCALE_SOURCE || pass->scale.value[j] != 1) + { + setup_fbo(shader, &pass->fbo); + break; + } + } + } + else + setup_fbo(shader, &pass->fbo); + } + else + { + /* check if next pass wants the input mipmapped, if so we need to generate mipmaps of this pass */ + pass->fbo.texture.mipmap = (i+1) < p->num_shaders && p->shaders[i+1].mipmap_input; + setup_fbo(shader, &pass->fbo); + } + if (pass->fbo.srgb) glsl->srgb = 1; + pass->active = 1; + } + if (!failed) + { + if (gshader->has_prev) + { + struct shader scene_shader_conf; + memset(&scene_shader_conf, 0, sizeof(struct shader)); + for (i = 0; i < MAX_PREV; ++i) + { + setup_fbo(&scene_shader_conf, &gshader->prev[i].fbo); + } + + } + } + } + + glslp_free(p); + + return glsl; + } + return 0; +} + +static glsl_t* load_shaders(int num, char shaders[MAX_USER_SHADERS][512]) +{ + int i; + glsl_t* glsl; + + glsl = malloc(sizeof(glsl_t)); + memset(glsl, 0, sizeof(glsl_t)); + + glsl->num_shaders = num; + int failed = 0; + for (i = 0; i < num; ++i) + { + const char* f = shaders[i]; + if (f && strlen(f)) + { + struct glsl_shader* shader = &glsl->shaders[num-i-1]; + + if (!load_glslp(glsl, i, f)) + { + failed = 1; + break; + } + } + + } + if (failed) + { + delete_glsl(glsl); + memset(glsl, 0, sizeof(glsl_t)); + } + return glsl; +} + +static void read_shader_config() +{ + char s[512]; + int i, j; + for (i = 0; i < active_shader->num_shaders; ++i) + { + struct glsl_shader* shader = &active_shader->shaders[i]; + char* name = shader->name; + sprintf(s, "GL3 Shaders - %s", name); +// shader->shader_refresh_rate = config_get_float(CFG_MACHINE, s, "shader_refresh_rate", -1); + for (j = 0; j < shader->num_parameters; ++j) + { + struct shader_parameter* param = &shader->parameters[j]; + param->value = config_get_float(CFG_MACHINE, s, param->id, param->default_value); + } + } +} + +int gl3_init(SDL_Window* window, sdl_render_driver requested_render_driver, BITMAP* screen) +{ + int i, j; + + strcpy(current_render_driver_name, requested_render_driver.name); + + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); + + context = SDL_GL_CreateContext(window); + + if (!context) + { + pclog("Could not create GL context.\n"); + return FALSE; + } + + SDL_GL_SetSwapInterval(video_vsync ? 1 : 0); + + pclog("OpenGL information: [%s] %s (%s)\n", glGetString(GL_VENDOR), glGetString(GL_RENDERER), glGetString(GL_VERSION)); + int version = -1; + glGetIntegerv(GL_MAJOR_VERSION, &version); + if (version < 3) + { + pclog("OpenGL 3.0 is not available."); + return SDL_FALSE; + } + pclog("Using OpenGL %s\n", glGetString(GL_VERSION)); + pclog("Using Shading Language %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); + + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); + pclog("Max texture size: %dx%d\n", max_texture_size, max_texture_size); + + //SDL_GL_MakeCurrent(window, context); + + glw = glw_init(); + + glEnable(GL_TEXTURE_2D); + + scene_texture.data = screen->dat; + scene_texture.width = screen->w; + scene_texture.height = screen->h; + scene_texture.internal_format = GL_RGBA8; + scene_texture.format = GL_RGBA; + scene_texture.type = GL_UNSIGNED_INT_8_8_8_8_REV; + scene_texture.wrap_mode = GL_CLAMP_TO_BORDER; + scene_texture.min_filter = scene_texture.mag_filter = video_scale_mode ? GL_LINEAR : GL_NEAREST; + scene_texture.mipmap = 0; + + create_texture(&scene_texture); + + GLint status; + char buffer[512]; + + /* load shader */ +// const char* shaders[1]; +// shaders[0] = gl3_shader_file; +// +// active_shader = load_shaders(1, shaders); + +// const char* shaders[3]; +// shaders[0] = "/home/phantasy/git/glsl-shaders/ntsc/ntsc-320px.glslp"; +// shaders[1] = "/home/phantasy/git/glsl-shaders/motionblur/motionblur-simple.glslp"; +// shaders[2] = "/home/phantasy/git/glsl-shaders/crt/crt-lottes-multipass.glslp"; +// +// active_shader = load_shaders(3, shaders); + int num_shaders = 0; + for (i = 0; i < MAX_USER_SHADERS; ++i) + { + if (strlen(gl3_shader_file[i])) + ++num_shaders; + else + break; + } + active_shader = load_shaders(num_shaders, gl3_shader_file); + + create_scene_shader(); + + /* read config */ + read_shader_config(); + + /* buffers */ + + GLfloat vertex[] = { + -1.0f, -1.0f, + -1.0f, 1.0f, + 1.0f, -1.0f, + 1.0f, 1.0f + }; + + GLfloat inv_vertex[] = { + -1.0f, 1.0f, + -1.0f, -1.0f, + 1.0f, 1.0f, + 1.0f, -1.0f + }; + + GLfloat tex_coords[] = { + 0.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 0.0f, + 1.0f, 1.0f + }; + + + GLfloat colors[] = { + 1.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, 1.0f + }; + + + /* set the scene shader buffers */ + { + glw->glBindVertexArray(active_shader->scene.vertex_array); + + struct shader_vbo* vbo = &active_shader->scene.vbo; + + glw->glGenBuffers(1, &vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(inv_vertex), inv_vertex, GL_STATIC_DRAW); + glw->glVertexAttribPointer(active_shader->scene.uniforms.vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glw->glGenBuffers(1, &vbo->tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->tex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + glw->glVertexAttribPointer(active_shader->scene.uniforms.tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); + } + + /* set buffers for all passes */ + for (j = 0; j < active_shader->num_shaders; ++j) + { + struct glsl_shader* shader = &active_shader->shaders[j]; + for (i = 0; i < shader->num_passes; ++i) + { + struct shader_uniforms* u = &shader->passes[i].uniforms; + + glw->glBindVertexArray(shader->passes[i].vertex_array); + + struct shader_vbo* vbo = &shader->passes[i].vbo; + + glw->glGenBuffers(1, &vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + + glw->glVertexAttribPointer(u->vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glw->glGenBuffers(1, &vbo->tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->tex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + glw->glVertexAttribPointer(u->tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); + + if (u->color) + { + glw->glGenBuffers(1, &vbo->color); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->color); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW); + glw->glVertexAttribPointer(u->color, 4, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), (GLvoid*)0); + } + } + } + + for (i = 0; i < active_shader->num_shaders; ++i) + { + struct glsl_shader* shader = &active_shader->shaders[i]; + if (shader->has_prev) + { + struct shader_pass* prev_pass = &shader->prev_scene; + create_default_shader_tex(prev_pass); + + struct shader_vbo* vbo = &prev_pass->vbo; + + glw->glBindVertexArray(prev_pass->vertex_array); + + glw->glGenBuffers(1, &vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + glw->glVertexAttribPointer(prev_pass->uniforms.vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glw->glGenBuffers(1, &vbo->tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->tex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + glw->glVertexAttribPointer(prev_pass->uniforms.tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); + + for (j = 0; j < MAX_PREV; ++j) + { + struct shader_prev* prev = &shader->prev[j]; + struct shader_vbo* prev_vbo = &prev->vbo; + + glw->glGenBuffers(1, &prev_vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, prev_vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + + glw->glGenBuffers(1, &prev_vbo->tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, prev_vbo->tex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + } + } + } + + /* create final pass */ + if (active_shader->num_shaders == 0 || active_shader->shaders[active_shader->num_shaders-1].passes[active_shader->shaders[active_shader->num_shaders-1].num_passes-1].fbo.id >= 0) + { + struct shader_pass* final_pass = &active_shader->final_pass; + create_default_shader_tex(final_pass); + + glw->glBindVertexArray(final_pass->vertex_array); + + struct shader_vbo* vbo = &final_pass->vbo; + + glw->glGenBuffers(1, &vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + glw->glVertexAttribPointer(final_pass->uniforms.vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glw->glGenBuffers(1, &vbo->tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->tex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + glw->glVertexAttribPointer(final_pass->uniforms.tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); + } + + { + struct shader_pass* color_pass = &active_shader->fs_color; + create_default_shader_color(color_pass); + + glw->glBindVertexArray(color_pass->vertex_array); + + struct shader_vbo* vbo = &color_pass->vbo; + + glw->glGenBuffers(1, &vbo->vertex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + glw->glVertexAttribPointer(color_pass->uniforms.vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glw->glGenBuffers(1, &vbo->color); + glw->glBindBuffer(GL_ARRAY_BUFFER, vbo->color); + glw->glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_DYNAMIC_DRAW); + glw->glVertexAttribPointer(color_pass->uniforms.color, 4, GL_FLOAT, GL_TRUE, 4*sizeof(GLfloat), (GLvoid*)0); + + } +#ifdef SDL2_SHADER_DEBUG + struct shader_pass* debug_pass = &active_shader->debug; + create_default_shader(debug_pass); + + glBindVertexArray(debug_pass->vertex_array); + + struct shader_vbo* vbo = &debug_pass->vbo; + + glGenBuffers(1, &vbo->vertex_coord); + glBindBuffer(GL_ARRAY_BUFFER, vbo->vertex_coord); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW); + glVertexAttribPointer(debug_pass->uniforms.vertex_coord, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (GLvoid*)0); + + glGenBuffers(1, &vbo->tex_coord); + glBindBuffer(GL_ARRAY_BUFFER, vbo->tex_coord); + glBufferData(GL_ARRAY_BUFFER, sizeof(tex_coords), tex_coords, GL_DYNAMIC_DRAW); + glVertexAttribPointer(debug_pass->uniforms.tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); +#endif + + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + glw->glBindVertexArray(0); + + return SDL_TRUE; +} + +void gl3_close() +{ + if (context) + { + delete_texture(&scene_texture); + + if (active_shader) + { + delete_glsl(active_shader); + free(active_shader); + } + active_shader = NULL; + + SDL_GL_DeleteContext(context); + context = NULL; + } + glw_free(glw); +} + +void gl3_update(SDL_Window* window, SDL_Rect updated_rect, BITMAP* screen) +{ + if (!context) + return; + glBindTexture(GL_TEXTURE_2D, scene_texture.id); + glPixelStorei(GL_UNPACK_ROW_LENGTH, screen->w); + glTexSubImage2D(GL_TEXTURE_2D, 0, updated_rect.x, updated_rect.y, updated_rect.w, updated_rect.h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, &((uint32_t*) screen->dat)[updated_rect.y * screen->w + updated_rect.x]); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glBindTexture(GL_TEXTURE_2D, 0); +} + +struct render_data { + int pass; + struct glsl_shader* shader; + struct shader_pass* shader_pass; + GLfloat* output_size; + struct shader_pass* orig_pass; + GLint texture; + int frame_count; +}; + +static void render_pass(struct render_data* data) +{ + int i; + char s[64]; + GLint loc; + GLuint texture_unit = 0; + +// pclog("pass %d: %gx%g, %gx%g -> %gx%g, %gx%g, %gx%g\n", num_pass, pass->state.input_size[0], pass->state.input_size[1], pass->state.input_texture_size[0], pass->state.input_texture_size[1], pass->state.output_size[0], pass->state.output_size[1], pass->state.output_texture_size[0], pass->state.output_texture_size[1], output_size[0], output_size[1]); + + glw->glBindVertexArray(data->shader_pass->vertex_array); + + GLint p = data->shader_pass->program.id; + struct shader_uniforms* u = &data->shader_pass->uniforms; + + glw->glUseProgram(p); + + if (data->texture) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, data->texture); + glw->glUniform1i(u->texture, texture_unit); + texture_unit++; + } + + if (u->color >= 0) glw->glEnableVertexAttribArray(u->color); + + if (u->mvp_matrix >= 0) glw->glUniformMatrix4fv(u->mvp_matrix, 1, 0, matrix); + if (u->frame_direction >= 0) glw->glUniform1i(u->frame_direction, 1); + + int framecnt = data->frame_count; + if (data->shader_pass->frame_count_mod > 0) + framecnt = framecnt%data->shader_pass->frame_count_mod; + if (u->frame_count >= 0) glw->glUniform1i(u->frame_count, framecnt); + + if (u->input_size >= 0) glw->glUniform2fv(u->input_size, 1, data->shader_pass->state.input_size); + if (u->texture_size >= 0) glw->glUniform2fv(u->texture_size, 1, data->shader_pass->state.input_texture_size); + if (u->output_size >= 0) glw->glUniform2fv(u->output_size, 1, data->output_size); + + if (data->shader) + { + /* parameters */ + for (i = 0; i < data->shader->num_parameters; ++i) + if (u->parameters[i] >= 0) glw->glUniform1f(u->parameters[i], data->shader->parameters[i].value); + + if (data->pass > 0) + { + struct shader_pass* passes = data->shader->passes; + struct shader_pass* orig = data->orig_pass; + if (u->orig.texture >= 0) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, orig->fbo.texture.id); + glw->glUniform1i(u->orig.texture, texture_unit); + texture_unit++; + } + if (u->orig.input_size >= 0) glw->glUniform2fv(u->orig.input_size, 1, orig->state.input_size); + if (u->orig.texture_size >= 0) glw->glUniform2fv(u->orig.texture_size, 1, orig->state.input_texture_size); + + for (i = 0; i < data->pass; ++i) + { + if (u->pass[i].texture >= 0) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, passes[i].fbo.texture.id); + glw->glUniform1i(u->pass[i].texture, texture_unit); + texture_unit++; + } + if (u->pass[i].texture_size >= 0) glw->glUniform2fv(u->pass[i].texture_size, 1, passes[i].state.input_texture_size); + if (u->pass[i].input_size >= 0) glw->glUniform2fv(u->pass[i].input_size, 1, passes[i].state.input_size); + + if (u->prev_pass[i].texture >= 0) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, passes[i].fbo.texture.id); + glw->glUniform1i(u->prev_pass[i].texture, texture_unit); + texture_unit++; + } + if (u->prev_pass[i].texture_size >= 0) glw->glUniform2fv(u->prev_pass[i].texture_size, 1, passes[i].state.input_texture_size); + if (u->prev_pass[i].input_size >= 0) glw->glUniform2fv(u->prev_pass[i].input_size, 1, passes[i].state.input_size); + + } + } + + if (data->shader->has_prev) + { + /* loop through each previous frame */ + for (i = 0; i < MAX_PREV; ++i) + { + if (u->prev[i].texture >= 0) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, data->shader->prev[i].fbo.texture.id); + glw->glUniform1i(u->prev[i].texture, texture_unit); + texture_unit++; + } + if (u->prev[i].tex_coord >= 0) + { + glw->glBindBuffer(GL_ARRAY_BUFFER, data->shader->prev[i].vbo.tex_coord); + glw->glVertexAttribPointer(u->prev[i].tex_coord, 2, GL_FLOAT, GL_TRUE, 2*sizeof(GLfloat), (GLvoid*)0); + glw->glEnableVertexAttribArray(u->prev[i].tex_coord); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + } + } + } + + for (i = 0; i < data->shader->num_lut_textures; ++i) + { + if (u->lut_textures[i] >= 0) + { + glw->glActiveTexture(GL_TEXTURE0 + texture_unit); + glBindTexture(GL_TEXTURE_2D, data->shader->lut_textures[i].texture.id); + glw->glUniform1i(u->lut_textures[i], texture_unit); + texture_unit++; + } + + } + } + + glw->glEnableVertexAttribArray(u->vertex_coord); + glw->glEnableVertexAttribArray(u->tex_coord); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + glw->glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, 0); + + glw->glDisableVertexAttribArray(data->shader_pass->uniforms.vertex_coord); + glw->glDisableVertexAttribArray(data->shader_pass->uniforms.tex_coord); + if (data->shader_pass->uniforms.color >= 0) glw->glDisableVertexAttribArray(data->shader_pass->uniforms.color); + + if (data->shader && data->shader->has_prev) + { + for (i = 0; i < MAX_PREV; ++i) + { + if (u->prev[i].tex_coord >= 0) + glw->glDisableVertexAttribArray(u->prev[i].tex_coord); + + } + } + + glw->glBindVertexArray(0); + + + glw->glUseProgram(0); +} + +void gl3_present(SDL_Window* window, SDL_Rect video_rect, SDL_Rect window_rect, BITMAP* screen) +{ + if (!context) + return; + + int s, i, j; + GLuint p; + + Uint32 ticks = SDL_GetTicks(); + + GLfloat orig_output_size[] = { + window_rect.w, window_rect.h + }; + + if (active_shader->srgb) glEnable(GL_FRAMEBUFFER_SRGB); + + struct render_data data; + + /* render scene to texture */ + { + struct shader_pass* pass = &active_shader->scene; + + SDL_Rect rect; + rect.x = rect.y = 0; + rect.w = video_rect.w*gl3_input_scale; + rect.h = video_rect.h*gl3_input_scale; + sdl_scale(gl3_input_stretch, rect, &rect, video_rect.w, video_rect.h); + + pass->state.input_size[0] = pass->state.output_size[0] = rect.w; + pass->state.input_size[1] = pass->state.output_size[1] = rect.h; + + pass->state.input_texture_size[0] = pass->state.output_texture_size[0] = next_pow2(pass->state.output_size[0]); + pass->state.input_texture_size[1] = pass->state.output_texture_size[1] = next_pow2(pass->state.output_size[1]); + + recreate_fbo(&active_shader->scene.fbo, pass->state.output_texture_size[0], pass->state.output_texture_size[1]); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, active_shader->scene.fbo.id); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + + glViewport(0, 0, pass->state.output_size[0], pass->state.output_size[1]); + + GLfloat minx = 0; + GLfloat miny = 0; + GLfloat maxx = pass->state.output_size[0]/(GLfloat)pass->state.output_texture_size[0]; + GLfloat maxy = pass->state.output_size[1]/(GLfloat)pass->state.output_texture_size[1]; + + pass->state.tex_coords[0] = minx; + pass->state.tex_coords[1] = miny; + pass->state.tex_coords[2] = minx; + pass->state.tex_coords[3] = maxy; + pass->state.tex_coords[4] = maxx; + pass->state.tex_coords[5] = miny; + pass->state.tex_coords[6] = maxx; + pass->state.tex_coords[7] = maxy; + + // create input tex coords + minx = video_rect.x/(float)screen->w; + miny = video_rect.y/(float)screen->h; + maxx = (video_rect.x+video_rect.w)/(float)screen->w; + maxy = (video_rect.y+video_rect.h)/(float)screen->h; + + GLfloat tex_coords[] = { + minx, miny, + minx, maxy, + maxx, miny, + maxx, maxy + }; + + glw->glBindVertexArray(pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, pass->vbo.tex_coord); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 8*sizeof(GLfloat), tex_coords); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.pass = -1; + data.shader_pass = &active_shader->scene; + data.texture = scene_texture.id; + data.output_size = orig_output_size; + render_pass(&data); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, 0); + } + + struct shader_pass* orig = &active_shader->scene; + struct shader_pass* input = &active_shader->scene; + + for (s = 0; s < active_shader->num_shaders; ++s) + { + struct glsl_shader* shader = &active_shader->shaders[s]; + int last_shader = s == active_shader->num_shaders-1; + +// float refresh_rate = shader->shader_refresh_rate; +// if (refresh_rate < 0) +// refresh_rate = gl3_shader_refresh_rate; + float refresh_rate = gl3_shader_refresh_rate; + if (refresh_rate == 0) + refresh_rate = video_refresh_rate; + int frame_count = ticks/(1000.0f/refresh_rate); + + /* loop through each pass */ + for (i = 0; i < shader->num_passes; ++i) + { + struct shader_pass* pass = &shader->passes[i]; + + memcpy(pass->state.input_size, input->state.output_size, 2*sizeof(GLfloat)); + memcpy(pass->state.input_texture_size, input->state.output_texture_size, 2*sizeof(GLfloat)); + + for (j = 0; j < 2; ++j) + { + if (pass->scale.mode[j] == SCALE_VIEWPORT) + pass->state.output_size[j] = orig_output_size[j]*pass->scale.value[j]; + else if (pass->scale.mode[j] == SCALE_ABSOLUTE) + pass->state.output_size[j] = pass->scale.value[j]; + else + pass->state.output_size[j] = pass->state.input_size[j]*pass->scale.value[j]; + + pass->state.output_texture_size[j] = next_pow2(pass->state.output_size[j]); + } + + if (pass->fbo.id >= 0) + { + recreate_fbo(&pass->fbo, pass->state.output_texture_size[0], pass->state.output_texture_size[1]); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, pass->fbo.id); + glViewport(0, 0, pass->state.output_size[0], pass->state.output_size[1]); + } + else + glViewport(window_rect.x, window_rect.y, window_rect.w, window_rect.h); + + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + + GLfloat minx = 0; + GLfloat miny = 0; + GLfloat maxx = pass->state.output_size[0]/(GLfloat)pass->state.output_texture_size[0]; + GLfloat maxy = pass->state.output_size[1]/(GLfloat)pass->state.output_texture_size[1]; + + pass->state.tex_coords[0] = minx; + pass->state.tex_coords[1] = miny; + pass->state.tex_coords[2] = minx; + pass->state.tex_coords[3] = maxy; + pass->state.tex_coords[4] = maxx; + pass->state.tex_coords[5] = miny; + pass->state.tex_coords[6] = maxx; + pass->state.tex_coords[7] = maxy; + + glw->glBindVertexArray(pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, pass->vbo.tex_coord); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 8*sizeof(GLfloat), input->state.tex_coords); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.shader = shader; + data.pass = i; + data.shader_pass = pass; + data.texture = input->fbo.texture.id; + data.output_size = orig_output_size; + data.orig_pass = orig; + data.frame_count = frame_count; + + render_pass(&data); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, 0); + + if (pass->fbo.texture.mipmap) + { + glw->glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, pass->fbo.texture.id); + glw->glGenerateMipmap(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, 0); + + + } + + input = pass; + } + + if (shader->has_prev && (ticks-shader->last_prev_update) >= (1000.f/refresh_rate)) + { + shader->last_prev_update = ticks; + + /* shift array */ + memmove(&shader->prev[1], &shader->prev[0], MAX_PREV*sizeof(struct shader_prev)); + memcpy(&shader->prev[0], &shader->prev[MAX_PREV], sizeof(struct shader_prev)); + + struct shader_pass* pass = orig; + struct shader_pass* prev_pass = &shader->prev_scene; + struct shader_prev* prev = &shader->prev[0]; + + memcpy(&prev_pass->state, &pass->state, sizeof(struct shader_state)); + + recreate_fbo(&prev->fbo, prev_pass->state.output_texture_size[0], prev_pass->state.output_texture_size[1]); + + memcpy(&prev_pass->fbo, &prev->fbo, sizeof(struct shader_fbo)); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, prev->fbo.id); + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + + glViewport(0, 0, pass->state.output_size[0], pass->state.output_size[1]); + + glw->glBindVertexArray(prev_pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, prev->vbo.tex_coord); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 8*sizeof(GLfloat), pass->state.tex_coords); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + glw->glBindBuffer(GL_ARRAY_BUFFER, prev_pass->vbo.tex_coord); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 8*sizeof(GLfloat), pass->state.tex_coords); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.shader = shader; + data.pass = -10; + data.shader_pass = prev_pass; + data.texture = pass->fbo.texture.id; + data.output_size = orig_output_size; + + render_pass(&data); + + glw->glBindFramebuffer(GL_FRAMEBUFFER, 0); + } + + orig = input; + } + + if (active_shader->final_pass.active) + { + struct shader_pass* pass = &active_shader->final_pass; + + memcpy(pass->state.input_size, input->state.output_size, 2*sizeof(GLfloat)); + memcpy(pass->state.input_texture_size, input->state.output_texture_size, 2*sizeof(GLfloat)); + + for (j = 0; j < 2; ++j) + { + if (pass->scale.mode[j] == SCALE_VIEWPORT) + pass->state.output_size[j] = orig_output_size[j]*pass->scale.value[j]; + else if (pass->scale.mode[j] == SCALE_ABSOLUTE) + pass->state.output_size[j] = pass->scale.value[j]; + else + pass->state.output_size[j] = pass->state.input_size[j]*pass->scale.value[j]; + + pass->state.output_texture_size[j] = next_pow2(pass->state.output_size[j]); + } + + glViewport(window_rect.x, window_rect.y, window_rect.w, window_rect.h); + + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + + GLfloat minx = 0; + GLfloat miny = 0; + GLfloat maxx = pass->state.output_size[0]/(GLfloat)pass->state.output_texture_size[0]; + GLfloat maxy = pass->state.output_size[1]/(GLfloat)pass->state.output_texture_size[1]; + + pass->state.tex_coords[0] = minx; + pass->state.tex_coords[1] = miny; + pass->state.tex_coords[2] = minx; + pass->state.tex_coords[3] = maxy; + pass->state.tex_coords[4] = maxx; + pass->state.tex_coords[5] = miny; + pass->state.tex_coords[6] = maxx; + pass->state.tex_coords[7] = maxy; + + glw->glBindVertexArray(pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, pass->vbo.tex_coord); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 8*sizeof(GLfloat), input->state.tex_coords); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.pass = -2; + data.shader_pass = pass; + data.texture = input->fbo.texture.id; + data.output_size = orig_output_size; + data.orig_pass = orig; + + render_pass(&data); + } + + if (!take_screenshot) + { + if (video_focus_dim && !(SDL_GetWindowFlags(window)&SDL_WINDOW_INPUT_FOCUS)) + { + struct shader_pass* pass = &active_shader->fs_color; + GLfloat r = 0; + GLfloat g = 0; + GLfloat b = 0; + GLfloat a = 0x80/(float)0xff; + + GLfloat colors[] = { + r, g, b, a, + r, g, b, a, + r, g, b, a, + r, g, b, a + }; + + glw->glBindVertexArray(pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, pass->vbo.color); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 16*sizeof(GLfloat), colors); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.pass = -3; + data.shader_pass = pass; + data.texture = 0; + data.output_size = orig_output_size; + data.orig_pass = orig; + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + render_pass(&data); + glDisable(GL_BLEND); + } + if (flash.enabled) + { + struct shader_pass* pass = &active_shader->fs_color; + GLfloat r = (flash.color[0]&0xff)/(float)0xff; + GLfloat g = (flash.color[1]&0xff)/(float)0xff; + GLfloat b = (flash.color[2]&0xff)/(float)0xff; + GLfloat a = (flash.color[3]&0xff)/(float)0xff; + + GLfloat colors[] = { + r, g, b, a, + r, g, b, a, + r, g, b, a, + r, g, b, a + }; + + glw->glBindVertexArray(pass->vertex_array); + + glw->glBindBuffer(GL_ARRAY_BUFFER, pass->vbo.color); + glw->glBufferSubData(GL_ARRAY_BUFFER, 0, 16*sizeof(GLfloat), colors); + glw->glBindBuffer(GL_ARRAY_BUFFER, 0); + + memset(&data, 0, sizeof(struct render_data)); + data.pass = -3; + data.shader_pass = pass; + data.texture = 0; + data.output_size = orig_output_size; + data.orig_pass = orig; + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + render_pass(&data); + glDisable(GL_BLEND); + } + } + else + { + take_screenshot = 0; + + int width = window_rect.w; + int height = window_rect.h; + + SDL_GetWindowSize(window, &width, &height); + + unsigned char* rgba = (unsigned char*)malloc(width*height*4); + + glFinish(); + glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, rgba); + + int x, y; + unsigned char* rgb = (unsigned char*)malloc(width*height*3); + + for (x = 0; x < width; ++x) + { + for (y = 0; y < height; ++y) + { + rgb[(y*width+x)*3+0] = rgba[((height-y-1)*width+x)*4+0]; + rgb[(y*width+x)*3+1] = rgba[((height-y-1)*width+x)*4+1]; + rgb[(y*width+x)*3+2] = rgba[((height-y-1)*width+x)*4+2]; + } + } + + screenshot_taken(rgb, width, height); + + free(rgb); + free(rgba); + } + + // DEBUG: render FBO +#ifdef SDL2_SHADER_DEBUG +// GLint texture = scene_texture.id; + GLint texture = active_shader->lut_textures[0].texture.id; +// GLint texture = active_shader->scene.fbo.texture; + + glClearColor(1, 1, 1, 1); + glClear(GL_COLOR_BUFFER_BIT); + + glViewport(0, 0, orig_output_size[0], orig_output_size[1]); + + struct shader_pass* pass = &active_shader->debug; + + render_pass(-999, pass, orig_output_size, texture); +#endif + + glDisable(GL_FRAMEBUFFER_SRGB); + + SDL_GL_SwapWindow(window); + +} + +sdl_renderer_t* gl3_renderer_create() +{ + sdl_renderer_t* renderer = malloc(sizeof(sdl_renderer_t)); + renderer->init = gl3_init; + renderer->close = gl3_close; + renderer->update = gl3_update; + renderer->present = gl3_present; + renderer->always_update = 1; + return renderer; +} + +void gl3_renderer_close(sdl_renderer_t* renderer) +{ + free(renderer); +} + +static int available = -1; + +int gl3_renderer_available(struct sdl_render_driver* driver) +{ + if (available < 0) + { + available = 0; + SDL_Window* window = SDL_CreateWindow("GL3 test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1, 1, SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL); + if (window) + { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); + + SDL_GLContext context = SDL_GL_CreateContext(window); + if (context) + { + int version = -1; + glGetIntegerv(GL_MAJOR_VERSION, &version); + + SDL_GL_DeleteContext(context); + + available = version >= 3; + } + SDL_DestroyWindow(window); + } + + } + return available; +} diff --git a/src/wx-sdl2-video-gl3.h b/src/wx-sdl2-video-gl3.h new file mode 100644 index 0000000..c4b1411 --- /dev/null +++ b/src/wx-sdl2-video-gl3.h @@ -0,0 +1,3 @@ +sdl_renderer_t* gl3_renderer_create(); +void gl3_renderer_close(sdl_renderer_t* renderer); +int gl3_renderer_available(struct sdl_render_driver* driver); diff --git a/src/wx-sdl2-video-renderer.c b/src/wx-sdl2-video-renderer.c new file mode 100644 index 0000000..81445ac --- /dev/null +++ b/src/wx-sdl2-video-renderer.c @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include "video.h" +#include "wx-utils.h" +#include "wx-sdl2-video.h" +#include "wx-sdl2-video-renderer.h" + +static SDL_Texture* texture = NULL; +static SDL_Renderer* renderer = NULL; + +extern int video_scale_mode; +extern int video_vsync; +extern int video_focus_dim; +extern int take_screenshot; +extern void screenshot_taken(unsigned char* rgb, int width, int height); + +int sdl_video_renderer_init(SDL_Window* window, sdl_render_driver requested_render_driver, BITMAP* screen) +{ + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_scale_mode ? "1" : "0"); + const char* driver = requested_render_driver.sdl_id; + if (!driver) driver = "0"; + SDL_SetHint(SDL_HINT_RENDER_DRIVER, driver); + + int flags = SDL_RENDERER_ACCELERATED; + if (video_vsync) { + flags |= SDL_RENDERER_PRESENTVSYNC; + } + renderer = SDL_CreateRenderer(window, -1, flags); + + if (!renderer) + { + char message[200]; + sprintf(message, + "SDL window could not be created! Error: %s\n", + SDL_GetError()); + wx_messagebox(0, message, "SDL Error", WX_MB_OK); + return SDL_FALSE; + } + + SDL_RendererInfo rendererInfo; + SDL_GetRendererInfo(renderer, &rendererInfo); + sdl_render_driver* d = sdl_get_render_driver_by_name_ptr(rendererInfo.name); + if (!d) + strcpy(current_render_driver_name, "Unknown"); + else + strcpy(current_render_driver_name, d->name); + + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STREAMING, + screen->w, screen->h); + + return SDL_TRUE; + +} + +void sdl_video_renderer_close() +{ + if (texture) + { + SDL_DestroyTexture(texture); + texture = NULL; + } + if (renderer) + { + SDL_DestroyRenderer(renderer); + renderer = NULL; + } +} + +void sdl_video_renderer_update(SDL_Window* window, SDL_Rect updated_rect, BITMAP* screen) +{ + SDL_UpdateTexture(texture, &updated_rect, &((uint32_t*) screen->dat)[updated_rect.y * screen->w + updated_rect.x], screen->w * 4); +} + +void sdl_video_renderer_present(SDL_Window* window, SDL_Rect texture_rect, SDL_Rect window_rect, BITMAP* screen) +{ + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, &texture_rect, &window_rect); + int sshot = take_screenshot; + if (!sshot) + { + if (video_focus_dim && !(SDL_GetWindowFlags(window)&SDL_WINDOW_INPUT_FOCUS)) { + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0x80); + SDL_RenderFillRect(renderer, NULL); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xff); + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + } + if (flash.enabled) + { + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(renderer, flash.color[0], flash.color[1], flash.color[2], flash.color[3]); + SDL_RenderFillRect(renderer, NULL); + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xff); + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + } + } + SDL_RenderPresent(renderer); + + if (sshot) + { + take_screenshot = 0; + + int width = window_rect.w; + int height = window_rect.h; + + SDL_GetWindowSize(window, &width, &height); + + /* seems to work without rendering to texture first */ +// SDL_Texture* tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_TARGET, width, height); +// +// SDL_SetRenderTarget(renderer, tex); +// SDL_RenderClear(renderer); +// SDL_RenderCopy(renderer, texture, &texture_rect, &window_rect); +// SDL_RenderPresent(renderer); + + unsigned char* rgba = (unsigned char*)malloc(width*height*4); + int res = SDL_RenderReadPixels(renderer, NULL, SDL_PIXELFORMAT_ABGR8888, rgba, width*4); + +// SDL_SetRenderTarget(renderer, NULL); +// SDL_DestroyTexture(tex); + + if (!res) + { + int x, y; + unsigned char* rgb = (unsigned char*)malloc(width*height*3); + + for (x = 0; x < width; ++x) + { + for (y = 0; y < height; ++y) + { + rgb[(y*width+x)*3+0] = rgba[(y*width+x)*4+0]; + rgb[(y*width+x)*3+1] = rgba[(y*width+x)*4+1]; + rgb[(y*width+x)*3+2] = rgba[(y*width+x)*4+2]; + } + } + + screenshot_taken(rgb, width, height); + + free(rgb); + } + else + screenshot_taken(0, 0, 0); + + free(rgba); + } + +} + +sdl_renderer_t* sdl2_renderer_create() +{ + sdl_renderer_t* renderer = malloc(sizeof(sdl_renderer_t)); + renderer->init = sdl_video_renderer_init; + renderer->close = sdl_video_renderer_close; + renderer->update = sdl_video_renderer_update; + renderer->present = sdl_video_renderer_present; + renderer->always_update = 0; + return renderer; +} + +void sdl2_renderer_close(sdl_renderer_t* renderer) +{ + free(renderer); +} + +int sdl2_renderer_available(struct sdl_render_driver* driver) +{ + int i; + SDL_RendererInfo renderInfo; + for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) + { + SDL_GetRenderDriverInfo(i, &renderInfo); + if (!strcmp(driver->sdl_id, renderInfo.name)) + return 1; + } + return 0; + +} diff --git a/src/wx-sdl2-video-renderer.h b/src/wx-sdl2-video-renderer.h new file mode 100644 index 0000000..08f7488 --- /dev/null +++ b/src/wx-sdl2-video-renderer.h @@ -0,0 +1,3 @@ +sdl_renderer_t* sdl2_renderer_create(); +void sdl2_renderer_close(sdl_renderer_t* renderer); +int sdl2_renderer_available(struct sdl_render_driver* driver); diff --git a/src/wx-sdl2-video.c b/src/wx-sdl2-video.c index ec5eefa..851bfb0 100644 --- a/src/wx-sdl2-video.c +++ b/src/wx-sdl2-video.c @@ -1,17 +1,19 @@ -#include "wx-sdl2-video.h" - +#include #include #include #include +#include #include "wx-sdl2.h" #include "video.h" +#include "wx-sdl2-video.h" + +#include "wx-sdl2-video-gl3.h" +#include "wx-sdl2-video-renderer.h" void video_blit_complete(); static BITMAP *buffer32_vscale; BITMAP *screen; -SDL_Texture* texture = NULL; -SDL_Renderer* renderer = NULL; SDL_Rect old_screen_rect; SDL_Rect screen_rect; SDL_Rect updated_rect; @@ -23,7 +25,6 @@ int updated = 0; SDL_mutex* blitMutex = NULL; static void sdl_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h); -static void sdl_blit_memtoscreen_8(int x, int y, int w, int h); int video_scale_mode = 1; int video_vsync = 0; @@ -31,17 +32,19 @@ int video_focus_dim = 0; int video_fullscreen_mode = 0; static sdl_render_driver sdl_render_drivers[] = { - { RENDERER_AUTO, "auto", "Auto" }, - { RENDERER_DIRECT3D, "direct3d", "Direct3D" }, - { RENDERER_OPENGL, "opengl", "OpenGL" }, - { RENDERER_OPENGLES2, "opengles2", "OpenGL ES 2" }, - { RENDERER_OPENGLES, "opengles", "OpenGL ES" }, - { RENDERER_SOFTWARE, "software", "Software" } + { RENDERER_AUTO, "auto", "Auto", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_DIRECT3D, "direct3d", "Direct3D", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_OPENGL, "opengl", "OpenGL", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_OPENGLES2, "opengles2", "OpenGL ES 2", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_OPENGLES, "opengles", "OpenGL ES", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_SOFTWARE, "software", "Software", 0, sdl2_renderer_create, sdl2_renderer_close, sdl2_renderer_available }, + { RENDERER_GL3, "gl3", "OpenGL 3.0", SDL_WINDOW_OPENGL, gl3_renderer_create, gl3_renderer_close, gl3_renderer_available } }; sdl_render_driver requested_render_driver; char current_render_driver_name[50]; +static sdl_renderer_t* renderer = NULL; void hline(BITMAP *b, int x1, int y, int x2, int col) { @@ -70,6 +73,7 @@ void set_palette(PALETTE p) void destroy_bitmap(BITMAP *b) { + free(b); } BITMAP *create_bitmap(int x, int y) @@ -221,8 +225,7 @@ static void sdl_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h) return; /*Nothing to do*/ } - int xx, yy; - SDL_Rect rect; + int yy; SDL_LockMutex(blitMutex); for (yy = y1; yy < y2; yy++) { @@ -259,6 +262,8 @@ int sdl_video_init() void sdl_video_close() { + requested_render_driver.renderer_close(renderer); + renderer = NULL; destroy_bitmap(buffer32_vscale); destroy_bitmap(screen); SDL_DestroyMutex(blitMutex); @@ -266,44 +271,15 @@ void sdl_video_close() int sdl_renderer_init(SDL_Window* window) { - SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_scale_mode ? "1" : "0"); - const char* driver = requested_render_driver.sdl_id; - if (!driver) driver = "0"; - SDL_SetHint(SDL_HINT_RENDER_DRIVER, driver); - - int flags = SDL_RENDERER_ACCELERATED; - if (video_vsync) { - flags |= SDL_RENDERER_PRESENTVSYNC; - } - renderer = SDL_CreateRenderer(window, -1, flags); - - SDL_RendererInfo rendererInfo; - SDL_GetRendererInfo(renderer, &rendererInfo); - sdl_render_driver* d = sdl_get_render_driver_by_name_ptr(rendererInfo.name); - if (!d) - strcpy(current_render_driver_name, "Unknown"); - else - strcpy(current_render_driver_name, d->name); - - texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, - SDL_TEXTUREACCESS_STREAMING, - screen->w, screen->h); - - return SDL_TRUE; + renderer = requested_render_driver.renderer_create(); + return renderer->init(window, requested_render_driver, screen); } void sdl_renderer_close() { - if (texture) - { - SDL_DestroyTexture(texture); - texture = NULL; - } if (renderer) - { - SDL_DestroyRenderer(renderer); - renderer = NULL; - } + renderer->close(); + renderer = NULL; } int sdl_renderer_update(SDL_Window* window) @@ -313,32 +289,42 @@ int sdl_renderer_update(SDL_Window* window) if (updated) { updated = 0; - SDL_UpdateTexture(texture, &updated_rect, - &((uint32_t*) screen->dat)[updated_rect.y - * screen->w + updated_rect.x], - screen->w * 4); + renderer->update(window, updated_rect, screen); texture_rect.w = blit_rect.w; texture_rect.h = blit_rect.h; render = 1; } SDL_UnlockMutex(blitMutex); - return render; + return render || renderer->always_update; } void sdl_renderer_present(SDL_Window* window) { + if (flash.enabled) + { + int elapsed = SDL_GetTicks() - flash.start; + float a = flash.func(elapsed / (float)flash.time) * (flash.alpha&0xff); + flash.color[3] = (char)a; + if (elapsed >= flash.time) + flash.enabled = 0; + } + SDL_Rect wr; - int l, t, r, b; SDL_GetWindowSize(window, &wr.w, &wr.h); sdl_scale(video_fullscreen_scale, wr, &wr, texture_rect.w, texture_rect.h); - SDL_RenderClear(renderer); - SDL_RenderCopy(renderer, texture, &texture_rect, &wr); - if (video_focus_dim && !(SDL_GetWindowFlags(window)&SDL_WINDOW_INPUT_FOCUS)) { - SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0x80); - SDL_RenderFillRect(renderer, NULL); - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xff); - SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); - } - SDL_RenderPresent(renderer); + renderer->present(window, texture_rect, wr, screen); + +} + +void color_flash(FLASH_FUNC func, int time_ms, char r, char g, char b, char a) +{ + flash.func = func; + flash.color[0] = r; + flash.color[1] = g; + flash.color[2] = b; + flash.color[3] = 0; + flash.alpha = a; + flash.start = SDL_GetTicks(); + flash.time = time_ms; + flash.enabled = 1; } diff --git a/src/wx-sdl2-video.h b/src/wx-sdl2-video.h index 635b0fc..18dfd13 100644 --- a/src/wx-sdl2-video.h +++ b/src/wx-sdl2-video.h @@ -1,18 +1,44 @@ -#include - #define RENDERER_AUTO 0 #define RENDERER_DIRECT3D 1 #define RENDERER_OPENGL 2 #define RENDERER_OPENGLES2 3 #define RENDERER_OPENGLES 4 #define RENDERER_SOFTWARE 5 +#define RENDERER_GL3 6 + +struct sdl_render_driver; + +typedef struct sdl_renderer_t { + int (*init)(SDL_Window* window, struct sdl_render_driver driver, BITMAP* screen); + void (*close)(); + void (*update)(SDL_Window* window, SDL_Rect updated_rect, BITMAP* screen); + void (*present)(SDL_Window* window, SDL_Rect texture_rect, SDL_Rect window_rect, BITMAP* screen); + int always_update; +} sdl_renderer_t; typedef struct sdl_render_driver { int id; const char* sdl_id; const char* name; + int sdl_window_params; + sdl_renderer_t* (*renderer_create)(); + void (*renderer_close)(sdl_renderer_t* renderer); + int (*renderer_available)(struct sdl_render_driver* driver); } sdl_render_driver; +typedef float (*FLASH_FUNC)(float v); + +typedef struct flash_t { + int enabled; + int time; + char color[4]; + int start; + char alpha; + FLASH_FUNC func; +} flash_t; + +flash_t flash; + #ifdef __cplusplus extern "C" { #endif @@ -30,6 +56,8 @@ sdl_render_driver sdl_get_render_driver_by_id(int id, int def); sdl_render_driver sdl_get_render_driver_by_name(const char* name, int def); sdl_render_driver* sdl_get_render_driver_by_name_ptr(const char* name); +void color_flash(FLASH_FUNC func, int time_ms, char r, char g, char b, char a); + #ifdef __cplusplus } #endif diff --git a/src/wx-sdl2.c b/src/wx-sdl2.c index ce343e8..1d9d419 100644 --- a/src/wx-sdl2.c +++ b/src/wx-sdl2.c @@ -5,6 +5,7 @@ #ifdef __WINDOWS__ #define BITMAP WINDOWS_BITMAP +#undef UNICODE #include #include #undef BITMAP @@ -75,6 +76,7 @@ emulation_state_t emulation_state = EMULATION_STOPPED; int pause = 0; int window_doreset = 0; +int window_dosetresize = 0; int renderer_doreset = 0; int window_dofullscreen = 0; int window_dowindowed = 0; @@ -91,9 +93,19 @@ int video_height = 480; char menuitem[60]; extern int config_selection_open(void* hwnd, int inited); +extern int shader_manager_open(void* hwnd); extern void sdl_set_window_title(const char* title); +extern float gl3_shader_refresh_rate; +extern float gl3_input_scale; +extern int gl3_input_stretch; +extern char gl3_shader_file[20][512]; + +char screenshot_format[10]; +int screenshot_flash = 1; +int take_screenshot = 0; + void warning(const char *format, ...) { char buf[1024]; @@ -114,6 +126,16 @@ void updatewindowsize(int x, int y) display_resize(x, y); } +unsigned int get_ticks() +{ + return SDL_GetTicks(); +} + +void delay_ms(unsigned int ms) +{ + SDL_Delay(ms); +} + void startblit() { SDL_LockMutex(ghMutex); @@ -143,11 +165,8 @@ uint64_t main_time; int mainthread(void* param) { - int i; - SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH); - int t = 0; int frames = 0; uint32_t old_time, new_time; @@ -210,6 +229,37 @@ void set_window_title(const char *s) sdl_set_window_title(s); } +float flash_func(float x) +{ + return 1 - pow(x, 4); +} + +float flash_failed_func(float x) +{ + return fabs(sin(x*3.1415926*2)); +} + +void screenshot_taken(unsigned char* rgb, int width, int height) +{ + char name[512]; + char date[128]; + strcpy(name, "Screenshot from "); + wx_date_format(date, "%Y-%m-%d %H-%M-%S"); + strcat(name, date); + if (wx_image_save(screenshots_path, name, screenshot_format, rgb, width, height, 0)) + { + pclog("Screenshot saved\n"); + if (screenshot_flash) + color_flash(flash_func, 500, 0xff, 0xff, 0xff, 0xff); + } + else + { + pclog("Screenshot was not saved\n"); + if (screenshot_flash) + color_flash(flash_failed_func, 500, 0xff, 0, 0, 0xff); + } +} + uint64_t timer_read() { return SDL_GetPerformanceCounter(); @@ -223,24 +273,69 @@ Uint32 timer_onesec(Uint32 interval, void* param) void sdl_loadconfig() { - video_fullscreen = config_get_int(CFG_GLOBAL, "SDL2", "fullscreen", video_fullscreen); - video_fullscreen_mode = config_get_int(CFG_GLOBAL, "SDL2", "fullscreen_mode", video_fullscreen_mode); - video_scale = config_get_int(CFG_GLOBAL, "SDL2", "scale", video_scale); - video_scale_mode = config_get_int(CFG_GLOBAL, "SDL2", "scale_mode", video_scale_mode); - video_vsync = config_get_int(CFG_GLOBAL, "SDL2", "vsync", video_vsync); - video_focus_dim = config_get_int(CFG_GLOBAL, "SDL2", "focus_dim", video_focus_dim); - requested_render_driver = sdl_get_render_driver_by_name(config_get_string(CFG_GLOBAL, "SDL2", "render_driver", ""), RENDERER_SOFTWARE); + vid_resize = config_get_int(CFG_MACHINE, NULL, "vid_resize", 0); + video_fullscreen_scale = config_get_int(CFG_MACHINE, NULL, "video_fullscreen_scale", 0); + video_fullscreen_first = config_get_int(CFG_MACHINE, NULL, "video_fullscreen_first", 1); + + strcpy(screenshot_format, config_get_string(CFG_MACHINE, "SDL2", "screenshot_format", IMAGE_PNG)); + screenshot_flash = config_get_int(CFG_MACHINE, "SDL2", "screenshot_flash", 1); + + video_fullscreen = config_get_int(CFG_MACHINE, "SDL2", "fullscreen", video_fullscreen); + video_fullscreen_mode = config_get_int(CFG_MACHINE, "SDL2", "fullscreen_mode", video_fullscreen_mode); + video_scale = config_get_int(CFG_MACHINE, "SDL2", "scale", video_scale); + video_scale_mode = config_get_int(CFG_MACHINE, "SDL2", "scale_mode", video_scale_mode); + video_vsync = config_get_int(CFG_MACHINE, "SDL2", "vsync", video_vsync); + video_focus_dim = config_get_int(CFG_MACHINE, "SDL2", "focus_dim", video_focus_dim); + requested_render_driver = sdl_get_render_driver_by_name(config_get_string(CFG_MACHINE, "SDL2", "render_driver", ""), RENDERER_SOFTWARE); + + gl3_input_scale = config_get_float(CFG_MACHINE, "GL3", "input_scale", gl3_input_scale); + gl3_input_stretch = config_get_int(CFG_MACHINE, "GL3", "input_stretch", gl3_input_stretch); + gl3_shader_refresh_rate = config_get_float(CFG_MACHINE, "GL3", "shader_refresh_rate", gl3_shader_refresh_rate); + + memset(&gl3_shader_file, 0, sizeof(gl3_shader_file)); + int num_shaders = config_get_int(CFG_MACHINE, "GL3 Shaders", "shaders", 0); + char s[20]; + int i; + for (i = 0; i < num_shaders; ++i) + { + sprintf(s, "shader%d", i); + strncpy(gl3_shader_file[i], config_get_string(CFG_MACHINE, "GL3 Shaders", s, ""), 511); + gl3_shader_file[i][511] = 0; + } } void sdl_saveconfig() { - config_set_int(CFG_GLOBAL, "SDL2", "fullscreen", video_fullscreen); - config_set_int(CFG_GLOBAL, "SDL2", "fullscreen_mode", video_fullscreen_mode); - config_set_int(CFG_GLOBAL, "SDL2", "scale", video_scale); - config_set_int(CFG_GLOBAL, "SDL2", "scale_mode", video_scale_mode); - config_set_int(CFG_GLOBAL, "SDL2", "vsync", video_vsync); - config_set_int(CFG_GLOBAL, "SDL2", "focus_dim", video_focus_dim); - config_set_string(CFG_GLOBAL, "SDL2", "render_driver", (char*)requested_render_driver.sdl_id); + config_set_int(CFG_MACHINE, NULL, "vid_resize", vid_resize); + config_set_int(CFG_MACHINE, NULL, "video_fullscreen_scale", video_fullscreen_scale); + config_set_int(CFG_MACHINE, NULL, "video_fullscreen_first", video_fullscreen_first); + + config_set_string(CFG_MACHINE, "SDL2", "screenshot_format", screenshot_format); + config_set_int(CFG_MACHINE, "SDL2", "screenshot_flash", screenshot_flash); + + config_set_int(CFG_MACHINE, "SDL2", "fullscreen", video_fullscreen); + config_set_int(CFG_MACHINE, "SDL2", "fullscreen_mode", video_fullscreen_mode); + config_set_int(CFG_MACHINE, "SDL2", "scale", video_scale); + config_set_int(CFG_MACHINE, "SDL2", "scale_mode", video_scale_mode); + config_set_int(CFG_MACHINE, "SDL2", "vsync", video_vsync); + config_set_int(CFG_MACHINE, "SDL2", "focus_dim", video_focus_dim); + config_set_string(CFG_MACHINE, "SDL2", "render_driver", (char*)requested_render_driver.sdl_id); + + config_set_float(CFG_MACHINE, "GL3", "input_scale", gl3_input_scale); + config_set_int(CFG_MACHINE, "GL3", "input_stretch", gl3_input_stretch); + config_set_float(CFG_MACHINE, "GL3", "shader_refresh_rate", gl3_shader_refresh_rate); + + char s[20]; + int i; + for (i = 0; i < 20; ++i) + { + sprintf(s, "shader%d", i); + if (strlen(gl3_shader_file[i])) + config_set_string(CFG_MACHINE, "GL3 Shaders", s, gl3_shader_file[i]); + else + break; + } + config_set_int(CFG_MACHINE, "GL3 Shaders", "shaders", i); } void update_cdrom_menu(void* hmenu) @@ -260,19 +355,19 @@ void update_cdrom_menu(void* hmenu) void wx_initmenu() { - char s[32]; menu = wx_getmenu(ghwnd); void* cdrom_submenu = wx_getsubmenu(menu, WX_ID("IDM_CDROM")); #ifdef __WINDOWS__ + char s[32]; int c; /* Loop through each Windows drive letter and test to see if it's a CDROM */ for (c='A';c<='Z';c++) { sprintf(s,"%c:\\",c); - if (GetDriveType(s)==DRIVE_CDROM) + if (GetDriveTypeA(s)==DRIVE_CDROM) { sprintf(s, "Host CD/DVD Drive (%c:)", c); wx_appendmenu(cdrom_submenu, IDM_CDROM_REAL+(c-'A'), s, wxITEM_RADIO); @@ -284,7 +379,7 @@ void wx_initmenu() } -void wx_setupmenu() +int wx_setupmenu(void* data) { int c; update_cdrom_menu(menu); @@ -300,6 +395,9 @@ void wx_setupmenu() sprintf(menuitem, "IDM_SND_BUF[%d]", (int)(log(sound_buf_len/MIN_SND_BUF)/log(2))); wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + sprintf(menuitem, "IDM_SND_BUF[%d]", (int)(log(sound_buf_len/MIN_SND_BUF)/log(2))); + wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + sprintf(menuitem, "IDM_VID_SCALE_MODE[%d]", video_scale_mode); wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); sprintf(menuitem, "IDM_VID_SCALE[%d]", video_scale); @@ -309,34 +407,54 @@ void wx_setupmenu() wx_checkmenuitem(menu, WX_ID("IDM_VID_VSYNC"), video_vsync); wx_checkmenuitem(menu, WX_ID("IDM_VID_LOST_FOCUS_DIM"), video_focus_dim); + int format = 0; + if (!strcmp(screenshot_format, IMAGE_TIFF)) + format = 1; + else if (!strcmp(screenshot_format, IMAGE_BMP)) + format = 2; + else if (!strcmp(screenshot_format, IMAGE_JPG)) + format = 3; + sprintf(menuitem, "IDM_SCREENSHOT_FORMAT[%d]", format); + wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + wx_checkmenuitem(menu, WX_ID("IDM_SCREENSHOT_FLASH"), screenshot_flash); + int num_renderers; sdl_render_driver* drivers = sdl_get_render_drivers(&num_renderers); for (c = 1; c < num_renderers; ++c) { sprintf(menuitem, "IDM_VID_RENDER_DRIVER[%d]", drivers[c].id); - wx_enablemenuitem(menu, WX_ID(menuitem), 0); - } - SDL_RendererInfo renderInfo; - for (c = 0; c < SDL_GetNumRenderDrivers(); ++c) - { - SDL_GetRenderDriverInfo(c, &renderInfo); - sdl_render_driver* driver = sdl_get_render_driver_by_name_ptr(renderInfo.name); - - if (driver) - { - pclog("Renderer: %s (%d)\n", renderInfo.name, driver->id); - sprintf(menuitem, "IDM_VID_RENDER_DRIVER[%d]", driver->id); - wx_enablemenuitem(menu, WX_ID(menuitem), 1); - } + wx_enablemenuitem(menu, WX_ID(menuitem), drivers[c].renderer_available(&drivers[c])); } sprintf(menuitem, "IDM_VID_RENDER_DRIVER[%d]", requested_render_driver.id); wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + +// wx_enablemenuitem(menu, WX_ID("IDM_VID_SDL2"), requested_render_driver.id != RENDERER_GL3); + wx_enablemenuitem(menu, WX_ID("IDM_VID_GL3"), requested_render_driver.id == RENDERER_GL3); + + sprintf(menuitem, "IDM_VID_GL3_INPUT_STRETCH[%d]", gl3_input_stretch); + wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + sprintf(menuitem, "IDM_VID_GL3_INPUT_SCALE[%d]", (int)((gl3_input_scale-0.5)*2)); + wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + sprintf(menuitem, "IDM_VID_GL3_SHADER_REFRESH_RATE[%g]", gl3_shader_refresh_rate); + wx_checkmenuitem(menu, WX_ID(menuitem), WX_MB_CHECKED); + + return 1; } void sdl_onconfigloaded() { if (ghwnd) - wx_callback(ghwnd, wx_setupmenu); + wx_callback(ghwnd, wx_setupmenu, 0); + + /* create directories */ + if (!wx_dir_exists(configs_path)) + wx_create_directory(configs_path); + if (!wx_dir_exists(nvr_path)) + wx_create_directory(nvr_path); + if (!wx_dir_exists(logs_path)) + wx_create_directory(logs_path); + if (!wx_dir_exists(screenshots_path)) + wx_create_directory(screenshots_path); } extern void wx_loadconfig(); @@ -344,10 +462,10 @@ extern void wx_saveconfig(); int pc_main(int argc, char** argv) { - char s[512]; paths_init(); #ifdef __linux__ + char s[512]; /* create directories if they don't exist */ if (!wx_setup(pcem_path)) return FALSE; @@ -359,6 +477,8 @@ int pc_main(int argc, char** argv) set_default_nvr_path(s); append_filename(s, pcem_path, "configs/", 511); set_default_configs_path(s); + append_filename(s, pcem_path, "screenshots/", 511); + set_default_screenshots_path(s); append_filename(s, pcem_path, "logs/", 511); set_default_logs_path(s); #endif @@ -410,7 +530,7 @@ int wx_start(void* hwnd) readflash = 0; wx_initmenu(); - wx_setupmenu(); + wx_setupmenu(0); d = romset; for (c = 0; c < ROM_MAX; c++) @@ -434,48 +554,9 @@ int wx_start(void* hwnd) } romset = d; - c = loadbios(); - - if (!c) - { - if (romset != -1) - wx_messagebox(hwnd, - "Configured romset not available.\nDefaulting to available romset.", - "PCem error", WX_MB_OK); - for (c = 0; c < ROM_MAX; c++) - { - if (romspresent[c]) - { - romset = c; - model = model_getmodel(romset); - saveconfig(NULL); - resetpchard(); - break; - } - } - } - for (c = 0; c < GFX_MAX; c++) gfx_present[c] = video_card_available(video_old_to_new(c)); - if (!video_card_available(video_old_to_new(gfxcard))) - { - if (romset != -1) - wx_messagebox(hwnd, - "Configured video BIOS not available.\nDefaulting to available romset.", - "PCem error", WX_MB_OK); - for (c = GFX_MAX - 1; c >= 0; c--) - { - if (gfx_present[c]) - { - gfxcard = c; - saveconfig(NULL); - resetpchard(); - break; - } - } - } - return TRUE; } @@ -494,6 +575,7 @@ int start_emulation(void* params) { if (resume_emulation()) return TRUE; + int c; pclog("Starting emulation...\n"); loadconfig(NULL); @@ -504,6 +586,40 @@ int start_emulation(void* params) mainMutex = SDL_CreateMutex(); mainCond = SDL_CreateCond(); + if (!loadbios()) + { + if (romset != -1) + wx_messagebox(ghwnd, + "Configured romset not available.\nDefaulting to available romset.", + "PCem error", WX_MB_OK); + for (c = 0; c < ROM_MAX; c++) + { + if (romspresent[c]) + { + romset = c; + model = model_getmodel(romset); + break; + } + } + } + + if (!video_card_available(video_old_to_new(gfxcard))) + { + if (romset != -1) + wx_messagebox(ghwnd, + "Configured video BIOS not available.\nDefaulting to available romset.", + "PCem error", WX_MB_OK); + for (c = GFX_MAX - 1; c >= 0; c--) + { + if (gfx_present[c]) + { + gfxcard = c; + break; + } + } + } + + loadbios(); resetpchard(); @@ -617,7 +733,6 @@ void atapi_close(void) int wx_handle_command(void* hwnd, int wParam, int checked) { - SDL_Rect rect; void* hmenu; char temp_image_path[1024]; int new_cdrom_drive; @@ -690,8 +805,8 @@ int wx_handle_command(void* hwnd, int wParam, int checked) } else if (ID_IS("IDM_BPB_DISABLE")) { - bpb_disable = checked; - wx_checkmenuitem(hmenu, WX_ID("IDM_BPB_DISABLE"), bpb_disable ? WX_MB_CHECKED : WX_MB_UNCHECKED); + bpb_disable = !bpb_disable; + wx_checkmenuitem(hmenu, wParam, bpb_disable); saveconfig(NULL); } else if (ID_IS("IDM_MACHINE_TOGGLE")) @@ -701,13 +816,38 @@ int wx_handle_command(void* hwnd, int wParam, int checked) } else if (ID_IS("IDM_VID_RESIZE")) { - vid_resize = checked; - window_doreset = 1; + vid_resize = !vid_resize; + wx_checkmenuitem(hmenu, wParam, vid_resize); + window_dosetresize = 1; + saveconfig(NULL); + } + else if (ID_IS("IDM_SCREENSHOT")) + { + take_screenshot = 1; + } + else if (ID_RANGE("IDM_SCREENSHOT_FORMAT[start]", "IDM_SCREENSHOT_FORMAT[end]")) + { + int format = wParam - wx_xrcid("IDM_SCREENSHOT_FORMAT[start]"); + if (format == 0) + strcpy(screenshot_format, IMAGE_PNG); + else if (format == 1) + strcpy(screenshot_format, IMAGE_TIFF); + else if (format == 2) + strcpy(screenshot_format, IMAGE_BMP); + else if (format == 3) + strcpy(screenshot_format, IMAGE_JPG); + saveconfig(NULL); + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); + } + else if (ID_IS("IDM_SCREENSHOT_FLASH")) + { + screenshot_flash = !screenshot_flash; + wx_checkmenuitem(hmenu, wParam, screenshot_flash); saveconfig(NULL); } else if (ID_IS("IDM_VID_REMEMBER")) { - window_remember = checked; + window_remember = !window_remember; wx_checkmenuitem(hmenu, WX_ID("IDM_VID_REMEMBER"), window_remember ? WX_MB_CHECKED : WX_MB_UNCHECKED); window_doremember = 1; @@ -722,7 +862,8 @@ int wx_handle_command(void* hwnd, int wParam, int checked) "Use CTRL + ALT + PAGE DOWN to return to windowed mode", "PCem", WX_MB_OK); } - video_fullscreen = checked; + video_fullscreen = !video_fullscreen; + wx_checkmenuitem(hmenu, wParam, video_fullscreen); saveconfig(NULL); } else if (ID_IS("IDM_VID_FULLSCREEN_TOGGLE")) @@ -732,45 +873,94 @@ int wx_handle_command(void* hwnd, int wParam, int checked) else if (ID_RANGE("IDM_VID_FS[start]", "IDM_VID_FS[end]")) { video_fullscreen_scale = wParam - wx_xrcid("IDM_VID_FS[start]"); + display_resize(video_width, video_height); + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); saveconfig(NULL); } else if (ID_RANGE("IDM_VID_SCALE_MODE[start]", "IDM_VID_SCALE_MODE[end]")) { video_scale_mode = wParam - wx_xrcid("IDM_VID_SCALE_MODE[start]"); renderer_doreset = 1; + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); saveconfig(NULL); } else if (ID_RANGE("IDM_VID_SCALE[start]", "IDM_VID_SCALE[end]")) { video_scale = wParam - wx_xrcid("IDM_VID_SCALE[start]"); + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); display_resize(video_width, video_height); saveconfig(NULL); } else if (ID_RANGE("IDM_VID_FS_MODE[start]", "IDM_VID_FS_MODE[end]")) { video_fullscreen_mode = wParam - wx_xrcid("IDM_VID_FS_MODE[start]"); + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); saveconfig(NULL); } else if (ID_RANGE("IDM_VID_RENDER_DRIVER[start]", "IDM_VID_RENDER_DRIVER[end]")) { requested_render_driver = sdl_get_render_driver_by_id(wParam - wx_xrcid("IDM_VID_RENDER_DRIVER[start]"), RENDERER_AUTO); window_doreset = 1; + + /* update enabled menu-items */ +// wx_enablemenuitem(menu, WX_ID("IDM_VID_SDL2"), requested_render_driver.id != RENDERER_GL3); + wx_enablemenuitem(menu, WX_ID("IDM_VID_GL3"), requested_render_driver.id == RENDERER_GL3); + + wx_checkmenuitem(hmenu, wParam, WX_MB_CHECKED); saveconfig(NULL); } else if (ID_IS("IDM_VID_VSYNC")) { - video_vsync = checked; + video_vsync = !video_vsync; + wx_checkmenuitem(menu, wParam, video_vsync); renderer_doreset = 1; saveconfig(NULL); } else if (ID_IS("IDM_VID_LOST_FOCUS_DIM")) { - video_focus_dim = checked; + video_focus_dim = !video_focus_dim; + wx_checkmenuitem(menu, wParam, video_focus_dim); saveconfig(NULL); } + else if (ID_RANGE("IDM_VID_GL3_INPUT_STRETCH[start]", "IDM_VID_GL3_INPUT_STRETCH[end]")) + { + gl3_input_stretch = wParam - wx_xrcid("IDM_VID_GL3_INPUT_STRETCH[start]"); + wx_checkmenuitem(menu, wParam, WX_MB_CHECKED); + saveconfig(NULL); + } + else if (ID_RANGE("IDM_VID_GL3_INPUT_SCALE[start]", "IDM_VID_GL3_INPUT_SCALE[end]")) + { + int input_scale = wParam - wx_xrcid("IDM_VID_GL3_INPUT_SCALE[start]"); + gl3_input_scale = input_scale/2.0f+0.5f; + wx_checkmenuitem(menu, wParam, WX_MB_CHECKED); + saveconfig(NULL); + } + else if (ID_RANGE("IDM_VID_GL3_SHADER_REFRESH_RATE[start]", "IDM_VID_GL3_SHADER_REFRESH_RATE[end]")) + { + gl3_shader_refresh_rate = wParam - wx_xrcid("IDM_VID_GL3_SHADER_REFRESH_RATE[start]"); + wx_checkmenuitem(menu, wParam, WX_MB_CHECKED); + saveconfig(NULL); + } + else if (ID_IS("IDM_VID_GL3_SHADER_MANAGER")) + { + if (shader_manager_open(hwnd)) + { + renderer_doreset = 1; + saveconfig(NULL); + } +// if (!getfile(hwnd, "GLSL Shaders (*.glslp;*.glsl)|*.glslp;*.glsl|All files (*.*)|*.*", gl3_shader_file)) +// { +// strncpy(gl3_shader_file, openfilestring, 511); +// gl3_shader_file[511] = 0; +// renderer_doreset = 1; +// saveconfig(NULL); +// } + + } else if (ID_RANGE("IDM_SND_BUF[start]", "IDM_SND_BUF[end]")) { sound_buf_len = MIN_SND_BUF*1<<(wParam - wx_xrcid("IDM_SND_BUF[start]")); + wx_checkmenuitem(menu, wParam, WX_MB_CHECKED); saveconfig(NULL); } else if (ID_IS("IDM_CDROM_DISABLED")) diff --git a/src/wx-sdl2.h b/src/wx-sdl2.h index 6857f5f..fdc45ef 100644 --- a/src/wx-sdl2.h +++ b/src/wx-sdl2.h @@ -5,6 +5,7 @@ extern "C" { void leave_fullscreen(); int getfile(void* hwnd, char *f, char *fn); int getsfile(void* hwnd, char *f, char *fn, char *dir, char *ext); +void screenshot_taken(unsigned char* rgb, int width, int height); #ifdef __cplusplus } @@ -14,3 +15,4 @@ extern char openfilestring[260]; extern int pause; +extern int take_screenshot; diff --git a/src/wx-shader_man.c b/src/wx-shader_man.c new file mode 100644 index 0000000..869a3aa --- /dev/null +++ b/src/wx-shader_man.c @@ -0,0 +1,230 @@ +#include +#include +#include "wx-utils.h" +#include "wx-display.h" +#include "wx-glslp-parser.h" +#include "wx-shaderconfig.h" +#include "config.h" + +#define MAX_USER_SHADERS 20 + +extern char *get_filename(char *s); + +extern char gl3_shader_file[MAX_USER_SHADERS][512]; +static char shaders[MAX_USER_SHADERS][512]; + +void read_shader_config(glslp_t* shader) +{ + char s[512]; + int i; + char* name = shader->name; + sprintf(s, "GL3 Shaders - %s", name); + for (i = 0; i < shader->num_parameters; ++i) + { + struct parameter* param = &shader->parameters[i]; + param->value = config_get_float(CFG_MACHINE, s, param->id, param->default_value); + } +} + +void write_shader_config(glslp_t* shader) +{ + char s[512]; + int i; + char* name = shader->name; + sprintf(s, "GL3 Shaders - %s", name); + for (i = 0; i < shader->num_parameters; ++i) + { + struct parameter* param = &shader->parameters[i]; + config_set_float(CFG_MACHINE, s, param->id, param->value); + } +} + +static void add_shader(int p, const char* s) +{ + memmove(&shaders[p+1], &shaders[p], (MAX_USER_SHADERS-p-2)*512); + strcpy(shaders[p], s); +} + +static int shader_list_update(void* hdlg) +{ + char s[512]; + int c; + void* h; + int num = 0; + + h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + wx_sendmessage(h, WX_LB_RESETCONTENT, 0, 0); + + for (c = 0; c < MAX_USER_SHADERS; c++) + { + if (strlen(shaders[c])) + { + char* p = get_filename(shaders[c]); + wx_sendmessage(h, WX_LB_INSERTSTRING, c, (LONG_PARAM)p); + ++num; + } + } + return num; +} + +static void set_shaders() +{ + int i, j, available; + char s[128]; + char name[64]; + for (i = 0; i < MAX_USER_SHADERS; ++i) + { + if (strlen(gl3_shader_file[i])) + { + available = 0; + for (j = 0; j < MAX_USER_SHADERS; ++j) + { + if (!strcmp(gl3_shader_file[i], shaders[j])) + { + available = 1; + continue; + } + } + if (!available) + { + get_glslp_name(gl3_shader_file[i], name, sizeof(name)); + sprintf(s, "GL3 Shaders - %s", name); + config_free_section(CFG_MACHINE, s); + } + } + } + memcpy(&gl3_shader_file, &shaders, sizeof(gl3_shader_file)); + +} + +static int shader_manager_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) +{ + char s[512]; + switch (message) + { + case WX_INITDIALOG: + { + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + memcpy(&shaders, &gl3_shader_file, sizeof(gl3_shader_file)); + int len = shader_list_update(hdlg); + if (len) + wx_sendmessage(h, WX_LB_SETCURSEL, len-1, 0); + return TRUE; + } + case WX_COMMAND: + { + if (wParam == wxID_OK) + { + set_shaders(); + wx_enddialog(hdlg, 1); + return TRUE; + } + else if (wParam == wxID_CANCEL) + { + wx_enddialog(hdlg, 0); + return TRUE; + } + else if (wParam == WX_ID("IDC_APPLY")) + { + set_shaders(); + renderer_doreset = 1; + return TRUE; + } + else if (wParam == WX_ID("IDC_ADD")) + { + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + int c = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + int count = wx_sendmessage(h, WX_LB_GETCOUNT, 0, 0); + if (count >= MAX_USER_SHADERS) + { + wx_simple_messagebox("Error", "Can't add more shaders."); + return FALSE; + } + + int ret = !wx_filedialog(hdlg, "Open", shaders[c], "GLSL Shaders (*.glslp;*.glsl)|*.glslp;*.glsl|All files (*.*)|*.*", 0, 1, s); + + if (ret) + { + add_shader(c+1, s); + shader_list_update(hdlg); + wx_sendmessage(h, WX_LB_SETCURSEL, c+1, 0); + } + + return TRUE; + } + else if (wParam == WX_ID("IDC_CONFIG")) + { + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + int c = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + if (c >= 0) + { + glslp_t* glsl = glslp_parse(shaders[c]); + if (glsl) + { + read_shader_config(glsl); + shaderconfig_open(hdlg, glsl); + write_shader_config(glsl); + glslp_free(glsl); + return TRUE; + } + } + return FALSE; + } + else if (wParam == WX_ID("IDC_REMOVE")) + { + char name[64]; + void* h; + int c; + h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + c = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + if (c >= 0) + { + memmove(&shaders[c], &shaders[c+1], (MAX_USER_SHADERS-c-1)*512); + int len = shader_list_update(hdlg); + if (len > 0) + { + if (c > 0) + c--; + wx_sendmessage(h, WX_LB_SETCURSEL, c, 0); + } + } + } + else if (wParam == WX_ID("IDC_MOVE_UP")) + { + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + int c = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + if (c > 0) + { + strcpy(s, shaders[c-1]); + strcpy(shaders[c-1], shaders[c]); + strcpy(shaders[c], s); + shader_list_update(hdlg); + wx_sendmessage(h, WX_LB_SETCURSEL, c-1, 0); + } + } + else if (wParam == WX_ID("IDC_MOVE_DOWN")) + { + void* h = wx_getdlgitem(hdlg, WX_ID("IDC_LIST")); + int c = wx_sendmessage(h, WX_LB_GETCURSEL, 0, 0); + if (c < MAX_USER_SHADERS-1) + { + if (strlen(shaders[c+1])) + { + strcpy(s, shaders[c+1]); + strcpy(shaders[c+1], shaders[c]); + strcpy(shaders[c], s); + shader_list_update(hdlg); + wx_sendmessage(h, WX_LB_SETCURSEL, c+1, 0); + } + } + } + } + break; + } + return FALSE; +} + +int shader_manager_open(void* hwnd) +{ + return wx_dialogbox(hwnd, "ShaderManagerDlg", shader_manager_dlgproc); +} diff --git a/src/wx-shaderconfig.cc b/src/wx-shaderconfig.cc new file mode 100644 index 0000000..d56096d --- /dev/null +++ b/src/wx-shaderconfig.cc @@ -0,0 +1,146 @@ +#include "wx-utils.h" +#include + +#include "wx-dialogbox.h" + +#ifndef WX_PRECOMP +#include +#endif + +#include +#include + +#include "wx-glslp-parser.h" +#include "wx-shaderconfig.h" + +extern "C" +{ + #include "config.h" + void saveconfig(char*); + void resetpchard(); + int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam); + void write_shader_config(glslp_t* shader); + struct glslp_t* current_glsl; + int confirm(); +} +#define IDC_CONFIG_BASE 1000 +#define ID_APPLY 500 +#define ID_RESET 501 +extern int renderer_doreset; + +static int shaderconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) { + int i; + switch (message) { + case WX_INITDIALOG: { + return TRUE; + } + case WX_COMMAND: + switch (wParam) { + case ID_APPLY: { + for (i = 0; i < current_glsl->num_parameters; ++i) + { + struct parameter* p = ¤t_glsl->parameters[i]; + wxSpinCtrlDouble* h = (wxSpinCtrlDouble*)wx_getdlgitem(hdlg, IDC_CONFIG_BASE+i); + p->value = (float)h->GetValue(); + } + write_shader_config(current_glsl); + renderer_doreset = 1; + return TRUE; + } + case wxID_OK: { + for (i = 0; i < current_glsl->num_parameters; ++i) + { + struct parameter* p = ¤t_glsl->parameters[i]; + wxSpinCtrlDouble* h = (wxSpinCtrlDouble*)wx_getdlgitem(hdlg, IDC_CONFIG_BASE+i); + p->value = (float)h->GetValue(); + } + write_shader_config(current_glsl); + renderer_doreset = 1; + wx_enddialog(hdlg, 0); + return TRUE; + } + case wxID_CANCEL: + wx_enddialog(hdlg, 0); + return TRUE; + case ID_RESET: { + for (i = 0; i < current_glsl->num_parameters; ++i) + { + struct parameter* p = ¤t_glsl->parameters[i]; + wxSpinCtrlDouble* h = (wxSpinCtrlDouble*)wx_getdlgitem(hdlg, IDC_CONFIG_BASE+i); + h->SetValue(p->default_value); + } + return TRUE; + } + } + } + return TRUE; +} + + + +void shaderconfig_open(void* hwnd, struct glslp_t* glsl) { + int i; + current_glsl = glsl; + + PCemDialogBox dialog((wxWindow*) hwnd, shaderconfig_dlgproc); +// dialog.SetWindowStyle(wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); + + dialog.SetTitle("Shader Configuration"); + + wxBoxSizer* root = new wxBoxSizer(wxVERTICAL); + dialog.SetSizer(root); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + root->Add(sizer, 0, wxALL, 5); + + wxPanel* panel = new wxPanel(&dialog, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_SUNKEN); + sizer->Add(panel); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panel->SetSizer(panelSizer); + + wxScrolledWindow* win = new wxScrolledWindow(panel, wxID_ANY, wxDefaultPosition, wxSize(300, 350), wxHSCROLL|wxVSCROLL); + win->SetScrollRate( 5, 5 ); + panelSizer->Add(win, 1, wxEXPAND | wxALL, 5); + + wxBoxSizer* winSizer = new wxBoxSizer(wxVERTICAL); + win->SetSizer(winSizer); + + if (glsl->num_parameters > 0) + { + wxPanel* scrollPanel = new wxPanel(win); + winSizer->Add(scrollPanel); + + wxBoxSizer* scollPanelSizer = new wxBoxSizer(wxVERTICAL); + scrollPanel->SetSizer(scollPanelSizer); + + for (i = 0; i < glsl->num_parameters; ++i) + { + struct parameter* p = &glsl->parameters[i]; + scollPanelSizer->Add(new wxStaticText(scrollPanel, wxID_ANY, p->description), 0, wxALL); + wxSpinCtrlDouble* spin = new wxSpinCtrlDouble(scrollPanel, IDC_CONFIG_BASE+i); + spin->SetRange(p->min, p->max); + spin->SetIncrement(p->step); + spin->SetValue(p->value); + spin->SetDigits(2); + + scollPanelSizer->Add(spin, 0, wxALL); + } + } + else + winSizer->Add(new wxStaticText(win, wxID_ANY, "No configuration available."), 0, wxALL); + + wxBoxSizer* buttonSizer = new wxBoxSizer(wxHORIZONTAL); + + buttonSizer->Add(new wxButton(&dialog, ID_APPLY, "Apply")); + buttonSizer->Add(new wxButton(&dialog, wxID_OK)); + buttonSizer->Add(new wxButton(&dialog, wxID_CANCEL)); + buttonSizer->Add(new wxButton(&dialog, ID_RESET, "Reset")); + + sizer->Add(buttonSizer); + + dialog.Fit(); + dialog.OnInit(); + dialog.ShowModal(); + dialog.Destroy(); +} diff --git a/src/wx-shaderconfig.h b/src/wx-shaderconfig.h new file mode 100644 index 0000000..279409c --- /dev/null +++ b/src/wx-shaderconfig.h @@ -0,0 +1,13 @@ +#ifndef SRC_WX_SHADERCONFIG_H_ +#define SRC_WX_SHADERCONFIG_H_ + +#ifdef __cplusplus +extern "C" { +#endif +void shaderconfig_open(void* hwnd, struct glslp_t* glsl); +#ifdef __cplusplus +} +#endif + + +#endif /* SRC_WX_SHADERCONFIG_H_ */ diff --git a/src/wx-status.cc b/src/wx-status.cc index 16b9968..b257d5f 100644 --- a/src/wx-status.cc +++ b/src/wx-status.cc @@ -322,8 +322,8 @@ void StatusFrame::OnCommand(wxCommandEvent& event) show_mount_paths = event.IsChecked(); else if (event.GetId() == XRCID("IDM_SHOW_MACHINE_ON_START")) show_machine_on_start = event.IsChecked(); - else if (event.GetId() == XRCID("IDM_HDCONF")) - hdconf_open(this); +// else if (event.GetId() == XRCID("IDM_HDCONF")) +// hdconf_open(this); else if (event.GetId() == XRCID("IDM_CONFIG")) config_open(this); else if (event.GetId() == XRCID("IDM_RESET_CONFIRMATION_DIALOGS")) @@ -345,7 +345,7 @@ void StatusFrame::OnCommand(wxCommandEvent& event) void StatusFrame::OnMoveWindow(wxMoveEvent& event) { if (window_remember) { - wx_window_x = event.GetPosition().x; - wx_window_y = event.GetPosition().y; + wx_window_x = GetScreenPosition().x; + wx_window_y = GetScreenPosition().y; } } diff --git a/src/wx-utils.cc b/src/wx-utils.cc index 598efc8..a88919c 100644 --- a/src/wx-utils.cc +++ b/src/wx-utils.cc @@ -8,12 +8,20 @@ #include #include #include +#include +#include +#include #include "wx-dialogbox.h" #include "wx-app.h" #include "wx-common.h" #include "wx-status.h" +extern "C" +{ +#include "thread.h" +} + int confirm() { if (emulation_state != EMULATION_STOPPED) { @@ -24,10 +32,22 @@ int confirm() int wx_messagebox(void* window, const char* message, const char* title = NULL, int style = 5) { - return wxMessageBox(message, title, style | wxCENTRE, (wxWindow*) window); + return wxMessageBox(message, title, style | wxCENTRE | wxSTAY_ON_TOP, (wxWindow*) window); } -int wx_textentrydialog(void* window, const char* message, const char* title, const char* value, int min_length, int max_length, LONG_PARAM result) +void wx_simple_messagebox(const char* title, const char *format, ...) +{ + char message[2048]; + va_list ap; + va_start(ap, format); + vsnprintf(message, 2047, format, ap); + message[2047] = 0; + va_end(ap); + wx_messagebox(0, message, title, WX_MB_OK); +} + + +int wx_textentrydialog(void* window, const char* message, const char* title, const char* value, unsigned int min_length, unsigned int max_length, LONG_PARAM result) { while (1) { @@ -39,7 +59,7 @@ int wx_textentrydialog(void* window, const char* message, const char* title, con wxString value = dlg.GetValue(); if (value.Length() >= min_length) { - strcpy((char*)result, value); + strcpy((char*)result, value.mb_str()); return TRUE; } } @@ -63,7 +83,7 @@ int wx_filedialog(void* window, const char* title, const char* path, const char* extensions, const char* extension, int open, char* file) { wxFileDialog dlg((wxWindow*) window, title, "", path, extensions, - open ? wxFD_OPEN : wxFD_SAVE); + open ? (wxFD_OPEN | wxFD_FILE_MUST_EXIST) : (wxFD_SAVE | wxFD_OVERWRITE_PROMPT)); if (dlg.ShowModal() == wxID_OK) { wxString p = dlg.GetPath(); @@ -74,10 +94,10 @@ int wx_filedialog(void* window, const char* title, const char* path, if (!p.EndsWith(".")) p += "."; p += extension; - strcpy(file, p); + strcpy(file, p.mb_str()); } else - strcpy(file, p); + strcpy(file, p.mb_str()); return 0; } return 1; @@ -120,6 +140,30 @@ void* wx_getsubmenu(void* menu, int id) return 0; } +void* wx_getnativemenu(void* menu) +{ +#ifdef _WIN32 + return ((wxMenu*)menu)->GetHMenu(); +#endif + return 0; +} + +void* wx_getnativewindow(void* window) +{ +#ifdef _WIN32 + return ((wxWindow*)window)->GetHWND(); +#endif + return 0; +} + +#ifdef _WIN32 +void wx_winsendmessage(void* window, int msg, INT_PARAM wParam, LONG_PARAM lParam) +{ + WinSendMessageEvent* event = new WinSendMessageEvent(wx_getnativewindow(window), msg, wParam, lParam); + wxQueueEvent((wxWindow*)window, event); +} +#endif + void wx_appendmenu(void* sub_menu, int id, const char* title, enum wxItemKind type) { ((wxMenu*) sub_menu)->Append(id, title, wxEmptyString, type); @@ -173,14 +217,19 @@ void wx_showwindow(void* window, int show) wxQueueEvent((wxWindow*)window, event); } +int wx_iswindowvisible(void* window) +{ + return ((wxWindow*) window)->IsShown(); +} + void wx_togglewindow(void* window) { wx_showwindow(window, -1); } -void wx_callback(void* window, WX_CALLBACK callback) +void wx_callback(void* window, WX_CALLBACK callback, void* data) { - CallbackEvent* event = new CallbackEvent(callback); + CallbackEvent* event = new CallbackEvent(callback, data); wxQueueEvent((wxWindow*)window, event); } @@ -231,17 +280,19 @@ int wx_sendmessage(void* window, int type, INT_PARAM param1, LONG_PARAM param2) ((wxComboBox*) window)->Append((char*) param2); break; case WX_CB_SETCURSEL: - ((wxComboBox*) window)->Select(param1); + if (param1 >= 0 && param1 < ((wxComboBox*) window)->GetCount()) + ((wxComboBox*) window)->Select(param1); break; case WX_CB_GETCURSEL: return ((wxComboBox*) window)->GetCurrentSelection(); break; case WX_CB_GETLBTEXT: - strcpy((char*) param2, ((wxComboBox*) window)->GetString(param1)); + strcpy((char*) param2, ((wxComboBox*) window)->GetString(param1).mb_str()); break; case WX_CB_RESETCONTENT: { #ifndef __WXOSX_MAC__ + ((wxComboBox*) window)->SetValue(""); ((wxComboBox*) window)->Clear(); #else /* Clear() does not work on OSX */ @@ -268,9 +319,9 @@ int wx_sendmessage(void* window, int type, INT_PARAM param1, LONG_PARAM param2) break; case WX_WM_GETTEXT: if (((wxWindow*) window)->GetClassInfo()->IsKindOf(CLASSINFO(wxTextCtrl))) - strcpy((char*) param2, ((wxTextCtrl*) window)->GetValue()); + strcpy((char*) param2, ((wxTextCtrl*) window)->GetValue().mb_str()); else - strcpy((char*) param2, ((wxStaticText*) window)->GetLabel()); + strcpy((char*) param2, ((wxStaticText*) window)->GetLabel().mb_str()); break; case WX_UDM_SETPOS: ((wxSpinCtrl*) window)->SetValue(param2); @@ -300,9 +351,14 @@ int wx_sendmessage(void* window, int type, INT_PARAM param1, LONG_PARAM param2) { return ((wxListBox*) window)->GetSelection(); } + case WX_LB_SETCURSEL: + { + ((wxListBox*) window)->SetSelection(param1); + break; + } case WX_LB_GETTEXT: { - strcpy((char*) param2, ((wxListBox*) window)->GetString(param1)); + strcpy((char*) param2, ((wxListBox*) window)->GetString(param1).mb_str()); break; } case WX_LB_INSERTSTRING: @@ -315,6 +371,11 @@ int wx_sendmessage(void* window, int type, INT_PARAM param1, LONG_PARAM param2) ((wxListBox*) window)->Delete(param1); break; } + case WX_LB_RESETCONTENT: + { + ((wxListBox*) window)->Clear(); + break; + } } ((wxWindow*)window)->Fit(); @@ -447,7 +508,7 @@ void wx_get_home_directory(char* path) if (!home.EndsWith(wxFileName::GetPathSeparator())) { home.Append(wxFileName::GetPathSeparator()); } - strcpy(path, home); + strcpy(path, home.mb_str()); } int wx_create_directory(char* path) @@ -477,6 +538,11 @@ int wx_setup(char* path) if (!nvr.DirExists() && !nvr.Mkdir()) return FALSE; + wxFileName screenshots(p); + screenshots.AppendDir("screenshots"); + if (!screenshots.DirExists() && !screenshots.Mkdir()) + return FALSE; + wxFileName logs(p); logs.AppendDir("logs"); if (!logs.DirExists() && !logs.Mkdir()) @@ -497,3 +563,210 @@ int wx_dir_exists(char* path) wxFileName p(path); return p.DirExists(); } + +int wx_image_save(const char* path, const char* name, const char* format, unsigned char* rgba, int width, int height, int alpha) +{ + int x, y; + wxLogNull logNull; + wxImage image(width, height); + if (alpha) + { + unsigned char* rgb = (unsigned char*)malloc(width*height*3); + unsigned char* a = (unsigned char*)malloc(width*height); + for (x = 0; x < width; ++x) + { + for (y = 0; y < height; ++y) + { + rgb[(y*width+x)*3+0] = rgba[(y*width+x)*4+0]; + rgb[(y*width+x)*3+1] = rgba[(y*width+x)*4+1]; + rgb[(y*width+x)*3+2] = rgba[(y*width+x)*4+2]; + a[y*width+x] = rgba[(y*width+x)*4+3]; + } + } + image.SetData(rgb); + image.SetAlpha(a); + } + else + image.SetData(rgba, true); + + wxImageHandler* h; + wxString ext; + + if (!strcmp(format, IMAGE_TIFF)) + { + h = new wxTIFFHandler(); + ext = "tif"; + } + else if (!strcmp(format, IMAGE_BMP)) + { + h = new wxBMPHandler(); + ext = "bmp"; + } + else if (!strcmp(format, IMAGE_JPG)) + { + h = new wxJPEGHandler(); + ext = "jpg"; + } + else + { + h = new wxPNGHandler(); + ext = "png"; + } + + int res = 0; + if (h) + { + wxString p(path); + if (!p.EndsWith("/")) + p = p.Append("/"); + p = p.Append(name).Append(".").Append(ext); + + wxFileOutputStream stream(p); + res = h->SaveFile(&image, stream, false); + delete h; + } + + return res; +} + +void* wx_image_load(const char* path) +{ + wxLogNull logNull; /* removes sRGB-warnings on Windows */ + wxImage* image = new wxImage(path); + if (image->IsOk()) + return image; + delete image; + return 0; +} + +void wx_image_free(void* image) +{ + delete (wxImage*)image; +} + +void wx_image_rescale(void* image, int width, int height) +{ + ((wxImage*)image)->Rescale(width, height); +} + +void wx_image_get_size(void* image, int* width, int* height) +{ + *width = ((wxImage*)image)->GetWidth(); + *height = ((wxImage*)image)->GetHeight(); +} + +unsigned char* wx_image_get_data(void* image) +{ + return ((wxImage*)image)->GetData(); +} + +unsigned char* wx_image_get_alpha(void* image) +{ + return ((wxImage*)image)->GetAlpha(); +} + +/* wxFileConfig */ + +void* wx_config_load(const char* path) +{ + if (!wxFileExists(path)) + return 0; + wxFileInputStream stream(path); + if (stream.IsOk()) + return new wxFileConfig(stream); + return 0; +} +int wx_config_get_string(void* config, const char* name, char* dst, int size, const char* defVal) +{ + wxFileConfig* c = ((wxFileConfig*)config); + wxString val; + bool res = c->Read(name, &val, wxString(defVal)); + strncpy(dst, val.GetData().AsChar(), size-1); + dst[size-1] = 0; + return res; +} +int wx_config_get_int(void* config, const char* name, int* dst, int defVal) +{ + wxFileConfig* c = ((wxFileConfig*)config); + return c->Read(name, dst, defVal); +} + +int wx_config_get_float(void* config, const char* name, float* dst, float defVal) +{ + wxFileConfig* c = ((wxFileConfig*)config); + return c->Read(name, dst, defVal); + +} + +int wx_config_get_bool(void* config, const char* name, int* dst, int defVal) +{ + wxFileConfig* c = ((wxFileConfig*)config); + wxString val; + bool res = 1; + if (c->Read(name, &val)) + { + val.LowerCase(); + if (val.StartsWith("true")) + *dst = 1; + else if (val.StartsWith("false")) + *dst = 0; + else + res = 0; + } + if (!res) + res = c->Read(name, (bool*)dst, (bool)defVal); + + return res; +} + +int wx_config_has_entry(void* config, const char* name) +{ + wxFileConfig* c = ((wxFileConfig*)config); + return c->HasEntry(name); +} + +void wx_config_free(void* config) +{ + delete (wxFileConfig*)config; +} + +typedef struct progress_data_t { + WX_CALLBACK callback; + void* data; + int active; + int result; +} progress_data_t; + +static void progress_callback(void* data) +{ + progress_data_t* d = (progress_data_t*) data; + d->result = d->callback(d->data); + d->active = 0; +} + +int wx_progressdialogpulse(void* window, const char* title, const char* message, WX_CALLBACK callback, void* data) +{ + struct progress_data_t pdata; + pdata.callback = callback; + pdata.data = data; + pdata.active = 1; + pdata.result = 0; + + thread_t* t = thread_create(progress_callback, &pdata); + + wxProgressDialog dlg(title, message, 100, (wxWindow*)window, wxPD_APP_MODAL | wxPD_SMOOTH | wxPD_AUTO_HIDE); + while (pdata.active) + { + dlg.Pulse(); + wxMilliSleep(50); + } + thread_kill(t); + + return pdata.result; +} + +void wx_date_format(char* s, const char* format) +{ + wxString res = wxDateTime::Now().Format(format); + strcpy(s, res.mb_str()); +} diff --git a/src/wx-utils.h b/src/wx-utils.h index 719e224..6ab844b 100644 --- a/src/wx-utils.h +++ b/src/wx-utils.h @@ -8,12 +8,14 @@ #define INT_PARAM wxInt32 #endif -typedef void (*WX_CALLBACK)(); +typedef int (*WX_CALLBACK)(void* data); #ifdef __cplusplus extern "C" { #endif int wx_messagebox(void* nothing, const char* message, const char* title, int style); + void wx_simple_messagebox(const char* title, const char *format, ...); + int wx_xrcid(const char* s); int wx_filedialog(void* window, const char* title, const char* path, const char* extensions, const char* extension, int open, char* file); void wx_checkmenuitem(void* window, int id, int checked); @@ -25,8 +27,9 @@ extern "C" { void* wx_getsubmenu(void* window, int id); void wx_appendmenu(void* sub_menu, int id, const char* title, enum wxItemKind type); + void* wx_getnativemenu(void* menu); - int wx_textentrydialog(void* window, const char* message, const char* title, const char* value, int min_length, int max_length, LONG_PARAM result); + int wx_textentrydialog(void* window, const char* message, const char* title, const char* value, unsigned int min_length, unsigned int max_length, LONG_PARAM result); int wx_dlgdirlist(void* window, const char* path, int id, int static_path, int file_type); int wx_dlgdirselectex(void* window, LONG_PARAM path, int count, int id); @@ -37,8 +40,11 @@ extern "C" { void wx_setdlgitemtext(void* window, int id, char* str); void wx_enablewindow(void* window, int enabled); void wx_showwindow(void* window, int show); - void wx_callback(void* window, WX_CALLBACK callback); + int wx_iswindowvisible(void* window); + void* wx_getnativewindow(void* window); + void wx_callback(void* window, WX_CALLBACK callback, void* data); void wx_togglewindow(void* window); + int wx_progressdialogpulse(void* window, const char* title, const char* message, WX_CALLBACK callback, void* data); void wx_enddialog(void* window, int ret_code); @@ -72,7 +78,30 @@ extern "C" { int wx_file_exists(char* path); int wx_dir_exists(char* path); + void wx_date_format(char* s, const char* format); + + int wx_image_save(const char* path, const char* name, const char* format, unsigned char* rgba, int width, int height, int alpha); + + void* wx_image_load(const char* path); + void wx_image_rescale(void* image, int width, int height); + void wx_image_get_size(void* image, int* width, int* height); + unsigned char* wx_image_get_data(void* image); + unsigned char* wx_image_get_alpha(void* image); + void wx_image_free(void* image); + + void* wx_config_load(const char* path); + int wx_config_get_string(void* config, const char* name, char* dst, int size, const char* defVal); + int wx_config_get_int(void* config, const char* name, int* dst, int defVal); + int wx_config_get_float(void* config, const char* name, float* dst, float defVal); + int wx_config_get_bool(void* config, const char* name, int* dst, int defVal); + int wx_config_has_entry(void* config, const char* name); + void wx_config_free(void* config); + int confirm(); + +#ifdef _WIN32 + void wx_winsendmessage(void* window, int msg, INT_PARAM wParam, LONG_PARAM lParam); +#endif #ifdef __cplusplus } #endif @@ -111,9 +140,17 @@ extern void (*wx_idle_func)(void* window, void* event); #define WX_LB_GETTEXT 62 #define WX_LB_DELETESTRING 63 #define WX_LB_INSERTSTRING 64 +#define WX_LB_RESETCONTENT 65 +#define WX_LB_SETCURSEL 66 +#define WX_LBN_DBLCLK 67 #define WX_MB_OK wxOK #define WX_MB_OKCANCEL wxOK|wxCANCEL #define WX_IDOK wxOK +#define IMAGE_JPG "jpg" +#define IMAGE_PNG "png" +#define IMAGE_BMP "bmp" +#define IMAGE_TIFF "tiff" + extern int has_been_inited; diff --git a/src/wx.rc b/src/wx.rc new file mode 100644 index 0000000..20db40e --- /dev/null +++ b/src/wx.rc @@ -0,0 +1 @@ +#include "wx/msw/wx.rc" \ No newline at end of file