Team sf branch.
authortnmurphy@4GBL06592.nokia.com
Mon, 16 Nov 2009 09:46:46 +0000
changeset 3 e1eecf4d390d
parent 1 be27ed110b50
child 4 83cd243bb2c5
child 5 593a8820b912
child 38 8a1eeb1a78cb
Team sf branch. Excluded win32 dir and also test epocroot Added test directory
sbsv2/raptor/RELEASE-NOTES.txt
sbsv2/raptor/bin/buildstats.py
sbsv2/raptor/bin/codetest_osbuild.sh
sbsv2/raptor/bin/countbinaries.sh
sbsv2/raptor/bin/createrfifile.pl
sbsv2/raptor/bin/createvmap.py
sbsv2/raptor/bin/failedstats.py
sbsv2/raptor/bin/fixmeta.py
sbsv2/raptor/bin/install_raptor.sh
sbsv2/raptor/bin/mkgetfailed.py
sbsv2/raptor/bin/oby2linux.py
sbsv2/raptor/bin/osbuild.sh
sbsv2/raptor/bin/raptorlog.py
sbsv2/raptor/bin/readme.txt
sbsv2/raptor/bin/sbs.bat
sbsv2/raptor/bin/sbsv2cache.py
sbsv2/raptor/bin/setup_user.sh
sbsv2/raptor/bin/speedtest_osbuild.sh
sbsv2/raptor/bin/squashlog.py
sbsv2/raptor/bin/statcollate.py
sbsv2/raptor/bin/unsplitdirs.py
sbsv2/raptor/bin/vartoxml.py
sbsv2/raptor/bin/whatsource.py
sbsv2/raptor/examples/os_properties.xml
sbsv2/raptor/examples/sbs_init.xml
sbsv2/raptor/group/bld.inf
sbsv2/raptor/group/checkexports.sh
sbsv2/raptor/group/exports.inf
sbsv2/raptor/group/exports.sh
sbsv2/raptor/group/exports.sh2
sbsv2/raptor/group/raptor.mrp
sbsv2/raptor/group/release.txt
sbsv2/raptor/lib/config/arm.xml
sbsv2/raptor/lib/config/build.xml
sbsv2/raptor/lib/config/carbide.xml
sbsv2/raptor/lib/config/coverity.xml
sbsv2/raptor/lib/config/default.xml
sbsv2/raptor/lib/config/gcc.xml
sbsv2/raptor/lib/config/gcce.xml
sbsv2/raptor/lib/config/gccxml.xml
sbsv2/raptor/lib/config/interfaces.xml
sbsv2/raptor/lib/config/locations.xml
sbsv2/raptor/lib/config/make.xml
sbsv2/raptor/lib/config/meta.xml
sbsv2/raptor/lib/config/msvc.xml
sbsv2/raptor/lib/config/root.xml
sbsv2/raptor/lib/config/rvct.xml
sbsv2/raptor/lib/config/variants.xml
sbsv2/raptor/lib/config/winscw.xml
sbsv2/raptor/lib/flm/analysis.xml
sbsv2/raptor/lib/flm/base.xml
sbsv2/raptor/lib/flm/bitmap.flm
sbsv2/raptor/lib/flm/booleanlogic.mk
sbsv2/raptor/lib/flm/build.flm
sbsv2/raptor/lib/flm/build.xml
sbsv2/raptor/lib/flm/config.xml
sbsv2/raptor/lib/flm/config/default.flm
sbsv2/raptor/lib/flm/converged-comms/createcommdbs.flm
sbsv2/raptor/lib/flm/converged-comms/installdefaultcommdb.flm
sbsv2/raptor/lib/flm/e32abiv2.flm
sbsv2/raptor/lib/flm/e32abiv2ani.flm
sbsv2/raptor/lib/flm/e32abiv2defaults.mk
sbsv2/raptor/lib/flm/e32abiv2dll.flm
sbsv2/raptor/lib/flm/e32abiv2exe.flm
sbsv2/raptor/lib/flm/e32abiv2exexp.flm
sbsv2/raptor/lib/flm/e32abiv2fsy.flm
sbsv2/raptor/lib/flm/e32abiv2implib.flm
sbsv2/raptor/lib/flm/e32abiv2kdll.flm
sbsv2/raptor/lib/flm/e32abiv2kext.flm
sbsv2/raptor/lib/flm/e32abiv2klib.flm
sbsv2/raptor/lib/flm/e32abiv2ldd.flm
sbsv2/raptor/lib/flm/e32abiv2lib.flm
sbsv2/raptor/lib/flm/e32abiv2none.flm
sbsv2/raptor/lib/flm/e32abiv2pdd.flm
sbsv2/raptor/lib/flm/e32abiv2pdl.flm
sbsv2/raptor/lib/flm/e32abiv2plugin.flm
sbsv2/raptor/lib/flm/e32abiv2stddll.flm
sbsv2/raptor/lib/flm/e32abiv2stdexe.flm
sbsv2/raptor/lib/flm/e32abiv2stdlib.flm
sbsv2/raptor/lib/flm/e32abiv2textnotifier2.flm
sbsv2/raptor/lib/flm/e32abiv2var.flm
sbsv2/raptor/lib/flm/e32abiv2var2.flm
sbsv2/raptor/lib/flm/e32postlink.mk
sbsv2/raptor/lib/flm/emulator.xml
sbsv2/raptor/lib/flm/extensions.xml
sbsv2/raptor/lib/flm/final.mk
sbsv2/raptor/lib/flm/flmtools.mk
sbsv2/raptor/lib/flm/gccxml.flm
sbsv2/raptor/lib/flm/gccxmlresource.flm
sbsv2/raptor/lib/flm/globals.mk
sbsv2/raptor/lib/flm/gnumakefile.flm
sbsv2/raptor/lib/flm/grouping.flm
sbsv2/raptor/lib/flm/metaflm.mk
sbsv2/raptor/lib/flm/msvctools.flm
sbsv2/raptor/lib/flm/msvctools.xml
sbsv2/raptor/lib/flm/none.flm
sbsv2/raptor/lib/flm/null.flm
sbsv2/raptor/lib/flm/readme.txt
sbsv2/raptor/lib/flm/resource.flm
sbsv2/raptor/lib/flm/romfile.mk
sbsv2/raptor/lib/flm/stack.mk
sbsv2/raptor/lib/flm/standard.xml
sbsv2/raptor/lib/flm/stringtable.flm
sbsv2/raptor/lib/flm/taggedrules.mk
sbsv2/raptor/lib/flm/template_ext.flm
sbsv2/raptor/lib/flm/test/Makefile
sbsv2/raptor/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk
sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cia
sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cpp
sbsv2/raptor/lib/flm/test/ciatests.mk
sbsv2/raptor/lib/flm/test/dllabiv2_1/dllabiv2_1.mk
sbsv2/raptor/lib/flm/test/dllabiv2_1/test.cpp
sbsv2/raptor/lib/flm/test/dllabiv2_defaults.mk
sbsv2/raptor/lib/flm/test/dllbasictests.mk
sbsv2/raptor/lib/flm/test/environment/make/test_variable_restore.mk
sbsv2/raptor/lib/flm/test/environment/pvm/pvmtest.mk
sbsv2/raptor/lib/flm/test/exeabiv2_1/exeabiv2_1.mk
sbsv2/raptor/lib/flm/test/exeabiv2_1/test.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_2/exeabiv2_2.mk
sbsv2/raptor/lib/flm/test/exeabiv2_2/test.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_2/test_function.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_3/exeabiv2_3.mk
sbsv2/raptor/lib/flm/test/exeabiv2_3/test_big.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_4/exeabiv2_4.mk
sbsv2/raptor/lib/flm/test/exeabiv2_4/test.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_4/test_big.cpp
sbsv2/raptor/lib/flm/test/exeabiv2_defaults.mk
sbsv2/raptor/lib/flm/test/exebasictests.mk
sbsv2/raptor/lib/flm/test/exeperftests.mk
sbsv2/raptor/lib/flm/test/export1/Makefile
sbsv2/raptor/lib/flm/test/export1/t1e.h
sbsv2/raptor/lib/flm/test/export1/t2e.h
sbsv2/raptor/lib/flm/test/export1/t3e.h
sbsv2/raptor/lib/flm/test/export1/t4e.h
sbsv2/raptor/lib/flm/test/flmtests.mk
sbsv2/raptor/lib/flm/test/raptorglue/raptorglue.mk
sbsv2/raptor/lib/flm/test/templateext/Makefile
sbsv2/raptor/lib/flm/test/templateext/temex.mk
sbsv2/raptor/lib/flm/tools.xml
sbsv2/raptor/lib/flm/tools/buildstubsis.flm
sbsv2/raptor/lib/flm/tools/stlport.flm
sbsv2/raptor/lib/flm/tools/test_command_diff.sh
sbsv2/raptor/lib/flm/tools2common.flm
sbsv2/raptor/lib/flm/tools2exe.flm
sbsv2/raptor/lib/flm/tools2lib.flm
sbsv2/raptor/lib/flm/tracecompiler.mk
sbsv2/raptor/lib/flm/user/default.flm_ex
sbsv2/raptor/lib/flm/user/globals.mk_ex
sbsv2/raptor/lib/flm/utils/copydir.flm
sbsv2/raptor/lib/flm/utils/prebuilt.flm
sbsv2/raptor/lib/flm/utils/utility.xml
sbsv2/raptor/lib/flm/win32.flm
sbsv2/raptor/lib/flm/win32ani.flm
sbsv2/raptor/lib/flm/win32bitmap.flm
sbsv2/raptor/lib/flm/win32dll.flm
sbsv2/raptor/lib/flm/win32exe.flm
sbsv2/raptor/lib/flm/win32exexp.flm
sbsv2/raptor/lib/flm/win32fsy.flm
sbsv2/raptor/lib/flm/win32implib.flm
sbsv2/raptor/lib/flm/win32kdll.flm
sbsv2/raptor/lib/flm/win32kext.flm
sbsv2/raptor/lib/flm/win32klib.flm
sbsv2/raptor/lib/flm/win32ldd.flm
sbsv2/raptor/lib/flm/win32lib.flm
sbsv2/raptor/lib/flm/win32pdd.flm
sbsv2/raptor/lib/flm/win32pdl.flm
sbsv2/raptor/lib/flm/win32plugin.flm
sbsv2/raptor/lib/flm/win32resource.flm
sbsv2/raptor/lib/flm/win32stddll.flm
sbsv2/raptor/lib/flm/win32stdexe.flm
sbsv2/raptor/lib/flm/win32stdlib.flm
sbsv2/raptor/lib/flm/win32textnotifier2.flm
sbsv2/raptor/lib/flm/win32var.flm
sbsv2/raptor/lib/flm/win32var2.flm
sbsv2/raptor/linux-i386/bin/bashbug
sbsv2/raptor/python/dos2unix.py
sbsv2/raptor/python/filter_interface.py
sbsv2/raptor/python/filter_list.py
sbsv2/raptor/python/filter_utils.py
sbsv2/raptor/python/generic_path.py
sbsv2/raptor/python/mmpparser.py
sbsv2/raptor/python/pluginbox.py
sbsv2/raptor/python/plugins/dummyplugin.py
sbsv2/raptor/python/plugins/filter_carbide.py
sbsv2/raptor/python/plugins/filter_checksource.py
sbsv2/raptor/python/plugins/filter_clean.py
sbsv2/raptor/python/plugins/filter_logfile.py
sbsv2/raptor/python/plugins/filter_splitlog.py
sbsv2/raptor/python/plugins/filter_squashlog.py
sbsv2/raptor/python/plugins/filter_terminal.py
sbsv2/raptor/python/plugins/filter_what.py
sbsv2/raptor/python/pyparsing.py
sbsv2/raptor/python/raptor.py
sbsv2/raptor/python/raptor_cache.py
sbsv2/raptor/python/raptor_cli.py
sbsv2/raptor/python/raptor_data.py
sbsv2/raptor/python/raptor_make.py
sbsv2/raptor/python/raptor_makefile.py
sbsv2/raptor/python/raptor_meta.py
sbsv2/raptor/python/raptor_start.py
sbsv2/raptor/python/raptor_utilities.py
sbsv2/raptor/python/raptor_version.py
sbsv2/raptor/python/raptor_version.py.bak
sbsv2/raptor/python/raptor_xml.py
sbsv2/raptor/python/sbs_dist.py
sbsv2/raptor/schema/build/1_0.xsd
sbsv2/raptor/schema/build/2_0.xsd
sbsv2/raptor/schema/build/log/1_0.xsd
sbsv2/raptor/test/System_Definition.xml
sbsv2/raptor/test/cluster/README
sbsv2/raptor/test/cluster/headtest.sh
sbsv2/raptor/test/cluster/nodetest.sh
sbsv2/raptor/test/cluster/pvmtest.sh
sbsv2/raptor/test/common/raptor_tests.py
sbsv2/raptor/test/common/run_tests.py
sbsv2/raptor/test/config/arm.xml
sbsv2/raptor/test/config/default.xml
sbsv2/raptor/test/config/interface.xml
sbsv2/raptor/test/config/user.xml
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/makefiles_testrun01.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/testrig01.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/makefiles_testrun02.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/testrig02.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/makefiles_testrun03.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/testrig03.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/makefiles_testrun04.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/testrig04.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/makefiles_testrun05.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/testrig05.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/makefiles_testrun06.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/testrig06.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/makefiles_testrun07.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/testrig07.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/makefiles_testrun08.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/testrig08.bat
sbsv2/raptor/test/core_utils/HowTo.txt
sbsv2/raptor/test/core_utils/makemakefile.py
sbsv2/raptor/test/core_utils/mingw.tar.bz2
sbsv2/raptor/test/core_utils/msys.tar.bz2
sbsv2/raptor/test/core_utils/src/msys-sed-4.1.5-src.tar.gz
sbsv2/raptor/test/custom_options/emake/.sbs_init.xml
sbsv2/raptor/test/custom_options/rvct31/.sbs_init.xml
sbsv2/raptor/test/custom_options/rvct40/.sbs_init.xml
sbsv2/raptor/test/custom_options/talon/.sbs_init.xml
sbsv2/raptor/test/envelope/1quarter.xml
sbsv2/raptor/test/envelope/2quarter.xml
sbsv2/raptor/test/envelope/all_nocompsupp.xml
sbsv2/raptor/test/envelope/allexport.xml
sbsv2/raptor/test/envelope/allexport2.xml
sbsv2/raptor/test/envelope/little.xml
sbsv2/raptor/test/envelope/preexport.xml
sbsv2/raptor/test/envelope/syslib0.xml
sbsv2/raptor/test/envelope/syslib1.xml
sbsv2/raptor/test/envelope/syslib2.xml
sbsv2/raptor/test/logging/bld.inf
sbsv2/raptor/test/logging/simple.mmp
sbsv2/raptor/test/logging/test.cpp
sbsv2/raptor/test/metadata/config/empty_cfg.cfg
sbsv2/raptor/test/metadata/config/invalid_cfg.cfg
sbsv2/raptor/test/metadata/config/test_cfg.cfg
sbsv2/raptor/test/metadata/include/subdir/test_hrh_include.h
sbsv2/raptor/test/metadata/include/test_hrh.hrh
sbsv2/raptor/test/metadata/project/bld.infs/default_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/default_plats_minus_plat.inf
sbsv2/raptor/test/metadata/project/bld.infs/exports.inf
sbsv2/raptor/test/metadata/project/bld.infs/extensions.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/dir1/dir2/up_dir.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/dir3/down_dir.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/top_level.inf
sbsv2/raptor/test/metadata/project/bld.infs/multiple_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/no_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/no_prj_platforms.inf
sbsv2/raptor/test/metadata/project/bld.infs/single_plat.inf
sbsv2/raptor/test/metadata/project/mmps/includes/dir1/dir2/up_dir.mmh
sbsv2/raptor/test/metadata/project/mmps/includes/dir3/down_dir.mmh
sbsv2/raptor/test/metadata/project/mmps/includes/top_level.inf
sbsv2/raptor/test/metadata/project/mmps/includes/top_level.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/autotest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/ignoretest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/manualtest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/supporttest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/test_mmps.inf
sbsv2/raptor/test/metadata/system/system_definition_1.3.1.xml
sbsv2/raptor/test/metadata/system/system_definition_1.4.1.xml
sbsv2/raptor/test/metadata/system/system_definition_1.5.1.xml
sbsv2/raptor/test/metadata/system/system_definition_2.0.0.xml
sbsv2/raptor/test/metadata/system/system_definition_3.0.0.xml
sbsv2/raptor/test/metadata/system/system_definition_multi_layers.xml
sbsv2/raptor/test/metadata/system/system_definition_nover.xml
sbsv2/raptor/test/oe_linking_against_se_lib/group/bld.inf
sbsv2/raptor/test/oe_linking_against_se_lib/group/test_oeexe.mmp
sbsv2/raptor/test/oe_linking_against_se_lib/test_oedll.h
sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe.cpp
sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe_wins.cpp
sbsv2/raptor/test/run
sbsv2/raptor/test/run.bat
sbsv2/raptor/test/simple/test_dbg.cpp
sbsv2/raptor/test/smoke_suite/armv5_asmtest.py
sbsv2/raptor/test/smoke_suite/armv5_stringtable.py
sbsv2/raptor/test/smoke_suite/armv5_testcode.py
sbsv2/raptor/test/smoke_suite/armv7_asmtest.py
sbsv2/raptor/test/smoke_suite/armv7_stringtable.py
sbsv2/raptor/test/smoke_suite/armv7_testcode.py
sbsv2/raptor/test/smoke_suite/basic_dependency.py
sbsv2/raptor/test/smoke_suite/bitmap.py
sbsv2/raptor/test/smoke_suite/clean_readonly.py
sbsv2/raptor/test/smoke_suite/commandfile.py
sbsv2/raptor/test/smoke_suite/configpath.py
sbsv2/raptor/test/smoke_suite/defs_armv5.py
sbsv2/raptor/test/smoke_suite/defs_armv7.py
sbsv2/raptor/test/smoke_suite/dll_armv5.py
sbsv2/raptor/test/smoke_suite/dll_armv5_smp.py
sbsv2/raptor/test/smoke_suite/dll_armv5_winscw_freeze.py
sbsv2/raptor/test/smoke_suite/dll_armv6.py
sbsv2/raptor/test/smoke_suite/dll_armv7.py
sbsv2/raptor/test/smoke_suite/dll_winscw.py
sbsv2/raptor/test/smoke_suite/dll_winscw_win32resource.py
sbsv2/raptor/test/smoke_suite/emulated_drives.py
sbsv2/raptor/test/smoke_suite/exe_armv5.py
sbsv2/raptor/test/smoke_suite/exe_armv5_filtered.py
sbsv2/raptor/test/smoke_suite/exe_armv5_smp.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_plus_clean.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_single_file.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_what.py
sbsv2/raptor/test/smoke_suite/exe_armv7.py
sbsv2/raptor/test/smoke_suite/exe_checksource.py
sbsv2/raptor/test/smoke_suite/exe_winscw.py
sbsv2/raptor/test/smoke_suite/export.py
sbsv2/raptor/test/smoke_suite/export_multi.py
sbsv2/raptor/test/smoke_suite/extension_reallyclean.py
sbsv2/raptor/test/smoke_suite/extension_whattarget.py
sbsv2/raptor/test/smoke_suite/featurevariants.py
sbsv2/raptor/test/smoke_suite/filter_missing.py
sbsv2/raptor/test/smoke_suite/flm_extension.py
sbsv2/raptor/test/smoke_suite/gccxml.py
sbsv2/raptor/test/smoke_suite/gnumakefile.py
sbsv2/raptor/test/smoke_suite/gnumakefile_what.py
sbsv2/raptor/test/smoke_suite/gnumakefile_whatlog.py
sbsv2/raptor/test/smoke_suite/gui_whatlog.py
sbsv2/raptor/test/smoke_suite/implib_armv5.py
sbsv2/raptor/test/smoke_suite/implib_armv5_smp.py
sbsv2/raptor/test/smoke_suite/implib_armv5_what.py
sbsv2/raptor/test/smoke_suite/implib_armv5_with_armv5_smp.py
sbsv2/raptor/test/smoke_suite/implib_whatlog.py
sbsv2/raptor/test/smoke_suite/implib_winscw.py
sbsv2/raptor/test/smoke_suite/implib_winscw_what.py
sbsv2/raptor/test/smoke_suite/kdll_armv5.py
sbsv2/raptor/test/smoke_suite/lib_armv5_armv7.py
sbsv2/raptor/test/smoke_suite/lib_versioned.py
sbsv2/raptor/test/smoke_suite/lib_winscw.py
sbsv2/raptor/test/smoke_suite/listing.py
sbsv2/raptor/test/smoke_suite/longfilenames.py
sbsv2/raptor/test/smoke_suite/longpath.py
sbsv2/raptor/test/smoke_suite/metadep.py
sbsv2/raptor/test/smoke_suite/mmp_keywords.py
sbsv2/raptor/test/smoke_suite/mmp_newlib_keyword.py
sbsv2/raptor/test/smoke_suite/mmp_select.py
sbsv2/raptor/test/smoke_suite/named_extension.py
sbsv2/raptor/test/smoke_suite/nobuild.py
sbsv2/raptor/test/smoke_suite/non_ascii.py
sbsv2/raptor/test/smoke_suite/openenvironment.py
sbsv2/raptor/test/smoke_suite/output_control.py
sbsv2/raptor/test/smoke_suite/paging.py
sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py
sbsv2/raptor/test/smoke_suite/pre_export.py
sbsv2/raptor/test/smoke_suite/raptor_crash.py
sbsv2/raptor/test/smoke_suite/resource.py
sbsv2/raptor/test/smoke_suite/retry.py
sbsv2/raptor/test/smoke_suite/romfile.py
sbsv2/raptor/test/smoke_suite/sbs_with_nonexisting_bldinf.py
sbsv2/raptor/test/smoke_suite/smp.py
sbsv2/raptor/test/smoke_suite/splitlog_filter.py
sbsv2/raptor/test/smoke_suite/stringtable_zip_whatlog.py
sbsv2/raptor/test/smoke_suite/sysdef_dud.py
sbsv2/raptor/test/smoke_suite/sysdef_exports.py
sbsv2/raptor/test/smoke_suite/sysdef_layers.py
sbsv2/raptor/test/smoke_suite/talon_test.py
sbsv2/raptor/test/smoke_suite/tem_conflicts.py
sbsv2/raptor/test/smoke_suite/tem_stages.py
sbsv2/raptor/test/smoke_suite/temtest.py
sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/asmtest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testasm.s
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testassembler.cpp
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testcia.cia
sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/DISTRIBUTION.POLICY
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/DISTRIBUTION.POLICY
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.flm
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.xml
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bmt.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.flm
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.xml
sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLARM.def
sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/bv/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/bv/bv_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/dummy.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/fake.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/bv_hrh_relative/relative.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var1.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var2.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var3.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/listA.txt
sbsv2/raptor/test/smoke_suite/test_resources/bv/listB.txt
sbsv2/raptor/test/smoke_suite/test_resources/bv/release/dummy.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/release/fake.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/var1/var1.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/var2/var2.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/var3/var3.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/with_errors.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/with_macros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/without_macros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/commonframework/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/source/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/home/.sbs_init.xml
sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v2/variant2.xml
sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v3/variant3.xml
sbsv2/raptor/test/smoke_suite/test_resources/defs/eabi/deftestu.def
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/deftest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/e32def.h
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.cpp
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.mmp
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export1.mbm
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export2.mbm
sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter.py
sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter_exceptions.py
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/master.mak
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/slave.mak
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.h
sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.mmh
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftestu.def
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/e32def.h
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/longerfilenamethanyoumightnormallyexpecttobepresent.cpp
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/exception_crash.inf
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.flm
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.xml
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/memory_crash.inf
sbsv2/raptor/test/smoke_suite/test_resources/metadep.sh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/eabi/shutdownsrvu.def
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/shutdownsrv.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/inc/shutdownsrv.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrv.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ColorConverter.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ImageProcessor.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/ImageProcessorPerf.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/icl_uids.hrh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/imageprocessor.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageClientMain.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageProcessorPriv.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageUtils.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/fwextconstants.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_common.mmh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_vfpv2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/exchange.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/buffer/t_rbuf.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.inl
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_newldd.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_lddturnaroundtimertest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_newldd.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_rbuf.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_sharedio3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/d_sharedio.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/freeram.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/t_sharedio.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzlib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/u32std.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exe.cia
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exex86.cia
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/x86hlp.inl
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress_noarmlibs.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.mmp
sbsv2/raptor/test/smoke_suite/test_resources/non_ascii/cmd.txt
sbsv2/raptor/test/smoke_suite/test_resources/oe/bwins/t_oedll.def
sbsv2/raptor/test/smoke_suite/test_resources/oe/eabi/t_oedll.def
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/oe_exe_without_stdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe_with_stdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_lib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oedll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oeexe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oelib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_oe_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_symbian_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/symbian_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.h
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe_wins.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oelib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/wrong_newlib_symbian.cpp
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/mmh/my.mmh
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/refilter/Makefile_broken.log
sbsv2/raptor/test/smoke_suite/test_resources/refilter/refilter.py
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.bat
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.py
sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource_badef.rh
sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.hrh
sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.rh
sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rls
sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rss
sbsv2/raptor/test/smoke_suite/test_resources/retry/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.flm
sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/build_spec.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple/commands-v7.txt
sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cia
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.h
sbsv2/raptor/test/smoke_suite/test_resources/simple/test1.c++
sbsv2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
sbsv2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test4.cc
sbsv2/raptor/test/smoke_suite/test_resources/simple/test5.CC
sbsv2/raptor/test/smoke_suite/test_resources/simple/test6.C++
sbsv2/raptor/test/smoke_suite/test_resources/simple_crash/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLARM.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv6_specific.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv7_specific.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/epoc32.ico
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/gui.rc
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/hand.cur
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/resource.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/win32resourcedll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/file with a space.doc
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp1.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp2.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp3.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp4.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.meta
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.mk
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.meta
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.mk
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.flm
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/BldVar2.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/DISTRIBUTION.policy
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.pkg
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldVar2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppUi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppView.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Application.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_reg.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldstdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_emulator.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_target.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib1.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib2.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/test_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/default.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_defaultdata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_unpageddata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpaged.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpagedcode_pageddata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin_with_deffile.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/strings/strconsts.st
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_auto.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_manual.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/testexportheader.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/archive.zip
sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/smp/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/smp/smp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/smp/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.rss
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/build_gen_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppUi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppView.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Application.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Document.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_reg.rss
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/dependent_on_exports.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/metadata_export_pre1.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/metadata_export_pre2.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_dud.xml
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/talon_test/README.FIRST.txt
sbsv2/raptor/test/smoke_suite/test_resources/talon_test/script
sbsv2/raptor/test/smoke_suite/test_resources/tem/README
sbsv2/raptor/test/smoke_suite/test_resources/tem/bad2_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bad_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bldclean.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/cleantems.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem/temex.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.meta
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.sh
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.meta
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/timeout/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.flm
sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.xml
sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck.xml
sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck6.py
sbsv2/raptor/test/smoke_suite/test_resources/tools/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tools2/build_spec.xml
sbsv2/raptor/test/smoke_suite/test_resources/tools2/header_abc.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc1/header_def.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc2/header_ghi.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys1/header_jkl.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys2/header_mno.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/inc/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/src/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/HelloWorldTraces.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/fixed_id.definitions
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/tc_variants.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/list.txt
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_c.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/mum.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/common.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/use_tc.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/eabi/testTCu.def
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/testTC.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/bcmnvmem.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/gendebug.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/lmac_firmware.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/plt_firmware.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinit.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitinterface.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitmain.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitpermparser.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinittypes.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitmain.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitpermparser.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/invariant_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/variant_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/inv_source.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/use_tc.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var1/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var2/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/exeusingunfrozen.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/freeze.inf
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/frozen_with_removed_export.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/missing_symbols.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenarm.def
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenwins.def
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.h
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_for_freeze.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_with_deffile.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/dllversioning.inf
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.cpp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.h
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_20.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi{00020000}.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins{00020000}.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib01.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib02.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib03.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib04.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/xver_20.mmp
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/test.cpp
sbsv2/raptor/test/smoke_suite/timeout.py
sbsv2/raptor/test/smoke_suite/toolcheck.py
sbsv2/raptor/test/smoke_suite/tools.py
sbsv2/raptor/test/smoke_suite/tools2.py
sbsv2/raptor/test/smoke_suite/tracecompiler_general.py
sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py
sbsv2/raptor/test/smoke_suite/unfrozen.py
sbsv2/raptor/test/smoke_suite/unfrozen_savespace.py
sbsv2/raptor/test/smoke_suite/whatlog_cache.py
sbsv2/raptor/test/smoke_suite/winscw_resource.py
sbsv2/raptor/test/smoke_suite/wrong_projectname.py
sbsv2/raptor/test/smoke_suite/xml_invalid_chars.py
sbsv2/raptor/test/smoke_suite/zip_export_plus_clean.py
sbsv2/raptor/test/smoke_suite/zip_export_what.py
sbsv2/raptor/test/spec/spec.xml
sbsv2/raptor/test/unit_suite/data/ignore.xml
sbsv2/raptor/test/unit_suite/data/old_bad.xml
sbsv2/raptor/test/unit_suite/data/old_ok.xml
sbsv2/raptor/test/unit_suite/data/sbs_init.xml
sbsv2/raptor/test/unit_suite/filter_utils_unit.py
sbsv2/raptor/test/unit_suite/generic_path_unit.py
sbsv2/raptor/test/unit_suite/mmpparser_unit.py
sbsv2/raptor/test/unit_suite/raptor_cache_unit.py
sbsv2/raptor/test/unit_suite/raptor_cli_unit.py
sbsv2/raptor/test/unit_suite/raptor_data_unit.py
sbsv2/raptor/test/unit_suite/raptor_make_unit.py
sbsv2/raptor/test/unit_suite/raptor_makefile_unit.py
sbsv2/raptor/test/unit_suite/raptor_meta_unit.py
sbsv2/raptor/test/unit_suite/raptor_unit.py
sbsv2/raptor/test/unit_suite/raptor_utilities_unit.py
sbsv2/raptor/test/unit_suite/raptor_xml_unit.py
sbsv2/raptor/util/Makefile
sbsv2/raptor/util/bash.mk
sbsv2/raptor/util/bvcpp.mk
sbsv2/raptor/util/codewarrior.mk
sbsv2/raptor/util/config.h
sbsv2/raptor/util/descramble/Makefile
sbsv2/raptor/util/descramble/descramble.cpp
sbsv2/raptor/util/dialog.mk
sbsv2/raptor/util/gccprogram.mk
sbsv2/raptor/util/gccxml.mk
sbsv2/raptor/util/install-linux/makeself-header.sh
sbsv2/raptor/util/install-linux/makeself.sh
sbsv2/raptor/util/install-linux/package_sbs.sh
sbsv2/raptor/util/install-windows/raptorinstallermaker.py
sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi
sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh
sbsv2/raptor/util/install-windows/unzip.py
sbsv2/raptor/util/make.mk
sbsv2/raptor/util/pvm.mk
sbsv2/raptor/util/pvmgmake.mk
sbsv2/raptor/util/python.mk
sbsv2/raptor/util/ransleep/Makefile
sbsv2/raptor/util/ransleep/ransleep.c
sbsv2/raptor/util/talon/Makefile
sbsv2/raptor/util/talon/buffer.c
sbsv2/raptor/util/talon/buffer.h
sbsv2/raptor/util/talon/lock.c
sbsv2/raptor/util/talon/log.c
sbsv2/raptor/util/talon/log.h
sbsv2/raptor/util/talon/process.c
sbsv2/raptor/util/talon/process.h
sbsv2/raptor/util/talon/process_win.c
sbsv2/raptor/util/talon/sema.c
sbsv2/raptor/util/talon/sema.h
sbsv2/raptor/util/talon/talon.c
sbsv2/raptor/util/talon/talon_process.h
sbsv2/raptor/util/talon/talonctl.c
sbsv2/raptor/util/talon/testbuffer.c
sbsv2/raptor/util/talon/testprocess.c
sbsv2/raptor/util/talon/tests/old_taggedrules.mk
sbsv2/raptor/util/talon/tests/t.mk
sbsv2/raptor/util/talon/tests/t2.mk
sbsv2/raptor/util/talon/tests/t3.mk
sbsv2/raptor/util/talon/tests/t4.mk
sbsv2/raptor/util/talon/tests/t5.mk
sbsv2/raptor/util/talon/tests/taggedrules.mk
sbsv2/raptor/util/talon/tests/xcopystdin.mk
sbsv2/raptor/util/utilbuild.mk
--- a/sbsv2/raptor/RELEASE-NOTES.txt	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -1,662 +1,684 @@
-
-Release Notes for Symbian Build System v2
-
-version 2.10.0
-
-New Features:
-Support for GCCE compiler
-More efficient Feature Variation support
-
-
-version 2.9.3
-
-Defect Fixes:
-DPDEF142166 Raptor sometimes invokes checklib.exe with incorrect parameters
-DPDEF141354 EXPORTUNFROZEN fails in target builds if .savespace is applied
-DPDEF141533 Inconsistent log output
-DPDEF141604 file winscw.auto.bat is released two times
-DPDEF141787 Raptor treats EFREEZE info message as warnings
-	
-Other Changes:
-talon can read commands from a temporary file as well as with -c
-
-
-version 2.9.2
-
-Defect Fixes:
-DPDEF141531 Incorrect RVCT variables passed to TEM
-DPDEF141837 Some problems with dependency (.d) files
-DEF140258 Aborting SBSv2 mid-build often leads to corrupt .d files which prevent rebuilds
-DPDEF142049 Garbage in the Raptor log file
-DPDEF141954 Raptor: "tools" config static libraries can have incorrect compilation macros
-DPDEF141974 Raptor: "tools" builds can fail when done in combination with "tools2" builds
-
-Other Changes:
-Static libraries cannot be feature variant
-Option --no-depend-include for very big builds
-
-
-version 2.9.1
-
-Defect Fixes:
-DPDEF141503 RMTPClient::StartTransport Panic when using emulated test tranport plugin
-DPDEF141688 ARMV6 builds with SBSv2 have problems with missing DEF files
-	
-
-version 2.9.0
-
-New Features:
-Talon shell to reduce memory usage and improve stability.
-Support for RVCT 4.0 advanced features.
-Optionally use SBS_CYGWIN, SBS_MINGW and SBS_PYTHON to locate tools.
-Makefile to build host tools on Linux.
-Single-file compilation for IDE integration.
-Splitlog and CheckSource filters.
-
-Defect Fixes:
-DPDEF141523 Raptor links kernel-side components to scppnwdl.dso
-DPDEF141418 Raptor turns echo on
-DPDEF141495 Raptor doesn't deal correctly with SOURECEPATH beginning with '/'
-DPDEF141388 raptor inserts epoc32\include at start of systeminclude path	
-
-
-version 2.8.6
-
-DPDEF135505 Some TEMs have race conditions for simultaneous urel and udeb. cp fails.
-DPDEF141498 If make crashes, Raptor exits with 0 errors
-DPDEF141071 Raptor: GCCXML build does not support the VAR2 TARGETTYPE
-DPDEF140816 STDCPP keyword in mmp file not interpreted by gccxml tool chain
-DPDEF137727 [Raptor Rollout] Raptor fails to build certain .mbg and .rsg files
-DPDEF137494 SBSv2: preprocessor warnings and errors might cause invalid XML in log
-DPDEF140731 Missing dependency files when building from clean
-DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
-DPDEF141129 raptor generates unknown origin file
-
-Other Changes:
-Fix to support trace compiler switch
-Better message for duplicate objects, states which file overrides which.
-Refactor to avoid "defects" of missing OS variants.
-
-
-version 2.8.5
-
-Defect Fixes:
-DPDEF141102 SBS doesn't set the paging attribute of excutables correctly
-DPDEF140731 Missing dependency files when building from clean
-DPDEF135620 Workaround for broken static libraries
-
-
-version 2.8.4
-
-Defect Fixes:
-DPDEF140839 RComp crashes if it's built with sbs
-DPDEF140929 OPTION GCCE in MMP files generates a build warning
-DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
-
-
-version 2.8.3
-
-Defect Fixes:
-DPDEF139904 Raptor: .def file FREEZE attempted for ARMV5 when it shouldn't be
-DPDEF140589 Raptor: .def file FREEZE attempted for WINSCW when it shouldn't be
-DPDEF140456 Raptor build error with -c tools_rel
-DPDEF139759 Raptor warning regarding EXPORTSUNFROZEN is ambiguous
-DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
-INC140156 SBSv2 crashes when build QtWebkit for ARMV5
-
-Other Changes:
-Add <info> to show which variant.hrh file is used.
-Replaced the corrupted awk.exe in cygwin distro.
-Fix previous trace compiler auto run mechanism.
-ROMFILE improvements.
-
-
-version 2.8.2
-
-Defect Fixes:
-DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
-
-Other Changes:
-Tolerate XML schema 1_0 files where possible.
-Treat system definition schema 1.[3-9] files the same as schema 1.4 files.
-Remove checksource and its python site-packages.
-
-
-version 2.8.1
-
-Defect Fixes:
-DPDEF140165 SBS error when creating info.xml on component base_omaph2
-DPDEF132996 Location of generated auto.bat files is inconsistent
-
-Other Changes:
-Feature variant "ln -f" fails intermittently in parallel builds.
-Traceback when "group" elements are redefined in XML.
-Trace compiler should run automatically if a trace path exists.
-Need a workaround for Carbide Missing SDK problem.
-
-
-version 2.8.0
-
-New Features:
-XML schema 2.0 with new alias and group elements.
-
-Removed:
-XML config element (use var instead).
-XML .first and .last mechanism (use alias or group instead).
-
-Defect Fixes:
-DPDEF140082 SBS cause env to dirty state
-DPDEF138565 SBSV2 doesn't define the correct macros for ARMV6
-DPDEF139950 SBSv2 Filter Handling not Robust enough - bad filters stop build.
-DEF139686 [TCL Build] coredumpserver compile warnings in DP00458
-
-
-version 2.7.2
-
-Defect Fixes:
-DPDEF139420 Raptor config does not correctly handle mifconv causing resource build errors
-DPDEF138679 Raptor does not create a DEFFILE when building for winscw_urel
-DPDEF139692 SBSV2: 'virtual memory exhausted' when building multiple variants
-DPDEF136321 SBSv2: Zip exports not cleaned
-INC139622 OPTION_REPLACE does not work properly in SBSv2
-
-Other Changes:
-Added utility.prebuilt FLM.
-
-
-version 2.7.1
-
-Defect Fixes:
-DPDEF138366 [T15379] Raptor raise some warnings when build Coredumpserver
-DPDEF139405 SBSV2: Trace compilation fails with large numbers of files.
-DPDEF139572 SBSV2: Changes to '--cpu' option syntax breaks existing MMP files.
-DPDEF139456 Toolcheck file is not created if EPOCROOT is \
-DPDEF133766 Poor SBSv2 reallyclean performance
-DPDEF135780 SBSV2: REALLYCLEAN is not cleaning all files
-
-
-version 2.7.0
-
-New Features:
-DS.1744 Recognize LINKEROPTION in MMP file
-DS.1744 Compiled objects on local filesystem (SBS_BUILD_DIR)
-
-Partial Deliveries:
-DS.1744 CheckSource in Raptor
-
-Defect Fixes:
-DPDEF138293 Carbide: Raptor doesn't resolve variant.cfg entries starting with "\" correctly
-
-
-version 2.6.5
-
-Defect Fixes:
-DPDEF138930 Raptor needs to change to match new trace compiler interface
-
-
-version 2.6.4
-
-Defect Fixes:
-DPDEF138527 [TCL Build] Miss tracecompiler.mk and exclude group for Raptor export
-DPDEF138484 Raptor uses wrong guard causing trace compiler ignores some projects.
-DPDEF138720 BV product folders have missing map files
-DPDEF138721 Raptor uses wrong lib when mmp keyword FIRSTLIB presents.
-DPDEF138053 SBSv2: tools platform: tools not installed by the time they need to be used.
-DPDEF138164 Carbide: Raptor crashes on unrecognised buildinfo.txt content
-DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
-DPDEF138329 Raptor generates marker file for trace compiler when it's not done
-DPDEF138352 SBSv2: rollout - unsplit EC makefiles not generating correct deps 4 missing .mbg
-DPDEF138480 SBSv2: rollout. Created files sometimes have insufficient permissions on Windows
-DPDEF137511 SBSv2 doesn't behave correctly with the default paging policy
-
-
-version 2.6.3
-
-Defect Fixes:
-DPDEF133508 Number of errors is counted wrong
-DPDEF138098 UID issue in Trace Compiler for Raptor 
-DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
-
-
-version 2.6.2
-
-Defect Fixes:
-DPDEF135330 Raptor Rollout: bangalore messaging winscw udeb test code
-DPDEF137726 Missing mscvr_readme.txt from the SBSv2 drop
-DPDEF137739 SBSv2: rollout - .cia object files can conflict with .cpp object files 
-
-
-version 2.6.1
-
-Defect Fixes:
-DPDEF137239 raptor does not include the msvcr71 runtime library
-DPDEF137489 BV builds try and write generated .s files in the wrong directory
-
-
-version 2.6.0
-
-New Features:
-DS.1542 SBSv2 generates Open System Trace dictionaries
-DS.1629 Resource autodependencies
-
-
-version 2.5.5
-
-Defect Fixes:
-DPINC137379 Emulator: Cursor is missing on emulator buttons
-DPDEF133640 SBSv2 usrt3_1.lib is missing from epocroot/epoc32/release/armv5/
-
-
-version 2.5.4
-
-Defect Fixes:
-DPDEF136719 Raptor: sbsv2cache.py cache file generation fails with very large log files
-DPDEF136715 On Linux the shipped python 2.5.2 is not found
-DPDEF132996 SBSv2 doesn't generate AUTO.BAT file
-DPDEF136382 SBSv2: explicit dll versioning not supported on arm platforms 	
-DPDEF135843 [Raptor Rollout] Raptor does not support OPTION_REPLACE ARMASM/OPTION ARMASM
-DPDEF136693 makesis fails when multiple instances are run concurrently with the same target
-
-
-version 2.5.3
-
-Defect Fixes:
-DPDEF136162 Raptor: resource dependencies require metadata workarounds
-DPDEF128288 SBSv2 does not fully support build target customization.
-DPDEF132880 BV builds cannot find system static libraries
-DPDEF133835 SBSv2 cannot build for ARMV6 or ARM9E
-
-
-version 2.5.2
-
-Defect Fixes:
-DPDEF135983 cpp-raptor crashes if source code contains builtin macro __FILE__
-DPDEF133808 Raptor does not support OPTION --no_rtti with mixed assembly/C++ projects
-DPDEF135577 SBSv2: rollout - TOOLS/TOOLS2 exes sometimes not executable or writable.
-
-
-version 2.5.1
-
-Defect Fixes:
-DPDEF135258 createvmap.py script can hang in BV builds
-DPDEF135385 warnings in RunModeDebugger in M04816vFuture with ARMV7
-
-
-version 2.5.0
-
-New Features:
-DS.1568 User defined configuration file location(s)
-
-
-version 2.4.3
-
-Defect Fixes:
-DPDEF134322 SBSV2 uses the wrong library when building STDCPP targets 	
-DPDEF132923 SBSv2 freeze don't add Vtable and RTTI information into def file for arm dll
-DPDEF133775 SBSv2: ARMFPU is not passed to compiler
-DPDEF134023 case inconsistency with libOpenVG.lib
-
-Other Changes:
-MINOR_CHANGE updated all copyright notices for SF delivery
-MINOR_CHANGE added vtb91sf variant for SF Timebox 9:1 builds
-MINOR_CHANGE added vtb92sf variant for SF Timebox 9:2 builds
-
-
-version 2.4.2
-
-Defect Fixes:
-DPDEF133820 Raptor Rollout: EXPORTUNFROZEN processing incorrect in ARMV5 builds
-DPDEF132033 Raptor picks up the wrong bld.inf macros when building for RVCT 3.1
-DPDEF133772 SBSv2: console log includes some winscw warnings that should be suppressed
-
-
-version 2.4.1
-
-Defect Fixes:
-DPDEF133639 Raptor Rollout:TEF test server doesn't start under SBSv2 - OK with abld
-DEF133255 [System Build]: Error in compiling NaviEngine Unistore on ARMV7 M04816 vFuture
-DPDEF127973 Freeze fails with SBSv2 under some environments
-
-
-version 2.4.0
-
-New Features:
-DS.1475 Pluggable Log Summariser
-DS.1476 Use FLMs from the source tree  
-
-Defect Fixes:
-DPDEF133417 SBSv2: tmp mounting errors on startup
-
-
-version 2.3.3
-
-Defect Fixes:
-DPDEF130261 sbs does not support explicit option to version keyword
-DPDEF130598 sbs does not provide debug and nodebug variants
-DPDEF131630 Raptor smoke tests break when EPOCROOT=\ on Windows
-DPDEF132898 no TEM nbl2.lib dependencies for armv7
-DPDEF133035 SBSv2 - Tools2 build does not include -m32 option.  Stlport flm also doesn't.
-DPDEF133176 SBSv2 ignores compillation error for "unidentified identifier" for winscw build
-
-
-version 2.3.2
-
-Other Changes:
-MINOR_CHANGE added vtb92 variant for Timebox 9:2 builds
-
-
-version 2.3.1
-
-Defect Fixes:
-DPDEF132374 SBSv2: Directory creation can fail leading to build errors
-DPDEF132070 SBSv2: stlport 5.2 build fails - library generated to wrong directory
-DPDEF128378 SBSv2 help for global targets only shown when a target is given
-DPDEF129634 ALWAYS_BUILD_AS_ARM does not suppress __MARM_THUMB__ with SBSv2
-
-
-version 2.3.0
-
-New Features:
-DS.1424 Support for ARMV5SMP platform  
-
-Defect Fixes:
-DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
-DPDEF130892 SBSv2: Reallyclean fails on TEM files
-DPDEF131619 SBSv2: ABIv1 .lib files aren't generated for -c armv5 -c armv5.smp
-DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
-DPDEF131891 [System Build]: Errors in GT stage in Build M04774 vfuture
-
-
-version 2.2.9
-
-Defect Fixes:
-DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
-DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
-DPDEF130892 SBSv2: Reallyclean fails on TEM files
-
-
-version 2.2.8
-
-Defect Fixes:
-DPDEF130569 .lib files for SSM targets build with different name compared to abld
-DPDEF130571 libxml2 component contains GCCXML build errors
-DPDEF131312 SBSv2 - DEBUGGABLE_UDEBONLY not supported by SBSv2 (Raptor)
-
-
-version 2.2.7
-
-Defect Fixes:
-DPDEF130533 SBSv2 fails to run when installed from SITK
-DPDEF130452 Some rcomp warnings need to be disabled
-DPDEF130286 SBSv2: sbs freezes during CLEAN and REALLYCLEAN operations.
-DPDEF127973 Freeze fails with SBSv2 under some environments
-DPDEF128455 Error during freeze with SBSv2
-DPDEF127149 SBSv2 TEM/extension makefile build doesn't support the .savespace variant
-
-
-version 2.2.6
-
-Defect Fixes:
-DPDEF130008 SBSv2 should recognize these new keywords: SMPSAFE, PAGEDCODE, PAGEDDATA, UN...
-DPDEF127887 Current directory wrong when executing extension makefiles in SBSv2
-DPDEF128915 CCheckEnv ERROR: CBRPatch: Absent file
-DPDEF127675 Raptor does not process stringtables correctly when HEADERONLY is on
-DPDEF127878 give wrong mmp filename for -p option should cause error in SBSv2
-
-Other Changes:
-Uses cygwin instead of msys for improved stability.
-Includes python 2.5.2 instead of using py2exe.
-
-
-version 2.2.5
-
-Defect Fixes:
-DEF127329 OMAP H4 Unistore2 Failure in Raptor 9.5 GT build
-DPDEF128632 SBSv2 : bld.inf ':zip' exports don't maintain timestamps, with an e32 impact
-DPDEF127399 SBSv2 -p <filename>.mmp options also builds .mk files
-
-
-version 2.2.4
-
-Defect Fixes:
-DPDEF129187 SBSv2: ABIv1 .lib files are required (again)
-
-
-version 2.2.3
-
-Defect Fixes:
-DPDEF128916 C Standard Library failed on cia2cpp2o armv5 with 1
-DPDEF128503 sbs 2.2.0 produce malformed xml log on Linux with pvmgmake
-DPDEF127604 SIS registry panics at startup on emulator if SWI is built with SBS
-DPDEF128690 SBSv2 generates error when using emake on REALLYCLEAN target
-
-Other Changes:
-MINOR_CHANGE log summariser updated to deal with errors starting "make.exe: ***"
-
-
-version 2.2.2
-
-Defect Fixes:
-DPDEF127497 SBSv2 does not clean when -k or other switch is used with abld wrapper
-DPDEF127829 'cannot open Meta file' warning with SBSv2
-DPDEF127371 abld -v not working correctly through sbsv2
-DPDEF127555 SBSv2 doesn't do "romfile"
-
-Other Changes:
-MINOR_CHANGE made the default number of jobs 4
-
-
-version 2.2.1
-
-Defect Fixes:
-DPDEF128498 SBS creates paths with extra slashes which can cause problems
-
-Other Changes:
-MINOR_CHANGE Removed temporary ABIv1 .lib generation
-MINOR_CHANGE Added monty test data to the test folder
-
-
-version 2.2.0
-
-New Features:
-DS.1347 SBSv2 Compiler Selection  
-DS.1348 SBSv2 allow mixed slashes
-
-Defect Fixes:
-DPDEF127904	SBSv2 : recent installdefaultcommdb has broken the 9.4 build
-DPDEF128022	SBSv2: Unrecognised Keyword ['romtarget  <some_file>.dll'] warnings
-DPDEF127815	SBSv2: PAGED and EPOCCALLDLLENTRYPOINTS keywords not supported
-DPDEF127890	SBSv2:  TARGETPATH in mmps (also resources, bitmaps) must cope with backslashes
-DPDEF128229 SBSv2: some command invocations can fail, but could be "re-tried"
-
-
-version 2.1.10
-
-Defect Fixes:
-DPDEF126662	Intermittent networking_dhcp compilation failure in Raptor build GT phase
-DPDEF127799	SBSv2: zip and unzip commands not found in some builds
-DPDEF127665	ARMV7 libraries have wrong link order in Raptor
-
-
-version 2.1.9
-
-Defect Fixes:
-DPDEF127498	SBSv2: importlibversioned_abiv1 intermittently fails in ARMV5 builds
-DPDEF125483	CDB breaks due to Attribute values not matching expected values
-DPDEF126335	Intermittent GT errors due to "make" not being found on the PATH
-DPDEF127562	SBSv2 will not unzip the same file into more than one location
-DPDEF127626	SBSv2: sed version on windows is out of date
-
-
-version 2.1.8
-
-Defect Fixes:
-DPDEF125478	CDB breaks caused by file path/name mismatch
-DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
-DPDEF126126	Intermittent "Segmentation fault" error in Raptor GT phase
-DPDEF124836	SBSv2 cannot build just a single .mmp file from a bld.inf file
-DPDEF126675	Performance regression in SBSv2 python frontend caused by regex usage,
-DPDEF126790	groupin10 is not used in artarget_func
-DPDEF125639	TEM variables are reported incorrectly when building TEM for ARMV7
-DPDEF124273	abld help is ugly and hard to read
-DPDEF126614	"Virtual memory exhausted. Stop" error when building with SBSV2
-
-
-version 2.1.7
-
-Defect Fixes:
-DPDEF124290 SBS -e pvmgmake -j 12 on Linux produces malformed xml log files
-DPDEF126241	SBSv2 : SECURE_DATA error when building uiklaf toolkit in TechView
-DPDEF126328	Performance regression and related excessive memory usage in daily Raptor builds
-
-
-version 2.1.6
-
-Defect Fixes:
-DPDEF125740	SBSv2: Builds can hang during the GT stage in Windows builds when using "-j x"
-DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
-
-
-version 2.1.5
-
-Defect Fixes:
-DPDEF125812	There is no user created init.xml configuration file
-
-
-version 2.1.4
-
-Defect Fixes:
-DPDEF124680 Raptor builds hang  at "tools2" compilation phase
-DPDEF125304 Raptor crashes when running abld
-
-
-version 2.1.3
-
-Defect Fixes:
-DPDEF125394 sbs_2.1.0_(RC1) Building complete OS gives armasm errors on Windows
-DPDEF122556 GT0367: CLEANEXPORT target is not cleaning files with a space in them
-DPDEF124691 Raptor should ignore the new SMPSAFE keyword
-DPDEF125031 SBSv2 Stringtable build fails when EXPORTPATH specified
-
-
-version 2.1.2
-
-Change Requests:
-CR1413 Support for different toolchains to be called by SBSv1 and SBSv2
-
-
-version 2.1.1	
-
-Defect Fixes:
-DEF124748 GCCXML errors in Raptor related to missing arm lib files
-DEF124756 Raptor build : Orphan files reported in CBR phase
-DEF124758 Raptor build CBR errors due to missing ".a" files
-DEF124573 CDB breaks in Raptor build due to missing header,dll and lib files
-
-
-version 2.1.0
-
-Change Requests:
-CR1479 Add Armv7 support into SBSv2
-
-Defect Fixes:
-DEF124543 Raptor does not handle the STDCPP keyword correctly
-DEF124515 GT0367: 'bldmake plat' should now show ARMV7
-
-
-version 2.0.14
-
-Defect Fixes:
-DEF124705 CBR errors in raptor builds due to missing rpp files
-DEF120328 SBS v2.0 configuration files cannot be validated
-INC124096 Long list of MMP macros causes crashdump with .s files
-DEF124702 GT0367: Semaphores need altering to correct possible hangs (on Linux)
-
-
-version 2.0.13
-
-Defect Fixes:
-DEF123653 SBS -j 16 on Windows produces malformed xml log files
-
-
-version 2.0.12
-
-Defect Fixes:
-DEF123987 Raptor does not build a lot of .lib files for ARMV5
-DEF123981 SBSv2 doesn't generate DSO when EXPORTUNFROZEN is specified.
-
-
-version 2.0.11
-
-Defect Fixes:
-DEF123988 SBSv2 does not produce rpp files
-DEF123766 SBSv2 log output does not match the specification
-DEF122781 GT0367: 'bldmake bldfiles' output not going to stdout
-DEF122885 GT0367: Need to stop sbs -abld functioning on Linux
-DEF123354 GT0367: Incorrect output if the number of jobs provided is invalid
-
-
-version 2.0.10
-
-Defect Fixes:
-DEF123984 SBSv2 generates more warnings than abld
-DEF124139 GT0367: SBS causes a Python Traceback when a system_definition.xml error occurs
-DEF123601 SBSv2 : Python traceback error is reported when try to build systemtest code
-DEF123916 SBSv2 : "tools" build warns about overrides when "OPTION MSVC /w" in .mmp files
-
-
-version 2.0.9
-
-Defect Fixes:
-PDEF124028 .GXP files not getting created when built for GCCXML target
-DEF123653 SBS -j 16 on Windows produces malformed xml log files
-DEF123586 dso file is not remade when def file changes
-DEF122541 SBSv2 -what should report resource files
-DEF123265 Incorrect file access permissions for sbs v2.0.7 in Linux dist
-DEF123317 SBSv2 -what got error for whatexports if too much exports
-DEF123439 SBSv2 : Exports not performed in total before .mmp processing in sysdef builds
-DEF123552 STLport doesn't build with Raptor on Linux
-DEF123260 GT0367: Circular references in config files not handled
-
-
-version 2.0.8
-
-Defect Fixes:
-DEF122930 SBSv2:Target type exexp giving errors while building for winscw
-DEF123028 Raptor generating double slashes in command files
-DEF123048 SBSv2: build with -k (keep-going) stops when export makefile has a failure.
-DEF123069 False 'missing mmp file' errors reported by SBSv2
-DEF122472 SBSv2 doesn't report content of unpacked zip files
-DEF122534 SBSv2 -what should not report .sym files
-DEF123181 SBSv2: Failure of one export in python aborts remaining exports for bld.inf
-DEF123289 SBSv2 : Netcards doesn't build for "tools" in an SBSv2 build
-DEF123418 SBSV2: stlport build can fail with "no rule to make target"
-DEF123084 SBSv2: exits with an exception if -c option specifies non-existent configuration
-INC122876 Electric Accelerator build fails with Raptor
-
-
-version 2.0.7
-
-Defect Fixes:
-DEF122784 Large MMP files and GNUMAKEFILE causes shell to crash
-DEF122760 Problems with bmconv command files preventing bitmap generation?
-DEF122803 SBSv2 - Freeze doesnt work properly for OE target types
-DEF122833 SBSV2 Performance is poor with -j16 using the GNU Make engine
-DEF122535 GT0367: Invalid system_definition.xml causes SBSv2 layering crash
-DEF122570 SBSv2 : certain "-m" values cause a crash at makefile generation
-DEF122604 Errors in GT only build using sbsv2 on Windows
-DEF122796 Wrong default value for PVMGMAKE in make.xml
-DEF122783 SBSv2 WINSCW builds can produce incorrectly linked executables under emake
-DEF122785 log summariser crashes if errors contain % characters
-DEF122870 SBSv2 assembling .s files fails.
-DEF120473 Enable Windows and Linux Tools to Cohabit
-DEF121826 Pre-include HRH file directory from variant.cfg fails for template extension mak
-DEF121907 Raptor crashes when exporting zip file that already exists
-DEF122523 SBSv2 Logging output affected by bash version on Linux
-DEF122788 SBSv2: We don't ensure correct version of Make for TEMs and for use in FLMs
-
-
-version 2.0.6
-
-The first release of SBSv2 in the SITK.
-
+
+Release Notes for Symbian Build System v2
+
+version 2.10.2
+
+Defect Fixes:
+DPDEF142958 regression - ARMV6 and __ARMV6__ are not defined for armv6_urel builds
+DPDEF142730 Raptor crashes with improper VERSION syntax
+DPDEF142928 RVCT 4.0: Linker error when the MMP files modifies the --cpu option
+
+
+version 2.10.1
+
+Defect Fixes:
+DPDEF142666 Cannot remove frozen exports from EABI DEF file in SBSv2
+DPDEF142745 OPTION_REPLACE problems with RVCT 4.0
+DPDEF140622 feature variant configuration file with non exist file set to 'FEATURELISTFILES'
+DPDEF141195 Raptor doesn't handle spaces in tool paths
+DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
+DPDEF142455 Disable warning L6780W for certain components
+DPDEF142447 GCC-E: Raptor compiles CIA files as Thumb
+DPDEF142448 GCC-E: Raptor tries to build ABIV1 import libraries
+DPDEF142451 GCC-E: Raptor treats C files as C++ files.
+
+
+version 2.10.0
+
+New Features:
+Support for GCCE compiler
+More efficient Feature Variation support
+
+
+version 2.9.3
+
+Defect Fixes:
+DPDEF142166 Raptor sometimes invokes checklib.exe with incorrect parameters
+DPDEF141354 EXPORTUNFROZEN fails in target builds if .savespace is applied
+DPDEF141533 Inconsistent log output
+DPDEF141604 file winscw.auto.bat is released two times
+DPDEF141787 Raptor treats EFREEZE info message as warnings
+	
+Other Changes:
+talon can read commands from a temporary file as well as with -c
+
+
+version 2.9.2
+
+Defect Fixes:
+DPDEF141531 Incorrect RVCT variables passed to TEM
+DPDEF141837 Some problems with dependency (.d) files
+DEF140258 Aborting SBSv2 mid-build often leads to corrupt .d files which prevent rebuilds
+DPDEF142049 Garbage in the Raptor log file
+DPDEF141954 Raptor: "tools" config static libraries can have incorrect compilation macros
+DPDEF141974 Raptor: "tools" builds can fail when done in combination with "tools2" builds
+
+Other Changes:
+Static libraries cannot be feature variant
+Option --no-depend-include for very big builds
+
+
+version 2.9.1
+
+Defect Fixes:
+DPDEF141503 RMTPClient::StartTransport Panic when using emulated test tranport plugin
+DPDEF141688 ARMV6 builds with SBSv2 have problems with missing DEF files
+	
+
+version 2.9.0
+
+New Features:
+Talon shell to reduce memory usage and improve stability.
+Support for RVCT 4.0 advanced features.
+Optionally use SBS_CYGWIN, SBS_MINGW and SBS_PYTHON to locate tools.
+Makefile to build host tools on Linux.
+Single-file compilation for IDE integration.
+Splitlog and CheckSource filters.
+
+Defect Fixes:
+DPDEF141523 Raptor links kernel-side components to scppnwdl.dso
+DPDEF141418 Raptor turns echo on
+DPDEF141495 Raptor doesn't deal correctly with SOURECEPATH beginning with '/'
+DPDEF141388 raptor inserts epoc32\include at start of systeminclude path	
+
+
+version 2.8.6
+
+DPDEF135505 Some TEMs have race conditions for simultaneous urel and udeb. cp fails.
+DPDEF141498 If make crashes, Raptor exits with 0 errors
+DPDEF141071 Raptor: GCCXML build does not support the VAR2 TARGETTYPE
+DPDEF140816 STDCPP keyword in mmp file not interpreted by gccxml tool chain
+DPDEF137727 [Raptor Rollout] Raptor fails to build certain .mbg and .rsg files
+DPDEF137494 SBSv2: preprocessor warnings and errors might cause invalid XML in log
+DPDEF140731 Missing dependency files when building from clean
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+DPDEF141129 raptor generates unknown origin file
+
+Other Changes:
+Fix to support trace compiler switch
+Better message for duplicate objects, states which file overrides which.
+Refactor to avoid "defects" of missing OS variants.
+
+
+version 2.8.5
+
+Defect Fixes:
+DPDEF141102 SBS doesn't set the paging attribute of excutables correctly
+DPDEF140731 Missing dependency files when building from clean
+DPDEF135620 Workaround for broken static libraries
+
+
+version 2.8.4
+
+Defect Fixes:
+DPDEF140839 RComp crashes if it's built with sbs
+DPDEF140929 OPTION GCCE in MMP files generates a build warning
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+
+
+version 2.8.3
+
+Defect Fixes:
+DPDEF139904 Raptor: .def file FREEZE attempted for ARMV5 when it shouldn't be
+DPDEF140589 Raptor: .def file FREEZE attempted for WINSCW when it shouldn't be
+DPDEF140456 Raptor build error with -c tools_rel
+DPDEF139759 Raptor warning regarding EXPORTSUNFROZEN is ambiguous
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+INC140156 SBSv2 crashes when build QtWebkit for ARMV5
+
+Other Changes:
+Add <info> to show which variant.hrh file is used.
+Replaced the corrupted awk.exe in cygwin distro.
+Fix previous trace compiler auto run mechanism.
+ROMFILE improvements.
+
+
+version 2.8.2
+
+Defect Fixes:
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+
+Other Changes:
+Tolerate XML schema 1_0 files where possible.
+Treat system definition schema 1.[3-9] files the same as schema 1.4 files.
+Remove checksource and its python site-packages.
+
+
+version 2.8.1
+
+Defect Fixes:
+DPDEF140165 SBS error when creating info.xml on component base_omaph2
+DPDEF132996 Location of generated auto.bat files is inconsistent
+
+Other Changes:
+Feature variant "ln -f" fails intermittently in parallel builds.
+Traceback when "group" elements are redefined in XML.
+Trace compiler should run automatically if a trace path exists.
+Need a workaround for Carbide Missing SDK problem.
+
+
+version 2.8.0
+
+New Features:
+XML schema 2.0 with new alias and group elements.
+
+Removed:
+XML config element (use var instead).
+XML .first and .last mechanism (use alias or group instead).
+
+Defect Fixes:
+DPDEF140082 SBS cause env to dirty state
+DPDEF138565 SBSV2 doesn't define the correct macros for ARMV6
+DPDEF139950 SBSv2 Filter Handling not Robust enough - bad filters stop build.
+DEF139686 [TCL Build] coredumpserver compile warnings in DP00458
+
+
+version 2.7.2
+
+Defect Fixes:
+DPDEF139420 Raptor config does not correctly handle mifconv causing resource build errors
+DPDEF138679 Raptor does not create a DEFFILE when building for winscw_urel
+DPDEF139692 SBSV2: 'virtual memory exhausted' when building multiple variants
+DPDEF136321 SBSv2: Zip exports not cleaned
+INC139622 OPTION_REPLACE does not work properly in SBSv2
+
+Other Changes:
+Added utility.prebuilt FLM.
+
+
+version 2.7.1
+
+Defect Fixes:
+DPDEF138366 [T15379] Raptor raise some warnings when build Coredumpserver
+DPDEF139405 SBSV2: Trace compilation fails with large numbers of files.
+DPDEF139572 SBSV2: Changes to '--cpu' option syntax breaks existing MMP files.
+DPDEF139456 Toolcheck file is not created if EPOCROOT is \
+DPDEF133766 Poor SBSv2 reallyclean performance
+DPDEF135780 SBSV2: REALLYCLEAN is not cleaning all files
+
+
+version 2.7.0
+
+New Features:
+DS.1744 Recognize LINKEROPTION in MMP file
+DS.1744 Compiled objects on local filesystem (SBS_BUILD_DIR)
+
+Partial Deliveries:
+DS.1744 CheckSource in Raptor
+
+Defect Fixes:
+DPDEF138293 Carbide: Raptor doesn't resolve variant.cfg entries starting with "\" correctly
+
+
+version 2.6.5
+
+Defect Fixes:
+DPDEF138930 Raptor needs to change to match new trace compiler interface
+
+
+version 2.6.4
+
+Defect Fixes:
+DPDEF138527 [TCL Build] Miss tracecompiler.mk and exclude group for Raptor export
+DPDEF138484 Raptor uses wrong guard causing trace compiler ignores some projects.
+DPDEF138720 BV product folders have missing map files
+DPDEF138721 Raptor uses wrong lib when mmp keyword FIRSTLIB presents.
+DPDEF138053 SBSv2: tools platform: tools not installed by the time they need to be used.
+DPDEF138164 Carbide: Raptor crashes on unrecognised buildinfo.txt content
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+DPDEF138329 Raptor generates marker file for trace compiler when it's not done
+DPDEF138352 SBSv2: rollout - unsplit EC makefiles not generating correct deps 4 missing .mbg
+DPDEF138480 SBSv2: rollout. Created files sometimes have insufficient permissions on Windows
+DPDEF137511 SBSv2 doesn't behave correctly with the default paging policy
+
+
+version 2.6.3
+
+Defect Fixes:
+DPDEF133508 Number of errors is counted wrong
+DPDEF138098 UID issue in Trace Compiler for Raptor 
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+
+
+version 2.6.2
+
+Defect Fixes:
+DPDEF135330 Raptor Rollout: bangalore messaging winscw udeb test code
+DPDEF137726 Missing mscvr_readme.txt from the SBSv2 drop
+DPDEF137739 SBSv2: rollout - .cia object files can conflict with .cpp object files 
+
+
+version 2.6.1
+
+Defect Fixes:
+DPDEF137239 raptor does not include the msvcr71 runtime library
+DPDEF137489 BV builds try and write generated .s files in the wrong directory
+
+
+version 2.6.0
+
+New Features:
+DS.1542 SBSv2 generates Open System Trace dictionaries
+DS.1629 Resource autodependencies
+
+
+version 2.5.5
+
+Defect Fixes:
+DPINC137379 Emulator: Cursor is missing on emulator buttons
+DPDEF133640 SBSv2 usrt3_1.lib is missing from epocroot/epoc32/release/armv5/
+
+
+version 2.5.4
+
+Defect Fixes:
+DPDEF136719 Raptor: sbsv2cache.py cache file generation fails with very large log files
+DPDEF136715 On Linux the shipped python 2.5.2 is not found
+DPDEF132996 SBSv2 doesn't generate AUTO.BAT file
+DPDEF136382 SBSv2: explicit dll versioning not supported on arm platforms 	
+DPDEF135843 [Raptor Rollout] Raptor does not support OPTION_REPLACE ARMASM/OPTION ARMASM
+DPDEF136693 makesis fails when multiple instances are run concurrently with the same target
+
+
+version 2.5.3
+
+Defect Fixes:
+DPDEF136162 Raptor: resource dependencies require metadata workarounds
+DPDEF128288 SBSv2 does not fully support build target customization.
+DPDEF132880 BV builds cannot find system static libraries
+DPDEF133835 SBSv2 cannot build for ARMV6 or ARM9E
+
+
+version 2.5.2
+
+Defect Fixes:
+DPDEF135983 cpp-raptor crashes if source code contains builtin macro __FILE__
+DPDEF133808 Raptor does not support OPTION --no_rtti with mixed assembly/C++ projects
+DPDEF135577 SBSv2: rollout - TOOLS/TOOLS2 exes sometimes not executable or writable.
+
+
+version 2.5.1
+
+Defect Fixes:
+DPDEF135258 createvmap.py script can hang in BV builds
+DPDEF135385 warnings in RunModeDebugger in M04816vFuture with ARMV7
+
+
+version 2.5.0
+
+New Features:
+DS.1568 User defined configuration file location(s)
+
+
+version 2.4.3
+
+Defect Fixes:
+DPDEF134322 SBSV2 uses the wrong library when building STDCPP targets 	
+DPDEF132923 SBSv2 freeze don't add Vtable and RTTI information into def file for arm dll
+DPDEF133775 SBSv2: ARMFPU is not passed to compiler
+DPDEF134023 case inconsistency with libOpenVG.lib
+
+Other Changes:
+MINOR_CHANGE updated all copyright notices for SF delivery
+MINOR_CHANGE added vtb91sf variant for SF Timebox 9:1 builds
+MINOR_CHANGE added vtb92sf variant for SF Timebox 9:2 builds
+
+
+version 2.4.2
+
+Defect Fixes:
+DPDEF133820 Raptor Rollout: EXPORTUNFROZEN processing incorrect in ARMV5 builds
+DPDEF132033 Raptor picks up the wrong bld.inf macros when building for RVCT 3.1
+DPDEF133772 SBSv2: console log includes some winscw warnings that should be suppressed
+
+
+version 2.4.1
+
+Defect Fixes:
+DPDEF133639 Raptor Rollout:TEF test server doesn't start under SBSv2 - OK with abld
+DEF133255 [System Build]: Error in compiling NaviEngine Unistore on ARMV7 M04816 vFuture
+DPDEF127973 Freeze fails with SBSv2 under some environments
+
+
+version 2.4.0
+
+New Features:
+DS.1475 Pluggable Log Summariser
+DS.1476 Use FLMs from the source tree  
+
+Defect Fixes:
+DPDEF133417 SBSv2: tmp mounting errors on startup
+
+
+version 2.3.3
+
+Defect Fixes:
+DPDEF130261 sbs does not support explicit option to version keyword
+DPDEF130598 sbs does not provide debug and nodebug variants
+DPDEF131630 Raptor smoke tests break when EPOCROOT=\ on Windows
+DPDEF132898 no TEM nbl2.lib dependencies for armv7
+DPDEF133035 SBSv2 - Tools2 build does not include -m32 option.  Stlport flm also doesn't.
+DPDEF133176 SBSv2 ignores compillation error for "unidentified identifier" for winscw build
+
+
+version 2.3.2
+
+Other Changes:
+MINOR_CHANGE added vtb92 variant for Timebox 9:2 builds
+
+
+version 2.3.1
+
+Defect Fixes:
+DPDEF132374 SBSv2: Directory creation can fail leading to build errors
+DPDEF132070 SBSv2: stlport 5.2 build fails - library generated to wrong directory
+DPDEF128378 SBSv2 help for global targets only shown when a target is given
+DPDEF129634 ALWAYS_BUILD_AS_ARM does not suppress __MARM_THUMB__ with SBSv2
+
+
+version 2.3.0
+
+New Features:
+DS.1424 Support for ARMV5SMP platform  
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+DPDEF131619 SBSv2: ABIv1 .lib files aren't generated for -c armv5 -c armv5.smp
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF131891 [System Build]: Errors in GT stage in Build M04774 vfuture
+
+
+version 2.2.9
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+
+
+version 2.2.8
+
+Defect Fixes:
+DPDEF130569 .lib files for SSM targets build with different name compared to abld
+DPDEF130571 libxml2 component contains GCCXML build errors
+DPDEF131312 SBSv2 - DEBUGGABLE_UDEBONLY not supported by SBSv2 (Raptor)
+
+
+version 2.2.7
+
+Defect Fixes:
+DPDEF130533 SBSv2 fails to run when installed from SITK
+DPDEF130452 Some rcomp warnings need to be disabled
+DPDEF130286 SBSv2: sbs freezes during CLEAN and REALLYCLEAN operations.
+DPDEF127973 Freeze fails with SBSv2 under some environments
+DPDEF128455 Error during freeze with SBSv2
+DPDEF127149 SBSv2 TEM/extension makefile build doesn't support the .savespace variant
+
+
+version 2.2.6
+
+Defect Fixes:
+DPDEF130008 SBSv2 should recognize these new keywords: SMPSAFE, PAGEDCODE, PAGEDDATA, UN...
+DPDEF127887 Current directory wrong when executing extension makefiles in SBSv2
+DPDEF128915 CCheckEnv ERROR: CBRPatch: Absent file
+DPDEF127675 Raptor does not process stringtables correctly when HEADERONLY is on
+DPDEF127878 give wrong mmp filename for -p option should cause error in SBSv2
+
+Other Changes:
+Uses cygwin instead of msys for improved stability.
+Includes python 2.5.2 instead of using py2exe.
+
+
+version 2.2.5
+
+Defect Fixes:
+DEF127329 OMAP H4 Unistore2 Failure in Raptor 9.5 GT build
+DPDEF128632 SBSv2 : bld.inf ':zip' exports don't maintain timestamps, with an e32 impact
+DPDEF127399 SBSv2 -p <filename>.mmp options also builds .mk files
+
+
+version 2.2.4
+
+Defect Fixes:
+DPDEF129187 SBSv2: ABIv1 .lib files are required (again)
+
+
+version 2.2.3
+
+Defect Fixes:
+DPDEF128916 C Standard Library failed on cia2cpp2o armv5 with 1
+DPDEF128503 sbs 2.2.0 produce malformed xml log on Linux with pvmgmake
+DPDEF127604 SIS registry panics at startup on emulator if SWI is built with SBS
+DPDEF128690 SBSv2 generates error when using emake on REALLYCLEAN target
+
+Other Changes:
+MINOR_CHANGE log summariser updated to deal with errors starting "make.exe: ***"
+
+
+version 2.2.2
+
+Defect Fixes:
+DPDEF127497 SBSv2 does not clean when -k or other switch is used with abld wrapper
+DPDEF127829 'cannot open Meta file' warning with SBSv2
+DPDEF127371 abld -v not working correctly through sbsv2
+DPDEF127555 SBSv2 doesn't do "romfile"
+
+Other Changes:
+MINOR_CHANGE made the default number of jobs 4
+
+
+version 2.2.1
+
+Defect Fixes:
+DPDEF128498 SBS creates paths with extra slashes which can cause problems
+
+Other Changes:
+MINOR_CHANGE Removed temporary ABIv1 .lib generation
+MINOR_CHANGE Added monty test data to the test folder
+
+
+version 2.2.0
+
+New Features:
+DS.1347 SBSv2 Compiler Selection  
+DS.1348 SBSv2 allow mixed slashes
+
+Defect Fixes:
+DPDEF127904	SBSv2 : recent installdefaultcommdb has broken the 9.4 build
+DPDEF128022	SBSv2: Unrecognised Keyword ['romtarget  <some_file>.dll'] warnings
+DPDEF127815	SBSv2: PAGED and EPOCCALLDLLENTRYPOINTS keywords not supported
+DPDEF127890	SBSv2:  TARGETPATH in mmps (also resources, bitmaps) must cope with backslashes
+DPDEF128229 SBSv2: some command invocations can fail, but could be "re-tried"
+
+
+version 2.1.10
+
+Defect Fixes:
+DPDEF126662	Intermittent networking_dhcp compilation failure in Raptor build GT phase
+DPDEF127799	SBSv2: zip and unzip commands not found in some builds
+DPDEF127665	ARMV7 libraries have wrong link order in Raptor
+
+
+version 2.1.9
+
+Defect Fixes:
+DPDEF127498	SBSv2: importlibversioned_abiv1 intermittently fails in ARMV5 builds
+DPDEF125483	CDB breaks due to Attribute values not matching expected values
+DPDEF126335	Intermittent GT errors due to "make" not being found on the PATH
+DPDEF127562	SBSv2 will not unzip the same file into more than one location
+DPDEF127626	SBSv2: sed version on windows is out of date
+
+
+version 2.1.8
+
+Defect Fixes:
+DPDEF125478	CDB breaks caused by file path/name mismatch
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+DPDEF126126	Intermittent "Segmentation fault" error in Raptor GT phase
+DPDEF124836	SBSv2 cannot build just a single .mmp file from a bld.inf file
+DPDEF126675	Performance regression in SBSv2 python frontend caused by regex usage,
+DPDEF126790	groupin10 is not used in artarget_func
+DPDEF125639	TEM variables are reported incorrectly when building TEM for ARMV7
+DPDEF124273	abld help is ugly and hard to read
+DPDEF126614	"Virtual memory exhausted. Stop" error when building with SBSV2
+
+
+version 2.1.7
+
+Defect Fixes:
+DPDEF124290 SBS -e pvmgmake -j 12 on Linux produces malformed xml log files
+DPDEF126241	SBSv2 : SECURE_DATA error when building uiklaf toolkit in TechView
+DPDEF126328	Performance regression and related excessive memory usage in daily Raptor builds
+
+
+version 2.1.6
+
+Defect Fixes:
+DPDEF125740	SBSv2: Builds can hang during the GT stage in Windows builds when using "-j x"
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+
+
+version 2.1.5
+
+Defect Fixes:
+DPDEF125812	There is no user created init.xml configuration file
+
+
+version 2.1.4
+
+Defect Fixes:
+DPDEF124680 Raptor builds hang  at "tools2" compilation phase
+DPDEF125304 Raptor crashes when running abld
+
+
+version 2.1.3
+
+Defect Fixes:
+DPDEF125394 sbs_2.1.0_(RC1) Building complete OS gives armasm errors on Windows
+DPDEF122556 GT0367: CLEANEXPORT target is not cleaning files with a space in them
+DPDEF124691 Raptor should ignore the new SMPSAFE keyword
+DPDEF125031 SBSv2 Stringtable build fails when EXPORTPATH specified
+
+
+version 2.1.2
+
+Change Requests:
+CR1413 Support for different toolchains to be called by SBSv1 and SBSv2
+
+
+version 2.1.1	
+
+Defect Fixes:
+DEF124748 GCCXML errors in Raptor related to missing arm lib files
+DEF124756 Raptor build : Orphan files reported in CBR phase
+DEF124758 Raptor build CBR errors due to missing ".a" files
+DEF124573 CDB breaks in Raptor build due to missing header,dll and lib files
+
+
+version 2.1.0
+
+Change Requests:
+CR1479 Add Armv7 support into SBSv2
+
+Defect Fixes:
+DEF124543 Raptor does not handle the STDCPP keyword correctly
+DEF124515 GT0367: 'bldmake plat' should now show ARMV7
+
+
+version 2.0.14
+
+Defect Fixes:
+DEF124705 CBR errors in raptor builds due to missing rpp files
+DEF120328 SBS v2.0 configuration files cannot be validated
+INC124096 Long list of MMP macros causes crashdump with .s files
+DEF124702 GT0367: Semaphores need altering to correct possible hangs (on Linux)
+
+
+version 2.0.13
+
+Defect Fixes:
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+
+
+version 2.0.12
+
+Defect Fixes:
+DEF123987 Raptor does not build a lot of .lib files for ARMV5
+DEF123981 SBSv2 doesn't generate DSO when EXPORTUNFROZEN is specified.
+
+
+version 2.0.11
+
+Defect Fixes:
+DEF123988 SBSv2 does not produce rpp files
+DEF123766 SBSv2 log output does not match the specification
+DEF122781 GT0367: 'bldmake bldfiles' output not going to stdout
+DEF122885 GT0367: Need to stop sbs -abld functioning on Linux
+DEF123354 GT0367: Incorrect output if the number of jobs provided is invalid
+
+
+version 2.0.10
+
+Defect Fixes:
+DEF123984 SBSv2 generates more warnings than abld
+DEF124139 GT0367: SBS causes a Python Traceback when a system_definition.xml error occurs
+DEF123601 SBSv2 : Python traceback error is reported when try to build systemtest code
+DEF123916 SBSv2 : "tools" build warns about overrides when "OPTION MSVC /w" in .mmp files
+
+
+version 2.0.9
+
+Defect Fixes:
+PDEF124028 .GXP files not getting created when built for GCCXML target
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+DEF123586 dso file is not remade when def file changes
+DEF122541 SBSv2 -what should report resource files
+DEF123265 Incorrect file access permissions for sbs v2.0.7 in Linux dist
+DEF123317 SBSv2 -what got error for whatexports if too much exports
+DEF123439 SBSv2 : Exports not performed in total before .mmp processing in sysdef builds
+DEF123552 STLport doesn't build with Raptor on Linux
+DEF123260 GT0367: Circular references in config files not handled
+
+
+version 2.0.8
+
+Defect Fixes:
+DEF122930 SBSv2:Target type exexp giving errors while building for winscw
+DEF123028 Raptor generating double slashes in command files
+DEF123048 SBSv2: build with -k (keep-going) stops when export makefile has a failure.
+DEF123069 False 'missing mmp file' errors reported by SBSv2
+DEF122472 SBSv2 doesn't report content of unpacked zip files
+DEF122534 SBSv2 -what should not report .sym files
+DEF123181 SBSv2: Failure of one export in python aborts remaining exports for bld.inf
+DEF123289 SBSv2 : Netcards doesn't build for "tools" in an SBSv2 build
+DEF123418 SBSV2: stlport build can fail with "no rule to make target"
+DEF123084 SBSv2: exits with an exception if -c option specifies non-existent configuration
+INC122876 Electric Accelerator build fails with Raptor
+
+
+version 2.0.7
+
+Defect Fixes:
+DEF122784 Large MMP files and GNUMAKEFILE causes shell to crash
+DEF122760 Problems with bmconv command files preventing bitmap generation?
+DEF122803 SBSv2 - Freeze doesnt work properly for OE target types
+DEF122833 SBSV2 Performance is poor with -j16 using the GNU Make engine
+DEF122535 GT0367: Invalid system_definition.xml causes SBSv2 layering crash
+DEF122570 SBSv2 : certain "-m" values cause a crash at makefile generation
+DEF122604 Errors in GT only build using sbsv2 on Windows
+DEF122796 Wrong default value for PVMGMAKE in make.xml
+DEF122783 SBSv2 WINSCW builds can produce incorrectly linked executables under emake
+DEF122785 log summariser crashes if errors contain % characters
+DEF122870 SBSv2 assembling .s files fails.
+DEF120473 Enable Windows and Linux Tools to Cohabit
+DEF121826 Pre-include HRH file directory from variant.cfg fails for template extension mak
+DEF121907 Raptor crashes when exporting zip file that already exists
+DEF122523 SBSv2 Logging output affected by bash version on Linux
+DEF122788 SBSv2: We don't ensure correct version of Make for TEMs and for use in FLMs
+
+
+version 2.0.6
+
+The first release of SBSv2 in the SITK.
+
--- a/sbsv2/raptor/bin/buildstats.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/buildstats.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,120 +1,120 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Generate some useful statistics from a Raptor build log
-#
-
-import sys
-from  optparse import OptionParser
-from raptorlog import *
-import os
-from stat import *
-import time
-
-def genstats(file, logitems, logdate):
-	bytecount=0.0
-	lastbytecount=0.0
-	print """<?xml version="1.0" encoding="UTF-8"?>
-       <stats xmlns="http://symbian.com/2007/xml/build/raptor/stats"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://symbian.com/2007/xml/build/raptor/stats http://symbian.com/2007/xml/build/raptor/stats1_0.xsd">
-	"""
-
-	if S_ISREG(os.stat(file.name)[ST_MODE]) > 0:
-	 	totalbytes = os.stat(file.name)[ST_SIZE]+0.0
-	else:
-		totalbytes=0.0
-
-	print "<build log='%s' size='%9.0f' date='%s'>" % (file.name,totalbytes,logdate)
-	for l in file.xreadlines():
-		if totalbytes > 0.0:
-			bytecount += len(l)
-			if (bytecount-lastbytecount)/totalbytes > 0.05:
-				lastbytecount = bytecount
-				sys.stderr.write("%3.0f %%" % ((bytecount/totalbytes)*100.0))
-
-		for i in logitems:
-			i.match(l)
-
-	for i in logitems:
-		print i.xml()+"\n"
-		
-	print "</build>"
-	print "</stats>"
-
-
-
-## Command Line Interface ####################################################
-
-parser = OptionParser(prog = "buildstats",
-	usage = "%prog [-h | options] [<file>]")
-
-parser.add_option("-k", "--keep", default = False,
-	 action="store_true", dest="keep", help="Retain matched log lines and display them.") 
-parser.add_option("-d", "--logdate", default = None,
-	 action="store", dest="logdate", help="Specify the date on which the log was started (yyyymmdd).") 
-
-(options, args) = parser.parse_args()
-
-logname="stdin"
-if len(args) > 0:
-	logname=args[0]
-	file = open(logname,"r")
-	if options.logdate != None:
-		logdate = options.logdate
-	else:
-		logdate = time.strftime("%Y%m%d",time.localtime(os.stat(file.name)[ST_CTIME]))
-else:
-	file = sys.stdin
-	logdate = time.strftime("%Y%m%d")
-
-
-if options.keep != False:
-	LogItem.keep = True
-
-
-
-logitems = [ 
-	LogItem("compile attempt", "<compile.*>"), 
-	LogItem("compile success", "<buildstat [^<]*name='compile'[^<]*/>"), 
-	LogItem("compile fail", "<buildstat [^<]*name='failed_compile'[^<]*/>"), 
-	LogItem('link attempt','<link>'), 
-	LogItem("link success", "<buildstat [^<]*name='link'[^<]*/>"), 
-	LogItem("link fail", "<buildstat [^<]*name=.failed_link.[^<]*/>"), 
-	LogItem('postlink attempt','<postlink.*>'), 
-	LogItem("postlink success", "<buildstat [^<]*name=.postlink[^<]*/>"), 
-	LogItem("postlink fail", "<buildstat [^<]*name=.failed_postlink.[^<]*/>"), 
-	LogItem('flmcalls', '<flm'), 
-	LogItem('e32 flmcalls', "<flm +name=[\"']e32abiv2[\"'].* type=[\"'](?!implib)"),
-	#LogItem('mmp_processed', "<parsing[ \t]*file='.*\.[Mm][Mm][Pp]'.*>"),
-	#LogItem('bldinf_processed', "Processing bld.inf:"),
-	LogItem('armar','armar'),
-	LogItem("failed stringtable export", "<buildstat [^<]*name=.failed_exportstringtableheader.[^<]*/>"), 
-	LogItem("failed template extension makefile", "<buildstat [^<]*name=.failed_tem.[^<]*/>"), 
-	LogItem("make error",'^make: \*\*\*.*$', True),
-	LogItem("make no rule",'^make: \*\*\*.* No rule to make target.*$', True),
-	LogItem("raptor error",'^ERROR: raptor:*$', True),
-	LogItem("armcc/armcpp error",'^.*line [0-9]+:.*Error: *#[0-9]+.*$', True),
-	LogItem("gcc/gcc-cpp error",'^[^ \t]+:[0-9]+:[0-9]+ .+:.+$', True),
-	LogItem("armlink error",'^Error: *L[0-9A-F]+:.*$', True),
-	LogItem("Resource File error",'[\t ]*Error:.*cannot open source input file.*\.[Rr][Ss][Gg]\".*$', True),
-	LogItem("String Table error",'[\t ]*Error:.*cannot open source input file.*[Ss]tr[^ ]*\.h\".*$', True),
-	LogItem("Armcc license fail",'^.*Error: C3397E: Cannot obtain license for Compiler.*'),
-	LogItem("Armlink license fail",'^.*Error: ......: Cannot obtain license for .*ink.*')
-	] 
-
-genstats(file,logitems,logdate)
-
-if file != sys.stdin:
-	file.close()
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Generate some useful statistics from a Raptor build log
+#
+
+import sys
+from  optparse import OptionParser
+from raptorlog import *
+import os
+from stat import *
+import time
+
+def genstats(file, logitems, logdate):
+	bytecount=0.0
+	lastbytecount=0.0
+	print """<?xml version="1.0" encoding="UTF-8"?>
+       <stats xmlns="http://symbian.com/2007/xml/build/raptor/stats"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/2007/xml/build/raptor/stats http://symbian.com/2007/xml/build/raptor/stats1_0.xsd">
+	"""
+
+	if S_ISREG(os.stat(file.name)[ST_MODE]) > 0:
+	 	totalbytes = os.stat(file.name)[ST_SIZE]+0.0
+	else:
+		totalbytes=0.0
+
+	print "<build log='%s' size='%9.0f' date='%s'>" % (file.name,totalbytes,logdate)
+	for l in file.xreadlines():
+		if totalbytes > 0.0:
+			bytecount += len(l)
+			if (bytecount-lastbytecount)/totalbytes > 0.05:
+				lastbytecount = bytecount
+				sys.stderr.write("%3.0f %%" % ((bytecount/totalbytes)*100.0))
+
+		for i in logitems:
+			i.match(l)
+
+	for i in logitems:
+		print i.xml()+"\n"
+		
+	print "</build>"
+	print "</stats>"
+
+
+
+## Command Line Interface ####################################################
+
+parser = OptionParser(prog = "buildstats",
+	usage = "%prog [-h | options] [<file>]")
+
+parser.add_option("-k", "--keep", default = False,
+	 action="store_true", dest="keep", help="Retain matched log lines and display them.") 
+parser.add_option("-d", "--logdate", default = None,
+	 action="store", dest="logdate", help="Specify the date on which the log was started (yyyymmdd).") 
+
+(options, args) = parser.parse_args()
+
+logname="stdin"
+if len(args) > 0:
+	logname=args[0]
+	file = open(logname,"r")
+	if options.logdate != None:
+		logdate = options.logdate
+	else:
+		logdate = time.strftime("%Y%m%d",time.localtime(os.stat(file.name)[ST_CTIME]))
+else:
+	file = sys.stdin
+	logdate = time.strftime("%Y%m%d")
+
+
+if options.keep != False:
+	LogItem.keep = True
+
+
+
+logitems = [ 
+	LogItem("compile attempt", "<compile.*>"), 
+	LogItem("compile success", "<buildstat [^<]*name='compile'[^<]*/>"), 
+	LogItem("compile fail", "<buildstat [^<]*name='failed_compile'[^<]*/>"), 
+	LogItem('link attempt','<link>'), 
+	LogItem("link success", "<buildstat [^<]*name='link'[^<]*/>"), 
+	LogItem("link fail", "<buildstat [^<]*name=.failed_link.[^<]*/>"), 
+	LogItem('postlink attempt','<postlink.*>'), 
+	LogItem("postlink success", "<buildstat [^<]*name=.postlink[^<]*/>"), 
+	LogItem("postlink fail", "<buildstat [^<]*name=.failed_postlink.[^<]*/>"), 
+	LogItem('flmcalls', '<flm'), 
+	LogItem('e32 flmcalls', "<flm +name=[\"']e32abiv2[\"'].* type=[\"'](?!implib)"),
+	#LogItem('mmp_processed', "<parsing[ \t]*file='.*\.[Mm][Mm][Pp]'.*>"),
+	#LogItem('bldinf_processed', "Processing bld.inf:"),
+	LogItem('armar','armar'),
+	LogItem("failed stringtable export", "<buildstat [^<]*name=.failed_exportstringtableheader.[^<]*/>"), 
+	LogItem("failed template extension makefile", "<buildstat [^<]*name=.failed_tem.[^<]*/>"), 
+	LogItem("make error",'^make: \*\*\*.*$', True),
+	LogItem("make no rule",'^make: \*\*\*.* No rule to make target.*$', True),
+	LogItem("raptor error",'^ERROR: raptor:*$', True),
+	LogItem("armcc/armcpp error",'^.*line [0-9]+:.*Error: *#[0-9]+.*$', True),
+	LogItem("gcc/gcc-cpp error",'^[^ \t]+:[0-9]+:[0-9]+ .+:.+$', True),
+	LogItem("armlink error",'^Error: *L[0-9A-F]+:.*$', True),
+	LogItem("Resource File error",'[\t ]*Error:.*cannot open source input file.*\.[Rr][Ss][Gg]\".*$', True),
+	LogItem("String Table error",'[\t ]*Error:.*cannot open source input file.*[Ss]tr[^ ]*\.h\".*$', True),
+	LogItem("Armcc license fail",'^.*Error: C3397E: Cannot obtain license for Compiler.*'),
+	LogItem("Armlink license fail",'^.*Error: ......: Cannot obtain license for .*ink.*')
+	] 
+
+genstats(file,logitems,logdate)
+
+if file != sys.stdin:
+	file.close()
--- a/sbsv2/raptor/bin/codetest_osbuild.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/codetest_osbuild.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,174 +1,174 @@
-#!/bin/sh
-
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Build automation for Symbian OS with Raptor
-# Author: Timothy N Murphy
-# 
-#
-
-# You can edit these:
-H=/home/tmurphy
-export H
-
-export TESTBASE="$H/baselineos/codetest"
-
-
-export LOGBASEDIR=~/public_html/buildlogs
-export BUILDROOT="$H/baselineos"
-export SOURCEROOT="$H/baselineos/fsupdate"
-export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
-export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
-export PARALLEL=28
-
-genstats() { 
-if [ "$1.stats"  -ot "$1.log" ]; then
-python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
-#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
-(
-	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
-)
-fi;
-}
-
-cd $BUILDROOT
-
-
-# Don't edit the rest:
-###################################################
-export KEY=`date +%d_%m_%y`
-export DAILYDIR="$LOGBASEDIR/$KEY"
-export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
-export LOGNAME="${BUILDNAME}_${KEY}"
-export PLATFORM=armv5
-export TESTLOG="$DAILYDIR/parallel_codetest.log"
-
-for BUILDNUM in {1..50}; do
-	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
-		break
-	fi
-	if [ ! -f "$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log" ]; then
-		break
-	fi
-done
-
-# make the day's directory
-mkdir -p "$DAILYDIR"
-
-echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
-echo '<testrun>' > "$TESTLOG"
-
-
-# Loop through different cluster loads
-for CODEFACTOR in 1 2 3 4 5; do
-export CODEFACTOR
-echo "CODEFACTOR: $CODEFACTOR"
-(
-
-export EPOCROOTS=""
-j=1;
-while [ $j -le $CODEFACTOR ]; do
-	EPOCROOTS=${EPOCROOTS}" $TESTBASE/epocroot$j"
-	j=$[ $j + 1 ]
-done
-MAKEFILE=$TESTBASE/test$CODEFACTOR.mk
-
-
-echo "<test type='performance' name='codetest' >"
-echo "	<parameters codefactor='$CODEFACTOR' start='`date`' />"
-echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
-echo "	<epocroots>$EPOCROOTS</epocroots>"
-echo "	<makefile>$MAKEFILE</makefile>"
-echo ""
-
-OUTDIR="$DAILYDIR/$BUILDNUM"
-TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
-
-echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
-if [ ! -d "$OUTDIR" ]; then
-	mkdir -p "$OUTDIR" || exit 1
-fi
-set -x
-
-# Make sure that our "stop signal" is clear
-SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
-rm -f "$SIGNALTOSTOPFILE"
-
-
-export PATH="$TESTBASE/epocroot1/epoc32/tools":$PATH
-
-(
-echo "Annihilating epoc32 tree(s)"
-# wipe the epoc32 directory first
-for e in $EPOCROOTS; do
-	chmod -R u+rw "$e/epoc32" &&
-	rm -rf "$e/epoc32" &&
-	echo "epoc32 tree $e/epoc32 withered" 
-done
-) 
-(
-for EPOCROOT in $EPOCROOTS; do
-	export EPOCROOT
-	# unzip the pre-prepared epoc32 trees
-	cd $EPOCROOT && 	
-	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch && 
-	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch &&
-	chmod -R u+rw "$EPOCROOT/epoc32" &&
-	echo "unzipped skeleton epoc32 tree" 
-
-	echo "Pre-export"
-	$SBS_HOME/bin/sbs  -d -k -s "$PREEXPORTSYSDEF" -a "$SOURCEROOT" -c $PLATFORM EXPORT > $OUTDIR/${LOGNAME}_$BUILDNUM.preexport 2>&1 || {
-		echo "Pre-export failed";
-		exit 1
-	}
-done
-)
-
-echo "Running Make"
-(
-	set -x
-	echo "Running Make"
-	# The build process
-
-	time /usr/local/raptor/make-pvm-381/pvmgmake -j$PARALLEL --debug=j -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log" 2>&1 
-	touch "$SIGNALTOSTOPFILE"
-) > "$TIMELOG" 2>&1 & 
-(
-	set +x
-	# Concurrent process to continuously update statistics
-	echo ""
-
-	while [ 1 -eq 1 ]; do
-		sleep 20 
-		echo -n "."
-
-		if [ -e "$SIGNALTOSTOPFILE" ]; then
-			rm -f "$SIGNALTOSTOPFILE"
-			break
-		fi
-	done
-	echo ""
-)
-set +x
-genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
-
-echo "	]]></build>"
-echo "</test>"
-) >> "$TESTLOG" 2>&1
-
-BUILDNUM=$[ $BUILDNUM + 1 ]
-# use a new output directory
-done # CODEFACTOR
-echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
-echo "</testrun>" >> "$TESTLOG"
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Build automation for Symbian OS with Raptor
+# Author: Timothy N Murphy
+# 
+#
+
+# You can edit these:
+H=/home/tmurphy
+export H
+
+export TESTBASE="$H/baselineos/codetest"
+
+
+export LOGBASEDIR=~/public_html/buildlogs
+export BUILDROOT="$H/baselineos"
+export SOURCEROOT="$H/baselineos/fsupdate"
+export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
+export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
+export PARALLEL=28
+
+genstats() { 
+if [ "$1.stats"  -ot "$1.log" ]; then
+python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
+#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
+(
+	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
+)
+fi;
+}
+
+cd $BUILDROOT
+
+
+# Don't edit the rest:
+###################################################
+export KEY=`date +%d_%m_%y`
+export DAILYDIR="$LOGBASEDIR/$KEY"
+export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
+export LOGNAME="${BUILDNAME}_${KEY}"
+export PLATFORM=armv5
+export TESTLOG="$DAILYDIR/parallel_codetest.log"
+
+for BUILDNUM in {1..50}; do
+	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
+		break
+	fi
+	if [ ! -f "$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log" ]; then
+		break
+	fi
+done
+
+# make the day's directory
+mkdir -p "$DAILYDIR"
+
+echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
+echo '<testrun>' > "$TESTLOG"
+
+
+# Loop through different cluster loads
+for CODEFACTOR in 1 2 3 4 5; do
+export CODEFACTOR
+echo "CODEFACTOR: $CODEFACTOR"
+(
+
+export EPOCROOTS=""
+j=1;
+while [ $j -le $CODEFACTOR ]; do
+	EPOCROOTS=${EPOCROOTS}" $TESTBASE/epocroot$j"
+	j=$[ $j + 1 ]
+done
+MAKEFILE=$TESTBASE/test$CODEFACTOR.mk
+
+
+echo "<test type='performance' name='codetest' >"
+echo "	<parameters codefactor='$CODEFACTOR' start='`date`' />"
+echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
+echo "	<epocroots>$EPOCROOTS</epocroots>"
+echo "	<makefile>$MAKEFILE</makefile>"
+echo ""
+
+OUTDIR="$DAILYDIR/$BUILDNUM"
+TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
+
+echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
+if [ ! -d "$OUTDIR" ]; then
+	mkdir -p "$OUTDIR" || exit 1
+fi
+set -x
+
+# Make sure that our "stop signal" is clear
+SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
+rm -f "$SIGNALTOSTOPFILE"
+
+
+export PATH="$TESTBASE/epocroot1/epoc32/tools":$PATH
+
+(
+echo "Annihilating epoc32 tree(s)"
+# wipe the epoc32 directory first
+for e in $EPOCROOTS; do
+	chmod -R u+rw "$e/epoc32" &&
+	rm -rf "$e/epoc32" &&
+	echo "epoc32 tree $e/epoc32 withered" 
+done
+) 
+(
+for EPOCROOT in $EPOCROOTS; do
+	export EPOCROOT
+	# unzip the pre-prepared epoc32 trees
+	cd $EPOCROOT && 	
+	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch && 
+	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch &&
+	chmod -R u+rw "$EPOCROOT/epoc32" &&
+	echo "unzipped skeleton epoc32 tree" 
+
+	echo "Pre-export"
+	$SBS_HOME/bin/sbs  -d -k -s "$PREEXPORTSYSDEF" -a "$SOURCEROOT" -c $PLATFORM EXPORT > $OUTDIR/${LOGNAME}_$BUILDNUM.preexport 2>&1 || {
+		echo "Pre-export failed";
+		exit 1
+	}
+done
+)
+
+echo "Running Make"
+(
+	set -x
+	echo "Running Make"
+	# The build process
+
+	time /usr/local/raptor/make-pvm-381/pvmgmake -j$PARALLEL --debug=j -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log" 2>&1 
+	touch "$SIGNALTOSTOPFILE"
+) > "$TIMELOG" 2>&1 & 
+(
+	set +x
+	# Concurrent process to continuously update statistics
+	echo ""
+
+	while [ 1 -eq 1 ]; do
+		sleep 20 
+		echo -n "."
+
+		if [ -e "$SIGNALTOSTOPFILE" ]; then
+			rm -f "$SIGNALTOSTOPFILE"
+			break
+		fi
+	done
+	echo ""
+)
+set +x
+genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
+
+echo "	]]></build>"
+echo "</test>"
+) >> "$TESTLOG" 2>&1
+
+BUILDNUM=$[ $BUILDNUM + 1 ]
+# use a new output directory
+done # CODEFACTOR
+echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
+echo "</testrun>" >> "$TESTLOG"
--- a/sbsv2/raptor/bin/countbinaries.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/countbinaries.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,29 +1,29 @@
-#!/bin/sh
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Count the release binaries produced by a build
-# armv5 only for the moment
-#
-
-TYPES='agt ani cpm csy dll drv esy exe fsy fxt hlp jar ldd lib loc msy nif pdd pdl prt sc tsy wsy [0-9]+'
-
-echo "Countbinaries"
-echo  ""
-
-PATTERN='\.(('`echo "$TYPES" |sed 's# #)|(#g'`'))$'
-echo "Searching for: $PATTERN"
-
-
-echo -n "ARMv5 Binaries: "
-find $EPOCROOT/epoc32/release/armv5 | egrep "$PATTERN" | wc
+#!/bin/sh
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Count the release binaries produced by a build
+# armv5 only for the moment
+#
+
+TYPES='agt ani cpm csy dll drv esy exe fsy fxt hlp jar ldd lib loc msy nif pdd pdl prt sc tsy wsy [0-9]+'
+
+echo "Countbinaries"
+echo  ""
+
+PATTERN='\.(('`echo "$TYPES" |sed 's# #)|(#g'`'))$'
+echo "Searching for: $PATTERN"
+
+
+echo -n "ARMv5 Binaries: "
+find $EPOCROOT/epoc32/release/armv5 | egrep "$PATTERN" | wc
--- a/sbsv2/raptor/bin/createrfifile.pl	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/createrfifile.pl	Mon Nov 16 09:46:46 2009 +0000
@@ -1,114 +1,114 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-use strict;
-use File::Basename;
-use Getopt::Long;
-
-my $verbose = 0;
-my ($rfifile, $excludepath) = "";
-GetOptions ('v' => \$verbose, 'o=s' => \$rfifile, 'x=s' => \$excludepath);
-
-if (!$rfifile || @ARGV < 1)
-	{
-	print (STDERR "\ncreaterfifile.pl\n");
-	print STDERR << 'END_OF_HELP';
-
-Usage: createrfifile.pl [-v] -o outputfile.rfi [-x excludepath] rss_cpp_deps_file_1.d rss_cpp_deps_file_n.d
-
-Takes one or more files containing CPP dependency output from the preprocessing of a .rss file and
-generates a "combined resource" .rfi that can  be consumed by CDB.
-Optionally takes an exclusion path under which "found" dependencies can be ignored.
-
-END_OF_HELP
-	exit(0);
-	}
-
-my @depfiles = @ARGV;
-
-my $exclude = $excludepath;
-if ($exclude)
-	{
-	$exclude =~ s/\\/\//g;			# Ensure consistent slashes
-	$exclude =~ s/\/\//\//g;		# Remove double slashes
-	$exclude = quotemeta($exclude);	# Convert for regex match
-	}
-
-print ("RFI : exclude under - \"$exclude\"\n") if ($verbose);
-
-my @resources;
-my %loggedresources;
-foreach my $depfile (@depfiles)
-	{
-	open DEPFILE, "< $depfile" or die "\nRFI : Cannot read \"$depfile\"!\n\n";
-	while (<DEPFILE>)
-		{
-		# .d file format - whitespace at front is key, path format varies depending on platform
-		# the aim is to get a list of the "real" files. Missing files can appear "unpathed"
-		#
-		#Audio.rsc: M:/src/common/techview/apps/audio/Src/Audio.rss \
-		#  M:/epoc32/include/variant/Symbian_OS.hrh \
-		#  M://epoc32/include/techview/eikon.rh \
-		#  M://epoc32/include/techview/eikon.hrh M://epoc32/include/uikon.hrh \
-		#  M://epoc32/include/techview/controls.hrh \
-		#  M://epoc32/include/eikcolor.hrh \
-		#  M://epoc32/include/techview/techview.hrh M://epoc32/include/uikon.rh \
-		#  M://epoc32/include/badef.rh M://epoc32/include/baerrrsvr.rh \
-		#  M://epoc32/include/techview/controls.rh M://epoc32/include/gulftflg.hrh \
-		#  M://epoc32/include/eikcore.rsg M://epoc32/include/eikcoctl.rsg \
-		#  M://epoc32/include/eikctl.rsg M://epoc32/include/eikfile.rsg \
-		#  M://epoc32/include/eikprint.rsg M://epoc32/include/audio.mbg \
-		#  M:/src/common/techview/apps/audio/Src/Audio.hrh \
-		#  M:/src/common/techview/apps/audio/Src/NewAudio.rls
-		
-		s/^.*\.\w+\://;
-		s/\\$//;
-		s/^\s+//;
-		s/\s+$//;
-		s/\/\//\//g;
-		chomp $_;
-		next if !/\S/;	
-	
-		my @dependencies = split;	
-		foreach my $dependency (@dependencies)
-			{
-			next if ($exclude && $dependency =~ /^$exclude/i);
-			print ("WARNING: Could not find dependency \"$dependency\" in \"$depfile\"\n") if (!-e $dependency and $verbose);		
-			print ("RFI : processing - \"$dependency\"\n") if ($verbose);
-			
-			if (!defined $loggedresources{$dependency})
-				{
-				push @resources, $dependency;
-				$loggedresources{$dependency} = 1;
-				}
-			}
-		}
-	close DEPFILE;
-	}
-
-open RFIFILE, "> $rfifile" or die "\nRFI : Cannot write \"$rfifile\"!\n\n";
-foreach my $resource (@resources)
-	{
-	print RFIFILE "\n\n/* GXP ***********************\n";
-	print RFIFILE " * ".basename($resource)."\n";
-	print RFIFILE " ****************************/\n\n";
-	
-	open RESOURCE, "< $resource" or die "\nCannot read \"$resource\"!\n\n";
-	print RFIFILE $_ while (<RESOURCE>);
-	close RESOURCE;
-	}
-close RFIFILE;
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+use strict;
+use File::Basename;
+use Getopt::Long;
+
+my $verbose = 0;
+my ($rfifile, $excludepath) = "";
+GetOptions ('v' => \$verbose, 'o=s' => \$rfifile, 'x=s' => \$excludepath);
+
+if (!$rfifile || @ARGV < 1)
+	{
+	print (STDERR "\ncreaterfifile.pl\n");
+	print STDERR << 'END_OF_HELP';
+
+Usage: createrfifile.pl [-v] -o outputfile.rfi [-x excludepath] rss_cpp_deps_file_1.d rss_cpp_deps_file_n.d
+
+Takes one or more files containing CPP dependency output from the preprocessing of a .rss file and
+generates a "combined resource" .rfi that can  be consumed by CDB.
+Optionally takes an exclusion path under which "found" dependencies can be ignored.
+
+END_OF_HELP
+	exit(0);
+	}
+
+my @depfiles = @ARGV;
+
+my $exclude = $excludepath;
+if ($exclude)
+	{
+	$exclude =~ s/\\/\//g;			# Ensure consistent slashes
+	$exclude =~ s/\/\//\//g;		# Remove double slashes
+	$exclude = quotemeta($exclude);	# Convert for regex match
+	}
+
+print ("RFI : exclude under - \"$exclude\"\n") if ($verbose);
+
+my @resources;
+my %loggedresources;
+foreach my $depfile (@depfiles)
+	{
+	open DEPFILE, "< $depfile" or die "\nRFI : Cannot read \"$depfile\"!\n\n";
+	while (<DEPFILE>)
+		{
+		# .d file format - whitespace at front is key, path format varies depending on platform
+		# the aim is to get a list of the "real" files. Missing files can appear "unpathed"
+		#
+		#Audio.rsc: M:/src/common/techview/apps/audio/Src/Audio.rss \
+		#  M:/epoc32/include/variant/Symbian_OS.hrh \
+		#  M://epoc32/include/techview/eikon.rh \
+		#  M://epoc32/include/techview/eikon.hrh M://epoc32/include/uikon.hrh \
+		#  M://epoc32/include/techview/controls.hrh \
+		#  M://epoc32/include/eikcolor.hrh \
+		#  M://epoc32/include/techview/techview.hrh M://epoc32/include/uikon.rh \
+		#  M://epoc32/include/badef.rh M://epoc32/include/baerrrsvr.rh \
+		#  M://epoc32/include/techview/controls.rh M://epoc32/include/gulftflg.hrh \
+		#  M://epoc32/include/eikcore.rsg M://epoc32/include/eikcoctl.rsg \
+		#  M://epoc32/include/eikctl.rsg M://epoc32/include/eikfile.rsg \
+		#  M://epoc32/include/eikprint.rsg M://epoc32/include/audio.mbg \
+		#  M:/src/common/techview/apps/audio/Src/Audio.hrh \
+		#  M:/src/common/techview/apps/audio/Src/NewAudio.rls
+		
+		s/^.*\.\w+\://;
+		s/\\$//;
+		s/^\s+//;
+		s/\s+$//;
+		s/\/\//\//g;
+		chomp $_;
+		next if !/\S/;	
+	
+		my @dependencies = split;	
+		foreach my $dependency (@dependencies)
+			{
+			next if ($exclude && $dependency =~ /^$exclude/i);
+			print ("WARNING: Could not find dependency \"$dependency\" in \"$depfile\"\n") if (!-e $dependency and $verbose);		
+			print ("RFI : processing - \"$dependency\"\n") if ($verbose);
+			
+			if (!defined $loggedresources{$dependency})
+				{
+				push @resources, $dependency;
+				$loggedresources{$dependency} = 1;
+				}
+			}
+		}
+	close DEPFILE;
+	}
+
+open RFIFILE, "> $rfifile" or die "\nRFI : Cannot write \"$rfifile\"!\n\n";
+foreach my $resource (@resources)
+	{
+	print RFIFILE "\n\n/* GXP ***********************\n";
+	print RFIFILE " * ".basename($resource)."\n";
+	print RFIFILE " ****************************/\n\n";
+	
+	open RESOURCE, "< $resource" or die "\nCannot read \"$resource\"!\n\n";
+	print RFIFILE $_ while (<RESOURCE>);
+	close RESOURCE;
+	}
+close RFIFILE;
+
--- a/sbsv2/raptor/bin/createvmap.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/createvmap.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,310 +1,310 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-# Python Script to create the vmap file for Binary Variation support in SBSv2
-
-import sys
-import os
-import re
-import subprocess
-import tempfile
-import traceback
-from optparse import OptionParser
-
-# the script will exit with 0 if there are no errors
-global exitCode
-exitCode = 0
-
-# are we running on Windows?
-onWindows = sys.platform.lower().startswith("win")
-
-# error messages go to stderr
-def error(format, *extras):
-	sys.stderr.write("createvmap: error: " + (format % extras) + "\n")
-	global exitCode
-	exitCode = 1
-
-# warning messages go to stderr
-def warning(format, *extras):
-	sys.stderr.write("createvmap: warning: " + (format % extras) + "\n")
-
-# debug messages go to stderr
-global printDebug
-#
-def debug(format, *extras):
-	if printDebug:
-		sys.stderr.write("createvmap: " + (format % extras) + "\n")
-	
-# Return a dictionary with the feature names and values from the preinclude file, by running cpp over the source
-def getVmapMacros(aPreInclude, aPreprocessedFile=None, aCPP="cpp", aDefines="", aIncludes = ""):
-
-	validmacros = {}
-	# Run the pre-processor
-	command = aCPP + " -include " + os.path.abspath(aPreInclude) + " -dU " + aDefines + aIncludes
-
-	# Feed in the file to stdin, because we must set the stdin to something
-	# other than the parent stdin anyway as that may not exist - for example
-	# when using Talon.
-	infile = open(aPreprocessedFile, "r")
-
-	if onWindows:
-		p = subprocess.Popen(command, bufsize=65535,
-					                  stdin=infile,
-					                  stdout=subprocess.PIPE,
-					                  stderr=sys.stderr,
-					                  universal_newlines=True)
-	else:
-		p = subprocess.Popen(command, bufsize=65535,
-					                  stdin=infile,
-					                  stdout=subprocess.PIPE,
-					                  stderr=sys.stderr,
-					                  close_fds=True, shell=True)
-	stream = p.stdout
-
-	# Parse the pre-processor output to look for -
-	# lines "#define NAME VALUE" and "#undef NAME"
-	defineRE = re.compile('^#define (?P<FEATURENAME>\w+)(\s+(?P<VALUE>\w+))?')
-	undefRE = re.compile('^#undef (?P<FEATURENAME>\w+)')
-
-	data = " "
-	while data:
-		data = stream.readline()
-
-		definedmacro = defineRE.match(data)
-		if definedmacro:
-			name = definedmacro.group('FEATURENAME')
-			value = definedmacro.group('VALUE')
-			if value:
-				validmacros[name] = value
-			else:
-				validmacros[name] = "defined"
-
-		else:
-			undefinedmacro = undefRE.match(data)
-			if undefinedmacro:
-				validmacros[undefinedmacro.group('FEATURENAME')] = "undefined"
-
-	if p.wait() != 0:
-		error("in command '%s'", command)
-		
-	infile.close()
-	
-	return validmacros
-
-# Extract the features from a featurelist file
-def getFeatures(aFeatureList):
-	features = set()
-	for f in aFeatureList:
-		try:
-			file = open(os.path.abspath(f),'r')
-		
-			for data in file.readlines():
-				data = data.strip()
-				features.add(data)
-		
-			file.close()
-		
-		except IOError:
-			error("Feature list file %s not found", f)
-
-	return sorted(list(features))
-	
-# Returns a dictionary of the features to be put in the vmap file
-def getVariationFeatures(aFeatureList = [] ,aPreinclude = None,aPreprocessedFile = None,aCPP = "cpp",aDefines="",aIncludes = ""):
-	
-	variation_features = {'FEATURENAME':[],'VALUE':[]}
-	macros = getVmapMacros(aPreinclude,aPreprocessedFile,aCPP,aDefines,aIncludes)
-	
-	# Co-relate the macros obtained from the pre-processor to the featurelist
-	for f in aFeatureList:
-		if f in macros:
-			variation_features['FEATURENAME'].append(f)
-			variation_features['VALUE'].append(macros[f])
-	
-	return variation_features
-
-# Write to the vmap file, with the supplied dictionary containing the features
-# The vmap path will be created if it doesn't exist
-def createVmapFile(aMacroDictionary,aOutputfile):
-	if not os.path.exists(os.path.dirname(aOutputfile)):
-		os.makedirs(os.path.dirname(aOutputfile))
-	try:
-		vmapfile = open(aOutputfile,'w')
-	except IOError:
-		error("Cannot write to " + aOutputfile)
-	i = 0
-	while i < len(aMacroDictionary['FEATURENAME']):
-		vmapfile.write(aMacroDictionary['FEATURENAME'][i]+"="+aMacroDictionary['VALUE'][i]+"\n")
-		i += 1
-	vmapfile.close()
-
-def check_exists(thing, filenames):
-	if not filenames:
-		error("No %s specified", thing)
-		return
-	
-	if not isinstance(filenames, list):
-		# we just have a single string
-		filenames = [filenames]
-		
-	for filename in filenames:
-		if not os.path.exists(filename):
-			error("The %s '%s' does not exist", thing, filename)
-		
-# Main function, creates the vmap file
-def main():
-
-	try:
-		global exitCode, printDebug
-		
-		# any exceptions make us traceback and exit
-
-		parser = OptionParser(prog = "createvmap.py")
-	
-		parser.add_option("-c","--cpploc",action="store",dest="cpplocation",help="Full path of the preprocessor")
-		parser.add_option("-d","--debug",action="store_true",default=False,dest="debug",help="Turn debug information on")
-		parser.add_option("-D","--define",action="append",dest="defines",help="Macro definition")
-		parser.add_option("-f","--featurelist",action="append",dest="featurelistfile",help="List of featureslist files")
-		parser.add_option("-o","--output",action="store",dest="outputvmapfile",help="Output VMAP file name")
-		parser.add_option("-p","--preinclude",action="store",dest="preinclude",help="Pre-include file ")
-		parser.add_option("-s","--source",action="append",dest="sourcefiles",help="List of source files")
-		parser.add_option("-u","--userinc",action="append",dest="user_include",help="User Include Folders")
-		parser.add_option("-x","--systeminc",action="append",dest="system_include",help="System Include Folders")
-
-		(options, leftover_args) = parser.parse_args(sys.argv[1:])
-
-		if leftover_args:
-			for invalids in leftover_args:
-				warning("Unknown parameter '%s'" % invalids)
-		
-		printDebug = options.debug
-		debug("Source Files     -> %s", options.sourcefiles)
-		debug("Macro defines    -> %s", options.defines)
-		debug("Features Files   -> %s", options.featurelistfile)
-		debug("Pre-Include File -> %s", options.preinclude)
-		debug("User Includes    -> %s", options.user_include)
-		debug("System Includes  -> %s", options.system_include)
-		debug("CPP Location     -> %s", options.cpplocation)
-		debug("VMAP Output name -> %s", options.outputvmapfile)
-			
-		featurelist = []
-		definelist = ""
-		user_includeslist = ""
-		system_includeslist = ""
-		includeslist = ""
-
-		# Some error checking code
-		if not options.outputvmapfile:
-			error("No output vmap file name supplied")
-	
-		# Source files must be supplied
-		check_exists("source file", options.sourcefiles)
-	
-		# A valid preinclude file must be supplied
-		check_exists("pre-include file", options.preinclude)
-	
-		# Some feature lists are required
-		check_exists("feature list", options.featurelistfile)
-	
-		# A cpp tool is required
-		check_exists("cpp tool", options.cpplocation)
-
-		# if an essential option was missing then we should stop now
-		if exitCode != 0:
-			sys.exit(exitCode)
-			
-		# macro definitions
-		if options.defines:
-			for macro in options.defines:
-				definelist += " -D" + macro.replace('__SBS__QUOTE__', '\\"')
-
-		# Note that we have to use -isystem for user includes and system
-		# includes to match what happens in the compiler. Long story.
-
-		# Add each source directory as a user-include, so that our temporary
-		# concatenated source file can find includes that were next to the
-		# original source files.
-		# Check that all the specified source files exist
-		# and collect a set of all the source directories
-		sourcedirs = set()
-		for src in options.sourcefiles:
-			sourcedirs.add(os.path.dirname(src))
-			
-		for srcdir in sourcedirs:
-			user_includeslist += " -isystem " + srcdir
-
-		# Convert the include list to a string to be passed to cpp
-		if options.user_include:
-			for userinc in options.user_include:
-				user_includeslist += " -isystem " + userinc
-		if options.system_include:
-			for sysinc in options.system_include:
-				system_includeslist += " -isystem " + sysinc
-	
-		includeslist = user_includeslist + system_includeslist
-
-		# Get a list of all the features, from all the featurelist files
-		featurelist = getFeatures(options.featurelistfile)
-
-		# concatenate the source files together into a temporary file
-		try:
-			(tempfd, tempname) = tempfile.mkstemp()
-			temp = os.fdopen(tempfd, "w")
-			for src in options.sourcefiles:
-				sfile = open(src, "r")
-				for sline in sfile:
-					temp.write(sline)
-				sfile.close()
-			temp.close()
-		except Exception,e:
-			error("Could not write source files into temporary file %s : %s" % (tempname, str(e)))
-			return 1
-		
-		debug("Temporary file name : " + tempname)
-
-		# extract the macros from the concatenated source files
-		macro_dictionary = getVariationFeatures(featurelist,
-		                                        options.preinclude,
-								                tempname,
-								                options.cpplocation,
-								                definelist,
-								                includeslist)
-		debug("Macros extracted:") 
-		for key,values in macro_dictionary.iteritems():
-			debug(key + " " + str(values))
-
-		# if there were no macros then the vmap file will be empty...
-		if not macro_dictionary['FEATURENAME']:
-			warning("No feature macros were found in the source")
-			
-		# Get rid of the temporary file
-		try:
-			os.remove(tempname)
-		except:
-			error("Could not delete temporary %s" % tempname) 
-
-		createVmapFile(macro_dictionary, options.outputvmapfile)
-		
-		# exit with 0 if OK
-		return exitCode
-
-	except Exception,ex:
-		traceback.print_exc()
-		return 1
-
-if __name__ == "__main__":
-    sys.exit(main())
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# Python Script to create the vmap file for Binary Variation support in SBSv2
+
+import sys
+import os
+import re
+import subprocess
+import tempfile
+import traceback
+from optparse import OptionParser
+
+# the script will exit with 0 if there are no errors
+global exitCode
+exitCode = 0
+
+# are we running on Windows?
+onWindows = sys.platform.lower().startswith("win")
+
+# error messages go to stderr
+def error(format, *extras):
+	sys.stderr.write("createvmap: error: " + (format % extras) + "\n")
+	global exitCode
+	exitCode = 1
+
+# warning messages go to stderr
+def warning(format, *extras):
+	sys.stderr.write("createvmap: warning: " + (format % extras) + "\n")
+
+# debug messages go to stderr
+global printDebug
+#
+def debug(format, *extras):
+	if printDebug:
+		sys.stderr.write("createvmap: " + (format % extras) + "\n")
+	
+# Return a dictionary with the feature names and values from the preinclude file, by running cpp over the source
+def getVmapMacros(aPreInclude, aPreprocessedFile=None, aCPP="cpp", aDefines="", aIncludes = ""):
+
+	validmacros = {}
+	# Run the pre-processor
+	command = aCPP + " -include " + os.path.abspath(aPreInclude) + " -dU " + aDefines + aIncludes
+
+	# Feed in the file to stdin, because we must set the stdin to something
+	# other than the parent stdin anyway as that may not exist - for example
+	# when using Talon.
+	infile = open(aPreprocessedFile, "r")
+
+	if onWindows:
+		p = subprocess.Popen(command, bufsize=65535,
+					                  stdin=infile,
+					                  stdout=subprocess.PIPE,
+					                  stderr=sys.stderr,
+					                  universal_newlines=True)
+	else:
+		p = subprocess.Popen(command, bufsize=65535,
+					                  stdin=infile,
+					                  stdout=subprocess.PIPE,
+					                  stderr=sys.stderr,
+					                  close_fds=True, shell=True)
+	stream = p.stdout
+
+	# Parse the pre-processor output to look for -
+	# lines "#define NAME VALUE" and "#undef NAME"
+	defineRE = re.compile('^#define (?P<FEATURENAME>\w+)(\s+(?P<VALUE>\w+))?')
+	undefRE = re.compile('^#undef (?P<FEATURENAME>\w+)')
+
+	data = " "
+	while data:
+		data = stream.readline()
+
+		definedmacro = defineRE.match(data)
+		if definedmacro:
+			name = definedmacro.group('FEATURENAME')
+			value = definedmacro.group('VALUE')
+			if value:
+				validmacros[name] = value
+			else:
+				validmacros[name] = "defined"
+
+		else:
+			undefinedmacro = undefRE.match(data)
+			if undefinedmacro:
+				validmacros[undefinedmacro.group('FEATURENAME')] = "undefined"
+
+	if p.wait() != 0:
+		error("in command '%s'", command)
+		
+	infile.close()
+	
+	return validmacros
+
+# Extract the features from a featurelist file
+def getFeatures(aFeatureList):
+	features = set()
+	for f in aFeatureList:
+		try:
+			file = open(os.path.abspath(f),'r')
+		
+			for data in file.readlines():
+				data = data.strip()
+				features.add(data)
+		
+			file.close()
+		
+		except IOError:
+			error("Feature list file %s not found", f)
+
+	return sorted(list(features))
+	
+# Returns a dictionary of the features to be put in the vmap file
+def getVariationFeatures(aFeatureList = [] ,aPreinclude = None,aPreprocessedFile = None,aCPP = "cpp",aDefines="",aIncludes = ""):
+	
+	variation_features = {'FEATURENAME':[],'VALUE':[]}
+	macros = getVmapMacros(aPreinclude,aPreprocessedFile,aCPP,aDefines,aIncludes)
+	
+	# Co-relate the macros obtained from the pre-processor to the featurelist
+	for f in aFeatureList:
+		if f in macros:
+			variation_features['FEATURENAME'].append(f)
+			variation_features['VALUE'].append(macros[f])
+	
+	return variation_features
+
+# Write to the vmap file, with the supplied dictionary containing the features
+# The vmap path will be created if it doesn't exist
+def createVmapFile(aMacroDictionary,aOutputfile):
+	if not os.path.exists(os.path.dirname(aOutputfile)):
+		os.makedirs(os.path.dirname(aOutputfile))
+	try:
+		vmapfile = open(aOutputfile,'w')
+	except IOError:
+		error("Cannot write to " + aOutputfile)
+	i = 0
+	while i < len(aMacroDictionary['FEATURENAME']):
+		vmapfile.write(aMacroDictionary['FEATURENAME'][i]+"="+aMacroDictionary['VALUE'][i]+"\n")
+		i += 1
+	vmapfile.close()
+
+def check_exists(thing, filenames):
+	if not filenames:
+		error("No %s specified", thing)
+		return
+	
+	if not isinstance(filenames, list):
+		# we just have a single string
+		filenames = [filenames]
+		
+	for filename in filenames:
+		if not os.path.exists(filename):
+			error("The %s '%s' does not exist", thing, filename)
+		
+# Main function, creates the vmap file
+def main():
+
+	try:
+		global exitCode, printDebug
+		
+		# any exceptions make us traceback and exit
+
+		parser = OptionParser(prog = "createvmap.py")
+	
+		parser.add_option("-c","--cpploc",action="store",dest="cpplocation",help="Full path of the preprocessor")
+		parser.add_option("-d","--debug",action="store_true",default=False,dest="debug",help="Turn debug information on")
+		parser.add_option("-D","--define",action="append",dest="defines",help="Macro definition")
+		parser.add_option("-f","--featurelist",action="append",dest="featurelistfile",help="List of featureslist files")
+		parser.add_option("-o","--output",action="store",dest="outputvmapfile",help="Output VMAP file name")
+		parser.add_option("-p","--preinclude",action="store",dest="preinclude",help="Pre-include file ")
+		parser.add_option("-s","--source",action="append",dest="sourcefiles",help="List of source files")
+		parser.add_option("-u","--userinc",action="append",dest="user_include",help="User Include Folders")
+		parser.add_option("-x","--systeminc",action="append",dest="system_include",help="System Include Folders")
+
+		(options, leftover_args) = parser.parse_args(sys.argv[1:])
+
+		if leftover_args:
+			for invalids in leftover_args:
+				warning("Unknown parameter '%s'" % invalids)
+		
+		printDebug = options.debug
+		debug("Source Files     -> %s", options.sourcefiles)
+		debug("Macro defines    -> %s", options.defines)
+		debug("Features Files   -> %s", options.featurelistfile)
+		debug("Pre-Include File -> %s", options.preinclude)
+		debug("User Includes    -> %s", options.user_include)
+		debug("System Includes  -> %s", options.system_include)
+		debug("CPP Location     -> %s", options.cpplocation)
+		debug("VMAP Output name -> %s", options.outputvmapfile)
+			
+		featurelist = []
+		definelist = ""
+		user_includeslist = ""
+		system_includeslist = ""
+		includeslist = ""
+
+		# Some error checking code
+		if not options.outputvmapfile:
+			error("No output vmap file name supplied")
+	
+		# Source files must be supplied
+		check_exists("source file", options.sourcefiles)
+	
+		# A valid preinclude file must be supplied
+		check_exists("pre-include file", options.preinclude)
+	
+		# Some feature lists are required
+		check_exists("feature list", options.featurelistfile)
+	
+		# A cpp tool is required
+		check_exists("cpp tool", options.cpplocation)
+
+		# if an essential option was missing then we should stop now
+		if exitCode != 0:
+			sys.exit(exitCode)
+			
+		# macro definitions
+		if options.defines:
+			for macro in options.defines:
+				definelist += " -D" + macro.replace('__SBS__QUOTE__', '\\"')
+
+		# Note that we have to use -isystem for user includes and system
+		# includes to match what happens in the compiler. Long story.
+
+		# Add each source directory as a user-include, so that our temporary
+		# concatenated source file can find includes that were next to the
+		# original source files.
+		# Check that all the specified source files exist
+		# and collect a set of all the source directories
+		sourcedirs = set()
+		for src in options.sourcefiles:
+			sourcedirs.add(os.path.dirname(src))
+			
+		for srcdir in sourcedirs:
+			user_includeslist += " -isystem " + srcdir
+
+		# Convert the include list to a string to be passed to cpp
+		if options.user_include:
+			for userinc in options.user_include:
+				user_includeslist += " -isystem " + userinc
+		if options.system_include:
+			for sysinc in options.system_include:
+				system_includeslist += " -isystem " + sysinc
+	
+		includeslist = user_includeslist + system_includeslist
+
+		# Get a list of all the features, from all the featurelist files
+		featurelist = getFeatures(options.featurelistfile)
+
+		# concatenate the source files together into a temporary file
+		try:
+			(tempfd, tempname) = tempfile.mkstemp()
+			temp = os.fdopen(tempfd, "w")
+			for src in options.sourcefiles:
+				sfile = open(src, "r")
+				for sline in sfile:
+					temp.write(sline)
+				sfile.close()
+			temp.close()
+		except Exception,e:
+			error("Could not write source files into temporary file %s : %s" % (tempname, str(e)))
+			return 1
+		
+		debug("Temporary file name : " + tempname)
+
+		# extract the macros from the concatenated source files
+		macro_dictionary = getVariationFeatures(featurelist,
+		                                        options.preinclude,
+								                tempname,
+								                options.cpplocation,
+								                definelist,
+								                includeslist)
+		debug("Macros extracted:") 
+		for key,values in macro_dictionary.iteritems():
+			debug(key + " " + str(values))
+
+		# if there were no macros then the vmap file will be empty...
+		if not macro_dictionary['FEATURENAME']:
+			warning("No feature macros were found in the source")
+			
+		# Get rid of the temporary file
+		try:
+			os.remove(tempname)
+		except:
+			error("Could not delete temporary %s" % tempname) 
+
+		createVmapFile(macro_dictionary, options.outputvmapfile)
+		
+		# exit with 0 if OK
+		return exitCode
+
+	except Exception,ex:
+		traceback.print_exc()
+		return 1
+
+if __name__ == "__main__":
+    sys.exit(main())
+
--- a/sbsv2/raptor/bin/failedstats.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/failedstats.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,161 +1,161 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Generate some useful statistics from a Raptor build log
-# Work out what was specified to make but not built even if
-# it was not mentioned in the make error output because some
-# child's dependency was not satisfied.
-# Needs raptor --tracking option to set make to use -debug=v
-# An example bit of make output that can be analysed:
-#
-
- File `fred.exe' does not exist.
-  Considering target file `fred.in'.
-   File `fred.in' does not exist.
-    Considering target file `a.o'.
-     File `a.o' does not exist.
-      Considering target file `a.c'.
-       Finished prerequisites of target file `a.c'.
-      No need to remake target `a.c'.
-      Pruning file `a.c'.
-     Finished prerequisites of target file `a.o'.
-    Must remake target `a.o'.
-cc    -c -o a.o a.c
-    Successfully remade target file `a.o'.
-    Considering target file `b.o'.
-     File `b.o' does not exist.
-      Considering target file `b.c'.
-       Finished prerequisites of target file `b.c'.
-      No need to remake target `b.c'.
-      Pruning file `b.c'.
-     Finished prerequisites of target file `b.o'.
-    Must remake target `b.o'.
-cc    -c -o b.o b.c
-    Successfully remade target file `b.o'.
-   Finished prerequisites of target file `fred.in'.
-  Must remake target `fred.in'.
-  Successfully remade target file `fred.in'.
- Finished prerequisites of target file `fred.exe'.
-Must remake target `fred.exe'.
-Successfully remade target file `fred.exe'.
-"""
-
-"""
-Considering target file `/var/local/net/smb/tmurphy/pf/mcloverlay/common/generic/COMMS-INFRAS/ESOCK/commsdataobjects/src/provinfoqueryset.cpp'.
-         Finished prerequisites of target file `/var/local/net/smb/tmurphy/pf/mcloverlay/common/generic/COMMS-INFRAS/ESOC
-K/commsdataobjects/src/provinfoqueryset.cpp'.
-"""
-
-# The output is a filename followed by a number.  If the number is 0
-# Then the prerequisites that file now exist.
-# If > 0 then the prerequisites for that file could not be completed.
-
-import sys
-from  optparse import OptionParser
-import re
-import os
-from stat import *
-
-def findfailed(file):
-	""" Find unbuilt files and prioritise them.  
-	    Higher numbers go to files that didn't fail because
-	    of prerequisites.
-
-	    Rationale: files that failed because their prerequisites
-	    failed are worth knowing about but cannot themselves be addressed.
-	"""
-	filecount = {}
-	extre = re.compile(".*\.(?P<ext>[^'\/\"]+)$", re.I)
-	startre = re.compile("[\t ]*File `(?P<file>[^']*)\' does not exist.*", re.I)
-	zerore = re.compile("[\t ]*Successfully remade target file `(?P<file>[^']*)'\..*", re.I)
-	#endre = re.compile("[\t ]*Finished prerequisites of target file `(?P<file>[^']*)'\..*", re.I)
-	endre = re.compile("[\t ]*Giving up on target file `(?P<file>[^']*)'\..*", re.I)
-
-	for x in file.readlines():
-		g = startre.match(x)
-		if g is not None:
-			filename = g.group('file').strip('"')
-			eg = extre.match(filename)
-			if eg is not None:
-				filecount[filename] = [1, eg.group('ext')]
-			else:
-				filecount[filename] = [1, "none"]
-
-		else:
-			g = zerore.match(x)
-			if g is not None:
-				# Complete success - not interesting.
-				filename = g.group('file').strip('"')
-				if filename in filecount:
-					del filecount[filename]
-			else:
-				g = endre.match(x)
-				if g is not None:
-					# did manage to make the prerequisites, perhaps not the file
-					filename = g.group('file').strip('"')
-					if filename in filecount:
-						filecount[filename][0] = 2
-	return filecount
-
-def showtargets(targets,prereq):
-	output=[]	
-	for k in targets:
-		l = "%s\t%i\t%s" % (targets[k][1], targets[k][0], k)
-		if prereq:
-			if targets[k][0] == 2:
-				# There were missing pre-requisites
-				output.append(l)
-		else:
-				output.append(l)
-	output.sort()
-	for o in output:
-		sys.stdout.write("%s\n" % o)
-
-def readmake(file):
-	rule = re.compile("^[^ :$]*:[^=]", re.I)
-	for x in file.readlines():
-		g = startre.match(x)
-		if g is not None:
-			filename = g.group('file').strip('"')
-			eg = extre.match(filename)
-			if eg is not None:
-				ext = eg.group('ext')
-			else:
-				ext = "none"
-
-
-
-parser = OptionParser(prog = "matchmade",
-	usage = "%prog [-h | options] [ -d make database filename ] logfile")
-
-parser.add_option("-m", "--missing-prerequistes", default = False,
-	 action="store_true", dest="missing", help="List those targets whose pre-requisites could not be found or made") 
-
-parser.add_option("-d","--make-db",action="store",dest="makedb",
-                                help="name of make database")
-
-(options, args) = parser.parse_args()
-
-logname="stdin"
-if len(args) > 0:
-        logname=args[0]
-        file = open(logname,"r")
-else:
-        file = sys.stdin
-
-showtargets(findfailed(file),options.missing)
-#assistmake(file,options.missing)
-
-if file != sys.stdin:
-	file.close()
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Generate some useful statistics from a Raptor build log
+# Work out what was specified to make but not built even if
+# it was not mentioned in the make error output because some
+# child's dependency was not satisfied.
+# Needs raptor --tracking option to set make to use -debug=v
+# An example bit of make output that can be analysed:
+#
+
+ File `fred.exe' does not exist.
+  Considering target file `fred.in'.
+   File `fred.in' does not exist.
+    Considering target file `a.o'.
+     File `a.o' does not exist.
+      Considering target file `a.c'.
+       Finished prerequisites of target file `a.c'.
+      No need to remake target `a.c'.
+      Pruning file `a.c'.
+     Finished prerequisites of target file `a.o'.
+    Must remake target `a.o'.
+cc    -c -o a.o a.c
+    Successfully remade target file `a.o'.
+    Considering target file `b.o'.
+     File `b.o' does not exist.
+      Considering target file `b.c'.
+       Finished prerequisites of target file `b.c'.
+      No need to remake target `b.c'.
+      Pruning file `b.c'.
+     Finished prerequisites of target file `b.o'.
+    Must remake target `b.o'.
+cc    -c -o b.o b.c
+    Successfully remade target file `b.o'.
+   Finished prerequisites of target file `fred.in'.
+  Must remake target `fred.in'.
+  Successfully remade target file `fred.in'.
+ Finished prerequisites of target file `fred.exe'.
+Must remake target `fred.exe'.
+Successfully remade target file `fred.exe'.
+"""
+
+"""
+Considering target file `/var/local/net/smb/tmurphy/pf/mcloverlay/common/generic/COMMS-INFRAS/ESOCK/commsdataobjects/src/provinfoqueryset.cpp'.
+         Finished prerequisites of target file `/var/local/net/smb/tmurphy/pf/mcloverlay/common/generic/COMMS-INFRAS/ESOC
+K/commsdataobjects/src/provinfoqueryset.cpp'.
+"""
+
+# The output is a filename followed by a number.  If the number is 0
+# Then the prerequisites that file now exist.
+# If > 0 then the prerequisites for that file could not be completed.
+
+import sys
+from  optparse import OptionParser
+import re
+import os
+from stat import *
+
+def findfailed(file):
+	""" Find unbuilt files and prioritise them.  
+	    Higher numbers go to files that didn't fail because
+	    of prerequisites.
+
+	    Rationale: files that failed because their prerequisites
+	    failed are worth knowing about but cannot themselves be addressed.
+	"""
+	filecount = {}
+	extre = re.compile(".*\.(?P<ext>[^'\/\"]+)$", re.I)
+	startre = re.compile("[\t ]*File `(?P<file>[^']*)\' does not exist.*", re.I)
+	zerore = re.compile("[\t ]*Successfully remade target file `(?P<file>[^']*)'\..*", re.I)
+	#endre = re.compile("[\t ]*Finished prerequisites of target file `(?P<file>[^']*)'\..*", re.I)
+	endre = re.compile("[\t ]*Giving up on target file `(?P<file>[^']*)'\..*", re.I)
+
+	for x in file.readlines():
+		g = startre.match(x)
+		if g is not None:
+			filename = g.group('file').strip('"')
+			eg = extre.match(filename)
+			if eg is not None:
+				filecount[filename] = [1, eg.group('ext')]
+			else:
+				filecount[filename] = [1, "none"]
+
+		else:
+			g = zerore.match(x)
+			if g is not None:
+				# Complete success - not interesting.
+				filename = g.group('file').strip('"')
+				if filename in filecount:
+					del filecount[filename]
+			else:
+				g = endre.match(x)
+				if g is not None:
+					# did manage to make the prerequisites, perhaps not the file
+					filename = g.group('file').strip('"')
+					if filename in filecount:
+						filecount[filename][0] = 2
+	return filecount
+
+def showtargets(targets,prereq):
+	output=[]	
+	for k in targets:
+		l = "%s\t%i\t%s" % (targets[k][1], targets[k][0], k)
+		if prereq:
+			if targets[k][0] == 2:
+				# There were missing pre-requisites
+				output.append(l)
+		else:
+				output.append(l)
+	output.sort()
+	for o in output:
+		sys.stdout.write("%s\n" % o)
+
+def readmake(file):
+	rule = re.compile("^[^ :$]*:[^=]", re.I)
+	for x in file.readlines():
+		g = startre.match(x)
+		if g is not None:
+			filename = g.group('file').strip('"')
+			eg = extre.match(filename)
+			if eg is not None:
+				ext = eg.group('ext')
+			else:
+				ext = "none"
+
+
+
+parser = OptionParser(prog = "matchmade",
+	usage = "%prog [-h | options] [ -d make database filename ] logfile")
+
+parser.add_option("-m", "--missing-prerequistes", default = False,
+	 action="store_true", dest="missing", help="List those targets whose pre-requisites could not be found or made") 
+
+parser.add_option("-d","--make-db",action="store",dest="makedb",
+                                help="name of make database")
+
+(options, args) = parser.parse_args()
+
+logname="stdin"
+if len(args) > 0:
+        logname=args[0]
+        file = open(logname,"r")
+else:
+        file = sys.stdin
+
+showtargets(findfailed(file),options.missing)
+#assistmake(file,options.missing)
+
+if file != sys.stdin:
+	file.close()
--- a/sbsv2/raptor/bin/fixmeta.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/fixmeta.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,81 +1,81 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# fixmeta
-#
-
-"""
-  Correct bld.infs, mmps etc to the point where it can be read by the build system
-  Currently it:
-  	Corrects '\' in include statements to '/'
-
-  Author: Tim Murphy, with a nod to Peter Harper's fixslashes.pl
-"""
-
-import sys
-import os
-import re
-from  optparse import OptionParser
-
-
-includeslash_re = re.compile('#include.*\\\\')
-mmpfile_re = re.compile(".*\.mm[hp]$", re.I)
-bldinf_re = re.compile(".*bld\.inf$", re.I)
-
-def fixincludeslash(m):
-	return m.group(0).replace('\\','/')
-	
-
-def checkconvert(dirname, filename):
-	tofilename=dirname + "/" + filename+".converted"
-	fromfilename = dirname + "/" + filename
-	fromfile = open(fromfilename,"r")
-
-	conversions = False
-	fromtext = fromfile.read()
-	(totext, subcount) = re.subn(includeslash_re, fixincludeslash, fromtext)
-
-	if subcount != 0:
-		print '"%s", %d backslash includes\n' % (fromfilename, subcount)
-		tofile = open( tofilename,"w")
-		tofile.write(totext)
-		tofile.close()
-
-	fromfile.close()
-	if subcount != 0:
-		os.rename(fromfilename,fromfilename+".wrongslash")
-		os.rename(tofilename,fromfilename)
-	
-	
-
-def visit(arg, dirname, names):
-	#print "dir: %s\n" % (dirname)
-	for f in names:
-		m = mmpfile_re.match(f)
-		b = bldinf_re.match(f)
-		if m != None or b != None:
-			#print "\t"+f
-			checkconvert(dirname, f)
-
-parser = OptionParser(prog = "fixmeta",
-        usage = "%prog [-h | options] sourcepath containing files to be fixed.")
-
-(options, args) = parser.parse_args()
-
-if len(args) == 0:
-	print "Need at least one argument: a path to the source which is to be fixed."
-	sys.exit(-1)
-
-print "Walking\n"
-os.path.walk(args[0],visit,None)
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# fixmeta
+#
+
+"""
+  Correct bld.infs, mmps etc to the point where it can be read by the build system
+  Currently it:
+  	Corrects '\' in include statements to '/'
+
+  Author: Tim Murphy, with a nod to Peter Harper's fixslashes.pl
+"""
+
+import sys
+import os
+import re
+from  optparse import OptionParser
+
+
+includeslash_re = re.compile('#include.*\\\\')
+mmpfile_re = re.compile(".*\.mm[hp]$", re.I)
+bldinf_re = re.compile(".*bld\.inf$", re.I)
+
+def fixincludeslash(m):
+	return m.group(0).replace('\\','/')
+	
+
+def checkconvert(dirname, filename):
+	tofilename=dirname + "/" + filename+".converted"
+	fromfilename = dirname + "/" + filename
+	fromfile = open(fromfilename,"r")
+
+	conversions = False
+	fromtext = fromfile.read()
+	(totext, subcount) = re.subn(includeslash_re, fixincludeslash, fromtext)
+
+	if subcount != 0:
+		print '"%s", %d backslash includes\n' % (fromfilename, subcount)
+		tofile = open( tofilename,"w")
+		tofile.write(totext)
+		tofile.close()
+
+	fromfile.close()
+	if subcount != 0:
+		os.rename(fromfilename,fromfilename+".wrongslash")
+		os.rename(tofilename,fromfilename)
+	
+	
+
+def visit(arg, dirname, names):
+	#print "dir: %s\n" % (dirname)
+	for f in names:
+		m = mmpfile_re.match(f)
+		b = bldinf_re.match(f)
+		if m != None or b != None:
+			#print "\t"+f
+			checkconvert(dirname, f)
+
+parser = OptionParser(prog = "fixmeta",
+        usage = "%prog [-h | options] sourcepath containing files to be fixed.")
+
+(options, args) = parser.parse_args()
+
+if len(args) == 0:
+	print "Need at least one argument: a path to the source which is to be fixed."
+	sys.exit(-1)
+
+print "Walking\n"
+os.path.walk(args[0],visit,None)
--- a/sbsv2/raptor/bin/install_raptor.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/install_raptor.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,187 +1,187 @@
-#!/bin/bash
-# raptor script
-
-# install sbsv2
-
-chmod a+x "${PWD}/bin/gethost.sh"
-export HOSTPLATFORM=$("$PWD/bin/gethost.sh")
-export HOSTPLATFORM_DIR=$("$PWD/bin/gethost.sh" -d)
-
-export build_utils=no
-if [[ ! -d "$PWD/$HOSTPLATFORM_DIR" ]]; then
-cat << MSG
-
-The Raptor installer has determined that this computer is running:
-	$HOSTPLATFORM_DIR
-This platform is not directly supported by the installer.
-
-If you proceed then the installation will attempt to build the Raptor tools for your platform.
-
-Your system must have some tools installed:
-MSG
-
-if [ "$(which gcc)" ]; then
-   echo "You appear to have gcc"
-else
-   echo "You DON'T appear to have gcc - please install it"
-fi
-
-if [ "$(which g++)" ]; then
-   echo "You appear to have gcc-c++"
-else
-   echo "You DON'T appear to have gcc-c++ (also called g++) - please install it"
-fi
-
-if [ "$(which make)" ]; then
-   echo "You appear to have GNU make"
-else
-   echo "You DON'T appear to have GNU make - please install it (version 3.81)"
-fi
-
-if [ "$(which bison)" ]; then
-   echo "You appear to have GNU bison"
-else
-   echo "You DON'T appear to have GNU bison - please install it "
-fi
-
-if [ -f "/usr/include/ncurses.h" ]; then
-   echo "You appear to have the ncurses dev libraries"
-else
-   echo "You DON'T appear to have the ncurses dev libraries - please install them (ncurses-dev or ncurses-devel)"
-fi
-
-echo "Do you wish to continue (Y or y for 'yes' anything else for no)?"
-
-read X
-if [[  "$X" != "y" && "$X" != "Y" ]]; then
-	exit 1
-else
-	build_utils=yes
-fi
-
-
-# Build the dialog utility so that we can get started
-(export SBS_HOME=$PWD;cd "$SBS_HOME/util" && echo "Building dialog utility..." && (make -k -j2 dialog> dialog_util_build.log 2>&1 && echo -e "\nBuild Complete") || (echo "Dialog utility build failed, see $PWD/dialog_util_build.log for more details"; read X; exit 1)) || exit 1
-
-fi
-
-
-export DIALOG="$PWD/$HOSTPLATFORM_DIR/bin/dialog"
-chmod a+x "$DIALOG"
-
-export SYMBIANHOME=/opt/symbian
-
-test -w "$SYMBIANHOME"
-if [[ $? -ne 0 ]]; then
-SYMBIANHOME=$(echo ~)
-fi
-
-export TMPSBSDIR="$PWD"
-
-errorexit() {
-        echo -e "\nRaptor installation aborted: $1" 1>&2
-	echo -e "\nInstall tmp dir is $TMPSBSDIR" 1>&2
-	exit 1
-	}
-	
-
-# get FULLVERSION and VERSION
-export FULLVERSION=""
-export VERSION=""
-eval $(cat .version)
-
-
-if [[ "$FULLVERSION" == "" || "$VERSION" == "" ]]; then
-	errorexit "Bad install package - no version found." 
-fi
-
-
-export RESPONSEFILE=$PWD/.installdir
-export MANIFEST=$PWD/.manifest
-export SBS_HOME=$SYMBIANHOME/raptor-$(echo "$VERSION" | sed 's#\.##g')
-
-DIALOGVER=$($DIALOG --version)
-
-if  ! expr match "$DIALOGVER" "Version:" 2>&1 >/dev/null; then
-	errorexit "Could not run the installation user interface on this version of Linux.\nPlease install the compat-glibc and compat-ncurses packages (RedHat) or the equivalent for your distribution and then try again.\n\nYou may also simply 'untar' raptor using the ' --target NewDirectory --noexec' options to this installer.\n"
-fi
-	
-
-export DIALOGSBS=$DIALOG "--backtitle 'Installing $FULLVERSION'"
-
-$DIALOGSBS --msgbox "Symbian Build System Installer\n\n$FULLVERSION" 0 0
-
-# check what SBS_HOME
-$DIALOGSBS --title "Select Symbian Home Directory" --fselect  "$SBS_HOME"  10 50   2> "$RESPONSEFILE"
-SBS_HOME=$(cat "$RESPONSEFILE")
-
-
-if [[ ! -d "$SBS_HOME" ]]; then
-	$DIALOGSBS --yesno  "$SBS_HOME does not exist - should it be created?" 0 0; YESNO=$?
-	if [[ "$YESNO" -eq 0 ]]; then
-		mkdir -p "$SBS_HOME" || 
-		(
-			errorexit "Could not create directory $SBS_HOME"
-		)
-	else
-		errorexit "SBSv2 Installation aborted: User chose not to create installation directory $SBS_HOME" 
-	fi
-else
-	# check if there's a previous install and give an option to stop
-	$DIALOGSBS --defaultno --yesno  "$SBS_HOME already exists - should the installation be overwritten?" 0 0; YESNO=$?
-	if [[ "$YESNO" -eq 1 ]]; then
-		errorexit "Not replacing existing installation." 
-	fi
-fi
-
-# Install the software
-echo "" >"$MANIFEST"
-(tar -cf - *) | (cd $SBS_HOME && tar -xvf - > "$MANIFEST" && echo -e "\nCopying complete - press RETURN" >> "$MANIFEST") &
-(
-$DIALOGSBS --title "Copying SBS files" --tailbox "$MANIFEST" 20 60 
-)
-
-# Build the utilities if needed 
-if [[ "$build_utils" == "yes" ]]; then
-BUILDLOG=$SBS_HOME/util/util_build.log
-(cd "$SBS_HOME/util" && echo "Building utilities ..." && make -k -j2  
-if [[ $? -eq 0 ]]; then
-	echo -e "\nBuild Complete" 
-else
-	echo -e "\nUtility build failed, see $BUILDLOG for more details"
-	exit 1
-fi
-) > "$BUILDLOG" 2>&1  & (
-$DIALOGSBS --title "Building utilities for $HOSTPLATFORM_DIR" --tailbox "$BUILDLOG" 20 60 
-)
-fi
-
-
-# Force sbs to be executable:
-chmod a+x "${SBS_HOME}/bin/sbs"
-chmod a+x "${SBS_HOME}/bin/gethost.sh"
-chmod a+x "${SBS_HOME}/bin/setup_user.sh"
-chmod -R a+r "${SBS_HOME}"
-chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bin/"*
-chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bv/bin/"* 
-chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bv/libexec/"*/*/*
-
-
-# Prepare user scripts for bashrc and bash_profile
-INSTALLER="${SBS_HOME}/util/install-linux"
-sed "s#__SBS_HOME__#${SBS_HOME}#" < "${INSTALLER}/linux_bash_profile" > "${SBS_HOME}/bin/user.bash_profile"
-sed "s#__SBS_HOME__#${SBS_HOME}#" < "${INSTALLER}/linux_bashrc" > "${SBS_HOME}/bin/user.bashrc"
-
-# Set symbolic Link
-if [[ -L "$SYMBIANHOME/raptor" ]]; then
-	rm "$SYMBIANHOME/raptor"
-fi
-
-if [[ ! -e "$SYMBIANHOME/raptor" ]]; then
-	ln -s  "$SBS_HOME" "$SYMBIANHOME/raptor"
-fi
-
-
-$DIALOGSBS --msgbox "Raptor $VERSION\ninstallation complete" 0 0
-
-
+#!/bin/bash
+# raptor script
+
+# install sbsv2
+
+chmod a+x "${PWD}/bin/gethost.sh"
+export HOSTPLATFORM=$("$PWD/bin/gethost.sh")
+export HOSTPLATFORM_DIR=$("$PWD/bin/gethost.sh" -d)
+
+export build_utils=no
+if [[ ! -d "$PWD/$HOSTPLATFORM_DIR" ]]; then
+cat << MSG
+
+The Raptor installer has determined that this computer is running:
+	$HOSTPLATFORM_DIR
+This platform is not directly supported by the installer.
+
+If you proceed then the installation will attempt to build the Raptor tools for your platform.
+
+Your system must have some tools installed:
+MSG
+
+if [ "$(which gcc)" ]; then
+   echo "You appear to have gcc"
+else
+   echo "You DON'T appear to have gcc - please install it"
+fi
+
+if [ "$(which g++)" ]; then
+   echo "You appear to have gcc-c++"
+else
+   echo "You DON'T appear to have gcc-c++ (also called g++) - please install it"
+fi
+
+if [ "$(which make)" ]; then
+   echo "You appear to have GNU make"
+else
+   echo "You DON'T appear to have GNU make - please install it (version 3.81)"
+fi
+
+if [ "$(which bison)" ]; then
+   echo "You appear to have GNU bison"
+else
+   echo "You DON'T appear to have GNU bison - please install it "
+fi
+
+if [ -f "/usr/include/ncurses.h" ]; then
+   echo "You appear to have the ncurses dev libraries"
+else
+   echo "You DON'T appear to have the ncurses dev libraries - please install them (ncurses-dev or ncurses-devel)"
+fi
+
+echo "Do you wish to continue (Y or y for 'yes' anything else for no)?"
+
+read X
+if [[  "$X" != "y" && "$X" != "Y" ]]; then
+	exit 1
+else
+	build_utils=yes
+fi
+
+
+# Build the dialog utility so that we can get started
+(export SBS_HOME=$PWD;cd "$SBS_HOME/util" && echo "Building dialog utility..." && (make -k -j2 dialog> dialog_util_build.log 2>&1 && echo -e "\nBuild Complete") || (echo "Dialog utility build failed, see $PWD/dialog_util_build.log for more details"; read X; exit 1)) || exit 1
+
+fi
+
+
+export DIALOG="$PWD/$HOSTPLATFORM_DIR/bin/dialog"
+chmod a+x "$DIALOG"
+
+export SYMBIANHOME=/opt/symbian
+
+test -w "$SYMBIANHOME"
+if [[ $? -ne 0 ]]; then
+SYMBIANHOME=$(echo ~)
+fi
+
+export TMPSBSDIR="$PWD"
+
+errorexit() {
+        echo -e "\nRaptor installation aborted: $1" 1>&2
+	echo -e "\nInstall tmp dir is $TMPSBSDIR" 1>&2
+	exit 1
+	}
+	
+
+# get FULLVERSION and VERSION
+export FULLVERSION=""
+export VERSION=""
+eval $(cat .version)
+
+
+if [[ "$FULLVERSION" == "" || "$VERSION" == "" ]]; then
+	errorexit "Bad install package - no version found." 
+fi
+
+
+export RESPONSEFILE=$PWD/.installdir
+export MANIFEST=$PWD/.manifest
+export SBS_HOME=$SYMBIANHOME/raptor-$(echo "$VERSION" | sed 's#\.##g')
+
+DIALOGVER=$($DIALOG --version)
+
+if  ! expr match "$DIALOGVER" "Version:" 2>&1 >/dev/null; then
+	errorexit "Could not run the installation user interface on this version of Linux.\nPlease install the compat-glibc and compat-ncurses packages (RedHat) or the equivalent for your distribution and then try again.\n\nYou may also simply 'untar' raptor using the ' --target NewDirectory --noexec' options to this installer.\n"
+fi
+	
+
+export DIALOGSBS=$DIALOG "--backtitle 'Installing $FULLVERSION'"
+
+$DIALOGSBS --msgbox "Symbian Build System Installer\n\n$FULLVERSION" 0 0
+
+# check what SBS_HOME
+$DIALOGSBS --title "Select Symbian Home Directory" --fselect  "$SBS_HOME"  10 50   2> "$RESPONSEFILE"
+SBS_HOME=$(cat "$RESPONSEFILE")
+
+
+if [[ ! -d "$SBS_HOME" ]]; then
+	$DIALOGSBS --yesno  "$SBS_HOME does not exist - should it be created?" 0 0; YESNO=$?
+	if [[ "$YESNO" -eq 0 ]]; then
+		mkdir -p "$SBS_HOME" || 
+		(
+			errorexit "Could not create directory $SBS_HOME"
+		)
+	else
+		errorexit "SBSv2 Installation aborted: User chose not to create installation directory $SBS_HOME" 
+	fi
+else
+	# check if there's a previous install and give an option to stop
+	$DIALOGSBS --defaultno --yesno  "$SBS_HOME already exists - should the installation be overwritten?" 0 0; YESNO=$?
+	if [[ "$YESNO" -eq 1 ]]; then
+		errorexit "Not replacing existing installation." 
+	fi
+fi
+
+# Install the software
+echo "" >"$MANIFEST"
+(tar -cf - *) | (cd $SBS_HOME && tar -xvf - > "$MANIFEST" && echo -e "\nCopying complete - press RETURN" >> "$MANIFEST") &
+(
+$DIALOGSBS --title "Copying SBS files" --tailbox "$MANIFEST" 20 60 
+)
+
+# Build the utilities if needed 
+if [[ "$build_utils" == "yes" ]]; then
+BUILDLOG=$SBS_HOME/util/util_build.log
+(cd "$SBS_HOME/util" && echo "Building utilities ..." && make -k -j2  
+if [[ $? -eq 0 ]]; then
+	echo -e "\nBuild Complete" 
+else
+	echo -e "\nUtility build failed, see $BUILDLOG for more details"
+	exit 1
+fi
+) > "$BUILDLOG" 2>&1  & (
+$DIALOGSBS --title "Building utilities for $HOSTPLATFORM_DIR" --tailbox "$BUILDLOG" 20 60 
+)
+fi
+
+
+# Force sbs to be executable:
+chmod a+x "${SBS_HOME}/bin/sbs"
+chmod a+x "${SBS_HOME}/bin/gethost.sh"
+chmod a+x "${SBS_HOME}/bin/setup_user.sh"
+chmod -R a+r "${SBS_HOME}"
+chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bin/"*
+chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bv/bin/"* 
+chmod a+x "${SBS_HOME}/$HOSTPLATFORM_DIR/bv/libexec/"*/*/*
+
+
+# Prepare user scripts for bashrc and bash_profile
+INSTALLER="${SBS_HOME}/util/install-linux"
+sed "s#__SBS_HOME__#${SBS_HOME}#" < "${INSTALLER}/linux_bash_profile" > "${SBS_HOME}/bin/user.bash_profile"
+sed "s#__SBS_HOME__#${SBS_HOME}#" < "${INSTALLER}/linux_bashrc" > "${SBS_HOME}/bin/user.bashrc"
+
+# Set symbolic Link
+if [[ -L "$SYMBIANHOME/raptor" ]]; then
+	rm "$SYMBIANHOME/raptor"
+fi
+
+if [[ ! -e "$SYMBIANHOME/raptor" ]]; then
+	ln -s  "$SBS_HOME" "$SYMBIANHOME/raptor"
+fi
+
+
+$DIALOGSBS --msgbox "Raptor $VERSION\ninstallation complete" 0 0
+
+
--- a/sbsv2/raptor/bin/mkgetfailed.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/mkgetfailed.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,111 +1,111 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Generate some useful statistics from a Raptor build log
-# Work out what was specified to make but not built even if
-# it was not mentioned in the make error output because some
-# child's dependency was not satisfied.
-# Needs raptor --tracking option to set make to use -debug=v
-# An example bit of make output that can be analysed:
-#
-
- File `fred.exe' does not exist.
-  Considering target file `fred.in'.
-   File `fred.in' does not exist.
-    Considering target file `a.o'.
-     File `a.o' does not exist.
-      Considering target file `a.c'.
-       Finished prerequisites of target file `a.c'.
-      No need to remake target `a.c'.
-      Pruning file `a.c'.
-     Finished prerequisites of target file `a.o'.
-    Must remake target `a.o'.
-cc    -c -o a.o a.c
-    Successfully remade target file `a.o'.
-    Considering target file `b.o'.
-     File `b.o' does not exist.
-      Considering target file `b.c'.
-       Finished prerequisites of target file `b.c'.
-      No need to remake target `b.c'.
-      Pruning file `b.c'.
-     Finished prerequisites of target file `b.o'.
-    Must remake target `b.o'.
-cc    -c -o b.o b.c
-    Successfully remade target file `b.o'.
-   Finished prerequisites of target file `fred.in'.
-  Must remake target `fred.in'.
-  Successfully remade target file `fred.in'.
- Finished prerequisites of target file `fred.exe'.
-Must remake target `fred.exe'.
-Successfully remade target file `fred.exe'.
-"""
-
-# The output is a filename followed by a number.  If the number is 0
-# Then the prerequisites that file now exist.
-# If > 0 then the prerequisites for that file could not be completed.
-
-import sys
-from  optparse import OptionParser
-import re
-import os
-from stat import *
-
-def genstats(file,showmissing):
-	filecount = {}
-	startre = re.compile("[\t ]*File `(?P<file>[^']*)' does not exist")
-	endre = re.compile("[\t ]*Finished prerequisites of target file `(?P<file>[^']*)'\..*")
-	for x in file.readlines():
-		g = startre.match(x)
-		if g is not None:
-			filename = g.group('file')
-			try:
-				filecount[filename] += 1
-			except KeyError:
-				filecount[filename] = 1
-		else:
-			g = endre.match(x)
-			if g is not None:
-				filename = g.group('file')
-				try:
-					filecount[filename] -= 1
-				except KeyError:
-					filecount[filename] = 0
-	
-	for k in filecount:
-		if showmissing:
-			if filecount[k] > 0:
-				print "%s: %i" % (k,filecount[k])
-		else:
-			print "%s: %i" % (k,filecount[k])
-
-
-parser = OptionParser(prog = "matchmade",
-	usage = "%prog [-h | options] logfile")
-
-parser.add_option("-m", "--missing-prerequistes", default = False,
-	 action="store_true", dest="missing", help="List those targets whose pre-requisites could not be found or made") 
-
-(options, args) = parser.parse_args()
-
-logname="stdin"
-if len(args) > 0:
-	logname=args[0]
-	file = open(logname,"r")
-else:
-	file = sys.stdin
-
-genstats(file,options.missing)
-
-if file != sys.stdin:
-	file.close()
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Generate some useful statistics from a Raptor build log
+# Work out what was specified to make but not built even if
+# it was not mentioned in the make error output because some
+# child's dependency was not satisfied.
+# Needs raptor --tracking option to set make to use -debug=v
+# An example bit of make output that can be analysed:
+#
+
+ File `fred.exe' does not exist.
+  Considering target file `fred.in'.
+   File `fred.in' does not exist.
+    Considering target file `a.o'.
+     File `a.o' does not exist.
+      Considering target file `a.c'.
+       Finished prerequisites of target file `a.c'.
+      No need to remake target `a.c'.
+      Pruning file `a.c'.
+     Finished prerequisites of target file `a.o'.
+    Must remake target `a.o'.
+cc    -c -o a.o a.c
+    Successfully remade target file `a.o'.
+    Considering target file `b.o'.
+     File `b.o' does not exist.
+      Considering target file `b.c'.
+       Finished prerequisites of target file `b.c'.
+      No need to remake target `b.c'.
+      Pruning file `b.c'.
+     Finished prerequisites of target file `b.o'.
+    Must remake target `b.o'.
+cc    -c -o b.o b.c
+    Successfully remade target file `b.o'.
+   Finished prerequisites of target file `fred.in'.
+  Must remake target `fred.in'.
+  Successfully remade target file `fred.in'.
+ Finished prerequisites of target file `fred.exe'.
+Must remake target `fred.exe'.
+Successfully remade target file `fred.exe'.
+"""
+
+# The output is a filename followed by a number.  If the number is 0
+# Then the prerequisites that file now exist.
+# If > 0 then the prerequisites for that file could not be completed.
+
+import sys
+from  optparse import OptionParser
+import re
+import os
+from stat import *
+
+def genstats(file,showmissing):
+	filecount = {}
+	startre = re.compile("[\t ]*File `(?P<file>[^']*)' does not exist")
+	endre = re.compile("[\t ]*Finished prerequisites of target file `(?P<file>[^']*)'\..*")
+	for x in file.readlines():
+		g = startre.match(x)
+		if g is not None:
+			filename = g.group('file')
+			try:
+				filecount[filename] += 1
+			except KeyError:
+				filecount[filename] = 1
+		else:
+			g = endre.match(x)
+			if g is not None:
+				filename = g.group('file')
+				try:
+					filecount[filename] -= 1
+				except KeyError:
+					filecount[filename] = 0
+	
+	for k in filecount:
+		if showmissing:
+			if filecount[k] > 0:
+				print "%s: %i" % (k,filecount[k])
+		else:
+			print "%s: %i" % (k,filecount[k])
+
+
+parser = OptionParser(prog = "matchmade",
+	usage = "%prog [-h | options] logfile")
+
+parser.add_option("-m", "--missing-prerequistes", default = False,
+	 action="store_true", dest="missing", help="List those targets whose pre-requisites could not be found or made") 
+
+(options, args) = parser.parse_args()
+
+logname="stdin"
+if len(args) > 0:
+	logname=args[0]
+	file = open(logname,"r")
+else:
+	file = sys.stdin
+
+genstats(file,options.missing)
+
+if file != sys.stdin:
+	file.close()
--- a/sbsv2/raptor/bin/oby2linux.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/oby2linux.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,73 +1,73 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# oby2linux
-#
-
-"""
-  Convert an OBY file into a form that rombuild on Linux can use.
-  This involves converting paths etc.  In addition it finds those target
-  files whose case may not match what exists on the filesystem
-  (a build must have been completed).
- 
-  It also fills in those items that weren't built from a directory 
-  containing a prebuild epoc32 dir.
-"""
-
-
-import sys
-import os
-import re
-
-sys.path.append(os.environ['SBS_HOME']+'/python')
-import generic_path
-
-epocroot = os.environ['EPOCROOT']
-
-try:
-	romfillin_epocroot = os.environ['ROMFILLIN_EPOCROOT']
-except:
-	sys.stderr.write("Please set ROMFILLIN_EPOCROOT to a path with an epoc32 directory\n")
-	sys.exit(1)
-
-if not os.path.isdir(romfillin_epocroot+'/epoc32'):
-	sys.stderr.write("Please set ROMFILLIN_EPOCROOT to a path with an epoc32 directory\n")
-	sys.exit(1)
-
-filestatement_re=re.compile("^(?P<pre>((((primary)|(secondary)|(extension)|(device)|(variant))(\[0x[0-9a-zA-Z]+\])?=)|((file)|(data)|(bootbinary))=))(?P<filename>\S+)(?P<tail>.*)$")
-
-for line in sys.stdin.xreadlines():
-	line = line.rstrip()
-	m = filestatement_re.search(line)
-	if m is not None:
-		fname =  m.groupdict()['filename'].replace('\\','/').strip('"')
-		filename = generic_path.Path(epocroot + fname)
-		filefound = filename.FindCaseless()
-		if filefound is not None:
-			print m.groupdict()['pre'] + str(filefound) + m.groupdict()['tail']
-			#print filefound
-		else:
-			fillinname = generic_path.Path(romfillin_epocroot+fname)
-			filefound =  fillinname.FindCaseless()
-			if filefound is not None:
-				sys.stderr.write("filledinmissing: %s\n" % str(filefound))
-				print m.groupdict()['pre'] + str(filefound) + m.groupdict()['tail']
-				#print filefound
-			else:
-				sys.stderr.write("filenotfound: %s\n" % str(filename))
-	else:
-		print line
-
-	
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# oby2linux
+#
+
+"""
+  Convert an OBY file into a form that rombuild on Linux can use.
+  This involves converting paths etc.  In addition it finds those target
+  files whose case may not match what exists on the filesystem
+  (a build must have been completed).
+ 
+  It also fills in those items that weren't built from a directory 
+  containing a prebuild epoc32 dir.
+"""
+
+
+import sys
+import os
+import re
+
+sys.path.append(os.environ['SBS_HOME']+'/python')
+import generic_path
+
+epocroot = os.environ['EPOCROOT']
+
+try:
+	romfillin_epocroot = os.environ['ROMFILLIN_EPOCROOT']
+except:
+	sys.stderr.write("Please set ROMFILLIN_EPOCROOT to a path with an epoc32 directory\n")
+	sys.exit(1)
+
+if not os.path.isdir(romfillin_epocroot+'/epoc32'):
+	sys.stderr.write("Please set ROMFILLIN_EPOCROOT to a path with an epoc32 directory\n")
+	sys.exit(1)
+
+filestatement_re=re.compile("^(?P<pre>((((primary)|(secondary)|(extension)|(device)|(variant))(\[0x[0-9a-zA-Z]+\])?=)|((file)|(data)|(bootbinary))=))(?P<filename>\S+)(?P<tail>.*)$")
+
+for line in sys.stdin.xreadlines():
+	line = line.rstrip()
+	m = filestatement_re.search(line)
+	if m is not None:
+		fname =  m.groupdict()['filename'].replace('\\','/').strip('"')
+		filename = generic_path.Path(epocroot + fname)
+		filefound = filename.FindCaseless()
+		if filefound is not None:
+			print m.groupdict()['pre'] + str(filefound) + m.groupdict()['tail']
+			#print filefound
+		else:
+			fillinname = generic_path.Path(romfillin_epocroot+fname)
+			filefound =  fillinname.FindCaseless()
+			if filefound is not None:
+				sys.stderr.write("filledinmissing: %s\n" % str(filefound))
+				print m.groupdict()['pre'] + str(filefound) + m.groupdict()['tail']
+				#print filefound
+			else:
+				sys.stderr.write("filenotfound: %s\n" % str(filename))
+	else:
+		print line
+
+	
+
--- a/sbsv2/raptor/bin/osbuild.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/osbuild.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,264 +1,264 @@
-#!/bin/sh
-
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Build automation for Symbian OS with Raptor
-# Author: Timothy N Murphy
-# 
-#
-
-# Default settings.  You may override these by specifying a setup script
-# as the first commandline argument
-#
-H=$HOME
-export H
-export EPOCROOT="$H/baselineos"
-export LOGBASEDIR=~/public_html/buildlogs
-export BUILDROOT="$H/baselineos"
-export SOURCEROOT="$H/baselineos/fsupdate"
-export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
-export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
-export PLATFORMS="-c armv5"
-export PARALLEL=46
-export SYNCSBSSOURCE=""
-export UNSPLITDIRS="$SBS_HOME/unsplitdirs.py"
-
-# Do we want to attempt to build a ROM?
-export DOROMBUILD=""
-export ROMFILLIN_EPOCROOT=$BUILDROOT/rom_fillin
-#  We need to specify the OBY file (must be generated on windows)
-export ROMOBYFILE="$BUILDROOT/h4hrp_001.techview.oby" 
-
-# Do you have server that runs evalid automatically?
-export SENDTOEVALIDSERVER=""
-#  The following should be mounted:
-export EVALIDSERVERMOUNT="/mnt/evalidserver"
-export USERBUILDID=""
-
-
-# Allow overrides to this default config
-if [ ! -z $1 ]; then 
-	if [ -f "$1" ]; then
-		. $1
-	else
-		echo "You must supply a build type as the first parameter - this should be a setup script"
-		exit 1
-	fi
-fi
-
-
-genstats() { 
-if [ "$1.stats"  -ot "$1.log" ]; then
-python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
-#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
-(
-	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
-)
-fi;
-}
-
-cd $BUILDROOT
-
-
-# Don't edit the rest:
-###################################################
-export KEY=`date +%d_%m_%y`
-export DAILYDIR="$LOGBASEDIR/$KEY"
-
-export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
-if [ ! -z "$USERBUILDID" ]; then
-	BUILDNAME="$USERBUILDID-$BUILDNAME"
-fi
-export LOGNAME="${BUILDNAME}_${KEY}"
-
-for BUILDNUM in {1..50}; do
-	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
-		break
-	fi
-	if [ -z "`echo $DAILYDIR/$BUILDNUM/*_BUILDNUM.log*`" ]; then
-		break
-	fi
-done
-
-OUTDIR="$DAILYDIR/$BUILDNUM"
-export TESTLOG="$OUTDIR/test.log"
-
-# make the day's directory
-mkdir -p "$OUTDIR"
-
-echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
-echo '<testrun>' > "$TESTLOG"
-
-echo "Parallel: $PARALLEL"
-(
-echo "<test type='performance' name='speedtest' >"
-echo "	<parameters parallel='$PARALLEL' start='`date`' />"
-echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
-MAKEFILE=$EPOCROOT/epoc32/build/Makefile
-echo ""
-
-TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
-
-echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
-if [ ! -d "$OUTDIR" ]; then
-	mkdir -p "$OUTDIR" || exit 1
-fi
-set -x
-
-(
-if [ ! -z "$SYNCSBSSOURCE" ]; then
-	echo "Checking out Raptor source to $SBS_HOME"
-	p4 -u timothymurphy sync $SBS_HOME/...
-else
-	echo "NOT Checking out Raptor source"
-fi
-chmod a+x $SBS_HOME/bin/* # ensure permissions were set
-)
-
-
-# Make sure that our "stop signal" is clear
-SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
-rm -f "$SIGNALTOSTOPFILE"
-
-
-echo "EPOCROOT is $EPOCROOT"
-export PATH=$EPOCROOT/epoc32/tools:$PATH
-
-(
-echo "Annihilating epoc32 tree(s)"
-# wipe the epoc32 directory first
-chmod -R u+rw "$EPOCROOT/epoc32" &&
-rm -rf "$EPOCROOT/epoc32" &&
-echo "epoc32 tree withered" 
-) 
-(
-# unzip the pre-prepared epoc32 trees
-cd $EPOCROOT && 	
-(
-	set -x
-	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' |  xargs -n 1 --replace bash -c "if [ -f '{}' ]; then touch '{}'; fi" && 
-	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' |  xargs -n 1 --replace bash -c "if [ -f '{}' ]; then touch '{}'; fi" &&
-	set +x
-) > "$OUTDIR/unzip" &&
-chmod -R u+rw "$EPOCROOT/epoc32" &&
-echo "unzipped skeleton epoc32 tree" 
-)
-
-
-# (re)Initialise the cluster if required.
-(
-if [ ! -z "$PARALLEL" ]; then
-	echo "Setting up cluster"
-	echo "Parallel: $PARALLEL"
-	set -x
-	echo -e "halt\n" | pvm >/dev/null
-	echo -e "quit\n" | pvm $BUILDROOT/pvmhosts.$PARALLEL >/dev/null
-	set +x
-else
-	echo "Parallel: 0 - no cluster setup"
-	set -x
-	echo -e "halt\n" | pvm >/dev/null
-	set +x
-fi
-)
-
-
-set +x
-echo "Prepping makefiles"
-(
-	echo "<times>\n"
-	export TIMEFORMAT="<time stage='prepmake'>%3R</time>\n"
-	time $SBS_HOME/bin/sbs -d -k -s "$SYSDEF" -a "$SOURCEROOT" $PLATFORMS -n > $OUTDIR/${LOGNAME}_$BUILDNUM.meta 2>&1 
-	#time cp performance_Makefile $MAKEFILE
-)  > "$TIMELOG" 2>&1
-echo "Running Make"
-(
-	# The build process
-	export TIMEFORMAT="<time stage='make' parallel='$PARALLEL'>%3R</time>\n"
-
-	time /opt/symbian/make-pvm-381/pvmgmake -j$PARALLEL -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log"  2>&1 
-	touch "$SIGNALTOSTOPFILE"
-	echo "</times>\n"
-) >> "$TIMELOG" 2>&1 & 
-(
-	# Concurrent process to continuously update statistics
-	echo ""
-
-	while [ 1 -eq 1 ]; do
-		sleep 20 
-		echo -n "."
-
-		if [ -e "$SIGNALTOSTOPFILE" ]; then
-			rm -f "$SIGNALTOSTOPFILE"
-			break
-		fi
-	done
-	echo ""
-)
-#set +x
-#genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
-(
-	echo "UNSPLITTING DIRECTORIES"
-        set -x
-        cd $EPOCROOT/epoc32 &&
-        python $UNSPLITDIRS -l . &&
-        set +x
-
-) && (
-	if [ ! -z "$DOROMBUILD" ]; then
-		echo "Building ROM"
-		set -x
-		cd $EPOCROOT &&
-        	unzip -o $BUILDROOT/data.zip >/dev/null &&
-		python $BUILDROOT/oby_tolinux.py < "$ROMOBYFILE" >PROCESSED_H4HRP_001.TECHVIEW.OBY
-		$EPOCROOT/epoc32/tools/rombuild -type-safe-link PROCESSED_H4HRP_001.TECHVIEW.OBY
-		cp
-		set +x
-	else
-		echo "NOT Building ROM"
-	fi
-)
-
-(
-	if [ ! -z "$SENDTOEVALIDSERVER" ]; then
-        	echo "Sending epoc32/release and epoc32/data to the evalidserver"
-		set -x
-		ZIPFILE="$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.zip"
-		cd $EPOCROOT &&
-		find epoc32/release epoc32/data | zip "$ZIPFILE" -@ >/dev/null 2>&1 &&
-		cp "$ZIPFILE" /mnt/evalidserver 
-		set +x
-	else
-        	echo "NOT sending epoc32/release and epoc32/data to the evalidserver"
-	fi
-)
-
-# Zip the logs - note that test.log should not be zipped since the output from the zip goes into it
-(
-	echo "Zipping logs..."
-	set -x
-	cd $OUTDIR &&
-	zip ${LOGNAME}_${BUILDNUM}_logs.zip *.time *.meta *.log *.preexport -x test.log
-	set +x
-)
-
-
-echo "	]]></build>"
-echo "</test>"
-) >> "$TESTLOG" 2>&1
-
-BUILDNUM=$[ $BUILDNUM + 1 ]
-# use a new output directory
-echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
-echo "</testrun>" >> "$TESTLOG"
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Build automation for Symbian OS with Raptor
+# Author: Timothy N Murphy
+# 
+#
+
+# Default settings.  You may override these by specifying a setup script
+# as the first commandline argument
+#
+H=$HOME
+export H
+export EPOCROOT="$H/baselineos"
+export LOGBASEDIR=~/public_html/buildlogs
+export BUILDROOT="$H/baselineos"
+export SOURCEROOT="$H/baselineos/fsupdate"
+export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
+export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
+export PLATFORMS="-c armv5"
+export PARALLEL=46
+export SYNCSBSSOURCE=""
+export UNSPLITDIRS="$SBS_HOME/unsplitdirs.py"
+
+# Do we want to attempt to build a ROM?
+export DOROMBUILD=""
+export ROMFILLIN_EPOCROOT=$BUILDROOT/rom_fillin
+#  We need to specify the OBY file (must be generated on windows)
+export ROMOBYFILE="$BUILDROOT/h4hrp_001.techview.oby" 
+
+# Do you have server that runs evalid automatically?
+export SENDTOEVALIDSERVER=""
+#  The following should be mounted:
+export EVALIDSERVERMOUNT="/mnt/evalidserver"
+export USERBUILDID=""
+
+
+# Allow overrides to this default config
+if [ ! -z $1 ]; then 
+	if [ -f "$1" ]; then
+		. $1
+	else
+		echo "You must supply a build type as the first parameter - this should be a setup script"
+		exit 1
+	fi
+fi
+
+
+genstats() { 
+if [ "$1.stats"  -ot "$1.log" ]; then
+python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
+#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
+(
+	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
+)
+fi;
+}
+
+cd $BUILDROOT
+
+
+# Don't edit the rest:
+###################################################
+export KEY=`date +%d_%m_%y`
+export DAILYDIR="$LOGBASEDIR/$KEY"
+
+export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
+if [ ! -z "$USERBUILDID" ]; then
+	BUILDNAME="$USERBUILDID-$BUILDNAME"
+fi
+export LOGNAME="${BUILDNAME}_${KEY}"
+
+for BUILDNUM in {1..50}; do
+	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
+		break
+	fi
+	if [ -z "`echo $DAILYDIR/$BUILDNUM/*_BUILDNUM.log*`" ]; then
+		break
+	fi
+done
+
+OUTDIR="$DAILYDIR/$BUILDNUM"
+export TESTLOG="$OUTDIR/test.log"
+
+# make the day's directory
+mkdir -p "$OUTDIR"
+
+echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
+echo '<testrun>' > "$TESTLOG"
+
+echo "Parallel: $PARALLEL"
+(
+echo "<test type='performance' name='speedtest' >"
+echo "	<parameters parallel='$PARALLEL' start='`date`' />"
+echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
+MAKEFILE=$EPOCROOT/epoc32/build/Makefile
+echo ""
+
+TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
+
+echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
+if [ ! -d "$OUTDIR" ]; then
+	mkdir -p "$OUTDIR" || exit 1
+fi
+set -x
+
+(
+if [ ! -z "$SYNCSBSSOURCE" ]; then
+	echo "Checking out Raptor source to $SBS_HOME"
+	p4 -u timothymurphy sync $SBS_HOME/...
+else
+	echo "NOT Checking out Raptor source"
+fi
+chmod a+x $SBS_HOME/bin/* # ensure permissions were set
+)
+
+
+# Make sure that our "stop signal" is clear
+SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
+rm -f "$SIGNALTOSTOPFILE"
+
+
+echo "EPOCROOT is $EPOCROOT"
+export PATH=$EPOCROOT/epoc32/tools:$PATH
+
+(
+echo "Annihilating epoc32 tree(s)"
+# wipe the epoc32 directory first
+chmod -R u+rw "$EPOCROOT/epoc32" &&
+rm -rf "$EPOCROOT/epoc32" &&
+echo "epoc32 tree withered" 
+) 
+(
+# unzip the pre-prepared epoc32 trees
+cd $EPOCROOT && 	
+(
+	set -x
+	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' |  xargs -n 1 --replace bash -c "if [ -f '{}' ]; then touch '{}'; fi" && 
+	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' |  xargs -n 1 --replace bash -c "if [ -f '{}' ]; then touch '{}'; fi" &&
+	set +x
+) > "$OUTDIR/unzip" &&
+chmod -R u+rw "$EPOCROOT/epoc32" &&
+echo "unzipped skeleton epoc32 tree" 
+)
+
+
+# (re)Initialise the cluster if required.
+(
+if [ ! -z "$PARALLEL" ]; then
+	echo "Setting up cluster"
+	echo "Parallel: $PARALLEL"
+	set -x
+	echo -e "halt\n" | pvm >/dev/null
+	echo -e "quit\n" | pvm $BUILDROOT/pvmhosts.$PARALLEL >/dev/null
+	set +x
+else
+	echo "Parallel: 0 - no cluster setup"
+	set -x
+	echo -e "halt\n" | pvm >/dev/null
+	set +x
+fi
+)
+
+
+set +x
+echo "Prepping makefiles"
+(
+	echo "<times>\n"
+	export TIMEFORMAT="<time stage='prepmake'>%3R</time>\n"
+	time $SBS_HOME/bin/sbs -d -k -s "$SYSDEF" -a "$SOURCEROOT" $PLATFORMS -n > $OUTDIR/${LOGNAME}_$BUILDNUM.meta 2>&1 
+	#time cp performance_Makefile $MAKEFILE
+)  > "$TIMELOG" 2>&1
+echo "Running Make"
+(
+	# The build process
+	export TIMEFORMAT="<time stage='make' parallel='$PARALLEL'>%3R</time>\n"
+
+	time /opt/symbian/make-pvm-381/pvmgmake -j$PARALLEL -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log"  2>&1 
+	touch "$SIGNALTOSTOPFILE"
+	echo "</times>\n"
+) >> "$TIMELOG" 2>&1 & 
+(
+	# Concurrent process to continuously update statistics
+	echo ""
+
+	while [ 1 -eq 1 ]; do
+		sleep 20 
+		echo -n "."
+
+		if [ -e "$SIGNALTOSTOPFILE" ]; then
+			rm -f "$SIGNALTOSTOPFILE"
+			break
+		fi
+	done
+	echo ""
+)
+#set +x
+#genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
+(
+	echo "UNSPLITTING DIRECTORIES"
+        set -x
+        cd $EPOCROOT/epoc32 &&
+        python $UNSPLITDIRS -l . &&
+        set +x
+
+) && (
+	if [ ! -z "$DOROMBUILD" ]; then
+		echo "Building ROM"
+		set -x
+		cd $EPOCROOT &&
+        	unzip -o $BUILDROOT/data.zip >/dev/null &&
+		python $BUILDROOT/oby_tolinux.py < "$ROMOBYFILE" >PROCESSED_H4HRP_001.TECHVIEW.OBY
+		$EPOCROOT/epoc32/tools/rombuild -type-safe-link PROCESSED_H4HRP_001.TECHVIEW.OBY
+		cp
+		set +x
+	else
+		echo "NOT Building ROM"
+	fi
+)
+
+(
+	if [ ! -z "$SENDTOEVALIDSERVER" ]; then
+        	echo "Sending epoc32/release and epoc32/data to the evalidserver"
+		set -x
+		ZIPFILE="$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.zip"
+		cd $EPOCROOT &&
+		find epoc32/release epoc32/data | zip "$ZIPFILE" -@ >/dev/null 2>&1 &&
+		cp "$ZIPFILE" /mnt/evalidserver 
+		set +x
+	else
+        	echo "NOT sending epoc32/release and epoc32/data to the evalidserver"
+	fi
+)
+
+# Zip the logs - note that test.log should not be zipped since the output from the zip goes into it
+(
+	echo "Zipping logs..."
+	set -x
+	cd $OUTDIR &&
+	zip ${LOGNAME}_${BUILDNUM}_logs.zip *.time *.meta *.log *.preexport -x test.log
+	set +x
+)
+
+
+echo "	]]></build>"
+echo "</test>"
+) >> "$TESTLOG" 2>&1
+
+BUILDNUM=$[ $BUILDNUM + 1 ]
+# use a new output directory
+echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
+echo "</testrun>" >> "$TESTLOG"
--- a/sbsv2/raptor/bin/raptorlog.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/raptorlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,71 +1,71 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-	Raptor log parsing utilities.
-
-	Line-by-line based log reporting.
-"""
-
-import re
-
-
-class LogItem(object):
-	keep = False
-	def __init__(self, name, pattern, keep=False, subpattern=None):
-		self.name = name
-		self.matcher = re.compile(pattern, re.I)
-		self.count = 0
-
-		if subpattern:
-			self.subpattern = re.compile(subpattern,re.I)
-		else:
-			self.subpattern = None
-
-		if keep and LogItem.keep:
-			self.keep = {}
-		else:
-			self.keep = None
-
-		self.subpatterncount = 0
-
-	def xml(self):
-		xml = "<logitem name='%s' count='%i' subpatterncount='%i' " % ( self.name, self.count,  self.subpatterncount)
-		if self.keep == None:
-			return xml + " />"
-
-		xml += ">\n"
-
-		index = self.keep.keys()
-		index.sort(cmp=lambda y,x: self.keep[x] - self.keep[y])
-		for i in index:
-			xml += "<match count='" + str(self.keep[i]) +"'><![CDATA[\n" + i + "]]></match>\n"
-		
-		return xml + "</logitem>"
-
-	def match(self, line):
-		result = self.matcher.search(line)
-		if result != None:
-			if self.keep != None:
-				try:
-					self.keep[result.group()] += 1
-				except:
-					self.keep[result.group()] = 1
-			if self.subpattern != None:
-				self.subpatterncount += len(self.subpattern.findall(line))
-				for i in self.subpattern.findall(line):
-					print i
-			self.count += 1
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+	Raptor log parsing utilities.
+
+	Line-by-line based log reporting.
+"""
+
+import re
+
+
+class LogItem(object):
+	keep = False
+	def __init__(self, name, pattern, keep=False, subpattern=None):
+		self.name = name
+		self.matcher = re.compile(pattern, re.I)
+		self.count = 0
+
+		if subpattern:
+			self.subpattern = re.compile(subpattern,re.I)
+		else:
+			self.subpattern = None
+
+		if keep and LogItem.keep:
+			self.keep = {}
+		else:
+			self.keep = None
+
+		self.subpatterncount = 0
+
+	def xml(self):
+		xml = "<logitem name='%s' count='%i' subpatterncount='%i' " % ( self.name, self.count,  self.subpatterncount)
+		if self.keep == None:
+			return xml + " />"
+
+		xml += ">\n"
+
+		index = self.keep.keys()
+		index.sort(cmp=lambda y,x: self.keep[x] - self.keep[y])
+		for i in index:
+			xml += "<match count='" + str(self.keep[i]) +"'><![CDATA[\n" + i + "]]></match>\n"
+		
+		return xml + "</logitem>"
+
+	def match(self, line):
+		result = self.matcher.search(line)
+		if result != None:
+			if self.keep != None:
+				try:
+					self.keep[result.group()] += 1
+				except:
+					self.keep[result.group()] = 1
+			if self.subpattern != None:
+				self.subpatterncount += len(self.subpattern.findall(line))
+				for i in self.subpattern.findall(line):
+					print i
+			self.count += 1
+
--- a/sbsv2/raptor/bin/readme.txt	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/readme.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-The distribution of the file is based on the follwing article ID:326922 Rev.5 from Microsoft Knowledge Base.
-
-http://support.microsoft.com/kb/326922
-
-
-Article ID: 326922 - Last Review: March 19, 2008 - Revision: 5.0
-Redistribution of the shared C runtime component in Visual C++
-
-
-SUMMARY
-
-When you build an application in Microsoft Visual Studio, and the application uses the C run-time libraries (CRT), distribute the appropriate CRT DLL from the following list with your application:
-
-    * Msvcr90.dll for Microsoft Visual C++ 2008
-    * Msvcr80.dll for Microsoft Visual C++ 2005
-    * Msvcr71.dll for Microsoft Visual C++ .NET 2003 with the Microsoft .NET Framework 1.1
-    * Msvcr70.dll for Microsoft Visual C++ .NET 2002 with the Microsoft .NET Framework 1.0
-
-For Msvcr70.dll or for Msvcr71.dll, you should install the CRT DLL into your application program files directory. You should not install these files into the Windows system directories. For Msvcr80.dll and for Msvcr90.dll, you should install the CRT as Windows side-by-side assemblies.
-
-MORE INFORMATION
-
-The shared CRT DLL has been distributed by Microsoft in the past as a shared system component. This may cause problems when you run applications that are linked to a different version of the CRT on computers that do not have the correct versions of the CRT DLL installed. This is commonly referred to as the "DLL Conflict" problem.
-
-To address this issue, the CRT DLL is no longer considered a system file, therefore, distribute the CRT DLL with any application that relies on it. Because it is no longer a system component, install it in your applications Program Files directory with other application-specific code. This prevents your application from using other versions of the CRT library that may be installed on the system paths.
-
-Visual C++ .NET 2003 or Visual C++ .NET 2002 installs the CRT DLL in the System32 directory on a development system. This is installed as a convenience for the developer. Otherwise, all projects that are built with Visual C++ that link with the shared CRT require a copy of the DLL in the build directory for debugging and execution. Visual C++ 2005 and Visual C++ 2008 install the CRT DLL as a Windows side-by-side assembly on Windows XP and later operating systems. Windows 2000 does not support side-by-side assemblies. On Windows 2000, the CRT DLL is installed in the System32 directory.
-
-When you distribute applications that require the Shared CRT library in the CRT DLL, we recommend that you use the CRT.msm merge module that is included with Visual C++ instead of directly distributing the DLL file.
-
-Windows side-by-side assemblies
-Msvcr80.dll with Visual C++ 2005 and Msvcr90.dll with Visual C++ 2008 are redistributed as Windows side-by-side assemblies except on Windows 2000. You should install these versions of the CRT on target computers by running the Vcredist_x86.exe application that is included with Visual Studio. There are installers for the x64 and IA-64 platforms also. Alternatively, you can use the CRT msm merge module that is supplied with Visual Studio to package the CRT installer into your own setup application. This will make the CRT available as a shared assembly to all applications because it is installed in the \windows\winsxs directory on supported operating systems. 
+The distribution of the file is based on the follwing article ID:326922 Rev.5 from Microsoft Knowledge Base.
+
+http://support.microsoft.com/kb/326922
+
+
+Article ID: 326922 - Last Review: March 19, 2008 - Revision: 5.0
+Redistribution of the shared C runtime component in Visual C++
+
+
+SUMMARY
+
+When you build an application in Microsoft Visual Studio, and the application uses the C run-time libraries (CRT), distribute the appropriate CRT DLL from the following list with your application:
+
+    * Msvcr90.dll for Microsoft Visual C++ 2008
+    * Msvcr80.dll for Microsoft Visual C++ 2005
+    * Msvcr71.dll for Microsoft Visual C++ .NET 2003 with the Microsoft .NET Framework 1.1
+    * Msvcr70.dll for Microsoft Visual C++ .NET 2002 with the Microsoft .NET Framework 1.0
+
+For Msvcr70.dll or for Msvcr71.dll, you should install the CRT DLL into your application program files directory. You should not install these files into the Windows system directories. For Msvcr80.dll and for Msvcr90.dll, you should install the CRT as Windows side-by-side assemblies.
+
+MORE INFORMATION
+
+The shared CRT DLL has been distributed by Microsoft in the past as a shared system component. This may cause problems when you run applications that are linked to a different version of the CRT on computers that do not have the correct versions of the CRT DLL installed. This is commonly referred to as the "DLL Conflict" problem.
+
+To address this issue, the CRT DLL is no longer considered a system file, therefore, distribute the CRT DLL with any application that relies on it. Because it is no longer a system component, install it in your applications Program Files directory with other application-specific code. This prevents your application from using other versions of the CRT library that may be installed on the system paths.
+
+Visual C++ .NET 2003 or Visual C++ .NET 2002 installs the CRT DLL in the System32 directory on a development system. This is installed as a convenience for the developer. Otherwise, all projects that are built with Visual C++ that link with the shared CRT require a copy of the DLL in the build directory for debugging and execution. Visual C++ 2005 and Visual C++ 2008 install the CRT DLL as a Windows side-by-side assembly on Windows XP and later operating systems. Windows 2000 does not support side-by-side assemblies. On Windows 2000, the CRT DLL is installed in the System32 directory.
+
+When you distribute applications that require the Shared CRT library in the CRT DLL, we recommend that you use the CRT.msm merge module that is included with Visual C++ instead of directly distributing the DLL file.
+
+Windows side-by-side assemblies
+Msvcr80.dll with Visual C++ 2005 and Msvcr90.dll with Visual C++ 2008 are redistributed as Windows side-by-side assemblies except on Windows 2000. You should install these versions of the CRT on target computers by running the Vcredist_x86.exe application that is included with Visual Studio. There are installers for the x64 and IA-64 platforms also. Alternatively, you can use the CRT msm merge module that is supplied with Visual Studio to package the CRT installer into your own setup application. This will make the CRT available as a shared assembly to all applications because it is installed in the \windows\winsxs directory on supported operating systems. 
--- a/sbsv2/raptor/bin/sbs.bat	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/sbs.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -1,60 +1,60 @@
-@rem
-@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of the License "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-@SETLOCAL
-@SET HOSTPLATFORM=win 32
-@SET HOSTPLATFORM_DIR=win32
-
-
-@REM Automatically find SBS_HOME if it is not set
-@IF NOT "%SBS_HOME%"==""  goto foundhome
-@SET RAPTORBINDIR=%~dp0
-@SET WD=%cd%
-@cd %RAPTORBINDIR%\..
-@SET SBS_HOME=%cd%
-@cd %WD%
-:foundhome 
-
-@REM Use the python set by the environment if possible
-@SET __PYTHON__=%SBS_PYTHON%
-@IF "%__PYTHON__%"=="" SET __PYTHON__=%SBS_HOME%\win32\python252\python.exe
-
-@REM Use the mingw set by the environment if possible
-@SET __MINGW__=%SBS_MINGW%
-@IF "%__MINGW__%"=="" SET __MINGW__=%SBS_HOME%\win32\mingw
-
-@REM Use the cygwin set by the environment if possible
-@SET __CYGWIN__=%SBS_CYGWIN%
-@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
-
-@REM add to the search path
-@SET PATH=%__MINGW__%\bin;%__CYGWIN__%\bin;%SBS_HOME%\win32\bin;%PATH%
-
-@REM Make sure that /tmp is not set incorrectly for sbs
-@umount -u /tmp >NUL  2>NUL
-@mount -u %TEMP% /tmp >NUL 2>NUL
-@umount -u / >NUL  2>NUL
-@mount -u %__CYGWIN__% / >NUL 2>NUL
-
-@REM Tell CYGWIN not to map unix security attributes to windows to
-@REM prevent raptor from potentially creating read-only files:
-@set CYGWIN=nontsec nosmbntsec
-
-@REM Run Raptor with all the arguments.
-@%__PYTHON__% %SBS_HOME%\python\raptor_start.py %*
-
-@ENDLOCAL
-@cmd /c exit /b %ERRORLEVEL%
+@rem
+@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@SETLOCAL
+@SET HOSTPLATFORM=win 32
+@SET HOSTPLATFORM_DIR=win32
+
+
+@REM Automatically find SBS_HOME if it is not set
+@IF NOT "%SBS_HOME%"==""  goto foundhome
+@SET RAPTORBINDIR=%~dp0
+@SET WD=%cd%
+@cd %RAPTORBINDIR%\..
+@SET SBS_HOME=%cd%
+@cd %WD%
+:foundhome 
+
+@REM Use the python set by the environment if possible
+@SET __PYTHON__=%SBS_PYTHON%
+@IF "%__PYTHON__%"=="" SET __PYTHON__=%SBS_HOME%\win32\python252\python.exe
+
+@REM Use the mingw set by the environment if possible
+@SET __MINGW__=%SBS_MINGW%
+@IF "%__MINGW__%"=="" SET __MINGW__=%SBS_HOME%\win32\mingw
+
+@REM Use the cygwin set by the environment if possible
+@SET __CYGWIN__=%SBS_CYGWIN%
+@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
+
+@REM add to the search path
+@SET PATH=%__MINGW__%\bin;%__CYGWIN__%\bin;%SBS_HOME%\win32\bin;%PATH%
+
+@REM Make sure that /tmp is not set incorrectly for sbs
+@umount -u /tmp >NUL  2>NUL
+@mount -u %TEMP% /tmp >NUL 2>NUL
+@umount -u / >NUL  2>NUL
+@mount -u %__CYGWIN__% / >NUL 2>NUL
+
+@REM Tell CYGWIN not to map unix security attributes to windows to
+@REM prevent raptor from potentially creating read-only files:
+@set CYGWIN=nontsec nosmbntsec
+
+@REM Run Raptor with all the arguments.
+@%__PYTHON__% %SBS_HOME%\python\raptor_start.py %*
+
+@ENDLOCAL
+@cmd /c exit /b %ERRORLEVEL%
--- a/sbsv2/raptor/bin/sbsv2cache.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/sbsv2cache.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,311 +1,311 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Creates CBR tool compatible cache files from SBSv2 .whatlog variant output
-#
-
-
-import sys
-import os
-from optparse import OptionParser
-import xml.parsers.expat
-import re
-
-
-# Global dictionary of ComponentReleasable objects, keyed on bld.inf file
-BuildReleasables = {}
-
-# Provide a means to form  "traditional" ABLD-like build platforms and variants from SBSv2 configurations
-ConfigMatch = re.compile(r'^(?P<PLATFORM>\w+)_(?P<VARIANT>\w+)(\.((?P<PLATFORMADD>smp)|\w+))*')
-
-WinscwTreeMatch = re.compile(r'[\\|\/]epoc32[\\|\/]release[\\|\/]winscw[\\|\/](?P<VARIANT>(urel|udeb))[\\|\/]', re.IGNORECASE)
-WinDriveMatch = re.compile(r'[A-Za-z]:')
-
-# $self->{abldcache}->{'<bld.inf location> export -what'} =
-# $self->{abldcache}->{'<bld.inf location> <phase> <platform> <variant> -what'} =
-# $self->{abldcache}->{'plats'} =
-CacheGroupPrefix = "$self->{abldcache}->{\'"
-CacheGroupSuffix = "\'} =\n"
-CacheExportGroup = CacheGroupPrefix+"%s export -what"+CacheGroupSuffix
-CacheBuildOutputGroup = CacheGroupPrefix+"%s %s %s %s -what"+CacheGroupSuffix
-CachePlatsGroup = CacheGroupPrefix+"plats"+CacheGroupSuffix
-CacheListOpen = "\t[\n"
-CacheListItem = "\t\'%s\'"
-CacheListItemPair = "\t[\'%s\', \'%s\']"
-CacheListClose = "\t];\n\n"
-
-
-class ComponentReleasable(object):
-	"""Wraps up a bld.inf file in terms of its packagable releasable output."""
-	
-	# If EPOCROOT is set, provide a means to confirm that potentially publishable releasables live under EPOCROOT/epoc32
-	ReleaseTreeMatch = None
-	if os.environ.has_key("EPOCROOT"):
-		ReleaseTreeMatch = re.compile(r'\"*'+os.path.abspath(os.path.join(os.environ["EPOCROOT"],"epoc32")).replace('\\',r'\/').replace('\/',r'[\\|\/]+')+r'[\\|\/]+', re.IGNORECASE)
-		
-	def __init__(self, aBldInfFile, aVerbose=False):
-		self.__BldInfFile = aBldInfFile
-		self.__Verbose = aVerbose
-		self.__Exports = {}
-		self.__BuildOutput = {}
-		self.__Platforms = {}
-		
-	def __IsReleasableItem(self, aBuildItem):
-		if self.ReleaseTreeMatch and self.ReleaseTreeMatch.match(aBuildItem):
-			return True
-		
-		if self.__Verbose:
-			print "Discarding: \'%s\' from \'%s\' as not in the release tree." % (aBuildItem, self.__BldInfFile)
-		return False
-
-	def __StoreBuildItem(self, aPlatform, aVariant, aBuildItem):
-		if not self.__BuildOutput.has_key(aPlatform):
-			self.__BuildOutput[aPlatform] = {}
-			if aPlatform != "ALL":
-				self.__Platforms[aPlatform.upper()] = 1
-		if not self.__BuildOutput[aPlatform].has_key(aVariant):
-			self.__BuildOutput[aPlatform][aVariant] = {}
-		
-		if aBuildItem:
-			self.__BuildOutput[aPlatform][aVariant][aBuildItem] = 1
-		
-	def AddExport(self, aDestination, aSource):
-		if not self.__IsReleasableItem(aDestination):
-			return
-		self.__Exports[aDestination] = aSource
-
-	def AddBuildOutput(self, aBuildItem, aPlatform="ALL", aVariant="ALL"):
-		if not self.__IsReleasableItem(aBuildItem):
-			return
-		if aPlatform != "ALL" and aVariant == "ALL":
-			self.__StoreBuildItem(aPlatform, "urel", aBuildItem)
-			self.__StoreBuildItem(aPlatform, "udeb", aBuildItem)
-		else:
-			self.__StoreBuildItem(aPlatform, aVariant, aBuildItem)
-		
-	def Finalise(self):
-		# Re-visit the stored build items and, in the context of all build platforms having been processed for the
-		# component, copy platform-generic "ALL" output to the concrete build platform outputs
-		if self.__BuildOutput.has_key("ALL"):
-			allItems = self.__BuildOutput["ALL"]["ALL"].keys()		
-			for platform in self.__BuildOutput.keys():
-				for variant in self.__BuildOutput[platform].keys():
-					for allItem in allItems:
-						self.__StoreBuildItem(platform, variant, allItem)			
-			del self.__BuildOutput["ALL"]
-	
-	def GetBldInf(self):
-		return self.__BldInfFile
-
-	def GetExports(self):
-		return self.__Exports
-
-	def GetBuildOutput(self):
-		return self.__BuildOutput
-
-	def GetPlatforms(self):
-		return self.__Platforms
-
-	def HasReleasables(self):
-		return (self.__BuildOutput or self.__Exports)
-							
-
-def error(aMessage):
-	sys.stderr.write("ERROR: sbsv2cache.py : %s\n" % aMessage)
-	sys.exit(1)
-	
-def processReleasableElement(aContext, aName, aValue, aVerbose):
-	bldinf = aContext["bldinf"]
-	mmp = aContext["mmp"]
-	config = aContext["config"]
-
-	platform = ""
-	variant = ""
-	configMatchResults = ConfigMatch.match(config)
-	if configMatchResults:
-		platform = configMatchResults.group('PLATFORM')
-		variant = configMatchResults.group('VARIANT')	
-		if configMatchResults.group('PLATFORMADD'):
-			platform += configMatchResults.group('PLATFORMADD')
-	
-	if not BuildReleasables.has_key(bldinf):
-		BuildReleasables[bldinf] = ComponentReleasable(bldinf, aVerbose)
-	
-	componentReleasable = BuildReleasables[bldinf]
-	
-	if aName == "export" :
-		componentReleasable.AddExport(aValue["destination"], aValue["source"])
-	elif aName == "member":
-		componentReleasable.AddExport(aValue.keys()[0], aContext["zipfile"])
-	elif aName == "build":
-		componentReleasable.AddBuildOutput(aValue.keys()[0], platform, variant)
-	elif aName == "resource" or aName == "bitmap":
-		item = aValue.keys()[0]
-		# Identify winscw urel/udeb specific resources, and store accordingly
-		winscwTreeMatchResult = WinscwTreeMatch.search(item)
-		if platform == "winscw" and winscwTreeMatchResult:
-			componentReleasable.AddBuildOutput(item, platform, winscwTreeMatchResult.group("VARIANT").lower())
-		else:
-			componentReleasable.AddBuildOutput(item, platform)
-	elif aName == "stringtable":
-		componentReleasable.AddBuildOutput(aValue.keys()[0])			
-
-def parseLog(aLog, aVerbose):
-	if not os.path.exists(aLog):
-		error("Log file %s does not exist." % aLog)
-		
-	parser = xml.parsers.expat.ParserCreate()
-	parser.buffer_text = True
-	
-	elementContext = {}
-	currentElement = []
-		
-	def start_element(name, attributes):
-		if name == "whatlog" or name == "archive":
-			elementContext.update(attributes)
-		elif elementContext.has_key("bldinf"):
-			if name == "export":
-				# Exports are all attributes, so deal with them directly
-				processReleasableElement(elementContext, name, attributes, aVerbose)
-			else:
-				# Other elements wrap values, get these later
-				currentElement.append(name)
-						
-	def end_element(name):
-		if name == "whatlog":
-			elementContext.clear()
-		elif name == "archive":
-			del elementContext["zipfile"]
-	
-	def char_data(data):
-		if elementContext.has_key("bldinf") and currentElement:
-			processReleasableElement(elementContext, currentElement.pop(), {str(data):1}, aVerbose)
-	
-	parser.StartElementHandler = start_element
-	parser.EndElementHandler = end_element
-	parser.CharacterDataHandler = char_data
-
-	try:
-		if aVerbose:
-			print "Parsing: " + aLog
-			
-		parser.ParseFile(open(aLog, "r"))
-	except xml.parsers.expat.ExpatError, e:	
-		error("Failure parsing log file \'%s\' (line %s)" % (aLog, e.lineno))
-
-def normFileForCache(aFile):
-	normedFile = WinDriveMatch.sub("",aFile)
-	normedFile = normedFile.replace("/", "\\")
-	normedFile = normedFile.replace("\\", "\\\\")
-	normedFile = normedFile.replace("\\\\\\\\", "\\\\")
-	normedFile = normedFile.replace("\"", "")
-	return normedFile
-	
-def dumpCacheFileList(aCacheFileObject, aItems, aPairs=False):	
-	numItems = len(aItems)
-	suffix = ",\n"
-	
-	aCacheFileObject.write(CacheListOpen)
-	for item in aItems:
-		if aItems.index(item) == numItems-1:
-			suffix = "\n"			
-		if aPairs:
-			aCacheFileObject.write((CacheListItemPair % (normFileForCache(item[0]), normFileForCache(item[1]))) + suffix)
-		else:
-			aCacheFileObject.write((CacheListItem % normFileForCache(item)) + suffix)
-	aCacheFileObject.write(CacheListClose)
-	
-def createCacheFile(aComponentReleasable, aOutputPath, aSourceExports, aVerbose):	
-	if not aComponentReleasable.HasReleasables():
-		return
-	
-	cacheFileDir = os.path.normpath(\
-				os.path.join(aOutputPath, \
-	            WinDriveMatch.sub("",os.path.dirname(aComponentReleasable.GetBldInf())).lstrip(r'/').lstrip(r'\\')))
-	cacheFile = os.path.join(cacheFileDir, "cache")
-	
-	bldInfLoc = WinDriveMatch.sub("",os.path.dirname(aComponentReleasable.GetBldInf())).replace("/", "\\")
-
-	if aVerbose:
-		print "Creating: " + cacheFile
-	
-	if not os.path.exists(cacheFileDir):
-		os.makedirs(cacheFileDir)
-	
-	try:
-		cacheFileObject = open(cacheFile, 'w')
-	
-		exports = aComponentReleasable.GetExports()
-		if exports:
-			cacheFileObject.write(CacheExportGroup % bldInfLoc)
-			if aSourceExports:
-				dumpCacheFileList(cacheFileObject, exports.items(), True)
-			else:
-				dumpCacheFileList(cacheFileObject, exports.keys())
-	
-		buildOutput = aComponentReleasable.GetBuildOutput()		
-		if buildOutput:
-			for plat in buildOutput.keys():
-				# Most cache output is represented as if performed for the "abld target" phase, but tools platforms
-				# are presented as if performed by "abld build", and so must additionally replicate any exports
-				# performed for the component in their variant output
-				phase = "target"
-				additionalOutput = []
-				if plat == "tools" or plat == "tools2":
-					phase = "build"
-					if exports:
-						additionalOutput = exports.keys()
-				
-				for variant in buildOutput[plat].keys():
-					cacheFileObject.write(CacheBuildOutputGroup % (bldInfLoc, phase, plat, variant))
-					dumpCacheFileList(cacheFileObject, buildOutput[plat][variant].keys() + additionalOutput)
-	
-		cacheFileObject.write(CachePlatsGroup)
-		dumpCacheFileList(cacheFileObject, aComponentReleasable.GetPlatforms().keys())
-		
-		cacheFileObject.close()
-	except IOError:
-		error("Failure creating cache file %s." % cacheFile)
-
-
-def main():
-	parser = OptionParser(prog="sbsv2cache.py")
-	parser.add_option("-l", "--log", action="append", dest="logs", help="log file to parse for <whatlog/> wrapped content.")
-	parser.add_option("-o", "--outputpath", action="store", dest="outputpath", help="root location to generate cache files.")
-	parser.add_option("-s", "--sourceexports", action="store_true", default=False, dest="sourceexports", help="generate cache files where each element in the export array is a ['destination', 'source'] array rather than just a 'destination' element.")
-	parser.add_option("-v", "--verbose", action="store_true", default=False, dest="verbose", help="provide more information as things happen.")
-	
-	(options, leftover_args) = parser.parse_args(sys.argv[1:])
-
-	if leftover_args or not options.logs or not options.outputpath:
-		parser.print_help()
-		sys.exit(1)
-		
-	print "sbsv2cache: started"
-	
-	# Parse build logs to populate the BuildReleasables dictionary
-	for log in options.logs:
-		parseLog(os.path.abspath(log), options.verbose)
-	
-	# Finalise components in BuildReleasables and create cache files as we go
-	for component in BuildReleasables.keys():
-		BuildReleasables[component].Finalise()
-		createCacheFile(BuildReleasables[component], os.path.abspath(options.outputpath), options.sourceexports, options.verbose)
-		
-	print "sbsv2cache: finished"
-	
-if __name__ == "__main__":
-	main()
-	
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Creates CBR tool compatible cache files from SBSv2 .whatlog variant output
+#
+
+
+import sys
+import os
+from optparse import OptionParser
+import xml.parsers.expat
+import re
+
+
+# Global dictionary of ComponentReleasable objects, keyed on bld.inf file
+BuildReleasables = {}
+
+# Provide a means to form  "traditional" ABLD-like build platforms and variants from SBSv2 configurations
+ConfigMatch = re.compile(r'^(?P<PLATFORM>\w+)_(?P<VARIANT>\w+)(\.((?P<PLATFORMADD>smp)|\w+))*')
+
+WinscwTreeMatch = re.compile(r'[\\|\/]epoc32[\\|\/]release[\\|\/]winscw[\\|\/](?P<VARIANT>(urel|udeb))[\\|\/]', re.IGNORECASE)
+WinDriveMatch = re.compile(r'[A-Za-z]:')
+
+# $self->{abldcache}->{'<bld.inf location> export -what'} =
+# $self->{abldcache}->{'<bld.inf location> <phase> <platform> <variant> -what'} =
+# $self->{abldcache}->{'plats'} =
+CacheGroupPrefix = "$self->{abldcache}->{\'"
+CacheGroupSuffix = "\'} =\n"
+CacheExportGroup = CacheGroupPrefix+"%s export -what"+CacheGroupSuffix
+CacheBuildOutputGroup = CacheGroupPrefix+"%s %s %s %s -what"+CacheGroupSuffix
+CachePlatsGroup = CacheGroupPrefix+"plats"+CacheGroupSuffix
+CacheListOpen = "\t[\n"
+CacheListItem = "\t\'%s\'"
+CacheListItemPair = "\t[\'%s\', \'%s\']"
+CacheListClose = "\t];\n\n"
+
+
+class ComponentReleasable(object):
+	"""Wraps up a bld.inf file in terms of its packagable releasable output."""
+	
+	# If EPOCROOT is set, provide a means to confirm that potentially publishable releasables live under EPOCROOT/epoc32
+	ReleaseTreeMatch = None
+	if os.environ.has_key("EPOCROOT"):
+		ReleaseTreeMatch = re.compile(r'\"*'+os.path.abspath(os.path.join(os.environ["EPOCROOT"],"epoc32")).replace('\\',r'\/').replace('\/',r'[\\|\/]+')+r'[\\|\/]+', re.IGNORECASE)
+		
+	def __init__(self, aBldInfFile, aVerbose=False):
+		self.__BldInfFile = aBldInfFile
+		self.__Verbose = aVerbose
+		self.__Exports = {}
+		self.__BuildOutput = {}
+		self.__Platforms = {}
+		
+	def __IsReleasableItem(self, aBuildItem):
+		if self.ReleaseTreeMatch and self.ReleaseTreeMatch.match(aBuildItem):
+			return True
+		
+		if self.__Verbose:
+			print "Discarding: \'%s\' from \'%s\' as not in the release tree." % (aBuildItem, self.__BldInfFile)
+		return False
+
+	def __StoreBuildItem(self, aPlatform, aVariant, aBuildItem):
+		if not self.__BuildOutput.has_key(aPlatform):
+			self.__BuildOutput[aPlatform] = {}
+			if aPlatform != "ALL":
+				self.__Platforms[aPlatform.upper()] = 1
+		if not self.__BuildOutput[aPlatform].has_key(aVariant):
+			self.__BuildOutput[aPlatform][aVariant] = {}
+		
+		if aBuildItem:
+			self.__BuildOutput[aPlatform][aVariant][aBuildItem] = 1
+		
+	def AddExport(self, aDestination, aSource):
+		if not self.__IsReleasableItem(aDestination):
+			return
+		self.__Exports[aDestination] = aSource
+
+	def AddBuildOutput(self, aBuildItem, aPlatform="ALL", aVariant="ALL"):
+		if not self.__IsReleasableItem(aBuildItem):
+			return
+		if aPlatform != "ALL" and aVariant == "ALL":
+			self.__StoreBuildItem(aPlatform, "urel", aBuildItem)
+			self.__StoreBuildItem(aPlatform, "udeb", aBuildItem)
+		else:
+			self.__StoreBuildItem(aPlatform, aVariant, aBuildItem)
+		
+	def Finalise(self):
+		# Re-visit the stored build items and, in the context of all build platforms having been processed for the
+		# component, copy platform-generic "ALL" output to the concrete build platform outputs
+		if self.__BuildOutput.has_key("ALL"):
+			allItems = self.__BuildOutput["ALL"]["ALL"].keys()		
+			for platform in self.__BuildOutput.keys():
+				for variant in self.__BuildOutput[platform].keys():
+					for allItem in allItems:
+						self.__StoreBuildItem(platform, variant, allItem)			
+			del self.__BuildOutput["ALL"]
+	
+	def GetBldInf(self):
+		return self.__BldInfFile
+
+	def GetExports(self):
+		return self.__Exports
+
+	def GetBuildOutput(self):
+		return self.__BuildOutput
+
+	def GetPlatforms(self):
+		return self.__Platforms
+
+	def HasReleasables(self):
+		return (self.__BuildOutput or self.__Exports)
+							
+
+def error(aMessage):
+	sys.stderr.write("ERROR: sbsv2cache.py : %s\n" % aMessage)
+	sys.exit(1)
+	
+def processReleasableElement(aContext, aName, aValue, aVerbose):
+	bldinf = aContext["bldinf"]
+	mmp = aContext["mmp"]
+	config = aContext["config"]
+
+	platform = ""
+	variant = ""
+	configMatchResults = ConfigMatch.match(config)
+	if configMatchResults:
+		platform = configMatchResults.group('PLATFORM')
+		variant = configMatchResults.group('VARIANT')	
+		if configMatchResults.group('PLATFORMADD'):
+			platform += configMatchResults.group('PLATFORMADD')
+	
+	if not BuildReleasables.has_key(bldinf):
+		BuildReleasables[bldinf] = ComponentReleasable(bldinf, aVerbose)
+	
+	componentReleasable = BuildReleasables[bldinf]
+	
+	if aName == "export" :
+		componentReleasable.AddExport(aValue["destination"], aValue["source"])
+	elif aName == "member":
+		componentReleasable.AddExport(aValue.keys()[0], aContext["zipfile"])
+	elif aName == "build":
+		componentReleasable.AddBuildOutput(aValue.keys()[0], platform, variant)
+	elif aName == "resource" or aName == "bitmap":
+		item = aValue.keys()[0]
+		# Identify winscw urel/udeb specific resources, and store accordingly
+		winscwTreeMatchResult = WinscwTreeMatch.search(item)
+		if platform == "winscw" and winscwTreeMatchResult:
+			componentReleasable.AddBuildOutput(item, platform, winscwTreeMatchResult.group("VARIANT").lower())
+		else:
+			componentReleasable.AddBuildOutput(item, platform)
+	elif aName == "stringtable":
+		componentReleasable.AddBuildOutput(aValue.keys()[0])			
+
+def parseLog(aLog, aVerbose):
+	if not os.path.exists(aLog):
+		error("Log file %s does not exist." % aLog)
+		
+	parser = xml.parsers.expat.ParserCreate()
+	parser.buffer_text = True
+	
+	elementContext = {}
+	currentElement = []
+		
+	def start_element(name, attributes):
+		if name == "whatlog" or name == "archive":
+			elementContext.update(attributes)
+		elif elementContext.has_key("bldinf"):
+			if name == "export":
+				# Exports are all attributes, so deal with them directly
+				processReleasableElement(elementContext, name, attributes, aVerbose)
+			else:
+				# Other elements wrap values, get these later
+				currentElement.append(name)
+						
+	def end_element(name):
+		if name == "whatlog":
+			elementContext.clear()
+		elif name == "archive":
+			del elementContext["zipfile"]
+	
+	def char_data(data):
+		if elementContext.has_key("bldinf") and currentElement:
+			processReleasableElement(elementContext, currentElement.pop(), {str(data):1}, aVerbose)
+	
+	parser.StartElementHandler = start_element
+	parser.EndElementHandler = end_element
+	parser.CharacterDataHandler = char_data
+
+	try:
+		if aVerbose:
+			print "Parsing: " + aLog
+			
+		parser.ParseFile(open(aLog, "r"))
+	except xml.parsers.expat.ExpatError, e:	
+		error("Failure parsing log file \'%s\' (line %s)" % (aLog, e.lineno))
+
+def normFileForCache(aFile):
+	normedFile = WinDriveMatch.sub("",aFile)
+	normedFile = normedFile.replace("/", "\\")
+	normedFile = normedFile.replace("\\", "\\\\")
+	normedFile = normedFile.replace("\\\\\\\\", "\\\\")
+	normedFile = normedFile.replace("\"", "")
+	return normedFile
+	
+def dumpCacheFileList(aCacheFileObject, aItems, aPairs=False):	
+	numItems = len(aItems)
+	suffix = ",\n"
+	
+	aCacheFileObject.write(CacheListOpen)
+	for item in aItems:
+		if aItems.index(item) == numItems-1:
+			suffix = "\n"			
+		if aPairs:
+			aCacheFileObject.write((CacheListItemPair % (normFileForCache(item[0]), normFileForCache(item[1]))) + suffix)
+		else:
+			aCacheFileObject.write((CacheListItem % normFileForCache(item)) + suffix)
+	aCacheFileObject.write(CacheListClose)
+	
+def createCacheFile(aComponentReleasable, aOutputPath, aSourceExports, aVerbose):	
+	if not aComponentReleasable.HasReleasables():
+		return
+	
+	cacheFileDir = os.path.normpath(\
+				os.path.join(aOutputPath, \
+	            WinDriveMatch.sub("",os.path.dirname(aComponentReleasable.GetBldInf())).lstrip(r'/').lstrip(r'\\')))
+	cacheFile = os.path.join(cacheFileDir, "cache")
+	
+	bldInfLoc = WinDriveMatch.sub("",os.path.dirname(aComponentReleasable.GetBldInf())).replace("/", "\\")
+
+	if aVerbose:
+		print "Creating: " + cacheFile
+	
+	if not os.path.exists(cacheFileDir):
+		os.makedirs(cacheFileDir)
+	
+	try:
+		cacheFileObject = open(cacheFile, 'w')
+	
+		exports = aComponentReleasable.GetExports()
+		if exports:
+			cacheFileObject.write(CacheExportGroup % bldInfLoc)
+			if aSourceExports:
+				dumpCacheFileList(cacheFileObject, exports.items(), True)
+			else:
+				dumpCacheFileList(cacheFileObject, exports.keys())
+	
+		buildOutput = aComponentReleasable.GetBuildOutput()		
+		if buildOutput:
+			for plat in buildOutput.keys():
+				# Most cache output is represented as if performed for the "abld target" phase, but tools platforms
+				# are presented as if performed by "abld build", and so must additionally replicate any exports
+				# performed for the component in their variant output
+				phase = "target"
+				additionalOutput = []
+				if plat == "tools" or plat == "tools2":
+					phase = "build"
+					if exports:
+						additionalOutput = exports.keys()
+				
+				for variant in buildOutput[plat].keys():
+					cacheFileObject.write(CacheBuildOutputGroup % (bldInfLoc, phase, plat, variant))
+					dumpCacheFileList(cacheFileObject, buildOutput[plat][variant].keys() + additionalOutput)
+	
+		cacheFileObject.write(CachePlatsGroup)
+		dumpCacheFileList(cacheFileObject, aComponentReleasable.GetPlatforms().keys())
+		
+		cacheFileObject.close()
+	except IOError:
+		error("Failure creating cache file %s." % cacheFile)
+
+
+def main():
+	parser = OptionParser(prog="sbsv2cache.py")
+	parser.add_option("-l", "--log", action="append", dest="logs", help="log file to parse for <whatlog/> wrapped content.")
+	parser.add_option("-o", "--outputpath", action="store", dest="outputpath", help="root location to generate cache files.")
+	parser.add_option("-s", "--sourceexports", action="store_true", default=False, dest="sourceexports", help="generate cache files where each element in the export array is a ['destination', 'source'] array rather than just a 'destination' element.")
+	parser.add_option("-v", "--verbose", action="store_true", default=False, dest="verbose", help="provide more information as things happen.")
+	
+	(options, leftover_args) = parser.parse_args(sys.argv[1:])
+
+	if leftover_args or not options.logs or not options.outputpath:
+		parser.print_help()
+		sys.exit(1)
+		
+	print "sbsv2cache: started"
+	
+	# Parse build logs to populate the BuildReleasables dictionary
+	for log in options.logs:
+		parseLog(os.path.abspath(log), options.verbose)
+	
+	# Finalise components in BuildReleasables and create cache files as we go
+	for component in BuildReleasables.keys():
+		BuildReleasables[component].Finalise()
+		createCacheFile(BuildReleasables[component], os.path.abspath(options.outputpath), options.sourceexports, options.verbose)
+		
+	print "sbsv2cache: finished"
+	
+if __name__ == "__main__":
+	main()
+	
+
--- a/sbsv2/raptor/bin/setup_user.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/setup_user.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,41 +1,41 @@
-#!/bin/bash
-
-# Add environment settings to user's 
-# .bashrc
-# .bash_profile
-
-# Add a .pvmrc
-
-. `dirname $0`/user.bash_profile
-
-
-echo "Configuring user account $USER for sbsv2 in: $SBS_HOME"
-
-if [ ! -d "$SBS_HOME" ]; then
-	echo "SBS_HOME appears to not be set correctly: $SBS_HOME" 1>&2
-	exit 1
-fi
-
-patchfile()
-{
-echo "Adding '$2' to $1"
-grep -q '# SBS_SETTINGS' "$1"
-if [ $? -eq 0 ]; then 
-	sed "s%.* # SBS_SETTINGS (do not edit this line).*%$2 # SBS_SETTINGS (do not edit this line)%"  "$1" > "$1.sbsv2" &&
-	mv "$1" "$1.orig" &&
-	mv "$1.sbsv2" "$1"
-else
-	cp "$1" "$1.orig" &&
-	echo "$2 # SBS_SETTINGS (do not edit this line)" >> "$1"
-fi
-}
-
-# Patch the bash profile
-patchfile ~/.bash_profile ". $SBS_HOME/bin/user.bash_profile"
-patchfile ~/.bashrc ". $SBS_HOME/bin/user.bashrc"
-
-if [ -f ~/.pvmrc ]; then
-       cp ~/.pvmrc ~/.pvmrc.orig
-fi
-
-cp $SBS_HOME/util/install-linux/linux_pvmrc ~/.pvmrc
+#!/bin/bash
+
+# Add environment settings to user's 
+# .bashrc
+# .bash_profile
+
+# Add a .pvmrc
+
+. `dirname $0`/user.bash_profile
+
+
+echo "Configuring user account $USER for sbsv2 in: $SBS_HOME"
+
+if [ ! -d "$SBS_HOME" ]; then
+	echo "SBS_HOME appears to not be set correctly: $SBS_HOME" 1>&2
+	exit 1
+fi
+
+patchfile()
+{
+echo "Adding '$2' to $1"
+grep -q '# SBS_SETTINGS' "$1"
+if [ $? -eq 0 ]; then 
+	sed "s%.* # SBS_SETTINGS (do not edit this line).*%$2 # SBS_SETTINGS (do not edit this line)%"  "$1" > "$1.sbsv2" &&
+	mv "$1" "$1.orig" &&
+	mv "$1.sbsv2" "$1"
+else
+	cp "$1" "$1.orig" &&
+	echo "$2 # SBS_SETTINGS (do not edit this line)" >> "$1"
+fi
+}
+
+# Patch the bash profile
+patchfile ~/.bash_profile ". $SBS_HOME/bin/user.bash_profile"
+patchfile ~/.bashrc ". $SBS_HOME/bin/user.bashrc"
+
+if [ -f ~/.pvmrc ]; then
+       cp ~/.pvmrc ~/.pvmrc.orig
+fi
+
+cp $SBS_HOME/util/install-linux/linux_pvmrc ~/.pvmrc
--- a/sbsv2/raptor/bin/speedtest_osbuild.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/speedtest_osbuild.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,166 +1,166 @@
-#!/bin/sh
-
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Build automation for Symbian OS with Raptor
-# Author: Timothy N Murphy
-# 
-#
-
-# You can edit these:
-H=/home/tmurphy
-export H
-export EPOCROOT="$H/baselineos"
-export LOGBASEDIR=~/public_html/buildlogs
-export BUILDROOT="$H/baselineos"
-export SOURCEROOT="$H/baselineos/fsupdate"
-export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
-export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
-#export PARALLEL=0
-
-genstats() { 
-if [ "$1.stats"  -ot "$1.log" ]; then
-python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
-#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
-(
-	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
-)
-fi;
-}
-
-cd $BUILDROOT
-
-
-# Don't edit the rest:
-###################################################
-export KEY=`date +%d_%m_%y`
-export DAILYDIR="$LOGBASEDIR/$KEY"
-export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
-export LOGNAME="${BUILDNAME}_${KEY}"
-export PLATFORM=armv5
-export TESTLOG="$DAILYDIR/parallel_speedtest.log"
-
-for BUILDNUM in {1..50}; do
-	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
-		break
-	fi
-	if [ ! -f "$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log" ]; then
-		break
-	fi
-done
-
-# make the day's directory
-mkdir -p "$DAILYDIR"
-
-echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
-echo '<testrun>' > "$TESTLOG"
-
-
-# Loop through different cluster loads
-#for PARALLEL in 52 48 44 40 36 32 28 24 20 16 8 4; do
-for PARALLEL in 44 40 36 32 28 24 20 16 8 4; do
-export PARALLEL  i
-echo "Parallel: $PARALLEL"
-(
-echo "<test type='performance' name='speedtest' >"
-echo "	<parameters parallel='$PARALLEL' start='`date`' />"
-echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
-MAKEFILE=$TESTBASE/test$CODEFACTOR.mk
-echo ""
-
-OUTDIR="$DAILYDIR/$BUILDNUM"
-TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
-
-echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
-if [ ! -d "$OUTDIR" ]; then
-	mkdir -p "$OUTDIR" || exit 1
-fi
-set -x
-
-# Make sure that our "stop signal" is clear
-SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
-rm -f "$SIGNALTOSTOPFILE"
-
-
-echo "EPOCROOT is $EPOCROOT"
-export PATH=$EPOCROOT/epoc32/tools:$PATH
-
-(
-echo "Annihilating epoc32 tree(s)"
-# wipe the epoc32 directory first
-chmod -R u+rw "$EPOCROOT/epoc32" &&
-rm -rf "$EPOCROOT/epoc32" &&
-echo "epoc32 tree withered" 
-) 
-(
-# unzip the pre-prepared epoc32 trees
-cd $EPOCROOT && 	
-(
-	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch && 
-	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch
-) > "$OUTDIR/unzip" &&
-chmod -R u+rw "$EPOCROOT/epoc32" &&
-echo "unzipped skeleton epoc32 tree" 
-) && (
-echo "Pre-export"
-$SBS_HOME/bin/sbs  -d -k -s "$PREEXPORTSYSDEF" -a "$SOURCEROOT" -c $PLATFORM EXPORT > $OUTDIR/${LOGNAME}_$BUILDNUM.preexport 2>&1 || {
-	echo "Pre-export failed";
-	exit 1
-}
-)
-
-echo "Prepping makefiles"
-(
-	echo "<times>\n"
-	export TIMEFORMAT=$'<time stage='prepmake'>%3R</time>\n'
-	time cp performance_Makefile $EPOCROOT/epoc32/build/Makefile
-)  > "$TIMELOG" 2>&1
-
-echo "Running Make"
-(
-	# The build process
-	 export TIMEFORMAT=$'<time stage='make' parallel='$PARALLEL'>%3R</time>\n'
-
-	time /usr/local/raptor/make-pvm-381/pvmgmake -j$PARALLEL --debug=j -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log" 2>&1 
-	touch "$SIGNALTOSTOPFILE"
-	echo "</times>\n"
-) >> "$TIMELOG" 2>&1 & 
-(
-	set +x
-	# Concurrent process to continuously update statistics
-	echo ""
-
-	while [ 1 -eq 1 ]; do
-		sleep 20 
-		echo -n "."
-
-		if [ -e "$SIGNALTOSTOPFILE" ]; then
-			rm -f "$SIGNALTOSTOPFILE"
-			break
-		fi
-	done
-	echo ""
-)
-set +x
-genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
-
-echo "	]]></build>"
-echo "</test>"
-) >> "$TESTLOG" 2>&1
-
-BUILDNUM=$[ $BUILDNUM + 1 ]
-# use a new output directory
-done # PARALLEL
-echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
-echo "</testrun>" >> "$TESTLOG"
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Build automation for Symbian OS with Raptor
+# Author: Timothy N Murphy
+# 
+#
+
+# You can edit these:
+H=/home/tmurphy
+export H
+export EPOCROOT="$H/baselineos"
+export LOGBASEDIR=~/public_html/buildlogs
+export BUILDROOT="$H/baselineos"
+export SOURCEROOT="$H/baselineos/fsupdate"
+export SYSDEF="$H/baselineos/system_definition_fsupdate.xml"
+export PREEXPORTSYSDEF="$SBS_HOME/test/envelope/preexport.xml"
+#export PARALLEL=0
+
+genstats() { 
+if [ "$1.stats"  -ot "$1.log" ]; then
+python "$SBS_HOME/bin/buildstats.py"  "$1.log" >  "$1.stats" && 
+#python "$SBS_HOME/bin/failedstats.py" -m  "$1.log" >  "$1.failed"; 
+(
+	cd $EPOCROOT/epoc32 && find "release" > "$1.release_files" && find "build" > "$1.build_files" && find include > "$1.include_files"
+)
+fi;
+}
+
+cd $BUILDROOT
+
+
+# Don't edit the rest:
+###################################################
+export KEY=`date +%d_%m_%y`
+export DAILYDIR="$LOGBASEDIR/$KEY"
+export BUILDNAME="`basename \"$SYSDEF\" | sed 's#\.[^.][^.]*$##'`"
+export LOGNAME="${BUILDNAME}_${KEY}"
+export PLATFORM=armv5
+export TESTLOG="$DAILYDIR/parallel_speedtest.log"
+
+for BUILDNUM in {1..50}; do
+	if [ ! -d "$DAILYDIR/$BUILDNUM" ]; then
+		break
+	fi
+	if [ ! -f "$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log" ]; then
+		break
+	fi
+done
+
+# make the day's directory
+mkdir -p "$DAILYDIR"
+
+echo "testrun: $TESTLOG, build $BUILDNUM of the day:"
+echo '<testrun>' > "$TESTLOG"
+
+
+# Loop through different cluster loads
+#for PARALLEL in 52 48 44 40 36 32 28 24 20 16 8 4; do
+for PARALLEL in 44 40 36 32 28 24 20 16 8 4; do
+export PARALLEL  i
+echo "Parallel: $PARALLEL"
+(
+echo "<test type='performance' name='speedtest' >"
+echo "	<parameters parallel='$PARALLEL' start='`date`' />"
+echo "	<logfile>$DAILYDIR/$BUILDNUM/${LOGNAME}_$BUILDNUM.log</logfile>"
+MAKEFILE=$TESTBASE/test$CODEFACTOR.mk
+echo ""
+
+OUTDIR="$DAILYDIR/$BUILDNUM"
+TIMELOG="$OUTDIR/${LOGNAME}_$BUILDNUM.time"
+
+echo "	<build number='$BUILDNUM' of='$KEY' output='$OUTDIR'><![CDATA["
+if [ ! -d "$OUTDIR" ]; then
+	mkdir -p "$OUTDIR" || exit 1
+fi
+set -x
+
+# Make sure that our "stop signal" is clear
+SIGNALTOSTOPFILE="$OUTDIR/${LOGNAME}_$BUILDNUM.stop"
+rm -f "$SIGNALTOSTOPFILE"
+
+
+echo "EPOCROOT is $EPOCROOT"
+export PATH=$EPOCROOT/epoc32/tools:$PATH
+
+(
+echo "Annihilating epoc32 tree(s)"
+# wipe the epoc32 directory first
+chmod -R u+rw "$EPOCROOT/epoc32" &&
+rm -rf "$EPOCROOT/epoc32" &&
+echo "epoc32 tree withered" 
+) 
+(
+# unzip the pre-prepared epoc32 trees
+cd $EPOCROOT && 	
+(
+	unzip -o $BUILDROOT/epoc32.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch && 
+	unzip -o $BUILDROOT/variant.zip  | grep "epoc32/" | sed 's#.* \(epoc32/.*\)#\1#' | xargs touch
+) > "$OUTDIR/unzip" &&
+chmod -R u+rw "$EPOCROOT/epoc32" &&
+echo "unzipped skeleton epoc32 tree" 
+) && (
+echo "Pre-export"
+$SBS_HOME/bin/sbs  -d -k -s "$PREEXPORTSYSDEF" -a "$SOURCEROOT" -c $PLATFORM EXPORT > $OUTDIR/${LOGNAME}_$BUILDNUM.preexport 2>&1 || {
+	echo "Pre-export failed";
+	exit 1
+}
+)
+
+echo "Prepping makefiles"
+(
+	echo "<times>\n"
+	export TIMEFORMAT=$'<time stage='prepmake'>%3R</time>\n'
+	time cp performance_Makefile $EPOCROOT/epoc32/build/Makefile
+)  > "$TIMELOG" 2>&1
+
+echo "Running Make"
+(
+	# The build process
+	 export TIMEFORMAT=$'<time stage='make' parallel='$PARALLEL'>%3R</time>\n'
+
+	time /usr/local/raptor/make-pvm-381/pvmgmake -j$PARALLEL --debug=j -k -f $MAKEFILE  > "$OUTDIR/${LOGNAME}_$BUILDNUM.log" 2>&1 
+	touch "$SIGNALTOSTOPFILE"
+	echo "</times>\n"
+) >> "$TIMELOG" 2>&1 & 
+(
+	set +x
+	# Concurrent process to continuously update statistics
+	echo ""
+
+	while [ 1 -eq 1 ]; do
+		sleep 20 
+		echo -n "."
+
+		if [ -e "$SIGNALTOSTOPFILE" ]; then
+			rm -f "$SIGNALTOSTOPFILE"
+			break
+		fi
+	done
+	echo ""
+)
+set +x
+genstats "$OUTDIR/${LOGNAME}_$BUILDNUM"
+
+echo "	]]></build>"
+echo "</test>"
+) >> "$TESTLOG" 2>&1
+
+BUILDNUM=$[ $BUILDNUM + 1 ]
+# use a new output directory
+done # PARALLEL
+echo -e "<testrun_stat endtime='`date`'\n />" >> "$TESTLOG"
+echo "</testrun>" >> "$TESTLOG"
--- a/sbsv2/raptor/bin/squashlog.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/squashlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,62 +1,62 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# squash a raptor log file by removing commands from successful recipes
-#
-
-import sys
-
-inRecipe = False
-
-for line in sys.stdin.readlines():
-	# escape % characters otherwise print will fail
-	line = line.replace("%", "%%")
-		
-	# detect the start of a recipe
-	if line.startswith("<recipe "):
-		inRecipe = True
-		recipeLines = [line]
-		squashRecipe = True
-		continue
-		
-	# detect the status report from a recipe
-	if line.startswith("<status "):
-		if not "exit='ok'" in line:
-			# only squash ok recipes
-			squashRecipe = False
-		recipeLines.append(line)
-		continue
-				
-	# detect the end of a recipe
-	if line.startswith("</recipe>"):
-		# print the recipe
-		if squashRecipe:
-			for text in recipeLines:
-				if not text.startswith("+"):
-					print text,
-		else:
-			for text in recipeLines:
-				print text,
-		print line,
-		continue
-		
-	# remember the lines during a recipe
-	if inRecipe:
-		recipeLines.append(line)	
-	else:
-	# print all lines outside a recipe 
-		print line,
-	
-# end
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# squash a raptor log file by removing commands from successful recipes
+#
+
+import sys
+
+inRecipe = False
+
+for line in sys.stdin.readlines():
+	# escape % characters otherwise print will fail
+	line = line.replace("%", "%%")
+		
+	# detect the start of a recipe
+	if line.startswith("<recipe "):
+		inRecipe = True
+		recipeLines = [line]
+		squashRecipe = True
+		continue
+		
+	# detect the status report from a recipe
+	if line.startswith("<status "):
+		if not "exit='ok'" in line:
+			# only squash ok recipes
+			squashRecipe = False
+		recipeLines.append(line)
+		continue
+				
+	# detect the end of a recipe
+	if line.startswith("</recipe>"):
+		# print the recipe
+		if squashRecipe:
+			for text in recipeLines:
+				if not text.startswith("+"):
+					print text,
+		else:
+			for text in recipeLines:
+				print text,
+		print line,
+		continue
+		
+	# remember the lines during a recipe
+	if inRecipe:
+		recipeLines.append(line)	
+	else:
+	# print all lines outside a recipe 
+		print line,
+	
+# end
+
--- a/sbsv2/raptor/bin/statcollate.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/statcollate.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,112 +1,112 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# statcollate
-#
-
-"""
-	Produce output for a graphing program or spreadsheet from
-	the statistic logs produced by buildstats.py from Raptor logs.
-	e.g. by analysing several logs we can see how
-	"number of successful compiles" improves over time.
-"""
-
-import sys
-from optparse import OptionParser
-import os
-import xml.dom.minidom
-from stat import *
-
-namespace = "http://symbian.com/2007/xml/build/raptor/stats"
-
-class StatsFail(Exception):
-	pass
-
-def pullStats(statnames, file):
-	"""Load a Statistics document and pull stats for a graph"""
-
-	# try to read and parse the XML file
-	try:
-	    dom = xml.dom.minidom.parse(file)
-
-	except Exception,e: # a whole bag of exceptions can be raised here
-		print "pullStats: %s" % str(e)
-		raise StatsFail
-
-	# <build> is always the root element
-	stats = dom.documentElement
-	objects = []
-	build = stats.childNodes[1]
-	
-	# create a Data Model object from each sub-element
-	output = {}
-	output['date'] = build.getAttribute('date')
-	#print "statnames %s\n" % str(statnames)   #test
-	for child in build.childNodes:
-	    if child.namespaceURI == namespace \
-        and child.nodeType == child.ELEMENT_NODE \
-        and child.hasAttributes():
-                #print "child node %s\n" % child.getAttribute('name')   #test
-                name = child.getAttribute('name')
-                if name in statnames:
-                    #print "1"  #test
-                    output[name] = child.getAttribute('count')
-
-	return output
-
-statnames = ['postlink success', 'compile success', 'compile fail']
-
-## Command Line Interface ################################################
-
-parser = OptionParser(prog = "statgraph",
-        usage = "%prog [-h | options] [<statsfile>] [[<statsfile>] ...]")
-
-(options, args) = parser.parse_args()
-
-statfilename = "stdin"
-
-table = sys.stdout
-print >> table, 'Date,',  # add 'Date' in front of names
-
-comma=""
-for name in statnames:
-    print >> table, comma+name, #! this order is not the order in dictionary
-    comma=', '
-    #print 'test,',  #test
-
-print >> table, ""
-
-if len(args) > 0:
-    for statfilename in args:
-        sys.__stderr__.write("Loading %s\n" % statfilename)
-        file = open(statfilename, "r")
-        try:
-            stats = pullStats(statnames, file)
-        except StatsFail,e:
-            sys.__stderr__.write("Can't process file %s\n" % statfilename)
-            sys.exit(1)
-        #print stats.items()  # test
-        file.close()
-        
-	comma=""
-        print >> table, stats['date'] + ",",
-        for name in statnames:
-            print >> table, comma+stats[name],
-    	    comma=', '
-            #print 'test,',  # test
-        print >> table, ""
-
-else:
-    sys.stderr.write("No files specified")
-    #pullStats(statnames,sys.stdin)
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# statcollate
+#
+
+"""
+	Produce output for a graphing program or spreadsheet from
+	the statistic logs produced by buildstats.py from Raptor logs.
+	e.g. by analysing several logs we can see how
+	"number of successful compiles" improves over time.
+"""
+
+import sys
+from optparse import OptionParser
+import os
+import xml.dom.minidom
+from stat import *
+
+namespace = "http://symbian.com/2007/xml/build/raptor/stats"
+
+class StatsFail(Exception):
+	pass
+
+def pullStats(statnames, file):
+	"""Load a Statistics document and pull stats for a graph"""
+
+	# try to read and parse the XML file
+	try:
+	    dom = xml.dom.minidom.parse(file)
+
+	except Exception,e: # a whole bag of exceptions can be raised here
+		print "pullStats: %s" % str(e)
+		raise StatsFail
+
+	# <build> is always the root element
+	stats = dom.documentElement
+	objects = []
+	build = stats.childNodes[1]
+	
+	# create a Data Model object from each sub-element
+	output = {}
+	output['date'] = build.getAttribute('date')
+	#print "statnames %s\n" % str(statnames)   #test
+	for child in build.childNodes:
+	    if child.namespaceURI == namespace \
+        and child.nodeType == child.ELEMENT_NODE \
+        and child.hasAttributes():
+                #print "child node %s\n" % child.getAttribute('name')   #test
+                name = child.getAttribute('name')
+                if name in statnames:
+                    #print "1"  #test
+                    output[name] = child.getAttribute('count')
+
+	return output
+
+statnames = ['postlink success', 'compile success', 'compile fail']
+
+## Command Line Interface ################################################
+
+parser = OptionParser(prog = "statgraph",
+        usage = "%prog [-h | options] [<statsfile>] [[<statsfile>] ...]")
+
+(options, args) = parser.parse_args()
+
+statfilename = "stdin"
+
+table = sys.stdout
+print >> table, 'Date,',  # add 'Date' in front of names
+
+comma=""
+for name in statnames:
+    print >> table, comma+name, #! this order is not the order in dictionary
+    comma=', '
+    #print 'test,',  #test
+
+print >> table, ""
+
+if len(args) > 0:
+    for statfilename in args:
+        sys.__stderr__.write("Loading %s\n" % statfilename)
+        file = open(statfilename, "r")
+        try:
+            stats = pullStats(statnames, file)
+        except StatsFail,e:
+            sys.__stderr__.write("Can't process file %s\n" % statfilename)
+            sys.exit(1)
+        #print stats.items()  # test
+        file.close()
+        
+	comma=""
+        print >> table, stats['date'] + ",",
+        for name in statnames:
+            print >> table, comma+stats[name],
+    	    comma=', '
+            #print 'test,',  # test
+        print >> table, ""
+
+else:
+    sys.stderr.write("No files specified")
+    #pullStats(statnames,sys.stdin)
--- a/sbsv2/raptor/bin/unsplitdirs.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/unsplitdirs.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,101 +1,101 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# unsplitdirs utility
-# This utility converts a directory tree which may contain "splits" due to case inconsistencies into
-# a combined form.  This is best illustrated as follows:
-# epoc32/RELEASE/ARMV5/urel
-# epoc32/Release/armv5/UREL
-# epoc32/RELEASE/armv5/Urel
-# are "healed by this script into:
-# epoc32/RELEASE/ARMV5/urel  (i.e. the first occurrence.
-#
-
-#
-# Files within these directories are maintained. i.e. it is possible to fix 
-# a directory tree with files already left in it.
-#
- 
-
-import os
-import os.path
-import re
-import sys
-import shutil
-from  optparse import OptionParser
-
-def mergetwo(firstdir, seconddir):
-# Move files from firstdir into seconddir.  If firstdir and seconddir both have 
-# a directory "X" then combines the contents of theses
-	for d in os.listdir(firstdir):
-		fileitem = os.path.join(firstdir,d)
-		dest = os.path.join(seconddir,d)
-		print "moving %s, %s to %s " % (d, fileitem, dest)
-		if os.path.isdir(dest) and os.path.isdir(fileitem):
-			mergetwo(fileitem, dest)
-			try:
-				os.rmdir(fileitem)
-			except:
-				print "\tfailed rmdir %s" % fileitem
-		else:
-			shutil.move(fileitem, dest)
-	try:
-		os.rmdir(firstdir)
-	except:
-		print "\tfailed rmdir %s" % firstdir
-	
-	
-
-def visit(dirname, link = False):
-# Find directories with names that differ only in case
-	nameclash = {}
-#	print "dir %s\n" %(dirname)
-	for f in os.listdir(dirname):
-		fullpath = os.path.join(dirname,f)
-		if os.path.isdir(fullpath) and not os.path.islink(fullpath):
-		#	print "\tmergeable %s" %(f)
-			fl = f.lower()
-			if nameclash.has_key(fl):
-				mergetwo(fullpath, os.path.join(dirname, nameclash[fl]))
-				if link:
-					print "\tlinking %s <- %s" %(nameclash[fl], fullpath)
-					os.symlink(nameclash[fl], fullpath)
-			else:
-				nameclash[fl] = f
-		else:
-			pass
-		#	print "%s is not a dir\n" %(f)
-
-	for d in nameclash.values():
-	#	print "\tVisiting %s" %(d)
-		visit(os.path.join(dirname, d))
-
-
-dirname = sys.argv[1]
-
-parser = OptionParser(prog = "unsplitdirs",
-        usage = "%prog [-h | options] [<file>]")
-
-parser.add_option("-l", "--link", default = False,
-         action="store_true", dest="link", help="Turn mismatched-case directories into symbolic links e.g. if armv5 is the default then make the link ARMV5->armv5")
-
-(options, args) = parser.parse_args()
-
-logname="stdin"
-if len(args) > 0:
-        dirname = args[0]
-else:
-	dirname ='.'
-
-visit(dirname, options.link)
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# unsplitdirs utility
+# This utility converts a directory tree which may contain "splits" due to case inconsistencies into
+# a combined form.  This is best illustrated as follows:
+# epoc32/RELEASE/ARMV5/urel
+# epoc32/Release/armv5/UREL
+# epoc32/RELEASE/armv5/Urel
+# are "healed by this script into:
+# epoc32/RELEASE/ARMV5/urel  (i.e. the first occurrence.
+#
+
+#
+# Files within these directories are maintained. i.e. it is possible to fix 
+# a directory tree with files already left in it.
+#
+ 
+
+import os
+import os.path
+import re
+import sys
+import shutil
+from  optparse import OptionParser
+
+def mergetwo(firstdir, seconddir):
+# Move files from firstdir into seconddir.  If firstdir and seconddir both have 
+# a directory "X" then combines the contents of theses
+	for d in os.listdir(firstdir):
+		fileitem = os.path.join(firstdir,d)
+		dest = os.path.join(seconddir,d)
+		print "moving %s, %s to %s " % (d, fileitem, dest)
+		if os.path.isdir(dest) and os.path.isdir(fileitem):
+			mergetwo(fileitem, dest)
+			try:
+				os.rmdir(fileitem)
+			except:
+				print "\tfailed rmdir %s" % fileitem
+		else:
+			shutil.move(fileitem, dest)
+	try:
+		os.rmdir(firstdir)
+	except:
+		print "\tfailed rmdir %s" % firstdir
+	
+	
+
+def visit(dirname, link = False):
+# Find directories with names that differ only in case
+	nameclash = {}
+#	print "dir %s\n" %(dirname)
+	for f in os.listdir(dirname):
+		fullpath = os.path.join(dirname,f)
+		if os.path.isdir(fullpath) and not os.path.islink(fullpath):
+		#	print "\tmergeable %s" %(f)
+			fl = f.lower()
+			if nameclash.has_key(fl):
+				mergetwo(fullpath, os.path.join(dirname, nameclash[fl]))
+				if link:
+					print "\tlinking %s <- %s" %(nameclash[fl], fullpath)
+					os.symlink(nameclash[fl], fullpath)
+			else:
+				nameclash[fl] = f
+		else:
+			pass
+		#	print "%s is not a dir\n" %(f)
+
+	for d in nameclash.values():
+	#	print "\tVisiting %s" %(d)
+		visit(os.path.join(dirname, d))
+
+
+dirname = sys.argv[1]
+
+parser = OptionParser(prog = "unsplitdirs",
+        usage = "%prog [-h | options] [<file>]")
+
+parser.add_option("-l", "--link", default = False,
+         action="store_true", dest="link", help="Turn mismatched-case directories into symbolic links e.g. if armv5 is the default then make the link ARMV5->armv5")
+
+(options, args) = parser.parse_args()
+
+logname="stdin"
+if len(args) > 0:
+        dirname = args[0]
+else:
+	dirname ='.'
+
+visit(dirname, options.link)
--- a/sbsv2/raptor/bin/vartoxml.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/vartoxml.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,207 +1,207 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Raptor Binary Variation var file to xml spec generator
-# Given a set of .var files, this script will generate an xml specification file
-#
-
-
-import sys,os,re,fnmatch
-import xml.dom.minidom 
-from optparse import OptionParser
-
-doc = xml.dom.minidom.Document()
-class VarFile:
-
-	def __init__(self,aFile):
-		self.virtual = False
-		self.varname = ""
-		self.varhrh = ""
-		self.build_include = ""
-		self.rom_include = ""
-		self.extends = ""
-		self.file = aFile
-
-	# Parse the var file
-	def ParseVarFile(self):
-		file = open(self.file)
-		vardata = file.readlines()
-		for var in vardata:
-			if re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var):
-				self.varname = re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var)
-			elif re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var):
-				self.varhrh  = re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var)
-			elif re.match('VIRTUAL\s+$',var):
-				self.virtual = True
-			elif re.match('BUILD_INCLUDE\s+.+',var):
-				self.build_include = re.match('BUILD_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
-			elif re.match('ROM_INCLUDE\s+.+',var):
-				self.rom_include = re.match('ROM_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
-			elif re.match('EXTENDS\s+(?P<EXTENDS>\w+)',var):
-				self.extends = re.match('EXTENDS\s+(?P<EXTENDSNODE>\w+)',var)
-		if self.varname:
-			self.varname = self.varname.group('VARIANTNAME')
-		if self.varhrh:
-			self.varhrh  = self.varhrh.group('VARIANTHRH')
-		if self.extends:
-			self.extends = self.extends.group('EXTENDSNODE')
-		file.close()
-	
-	# Write the specs for a variant object and attach it to a parent node
-	def CreateSpec(self,parentNode):
-	
-		var = doc.createElement("var")
-		parentNode.appendChild(var)
-
-		# Set the FEATUREVARIANT name
-		vname = doc.createElement("set")
-		vname.setAttribute("name","FEATUREVARIANT")
-		vname.setAttribute("value",self.varname)
-		if self.virtual:
-			vname.setAttribute("abstract","true")
-		var.appendChild(vname)
-
-		# Set the VARIANT_HRH name
-		hrhname = doc.createElement("set")
-		hrhname.setAttribute("name","VARIANT_HRH")
-		hrhname.setAttribute("value",self.varhrh)
-		var.appendChild(hrhname)
-
-		# Set the build includes
-		if self.build_include:
-			buildincs = doc.createElement(self.build_include.group('PROPERTY'))
-			buildincs.setAttribute("name","BUILD_INCLUDE")
-			buildincs.setAttribute("value",self.build_include.group('LOCATION'))
-			var.appendChild(buildincs)
-
-		# Set the rom includes
-		if self.rom_include:
-			buildincs = doc.createElement(self.rom_include.group('PROPERTY'))
-			buildincs.setAttribute("name","ROM_INCLUDE")
-			buildincs.setAttribute("value",self.rom_include.group('LOCATION'))
-			var.appendChild(buildincs)
-
-# Main function
-def main():
-
-	parser = OptionParser(prog = "vartoxml.py")
-	parser.add_option("-s","--sourcefile",action="append",dest="varfile",help="List of var files")
-	parser.add_option("-o","--output",action="store",dest="outputxml",help="Output xml file")
-	parser.add_option("-d","--folder",action="store",dest="folder",help="Folder names to search for var files")
-
-	(options, leftover_args) = parser.parse_args(sys.argv[1:])
-	
-	childlist = [] 
-	addedlist = []
-	nodesList = []
-	childnames = []
-	i = 0
-	
-	# Get the list of .var file from the specified folder(s)
-	if options.folder:
-		for folder in options.folder:
-			for fileName in os.listdir (folder):
-				if fnmatch.fnmatch (fileName,'*.var'):
-					if options.varfile:
-						options.varfile.append(fileName)
-					else:
-						options.varfile = []
-						options.varfile.append(fileName)
-	
-	# We need some source files for this script to work
-	if not options.varfile:
-		print "Error: No source files specified "
-		sys.exit()
-		
-	# Set parent node to gibberish
-	parentNode = doc.createElement("build")
-	doc.appendChild(parentNode)
-	newparentNode = ""
-	
-	# Removes duplicate elements in the arguments and iterate through them
-	# to find the top-level abstract parent node
-	for arg in list(set(options.varfile)):
-		varobj = VarFile(arg)
-		varobj.ParseVarFile()
-		if varobj.extends:
-			childlist.append(varobj)
-		else:
-			addedlist.append(varobj)
-			conf = doc.createElement("config")
-			conf.setAttribute("name",varobj.varname)
-			parentNode.appendChild(conf)
-			varobj.CreateSpec(conf)
-			nodesList.append(conf)
-	
-	# Names of all the children need to be stored separately
-	for c in childlist:
-		childnames.append(c.varname)
-
-	childlist2 = list(childlist)
-
-	# Check the list is correct, and append orphan nodes to master BUILD node
-	for ch in childlist2:
-		if addedlist:
-			if not ch.extends in addedlist[0].varname:
-				if not ch.extends in childnames:
-					conf = doc.createElement("config")
-					conf.setAttribute("name",ch.varname)
-					parentNode.appendChild(conf)
-					varobj.CreateSpec(conf)
-					nodesList.append(conf)
-					addedlist.append(ch)
-					childlist.remove(ch)
-		else:
-			if not ch.extends in childnames:
-				conf = doc.createElement("config")
-				conf.setAttribute("name",ch.varname)
-				parentNode.appendChild(conf)
-				varobj.CreateSpec(conf)
-				nodesList.append(conf)
-				addedlist.append(ch)
-				childlist.remove(ch)
-				
-	# Make a copy of the new childlist
-	childlist2 = list(childlist)
-
-	# Go through all the children, and add them to the xml spec
-	while (childlist2):
-		# Refactor the childlist to remove elements which have been added
-		for add in addedlist:
-			if add in childlist:
-				childlist.remove(add)
-		for ch in childlist:
-			if ch.extends == addedlist[i].varname:
-				addedlist.append(ch)
-				childlist2.remove(ch)
-				conf = doc.createElement("config")
-				conf.setAttribute("name",ch.varname)
-				nodesList[i].appendChild(conf)
-				nodesList.append(conf)
-				ch.CreateSpec(conf)
-			else:
-				pass
-		i = i + 1
-	
-	# If output xml file is specified, write to it otherwise print the xml to screen
-	if options.outputxml:
-		file = open(options.outputxml,"w")
-		file.writelines(doc.toprettyxml(indent="  "))
-		file.close()
-	else:
-		print doc.toprettyxml(indent="  ")
-
-
-if __name__ == "__main__":
-    main()
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Raptor Binary Variation var file to xml spec generator
+# Given a set of .var files, this script will generate an xml specification file
+#
+
+
+import sys,os,re,fnmatch
+import xml.dom.minidom 
+from optparse import OptionParser
+
+doc = xml.dom.minidom.Document()
+class VarFile:
+
+	def __init__(self,aFile):
+		self.virtual = False
+		self.varname = ""
+		self.varhrh = ""
+		self.build_include = ""
+		self.rom_include = ""
+		self.extends = ""
+		self.file = aFile
+
+	# Parse the var file
+	def ParseVarFile(self):
+		file = open(self.file)
+		vardata = file.readlines()
+		for var in vardata:
+			if re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var):
+				self.varname = re.match('VARIANT\s+(?P<VARIANTNAME>\w+)',var)
+			elif re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var):
+				self.varhrh  = re.match('VARIANT_HRH\s+(?P<VARIANTHRH>.+)',var)
+			elif re.match('VIRTUAL\s+$',var):
+				self.virtual = True
+			elif re.match('BUILD_INCLUDE\s+.+',var):
+				self.build_include = re.match('BUILD_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
+			elif re.match('ROM_INCLUDE\s+.+',var):
+				self.rom_include = re.match('ROM_INCLUDE\s+(?P<PROPERTY>\w+)\s+(?P<LOCATION>.+)',var)
+			elif re.match('EXTENDS\s+(?P<EXTENDS>\w+)',var):
+				self.extends = re.match('EXTENDS\s+(?P<EXTENDSNODE>\w+)',var)
+		if self.varname:
+			self.varname = self.varname.group('VARIANTNAME')
+		if self.varhrh:
+			self.varhrh  = self.varhrh.group('VARIANTHRH')
+		if self.extends:
+			self.extends = self.extends.group('EXTENDSNODE')
+		file.close()
+	
+	# Write the specs for a variant object and attach it to a parent node
+	def CreateSpec(self,parentNode):
+	
+		var = doc.createElement("var")
+		parentNode.appendChild(var)
+
+		# Set the FEATUREVARIANT name
+		vname = doc.createElement("set")
+		vname.setAttribute("name","FEATUREVARIANT")
+		vname.setAttribute("value",self.varname)
+		if self.virtual:
+			vname.setAttribute("abstract","true")
+		var.appendChild(vname)
+
+		# Set the VARIANT_HRH name
+		hrhname = doc.createElement("set")
+		hrhname.setAttribute("name","VARIANT_HRH")
+		hrhname.setAttribute("value",self.varhrh)
+		var.appendChild(hrhname)
+
+		# Set the build includes
+		if self.build_include:
+			buildincs = doc.createElement(self.build_include.group('PROPERTY'))
+			buildincs.setAttribute("name","BUILD_INCLUDE")
+			buildincs.setAttribute("value",self.build_include.group('LOCATION'))
+			var.appendChild(buildincs)
+
+		# Set the rom includes
+		if self.rom_include:
+			buildincs = doc.createElement(self.rom_include.group('PROPERTY'))
+			buildincs.setAttribute("name","ROM_INCLUDE")
+			buildincs.setAttribute("value",self.rom_include.group('LOCATION'))
+			var.appendChild(buildincs)
+
+# Main function
+def main():
+
+	parser = OptionParser(prog = "vartoxml.py")
+	parser.add_option("-s","--sourcefile",action="append",dest="varfile",help="List of var files")
+	parser.add_option("-o","--output",action="store",dest="outputxml",help="Output xml file")
+	parser.add_option("-d","--folder",action="store",dest="folder",help="Folder names to search for var files")
+
+	(options, leftover_args) = parser.parse_args(sys.argv[1:])
+	
+	childlist = [] 
+	addedlist = []
+	nodesList = []
+	childnames = []
+	i = 0
+	
+	# Get the list of .var file from the specified folder(s)
+	if options.folder:
+		for folder in options.folder:
+			for fileName in os.listdir (folder):
+				if fnmatch.fnmatch (fileName,'*.var'):
+					if options.varfile:
+						options.varfile.append(fileName)
+					else:
+						options.varfile = []
+						options.varfile.append(fileName)
+	
+	# We need some source files for this script to work
+	if not options.varfile:
+		print "Error: No source files specified "
+		sys.exit()
+		
+	# Set parent node to gibberish
+	parentNode = doc.createElement("build")
+	doc.appendChild(parentNode)
+	newparentNode = ""
+	
+	# Removes duplicate elements in the arguments and iterate through them
+	# to find the top-level abstract parent node
+	for arg in list(set(options.varfile)):
+		varobj = VarFile(arg)
+		varobj.ParseVarFile()
+		if varobj.extends:
+			childlist.append(varobj)
+		else:
+			addedlist.append(varobj)
+			conf = doc.createElement("config")
+			conf.setAttribute("name",varobj.varname)
+			parentNode.appendChild(conf)
+			varobj.CreateSpec(conf)
+			nodesList.append(conf)
+	
+	# Names of all the children need to be stored separately
+	for c in childlist:
+		childnames.append(c.varname)
+
+	childlist2 = list(childlist)
+
+	# Check the list is correct, and append orphan nodes to master BUILD node
+	for ch in childlist2:
+		if addedlist:
+			if not ch.extends in addedlist[0].varname:
+				if not ch.extends in childnames:
+					conf = doc.createElement("config")
+					conf.setAttribute("name",ch.varname)
+					parentNode.appendChild(conf)
+					varobj.CreateSpec(conf)
+					nodesList.append(conf)
+					addedlist.append(ch)
+					childlist.remove(ch)
+		else:
+			if not ch.extends in childnames:
+				conf = doc.createElement("config")
+				conf.setAttribute("name",ch.varname)
+				parentNode.appendChild(conf)
+				varobj.CreateSpec(conf)
+				nodesList.append(conf)
+				addedlist.append(ch)
+				childlist.remove(ch)
+				
+	# Make a copy of the new childlist
+	childlist2 = list(childlist)
+
+	# Go through all the children, and add them to the xml spec
+	while (childlist2):
+		# Refactor the childlist to remove elements which have been added
+		for add in addedlist:
+			if add in childlist:
+				childlist.remove(add)
+		for ch in childlist:
+			if ch.extends == addedlist[i].varname:
+				addedlist.append(ch)
+				childlist2.remove(ch)
+				conf = doc.createElement("config")
+				conf.setAttribute("name",ch.varname)
+				nodesList[i].appendChild(conf)
+				nodesList.append(conf)
+				ch.CreateSpec(conf)
+			else:
+				pass
+		i = i + 1
+	
+	# If output xml file is specified, write to it otherwise print the xml to screen
+	if options.outputxml:
+		file = open(options.outputxml,"w")
+		file.writelines(doc.toprettyxml(indent="  "))
+		file.close()
+	else:
+		print doc.toprettyxml(indent="  ")
+
+
+if __name__ == "__main__":
+    main()
--- a/sbsv2/raptor/bin/whatsource.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/bin/whatsource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,57 +1,57 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-#!/bin/env python
-# What source files did the build try to build?
-
-import sys
-import re
-from  optparse import OptionParser
-from raptorlog import *
-
-
-def genstats(file, logitems):
-	linecount=0
-	print "<source>"
-	for l in file.xreadlines():
-		for i in logitems:
-			i.match(l)
-	print "</source>"
-
-
-## Command Line Interface ####################################################
-
-parser = OptionParser(prog = "whatsource",
-	usage = "%prog [-h | options] logfile\nFind out what source files the compiler tried to build")
-
-(options, args) = parser.parse_args()
-
-logname="stdin"
-if len(args) > 0:
-	logname=args[0]
-	file = open(logname,"r")
-else:
-	file = sys.stdin
-
-
-compiler_invocations = [ 
-	LogItem("armcc usage",'\+ .*armcc.*-c', True, '[A-Za-z0-9_/\-\.]+\.cpp'),
-	] 
-
-genstats(file, compiler_invocations)
-
-if file != sys.stdin:
-	file.close()
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+#!/bin/env python
+# What source files did the build try to build?
+
+import sys
+import re
+from  optparse import OptionParser
+from raptorlog import *
+
+
+def genstats(file, logitems):
+	linecount=0
+	print "<source>"
+	for l in file.xreadlines():
+		for i in logitems:
+			i.match(l)
+	print "</source>"
+
+
+## Command Line Interface ####################################################
+
+parser = OptionParser(prog = "whatsource",
+	usage = "%prog [-h | options] logfile\nFind out what source files the compiler tried to build")
+
+(options, args) = parser.parse_args()
+
+logname="stdin"
+if len(args) > 0:
+	logname=args[0]
+	file = open(logname,"r")
+else:
+	file = sys.stdin
+
+
+compiler_invocations = [ 
+	LogItem("armcc usage",'\+ .*armcc.*-c', True, '[A-Za-z0-9_/\-\.]+\.cpp'),
+	] 
+
+genstats(file, compiler_invocations)
+
+if file != sys.stdin:
+	file.close()
--- a/sbsv2/raptor/examples/os_properties.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/examples/os_properties.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,23 +1,23 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	
-	<!--
-	
-	Because Raptor is not part of the OS it needs to know some properties of
-	the OS that it is building. If you are building an older OS than the one
-	configured by default then you need to put a file like this one into the
-	folder EPOCROOT/epoc32/sbs_config
-	
-	The file can have any name as long as it ends with ".xml"
-	
-	-->
-	
-	<!-- changes required for v9.4, TB91, and TB91sf -->
-		 
-	<var name="root.changes">
-		<set name='POSTLINKER_SUPPORTS_WDP' value=''/>
-		<set name='SUPPORTS_STDCPP_NEWLIB' value=''/>
-		<set name='RVCT_PRE_INCLUDE' value='$(EPOCINCLUDE)/rvct2_2/rvct2_2.h'/>
-	</var>
-	
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	
+	<!--
+	
+	Because Raptor is not part of the OS it needs to know some properties of
+	the OS that it is building. If you are building an older OS than the one
+	configured by default then you need to put a file like this one into the
+	folder EPOCROOT/epoc32/sbs_config
+	
+	The file can have any name as long as it ends with ".xml"
+	
+	-->
+	
+	<!-- changes required for v9.4, TB91, and TB91sf -->
+		 
+	<var name="root.changes">
+		<set name='POSTLINKER_SUPPORTS_WDP' value=''/>
+		<set name='SUPPORTS_STDCPP_NEWLIB' value=''/>
+		<set name='RVCT_PRE_INCLUDE' value='$(EPOCINCLUDE)/rvct2_2/rvct2_2.h'/>
+	</var>
+	
+</build>
--- a/sbsv2/raptor/examples/sbs_init.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/examples/sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,127 +1,127 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<build xmlns="http://symbian.com/xml/build"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
-
-	<!--
-
-	To change the defaults for Raptor, edit and copy this file
-	to $SBS_HOME
-
-	This will be used unless there is a file called $HOME/.sbs_init.xml
-	(note the "." before the "s") which will be used instead.
-
-	Read on to the next <var> to see other things you can do with this file.
-	
-	 -->
-
-	<var name="defaults.init">
-		<!-- environment variables used in this configuration -->
-		<env name="EPOCROOT" default="/" type="path"/>
-
-		<!-- default parameter settings -->
-
-		<!-- Make command parameter file -->
-		<set name="makeEngine" value="make"/>
-
-		<!-- Location of the highest level makefile -->
-		<set name="topMakefile" value="$(EPOCROOT)/epoc32/build/Makefile"/>
-
-		<!-- Name of the build logging file -->
-		<set name="logFileName" value="$(EPOCROOT)/epoc32/build/Makefile.%TIME.log"/>
-
-		<!-- Default build configuration name -->
-		<set name="defaultConfig" value="default"/>
-
-		<!-- Names of standard build files -->
-		<set name="buildInformation" value="bld.inf"/>
-		<set name="systemDefinition" value="System_Definition.xml"/>
-
-		<!-- Standard directories -->
-		<set name="systemConfig" value="lib/config"/>
-		<set name="systemFLM" value="lib/flm"/>
-		<set name="systemPlugins" value="python/plugins"/>
-		<set name="systemDefinitionBase" value="."/>
-
-		<!-- Do not print any information messages? -->
-		<set name="quiet" value="false"/>
-
-		<!-- How many jobs to run in parallel? (for make -j) -->
-		<set name="jobs" value="4"/>
-
-		<!-- How many attempts to run a job before recording an error?
-		This is useful for builds that can have transient failures. -->
-		<set name="tries" value="1"/>
-
-		<!-- Carry on trying to build even if some commands fail? -->
-		<set name="keepGoing" value="false"/>
-
-		<!-- Do we use a bld.inf or System_Definition.xml if both are in the CWD -->
-		<set name="preferBuildInfoToSystemDefinition" value="false"/>
-
-		<!-- Always use ignore OS detection? -->
-		<set name="ignoreOsDetection" value="false"/>
-
-		<!-- Always use a specific list of filters -->
-		<set name="filterList" value="FilterTerminal,FilterLogfile"/>
-
-	</var>
-
-	<!-- 
-	
-	Other variants can be defined and used on the command line. The "bob"
-	variant below adds a macro called "BOB" to a configuration. Use it by
-	typing the command:
-	
-	sbs -c armv5.bob -c winscw.bob
-	
-	-->
-	
-	<var name="bob">
-		<append name="CDEFS" value="BOB"/>
-	</var>
-	
-	<!--
-	
-	Aliases are used to give shorter names to strings of variants. Internally
-	things like armv5_urel are defined as aliases, so the following are the
-	same build:
-	
-	sbs -c armv5_urel
-	sbs -c arm.v5.urel.rvct2_2
-	
-	This means that you can re-define an alias to use a different compiler, for
-	example. The following aliases change the compiler used for armv5 and armv7
-	builds to be RVCT 4.0
-	
-	-->
-	
-	<alias name="armv5_urel" meaning="arm.v5.urel.rvct4_0"/>
-	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct4_0"/>
-
-	<alias name="armv7_urel" meaning="arm.v7.urel.rvct4_0"/>
-	<alias name="armv7_udeb" meaning="arm.v7.udeb.rvct4_0"/>
-	
-	<!--
-	
-	Groups allow a single -c option to expand into a set of build configurations
-	that are all done at the same time. Internally armv5 is a group of
-	armv5_urel and armv5_udeb. You can define your own groups and groups of
-	groups. The example below is a group which builds production and test code
-	for armv5 at the same time. Use it by typing the command:
-	
-	sbs -c armv5_all
-	
-	instead of:
-	
-	sbs -c armv5_urel -c armv5_udeb -c armv5_urel.test -c armv5_udeb.test
-	
-	-->
-	
-	<group name="armv5_all">
-		<groupRef ref="armv5"/>
-		<groupRef ref="armv5" mod="test"/>
-	</group>
-	
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!--
+
+	To change the defaults for Raptor, edit and copy this file
+	to $SBS_HOME
+
+	This will be used unless there is a file called $HOME/.sbs_init.xml
+	(note the "." before the "s") which will be used instead.
+
+	Read on to the next <var> to see other things you can do with this file.
+	
+	 -->
+
+	<var name="defaults.init">
+		<!-- environment variables used in this configuration -->
+		<env name="EPOCROOT" default="/" type="path"/>
+
+		<!-- default parameter settings -->
+
+		<!-- Make command parameter file -->
+		<set name="makeEngine" value="make"/>
+
+		<!-- Location of the highest level makefile -->
+		<set name="topMakefile" value="$(EPOCROOT)/epoc32/build/Makefile"/>
+
+		<!-- Name of the build logging file -->
+		<set name="logFileName" value="$(EPOCROOT)/epoc32/build/Makefile.%TIME.log"/>
+
+		<!-- Default build configuration name -->
+		<set name="defaultConfig" value="default"/>
+
+		<!-- Names of standard build files -->
+		<set name="buildInformation" value="bld.inf"/>
+		<set name="systemDefinition" value="System_Definition.xml"/>
+
+		<!-- Standard directories -->
+		<set name="systemConfig" value="lib/config"/>
+		<set name="systemFLM" value="lib/flm"/>
+		<set name="systemPlugins" value="python/plugins"/>
+		<set name="systemDefinitionBase" value="."/>
+
+		<!-- Do not print any information messages? -->
+		<set name="quiet" value="false"/>
+
+		<!-- How many jobs to run in parallel? (for make -j) -->
+		<set name="jobs" value="4"/>
+
+		<!-- How many attempts to run a job before recording an error?
+		This is useful for builds that can have transient failures. -->
+		<set name="tries" value="1"/>
+
+		<!-- Carry on trying to build even if some commands fail? -->
+		<set name="keepGoing" value="false"/>
+
+		<!-- Do we use a bld.inf or System_Definition.xml if both are in the CWD -->
+		<set name="preferBuildInfoToSystemDefinition" value="false"/>
+
+		<!-- Always use ignore OS detection? -->
+		<set name="ignoreOsDetection" value="false"/>
+
+		<!-- Always use a specific list of filters -->
+		<set name="filterList" value="FilterTerminal,FilterLogfile"/>
+
+	</var>
+
+	<!-- 
+	
+	Other variants can be defined and used on the command line. The "bob"
+	variant below adds a macro called "BOB" to a configuration. Use it by
+	typing the command:
+	
+	sbs -c armv5.bob -c winscw.bob
+	
+	-->
+	
+	<var name="bob">
+		<append name="CDEFS" value="BOB"/>
+	</var>
+	
+	<!--
+	
+	Aliases are used to give shorter names to strings of variants. Internally
+	things like armv5_urel are defined as aliases, so the following are the
+	same build:
+	
+	sbs -c armv5_urel
+	sbs -c arm.v5.urel.rvct2_2
+	
+	This means that you can re-define an alias to use a different compiler, for
+	example. The following aliases change the compiler used for armv5 and armv7
+	builds to be RVCT 4.0
+	
+	-->
+	
+	<alias name="armv5_urel" meaning="arm.v5.urel.rvct4_0"/>
+	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct4_0"/>
+
+	<alias name="armv7_urel" meaning="arm.v7.urel.rvct4_0"/>
+	<alias name="armv7_udeb" meaning="arm.v7.udeb.rvct4_0"/>
+	
+	<!--
+	
+	Groups allow a single -c option to expand into a set of build configurations
+	that are all done at the same time. Internally armv5 is a group of
+	armv5_urel and armv5_udeb. You can define your own groups and groups of
+	groups. The example below is a group which builds production and test code
+	for armv5 at the same time. Use it by typing the command:
+	
+	sbs -c armv5_all
+	
+	instead of:
+	
+	sbs -c armv5_urel -c armv5_udeb -c armv5_urel.test -c armv5_udeb.test
+	
+	-->
+	
+	<group name="armv5_all">
+		<groupRef ref="armv5"/>
+		<groupRef ref="armv5" mod="test"/>
+	</group>
+	
+</build>
--- a/sbsv2/raptor/group/bld.inf	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -1,24 +1,24 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-PRJ_PLATFORMS
-TOOLS TOOLS2
-
-PRJ_EXPORTS
-#include "exports.inf"
-
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+TOOLS TOOLS2
+
+PRJ_EXPORTS
+#include "exports.inf"
+
--- a/sbsv2/raptor/group/checkexports.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/checkexports.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,7 +1,7 @@
-#!/bin/bash
-
-for dir in . cpp-raptor cygwin-1.5.25 mingw-5.1.4 python-2.5.2; do
-	echo testing exports.inf in $dir
-	(cd $dir; ./exports.sh2; sort exports.inf > t1; sort exports.inf2 > t2; diff t1 t2)
-done
-
+#!/bin/bash
+
+for dir in . cpp-raptor cygwin-1.5.25 mingw-5.1.4 python-2.5.2; do
+	echo testing exports.inf in $dir
+	(cd $dir; ./exports.sh2; sort exports.inf > t1; sort exports.inf2 > t2; diff t1 t2)
+done
+
--- a/sbsv2/raptor/group/exports.inf	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/exports.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -1,223 +1,223 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-../RELEASE-NOTES.txt /tools/sbs/RELEASE-NOTES.txt
-../bin/sbs /tools/sbs/bin/sbs
-../bin/fixmeta.py /tools/sbs/bin/fixmeta.py
-../bin/codetest_osbuild.sh /tools/sbs/bin/codetest_osbuild.sh
-../bin/countbinaries.sh /tools/sbs/bin/countbinaries.sh
-../bin/gethost.sh /tools/sbs/bin/gethost.sh
-../bin/failedstats.py /tools/sbs/bin/failedstats.py
-../bin/sbs.bat /tools/sbs/bin/sbs.bat
-../bin/unsplitdirs.py /tools/sbs/bin/unsplitdirs.py
-../bin/buildstats.py /tools/sbs/bin/buildstats.py
-../bin/speedtest_osbuild.sh /tools/sbs/bin/speedtest_osbuild.sh
-../bin/sbsv2cache.py /tools/sbs/bin/sbsv2cache.py
-../bin/whatsource.py /tools/sbs/bin/whatsource.py
-../bin/oby2linux.py /tools/sbs/bin/oby2linux.py
-../bin/createrfifile.pl /tools/sbs/bin/createrfifile.pl
-../bin/vartoxml.py /tools/sbs/bin/vartoxml.py
-../bin/readme.txt /tools/sbs/bin/readme.txt
-../bin/squashlog.py /tools/sbs/bin/squashlog.py
-../bin/statcollate.py /tools/sbs/bin/statcollate.py
-../bin/createvmap.py /tools/sbs/bin/createvmap.py
-../bin/raptorlog.py /tools/sbs/bin/raptorlog.py
-../bin/osbuild.sh /tools/sbs/bin/osbuild.sh
-../bin/setup_user.sh /tools/sbs/bin/setup_user.sh
-../bin/msvcr71.dll /tools/sbs/bin/msvcr71.dll
-../bin/install_raptor.sh /tools/sbs/bin/install_raptor.sh
-../bin/mkgetfailed.py /tools/sbs/bin/mkgetfailed.py
-../examples/os_properties.xml /tools/sbs/examples/os_properties.xml
-../examples/sbs_init.xml /tools/sbs/examples/sbs_init.xml
-../lib/flm/e32abiv2stdexe.flm /tools/sbs/lib/flm/e32abiv2stdexe.flm
-../lib/flm/user/default.flm_ex /tools/sbs/lib/flm/user/default.flm_ex
-../lib/flm/user/globals.mk_ex /tools/sbs/lib/flm/user/globals.mk_ex
-../lib/flm/e32abiv2dll.flm /tools/sbs/lib/flm/e32abiv2dll.flm
-../lib/flm/tracecompiler.mk /tools/sbs/lib/flm/tracecompiler.mk
-../lib/flm/win32exe.flm /tools/sbs/lib/flm/win32exe.flm
-../lib/flm/template_ext.flm /tools/sbs/lib/flm/template_ext.flm
-../lib/flm/e32abiv2ani.flm /tools/sbs/lib/flm/e32abiv2ani.flm
-../lib/flm/converged-comms/createcommdbs.flm /tools/sbs/lib/flm/converged-comms/createcommdbs.flm
-../lib/flm/converged-comms/installdefaultcommdb.flm /tools/sbs/lib/flm/converged-comms/installdefaultcommdb.flm
-../lib/flm/win32plugin.flm /tools/sbs/lib/flm/win32plugin.flm
-../lib/flm/win32klib.flm /tools/sbs/lib/flm/win32klib.flm
-../lib/flm/extensions.xml /tools/sbs/lib/flm/extensions.xml
-../lib/flm/stack.mk /tools/sbs/lib/flm/stack.mk
-../lib/flm/globals.mk /tools/sbs/lib/flm/globals.mk
-../lib/flm/win32stdexe.flm /tools/sbs/lib/flm/win32stdexe.flm
-../lib/flm/e32abiv2lib.flm /tools/sbs/lib/flm/e32abiv2lib.flm
-../lib/flm/win32resource.flm /tools/sbs/lib/flm/win32resource.flm
-../lib/flm/config/default.flm /tools/sbs/lib/flm/config/default.flm
-../lib/flm/win32lib.flm /tools/sbs/lib/flm/win32lib.flm
-../lib/flm/null.flm /tools/sbs/lib/flm/null.flm
-../lib/flm/tools/test_command_diff.sh /tools/sbs/lib/flm/tools/test_command_diff.sh
-../lib/flm/tools/stlport.flm /tools/sbs/lib/flm/tools/stlport.flm
-../lib/flm/tools/buildstubsis.flm /tools/sbs/lib/flm/tools/buildstubsis.flm
-../lib/flm/msvctools.xml /tools/sbs/lib/flm/msvctools.xml
-../lib/flm/tools2lib.flm /tools/sbs/lib/flm/tools2lib.flm
-../lib/flm/win32ldd.flm /tools/sbs/lib/flm/win32ldd.flm
-../lib/flm/tools.xml /tools/sbs/lib/flm/tools.xml
-../lib/flm/metaflm.mk /tools/sbs/lib/flm/metaflm.mk
-../lib/flm/e32abiv2ldd.flm /tools/sbs/lib/flm/e32abiv2ldd.flm
-../lib/flm/e32abiv2pdl.flm /tools/sbs/lib/flm/e32abiv2pdl.flm
-../lib/flm/e32abiv2stdlib.flm /tools/sbs/lib/flm/e32abiv2stdlib.flm
-../lib/flm/config.xml /tools/sbs/lib/flm/config.xml
-../lib/flm/win32stddll.flm /tools/sbs/lib/flm/win32stddll.flm
-../lib/flm/gccxmlresource.flm /tools/sbs/lib/flm/gccxmlresource.flm
-../lib/flm/e32abiv2textnotifier2.flm /tools/sbs/lib/flm/e32abiv2textnotifier2.flm
-../lib/flm/e32abiv2implib.flm /tools/sbs/lib/flm/e32abiv2implib.flm
-../lib/flm/e32abiv2exe.flm /tools/sbs/lib/flm/e32abiv2exe.flm
-../lib/flm/win32pdl.flm /tools/sbs/lib/flm/win32pdl.flm
-../lib/flm/win32.flm /tools/sbs/lib/flm/win32.flm
-../lib/flm/base.xml /tools/sbs/lib/flm/base.xml
-../lib/flm/grouping.flm /tools/sbs/lib/flm/grouping.flm
-../lib/flm/e32abiv2.flm /tools/sbs/lib/flm/e32abiv2.flm
-../lib/flm/e32abiv2exexp.flm /tools/sbs/lib/flm/e32abiv2exexp.flm
-../lib/flm/e32abiv2defaults.mk /tools/sbs/lib/flm/e32abiv2defaults.mk
-../lib/flm/e32abiv2fsy.flm /tools/sbs/lib/flm/e32abiv2fsy.flm
-../lib/flm/final.mk /tools/sbs/lib/flm/final.mk
-../lib/flm/none.flm /tools/sbs/lib/flm/none.flm
-../lib/flm/analysis.xml /tools/sbs/lib/flm/analysis.xml
-../lib/flm/e32abiv2var2.flm /tools/sbs/lib/flm/e32abiv2var2.flm
-../lib/flm/msvctools.flm /tools/sbs/lib/flm/msvctools.flm
-../lib/flm/win32kdll.flm /tools/sbs/lib/flm/win32kdll.flm
-../lib/flm/win32ani.flm /tools/sbs/lib/flm/win32ani.flm
-../lib/flm/e32abiv2plugin.flm /tools/sbs/lib/flm/e32abiv2plugin.flm
-../lib/flm/win32bitmap.flm /tools/sbs/lib/flm/win32bitmap.flm
-../lib/flm/tools2common.flm /tools/sbs/lib/flm/tools2common.flm
-../lib/flm/win32fsy.flm /tools/sbs/lib/flm/win32fsy.flm
-../lib/flm/readme.txt /tools/sbs/lib/flm/readme.txt
-../lib/flm/e32abiv2kext.flm /tools/sbs/lib/flm/e32abiv2kext.flm
-../lib/flm/e32abiv2stddll.flm /tools/sbs/lib/flm/e32abiv2stddll.flm
-../lib/flm/win32exexp.flm /tools/sbs/lib/flm/win32exexp.flm
-../lib/flm/stringtable.flm /tools/sbs/lib/flm/stringtable.flm
-../lib/flm/utils/utility.xml /tools/sbs/lib/flm/utils/utility.xml
-../lib/flm/utils/prebuilt.flm /tools/sbs/lib/flm/utils/prebuilt.flm
-../lib/flm/utils/copydir.flm /tools/sbs/lib/flm/utils/copydir.flm
-../lib/flm/win32pdd.flm /tools/sbs/lib/flm/win32pdd.flm
-../lib/flm/taggedrules.mk /tools/sbs/lib/flm/taggedrules.mk
-../lib/flm/booleanlogic.mk /tools/sbs/lib/flm/booleanlogic.mk
-../lib/flm/emulator.xml /tools/sbs/lib/flm/emulator.xml
-../lib/flm/win32kext.flm /tools/sbs/lib/flm/win32kext.flm
-../lib/flm/test/exeabiv2_2/test.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test.cpp
-../lib/flm/test/exeabiv2_2/test_function.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test_function.cpp
-../lib/flm/test/exeabiv2_2/exeabiv2_2.mk /tools/sbs/lib/flm/test/exeabiv2_2/exeabiv2_2.mk
-../lib/flm/test/templateext/temex.mk /tools/sbs/lib/flm/test/templateext/temex.mk
-../lib/flm/test/templateext/Makefile /tools/sbs/lib/flm/test/templateext/Makefile
-../lib/flm/test/Makefile /tools/sbs/lib/flm/test/Makefile
-../lib/flm/test/exeabiv2_4/test.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test.cpp
-../lib/flm/test/exeabiv2_4/exeabiv2_4.mk /tools/sbs/lib/flm/test/exeabiv2_4/exeabiv2_4.mk
-../lib/flm/test/exeabiv2_4/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test_big.cpp
-../lib/flm/test/flmtests.mk /tools/sbs/lib/flm/test/flmtests.mk
-../lib/flm/test/ciaabiv2_1/uc_exe.cia /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cia
-../lib/flm/test/ciaabiv2_1/uc_exe.cpp /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cpp
-../lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk /tools/sbs/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk
-../lib/flm/test/export1/Makefile /tools/sbs/lib/flm/test/export1/Makefile
-../lib/flm/test/export1/t1e.h /tools/sbs/lib/flm/test/export1/t1e.h
-../lib/flm/test/export1/t4e.h /tools/sbs/lib/flm/test/export1/t4e.h
-../lib/flm/test/export1/t2e.h /tools/sbs/lib/flm/test/export1/t2e.h
-../lib/flm/test/export1/t3e.h /tools/sbs/lib/flm/test/export1/t3e.h
-../lib/flm/test/dllabiv2_1/test.cpp /tools/sbs/lib/flm/test/dllabiv2_1/test.cpp
-../lib/flm/test/dllabiv2_1/dllabiv2_1.mk /tools/sbs/lib/flm/test/dllabiv2_1/dllabiv2_1.mk
-../lib/flm/test/raptorglue/raptorglue.mk /tools/sbs/lib/flm/test/raptorglue/raptorglue.mk
-../lib/flm/test/dllbasictests.mk /tools/sbs/lib/flm/test/dllbasictests.mk
-../lib/flm/test/exeabiv2_1/test.cpp /tools/sbs/lib/flm/test/exeabiv2_1/test.cpp
-../lib/flm/test/exeabiv2_1/exeabiv2_1.mk /tools/sbs/lib/flm/test/exeabiv2_1/exeabiv2_1.mk
-../lib/flm/test/dllabiv2_defaults.mk /tools/sbs/lib/flm/test/dllabiv2_defaults.mk
-../lib/flm/test/exeperftests.mk /tools/sbs/lib/flm/test/exeperftests.mk
-../lib/flm/test/ciatests.mk /tools/sbs/lib/flm/test/ciatests.mk
-../lib/flm/test/environment/pvm/pvmtest.mk /tools/sbs/lib/flm/test/environment/pvm/pvmtest.mk
-../lib/flm/test/environment/make/test_variable_restore.mk /tools/sbs/lib/flm/test/environment/make/test_variable_restore.mk
-../lib/flm/test/exebasictests.mk /tools/sbs/lib/flm/test/exebasictests.mk
-../lib/flm/test/exeabiv2_defaults.mk /tools/sbs/lib/flm/test/exeabiv2_defaults.mk
-../lib/flm/test/exeabiv2_3/exeabiv2_3.mk /tools/sbs/lib/flm/test/exeabiv2_3/exeabiv2_3.mk
-../lib/flm/test/exeabiv2_3/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_3/test_big.cpp
-../lib/flm/win32stdlib.flm /tools/sbs/lib/flm/win32stdlib.flm
-../lib/flm/win32var2.flm /tools/sbs/lib/flm/win32var2.flm
-../lib/flm/win32implib.flm /tools/sbs/lib/flm/win32implib.flm
-../lib/flm/bitmap.flm /tools/sbs/lib/flm/bitmap.flm
-../lib/flm/build.flm /tools/sbs/lib/flm/build.flm
-../lib/flm/build.xml /tools/sbs/lib/flm/build.xml
-../lib/flm/tools2exe.flm /tools/sbs/lib/flm/tools2exe.flm
-../lib/flm/e32abiv2klib.flm /tools/sbs/lib/flm/e32abiv2klib.flm
-../lib/flm/standard.xml /tools/sbs/lib/flm/standard.xml
-../lib/flm/win32var.flm /tools/sbs/lib/flm/win32var.flm
-../lib/flm/e32abiv2pdd.flm /tools/sbs/lib/flm/e32abiv2pdd.flm
-../lib/flm/e32abiv2none.flm /tools/sbs/lib/flm/e32abiv2none.flm
-../lib/flm/romfile.mk /tools/sbs/lib/flm/romfile.mk
-../lib/flm/win32textnotifier2.flm /tools/sbs/lib/flm/win32textnotifier2.flm
-../lib/flm/resource.flm /tools/sbs/lib/flm/resource.flm
-../lib/flm/flmtools.mk /tools/sbs/lib/flm/flmtools.mk
-../lib/flm/gnumakefile.flm /tools/sbs/lib/flm/gnumakefile.flm
-../lib/flm/e32abiv2kdll.flm /tools/sbs/lib/flm/e32abiv2kdll.flm
-../lib/flm/e32abiv2var.flm /tools/sbs/lib/flm/e32abiv2var.flm
-../lib/flm/win32dll.flm /tools/sbs/lib/flm/win32dll.flm
-../lib/flm/gccxml.flm /tools/sbs/lib/flm/gccxml.flm
-../lib/flm/e32postlink.mk /tools/sbs/lib/flm/e32postlink.mk
-../lib/config/default.xml /tools/sbs/lib/config/default.xml
-../lib/config/build.xml /tools/sbs/lib/config/build.xml
-../lib/config/interfaces.xml /tools/sbs/lib/config/interfaces.xml
-../lib/config/gcc.xml /tools/sbs/lib/config/gcc.xml
-../lib/config/variants.xml /tools/sbs/lib/config/variants.xml
-../lib/config/coverity.xml /tools/sbs/lib/config/coverity.xml
-../lib/config/meta.xml /tools/sbs/lib/config/meta.xml
-../lib/config/locations.xml /tools/sbs/lib/config/locations.xml
-../lib/config/gccxml.xml /tools/sbs/lib/config/gccxml.xml
-../lib/config/carbide.xml /tools/sbs/lib/config/carbide.xml
-../lib/config/msvc.xml /tools/sbs/lib/config/msvc.xml
-../lib/config/make.xml /tools/sbs/lib/config/make.xml
-../lib/config/root.xml /tools/sbs/lib/config/root.xml
-../lib/config/winscw.xml /tools/sbs/lib/config/winscw.xml
-../lib/config/arm.xml /tools/sbs/lib/config/arm.xml
-../lib/config/gcce.xml /tools/sbs/lib/config/gcce.xml
-../lib/config/rvct.xml /tools/sbs/lib/config/rvct.xml
-../python/raptor_makefile.py /tools/sbs/python/raptor_makefile.py
-../python/filter_interface.py /tools/sbs/python/filter_interface.py
-../python/raptor_start.py /tools/sbs/python/raptor_start.py
-../python/pyparsing.py /tools/sbs/python/pyparsing.py
-../python/raptor_cli.py /tools/sbs/python/raptor_cli.py
-../python/raptor_cache.py /tools/sbs/python/raptor_cache.py
-../python/raptor_meta.py /tools/sbs/python/raptor_meta.py
-../python/raptor_xml.py /tools/sbs/python/raptor_xml.py
-../python/raptor_version.py /tools/sbs/python/raptor_version.py
-../python/generic_path.py /tools/sbs/python/generic_path.py
-../python/raptor_make.py /tools/sbs/python/raptor_make.py
-../python/plugins/filter_logfile.py /tools/sbs/python/plugins/filter_logfile.py
-../python/plugins/filter_terminal.py /tools/sbs/python/plugins/filter_terminal.py
-../python/plugins/filter_carbide.py /tools/sbs/python/plugins/filter_carbide.py
-../python/plugins/filter_what.py /tools/sbs/python/plugins/filter_what.py
-../python/plugins/dummyplugin.py /tools/sbs/python/plugins/dummyplugin.py
-../python/plugins/filter_clean.py /tools/sbs/python/plugins/filter_clean.py
-../python/plugins/filter_squashlog.py /tools/sbs/python/plugins/filter_squashlog.py
-../python/plugins/filter_checksource.py /tools/sbs/python/plugins/filter_checksource.py
-../python/plugins/filter_splitlog.py /tools/sbs/python/plugins/filter_splitlog.py
-../python/sbs_dist.py /tools/sbs/python/sbs_dist.py
-../python/raptor_utilities.py /tools/sbs/python/raptor_utilities.py
-../python/pluginbox.py /tools/sbs/python/pluginbox.py
-../python/dos2unix.py /tools/sbs/python/dos2unix.py
-../python/raptor_data.py /tools/sbs/python/raptor_data.py
-../python/filter_list.py /tools/sbs/python/filter_list.py
-../python/raptor.py /tools/sbs/python/raptor.py
-../python/mmpparser.py /tools/sbs/python/mmpparser.py
-../python/filter_utils.py /tools/sbs/python/filter_utils.py
-../schema/build/2_0.xsd /tools/sbs/schema/build/2_0.xsd
-../schema/build/log/1_0.xsd /tools/sbs/schema/build/log/1_0.xsd
-../schema/build/1_0.xsd /tools/sbs/schema/build/1_0.xsd
-../win32/bin/ransleep.exe /tools/sbs/win32/bin/ransleep.exe
-../win32/bin/sbs_descramble.exe /tools/sbs/win32/bin/sbs_descramble.exe
-../win32/bin/talonctl.exe /tools/sbs/win32/bin/talonctl.exe
-../win32/bin/talon.exe /tools/sbs/win32/bin/talon.exe
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+../RELEASE-NOTES.txt /tools/sbs/RELEASE-NOTES.txt
+../bin/sbs /tools/sbs/bin/sbs
+../bin/fixmeta.py /tools/sbs/bin/fixmeta.py
+../bin/codetest_osbuild.sh /tools/sbs/bin/codetest_osbuild.sh
+../bin/countbinaries.sh /tools/sbs/bin/countbinaries.sh
+../bin/gethost.sh /tools/sbs/bin/gethost.sh
+../bin/failedstats.py /tools/sbs/bin/failedstats.py
+../bin/sbs.bat /tools/sbs/bin/sbs.bat
+../bin/unsplitdirs.py /tools/sbs/bin/unsplitdirs.py
+../bin/buildstats.py /tools/sbs/bin/buildstats.py
+../bin/speedtest_osbuild.sh /tools/sbs/bin/speedtest_osbuild.sh
+../bin/sbsv2cache.py /tools/sbs/bin/sbsv2cache.py
+../bin/whatsource.py /tools/sbs/bin/whatsource.py
+../bin/oby2linux.py /tools/sbs/bin/oby2linux.py
+../bin/createrfifile.pl /tools/sbs/bin/createrfifile.pl
+../bin/vartoxml.py /tools/sbs/bin/vartoxml.py
+../bin/readme.txt /tools/sbs/bin/readme.txt
+../bin/squashlog.py /tools/sbs/bin/squashlog.py
+../bin/statcollate.py /tools/sbs/bin/statcollate.py
+../bin/createvmap.py /tools/sbs/bin/createvmap.py
+../bin/raptorlog.py /tools/sbs/bin/raptorlog.py
+../bin/osbuild.sh /tools/sbs/bin/osbuild.sh
+../bin/setup_user.sh /tools/sbs/bin/setup_user.sh
+../bin/msvcr71.dll /tools/sbs/bin/msvcr71.dll
+../bin/install_raptor.sh /tools/sbs/bin/install_raptor.sh
+../bin/mkgetfailed.py /tools/sbs/bin/mkgetfailed.py
+../examples/os_properties.xml /tools/sbs/examples/os_properties.xml
+../examples/sbs_init.xml /tools/sbs/examples/sbs_init.xml
+../lib/flm/e32abiv2stdexe.flm /tools/sbs/lib/flm/e32abiv2stdexe.flm
+../lib/flm/user/default.flm_ex /tools/sbs/lib/flm/user/default.flm_ex
+../lib/flm/user/globals.mk_ex /tools/sbs/lib/flm/user/globals.mk_ex
+../lib/flm/e32abiv2dll.flm /tools/sbs/lib/flm/e32abiv2dll.flm
+../lib/flm/tracecompiler.mk /tools/sbs/lib/flm/tracecompiler.mk
+../lib/flm/win32exe.flm /tools/sbs/lib/flm/win32exe.flm
+../lib/flm/template_ext.flm /tools/sbs/lib/flm/template_ext.flm
+../lib/flm/e32abiv2ani.flm /tools/sbs/lib/flm/e32abiv2ani.flm
+../lib/flm/converged-comms/createcommdbs.flm /tools/sbs/lib/flm/converged-comms/createcommdbs.flm
+../lib/flm/converged-comms/installdefaultcommdb.flm /tools/sbs/lib/flm/converged-comms/installdefaultcommdb.flm
+../lib/flm/win32plugin.flm /tools/sbs/lib/flm/win32plugin.flm
+../lib/flm/win32klib.flm /tools/sbs/lib/flm/win32klib.flm
+../lib/flm/extensions.xml /tools/sbs/lib/flm/extensions.xml
+../lib/flm/stack.mk /tools/sbs/lib/flm/stack.mk
+../lib/flm/globals.mk /tools/sbs/lib/flm/globals.mk
+../lib/flm/win32stdexe.flm /tools/sbs/lib/flm/win32stdexe.flm
+../lib/flm/e32abiv2lib.flm /tools/sbs/lib/flm/e32abiv2lib.flm
+../lib/flm/win32resource.flm /tools/sbs/lib/flm/win32resource.flm
+../lib/flm/config/default.flm /tools/sbs/lib/flm/config/default.flm
+../lib/flm/win32lib.flm /tools/sbs/lib/flm/win32lib.flm
+../lib/flm/null.flm /tools/sbs/lib/flm/null.flm
+../lib/flm/tools/test_command_diff.sh /tools/sbs/lib/flm/tools/test_command_diff.sh
+../lib/flm/tools/stlport.flm /tools/sbs/lib/flm/tools/stlport.flm
+../lib/flm/tools/buildstubsis.flm /tools/sbs/lib/flm/tools/buildstubsis.flm
+../lib/flm/msvctools.xml /tools/sbs/lib/flm/msvctools.xml
+../lib/flm/tools2lib.flm /tools/sbs/lib/flm/tools2lib.flm
+../lib/flm/win32ldd.flm /tools/sbs/lib/flm/win32ldd.flm
+../lib/flm/tools.xml /tools/sbs/lib/flm/tools.xml
+../lib/flm/metaflm.mk /tools/sbs/lib/flm/metaflm.mk
+../lib/flm/e32abiv2ldd.flm /tools/sbs/lib/flm/e32abiv2ldd.flm
+../lib/flm/e32abiv2pdl.flm /tools/sbs/lib/flm/e32abiv2pdl.flm
+../lib/flm/e32abiv2stdlib.flm /tools/sbs/lib/flm/e32abiv2stdlib.flm
+../lib/flm/config.xml /tools/sbs/lib/flm/config.xml
+../lib/flm/win32stddll.flm /tools/sbs/lib/flm/win32stddll.flm
+../lib/flm/gccxmlresource.flm /tools/sbs/lib/flm/gccxmlresource.flm
+../lib/flm/e32abiv2textnotifier2.flm /tools/sbs/lib/flm/e32abiv2textnotifier2.flm
+../lib/flm/e32abiv2implib.flm /tools/sbs/lib/flm/e32abiv2implib.flm
+../lib/flm/e32abiv2exe.flm /tools/sbs/lib/flm/e32abiv2exe.flm
+../lib/flm/win32pdl.flm /tools/sbs/lib/flm/win32pdl.flm
+../lib/flm/win32.flm /tools/sbs/lib/flm/win32.flm
+../lib/flm/base.xml /tools/sbs/lib/flm/base.xml
+../lib/flm/grouping.flm /tools/sbs/lib/flm/grouping.flm
+../lib/flm/e32abiv2.flm /tools/sbs/lib/flm/e32abiv2.flm
+../lib/flm/e32abiv2exexp.flm /tools/sbs/lib/flm/e32abiv2exexp.flm
+../lib/flm/e32abiv2defaults.mk /tools/sbs/lib/flm/e32abiv2defaults.mk
+../lib/flm/e32abiv2fsy.flm /tools/sbs/lib/flm/e32abiv2fsy.flm
+../lib/flm/final.mk /tools/sbs/lib/flm/final.mk
+../lib/flm/none.flm /tools/sbs/lib/flm/none.flm
+../lib/flm/analysis.xml /tools/sbs/lib/flm/analysis.xml
+../lib/flm/e32abiv2var2.flm /tools/sbs/lib/flm/e32abiv2var2.flm
+../lib/flm/msvctools.flm /tools/sbs/lib/flm/msvctools.flm
+../lib/flm/win32kdll.flm /tools/sbs/lib/flm/win32kdll.flm
+../lib/flm/win32ani.flm /tools/sbs/lib/flm/win32ani.flm
+../lib/flm/e32abiv2plugin.flm /tools/sbs/lib/flm/e32abiv2plugin.flm
+../lib/flm/win32bitmap.flm /tools/sbs/lib/flm/win32bitmap.flm
+../lib/flm/tools2common.flm /tools/sbs/lib/flm/tools2common.flm
+../lib/flm/win32fsy.flm /tools/sbs/lib/flm/win32fsy.flm
+../lib/flm/readme.txt /tools/sbs/lib/flm/readme.txt
+../lib/flm/e32abiv2kext.flm /tools/sbs/lib/flm/e32abiv2kext.flm
+../lib/flm/e32abiv2stddll.flm /tools/sbs/lib/flm/e32abiv2stddll.flm
+../lib/flm/win32exexp.flm /tools/sbs/lib/flm/win32exexp.flm
+../lib/flm/stringtable.flm /tools/sbs/lib/flm/stringtable.flm
+../lib/flm/utils/utility.xml /tools/sbs/lib/flm/utils/utility.xml
+../lib/flm/utils/prebuilt.flm /tools/sbs/lib/flm/utils/prebuilt.flm
+../lib/flm/utils/copydir.flm /tools/sbs/lib/flm/utils/copydir.flm
+../lib/flm/win32pdd.flm /tools/sbs/lib/flm/win32pdd.flm
+../lib/flm/taggedrules.mk /tools/sbs/lib/flm/taggedrules.mk
+../lib/flm/booleanlogic.mk /tools/sbs/lib/flm/booleanlogic.mk
+../lib/flm/emulator.xml /tools/sbs/lib/flm/emulator.xml
+../lib/flm/win32kext.flm /tools/sbs/lib/flm/win32kext.flm
+../lib/flm/test/exeabiv2_2/test.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test.cpp
+../lib/flm/test/exeabiv2_2/test_function.cpp /tools/sbs/lib/flm/test/exeabiv2_2/test_function.cpp
+../lib/flm/test/exeabiv2_2/exeabiv2_2.mk /tools/sbs/lib/flm/test/exeabiv2_2/exeabiv2_2.mk
+../lib/flm/test/templateext/temex.mk /tools/sbs/lib/flm/test/templateext/temex.mk
+../lib/flm/test/templateext/Makefile /tools/sbs/lib/flm/test/templateext/Makefile
+../lib/flm/test/Makefile /tools/sbs/lib/flm/test/Makefile
+../lib/flm/test/exeabiv2_4/test.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test.cpp
+../lib/flm/test/exeabiv2_4/exeabiv2_4.mk /tools/sbs/lib/flm/test/exeabiv2_4/exeabiv2_4.mk
+../lib/flm/test/exeabiv2_4/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_4/test_big.cpp
+../lib/flm/test/flmtests.mk /tools/sbs/lib/flm/test/flmtests.mk
+../lib/flm/test/ciaabiv2_1/uc_exe.cia /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cia
+../lib/flm/test/ciaabiv2_1/uc_exe.cpp /tools/sbs/lib/flm/test/ciaabiv2_1/uc_exe.cpp
+../lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk /tools/sbs/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk
+../lib/flm/test/export1/Makefile /tools/sbs/lib/flm/test/export1/Makefile
+../lib/flm/test/export1/t1e.h /tools/sbs/lib/flm/test/export1/t1e.h
+../lib/flm/test/export1/t4e.h /tools/sbs/lib/flm/test/export1/t4e.h
+../lib/flm/test/export1/t2e.h /tools/sbs/lib/flm/test/export1/t2e.h
+../lib/flm/test/export1/t3e.h /tools/sbs/lib/flm/test/export1/t3e.h
+../lib/flm/test/dllabiv2_1/test.cpp /tools/sbs/lib/flm/test/dllabiv2_1/test.cpp
+../lib/flm/test/dllabiv2_1/dllabiv2_1.mk /tools/sbs/lib/flm/test/dllabiv2_1/dllabiv2_1.mk
+../lib/flm/test/raptorglue/raptorglue.mk /tools/sbs/lib/flm/test/raptorglue/raptorglue.mk
+../lib/flm/test/dllbasictests.mk /tools/sbs/lib/flm/test/dllbasictests.mk
+../lib/flm/test/exeabiv2_1/test.cpp /tools/sbs/lib/flm/test/exeabiv2_1/test.cpp
+../lib/flm/test/exeabiv2_1/exeabiv2_1.mk /tools/sbs/lib/flm/test/exeabiv2_1/exeabiv2_1.mk
+../lib/flm/test/dllabiv2_defaults.mk /tools/sbs/lib/flm/test/dllabiv2_defaults.mk
+../lib/flm/test/exeperftests.mk /tools/sbs/lib/flm/test/exeperftests.mk
+../lib/flm/test/ciatests.mk /tools/sbs/lib/flm/test/ciatests.mk
+../lib/flm/test/environment/pvm/pvmtest.mk /tools/sbs/lib/flm/test/environment/pvm/pvmtest.mk
+../lib/flm/test/environment/make/test_variable_restore.mk /tools/sbs/lib/flm/test/environment/make/test_variable_restore.mk
+../lib/flm/test/exebasictests.mk /tools/sbs/lib/flm/test/exebasictests.mk
+../lib/flm/test/exeabiv2_defaults.mk /tools/sbs/lib/flm/test/exeabiv2_defaults.mk
+../lib/flm/test/exeabiv2_3/exeabiv2_3.mk /tools/sbs/lib/flm/test/exeabiv2_3/exeabiv2_3.mk
+../lib/flm/test/exeabiv2_3/test_big.cpp /tools/sbs/lib/flm/test/exeabiv2_3/test_big.cpp
+../lib/flm/win32stdlib.flm /tools/sbs/lib/flm/win32stdlib.flm
+../lib/flm/win32var2.flm /tools/sbs/lib/flm/win32var2.flm
+../lib/flm/win32implib.flm /tools/sbs/lib/flm/win32implib.flm
+../lib/flm/bitmap.flm /tools/sbs/lib/flm/bitmap.flm
+../lib/flm/build.flm /tools/sbs/lib/flm/build.flm
+../lib/flm/build.xml /tools/sbs/lib/flm/build.xml
+../lib/flm/tools2exe.flm /tools/sbs/lib/flm/tools2exe.flm
+../lib/flm/e32abiv2klib.flm /tools/sbs/lib/flm/e32abiv2klib.flm
+../lib/flm/standard.xml /tools/sbs/lib/flm/standard.xml
+../lib/flm/win32var.flm /tools/sbs/lib/flm/win32var.flm
+../lib/flm/e32abiv2pdd.flm /tools/sbs/lib/flm/e32abiv2pdd.flm
+../lib/flm/e32abiv2none.flm /tools/sbs/lib/flm/e32abiv2none.flm
+../lib/flm/romfile.mk /tools/sbs/lib/flm/romfile.mk
+../lib/flm/win32textnotifier2.flm /tools/sbs/lib/flm/win32textnotifier2.flm
+../lib/flm/resource.flm /tools/sbs/lib/flm/resource.flm
+../lib/flm/flmtools.mk /tools/sbs/lib/flm/flmtools.mk
+../lib/flm/gnumakefile.flm /tools/sbs/lib/flm/gnumakefile.flm
+../lib/flm/e32abiv2kdll.flm /tools/sbs/lib/flm/e32abiv2kdll.flm
+../lib/flm/e32abiv2var.flm /tools/sbs/lib/flm/e32abiv2var.flm
+../lib/flm/win32dll.flm /tools/sbs/lib/flm/win32dll.flm
+../lib/flm/gccxml.flm /tools/sbs/lib/flm/gccxml.flm
+../lib/flm/e32postlink.mk /tools/sbs/lib/flm/e32postlink.mk
+../lib/config/default.xml /tools/sbs/lib/config/default.xml
+../lib/config/build.xml /tools/sbs/lib/config/build.xml
+../lib/config/interfaces.xml /tools/sbs/lib/config/interfaces.xml
+../lib/config/gcc.xml /tools/sbs/lib/config/gcc.xml
+../lib/config/variants.xml /tools/sbs/lib/config/variants.xml
+../lib/config/coverity.xml /tools/sbs/lib/config/coverity.xml
+../lib/config/meta.xml /tools/sbs/lib/config/meta.xml
+../lib/config/locations.xml /tools/sbs/lib/config/locations.xml
+../lib/config/gccxml.xml /tools/sbs/lib/config/gccxml.xml
+../lib/config/carbide.xml /tools/sbs/lib/config/carbide.xml
+../lib/config/msvc.xml /tools/sbs/lib/config/msvc.xml
+../lib/config/make.xml /tools/sbs/lib/config/make.xml
+../lib/config/root.xml /tools/sbs/lib/config/root.xml
+../lib/config/winscw.xml /tools/sbs/lib/config/winscw.xml
+../lib/config/arm.xml /tools/sbs/lib/config/arm.xml
+../lib/config/gcce.xml /tools/sbs/lib/config/gcce.xml
+../lib/config/rvct.xml /tools/sbs/lib/config/rvct.xml
+../python/raptor_makefile.py /tools/sbs/python/raptor_makefile.py
+../python/filter_interface.py /tools/sbs/python/filter_interface.py
+../python/raptor_start.py /tools/sbs/python/raptor_start.py
+../python/pyparsing.py /tools/sbs/python/pyparsing.py
+../python/raptor_cli.py /tools/sbs/python/raptor_cli.py
+../python/raptor_cache.py /tools/sbs/python/raptor_cache.py
+../python/raptor_meta.py /tools/sbs/python/raptor_meta.py
+../python/raptor_xml.py /tools/sbs/python/raptor_xml.py
+../python/raptor_version.py /tools/sbs/python/raptor_version.py
+../python/generic_path.py /tools/sbs/python/generic_path.py
+../python/raptor_make.py /tools/sbs/python/raptor_make.py
+../python/plugins/filter_logfile.py /tools/sbs/python/plugins/filter_logfile.py
+../python/plugins/filter_terminal.py /tools/sbs/python/plugins/filter_terminal.py
+../python/plugins/filter_carbide.py /tools/sbs/python/plugins/filter_carbide.py
+../python/plugins/filter_what.py /tools/sbs/python/plugins/filter_what.py
+../python/plugins/dummyplugin.py /tools/sbs/python/plugins/dummyplugin.py
+../python/plugins/filter_clean.py /tools/sbs/python/plugins/filter_clean.py
+../python/plugins/filter_squashlog.py /tools/sbs/python/plugins/filter_squashlog.py
+../python/plugins/filter_checksource.py /tools/sbs/python/plugins/filter_checksource.py
+../python/plugins/filter_splitlog.py /tools/sbs/python/plugins/filter_splitlog.py
+../python/sbs_dist.py /tools/sbs/python/sbs_dist.py
+../python/raptor_utilities.py /tools/sbs/python/raptor_utilities.py
+../python/pluginbox.py /tools/sbs/python/pluginbox.py
+../python/dos2unix.py /tools/sbs/python/dos2unix.py
+../python/raptor_data.py /tools/sbs/python/raptor_data.py
+../python/filter_list.py /tools/sbs/python/filter_list.py
+../python/raptor.py /tools/sbs/python/raptor.py
+../python/mmpparser.py /tools/sbs/python/mmpparser.py
+../python/filter_utils.py /tools/sbs/python/filter_utils.py
+../schema/build/2_0.xsd /tools/sbs/schema/build/2_0.xsd
+../schema/build/log/1_0.xsd /tools/sbs/schema/build/log/1_0.xsd
+../schema/build/1_0.xsd /tools/sbs/schema/build/1_0.xsd
+../win32/bin/ransleep.exe /tools/sbs/win32/bin/ransleep.exe
+../win32/bin/sbs_descramble.exe /tools/sbs/win32/bin/sbs_descramble.exe
+../win32/bin/talonctl.exe /tools/sbs/win32/bin/talonctl.exe
+../win32/bin/talon.exe /tools/sbs/win32/bin/talon.exe
--- a/sbsv2/raptor/group/exports.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/exports.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,12 +1,12 @@
-#!/bin/bash
-
-# script to generate exports for this component
-
-# copy ../* to /tools/sbs
-
-find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf
-
-for i in bin lib python schema util; do
-    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf
-done
-
+#!/bin/bash
+
+# script to generate exports for this component
+
+# copy ../* to /tools/sbs
+
+find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf
+
+for i in bin lib python schema util; do
+    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf
+done
+
--- a/sbsv2/raptor/group/exports.sh2	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/exports.sh2	Mon Nov 16 09:46:46 2009 +0000
@@ -1,12 +1,12 @@
-#!/bin/bash
-
-# script to generate exports for this component to compare with the existing exports.inf
-
-# copy ../* to /tools/sbs
-
-find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf2
-
-for i in bin examples lib python schema win32/bin; do
-    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf2
-done
-
+#!/bin/bash
+
+# script to generate exports for this component to compare with the existing exports.inf
+
+# copy ../* to /tools/sbs
+
+find .. -maxdepth 1 -type f -not -name "distribution.policy*" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' > exports.inf2
+
+for i in bin examples lib python schema win32/bin; do
+    find ../$i -type f -not -name "distribution.policy*" -not -name "*.pyc" -print | sed 's!\.\.\(.*\)!\.\.\1 /tools/sbs\1!' >> exports.inf2
+done
+
--- a/sbsv2/raptor/group/raptor.mrp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/raptor.mrp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,11 +1,11 @@
-component dev_build_sbsv2_raptor
-
-
-source /src/tools/dev/build/sbsv2/raptor
-exports /src/tools/dev/build/sbsv2/raptor/group
-
-ipr T
-ipr B ../python/pyparsing.py
-
-notes_source release.txt
-
+component dev_build_sbsv2_raptor
+
+
+source /src/tools/dev/build/sbsv2/raptor
+exports /src/tools/dev/build/sbsv2/raptor/group
+
+ipr T
+ipr B ../python/pyparsing.py
+
+notes_source release.txt
+
--- a/sbsv2/raptor/group/release.txt	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/group/release.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -1,5 +1,5 @@
-NOTESRC_RELEASER
-Symbian Software Ltd. (kits.notify@symbian.com)
-
-NOTESRC_RELEASE_REASON
-Symbian Build System release.
+NOTESRC_RELEASER
+Symbian Software Ltd. (kits.notify@symbian.com)
+
+NOTESRC_RELEASE_REASON
+Symbian Build System release.
--- a/sbsv2/raptor/lib/config/arm.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/arm.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,156 +1,155 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for ARM compilers -->
-	<var name="arm" extends="root">
-		<varRef ref="default.interfaces"/>
-		<varRef ref="default.locations"/>
-		<env name="EFREEZE" default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type="tool"/>
-		<!-- picked up from the Environment -->
-		<env name="ELF2E32" default="$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)" type="tool"/>
-		<env name="BMCONV" default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type="tool"/>
-		<env name="CHECKLIB" default="$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)" type="tool"/>
-		<env name="TRANASM" default="$(PERL) $(EPOCROOT)/epoc32/tools/tranasm.pl" type="tool"/>
-		<env name="CPPFILT" default="$(GCCPREFIX)c++filt$(DOTEXE)" type="tool"/>
-		<env name="RCOMP" default="$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)" type="tool"/>
-		<env name="PREPDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl" type="path"/>
-		<env name="STRINGTABLE" default="$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl" type="path"/>
-		<!-- RANSLEEP is a program that can be used to cause a random delay in milliseconds. This is only useful in parallel builds.  See the PERTURBSTARTTIME switch for more details.  -->
-		<env name="RANSLEEP" default="$(SBS_HOME)/bin/$(HOSTPLATFORM_DIR)/ransleep$(DOTEXE)" type="tool"/>
-		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
-		<set name="CDEFS" value=""/>	
-		<!-- arm specific interfaces -->
-		<set name="INTERFACE.extension" value="Symbian.extension"/>
-		<!-- link to bld.inf and mmp platform names -->
-		<set name="ARMMACROS" value="__MARM_ARMV5__ $(ARMMACROS.CONFIG) $(ARMMACROS.VAR)"/>
-		<set name="ARMMACROS.CONFIG" value=""/>
-		<set name="ARMMACROS.VAR" value=""/>
-		<set name="CAPABILITY" value=""/>
-		<set name="CODE_SEGMENT_START" value=""/>
-		<set name="DEFAULT_STDCPP_NEWLIB" value="stdnew.dso"/>
-		<set name="DEFAULT_SYMBIAN_NEWLIB" value="scppnwdl.dso"/>
-		<set name="FULLVARIANTPATH" value="$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
-		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
-		<set name="LIBRARY_DEBUG" value=""/>
-		<set name="MMPDEFS" value=""/>
-		<set name="NMAKE" value="nmake"/>
-		<set name="NMAKEFLAGS" value="-nologo -x - "/>
-		<set name="OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
-		<set name="PERTURBSTARTTIME" value=""/>
-		<!-- add a random delay before starting armcc or armlink to ease contention for licensesthe maximum time to delay in milliseconds. RANSLEEP program must be available.   -->
-		<set name="PERTURBMSECS" value="500"/>
-		<!-- the maximum time to delay in milliseconds -->
-		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
-		<set name="RELEASEPATH" value="$(EPOCROOT)/epoc32/release"/>
-		<set name="RESOLVED_DEFFILE" value=""/>
-		<set name="RUNTIME_LIBS_PATH" value="$(EPOCROOT)/epoc32/release/armv5/lib"/>
-		<set name="SBSV1MAKE" value="$(EPOCROOT)/epoc32/tools/make$(DOTEXE)"/>
-		<set name="SID" value=""/>
-		<set name="EPOCSTACKSIZE" value=""/>
-		<set name="STATIC_LIBRARY_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
-		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
-		<set name="SYMBIAN_CC_MESSAGE_OPTION" value="$(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION)"/>
-		<set name="SYMBIAN_DLL_DEFINITION" value="__DLL__"/>
-		<set name="SYMBIAN_EXE_DEFINITION" value="__EXE__"/>
-		<set name="SYMBIAN_LINK_FLAGS" value="$(SYMBIAN_LD_MESSAGE_OPTION) $(BPABI_OPTION) $(RELOCATABLE_IMAGE_OPTION) $(UNRESOLVED_SYMBOL_REF_OPTION) $(STDLIB_OPTION) $(EXTRA_LD_OPTION) $(SYMBIAN_LINK_FLAGS.CONFIG) $(SYMBIAN_LINK_FLAGS.VAR)"/>
-		<set name="SYMBIAN_LINK_FLAGS.CONFIG" value=""/>
-		<set name="SYMBIAN_LINK_FLAGS.VAR" value=""/>
-		<set name="SYSTEMINCLUDE" value=""/>
-		<set name="TARGET" value=""/>
-		<set name="UNIX_SLASH_FOR_CC_ABS_PATHS" value="0"/>
-		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
-		<set name="DUMPBCINFO" value=""/>
-		<set name="MAKEDEFFILE" value="1"/>
-		<set name="PLATMACROS.WINDOWS" value="ARMCC EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
-		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
-		<set name="PLATMACROS.CONFIG" value=""/>
-		<set name="PLATMACROS.VAR" value=""/>
-		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
-	</var>
-	<var name="v5">
-		<set name="TRADITIONAL_PLATFORM" value="ARMV5"/>
-		<set name="VARIANTPLATFORM" value="armv5"/>
-		<set name="PLATMACROS.CONFIG" value=""/>
-		<set name="DEBUG_FORMAT" value="$(CC.DWARF2)"/>
-		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV5)"/>
-		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV5)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
-		<set name="GENERATE_ABIV1_IMPLIBS" value="$(SUPPORTS_ABIV1_IMPLIBS)"/>
-	</var>
-	<var name="v6">
-		<set name="TRADITIONAL_PLATFORM" value="ARMV6"/>
-		<set name="VARIANTPLATFORM" value="armv6"/>
-		<set name="PLATMACROS.CONFIG" value="ARMV6"/>
-		<set name="ARMMACROS.CONFIG" value="__ARMV6__"/>
-		<set name="DEBUG_FORMAT" value="$(CC.DWARF2)"/>
-		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV6)"/>
-		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV6)"/>
-		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/armv5/$(VARIANTTYPE)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
-	</var>
-	<var name="v7">
-		<set name="TRADITIONAL_PLATFORM" value="ARMV7"/>
-		<set name="VARIANTPLATFORM" value="armv7"/>
-		<set name="PLATMACROS.CONFIG" value="ARMV7"/>
-		<set name="ARMMACROS.CONFIG" value="__ARMV7__"/>
-		<set name="DEBUG_FORMAT" value="$(CC.DWARF3)"/>
-		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV7)"/>
-		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV7)"/>
-		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV3)"/>
-	</var>
-	<var name="9e" extends="v5">
-		<set name="VARIANTPLATFORM" value="arm9e"/>
-		<set name="PLATMACROS.CONFIG" value="ARM9E"/>
-		<set name="ARMMACROS.CONFIG" value="__ARM9E__"/>
-		<set name="TARGET_ARCH_OPTION" value="--cpu ARM9E"/>
-		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/armv5/$(VARIANTTYPE)"/>
-	</var>
-
-	<alias name="armv5_urel" meaning="arm.v5.urel.rvct2_2"/>
-	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct2_2"/>
-	<!-- To switch to GCCE for building armv5 code, 
-	comment out the two lines above this comment
-	and comment in the two lines below this comment -->
-	<!-- <alias name="armv5_urel" meaning="arm.v5.urel.gcce4_3_2"/> -->
-	<!-- <alias name="armv5_udeb" meaning="arm.v5.udeb.gcce4_3_2"/> -->
-
-	<!-- These aliases are provided to work with the "gcce_armv5" group -->
-	<alias name="armv5_urel_gcce4_3_2" meaning="arm.v5.urel.gcce4_3_2"/>
-	<alias name="armv5_udeb_gcce4_3_2" meaning="arm.v5.udeb.gcce4_3_2"/>
-
-	<!-- GCCE 4.3.3 aliases -->
-	<alias name="armv5_urel_gcce4_3_3" meaning="arm.v5.urel.gcce4_3_3"/>
-	<alias name="armv5_udeb_gcce4_3_3" meaning="arm.v5.udeb.gcce4_3_3"/>
-	
-	<alias name="armv6_urel" meaning="arm.v6.urel.rvct2_2"/>
-	<alias name="armv6_udeb" meaning="arm.v6.udeb.rvct2_2"/>
-	<alias name="armv7_urel" meaning="arm.v7.urel.rvct3_1"/>
-	<alias name="armv7_udeb" meaning="arm.v7.udeb.rvct3_1"/>
-
-	<alias name="arm9e_urel" meaning="arm.9e.urel.rvct2_2"/>
-	<alias name="arm9e_udeb" meaning="arm.9e.udeb.rvct2_2"/>
-
-	<group name="armv5">
-		<aliasRef ref="armv5_urel"/>
-		<aliasRef ref="armv5_udeb"/>
-	</group>
-
-	<group name="armv6">
-		<aliasRef ref="armv6_urel"/>
-		<aliasRef ref="armv6_udeb"/>
-	</group>
-	<group name="armv7">
-		<aliasRef ref="armv7_urel"/>
-		<aliasRef ref="armv7_udeb"/>
-	</group>
-
-	<group name="arm9e">
-		<aliasRef ref="arm9e_urel"/>
-		<aliasRef ref="arm9e_udeb"/>
-	</group>
-	
-	<group name="gcce_armv5">
-		<aliasRef ref="armv5_urel_gcce4_3_2"/>
-		<aliasRef ref="armv5_udeb_gcce4_3_2"/>
-	</group>
-	
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- build configurations for ARM compilers -->
+	<var name="arm" extends="root">
+		<varRef ref="default.interfaces"/>
+		<varRef ref="default.locations"/>
+		<env name="EFREEZE" default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type="tool"/>
+		<!-- picked up from the Environment -->
+		<env name="ELF2E32" default="$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)" type="tool"/>
+		<env name="BMCONV" default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type="tool"/>
+		<env name="CHECKLIB" default="$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)" type="tool"/>
+		<env name="TRANASM" default="$(PERL) $(EPOCROOT)/epoc32/tools/tranasm.pl" type="tool"/>
+		<env name="CPPFILT" default="$(GCCPREFIX)c++filt$(DOTEXE)" type="tool"/>
+		<env name="RCOMP" default="$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)" type="tool"/>
+		<env name="PREPDEF" default="$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl" type="path"/>
+		<env name="STRINGTABLE" default="$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl" type="path"/>
+		<!-- RANSLEEP is a program that can be used to cause a random delay in milliseconds. This is only useful in parallel builds.  See the PERTURBSTARTTIME switch for more details.  -->
+		<env name="RANSLEEP" default="$(SBS_HOME)/bin/$(HOSTPLATFORM_DIR)/ransleep$(DOTEXE)" type="tool"/>
+		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="CDEFS" value=""/>	
+		<!-- arm specific interfaces -->
+		<set name="INTERFACE.extension" value="Symbian.extension"/>
+		<!-- link to bld.inf and mmp platform names -->
+		<set name="ARMMACROS" value="__MARM_ARMV5__ $(ARMMACROS.CONFIG) $(ARMMACROS.VAR)"/>
+		<set name="ARMMACROS.CONFIG" value=""/>
+		<set name="ARMMACROS.VAR" value=""/>
+		<set name="CAPABILITY" value=""/>
+		<set name="CODE_SEGMENT_START" value=""/>
+		<set name="DEFAULT_STDCPP_NEWLIB" value="stdnew.dso"/>
+		<set name="DEFAULT_SYMBIAN_NEWLIB" value="scppnwdl.dso"/>
+		<set name="FULLVARIANTPATH" value="$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
+		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
+		<set name="LIBRARY_DEBUG" value=""/>
+		<set name="MMPDEFS" value=""/>
+		<set name="NMAKE" value="nmake"/>
+		<set name="NMAKEFLAGS" value="-nologo -x - "/>
+		<set name="OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="PERTURBSTARTTIME" value=""/>
+		<!-- add a random delay before starting armcc or armlink to ease contention for licensesthe maximum time to delay in milliseconds. RANSLEEP program must be available.   -->
+		<set name="PERTURBMSECS" value="500"/>
+		<!-- the maximum time to delay in milliseconds -->
+		<set name="BLDINF_OUTPUTPATH" value="$(SBS_BUILD_DIR)"/>
+		<set name="RELEASEPATH" value="$(EPOCROOT)/epoc32/release"/>
+		<set name="RESOLVED_DEFFILE" value=""/>
+		<set name="RUNTIME_LIBS_PATH" value="$(EPOCROOT)/epoc32/release/armv5/lib"/>
+		<set name="SBSV1MAKE" value="$(EPOCROOT)/epoc32/tools/make$(DOTEXE)"/>
+		<set name="SID" value=""/>
+		<set name="EPOCSTACKSIZE" value=""/>
+		<set name="STATIC_LIBRARY_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
+		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)"/>
+		<set name="SYMBIAN_CC_MESSAGE_OPTION" value="$(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION)"/>
+		<set name="SYMBIAN_DLL_DEFINITION" value="__DLL__"/>
+		<set name="SYMBIAN_EXE_DEFINITION" value="__EXE__"/>
+		<set name="SYMBIAN_LINK_FLAGS" value="$(SYMBIAN_LD_MESSAGE_OPTION) $(BPABI_OPTION) $(RELOCATABLE_IMAGE_OPTION) $(UNRESOLVED_SYMBOL_REF_OPTION) $(STDLIB_OPTION) $(EXTRA_LD_OPTION) $(SYMBIAN_LINK_FLAGS.CONFIG) $(SYMBIAN_LINK_FLAGS.VAR)"/>
+		<set name="SYMBIAN_LINK_FLAGS.CONFIG" value=""/>
+		<set name="SYMBIAN_LINK_FLAGS.VAR" value=""/>
+		<set name="SYSTEMINCLUDE" value=""/>
+		<set name="TARGET" value=""/>
+		<set name="UNIX_SLASH_FOR_CC_ABS_PATHS" value="0"/>
+		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
+		<set name="DUMPBCINFO" value=""/>
+		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
+		<set name="PLATMACROS.WINDOWS" value="$(PLATMACROS.TOOLCHAIN) EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
+		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
+		<set name="PLATMACROS.CONFIG" value=""/>
+		<set name="PLATMACROS.VAR" value=""/>
+		<set name="PLATMACROS.TOOLCHAIN" value=""/>
+	</var>
+	<var name="v5">
+		<set name="TRADITIONAL_PLATFORM" value="ARMV5"/>
+		<set name="VARIANTPLATFORM" value="armv5"/>
+		<set name="DEBUG_FORMAT" value="$(CC.DWARF2)"/>
+		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV5)"/>
+		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV5)"/>
+		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+		<set name="GENERATE_ABIV1_IMPLIBS" value="$(SUPPORTS_ABIV1_IMPLIBS)"/>
+	</var>
+	<var name="v6">
+		<set name="TRADITIONAL_PLATFORM" value="ARMV6"/>
+		<set name="VARIANTPLATFORM" value="armv6"/>
+		<set name="PLATMACROS.CONFIG" value="ARMV6"/>
+		<set name="ARMMACROS.CONFIG" value="__ARMV6__"/>
+		<set name="DEBUG_FORMAT" value="$(CC.DWARF2)"/>
+		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV6)"/>
+		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV6)"/>
+		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/armv5/$(VARIANTTYPE)"/>
+		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV2)"/>
+	</var>
+	<var name="v7">
+		<set name="TRADITIONAL_PLATFORM" value="ARMV7"/>
+		<set name="VARIANTPLATFORM" value="armv7"/>
+		<set name="PLATMACROS.CONFIG" value="ARMV7"/>
+		<set name="ARMMACROS.CONFIG" value="__ARMV7__"/>
+		<set name="DEBUG_FORMAT" value="$(CC.DWARF3)"/>
+		<set name="TARGET_ARCH_OPTION" value="$(CC.ARMV7)"/>
+		<set name="LINKER_ARCH_OPTION" value="$(LD.ARMV7)"/>
+		<set name="ARMFPU" value="$(CC.SOFTVFP_MAYBE_VFPV3)"/>
+	</var>
+	<var name="9e" extends="v5">
+		<set name="VARIANTPLATFORM" value="arm9e"/>
+		<set name="PLATMACROS.CONFIG" value="ARM9E"/>
+		<set name="ARMMACROS.CONFIG" value="__ARM9E__"/>
+		<set name="TARGET_ARCH_OPTION" value="--cpu ARM9E"/>
+		<set name="STATIC_RUNTIME_DIR" value="$(EPOCROOT)/epoc32/release/armv5/$(VARIANTTYPE)"/>
+	</var>
+
+	<alias name="armv5_urel" meaning="arm.v5.urel.rvct2_2"/>
+	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct2_2"/>
+	<!-- To switch to GCCE for building armv5 code, 
+	comment out the two lines above this comment
+	and comment in the two lines below this comment -->
+	<!-- <alias name="armv5_urel" meaning="arm.v5.urel.gcce4_3_2"/> -->
+	<!-- <alias name="armv5_udeb" meaning="arm.v5.udeb.gcce4_3_2"/> -->
+
+	<!-- These aliases are provided to work with the "gcce_armv5" group -->
+	<alias name="armv5_urel_gcce4_3_2" meaning="arm.v5.urel.gcce4_3_2"/>
+	<alias name="armv5_udeb_gcce4_3_2" meaning="arm.v5.udeb.gcce4_3_2"/>
+
+	<!-- GCCE 4.3.3 aliases -->
+	<alias name="armv5_urel_gcce4_3_3" meaning="arm.v5.urel.gcce4_3_3"/>
+	<alias name="armv5_udeb_gcce4_3_3" meaning="arm.v5.udeb.gcce4_3_3"/>
+	
+	<alias name="armv6_urel" meaning="arm.v6.urel.rvct2_2"/>
+	<alias name="armv6_udeb" meaning="arm.v6.udeb.rvct2_2"/>
+	<alias name="armv7_urel" meaning="arm.v7.urel.rvct3_1"/>
+	<alias name="armv7_udeb" meaning="arm.v7.udeb.rvct3_1"/>
+
+	<alias name="arm9e_urel" meaning="arm.9e.urel.rvct2_2"/>
+	<alias name="arm9e_udeb" meaning="arm.9e.udeb.rvct2_2"/>
+
+	<group name="armv5">
+		<aliasRef ref="armv5_urel"/>
+		<aliasRef ref="armv5_udeb"/>
+	</group>
+
+	<group name="armv6">
+		<aliasRef ref="armv6_urel"/>
+		<aliasRef ref="armv6_udeb"/>
+	</group>
+	<group name="armv7">
+		<aliasRef ref="armv7_urel"/>
+		<aliasRef ref="armv7_udeb"/>
+	</group>
+
+	<group name="arm9e">
+		<aliasRef ref="arm9e_urel"/>
+		<aliasRef ref="arm9e_udeb"/>
+	</group>
+	
+	<group name="gcce_armv5">
+		<aliasRef ref="armv5_urel_gcce4_3_2"/>
+		<aliasRef ref="armv5_udeb_gcce4_3_2"/>
+	</group>
+	
+</build>
--- a/sbsv2/raptor/lib/config/build.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/build.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Configuration for metadata processing  -->
-
-	<var name="build">
-		<varRef ref="default.locations"/>
-	</var>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Configuration for metadata processing  -->
+
+	<var name="build">
+		<varRef ref="default.locations"/>
+	</var>
+</build>
--- a/sbsv2/raptor/lib/config/carbide.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/carbide.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,37 +1,37 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/666.xsd">
-
-	<!-- This file is for Carbide to get a list of buildable configurations.
-	
-		The config elements are from the old 1.0 schema but the file has
-		an invalid schema version which forces the Raptor XML parser to
-		ignore it.
-		
-		This is an interim measure until a formal API is agreed. -->
-	
-	<config name="arm" abstract="true">
-		<config name="armv5" abstract="true">
-			<config name="armv5_urel"/>
-			<config name="armv5_udeb"/>
-		</config>
-		<config name="armv6" abstract="true">
-			<config name="armv6_urel"/>
-			<config name="armv6_udeb"/>
-		</config>
-		<config name="armv7" abstract="true">
-			<config name="armv7_urel"/>
-			<config name="armv7_udeb"/>
-		</config>
-		<config name="armv9e" abstract="true">
-			<config name="armv9e_urel"/>
-			<config name="armv9e_udeb"/>
-		</config>
-	</config>
-
-	<config name="winscw" abstract="true">
-		<config name="winscw_urel"/>
-		<config name="winscw_udeb"/>
-	</config>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/666.xsd">
+
+	<!-- This file is for Carbide to get a list of buildable configurations.
+	
+		The config elements are from the old 1.0 schema but the file has
+		an invalid schema version which forces the Raptor XML parser to
+		ignore it.
+		
+		This is an interim measure until a formal API is agreed. -->
+	
+	<config name="arm" abstract="true">
+		<config name="armv5" abstract="true">
+			<config name="armv5_urel"/>
+			<config name="armv5_udeb"/>
+		</config>
+		<config name="armv6" abstract="true">
+			<config name="armv6_urel"/>
+			<config name="armv6_udeb"/>
+		</config>
+		<config name="armv7" abstract="true">
+			<config name="armv7_urel"/>
+			<config name="armv7_udeb"/>
+		</config>
+		<config name="armv9e" abstract="true">
+			<config name="armv9e_urel"/>
+			<config name="armv9e_udeb"/>
+		</config>
+	</config>
+
+	<config name="winscw" abstract="true">
+		<config name="winscw_urel"/>
+		<config name="winscw_udeb"/>
+	</config>
+
+</build>
--- a/sbsv2/raptor/lib/config/coverity.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/coverity.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-
-	<!-- Coverity testing -->
-	<var name="coverity">
-		<prepend name='CC' value='D:/apps/Coverity/bin/cov-translate.exe --run-compile '/>
-	</var>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+
+
+	<!-- Coverity testing -->
+	<var name="coverity">
+		<prepend name='CC' value='D:/apps/Coverity/bin/cov-translate.exe --run-compile '/>
+	</var>
+</build>
--- a/sbsv2/raptor/lib/config/default.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/default.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-	<!-- The build configurations built by default -->
-
-	<group name="default">
-		<groupRef ref="armv5"/>
-		<groupRef ref="winscw"/>
-	</group>
-
-	<group name="urel">
-		<aliasRef ref="armv5_urel"/>
-		<aliasRef ref="winscw_urel"/>
-	</group>
-
-	<group name="udeb">
-		<aliasRef ref="armv5_udeb"/>
-		<aliasRef ref="winscw_udeb"/>
-	</group>
-
-	<!-- all known configurations -->
-
-	<group name="all">
-		<groupRef ref="armv5"/>
-		<groupRef ref="armv7"/>
-		<groupRef ref="gccxml"/>
-		<groupRef ref="tools"/>
-		<groupRef ref="tools2"/>
-		<groupRef ref="winscw"/>
-	</group>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+
+	<!-- The build configurations built by default -->
+
+	<group name="default">
+		<groupRef ref="armv5"/>
+		<groupRef ref="winscw"/>
+	</group>
+
+	<group name="urel">
+		<aliasRef ref="armv5_urel"/>
+		<aliasRef ref="winscw_urel"/>
+	</group>
+
+	<group name="udeb">
+		<aliasRef ref="armv5_udeb"/>
+		<aliasRef ref="winscw_udeb"/>
+	</group>
+
+	<!-- all known configurations -->
+
+	<group name="all">
+		<groupRef ref="armv5"/>
+		<groupRef ref="armv7"/>
+		<groupRef ref="gccxml"/>
+		<groupRef ref="tools"/>
+		<groupRef ref="tools2"/>
+		<groupRef ref="winscw"/>
+	</group>
+
+</build>
--- a/sbsv2/raptor/lib/config/gcc.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/gcc.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,106 +1,106 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-	<!-- build configurations for GCC compilers -->
-	<var name="tools2_base" extends="root">
-
-		<varRef ref="default.interfaces"/>
-		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
-		<env name='RANLIB' default='$(GCCPREFIX)ranlib$(DOTEXE)' type='tool'/>
-		<env name='GCC' default='$(GCCPREFIX)g++$(DOTEXE)' type='tool'/>
-		<env name='AR' default='$(GCCPREFIX)ar$(DOTEXE)' type='tool'/>
-
-		<!-- interfaces -->
-		<set name="INTERFACE.exe" value="Tools.exe"/>
-		<set name="INTERFACE.lib" value="Tools.lib"/>
-
-		<!-- Java used by Trace Compiler -->
-		<env name='JAVA_HOME' default='' type='path'/>
-		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
-
-		<!-- link to bld.inf and mmp platform names -->
-		<set name='TRADITIONAL_PLATFORM' value='TOOLS2'/>
-		<set name='VARIANTPLATFORM' value='tools2'/>
-
-		<!-- used by FLM code -->
-		<set name='COMPILER' value='$(GCC) -c' type='tool' versionCommand='$(GCC) -v' versionResult='gcc version (3.[456])|(4.[0-9])'/>
-
-		<set name='CFLAGS' value='-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fguess-branch-probability -fcprop-registers -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping -pipe -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -m32'/>
-
-		<!-- msys based programs sometimes don't search the path properly.
-		COMPILER_PATH can be set to tell gcc where to find
-		as.exe (sometimes it doesn't and a build step fails).
-		-->
-		<set name='COMPILER_PATH.WIN32' value='$(SBS_HOME)/win32/mingw/bin'/>
-		<set name='COMPILER_PATH.LINUX' value=''/>
-
-		<set name='CFLAGS.WIN32' value=''/>
-
-		<!-- macro definitions set by mmps etc -->
-		<set name='CDEFS' value='$(MMPDEFS)'/>
-
-
-		<set name='CDEFS.DEFAULT' value='__SYMBIAN32__ __TOOLS__ __TOOLS2__ __EXE__ __SUPPORT_CPP_EXCEPTIONS__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)"'/>
-		<set name='CDEFS.WIN32' value='$(CDEFS.DEFAULT) _WIN32 WIN32 _WINDOWS __TOOLS2_WINDOWS__'/>
-		<set name='CDEFS.LINUX' value='$(CDEFS.DEFAULT) __LINUX__ __TOOLS2_LINUX__'/>
-
-		<set name='INC.COMPILER' value='$(EPOCINCLUDE)/gcc_mingw/gcc_mingw_3_4_2.h'/>
-
-		<set name='OPT.D' value='-D'/>
-		<set name='OPT.L' value='-L'/>
-		<set name='OPT.l' value='-l'/>
-		<set name='OPT.O' value='-o '/>
-		<set name='OPT.PREINCLUDE' value='-include '/>
-		<set name='OPT.SYSTEMINCLUDE' value='-isystem '/>
-		<set name='OPT.USERINCLUDE' value='-I '/>
-
-		<!-- always use stlport headers -->
-		<set name='SYSTEMINCLUDE' value='$(EPOCINCLUDE)/tools/stlport'/>
-
-		<set name='LINKER' value='$(GCC)'/>
-		<set name='LFLAGS' value=''/>
-		<set name='STATICLIBRARY' value='stlport.5.1'/>
-		<set name='LIBS' value=''/>
-		<set name='LIBS.WIN32' value='$(LIBS)'/>
-		<set name='LIBS.LINUX' value='$(LIBS) pthread'/>
-
-		<set name='PLATMACROS.WINDOWS' value='GCC32 TOOLS2 TOOLS2_WINDOWS'/>
-		<set name='PLATMACROS.LINUX' value='GCC32 TOOLS2 TOOLS2_LINUX'/>
-
-		<set name='ARCHIVER' value='$(AR)'/>
-		<set name='AFLAGS' value='cr'/>
-
-		<set name='MMPDEFS' value=''/>
-		<set name='TARGET' value=''/>
-		<set name='TARGETTYPE' value=''/>
-		<set name='BLDINF_OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-
-		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release/tools2$$(TOOLPLATFORMDIR)'/>
-	</var>
-
-	<var name="tools2_deb" extends="tools2_base">
-		<set name='TOOLSPATH' value=''/> <!-- do not install -->
-		<set name='VARIANTTYPE' value='deb'/>
-
-		<append name='CFLAGS' value='-g'/>
-		<append name='CDEFS' value='_DEBUG'/>
-		<append name='RELEASEPATH' value='/deb' separator=''/>
-	</var>
-
-	<var name="tools2_rel" extends="tools2_base">
-		<set name='TOOLSPATH' value='$(EPOCTOOLS)'/> <!-- install -->
-		<set name='VARIANTTYPE' value='rel'/>
-
-		<append name='CFLAGS' value='-s'/>
-		<append name='CDEFS' value='NDEBUG'/>
-		<append name='RELEASEPATH' value='/rel' separator=''/>
-	</var>
-
-	<group name="tools2">
-		<varRef ref='tools2_rel'/>
-		<varRef ref='tools2_deb'/>
-	</group>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+
+	<!-- build configurations for GCC compilers -->
+	<var name="tools2_base" extends="root">
+
+		<varRef ref="default.interfaces"/>
+		<varRef ref="default.locations"/>
+		<!-- picked up from the Environment -->
+		<env name='RANLIB' default='$(GCCPREFIX)ranlib$(DOTEXE)' type='tool'/>
+		<env name='GCC' default='$(GCCPREFIX)g++$(DOTEXE)' type='tool'/>
+		<env name='AR' default='$(GCCPREFIX)ar$(DOTEXE)' type='tool'/>
+
+		<!-- interfaces -->
+		<set name="INTERFACE.exe" value="Tools.exe"/>
+		<set name="INTERFACE.lib" value="Tools.lib"/>
+
+		<!-- Java used by Trace Compiler -->
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
+
+		<!-- link to bld.inf and mmp platform names -->
+		<set name='TRADITIONAL_PLATFORM' value='TOOLS2'/>
+		<set name='VARIANTPLATFORM' value='tools2'/>
+
+		<!-- used by FLM code -->
+		<set name='COMPILER' value='$(GCC) -c' type='tool' versionCommand='$(GCC) -v' versionResult='gcc version (3.[456])|(4.[0-9])'/>
+
+		<set name='CFLAGS' value='-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fif-conversion -fif-conversion2 -fguess-branch-probability -fcprop-registers -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks -freorder-functions -fstrict-aliasing -funit-at-a-time -falign-functions -falign-jumps -falign-loops -falign-labels -fcrossjumping -pipe -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -m32'/>
+
+		<!-- msys based programs sometimes don't search the path properly.
+		COMPILER_PATH can be set to tell gcc where to find
+		as.exe (sometimes it doesn't and a build step fails).
+		-->
+		<set name='COMPILER_PATH.WIN32' value='$(SBS_HOME)/win32/mingw/bin'/>
+		<set name='COMPILER_PATH.LINUX' value=''/>
+
+		<set name='CFLAGS.WIN32' value=''/>
+
+		<!-- macro definitions set by mmps etc -->
+		<set name='CDEFS' value='$(MMPDEFS)'/>
+
+
+		<set name='CDEFS.DEFAULT' value='__SYMBIAN32__ __TOOLS__ __TOOLS2__ __EXE__ __SUPPORT_CPP_EXCEPTIONS__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)"'/>
+		<set name='CDEFS.WIN32' value='$(CDEFS.DEFAULT) _WIN32 WIN32 _WINDOWS __TOOLS2_WINDOWS__'/>
+		<set name='CDEFS.LINUX' value='$(CDEFS.DEFAULT) __LINUX__ __TOOLS2_LINUX__'/>
+
+		<set name='INC.COMPILER' value='$(EPOCINCLUDE)/gcc_mingw/gcc_mingw_3_4_2.h'/>
+
+		<set name='OPT.D' value='-D'/>
+		<set name='OPT.L' value='-L'/>
+		<set name='OPT.l' value='-l'/>
+		<set name='OPT.O' value='-o '/>
+		<set name='OPT.PREINCLUDE' value='-include '/>
+		<set name='OPT.SYSTEMINCLUDE' value='-isystem '/>
+		<set name='OPT.USERINCLUDE' value='-I '/>
+
+		<!-- always use stlport headers -->
+		<set name='SYSTEMINCLUDE' value='$(EPOCINCLUDE)/tools/stlport'/>
+
+		<set name='LINKER' value='$(GCC)'/>
+		<set name='LFLAGS' value=''/>
+		<set name='STATICLIBRARY' value='stlport.5.1'/>
+		<set name='LIBS' value=''/>
+		<set name='LIBS.WIN32' value='$(LIBS)'/>
+		<set name='LIBS.LINUX' value='$(LIBS) pthread'/>
+
+		<set name='PLATMACROS.WINDOWS' value='GCC32 TOOLS2 TOOLS2_WINDOWS'/>
+		<set name='PLATMACROS.LINUX' value='GCC32 TOOLS2 TOOLS2_LINUX'/>
+
+		<set name='ARCHIVER' value='$(AR)'/>
+		<set name='AFLAGS' value='cr'/>
+
+		<set name='MMPDEFS' value=''/>
+		<set name='TARGET' value=''/>
+		<set name='TARGETTYPE' value=''/>
+		<set name='BLDINF_OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
+
+		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
+		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release/tools2$$(TOOLPLATFORMDIR)'/>
+	</var>
+
+	<var name="tools2_deb" extends="tools2_base">
+		<set name='TOOLSPATH' value=''/> <!-- do not install -->
+		<set name='VARIANTTYPE' value='deb'/>
+
+		<append name='CFLAGS' value='-g'/>
+		<append name='CDEFS' value='_DEBUG'/>
+		<append name='RELEASEPATH' value='/deb' separator=''/>
+	</var>
+
+	<var name="tools2_rel" extends="tools2_base">
+		<set name='TOOLSPATH' value='$(EPOCTOOLS)'/> <!-- install -->
+		<set name='VARIANTTYPE' value='rel'/>
+
+		<append name='CFLAGS' value='-s'/>
+		<append name='CDEFS' value='NDEBUG'/>
+		<append name='RELEASEPATH' value='/rel' separator=''/>
+	</var>
+
+	<group name="tools2">
+		<varRef ref='tools2_rel'/>
+		<varRef ref='tools2_deb'/>
+	</group>
+
+</build>
--- a/sbsv2/raptor/lib/config/gcce.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/gcce.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,108 +1,104 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- GCCE build variant for ARM compilers -->
-	<!-- This is called gcce_base in case someone wants to use "gcce" as a configuration name -->
-	<var name="gcce_base">
-		<set name="TOOLCHAIN" value="GCCE"/>
-		<set name="CC" value="$(GCCECC)"/>
-		<set name="LD" value="$(GCCELD)"/>
-		<set name="ASM" value="$(GCCEASM)"/>
-		<set name="AR" value="$(GCCEAR)"/>		
-		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)"/>
-		<set name="GCCELD" value="$(GCCEBIN)/arm-none-symbianelf-ld$(DOTEXE)"/>
-		<set name="GCCEASM" value="$(GCCEBIN)/arm-none-symbianelf-as$(DOTEXE)"/>
-		<set name="GCCEAR" value="$(GCCEBIN)/arm-none-symbianelf-ar$(DOTEXE)"/>
-		<set name="FROMELF" value="$(GCCEBIN)/arm-none-symbianelf-readelf$(DOTEXE)"/>
-		<set name="AAPCS_OPTION" value="-mapcs -mthumb-interwork"/>
-		<set name="ARCHIVER_CREATE_OPTION" value="cr"/>
-		<set name="ARM_INSTRUCTION_SET" value="-marm"/>
-		<set name="ASM_OUTPUT_OPTION" value="-o"/>
-		<set name="ASSEMBLER_LISTING_OPTION" value="-S"/>
-		<set name="BPABI_OPTION" value=""/>
-		<set name="CC_ERRORS_CONTROL_OPTION" value=""/>
-		<set name="CC_WARNINGS_CONTROL_OPTION" value="-Wall -Wno-unknown-pragmas"/>
-		<set name="C_LANG_OPTION" value="-x c"/>
-		<set name="COMMANDFILE_OPTION" value="@"/>
-		<set name="COMPILE_ONLY_OPTION" value="-c"/>
-		<set name="CPP_LANG_OPTION" value="-x c++ -Wno-ctor-dtor-privacy"/>
-		<set name="DEBUG_OPTIMISATION" value="-O0"/>
-		<set name="DEPEND_OPTION" value="-MD -MF"/>
-		<set name="ENUM_OPTION" value=""/>
-		<set name="EXPORT_VTBL_OPTION" value=""/>
-		<set name="EXTRA_LD_OPTION" value=""/>
-		<set name="FPMODE_OPTION" value=""/>
-		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
-		<set name="LD_WARNINGS_CONTROL_OPTION" value="--no-undefined"/>
-		<set name="LISTING_OPTION" value="-S"/>
-		<set name="EXCEPTIONS" value="-fexceptions"/>
-		<set name="NO_EXCEPTIONS" value="-fno-exceptions"/>
-		<set name="PREINCLUDE_OPTION" value="-include"/>
-		<set name="PREPROCESSOR_OPTION" value="-E"/>
-		<set name="REL_OPTIMISATION" value="-O2"/>
-		<set name="STDLIB_OPTION" value="-nostdlib"/>
-		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value=""/>
-		<set name="RW_BASE_OPTION" value="-Tdata"/>
-		<set name="CODE_SEGMENT_START" value="-Ttext"/>
-		<set name="PREINCLUDE" value="$(EPOCINCLUDE)/gcce/gcce.h"/>
-		<!-- From the GCC manual: "With this option, GCC uses features of DWARF version 3 when they are useful; ..." -->
-		<!-- There is no -gdwarf-3 option; hence CC.DWARF2 and CC.DWARF3 have the same value. -->
-		<set name="CC.DWARF2" value="-gdwarf-2"/>
-		<set name="CC.DWARF3" value="-gdwarf-2"/>
-		<set name="LD.ARMV5" value=""/>
-		<set name="LD.ARMV6" value=""/>
-		<set name="LD.ARMV7" value=""/>
-		<set name="ARMMACROS.VAR" value=""/>
-		<set name="CFLAGS" value=""/>
-		<set name="CIADEFS" value="__CIA__"/>
-		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __GCCE__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
-		<!-- Note that the intention of ABLD for CIA compilation seems to be "-S -Wa,-adln", although this doesn't work -->
-		<set name="COMPILER_CIA_FLAGS" value="-marm"/>
-		<set name="COMPILER_DEFINES" value="-D__GCCE__"/>
-		<set name="COMPILER_FPU_FLAGS" value="$(CC.OPT.SOFTVFP_MAYBE_VFPV2)$(CC.VAL.SOFTVFP_MAYBE_VFPV2)"/>		
-		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
-		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-I"/>
-		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
-		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
-		<set name="EXTRA_CC_OPTION" value=""/>
-		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
-		<set name="LIBPATH" value=""/>
-		<set name="LIBRARY" value=""/>
-		<set name="LICENSERETRY_OPTION" value=""/>
-		<set name="LINKER_ADD_STATIC_RUNTIME" value="1"/>
-		<set name="LINKER_DEBUG_OPTION" value=""/>
-		<!-- Clearly the linker libs stuff following isn't right - need to use ARMLIBS (or reinvent this a bit) -->
-		<set name="LINKER_DEFAULT_LIBS" value="-lsupc++ -lgcc"/>
-		<set name="LINKER_DEFAULT_LIB_PATHS" value="-L $(GCCEBIN)/../lib/gcc/arm-none-symbianelf/$(TOOLCHAINVERSION) -L $(GCCEBIN)/../lib/gcc/arm-none-symbianelf/$(TOOLCHAINVERSION)/../../../../arm-none-symbianelf/lib"/>
-		<set name="LINKER_ENTRY_OPTION" value="--entry"/>
-		<set name="LINKER_GROUP_START_OPTION" value="--start-group"/>
-		<set name="LINKER_GROUP_END_OPTION" value="--end-group"/>
-		<set name="LINKER_MISC_FLAGS" value="$(CODE_SEGMENT_START) 0x8000"/>
-		<set name="LINKER_NODEBUG_OPTION" value = "--strip-debug"/>
-		<set name="LINKER_SCRIPT_FILE_OPTION" value="-T"/>
-		<set name="LINKER_SYMBOLS_OPTION" value="-Map"/>
-		<set name="LINKER_SYMBOLS_FILE_OPTION" value=""/>
-		<set name="SHARED_OBJECT_OPTION" value="-shared"/>
-		<set name="SID" value=""/>
-		<set name="SO_NAME_OPTION" value="-soname"/>
-		<set name="STATIC_LIBS_PATH" value="" />
-		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
-		<set name="SUPPORTS_ABIV1_IMPLIBS" value=""/>	
-		<set name="SYMBIAN_LD_MESSAGE_OPTION" value="$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)"/>
-		<set name="TARGET_RELOCATION_OPTION" value="--target1-rel" />
-		<set name="SYMVER_OPTION" value="--default-symver"/>
-		<set name="TEMP_FILES_OPTION" value="-pipe"/>
-		<set name="THUMB_INSTRUCTION_SET" value="-mthumb"/>
-		<set name="TRANSFORM_CIA" value=""/>		
-		<set name="INSTRUCTION_SET" value=""/>
-		<set name="UNDEFINED_SYMBOL_REF_OPTION" value="-u"/>
-		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
-		<set name="USERINCLUDE" value=""/>
-		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
-		<set name="VFE_OPTION" value=""/>
-		<set name="PLATMACROS.WINDOWS" value="GCCE EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
-		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
-		<set name="PLATMACROS.CONFIG" value=""/>
-		<set name="PLATMACROS.VAR" value=""/>
-		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
-	</var>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- GCCE build variant for ARM compilers -->
+	<!-- This is called gcce_base in case someone wants to use "gcce" as a configuration name -->
+	<var name="gcce_base">
+		<set name="TOOLCHAIN" value="GCCE"/>
+		<set name="PLATMACROS.TOOLCHAIN" value="GCCE"/>
+		<set name="CC" value="$(GCCECC)"/>
+		<set name="LD" value="$(GCCELD)"/>
+		<set name="ASM" value="$(GCCEASM)"/>
+		<set name="AR" value="$(GCCEAR)"/>		
+		<set name="GCCECC" value="$(GCCEBIN)/arm-none-symbianelf-g++$(DOTEXE)"/>
+		<set name="GCCELD" value="$(GCCEBIN)/arm-none-symbianelf-ld$(DOTEXE)"/>
+		<set name="GCCEASM" value="$(GCCEBIN)/arm-none-symbianelf-as$(DOTEXE)"/>
+		<set name="GCCEAR" value="$(GCCEBIN)/arm-none-symbianelf-ar$(DOTEXE)"/>
+		<set name="FROMELF" value="$(GCCEBIN)/arm-none-symbianelf-readelf$(DOTEXE)"/>
+		<set name="AAPCS_OPTION" value="-mapcs -mthumb-interwork"/>
+		<set name="ARCHIVER_CREATE_OPTION" value="cr"/>
+		<set name="ARM_INSTRUCTION_SET" value="-marm"/>
+		<set name="ASM_OUTPUT_OPTION" value="-o"/>
+		<set name="ASSEMBLER_LISTING_OPTION" value="-S"/>
+		<set name="BPABI_OPTION" value=""/>
+		<set name="CC_ERRORS_CONTROL_OPTION" value=""/>
+		<set name="CC_WARNINGS_CONTROL_OPTION" value="-Wall -Wno-unknown-pragmas"/>
+		<set name="C_LANG_OPTION" value="-x c"/>
+		<set name="COMMANDFILE_OPTION" value="@"/>
+		<set name="COMPILE_ONLY_OPTION" value="-c"/>
+		<set name="CPP_LANG_OPTION" value="-x c++ -Wno-ctor-dtor-privacy"/>
+		<set name="DEBUG_OPTIMISATION" value="-O0"/>
+		<set name="DEPEND_OPTION" value="-MD -MF"/>
+		<set name="ENUM_OPTION" value=""/>
+		<set name="EXPORT_VTBL_OPTION" value=""/>
+		<set name="EXTRA_LD_OPTION" value=""/>
+		<set name="FPMODE_OPTION" value=""/>
+		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
+		<set name="LD_WARNINGS_CONTROL_OPTION" value="--no-undefined"/>
+		<set name="LISTING_OPTION" value="-S"/>
+		<set name="EXCEPTIONS" value="-fexceptions"/>
+		<set name="NO_EXCEPTIONS" value="-fno-exceptions"/>
+		<set name="PREINCLUDE_OPTION" value="-include"/>
+		<set name="PREPROCESSOR_OPTION" value="-E"/>
+		<set name="REL_OPTIMISATION" value="-O2"/>
+		<set name="STDLIB_OPTION" value="-nostdlib"/>
+		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value=""/>
+		<set name="RW_BASE_OPTION" value="-Tdata"/>
+		<set name="CODE_SEGMENT_START" value="-Ttext"/>
+		<set name="PREINCLUDE" value="$(EPOCINCLUDE)/gcce/gcce.h"/>
+		<!-- From the GCC manual: "With this option, GCC uses features of DWARF version 3 when they are useful; ..." -->
+		<!-- There is no -gdwarf-3 option; hence CC.DWARF2 and CC.DWARF3 have the same value. -->
+		<set name="CC.DWARF2" value="-gdwarf-2"/>
+		<set name="CC.DWARF3" value="-gdwarf-2"/>
+		<set name="LD.ARMV5" value=""/>
+		<set name="LD.ARMV6" value=""/>
+		<set name="LD.ARMV7" value=""/>
+		<set name="CFLAGS" value=""/>
+		<set name="CIADEFS" value="__CIA__"/>
+		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __GCCE__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
+		<!-- Note that the intention of ABLD for CIA compilation seems to be "-S -Wa,-adln", although this doesn't work -->
+		<set name="COMPILER_CIA_FLAGS" value="-marm"/>
+		<set name="COMPILER_DEFINES" value="-D__GCCE__"/>
+		<set name="COMPILER_FPU_FLAGS" value="$(CC.OPT.SOFTVFP_MAYBE_VFPV2)$(CC.VAL.SOFTVFP_MAYBE_VFPV2)"/>		
+		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
+		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-I"/>
+		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
+		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
+		<set name="EXTRA_CC_OPTION" value=""/>
+		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
+		<set name="LIBPATH" value=""/>
+		<set name="LIBRARY" value=""/>
+		<set name="LICENSERETRY_OPTION" value=""/>
+		<set name="LINKER_ADD_STATIC_RUNTIME" value="1"/>
+		<set name="LINKER_DEBUG_OPTION" value=""/>
+		<!-- Clearly the linker libs stuff following isn't right - need to use ARMLIBS (or reinvent this a bit) -->
+		<set name="LINKER_DEFAULT_LIBS" value="-lsupc++ -lgcc"/>
+		<set name="LINKER_DEFAULT_LIB_PATHS" value="-L $(GCCEBIN)/../lib/gcc/arm-none-symbianelf/$(TOOLCHAINVERSION) -L $(GCCEBIN)/../lib/gcc/arm-none-symbianelf/$(TOOLCHAINVERSION)/../../../../arm-none-symbianelf/lib"/>
+		<set name="LINKER_ENTRY_OPTION" value="--entry"/>
+		<set name="LINKER_GROUP_START_OPTION" value="--start-group"/>
+		<set name="LINKER_GROUP_END_OPTION" value="--end-group"/>
+		<set name="LINKER_MISC_FLAGS" value="$(CODE_SEGMENT_START) 0x8000"/>
+		<set name="LINKER_NODEBUG_OPTION" value = "--strip-debug"/>
+		<set name="LINKER_SCRIPT_FILE_OPTION" value="-T"/>
+		<set name="LINKER_SYMBOLS_OPTION" value="-Map"/>
+		<set name="LINKER_SYMBOLS_FILE_OPTION" value=""/>
+		<set name="SHARED_OBJECT_OPTION" value="-shared"/>
+		<set name="SID" value=""/>
+		<set name="SO_NAME_OPTION" value="-soname"/>
+		<set name="STATIC_LIBS_PATH" value="" />
+		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
+		<set name="SUPPORTS_ABIV1_IMPLIBS" value=""/>	
+		<set name="SYMBIAN_LD_MESSAGE_OPTION" value="$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)"/>
+		<set name="TARGET_RELOCATION_OPTION" value="--target1-rel" />
+		<set name="SYMVER_OPTION" value="--default-symver"/>
+		<set name="TEMP_FILES_OPTION" value="-pipe"/>
+		<set name="THUMB_INSTRUCTION_SET" value="-mthumb"/>
+		<set name="TRANSFORM_CIA" value=""/>		
+		<set name="INSTRUCTION_SET" value=""/>
+		<set name="UNDEFINED_SYMBOL_REF_OPTION" value="-u"/>
+		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
+		<set name="USERINCLUDE" value=""/>
+		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
+		<set name="VFE_OPTION" value=""/>
+		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
+	</var>
+</build>
--- a/sbsv2/raptor/lib/config/gccxml.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/gccxml.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,115 +1,115 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for the gccxml_cc1plus C++ language processor -->
-	<var name="gccxml_base" extends="root">
-		<varRef ref="default.interfaces"/>
-		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
-		<env name='CPP' default='$(GNUCPP)' type='tool'/>
-		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
-		<env name='CREATERFIFILE' default='$(PERL) $(SBS_HOME)/bin/createrfifile.pl ' type='path'/>
-		<env name='GNUAWK' default='$(GNUPREFIX)gawk$(DOTEXE)' type='tool' versionCommand='$(GNUAWK) --version' versionResult='GNU Awk [3-9].*'/>
-		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
-		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
-		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
-		<env name='RVCT22BIN' type='path'/>
-		<env name='RVCT22INC' type='path'/>
-		<env name='RVCT22LIB' type='path'/>
-		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>
-
-		<!-- link to bld.inf and mmp platform names -->
-		<set name='TRADITIONAL_PLATFORM' value='GCCXML'/>
-
-		<!-- interfaces -->
-		<set name="INTERFACE.ani" value="analysis.ani"/>
-		<set name="INTERFACE.dll" value="analysis.dll"/>
-		<set name="INTERFACE.exe" value="analysis.exe"/>
-		<set name="INTERFACE.exexp" value="analysis.exexp"/>
-		<set name="INTERFACE.extension" value="analysis.extension"/>
-		<set name="INTERFACE.implib" value="analysis.implib"/>
-		<set name="INTERFACE.fsy" value="analysis.fsy"/>
-		<set name="INTERFACE.kdll" value="analysis.kdll"/>
-		<set name="INTERFACE.kext" value="analysis.kext"/>
-		<set name="INTERFACE.klib" value="analysis.klib"/>
-		<set name="INTERFACE.ldd" value="analysis.ldd"/>
-		<set name="INTERFACE.lib" value="analysis.lib"/>
-		<set name="INTERFACE.pdd" value="analysis.pdd"/>
-		<set name="INTERFACE.pdl" value="analysis.pdl"/>
-		<set name="INTERFACE.plugin" value="analysis.plugin"/>
-		<set name="INTERFACE.resource" value="analysis.resource"/>
-		<set name="INTERFACE.stddll" value="analysis.stddll"/>
-		<set name="INTERFACE.stdexe" value="analysis.stdexe"/>
-		<set name="INTERFACE.stdlib" value="analysis.stdlib"/>
-		<set name="INTERFACE.textnotifier2" value="analysis.textnotifier2"/>
-		<set name="INTERFACE.var" value="analysis.var"/>
-		<set name="INTERFACE.var2" value="analysis.var2"/>
-		<!-- the following should really be done via the default "Symbian.*" interfaces from standard.xml - but they're currently tied to non-defaulted ARM build specifics -->
-		<set name="INTERFACE.none" value="analysis.none"/>
-
-		<!-- Java used by Trace Compiler -->
-		<env name='JAVA_HOME' default='' type='path'/>
-		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
-
-		<!-- note that gccxml_cc1plus should be version checked, but I've yet to find a reliable way of doing this -->
-		<set name='CC' value="$(EPOCROOT)/epoc32/tools/gccxml_cc1plus$(DOTEXE)" type='tool'/>
-		<set name='CDEFS' value='_UNICODE __SYMBIAN32__ __GCC32__ __EPOC32__ __MARM__ __MINGW32__ _STLP_LITTLE_ENDIAN __GCCXML__ __MARM_ARM4__ $(MMPDEFS)'/>
-		<set name='CFLAGS' value='-bi -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -UWIN32 -fshort-wchar -quiet -w '/>
-
-		<!-- in support of TEMs - processed as if in an RVCT build -->
-		<set name='RVCTBIN' value='$(RVCT22BIN)'/>
-		<set name='RVCTINC' value='$(RVCT22INC)'/>
-		<set name='RVCTLIB' value='$(RVCT22LIB)'/>
-
-		<set name='CPPFLAGS' value='-nostdinc -M -MG'/>
-
-		<set name='MMPDEFS' value=''/>
-		<set name='NMAKE' value='nmake$(DOTEXE)'/>
-		<set name='NMAKEFLAGS' value='-nologo -x - '/>
-		<set name='MAIN_OUTPUTPATH' value='$(EPOCROOT)/epoc32/build'/>
-		<set name='OUTPUTPATH' value='$(MAIN_OUTPUTPATH)'/>
-		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release'/>
-		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
-		<set name='SYSTEMINCLUDE' value=''/>
-		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
-		<set name='TARGETPATH' value=''/>
-		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
-		<set name='USERINCLUDE' value=''/>
-		<set name='VARIANTPLATFORM' value='gccxml'/>
-
-		<set name='OPT.DEFINE' value='-D'/>
-		<set name='OPT.OUT' value='-o '/>
-		<set name='OPT.PREINCLUDE' value='-include '/>
-		<set name='OPT.SPLITINCLUDE' value=' -I- '/>
-		<set name='OPT.SYSINCLUDE' value='-I '/>
-		<set name='OPT.USERINCLUDE' value='-I '/>
-		<set name='PLATMACROS.WINDOWS' value='GCCXML ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5'/>
-		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
-		
-		<set name='KERNEL_MODE_DEF' value='__KERNEL_MODE__'/>
-		<set name='KERNEL_MODE_INCLUDES' value='$(EPOCINCLUDE)/nkern $(EPOCINCLUDE)/kernel/arm $(EPOCINCLUDE)/memmodel/epoc $(EPOCINCLUDE)/kernel $(EPOCINCLUDE)/nkern/arm'/>
-		<set name='STDCPP_DEF' value='__SYMBIAN_STDCPP_SUPPORT__'/>
-		<set name='STDCPP_INCLUDE' value='$(EPOCINCLUDE)/stdapis'/>
-	</var>
-
-	<var name="gccxml_udeb" extends="gccxml_base">
-		<set name='FULLVARIANTPATH' value='gccxml/udeb'/>
-		<set name='VARIANTTYPE' value='udeb'/>
-
-		<append name='CDEFS' value='_DEBUG'/>
-		<append name='CFLAGS' value='-g'/>
-	</var>
-
-	<var name="gccxml_urel" extends="gccxml_base">
-		<set name='FULLVARIANTPATH' value='gccxml/urel'/>
-		<set name='VARIANTTYPE' value='urel'/>
-
-		<append name='CDEFS' value='NDEBUG'/>
-		<append name='CFLAGS' value='-fomit-frame-pointer'/>
-	</var>
-
-	<group name="gccxml">
-		<varRef ref="gccxml_urel"/>
-		<varRef ref="gccxml_udeb"/>
-	</group>
-</build>
-
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- build configurations for the gccxml_cc1plus C++ language processor -->
+	<var name="gccxml_base" extends="root">
+		<varRef ref="default.interfaces"/>
+		<varRef ref="default.locations"/>
+		<!-- picked up from the Environment -->
+		<env name='CPP' default='$(GNUCPP)' type='tool'/>
+		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
+		<env name='CREATERFIFILE' default='$(PERL) $(SBS_HOME)/bin/createrfifile.pl ' type='path'/>
+		<env name='GNUAWK' default='$(GNUPREFIX)gawk$(DOTEXE)' type='tool' versionCommand='$(GNUAWK) --version' versionResult='GNU Awk [3-9].*'/>
+		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
+		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
+		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
+		<env name='RVCT22BIN' type='path'/>
+		<env name='RVCT22INC' type='path'/>
+		<env name='RVCT22LIB' type='path'/>
+		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>
+
+		<!-- link to bld.inf and mmp platform names -->
+		<set name='TRADITIONAL_PLATFORM' value='GCCXML'/>
+
+		<!-- interfaces -->
+		<set name="INTERFACE.ani" value="analysis.ani"/>
+		<set name="INTERFACE.dll" value="analysis.dll"/>
+		<set name="INTERFACE.exe" value="analysis.exe"/>
+		<set name="INTERFACE.exexp" value="analysis.exexp"/>
+		<set name="INTERFACE.extension" value="analysis.extension"/>
+		<set name="INTERFACE.implib" value="analysis.implib"/>
+		<set name="INTERFACE.fsy" value="analysis.fsy"/>
+		<set name="INTERFACE.kdll" value="analysis.kdll"/>
+		<set name="INTERFACE.kext" value="analysis.kext"/>
+		<set name="INTERFACE.klib" value="analysis.klib"/>
+		<set name="INTERFACE.ldd" value="analysis.ldd"/>
+		<set name="INTERFACE.lib" value="analysis.lib"/>
+		<set name="INTERFACE.pdd" value="analysis.pdd"/>
+		<set name="INTERFACE.pdl" value="analysis.pdl"/>
+		<set name="INTERFACE.plugin" value="analysis.plugin"/>
+		<set name="INTERFACE.resource" value="analysis.resource"/>
+		<set name="INTERFACE.stddll" value="analysis.stddll"/>
+		<set name="INTERFACE.stdexe" value="analysis.stdexe"/>
+		<set name="INTERFACE.stdlib" value="analysis.stdlib"/>
+		<set name="INTERFACE.textnotifier2" value="analysis.textnotifier2"/>
+		<set name="INTERFACE.var" value="analysis.var"/>
+		<set name="INTERFACE.var2" value="analysis.var2"/>
+		<!-- the following should really be done via the default "Symbian.*" interfaces from standard.xml - but they're currently tied to non-defaulted ARM build specifics -->
+		<set name="INTERFACE.none" value="analysis.none"/>
+
+		<!-- Java used by Trace Compiler -->
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='JAVATC' default='$(JAVA_HOME)/bin/java' type='tool'/>
+
+		<!-- note that gccxml_cc1plus should be version checked, but I've yet to find a reliable way of doing this -->
+		<set name='CC' value="$(EPOCROOT)/epoc32/tools/gccxml_cc1plus$(DOTEXE)" type='tool'/>
+		<set name='CDEFS' value='_UNICODE __SYMBIAN32__ __GCC32__ __EPOC32__ __MARM__ __MINGW32__ _STLP_LITTLE_ENDIAN __GCCXML__ __MARM_ARM4__ $(MMPDEFS)'/>
+		<set name='CFLAGS' value='-bi -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -UWIN32 -fshort-wchar -quiet -w '/>
+
+		<!-- in support of TEMs - processed as if in an RVCT build -->
+		<set name='RVCTBIN' value='$(RVCT22BIN)'/>
+		<set name='RVCTINC' value='$(RVCT22INC)'/>
+		<set name='RVCTLIB' value='$(RVCT22LIB)'/>
+
+		<set name='CPPFLAGS' value='-nostdinc -M -MG'/>
+
+		<set name='MMPDEFS' value=''/>
+		<set name='NMAKE' value='nmake$(DOTEXE)'/>
+		<set name='NMAKEFLAGS' value='-nologo -x - '/>
+		<set name='MAIN_OUTPUTPATH' value='$(EPOCROOT)/epoc32/build'/>
+		<set name='OUTPUTPATH' value='$(MAIN_OUTPUTPATH)'/>
+		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release'/>
+		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
+		<set name='SYSTEMINCLUDE' value=''/>
+		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
+		<set name='TARGETPATH' value=''/>
+		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
+		<set name='USERINCLUDE' value=''/>
+		<set name='VARIANTPLATFORM' value='gccxml'/>
+
+		<set name='OPT.DEFINE' value='-D'/>
+		<set name='OPT.OUT' value='-o '/>
+		<set name='OPT.PREINCLUDE' value='-include '/>
+		<set name='OPT.SPLITINCLUDE' value=' -I- '/>
+		<set name='OPT.SYSINCLUDE' value='-I '/>
+		<set name='OPT.USERINCLUDE' value='-I '/>
+		<set name='PLATMACROS.WINDOWS' value='GCCXML ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5'/>
+		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
+		
+		<set name='KERNEL_MODE_DEF' value='__KERNEL_MODE__'/>
+		<set name='KERNEL_MODE_INCLUDES' value='$(EPOCINCLUDE)/nkern $(EPOCINCLUDE)/kernel/arm $(EPOCINCLUDE)/memmodel/epoc $(EPOCINCLUDE)/kernel $(EPOCINCLUDE)/nkern/arm'/>
+		<set name='STDCPP_DEF' value='__SYMBIAN_STDCPP_SUPPORT__'/>
+		<set name='STDCPP_INCLUDE' value='$(EPOCINCLUDE)/stdapis'/>
+	</var>
+
+	<var name="gccxml_udeb" extends="gccxml_base">
+		<set name='FULLVARIANTPATH' value='gccxml/udeb'/>
+		<set name='VARIANTTYPE' value='udeb'/>
+
+		<append name='CDEFS' value='_DEBUG'/>
+		<append name='CFLAGS' value='-g'/>
+	</var>
+
+	<var name="gccxml_urel" extends="gccxml_base">
+		<set name='FULLVARIANTPATH' value='gccxml/urel'/>
+		<set name='VARIANTTYPE' value='urel'/>
+
+		<append name='CDEFS' value='NDEBUG'/>
+		<append name='CFLAGS' value='-fomit-frame-pointer'/>
+	</var>
+
+	<group name="gccxml">
+		<varRef ref="gccxml_urel"/>
+		<varRef ref="gccxml_udeb"/>
+	</group>
+</build>
+
--- a/sbsv2/raptor/lib/config/interfaces.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/interfaces.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- The standard interfaces used by most configurations. -->
-
-	<var name="default.interfaces">
-		<!-- interfaces corresponding to target types -->
-
-		<set name="INTERFACE_TYPES" value="exe stdexe ext_makefile dll stddll lib stdlib export extension ani plugin textnotifier2 implib var var2 exexp kexe kdll kext klib ldd pdd pdl fsy resource none stringtable bitmap"/>
-		<set name="INTERFACE.exe" value="Symbian.exe"/>
-		<set name="INTERFACE.stdexe" value="Symbian.stdexe"/>
-		<set name="INTERFACE.stddll" value="Symbian.stddll"/>
-		<set name="INTERFACE.stdlib" value="Symbian.stdlib"/>
-		<set name="INTERFACE.dll" value="Symbian.dll"/>
-		<set name="INTERFACE.lib" value="Symbian.lib"/>
-		<set name="INTERFACE.ani" value="Symbian.ani"/>
-		<set name="INTERFACE.plugin" value="Symbian.plugin"/>
-		<set name="INTERFACE.textnotifier2" value="Symbian.textnotifier2"/>
-		<set name="INTERFACE.implib" value="Symbian.implib"/>
-		<set name="INTERFACE.var" value="Symbian.var"/>
-		<set name="INTERFACE.var2" value="Symbian.var2"/>
-		<set name="INTERFACE.exexp" value="Symbian.exexp"/>
-		<set name="INTERFACE.kexe" value="Symbian.kexe"/>
-		<set name="INTERFACE.kdll" value="Symbian.kdll"/>
-		<set name="INTERFACE.kext" value="Symbian.kext"/>
-		<set name="INTERFACE.klib" value="Symbian.klib"/>
-		<set name="INTERFACE.ldd" value="Symbian.ldd"/>
-		<set name="INTERFACE.pdd" value="Symbian.pdd"/>
-		<set name="INTERFACE.pdl" value="Symbian.pdl"/>
-		<set name="INTERFACE.fsy" value="Symbian.fsy"/>
-		<set name="INTERFACE.none" value="Symbian.none"/>
-		<set name="INTERFACE.ext_makefile" value="base.ext_makefile"/>
-		<set name="INTERFACE.extension" value="base.extension"/>
-		<set name="INTERFACE.export" value="base.export"/>
-		<set name="INTERFACE.resource" value="base.resource"/>
-		<set name="INTERFACE.stringtable" value="base.stringtable"/>
-		<set name="INTERFACE.bitmap" value="base.bitmap"/>
-
-		<!-- per-configuration default interfaces -->
-		<set name="INTERFACE.config" value="Symbian.config.default"/>
-	</var>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- The standard interfaces used by most configurations. -->
+
+	<var name="default.interfaces">
+		<!-- interfaces corresponding to target types -->
+
+		<set name="INTERFACE_TYPES" value="exe stdexe ext_makefile dll stddll lib stdlib export extension ani plugin textnotifier2 implib var var2 exexp kexe kdll kext klib ldd pdd pdl fsy resource none stringtable bitmap"/>
+		<set name="INTERFACE.exe" value="Symbian.exe"/>
+		<set name="INTERFACE.stdexe" value="Symbian.stdexe"/>
+		<set name="INTERFACE.stddll" value="Symbian.stddll"/>
+		<set name="INTERFACE.stdlib" value="Symbian.stdlib"/>
+		<set name="INTERFACE.dll" value="Symbian.dll"/>
+		<set name="INTERFACE.lib" value="Symbian.lib"/>
+		<set name="INTERFACE.ani" value="Symbian.ani"/>
+		<set name="INTERFACE.plugin" value="Symbian.plugin"/>
+		<set name="INTERFACE.textnotifier2" value="Symbian.textnotifier2"/>
+		<set name="INTERFACE.implib" value="Symbian.implib"/>
+		<set name="INTERFACE.var" value="Symbian.var"/>
+		<set name="INTERFACE.var2" value="Symbian.var2"/>
+		<set name="INTERFACE.exexp" value="Symbian.exexp"/>
+		<set name="INTERFACE.kexe" value="Symbian.kexe"/>
+		<set name="INTERFACE.kdll" value="Symbian.kdll"/>
+		<set name="INTERFACE.kext" value="Symbian.kext"/>
+		<set name="INTERFACE.klib" value="Symbian.klib"/>
+		<set name="INTERFACE.ldd" value="Symbian.ldd"/>
+		<set name="INTERFACE.pdd" value="Symbian.pdd"/>
+		<set name="INTERFACE.pdl" value="Symbian.pdl"/>
+		<set name="INTERFACE.fsy" value="Symbian.fsy"/>
+		<set name="INTERFACE.none" value="Symbian.none"/>
+		<set name="INTERFACE.ext_makefile" value="base.ext_makefile"/>
+		<set name="INTERFACE.extension" value="base.extension"/>
+		<set name="INTERFACE.export" value="base.export"/>
+		<set name="INTERFACE.resource" value="base.resource"/>
+		<set name="INTERFACE.stringtable" value="base.stringtable"/>
+		<set name="INTERFACE.bitmap" value="base.bitmap"/>
+
+		<!-- per-configuration default interfaces -->
+		<set name="INTERFACE.config" value="Symbian.config.default"/>
+	</var>
+
+</build>
--- a/sbsv2/raptor/lib/config/locations.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/locations.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,116 +1,116 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- The standard locations for widely used tools and resources.
-
-       This is easier to maintain than defining the locations in each
-       configuration that uses a tool or resource.
-	-->
-
-	<var name="hostplatform.locations" host='linux.*'>	
-		<set name='DOTEXE' value=''/>
-		<set name='GCCPREFIX' value='/usr/bin/'/>
-		<set name='GNUPREFIX' value='/bin/'/>
-		
-		<env name='HOSTPLATFORM_DIR' default='linux-i386' />
-		<env name='HOSTPLATFORM' default='linux i386'/>
-		
-		<env name='SBS_GNUCPP' default='/usr/bin/cpp' type='tool'/>
-		<env name='SBS_GNUDATE' default='/bin/date' type='tool'/>
-		<env name='SBS_GNUMAKE38' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/make' type='tool'/>
-		<env name='SBS_GNUSED' default='/bin/sed' type='tool'/>
-		<env name='SBS_GNUMKDIR' default='/bin/mkdir' type='tool'/>
-		<env name='SBS_GNUMV' default='/bin/mv' type='tool'/>
-		<env name='SBS_GNUCP' default='/bin/cp' type='tool'/>
-		<env name='SBS_GNUCAT' default='/bin/cat' type='tool'/>
-		<env name='SBS_GNURM' default='/bin/rm' type='tool'/>
-		<env name='SBS_GNULN' default='/bin/ln' type='tool'/>
-		<env name='SBS_GNURMDIR' default='/bin/rmdir' type='tool'/>
-		<env name='SBS_GNUCHMOD' default='/bin/chmod' type='tool'/>
-		<env name='SBS_GNUMD5SUM' default='/usr/bin/md5sum' type='tool'/>
-		<env name='SBS_GNUTOUCH' default='/bin/touch' type='tool'/>
-		<env name='SBS_GNUFIND' default='/usr/bin/find' type='tool'/>
-		<env name='SBS_GNUGREP' default='/bin/grep' type='tool'/>
-		<env name='SBS_GNUSORT' default='/bin/sort' type='tool'/>
-		<env name='SBS_SHELL' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/sh" type='tool'/>
-		<env name='SBS_ZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/zip" type='tool'/>
-		<env name='SBS_UNZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/unzip" type='tool'/>
-		<env name='SBS_BVCPP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp" type='tool'/>
-		<env name='SBS_PERL' default='perl' type='tool'/>
-		<env name='SBS_PYTHON' default='python' type='tool'/>
-	</var>
-	<var name="hostplatform.locations" host='win.*' >
-		<set name='COREUTILSBINDIR' value='$(SBS_CYGWIN)/bin' type='path'/>
-		<set name='DOTEXE' value='.exe'/>
-		<set name='GNUPREFIX' value='$(COREUTILSBINDIR)/'/>
-		<set name='GCCPREFIX' value='$(MINGWBINDIR)/'/>
-		<set name='MINGWBINDIR' value='$(SBS_MINGW)/bin' type='path'/>
-		
-		<env name='HOSTPLATFORM_DIR' default='win32' /> 
-		<env name='HOSTPLATFORM' default='win 32' />
-		
-		<env name='SBS_CYGWIN' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/cygwin' type='path'/>
-		<env name='SBS_MINGW' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/mingw' type='path'/>
-		<env name='SBS_GNUCPP' default='$(MINGWBINDIR)/cpp.exe' type='tool'/>
-		<env name='SBS_GNUDATE' default='$(COREUTILSBINDIR)/date.exe' type='tool'/>
-		<env name='SBS_GNUMAKE38' default='$(MINGWBINDIR)/make.exe' type='tool'/>
-		<env name='SBS_GNUSED' default='$(COREUTILSBINDIR)/sed.exe' type='tool'/>
-		<env name='SBS_GNUMKDIR' default='$(COREUTILSBINDIR)/mkdir.exe' type='tool'/>
-		<env name='SBS_GNUCP' default='$(COREUTILSBINDIR)/cp.exe' type='tool'/>
-		<env name='SBS_GNUMV' default='$(COREUTILSBINDIR)/mv.exe' type='tool'/>
-		<env name='SBS_GNUCAT' default='$(COREUTILSBINDIR)/cat.exe' type='tool'/>
-		<env name='SBS_GNURM' default='$(COREUTILSBINDIR)/rm.exe' type='tool'/>
-		<env name='SBS_GNULN' default='$(COREUTILSBINDIR)/ln.exe' type='tool'/>
-		<env name='SBS_GNURMDIR' default='$(COREUTILSBINDIR)/rmdir.exe' type='tool'/>
-		<env name='SBS_GNUCHMOD' default='$(COREUTILSBINDIR)/chmod.exe' type='tool'/>
-		<env name='SBS_GNUMD5SUM' default='$(COREUTILSBINDIR)/md5sum.exe' type='tool'/>
-		<env name='SBS_GNUTOUCH' default='$(COREUTILSBINDIR)/touch.exe' type='tool'/>
-		<env name='SBS_GNUFIND' default='$(COREUTILSBINDIR)/find.exe' type='tool'/>
-		<env name='SBS_GNUGREP' default='$(COREUTILSBINDIR)/grep.exe' type='tool'/>
-		<env name='SBS_GNUSORT' default='$(COREUTILSBINDIR)/sort.exe' type='tool'/>
-		<env name='SBS_SHELL' default="$(COREUTILSBINDIR)/sh.exe" type='tool'/>
-		<env name='SBS_ZIP' default="$(COREUTILSBINDIR)/zip.exe" type='tool'/>
-		<env name='SBS_UNZIP' default="$(COREUTILSBINDIR)/unzip.exe" type='tool'/>
-		<env name='SBS_BVCPP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp.exe" type='tool'/>
-		<env name='SBS_PERL' default='perl.exe' type='tool'/>
-		<env name='SBS_PYTHON' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/python252/python.exe' type='tool'/>
-	</var>
-
-	<var name="default.locations" extends="hostplatform.locations">
-		<env name='EPOCROOT' default='' type='path'/>
-		<!-- Place where intermediate files are built -->
-		<env name='SBS_BUILD_DIR' default='$(EPOCROOT)/epoc32/build' type='path'/>
-
-		<set name='DATE' value='$(SBS_GNUDATE)' type='tool'/>
-		<set name='GNUCPP' value='$(SBS_GNUCPP)' type='tool' versionCommand='$(GNUCPP) --version' versionResult='cpp(.exe)? .* [345]\..*'/>
-		<set name='GNUCP' value='$(SBS_GNUCP)' type='tool' versionCommand='$(GNUCP) --version' versionResult='cp(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
-		<set name='GNUMV' value='$(SBS_GNUMV)' type='tool' versionCommand='$(GNUMV) --version' versionResult='mv(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
-		<set name='GNUCAT' value='$(SBS_GNUCAT)' type='tool' versionCommand='$(GNUCAT) --version' versionResult='cat(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
-		<set name='GNUMAKE38' value='$(SBS_GNUMAKE38)' type='tool' versionCommand='$(GNUMAKE38) -v' versionResult='GNU Make 3.8[1-9]'/>
-		<set name='GNUSED' value='$(SBS_GNUSED)' type='tool' versionCommand='$(GNUSED) --version' versionResult='GNU sed version [3-9].*'/>
-		<set name='GNUMKDIR' value='$(SBS_GNUMKDIR)' type='tool' versionCommand='$(GNUMKDIR) --version' versionResult='.*'/>
-		<set name='GNURM' value='$(SBS_GNURM)' type='tool' versionCommand='$(GNURM) --version' versionResult='rm.*coreutils.*'/>
-		<set name='GNULN' value='$(SBS_GNULN)' type='tool' versionCommand='$(GNULN) --version' versionResult='ln.*coreutils.*'/>
-		<set name='GNURMDIR' value='$(SBS_GNURMDIR)' type='tool' versionCommand='$(GNURMDIR) --version' versionResult='rmdir.*coreutils.*'/>
-		<set name='GNUCHMOD' value='$(SBS_GNUCHMOD)' type='tool' versionCommand='$(GNUCHMOD) --version' versionResult='chmod.*coreutils.*'/>
-		<set name='GNUMD5SUM' value='$(SBS_GNUMD5SUM)' type='tool' versionCommand='$(GNUMD5SUM) --version' versionResult='md5sum.*coreutils.*'/>
-		<set name='GNUTOUCH' value='$(SBS_GNUTOUCH)' type='tool' versionCommand='$(GNUTOUCH) --version' versionResult='touch.*coreutils.*'/>
-		<set name='GNUFIND' value='$(SBS_GNUFIND)' type='tool' versionCommand='$(GNUFIND) --version' versionResult='(GNU)?.*find.*(GNU)?.*'/>
-		<set name='GNUGREP' value='$(SBS_GNUGREP)' type='tool' versionCommand='$(GNUGREP) --version' versionResult='(GNU)?.*grep.*(GNU)?.*'/>
-		<set name='GNUSORT' value='$(SBS_GNUSORT)' type='tool' versionCommand='$(GNUSORT) --version' versionResult='(GNU)?.*sort.*(GNU)?.*'/>
-		<set name='ZIP' value="$(SBS_ZIP)" type='tool'/>
-		<set name='UNZIP' value="$(SBS_UNZIP)" type='tool'/>
-		<set name='PERL' value='$(SBS_PERL)' type='tool'/>
-		<set name='PYTHON' value='$(SBS_PYTHON)' type='tool' versionCommand='$(PYTHON) -V' versionResult='Python 2\.[456].*'/>
-
-		<set name='DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
-		<set name='BASE_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW ARMV5SMP'/>
-		<set name='BASE_USER_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
-
-		<set name='BUILD_INCLUDE' value=''/>
-		<set name='CREATEVMAP' value='$(PYTHON) $(SBS_HOME)/bin/createvmap.py' type='tool'/>
-		<set name='CREATEVMAPCPP' value='$(SBS_BVCPP)' type='tool'/>
-		<set name='FEATURELISTFILES' value=''/>
-		<set name='FEATUREVARIANTNAME' value=''/>
-	</var>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- The standard locations for widely used tools and resources.
+
+       This is easier to maintain than defining the locations in each
+       configuration that uses a tool or resource.
+	-->
+
+	<var name="hostplatform.locations" host='linux.*'>	
+		<set name='DOTEXE' value=''/>
+		<set name='GCCPREFIX' value='/usr/bin/'/>
+		<set name='GNUPREFIX' value='/bin/'/>
+		
+		<env name='HOSTPLATFORM_DIR' default='linux-i386' />
+		<env name='HOSTPLATFORM' default='linux i386'/>
+		
+		<env name='SBS_GNUCPP' default='/usr/bin/cpp' type='tool'/>
+		<env name='SBS_GNUDATE' default='/bin/date' type='tool'/>
+		<env name='SBS_GNUMAKE38' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/make' type='tool'/>
+		<env name='SBS_GNUSED' default='/bin/sed' type='tool'/>
+		<env name='SBS_GNUMKDIR' default='/bin/mkdir' type='tool'/>
+		<env name='SBS_GNUMV' default='/bin/mv' type='tool'/>
+		<env name='SBS_GNUCP' default='/bin/cp' type='tool'/>
+		<env name='SBS_GNUCAT' default='/bin/cat' type='tool'/>
+		<env name='SBS_GNURM' default='/bin/rm' type='tool'/>
+		<env name='SBS_GNULN' default='/bin/ln' type='tool'/>
+		<env name='SBS_GNURMDIR' default='/bin/rmdir' type='tool'/>
+		<env name='SBS_GNUCHMOD' default='/bin/chmod' type='tool'/>
+		<env name='SBS_GNUMD5SUM' default='/usr/bin/md5sum' type='tool'/>
+		<env name='SBS_GNUTOUCH' default='/bin/touch' type='tool'/>
+		<env name='SBS_GNUFIND' default='/usr/bin/find' type='tool'/>
+		<env name='SBS_GNUGREP' default='/bin/grep' type='tool'/>
+		<env name='SBS_GNUSORT' default='/bin/sort' type='tool'/>
+		<env name='SBS_SHELL' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/sh" type='tool'/>
+		<env name='SBS_ZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/zip" type='tool'/>
+		<env name='SBS_UNZIP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/unzip" type='tool'/>
+		<env name='SBS_BVCPP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp" type='tool'/>
+		<env name='SBS_PERL' default='perl' type='tool'/>
+		<env name='SBS_PYTHON' default='python' type='tool'/>
+	</var>
+	<var name="hostplatform.locations" host='win.*' >
+		<set name='COREUTILSBINDIR' value='$(SBS_CYGWIN)/bin' type='path'/>
+		<set name='DOTEXE' value='.exe'/>
+		<set name='GNUPREFIX' value='$(COREUTILSBINDIR)/'/>
+		<set name='GCCPREFIX' value='$(MINGWBINDIR)/'/>
+		<set name='MINGWBINDIR' value='$(SBS_MINGW)/bin' type='path'/>
+		
+		<env name='HOSTPLATFORM_DIR' default='win32' /> 
+		<env name='HOSTPLATFORM' default='win 32' />
+		
+		<env name='SBS_CYGWIN' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/cygwin' type='path'/>
+		<env name='SBS_MINGW' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/mingw' type='path'/>
+		<env name='SBS_GNUCPP' default='$(MINGWBINDIR)/cpp.exe' type='tool'/>
+		<env name='SBS_GNUDATE' default='$(COREUTILSBINDIR)/date.exe' type='tool'/>
+		<env name='SBS_GNUMAKE38' default='$(MINGWBINDIR)/make.exe' type='tool'/>
+		<env name='SBS_GNUSED' default='$(COREUTILSBINDIR)/sed.exe' type='tool'/>
+		<env name='SBS_GNUMKDIR' default='$(COREUTILSBINDIR)/mkdir.exe' type='tool'/>
+		<env name='SBS_GNUCP' default='$(COREUTILSBINDIR)/cp.exe' type='tool'/>
+		<env name='SBS_GNUMV' default='$(COREUTILSBINDIR)/mv.exe' type='tool'/>
+		<env name='SBS_GNUCAT' default='$(COREUTILSBINDIR)/cat.exe' type='tool'/>
+		<env name='SBS_GNURM' default='$(COREUTILSBINDIR)/rm.exe' type='tool'/>
+		<env name='SBS_GNULN' default='$(COREUTILSBINDIR)/ln.exe' type='tool'/>
+		<env name='SBS_GNURMDIR' default='$(COREUTILSBINDIR)/rmdir.exe' type='tool'/>
+		<env name='SBS_GNUCHMOD' default='$(COREUTILSBINDIR)/chmod.exe' type='tool'/>
+		<env name='SBS_GNUMD5SUM' default='$(COREUTILSBINDIR)/md5sum.exe' type='tool'/>
+		<env name='SBS_GNUTOUCH' default='$(COREUTILSBINDIR)/touch.exe' type='tool'/>
+		<env name='SBS_GNUFIND' default='$(COREUTILSBINDIR)/find.exe' type='tool'/>
+		<env name='SBS_GNUGREP' default='$(COREUTILSBINDIR)/grep.exe' type='tool'/>
+		<env name='SBS_GNUSORT' default='$(COREUTILSBINDIR)/sort.exe' type='tool'/>
+		<env name='SBS_SHELL' default="$(COREUTILSBINDIR)/sh.exe" type='tool'/>
+		<env name='SBS_ZIP' default="$(COREUTILSBINDIR)/zip.exe" type='tool'/>
+		<env name='SBS_UNZIP' default="$(COREUTILSBINDIR)/unzip.exe" type='tool'/>
+		<env name='SBS_BVCPP' default="$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp.exe" type='tool'/>
+		<env name='SBS_PERL' default='perl.exe' type='tool'/>
+		<env name='SBS_PYTHON' default='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/python252/python.exe' type='tool'/>
+	</var>
+
+	<var name="default.locations" extends="hostplatform.locations">
+		<env name='EPOCROOT' default='' type='path'/>
+		<!-- Place where intermediate files are built -->
+		<env name='SBS_BUILD_DIR' default='$(EPOCROOT)/epoc32/build' type='path'/>
+
+		<set name='DATE' value='$(SBS_GNUDATE)' type='tool'/>
+		<set name='GNUCPP' value='$(SBS_GNUCPP)' type='tool' versionCommand='$(GNUCPP) --version' versionResult='cpp(.exe)? .* [345]\..*'/>
+		<set name='GNUCP' value='$(SBS_GNUCP)' type='tool' versionCommand='$(GNUCP) --version' versionResult='cp(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
+		<set name='GNUMV' value='$(SBS_GNUMV)' type='tool' versionCommand='$(GNUMV) --version' versionResult='mv(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
+		<set name='GNUCAT' value='$(SBS_GNUCAT)' type='tool' versionCommand='$(GNUCAT) --version' versionResult='cat(.exe)?\s*\((GNU\s*)?coreutils\)\s*[5-9]\..*'/>
+		<set name='GNUMAKE38' value='$(SBS_GNUMAKE38)' type='tool' versionCommand='$(GNUMAKE38) -v' versionResult='GNU Make 3.8[1-9]'/>
+		<set name='GNUSED' value='$(SBS_GNUSED)' type='tool' versionCommand='$(GNUSED) --version' versionResult='GNU sed version [3-9].*'/>
+		<set name='GNUMKDIR' value='$(SBS_GNUMKDIR)' type='tool' versionCommand='$(GNUMKDIR) --version' versionResult='.*'/>
+		<set name='GNURM' value='$(SBS_GNURM)' type='tool' versionCommand='$(GNURM) --version' versionResult='rm.*coreutils.*'/>
+		<set name='GNULN' value='$(SBS_GNULN)' type='tool' versionCommand='$(GNULN) --version' versionResult='ln.*coreutils.*'/>
+		<set name='GNURMDIR' value='$(SBS_GNURMDIR)' type='tool' versionCommand='$(GNURMDIR) --version' versionResult='rmdir.*coreutils.*'/>
+		<set name='GNUCHMOD' value='$(SBS_GNUCHMOD)' type='tool' versionCommand='$(GNUCHMOD) --version' versionResult='chmod.*coreutils.*'/>
+		<set name='GNUMD5SUM' value='$(SBS_GNUMD5SUM)' type='tool' versionCommand='$(GNUMD5SUM) --version' versionResult='md5sum.*coreutils.*'/>
+		<set name='GNUTOUCH' value='$(SBS_GNUTOUCH)' type='tool' versionCommand='$(GNUTOUCH) --version' versionResult='touch.*coreutils.*'/>
+		<set name='GNUFIND' value='$(SBS_GNUFIND)' type='tool' versionCommand='$(GNUFIND) --version' versionResult='(GNU)?.*find.*(GNU)?.*'/>
+		<set name='GNUGREP' value='$(SBS_GNUGREP)' type='tool' versionCommand='$(GNUGREP) --version' versionResult='(GNU)?.*grep.*(GNU)?.*'/>
+		<set name='GNUSORT' value='$(SBS_GNUSORT)' type='tool' versionCommand='$(GNUSORT) --version' versionResult='(GNU)?.*sort.*(GNU)?.*'/>
+		<set name='ZIP' value="$(SBS_ZIP)" type='tool'/>
+		<set name='UNZIP' value="$(SBS_UNZIP)" type='tool'/>
+		<set name='PERL' value='$(SBS_PERL)' type='tool'/>
+		<set name='PYTHON' value='$(SBS_PYTHON)' type='tool' versionCommand='$(PYTHON) -V' versionResult='Python 2\.[456].*'/>
+
+		<set name='DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
+		<set name='BASE_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW ARMV5SMP'/>
+		<set name='BASE_USER_DEFAULT_PLATFORMS' value='ARMV5 ARMV7 WINSCW'/>
+
+		<set name='BUILD_INCLUDE' value=''/>
+		<set name='CREATEVMAP' value='$(PYTHON) $(SBS_HOME)/bin/createvmap.py' type='tool'/>
+		<set name='CREATEVMAPCPP' value='$(SBS_BVCPP)' type='tool'/>
+		<set name='FEATURELISTFILES' value=''/>
+		<set name='FEATUREVARIANTNAME' value=''/>
+	</var>
+
+</build>
--- a/sbsv2/raptor/lib/config/make.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/make.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,92 +1,92 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Some common Raptor make engines -->
-	
-	<!-- Raptor make engine for GNU make -->
-	<var name="make_engine">
-		<varRef ref="default.locations"/>
-
-		<!-- Shell settings -->
-		<set name='DEFAULT_SHELL' value='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/talon$(DOTEXE)' type='tool'/>
-		<set name='TALON_SHELL' value='$(SBS_SHELL)' type='tool'/>
-		<set name='USE_TALON' value='1'/>
-		<set name='TALON_TIMEOUT' value='600000'/>
-		<set name='TALON_DESCRAMBLE' value='1'/>
-		
-		<!-- Command-line for initialisation -->
-		<set name="initialise" value=""/>
-
-		<!-- Command-line for shutdown -->
-		<set name="shutdown" value=""/>
-
-		<!-- Command-line for build  -->
-		<set name="build" value="$(GNUMAKE38) HAVE_ORDERONLY=1 -r" type="tool"/>
-
-		<!-- Options  -->
-		<set name="makefile" value="-f"/>
-		<set name="keep_going" value="-k"/>
-		<set name="jobs" value="-j"/>
-		
-		<!-- The following are stuck on the commandline before any options
-		     specified by the sbs "mo" option, so they can be overridden -->
-		<set name="defaultoptions" value=""/>
-
-		<!-- How to split out the makefiles -->
-		<set name="selectors" value="export,bitmap,resource_deps,resource,default"/>
-		<set name="export.selector.iface" value="\.export$"/>
-		<set name="export.selector.target" value="EXPORT"/>
-		<set name="bitmap.selector.iface" value="\.(bitmap|extension|mifconv)$"/>
-		<set name="bitmap.selector.target" value="BITMAP"/>
-		<set name="resource_deps.selector.iface" value="\.resource$"/>
-		<set name="resource_deps.selector.target" value="RESOURCE_DEPS"/>
-		<set name="resource_deps.selector.ignoretargets" value="^(RESOURCE|CLEAN|CLEANEXPORT|REALLYCLEAN)$"/>
-		<set name="resource.selector.iface" value="\.(resource|extension|mif2cdlindex|nativejava)$"/>
-		<set name="resource.selector.target" value="RESOURCE"/>
-		<set name="default.selector.iface" value="\.(?!export$|bitmap$|resource$|mifconv$|mif2cdlindex$|nativejava$).*$"/>
-		<set name="default.selector.target" value="ALL"/>
-
-		<!-- is the text output with -j buffered or scrambled? -->
-		<set name="scrambled" value="true"/>
-	</var>
-	
-	<alias name="make" meaning="make_engine"/>
-
-	<!-- use the talon shell -->
-	<var name="make_no_talon_engine" extends="make_engine">
-	        <set name='DEFAULT_SHELL' value='$(SBS_SHELL)' type='tool'/>
-	        <set name='USE_TALON' value=''/>
-	</var>
-
-	<alias name="make_no_talon" meaning="make_no_talon_engine"/>
-
-	<!-- other derived versions of GNU make -->
-
-	<!-- Raptor make engine for Electric Make -->
-	<var name="emake_engine" extends="make_engine">
-		<env name="EMAKE" default="emake" type="tool" versionCommand="$(EMAKE) --version " versionResult="Electric Make version (4\.[2-9])|([56789]\.[0-9])"/>
-		<set name="build" value="$(EMAKE) HAVE_ORDERONLY= -r"/>
-		<set name="scrambled" value="false"/>
-		<set name='TALON_DESCRAMBLE' value=''/>
-	</var>
-
-	<alias name="emake" meaning="emake_engine"/>
-	
-	<!-- use the talon shell -->
-	<var name="emake_no_talon_engine" extends="emake_engine">
-	        <set name='DEFAULT_SHELL' value='$(SBS_SHELL)' type='tool'/>
-	        <set name='USE_TALON' value=''/>
-	</var>
-
-	<alias name="emake_no_talon" meaning="emake_no_talon_engine"/>
-	
-	<!-- Raptor make engine for PVMgmake -->
-	<var name="pvmgmake_engine" extends="make_engine">
-		<env name="PVMGMAKE" default="pvmgmake" type="tool" versionCommand="$(PVMGMAKE) --version " versionResult="PVMGmake-([0-9]\.[0-9])|(0.) rpt"/>
-		<set name="build" value="$(PVMGMAKE) HAVE_ORDERONLY=true  -r"/>
-		<set name="scrambled" value="false" />
-		<set name='TALON_DESCRAMBLE' value=''/>
-	</var>
-
-	<alias name="pvmgmake" meaning="pvmgmake_engine"/>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Some common Raptor make engines -->
+	
+	<!-- Raptor make engine for GNU make -->
+	<var name="make_engine">
+		<varRef ref="default.locations"/>
+
+		<!-- Shell settings -->
+		<set name='DEFAULT_SHELL' value='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/talon$(DOTEXE)' type='tool'/>
+		<set name='TALON_SHELL' value='$(SBS_SHELL)' type='tool'/>
+		<set name='USE_TALON' value='1'/>
+		<set name='TALON_TIMEOUT' value='600000'/>
+		<set name='TALON_DESCRAMBLE' value='1'/>
+		
+		<!-- Command-line for initialisation -->
+		<set name="initialise" value=""/>
+
+		<!-- Command-line for shutdown -->
+		<set name="shutdown" value=""/>
+
+		<!-- Command-line for build  -->
+		<set name="build" value="$(GNUMAKE38) HAVE_ORDERONLY=1 -r" type="tool"/>
+
+		<!-- Options  -->
+		<set name="makefile" value="-f"/>
+		<set name="keep_going" value="-k"/>
+		<set name="jobs" value="-j"/>
+		
+		<!-- The following are stuck on the commandline before any options
+		     specified by the sbs "mo" option, so they can be overridden -->
+		<set name="defaultoptions" value=""/>
+
+		<!-- How to split out the makefiles -->
+		<set name="selectors" value="export,bitmap,resource_deps,resource,default"/>
+		<set name="export.selector.iface" value="\.export$"/>
+		<set name="export.selector.target" value="EXPORT"/>
+		<set name="bitmap.selector.iface" value="\.(bitmap|extension|mifconv)$"/>
+		<set name="bitmap.selector.target" value="BITMAP"/>
+		<set name="resource_deps.selector.iface" value="\.resource$"/>
+		<set name="resource_deps.selector.target" value="RESOURCE_DEPS"/>
+		<set name="resource_deps.selector.ignoretargets" value="^(RESOURCE|CLEAN|CLEANEXPORT|REALLYCLEAN)$"/>
+		<set name="resource.selector.iface" value="\.(resource|extension|mif2cdlindex|nativejava)$"/>
+		<set name="resource.selector.target" value="RESOURCE"/>
+		<set name="default.selector.iface" value="\.(?!export$|bitmap$|resource$|mifconv$|mif2cdlindex$|nativejava$).*$"/>
+		<set name="default.selector.target" value="ALL"/>
+
+		<!-- is the text output with -j buffered or scrambled? -->
+		<set name="scrambled" value="true"/>
+	</var>
+	
+	<alias name="make" meaning="make_engine"/>
+
+	<!-- use the talon shell -->
+	<var name="make_no_talon_engine" extends="make_engine">
+	        <set name='DEFAULT_SHELL' value='$(SBS_SHELL)' type='tool'/>
+	        <set name='USE_TALON' value=''/>
+	</var>
+
+	<alias name="make_no_talon" meaning="make_no_talon_engine"/>
+
+	<!-- other derived versions of GNU make -->
+
+	<!-- Raptor make engine for Electric Make -->
+	<var name="emake_engine" extends="make_engine">
+		<env name="EMAKE" default="emake" type="tool" versionCommand="$(EMAKE) --version " versionResult="Electric Make version (4\.[2-9])|([56789]\.[0-9])"/>
+		<set name="build" value="$(EMAKE) HAVE_ORDERONLY= -r"/>
+		<set name="scrambled" value="false"/>
+		<set name='TALON_DESCRAMBLE' value=''/>
+	</var>
+
+	<alias name="emake" meaning="emake_engine"/>
+	
+	<!-- use the talon shell -->
+	<var name="emake_no_talon_engine" extends="emake_engine">
+	        <set name='DEFAULT_SHELL' value='$(SBS_SHELL)' type='tool'/>
+	        <set name='USE_TALON' value=''/>
+	</var>
+
+	<alias name="emake_no_talon" meaning="emake_no_talon_engine"/>
+	
+	<!-- Raptor make engine for PVMgmake -->
+	<var name="pvmgmake_engine" extends="make_engine">
+		<env name="PVMGMAKE" default="pvmgmake" type="tool" versionCommand="$(PVMGMAKE) --version " versionResult="PVMGmake-([0-9]\.[0-9])|(0.) rpt"/>
+		<set name="build" value="$(PVMGMAKE) HAVE_ORDERONLY=true  -r"/>
+		<set name="scrambled" value="false" />
+		<set name='TALON_DESCRAMBLE' value=''/>
+	</var>
+
+	<alias name="pvmgmake" meaning="pvmgmake_engine"/>
+
+</build>
--- a/sbsv2/raptor/lib/config/meta.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/meta.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Configuration for metadata processing  -->
-
-	<var name="meta">
-		<varRef ref="default.locations"/>
-	</var>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Configuration for metadata processing  -->
+
+	<var name="meta">
+		<varRef ref="default.locations"/>
+	</var>
+</build>
--- a/sbsv2/raptor/lib/config/msvc.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/msvc.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,102 +1,102 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for MSVC compilers -->
-	<var name="tools_base" extends="root">
-		<varRef ref="default.interfaces"/>
-		<varRef ref="default.locations"/>
-
-		<!-- picked up from the Environment -->
-		<env name='MS_CL' default='cl.exe' type='tool' versionCommand='$(MS_CL)' versionResult='Version 12\.[0-9]{2}\.[0-9]{4}'/>
-		<env name='MS_LINK' default='link.exe' type='tool' versionCommand='$(MS_LINK)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
-		<env name='MS_LIB' default='lib.exe' type='tool' versionCommand='$(MS_LIB)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
-		<env name='MS_BSCMAKE' default='bscmake.exe' type='tool' versionCommand='$(MS_BSCMAKE)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
-
-		<!-- MS toolchain environment variables -->
-		<env name='INCLUDE'/>
-		<env name='LIB'/>
-
-		<!-- link to bld.inf and mmp platform names -->
-		<set name='TRADITIONAL_PLATFORM' value='TOOLS'/>
-		<set name='NMAKE' value='nmake'/>
-		<set name='NMAKEFLAGS' value='-nologo -x - '/>
-		<!-- tools options -->
-		<set name='OPT.BROWSEDB' value='-o'/>
-		<set name='OPT.BROWSEFILE' value='-FR'/>
-		<set name='OPT.COMPILE' value='-c '/>
-		<set name='OPT.DEFINE' value='-D '/>
-		<set name='OPT.INCLUDE' value='-I '/>
-		<set name='OPT.IMPLIB' value='-implib:'/>
-		<set name='OPT.LIBDEB' value='-MTd '/>
-		<set name='OPT.LIBREL' value='-MT '/>
-		<set name='OPT.LISTING' value='-Fa'/>
-		<set name='OPT.NOLOGO' value='-nologo'/>
-		<set name='OPT.OBJECTFILE' value='-Fo'/>
-		<set name='OPT.OUTFILE' value='-out:'/>
-		<set name='OPT.PDBFILE' value='-Fd'/>
-		<set name='OPT.PREINCLUDE' value='-FI '/>
-		<set name='OPT.SUBSYSTEM' value='-subsystem:'/>
-		<set name='OPT.SYSINCLUDE' value='-I '/>
-		<set name='OPT.USERINCLUDE' value='-I '/>
-		<set name='PREFIX.RESPONSEFILE' value='@'/>
-		<set name='CC' value='$(MS_CL)'/>
-		<set name='CDEFS' value='__SYMBIAN32__ __VC32__ __TOOLS__ __MSVC6__ __MSVC600__ WIN32 WINDOWS __SUPPORT_CPP_EXCEPTIONS__ $(MMPDEFS)'/>
-		<set name='CDEFS.DEB' value='_DEBUG'/>
-		<set name='CDEFS.REL' value='NDEBUG'/>
-		<set name='CFLAGS' value='$(OPT.COMPILE) $(OPT.NOLOGO) -Zp4 -GF'/>
-		<set name='CFLAGS.DEFAULT.WARNLEVEL' value='-W4'/>
-		<set name='CFLAGS.DEB' value='-Zi -Od'/>
-		<set name='CFLAGS.REL' value='-O1 -Op'/>
-		<set name='SHAREDFLAGS' value='kernel32.lib $(OPT.NOLOGO) -machine:IX86  -ignore:4089 -ignore:4005 -ignore:4098'/>
-		<set name='LD' value='$(MS_LINK)'/>
-		<set name='LFLAGS' value='$(SHAREDFLAGS) -WARN:1'/>
-		<set name='LFLAGS.DEB' value='-debug'/>
-		<set name='LFLAGS.REL' value='-incremental:no'/>
-		<set name='AR' value='$(MS_LIB)'/>
-		<set name='ARFLAGS' value='$(SHAREDFLAGS)'/>
-		<set name='BROWSETOOL' value='$(MS_BSCMAKE)'/>
-		<set name='BROWSEFLAGS' value='$(OPT.NOLOGO)'/>
-		<set name='PLATMACROS.WINDOWS' value='VC32 TOOLS MSVC6 MSVC600'/>
-		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
-		<!-- interfaces -->
-		<set name="INTERFACE.exe" value="msvctools.exe"/>
-		<set name="INTERFACE.lib" value="msvctools.lib"/>
-
-		<set name='RELEASEPATHROOT' value='$(EPOCROOT)/epoc32/release'/>
-		<set name='IMPORTLIBPATH' value='$(RELEASEPATHROOT)/tools/udeb'/>
-
-		<set name='MMPDEFS' value=''/>
-		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
-		<set name='SYSTEMINCLUDE' value=''/>
-		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
-		<set name='TARGETPATH' value=''/>
-		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
-		<set name='USERINCLUDE' value=''/>
-		<set name='VARIANTPLATFORM' value='tools'/>
-	</var>
-
-	<var name="tools_deb" extends="tools_base">
-		<set name='FULLVARIANTPATH' value='tools/deb'/>
-		<set name='VARIANTTYPE' value='deb'/>
-		<set name='INSTALLPATH' value=''/> <!-- don't install DEB builds  -->
-		<append name='CDEFS' value='$(CDEFS.DEB)'/>
-		<append name='CFLAGS' value='$(CFLAGS.DEB)'/>
-		<append name='LFLAGS' value='$(LFLAGS.DEB)'/>
-		<set name='CFLAGS.LIB' value='$(OPT.LIBDEB)'/>
-	</var>
-
-	<var name="tools_rel" extends="tools_base">
-		<set name='FULLVARIANTPATH' value='tools/rel'/>
-		<set name='VARIANTTYPE' value='rel'/>
-		<set name='INSTALLPATH' value='$(EPOCROOT)/epoc32/tools'/>
-		<append name='CDEFS' value='$(CDEFS.REL)'/>
-		<append name='CFLAGS' value='$(CFLAGS.REL)'/>
-		<append name='LFLAGS' value='$(LFLAGS.REL)'/>
-		<set name='CFLAGS.LIB' value='$(OPT.LIBREL)'/>
-	</var>
-
-	<group name='tools'>
-		<varRef ref='tools_rel'/>
-		<varRef ref='tools_deb'/>
-	</group>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- build configurations for MSVC compilers -->
+	<var name="tools_base" extends="root">
+		<varRef ref="default.interfaces"/>
+		<varRef ref="default.locations"/>
+
+		<!-- picked up from the Environment -->
+		<env name='MS_CL' default='cl.exe' type='tool' versionCommand='$(MS_CL)' versionResult='Version 12\.[0-9]{2}\.[0-9]{4}'/>
+		<env name='MS_LINK' default='link.exe' type='tool' versionCommand='$(MS_LINK)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
+		<env name='MS_LIB' default='lib.exe' type='tool' versionCommand='$(MS_LIB)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
+		<env name='MS_BSCMAKE' default='bscmake.exe' type='tool' versionCommand='$(MS_BSCMAKE)' versionResult='Version 6\.[0-9]{2}.[0-9]{4}'/>
+
+		<!-- MS toolchain environment variables -->
+		<env name='INCLUDE'/>
+		<env name='LIB'/>
+
+		<!-- link to bld.inf and mmp platform names -->
+		<set name='TRADITIONAL_PLATFORM' value='TOOLS'/>
+		<set name='NMAKE' value='nmake'/>
+		<set name='NMAKEFLAGS' value='-nologo -x - '/>
+		<!-- tools options -->
+		<set name='OPT.BROWSEDB' value='-o'/>
+		<set name='OPT.BROWSEFILE' value='-FR'/>
+		<set name='OPT.COMPILE' value='-c '/>
+		<set name='OPT.DEFINE' value='-D '/>
+		<set name='OPT.INCLUDE' value='-I '/>
+		<set name='OPT.IMPLIB' value='-implib:'/>
+		<set name='OPT.LIBDEB' value='-MTd '/>
+		<set name='OPT.LIBREL' value='-MT '/>
+		<set name='OPT.LISTING' value='-Fa'/>
+		<set name='OPT.NOLOGO' value='-nologo'/>
+		<set name='OPT.OBJECTFILE' value='-Fo'/>
+		<set name='OPT.OUTFILE' value='-out:'/>
+		<set name='OPT.PDBFILE' value='-Fd'/>
+		<set name='OPT.PREINCLUDE' value='-FI '/>
+		<set name='OPT.SUBSYSTEM' value='-subsystem:'/>
+		<set name='OPT.SYSINCLUDE' value='-I '/>
+		<set name='OPT.USERINCLUDE' value='-I '/>
+		<set name='PREFIX.RESPONSEFILE' value='@'/>
+		<set name='CC' value='$(MS_CL)'/>
+		<set name='CDEFS' value='__SYMBIAN32__ __VC32__ __TOOLS__ __MSVC6__ __MSVC600__ WIN32 WINDOWS __SUPPORT_CPP_EXCEPTIONS__ $(MMPDEFS)'/>
+		<set name='CDEFS.DEB' value='_DEBUG'/>
+		<set name='CDEFS.REL' value='NDEBUG'/>
+		<set name='CFLAGS' value='$(OPT.COMPILE) $(OPT.NOLOGO) -Zp4 -GF'/>
+		<set name='CFLAGS.DEFAULT.WARNLEVEL' value='-W4'/>
+		<set name='CFLAGS.DEB' value='-Zi -Od'/>
+		<set name='CFLAGS.REL' value='-O1 -Op'/>
+		<set name='SHAREDFLAGS' value='kernel32.lib $(OPT.NOLOGO) -machine:IX86  -ignore:4089 -ignore:4005 -ignore:4098'/>
+		<set name='LD' value='$(MS_LINK)'/>
+		<set name='LFLAGS' value='$(SHAREDFLAGS) -WARN:1'/>
+		<set name='LFLAGS.DEB' value='-debug'/>
+		<set name='LFLAGS.REL' value='-incremental:no'/>
+		<set name='AR' value='$(MS_LIB)'/>
+		<set name='ARFLAGS' value='$(SHAREDFLAGS)'/>
+		<set name='BROWSETOOL' value='$(MS_BSCMAKE)'/>
+		<set name='BROWSEFLAGS' value='$(OPT.NOLOGO)'/>
+		<set name='PLATMACROS.WINDOWS' value='VC32 TOOLS MSVC6 MSVC600'/>
+		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
+		<!-- interfaces -->
+		<set name="INTERFACE.exe" value="msvctools.exe"/>
+		<set name="INTERFACE.lib" value="msvctools.lib"/>
+
+		<set name='RELEASEPATHROOT' value='$(EPOCROOT)/epoc32/release'/>
+		<set name='IMPORTLIBPATH' value='$(RELEASEPATHROOT)/tools/udeb'/>
+
+		<set name='MMPDEFS' value=''/>
+		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
+		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
+		<set name='SYSTEMINCLUDE' value=''/>
+		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
+		<set name='TARGETPATH' value=''/>
+		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
+		<set name='USERINCLUDE' value=''/>
+		<set name='VARIANTPLATFORM' value='tools'/>
+	</var>
+
+	<var name="tools_deb" extends="tools_base">
+		<set name='FULLVARIANTPATH' value='tools/deb'/>
+		<set name='VARIANTTYPE' value='deb'/>
+		<set name='INSTALLPATH' value=''/> <!-- don't install DEB builds  -->
+		<append name='CDEFS' value='$(CDEFS.DEB)'/>
+		<append name='CFLAGS' value='$(CFLAGS.DEB)'/>
+		<append name='LFLAGS' value='$(LFLAGS.DEB)'/>
+		<set name='CFLAGS.LIB' value='$(OPT.LIBDEB)'/>
+	</var>
+
+	<var name="tools_rel" extends="tools_base">
+		<set name='FULLVARIANTPATH' value='tools/rel'/>
+		<set name='VARIANTTYPE' value='rel'/>
+		<set name='INSTALLPATH' value='$(EPOCROOT)/epoc32/tools'/>
+		<append name='CDEFS' value='$(CDEFS.REL)'/>
+		<append name='CFLAGS' value='$(CFLAGS.REL)'/>
+		<append name='LFLAGS' value='$(LFLAGS.REL)'/>
+		<set name='CFLAGS.LIB' value='$(OPT.LIBREL)'/>
+	</var>
+
+	<group name='tools'>
+		<varRef ref='tools_rel'/>
+		<varRef ref='tools_deb'/>
+	</group>
+</build>
--- a/sbsv2/raptor/lib/config/root.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/root.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,53 +1,53 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-	<!-- 
-	
-	The root variant is extended by all buildable variants.
-	
-	It contains references to variants which have defaults here but which
-	can be overridden to effectively apply a global change for all builds. 
-	
-	-->
-
-	<var name="root">
-		<varRef ref="root.places"/>
-		<varRef ref="root.properties"/>
-		
-		<!-- redefine this to make changes to the root variant -->
-		<varRef ref="root.changes"/>
-	</var>
-
-	<!-- Common folders and files -->
-	<var name="root.places">
-		<env name='EPOCROOT' default='/' type='path'/>
-		
-		<set name='EPOCINCLUDE' value='$(EPOCROOT)/epoc32/include'/>
-		<set name='EPOCTOOLS' value='$(EPOCROOT)/epoc32/tools'/>
-
-		<!-- Place where intermediate files are built -->
-		<env name='SBS_BUILD_DIR' default='$(EPOCROOT)/epoc32/build' type='path'/> 
-
-		<!-- Configuration files and directories -->
-		<set name='PRODUCT_INCLUDE' value='$(EPOCINCLUDE)/variant/symbian_os.hrh'/>
-		<set name='VARIANT_CFG' value='$(EPOCTOOLS)/variant/variant.cfg'/>
-		<set name='MAKEFILE_TEMPLATES' value='$(EPOCTOOLS)/makefile_templates'/>
-		<set name='FLM_EXPORT_DIR' value='$(MAKEFILE_TEMPLATES)'/>
-	</var>
-	
-	<!-- Things which are properties of different OS versions rather than
-		 properties of Raptor itself. The values here are for TB92sf and
-		 may be completely redefined for other OS versions or modified
-		 slightly by redefining the root.changes variant. -->
-	<var name="root.properties">
-		<set name='POSTLINKER_SUPPORTS_WDP' value='1'/>
-		<set name='SUPPORTS_STDCPP_NEWLIB' value='1'/>
-		<set name="RVCT_PRE_INCLUDE" value="$(EPOCINCLUDE)/rvct/rvct.h"/>
-	</var>
-	
-	<!-- Placeholder for the root.changes variant. This will typically be
-	     redefined inside a .xml file in the $(EPOCROOT)/epoc32/sbs_config
-	     folder or a folder added with the configpath option. -->
-	<var name="root.changes"/>
-	
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+
+	<!-- 
+	
+	The root variant is extended by all buildable variants.
+	
+	It contains references to variants which have defaults here but which
+	can be overridden to effectively apply a global change for all builds. 
+	
+	-->
+
+	<var name="root">
+		<varRef ref="root.places"/>
+		<varRef ref="root.properties"/>
+		
+		<!-- redefine this to make changes to the root variant -->
+		<varRef ref="root.changes"/>
+	</var>
+
+	<!-- Common folders and files -->
+	<var name="root.places">
+		<env name='EPOCROOT' default='/' type='path'/>
+		
+		<set name='EPOCINCLUDE' value='$(EPOCROOT)/epoc32/include'/>
+		<set name='EPOCTOOLS' value='$(EPOCROOT)/epoc32/tools'/>
+
+		<!-- Place where intermediate files are built -->
+		<env name='SBS_BUILD_DIR' default='$(EPOCROOT)/epoc32/build' type='path'/> 
+
+		<!-- Configuration files and directories -->
+		<set name='PRODUCT_INCLUDE' value='$(EPOCINCLUDE)/variant/symbian_os.hrh'/>
+		<set name='VARIANT_CFG' value='$(EPOCTOOLS)/variant/variant.cfg'/>
+		<set name='MAKEFILE_TEMPLATES' value='$(EPOCTOOLS)/makefile_templates'/>
+		<set name='FLM_EXPORT_DIR' value='$(MAKEFILE_TEMPLATES)'/>
+	</var>
+	
+	<!-- Things which are properties of different OS versions rather than
+		 properties of Raptor itself. The values here are for TB92sf and
+		 may be completely redefined for other OS versions or modified
+		 slightly by redefining the root.changes variant. -->
+	<var name="root.properties">
+		<set name='POSTLINKER_SUPPORTS_WDP' value='1'/>
+		<set name='SUPPORTS_STDCPP_NEWLIB' value='1'/>
+		<set name="RVCT_PRE_INCLUDE" value="$(EPOCINCLUDE)/rvct/rvct.h"/>
+	</var>
+	
+	<!-- Placeholder for the root.changes variant. This will typically be
+	     redefined inside a .xml file in the $(EPOCROOT)/epoc32/sbs_config
+	     folder or a folder added with the configpath option. -->
+	<var name="root.changes"/>
+	
+</build>
--- a/sbsv2/raptor/lib/config/rvct.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/rvct.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,107 +1,104 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- RVCT build variant for RVCT compilers -->
-	<var name="rvct">
-		<set name="TOOLCHAIN" value="RVCT"/>
-		<set name="CC" value="$(ARMCC)"/>
-		<set name="LD" value="$(ARMLD)"/>
-		<set name="ASM" value="$(ARMASM)"/>
-		<set name="AR" value="$(ARMAR)"/>	
-		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)"/>
-		<set name="ARMLD" value="$(RVCTBIN)/armlink$(DOTEXE)"/>
-		<set name="ARMASM" value="$(RVCTBIN)/armasm$(DOTEXE)"/>
-		<set name="ARMAR" value="$(RVCTBIN)/armar$(DOTEXE)"/>
-		<set name="FROMELF" value="$(RVCTBIN)/fromelf$(DOTEXE)"/>
-		<set name="AAPCS_OPTION" value="--apcs /inter"/>
-		<set name="ARCHIVER_CREATE_OPTION" value="--create"/>
-		<set name="ARM_INSTRUCTION_SET" value="--arm"/>
-		<set name="ASM_OUTPUT_OPTION" value="-o"/>
-		<set name="ASSEMBLER_LISTING_OPTION" value="-S"/>
-		<set name="BPABI_OPTION" value="--bpabi"/>
-		<set name="CC_ERRORS_CONTROL_OPTION" value="--diag_error 1267"/>
-		<set name="CC_WARNINGS_CONTROL_OPTION" value="--diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331"/>
-		<set name="C_LANG_OPTION" value=""/>
-		<set name="COMMANDFILE_OPTION" value="--via "/>
-		<set name="COMPILE_ONLY_OPTION" value="-c"/>
-		<set name="CPP_LANG_OPTION" value="--cpp"/>
-		<set name="DEBUG_OPTIMISATION" value="-O0"/>
-		<set name="DEPEND_OPTION" value="--depend_format=unix --depend"/>
-		<set name="ENUM_OPTION" value="--enum_is_int"/>
-		<set name="EXPORT_VTBL_OPTION" value="--export_all_vtbl"/>
-		<set name="EXTRA_LD_OPTION" value="--datacompressor=off"/>
-		<set name="FPMODE_OPTION" value="--fpmode ieee_no_fenv"/>
-		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
-		<set name="LD_WARNINGS_CONTROL_OPTION" value="--diag_suppress 6331"/>
-		<set name="LISTING_OPTION" value="-S"/>
-		<set name="EXCEPTIONS" value="--exceptions --exceptions_unwind"/>
-		<set name="NO_EXCEPTIONS" value="--no_exceptions --no_exceptions_unwind"/>
-		<set name="PREINCLUDE_OPTION" value="--preinclude"/>
-		<set name="PREPROCESSOR_OPTION" value="-E"/>
-		<set name="REL_OPTIMISATION" value="-O2"/>
-		<set name="STDLIB_OPTION" value="--no_scanlib"/>
-		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value="--dllimport_runtime"/>
-		<set name="RW_BASE_OPTION" value="--rw-base"/>
-		<set name="CODE_SEGMENT_START" value=""/>
-		<set name="PREINCLUDE" value="$(RVCT_PRE_INCLUDE)"/>
-		<set name="CC.DWARF2" value="--dwarf2"/>
-		<set name="CC.DWARF3" value="--dwarf3"/>
-		<set name="LD.ARMV5" value=""/>
-		<set name="LD.ARMV6" value=""/>
-		<set name="LD.ARMV7" value=""/>
-		<set name="ARMMACROS.VAR" value=""/>
-		<set name="CFLAGS" value=""/>
-		<set name="CIADEFS" value="__CIA__"/>
-		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
-		<set name="COMPILER_CIA_FLAGS" value=""/>
-		<set name="COMPILER_FPU_FLAGS" value="--fpu $(ARMFPU)"/>	
-		<set name="COMPILER_DEFINES" value=""/>
-		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
-		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-J"/>
-		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
-		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
-		<set name="EXTRA_CC_OPTION" value=""/>
-		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
-		<set name="LIBPATH" value=""/>
-		<set name="LIBRARY" value=""/>
-		<set name="LICENSERETRY_OPTION" value=""/>
-		<set name="LINKER_ADD_STATIC_RUNTIME" value=""/>		
-		<set name="LINKER_DEBUG_OPTION" value="--debug"/>
-		<set name="LINKER_DEFAULT_LIBS" value=""/>
-		<set name="LINKER_DEFAULT_LIB_PATHS" value=""/>
-		<set name="LINKER_ENTRY_OPTION" value="--entry"/>
-		<set name="LINKER_GROUP_START_OPTION" value=""/>
-		<set name="LINKER_GROUP_END_OPTION" value=""/>
-		<set name="LINKER_MISC_FLAGS" value="$(LICENSERETRY_OPTION)"/>
-		<set name="LINKER_NODEBUG_OPTION" value=""/>
-		<set name="LINKER_SCRIPT_FILE_OPTION" value=""/>
-		<set name="LINKER_SYMBOLS_OPTION" value="--symbols"/>
-		<set name="LINKER_SYMBOLS_FILE_OPTION" value="--list"/>
-		<set name="SHARED_OBJECT_OPTION" value="--dll"/>
-		<set name="SID" value=""/>
-		<set name="SO_NAME_OPTION" value="--soname"/>
-		<set name="STATIC_LIBS_PATH" value="$(RVCTLIB)/armlib"/>
-		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
-		<set name="SYMBIAN_LD_MESSAGE_OPTION" value="$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)"/>
-		<set name="SUPPORTS_ABIV1_IMPLIBS" value="1"/>		
-		<set name="TARGET_RELOCATION_OPTION" value="" />
-		<set name="SYMVER_OPTION" value="--symver_soname"/>
-		<set name="TEMP_FILES_OPTION" value=""/>
-		<set name="THUMB_INSTRUCTION_SET" value="--thumb"/>
-		<set name="INSTRUCTION_SET" value=""/>
-		<set name="TRANASM_FLAGS" value="-n -s"/>
-		<set name="TRANASM_INPUT_OPTION" value=""/>
-		<set name="TRANASM_OUTPUT_OPTION" value="-o="/>
-		<set name="TRANSFORM_CIA" value="1"/>
-		<set name="UNDEFINED_SYMBOL_REF_OPTION" value=""/>
-		<set name="UNIX_SLASH_FOR_CC_ABS_PATHS" value="0"/>
-		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
-		<set name="USERINCLUDE" value=""/>
-		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
-		<set name="VFE_OPTION" value="--no_vfe"/>
-		<set name="PLATMACROS.WINDOWS" value="ARMCC EPOC32 MARM EABI GENERIC_MARM MARM_ARMV5 $(PLATMACROS.CONFIG) $(PLATMACROS.VAR)"/>
-		<set name="PLATMACROS.LINUX" value="$(PLATMACROS.WINDOWS)"/>
-		<set name="PLATMACROS.CONFIG" value=""/>
-		<set name="PLATMACROS.VAR" value=""/>
-		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
-	</var>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- RVCT build variant for RVCT compilers -->
+	<var name="rvct">
+		<set name="TOOLCHAIN" value="RVCT"/>
+		<set name="PLATMACROS.TOOLCHAIN" value="ARMCC"/>
+		<set name="CC" value="$(ARMCC)"/>
+		<set name="LD" value="$(ARMLD)"/>
+		<set name="ASM" value="$(ARMASM)"/>
+		<set name="AR" value="$(ARMAR)"/>	
+		<set name="ARMCC" value="$(RVCTBIN)/armcc$(DOTEXE)"/>
+		<set name="ARMLD" value="$(RVCTBIN)/armlink$(DOTEXE)"/>
+		<set name="ARMASM" value="$(RVCTBIN)/armasm$(DOTEXE)"/>
+		<set name="ARMAR" value="$(RVCTBIN)/armar$(DOTEXE)"/>
+		<set name="FROMELF" value="$(RVCTBIN)/fromelf$(DOTEXE)"/>
+		<set name="AAPCS_OPTION" value="--apcs /inter"/>
+		<set name="ARCHIVER_CREATE_OPTION" value="--create"/>
+		<set name="ARM_INSTRUCTION_SET" value="--arm"/>
+		<set name="ASM_OUTPUT_OPTION" value="-o"/>
+		<set name="ASSEMBLER_LISTING_OPTION" value="-S"/>
+		<set name="BPABI_OPTION" value="--bpabi"/>
+		<set name="CC_ERRORS_CONTROL_OPTION" value="--diag_error 1267"/>
+		<set name="CC_WARNINGS_CONTROL_OPTION" value="--diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331"/>
+		<set name="C_LANG_OPTION" value=""/>
+		<set name="COMMANDFILE_OPTION" value="--via "/>
+		<set name="COMPILE_ONLY_OPTION" value="-c"/>
+		<set name="CPP_LANG_OPTION" value="--cpp"/>
+		<set name="DEBUG_OPTIMISATION" value="-O0"/>
+		<set name="DEPEND_OPTION" value="--depend_format=unix --depend"/>
+		<set name="ENUM_OPTION" value="--enum_is_int"/>
+		<set name="EXPORT_VTBL_OPTION" value="--export_all_vtbl"/>
+		<set name="EXTRA_LD_OPTION" value="--datacompressor=off"/>
+		<set name="FPMODE_OPTION" value="--fpmode ieee_no_fenv"/>
+		<set name="LD_ERRORS_CONTROL_OPTION" value=""/>
+		<set name="LD_WARNINGS_CONTROL_OPTION" value="--diag_suppress 6331"/>
+		<set name='LD_WARNINGS_SUPPRESSION_ARMLIBS' value='--diag_suppress 6780' />
+		<set name="LISTING_OPTION" value="-S"/>
+		<set name="EXCEPTIONS" value="--exceptions --exceptions_unwind"/>
+		<set name="NO_EXCEPTIONS" value="--no_exceptions --no_exceptions_unwind"/>
+		<set name="PREINCLUDE_OPTION" value="--preinclude"/>
+		<set name="PREPROCESSOR_OPTION" value="-E"/>
+		<set name="REL_OPTIMISATION" value="-O2"/>
+		<set name="STDLIB_OPTION" value="--no_scanlib"/>
+		<set name="RUNTIME_SYMBOL_VISIBILITY_OPTION" value="--dllimport_runtime"/>
+		<set name="RW_BASE_OPTION" value="--rw-base"/>
+		<set name="CODE_SEGMENT_START" value=""/>
+		<set name="PREINCLUDE" value="$(RVCT_PRE_INCLUDE)"/>
+		<set name="CC.DWARF2" value="--dwarf2"/>
+		<set name="CC.DWARF3" value="--dwarf3"/>
+		<set name="LD.ARMV5" value=""/>
+		<set name="LD.ARMV6" value=""/>
+		<set name="LD.ARMV7" value=""/>
+		<set name="CFLAGS" value=""/>
+		<set name="CIADEFS" value="__CIA__"/>
+		<append name="CDEFS" value='__SUPPORT_CPP_EXCEPTIONS__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE__="$(PRODUCT_INCLUDE)" $(MMPDEFS) $(ARMMACROS)'/>
+		<set name="COMPILER_CIA_FLAGS" value=""/>
+		<set name="COMPILER_FPU_FLAGS" value="--fpu $(ARMFPU)"/>	
+		<set name="COMPILER_DEFINES" value=""/>
+		<set name="COMPILER_INTERWORK_DEFINES" value="__MARM_INTERWORK__"/>
+		<set name="COMPILER_SYSTEM_INCLUDE_OPTION" value="-J"/>
+		<set name="COMPILER_THUMB_DEFINES" value="__MARM_THUMB__"/>
+		<set name="DATA_SEGMENT_START" value="$(SPLIT_OPTION) $(RW_BASE_OPTION)"/>
+		<set name="EXTRA_CC_OPTION" value=""/>
+		<set name="HEADER_FILES_CONTROL_OPTION" value=""/>
+		<set name="LIBPATH" value=""/>
+		<set name="LIBRARY" value=""/>
+		<set name="LICENSERETRY_OPTION" value=""/>
+		<set name="LINKER_ADD_STATIC_RUNTIME" value=""/>		
+		<set name="LINKER_DEBUG_OPTION" value="--debug"/>
+		<set name="LINKER_DEFAULT_LIBS" value=""/>
+		<set name="LINKER_DEFAULT_LIB_PATHS" value=""/>
+		<set name="LINKER_ENTRY_OPTION" value="--entry"/>
+		<set name="LINKER_GROUP_START_OPTION" value=""/>
+		<set name="LINKER_GROUP_END_OPTION" value=""/>
+		<set name="LINKER_MISC_FLAGS" value="$(LICENSERETRY_OPTION)"/>
+		<set name="LINKER_NODEBUG_OPTION" value=""/>
+		<set name="LINKER_SCRIPT_FILE_OPTION" value=""/>
+		<set name="LINKER_SYMBOLS_OPTION" value="--symbols"/>
+		<set name="LINKER_SYMBOLS_FILE_OPTION" value="--list"/>
+		<set name="SHARED_OBJECT_OPTION" value="--dll"/>
+		<set name="SID" value=""/>
+		<set name="SO_NAME_OPTION" value="--soname"/>
+		<set name="STATIC_LIBS_PATH" value="$(RVCTLIB)/armlib"/>
+		<set name="STDCPP_INCLUDE" value="$(EPOCINCLUDE)/stdapis"/>
+		<set name="SYMBIAN_LD_MESSAGE_OPTION" value="$(LD_WARNINGS_CONTROL_OPTION) $(LD_ERRORS_CONTROL_OPTION)"/>
+		<set name="SUPPORTS_ABIV1_IMPLIBS" value="1"/>		
+		<set name="TARGET_RELOCATION_OPTION" value="" />
+		<set name="SYMVER_OPTION" value="--symver_soname"/>
+		<set name="TEMP_FILES_OPTION" value=""/>
+		<set name="THUMB_INSTRUCTION_SET" value="--thumb"/>
+		<set name="INSTRUCTION_SET" value=""/>
+		<set name="TRANASM_FLAGS" value="-n -s"/>
+		<set name="TRANASM_INPUT_OPTION" value=""/>
+		<set name="TRANASM_OUTPUT_OPTION" value="-o="/>
+		<set name="TRANSFORM_CIA" value="1"/>
+		<set name="UNDEFINED_SYMBOL_REF_OPTION" value=""/>
+		<set name="UNIX_SLASH_FOR_CC_ABS_PATHS" value="0"/>
+		<set name="UNRESOLVED_SYMBOL_REF_OPTION" value=""/>
+		<set name="USERINCLUDE" value=""/>
+		<set name="USER_LIBS_PATH_OPTION" value="--userlibpath"/>
+		<set name="VFE_OPTION" value="--no_vfe"/>
+		<set name="NO_UNALIGNED_ACCESS" value="$(CC.NO_UNALIGNED_ACCESS)"/>
+	</var>
+</build>
--- a/sbsv2/raptor/lib/config/variants.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/variants.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,265 +1,256 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Commonly used variants.
-
-	These can be referenced from the command-line or in configurations.
-	
-	-->
-  
-	<!-- This variant turns debug info on for arm only -->
-	<var name="debug_info">
-		<set name='DEBUG_INFO' value='1'/>
-	</var>
-	<!-- Run this variant to turn on trace compiler -->
-	<var name="tracecompiler">
-		<set name='USE_TRACE_COMPILER' value='1'/>
-		<env name='JAVA_HOME' default='' type='path'/>
-		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java.exe' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' host='win*' />
-		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' host='lin*' />
-	</var>
-
-    <!-- Overrides the default debugging format for the ARM targets. -->
-    <var name="dwarf3">
-        <set name="DEBUG_FORMAT" value="$(CC.DWARF3)"/>
-    </var>
-	<var name="techview">
-	</var>
-
-	<var name="test">
-		<set name='TESTCODE' value='TRUE'/>
-	</var>
-
-	<var name="savespace">
-		<set name='SAVESPACE' value='TRUE'/>
-	</var>
-
-  <var name="generate_linkerfeedback">
-   <set name='GENERATELINKERFEEDBACK' value='TRUE'/>
-   </var>
-
-   <var name="use_linkerfeedback">
-    <set name='GENERATELINKERFEEDBACK' value='TRUE'/>
-   <set name='LINKERFEEDBACK_STAGE2' value='TRUE'/>
-   </var>
-
-   <var name="profilerfeedback">
-	   <set name='USE_PROFILER_FEEDBACK' value='TRUE'/>
-	   <env name='ARM_PROFILER_FILE' default='' type='path'/>
-   </var>
-
-   <var name="ltcg">
-	   <set name='LTCG' value='TRUE'/>
-	   <set name='LTCG_OPTION' value='--ltcg'/>
-   </var>
-
-   <var name="multifile">
-    <set name='MULTIFILE_ENABLED' value='TRUE'/>
-   </var>
-
-  <!-- build from clean can skip some processing -->
-  <var name="bfc">
-    <set name='DEPEND_SKIP' value='TRUE'/>
-  </var>
-
-	<!-- SMP variant for Kernel Code -->
-	<var name="smp">
-		<append name="CDEFS" value="__SMP__"/>
-		<append name="PLATMACROS.WINDOWS" value="SMP"/>
-		<!-- PLATMACROS.LINUX is set from PLATMACROS.WINDOWS -->
-		<append name="TRADITIONAL_PLATFORM" value='SMP' separator="" />
-		<append name="VARIANTPLATFORM" value="smp" separator=""/>
-		<set name="GENERATE_ABIV1_IMPLIBS" value=""/>
-	</var>
-
-	<!-- emit formatted releasable information into the logs for post-build parsing -->
-	<var name="whatlog">
-		<set name='WHATLOG' value='TRUE'/>
-	</var>
-
-	<var name="gcce4_3_2" extends="gcce_base">
-		<env name="GCCEBIN" type="path" />
-		<env name="GCCEVERSION" default="$(TOOLCHAINVERSION)" />
-		<set name="TOOLCHAINVERSION" value="4.3.2" />
-		<set name="OWN_LIBRARY_OPTION" value=""/>
-		<set name="STATIC_LIBS_LIST" value=""/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
-		<set name="ARMLIBS" value=""/>
-		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
-		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
-		<set name="CC.ARMV5" value="-march=armv5t"/>
-		<set name="LD.ARMV5" value=""/>
-		<set name="LD.ARMV6" value=""/>
-		<set name="LD.ARMV7" value=""/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
-		<set name="RVCTLIB" value=""/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
-		<set name="SPLIT_OPTION" value=""/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
-		<set name="RVCTBIN" value="" />
-		<set name="RVCTINC" value="" />
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
-	</var>
-
-	<var name="gcce4_3_3" extends="gcce_base">
-		<env name="GCCEBIN" type="path" />
-		<env name="GCCEVERSION" default="$(TOOLCHAINVERSION)" />
-		<set name="TOOLCHAINVERSION" value="4.3.3" />
-		<set name="OWN_LIBRARY_OPTION" value=""/>
-		<set name="STATIC_LIBS_LIST" value=""/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
-		<set name="ARMLIBS" value=""/>
-		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
-		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
-		<set name="CC.ARMV5" value="-march=armv5t"/>
-		<set name="LD.ARMV5" value=""/>
-		<set name="LD.ARMV6" value=""/>
-		<set name="LD.ARMV7" value=""/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
-		<set name="RVCTLIB" value=""/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
-		<set name="SPLIT_OPTION" value=""/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
-		<set name="RVCTBIN" value="" />
-		<set name="RVCTINC" value="" />
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
-	</var>
-
-	<var name="rvct2_2" extends="rvct">
-		<env name="RVCT22BIN" type="path"/>
-		<env name="RVCT22INC" type="path"/>
-		<env name="RVCT22LIB" type="path"/>
-		<set name="RVCTBIN" value="$(RVCT22BIN)"/>
-		<set name="RVCTINC" value="$(RVCT22INC)"/>
-		<set name="RVCTLIB" value="$(RVCT22LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --vsn" versionResult="Compiler, RVCT2\.2\b"/>
-		<set name="OWN_LIBRARY_OPTION" value="-Ono_known_library"/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value="--reloc"/>
-		<set name="SPLIT_OPTION" value="--split"/>
-		<set name="PLATMACROS.VAR" value="ARMCC_2 ARMCC_2_2"/>
-		<set name="ARMMACROS.VAR" value="__ARMCC_2__ __ARMCC_2_2__"/>
-		<set name="SYMBIAN_LINK_FLAGS.VAR" value=""/>
-		<set name="STATIC_LIBS_LIST" value="h_t__uf.l(switch8.o)"/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso drtrvct2_2.dso"/>
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt2_2.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt2_2.lib"/>
-		<set name="USRTLIB" value="usrt2_2.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="False"/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value="--memaccess -UL41"/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
-		<set name="CC.ARMV5" value="--cpu 5T"/>
-		<set name="CC.ARMV6" value="--cpu 6"/>
-	</var>
-
-	<var name="rvct3_1" extends="rvct">
-		<env name="RVCT31BIN" type="path"/>
-		<env name="RVCT31INC" type="path"/>
-		<env name="RVCT31LIB" type="path"/>
-		<set name="RVCTBIN" value="$(RVCT31BIN)"/>
-		<set name="RVCTINC" value="$(RVCT31INC)"/>
-		<set name="RVCTLIB" value="$(RVCT31LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="310[6-9]\d\d\b"/>
-		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
-		<set name="SPLIT_OPTION" value=""/>
-		<set name="PLATMACROS.VAR" value="ARMCC_3 ARMCC_3_1"/>
-		<set name="ARMMACROS.VAR" value="__ARMCC_3__ __ARMCC_3_1__"/>
-		<set name="SYMBIAN_LINK_FLAGS.VAR" value="--export_all"/>
-		<set name="STATIC_LIBS_LIST" value="h_5.l"/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
-		<set name="USRTLIB" value="usrt3_1.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp"/>
-		<set name="CC.ARMV5" value="--cpu=5TE"/>
-		<set name="CC.ARMV6" value="--cpu=6"/>
-		<set name="CC.ARMV7" value="--cpu=7-A"/>
-	</var>
-
-	<var name="rvct4_0" extends="rvct">
-		<env name="RVCT40BIN" type="path"/>
-		<env name="RVCT40INC" type="path"/>
-		<env name="RVCT40LIB" type="path"/>
-		<set name="RVCTBIN" value="$(RVCT40BIN)"/>
-		<set name="RVCTINC" value="$(RVCT40INC)"/>
-		<set name="RVCTLIB" value="$(RVCT40LIB)"/>
-		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="400[4-9]\d\d\b"/>
-		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
-		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
-		<set name="SPLIT_OPTION" value=""/>
-		<set name="STDLIB_OPTION" value=""/>
-		<set name="PLATMACROS.VAR" value="ARMCC_4 ARMCC_4_0"/>
-		<set name="ARMMACROS.VAR" value="__ARMCC_4__ __ARMCC_4_0__"/>
-		<set name="SYMBIAN_LINK_FLAGS.VAR" value="--override_visibility"/>
-		<set name="STATIC_LIBS_LIST" value=""/>
-		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso"/>
-		<set name="USER_STATIC_RUNTIME_LIB" value="usrt4_0.lib"/>
-		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt4_0.lib"/>
-		<set name="USRTLIB" value="usrt4_0.lib"/>
-		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
-		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp+vfpv2"/>
-		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp+vfpv3"/>
-		<set name="CC.ARMV5" value="--cpu=5TE"/>
-		<set name="CC.ARMV6" value="--cpu=6"/>
-		<set name="CC.ARMV7" value="--cpu=7-A"/>
-		<set name="LD.ARMV5" value="$(CC.ARMV5)"/>
-		<set name="LD.ARMV6" value="$(CC.ARMV6)"/>
-		<set name="LD.ARMV7" value="$(CC.ARMV7)"/>
-	</var>
-
-	<var name="urel">
-		<set name="DEBUG_INFO" value=""/>
-		<set name="SYMBIAN_CCFLAGS" value="$(REL_OPTIMISATION)"/>
-		<set name="VARIANTTYPE" value="urel"/>
-		<append name="CDEFS" value="NDEBUG"/>
-	</var>
-
-	<var name="udeb">
-		<set name="DEBUG_INFO" value="1"/>
-		<set name="SYMBIAN_CCFLAGS" value="$(DEBUG_OPTIMISATION)"/>
-		<set name="VARIANTTYPE" value="udeb"/>
-		<append name="CDEFS" value="_DEBUG"/>
-	</var>
-
-	<var name="remove_freeze">
-		<set name='EFREEZE_REMOVE_OPTION' value='-Remove'/>
-	</var>
-
-	<!-- OS variant mechanism is now deprecated. We retain the values for
-	     versions older than TB92sf until the mechanism is removed. -->
-
-	<!-- variant for OS version v9.4 -->
-	<var name="v94">
-		<set name='POSTLINKER_SUPPORTS_WDP' value=''/>
-		<set name='SUPPORTS_STDCPP_NEWLIB' value=''/>
-		<set name='RVCT_PRE_INCLUDE' value='$(EPOCINCLUDE)/rvct2_2/rvct2_2.h'/>
-	</var>
-
-	<!-- variants for OS version TB91* (the same as OS v9.4) -->
-	<var name="vtb91" extends="v94"/>
-	<var name="vtb91sf" extends="v94"/>
-
-	<!-- these OS variants are deliberately empty -->
-	<var name="v95"/>
-	<var name="v96"/>
-	<var name="vFuture"/>
-	<var name="vtb92"/>
-	<var name="vtb92sf"/>
-	<var name="vtb101"/>
-	<var name="vtb101sf"/>
-	
-	<!-- WINSCW specific variant for pick up nested relative include headers correctly -->
-	<var name="mwccinc">
-		<set name='OPTION_CW' value='-cwd include'/>
-	</var>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Commonly used variants.
+
+	These can be referenced from the command-line or in configurations.
+	
+	-->
+  
+	<!-- This variant turns debug info on for arm only -->
+	<var name="debug_info">
+		<set name='DEBUG_INFO' value='1'/>
+	</var>
+	<!-- Run this variant to turn on trace compiler -->
+	<var name="tracecompiler">
+		<set name='USE_TRACE_COMPILER' value='1'/>
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java.exe' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' host='win*' />
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' host='lin*' />
+	</var>
+
+    <!-- Overrides the default debugging format for the ARM targets. -->
+    <var name="dwarf3">
+        <set name="DEBUG_FORMAT" value="$(CC.DWARF3)"/>
+    </var>
+	<var name="techview">
+	</var>
+
+	<var name="test">
+		<set name='TESTCODE' value='TRUE'/>
+	</var>
+
+	<var name="savespace">
+		<set name='SAVESPACE' value='TRUE'/>
+	</var>
+
+  <var name="generate_linkerfeedback">
+   <set name='GENERATELINKERFEEDBACK' value='TRUE'/>
+   </var>
+
+   <var name="use_linkerfeedback">
+    <set name='GENERATELINKERFEEDBACK' value='TRUE'/>
+   <set name='LINKERFEEDBACK_STAGE2' value='TRUE'/>
+   </var>
+
+   <var name="profilerfeedback">
+	   <set name='USE_PROFILER_FEEDBACK' value='TRUE'/>
+	   <env name='ARM_PROFILER_FILE' default='' type='path'/>
+   </var>
+
+   <var name="ltcg">
+	   <set name='LTCG' value='TRUE'/>
+	   <set name='LTCG_OPTION' value='--ltcg'/>
+   </var>
+
+   <var name="multifile">
+    <set name='MULTIFILE_ENABLED' value='TRUE'/>
+   </var>
+
+  <!-- build from clean can skip some processing -->
+  <var name="bfc">
+    <set name='DEPEND_SKIP' value='TRUE'/>
+  </var>
+
+	<!-- SMP variant for Kernel Code -->
+	<var name="smp">
+		<append name="CDEFS" value="__SMP__"/>
+		<append name="PLATMACROS.WINDOWS" value="SMP"/>
+		<!-- PLATMACROS.LINUX is set from PLATMACROS.WINDOWS -->
+		<append name="TRADITIONAL_PLATFORM" value='SMP' separator="" />
+		<append name="VARIANTPLATFORM" value="smp" separator=""/>
+		<set name="GENERATE_ABIV1_IMPLIBS" value=""/>
+	</var>
+
+	<!-- emit formatted releasable information into the logs for post-build parsing -->
+	<var name="whatlog">
+		<set name='WHATLOG' value='TRUE'/>
+	</var>
+
+	<var name="gcce4_3_2" extends="gcce_base">
+		<env name="GCCEBIN" type="path" />
+		<env name="GCCEVERSION" default="$(TOOLCHAINVERSION)" />
+		<set name="TOOLCHAINVERSION" value="4.3.2" />
+		<set name="OWN_LIBRARY_OPTION" value=""/>
+		<set name="STATIC_LIBS_LIST" value=""/>
+		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
+		<set name="ARMLIBS" value=""/>
+		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
+		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
+		<set name="CC.ARMV5" value="-march=armv5t"/>
+		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
+		<set name="RVCTLIB" value=""/>
+		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
+		<set name="SPLIT_OPTION" value=""/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
+		<set name="RVCTBIN" value="" />
+		<set name="RVCTINC" value="" />
+		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
+		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
+	</var>
+
+	<var name="gcce4_3_3" extends="gcce_base">
+		<env name="GCCEBIN" type="path" />
+		<env name="GCCEVERSION" default="$(TOOLCHAINVERSION)" />
+		<set name="TOOLCHAINVERSION" value="4.3.3" />
+		<set name="OWN_LIBRARY_OPTION" value=""/>
+		<set name="STATIC_LIBS_LIST" value=""/>
+		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
+		<set name="ARMLIBS" value=""/>
+		<set name="CC.OPT.SOFTVFP_MAYBE_VFPV2" value="-m"/>
+		<set name="CC.VAL.SOFTVFP_MAYBE_VFPV2" value="soft-float"/>
+		<set name="CC.ARMV5" value="-march=armv5t"/>
+		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
+		<set name="RVCTLIB" value=""/>
+		<set name="CC.NO_UNALIGNED_ACCESS" value=""/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value=""/>
+		<set name="SPLIT_OPTION" value=""/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value=""/>
+		<set name="RVCTBIN" value="" />
+		<set name="RVCTINC" value="" />
+		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
+		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value="" />
+	</var>
+
+	<var name="rvct2_2" extends="rvct">
+		<env name="RVCT22BIN" type="path"/>
+		<env name="RVCT22INC" type="path"/>
+		<env name="RVCT22LIB" type="path"/>
+		<set name="RVCTBIN" value="$(RVCT22BIN)"/>
+		<set name="RVCTINC" value="$(RVCT22INC)"/>
+		<set name="RVCTLIB" value="$(RVCT22LIB)"/>
+		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --vsn" versionResult="Compiler, RVCT2\.2\b"/>
+		<set name="OWN_LIBRARY_OPTION" value="-Ono_known_library"/>
+		<set name="RELOCATABLE_IMAGE_OPTION" value="--reloc"/>
+		<set name="SPLIT_OPTION" value="--split"/>
+		<set name="PLATMACROS.VAR" value="ARMCC_2 ARMCC_2_2"/>
+		<set name="ARMMACROS.VAR" value="__ARMCC_2__ __ARMCC_2_2__"/>
+		<set name="SYMBIAN_LINK_FLAGS.VAR" value=""/>
+		<set name="STATIC_LIBS_LIST" value="h_t__uf.l(switch8.o)"/>
+		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso drtrvct2_2.dso"/>
+		<set name="USER_STATIC_RUNTIME_LIB" value="usrt2_2.lib"/>
+		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt2_2.lib"/>
+		<set name="USRTLIB" value="usrt2_2.lib"/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value="False"/>
+		<set name="CC.NO_UNALIGNED_ACCESS" value="--memaccess -UL41"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
+		<set name="CC.ARMV5" value="--cpu 5T"/>
+		<set name="CC.ARMV6" value="--cpu 6"/>
+	</var>
+
+	<var name="rvct3_1" extends="rvct">
+		<env name="RVCT31BIN" type="path"/>
+		<env name="RVCT31INC" type="path"/>
+		<env name="RVCT31LIB" type="path"/>
+		<set name="RVCTBIN" value="$(RVCT31BIN)"/>
+		<set name="RVCTINC" value="$(RVCT31INC)"/>
+		<set name="RVCTLIB" value="$(RVCT31LIB)"/>
+		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="310[6-9]\d\d\b"/>
+		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
+		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
+		<set name="SPLIT_OPTION" value=""/>
+		<set name="PLATMACROS.VAR" value="ARMCC_3 ARMCC_3_1"/>
+		<set name="ARMMACROS.VAR" value="__ARMCC_3__ __ARMCC_3_1__"/>
+		<set name="SYMBIAN_LINK_FLAGS.VAR" value="--export_all"/>
+		<set name="STATIC_LIBS_LIST" value="h_5.l"/>
+		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso dfprvct3_1.dso drtrvct3_1.dso"/>
+		<set name="USER_STATIC_RUNTIME_LIB" value="usrt3_1.lib"/>
+		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt3_1.lib"/>
+		<set name="USRTLIB" value="usrt3_1.lib"/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
+		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp"/>
+		<set name="CC.ARMV5" value="--cpu 5TE"/>
+		<set name="CC.ARMV6" value="--cpu 6"/>
+		<set name="CC.ARMV7" value="--cpu 7-A"/>
+	</var>
+
+	<var name="rvct4_0" extends="rvct">
+		<env name="RVCT40BIN" type="path"/>
+		<env name="RVCT40INC" type="path"/>
+		<env name="RVCT40LIB" type="path"/>
+		<set name="RVCTBIN" value="$(RVCT40BIN)"/>
+		<set name="RVCTINC" value="$(RVCT40INC)"/>
+		<set name="RVCTLIB" value="$(RVCT40LIB)"/>
+		<set name="ARMCC" value="&quot;$(RVCTBIN)/armcc$(DOTEXE)&quot;" type="tool" versionCommand="$(ARMCC) --version_number" versionResult="400[4-9]\d\d\b"/>
+		<set name="OWN_LIBRARY_OPTION" value="--library_interface=aeabi_clib"/>
+		<set name="RELOCATABLE_IMAGE_OPTION" value=""/>
+		<set name="SPLIT_OPTION" value=""/>
+		<set name="STDLIB_OPTION" value=""/>
+		<set name="PLATMACROS.VAR" value="ARMCC_4 ARMCC_4_0"/>
+		<set name="ARMMACROS.VAR" value="__ARMCC_4__ __ARMCC_4_0__"/>
+		<set name="SYMBIAN_LINK_FLAGS.VAR" value="--override_visibility"/>
+		<set name="STATIC_LIBS_LIST" value=""/>
+		<set name="RUNTIME_LIBS_LIST" value="drtaeabi.dso dfpaeabi.dso"/>
+		<set name="USER_STATIC_RUNTIME_LIB" value="usrt4_0.lib"/>
+		<set name="KERNEL_STATIC_RUNTIME_LIB" value="ksrt4_0.lib"/>
+		<set name="USRTLIB" value="usrt4_0.lib"/>
+		<set name="NEED_ENTRYPOINT_LIBRARY" value="True"/>
+		<set name="CC.NO_UNALIGNED_ACCESS" value="--no_unaligned_access"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV2" value="softvfp+vfpv2"/>
+		<set name="CC.SOFTVFP_MAYBE_VFPV3" value="softvfp+vfpv3"/>
+		<set name="CC.ARMV5" value="--cpu 5TE"/>
+		<set name="CC.ARMV6" value="--cpu 6"/>
+		<set name="CC.ARMV7" value="--cpu 7-A"/>
+	</var>
+
+	<var name="urel">
+		<set name="DEBUG_INFO" value=""/>
+		<set name="SYMBIAN_CCFLAGS" value="$(REL_OPTIMISATION)"/>
+		<set name="VARIANTTYPE" value="urel"/>
+		<append name="CDEFS" value="NDEBUG"/>
+	</var>
+
+	<var name="udeb">
+		<set name="DEBUG_INFO" value="1"/>
+		<set name="SYMBIAN_CCFLAGS" value="$(DEBUG_OPTIMISATION)"/>
+		<set name="VARIANTTYPE" value="udeb"/>
+		<append name="CDEFS" value="_DEBUG"/>
+	</var>
+
+	<var name="remove_freeze">
+		<set name='EFREEZE_REMOVE_OPTION' value='-Remove'/>
+	</var>
+
+	<!-- OS variant mechanism is now deprecated. We retain the values for
+	     versions older than TB92sf until the mechanism is removed. -->
+
+	<!-- variant for OS version v9.4 -->
+	<var name="v94">
+		<set name='POSTLINKER_SUPPORTS_WDP' value=''/>
+		<set name='SUPPORTS_STDCPP_NEWLIB' value=''/>
+		<set name='RVCT_PRE_INCLUDE' value='$(EPOCINCLUDE)/rvct2_2/rvct2_2.h'/>
+	</var>
+
+	<!-- variants for OS version TB91* (the same as OS v9.4) -->
+	<var name="vtb91" extends="v94"/>
+	<var name="vtb91sf" extends="v94"/>
+
+	<!-- these OS variants are deliberately empty -->
+	<var name="v95"/>
+	<var name="v96"/>
+	<var name="vFuture"/>
+	<var name="vtb92"/>
+	<var name="vtb92sf"/>
+	<var name="vtb101"/>
+	<var name="vtb101sf"/>
+	
+	<!-- WINSCW specific variant for pick up nested relative include headers correctly -->
+	<var name="mwccinc">
+		<set name='OPTION_CW' value='-cwd include'/>
+	</var>
+
+</build>
--- a/sbsv2/raptor/lib/config/winscw.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/config/winscw.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,143 +1,143 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- build configurations for Metrowerks Emulator compilers -->
-	<var name="winscw_base" extends="root">
-		<varRef ref="default.interfaces"/>
-		<varRef ref="default.locations"/>
-		<!-- picked up from the Environment -->
-		<env name='CHECKLIB' default='$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)' type='tool'/>
-		<env name='EFREEZE' default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type='tool'/>
-		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
-		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
-		<env name='MWCC' default='mwccsym2$(DOTEXE)' type='tool' versionCommand='$(MWCC) -version' versionResult='Version 3.2.*'/>
-		<env name='MWLD' default='mwldsym2$(DOTEXE)' type='tool' versionCommand='$(MWLD) -version' versionResult='Version 3.2.*'/>
-		<env name='MWWINRC' default='mwwinrc$(DOTEXE)' type='tool' versionCommand='$(MWWINRC) -version' versionResult='Version 3.2.*'/>
-
-		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
-		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
-		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>	
-		
-		<!-- link to bld.inf and mmp platform names -->
-		<set name='TRADITIONAL_PLATFORM' value='WINSCW'/>
-
-		<!-- interfaces -->
-		<set name="INTERFACE.ani" value="Emulator.ani"/>
-		<set name="INTERFACE.bitmap" value="Emulator.bitmap"/>
-		<set name="INTERFACE.exe" value="Emulator.exe"/>
-		<set name="INTERFACE.stdexe" value="Emulator.stdexe"/>
-		<set name="INTERFACE.dll" value="Emulator.dll"/>
-		<set name="INTERFACE.stddll" value="Emulator.stddll"/>
-		<set name="INTERFACE.exexp" value="Emulator.exexp"/>
-		<set name="INTERFACE.fsy" value="Emulator.fsy"/>
-		<set name="INTERFACE.implib" value="Emulator.implib"/>
-		<set name="INTERFACE.kdll" value="Emulator.kdll"/>
-		<set name="INTERFACE.kext" value="Emulator.kext"/>
-		<set name="INTERFACE.klib" value="Emulator.klib"/>
-		<set name="INTERFACE.ldd" value="Emulator.ldd"/>
-		<set name="INTERFACE.lib" value="Emulator.lib"/>
-		<set name="INTERFACE.stdlib" value="Emulator.stdlib"/>
-		<set name="INTERFACE.none" value="Emulator.none"/>
-		<set name="INTERFACE.pdd" value="Emulator.pdd"/>
-		<set name="INTERFACE.pdl" value="Emulator.pdl"/>
-		<set name="INTERFACE.plugin" value="Emulator.plugin"/>
-		<set name="INTERFACE.resource" value="Emulator.resource"/>
-		<set name="INTERFACE.textnotifier2" value="Emulator.textnotifier2"/>
-		<set name="INTERFACE.var" value="Emulator.var"/>
-		<set name='CC' value='$(MWCC)'/>
-		<set name='CDEFS' value='__SYMBIAN32__ __CW32__ __WINS__ __WINSCW__ __SUPPORT_CPP_EXCEPTIONS__ _UNICODE $(MMPDEFS)'/>
-		<set name='CFLAGS' value='-c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source'/>
-		<set name='CW_DEFAULT_LIBS' value='gdi32.lib user32.lib kernel32.lib'/>
-		<set name='CW_RUNTIME_STATIC' value='msl_all_static_mse_symbian_d.lib'/>
-		<set name='CW_RUNTIME_NONSTATIC' value='MSL_All_x86_Symbian_D.lib'/>
-		<set name='DEFAULT_NORMAL_NEWLIB' value='scppnwdl.lib'/>
-		<set name='DEFAULT_SYSTEM_NEWLIB' value='scppnwdl_kern.lib'/>
-		<set name='EXPORT_TYPE' value='dllexport'/>
-		<set name='LD' value='$(MWLD)'/>
-		<set name='LFLAGS' value='-msgstyle gcc -stdlib -subsystem windows'/>
-		<set name='LFLAGS_INFGEN' value='-S -show only,names,unmangled,verbose '/>
-		<set name='LFLAGS_SYMGEN' value='-S -show only,names,verbose '/>
-		<set name='LINKPATH' value='winscw/udeb'/>
-		<set name='LISTING_OPTION' value='-S'/>
-		<set name='MMPDEFS' value=''/>
-		<set name='EPOCSTACKSIZE' value=''/>
-		<set name='NMAKE' value='nmake'/>
-		<set name='NMAKEFLAGS' value='-nologo -x - '/>
-		<set name='OPT.ADDCOMMAND' value='-addcommand '/>
-		<set name='OPT.CHECKLIB.STDCPP' value='stdc++'/>
-		<set name='OPT.CHECKLIB.SYMCPP' value='symc++'/>
-		<set name='OPT.CHECKLIB.WIN32' value='--coff'/>
-		<set name='OPT.HEAPCOMMIT' value='-heapcommit='/>
-		<set name='OPT.DEFINE' value='-d '/>
-		<set name='OPT.DEFFILE' value='-f '/>
-		<set name='OPT.DEPEND' value='-gccdepends -MD '/>
-		<set name='OPT.EXPORT' value='-export '/>
-		<set name='OPT.HEAPRESERVE' value='-heapreserve='/>
-		<set name='OPT.IMAGEBASE' value='-imagebase '/>
-		<set name='OPT.IMPLIB' value='-implib '/>
-		<set name='OPT.IMPORTLIB' value='-importlib '/>
-		<set name='OPT.LIBFILE' value='-l'/>
-		<set name='OPT.LIBPATH' value='-l '/>
-		<set name='OPT.LISTING' value='-S -show source,unmangled,comments '/>
-		<set name='OPT.MENTRYPOINT' value='-m '/>
-		<set name='OPT.MAINENTRYPOINT' value='-main '/>
-		<set name='OPT.MAP' value='-map '/>
-		<set name='OPT.NOCOMPACTIMPORTLIB' value='-nocompactimportlib '/>
-		<set name='OPT.NOENTRY' value='-noentry '/>
-		<set name='OPT.NOIMPLIB' value='-noimplib '/>
-		<set name='OPT.NOSTDINC' value='-nostdinc '/>
-		<set name='OPT.OUT' value='-o '/>
-		<set name='OPT.PREINCLUDE' value='-include '/>
-		<set name='OPT.RUNTIME' value='-runtime '/>
-		<set name='OPT.SEARCH' value='-search'/>
-		<set name='OPT.SHARED' value='-shared '/>
-		<set name='OPT.SPLITINCLUDE' value='-i-'/>
-		<set name='OPT.STATICLIBRARY' value='-library '/>
-		<set name='OPT.STDINC' value='-stdinc '/>
-		<set name='OPT.STDLIB' value='-stdlib '/>
-		<set name='OPT.SYM' value='-sym '/>
-		<set name='OPT.SYSINCLUDE' value='-i '/>
-		<set name='OPT.USERINCLUDE' value='-i '/>
-		<set name='OPT.WCHAR' value='-wchar_t '/>
-		<set name='OPT.WARNINGS' value='-warnings '/>
-		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='BLDINF_OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
-		<set name='RC' value='$(MWWINRC)'/>
-		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release'/>
-		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
-		<set name='STDCPP_DEF' value='__SYMBIAN_STDCPP_SUPPORT__'/>
-		<set name='STDCPP_INCLUDE' value='$(EPOCINCLUDE)/stdapis'/>
-		<set name='STDCPP_WCHAR_DEF' value='__wchar_t_defined'/>
-		<set name='SYMLOOKUPUTIL' value='$(PERL) $(EPOCROOT)/epoc32/tools/sym_lkup_util.pl'/>
-		<set name='SYMLOOKUPARGS' value='--ignore_export_dir'/>
-		<set name='SYSTEMINCLUDE' value=''/>
-		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
-		<set name='TARGETPATH' value=''/>
-		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
-		<set name='USERINCLUDE' value=''/>
-		<set name='VARIANTPLATFORM' value='winscw'/>
-		<set name='PLATMACROS.WINDOWS' value='CW32 WINS WINSCW'/>
-		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
-	</var>
-
-	<var name="winscw_udeb" extends="winscw_base">
-		<set name='FULLVARIANTPATH' value='winscw/udeb'/>
-		<set name='VARIANTTYPE' value='udeb'/>
-
-		<append name='CDEFS' value='_DEBUG'/>
-		<append name='CFLAGS' value='-g -O0 -inline off'/>
-		<append name='LFLAGS' value='-g'/>
-	</var>
-
-	<var name="winscw_urel" extends="winscw_base">
-		<set name='FULLVARIANTPATH' value='winscw/urel'/>
-		<set name='VARIANTTYPE' value='urel'/>
-
-		<append name='CDEFS' value='NDEBUG'/>
-		<append name='CFLAGS' value='-O4,s'/>
-	</var>
-
-	<group name="winscw">
-		<varRef ref="winscw_urel"/>
-		<varRef ref="winscw_udeb"/>
-	</group>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- build configurations for Metrowerks Emulator compilers -->
+	<var name="winscw_base" extends="root">
+		<varRef ref="default.interfaces"/>
+		<varRef ref="default.locations"/>
+		<!-- picked up from the Environment -->
+		<env name='CHECKLIB' default='$(EPOCROOT)/epoc32/tools/checklib$(DOTEXE)' type='tool'/>
+		<env name='EFREEZE' default="$(PERL) $(EPOCROOT)/epoc32/tools/efreeze.pl" type='tool'/>
+		<env name='BMCONV' default="$(EPOCROOT)/epoc32/tools/bmconv$(DOTEXE)" type='tool'/>
+		<env name='MAKEDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/makedef.pl' type='path'/>
+		<env name='MWCC' default='mwccsym2$(DOTEXE)' type='tool' versionCommand='$(MWCC) -version' versionResult='Version 3.2.*'/>
+		<env name='MWLD' default='mwldsym2$(DOTEXE)' type='tool' versionCommand='$(MWLD) -version' versionResult='Version 3.2.*'/>
+		<env name='MWWINRC' default='mwwinrc$(DOTEXE)' type='tool' versionCommand='$(MWWINRC) -version' versionResult='Version 3.2.*'/>
+
+		<env name='PREPDEF' default='$(PERL) $(EPOCROOT)/epoc32/tools/prepdef.pl' type='path'/>
+		<env name='RCOMP' default='$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)' type='tool'/>
+		<env name='STRINGTABLE' default='$(PERL) $(EPOCROOT)/epoc32/tools/stringtable.pl' type='path'/>	
+		
+		<!-- link to bld.inf and mmp platform names -->
+		<set name='TRADITIONAL_PLATFORM' value='WINSCW'/>
+
+		<!-- interfaces -->
+		<set name="INTERFACE.ani" value="Emulator.ani"/>
+		<set name="INTERFACE.bitmap" value="Emulator.bitmap"/>
+		<set name="INTERFACE.exe" value="Emulator.exe"/>
+		<set name="INTERFACE.stdexe" value="Emulator.stdexe"/>
+		<set name="INTERFACE.dll" value="Emulator.dll"/>
+		<set name="INTERFACE.stddll" value="Emulator.stddll"/>
+		<set name="INTERFACE.exexp" value="Emulator.exexp"/>
+		<set name="INTERFACE.fsy" value="Emulator.fsy"/>
+		<set name="INTERFACE.implib" value="Emulator.implib"/>
+		<set name="INTERFACE.kdll" value="Emulator.kdll"/>
+		<set name="INTERFACE.kext" value="Emulator.kext"/>
+		<set name="INTERFACE.klib" value="Emulator.klib"/>
+		<set name="INTERFACE.ldd" value="Emulator.ldd"/>
+		<set name="INTERFACE.lib" value="Emulator.lib"/>
+		<set name="INTERFACE.stdlib" value="Emulator.stdlib"/>
+		<set name="INTERFACE.none" value="Emulator.none"/>
+		<set name="INTERFACE.pdd" value="Emulator.pdd"/>
+		<set name="INTERFACE.pdl" value="Emulator.pdl"/>
+		<set name="INTERFACE.plugin" value="Emulator.plugin"/>
+		<set name="INTERFACE.resource" value="Emulator.resource"/>
+		<set name="INTERFACE.textnotifier2" value="Emulator.textnotifier2"/>
+		<set name="INTERFACE.var" value="Emulator.var"/>
+		<set name='CC' value='$(MWCC)'/>
+		<set name='CDEFS' value='__SYMBIAN32__ __CW32__ __WINS__ __WINSCW__ __SUPPORT_CPP_EXCEPTIONS__ _UNICODE $(MMPDEFS)'/>
+		<set name='CFLAGS' value='-c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source'/>
+		<set name='CW_DEFAULT_LIBS' value='gdi32.lib user32.lib kernel32.lib'/>
+		<set name='CW_RUNTIME_STATIC' value='msl_all_static_mse_symbian_d.lib'/>
+		<set name='CW_RUNTIME_NONSTATIC' value='MSL_All_x86_Symbian_D.lib'/>
+		<set name='DEFAULT_NORMAL_NEWLIB' value='scppnwdl.lib'/>
+		<set name='DEFAULT_SYSTEM_NEWLIB' value='scppnwdl_kern.lib'/>
+		<set name='EXPORT_TYPE' value='dllexport'/>
+		<set name='LD' value='$(MWLD)'/>
+		<set name='LFLAGS' value='-msgstyle gcc -stdlib -subsystem windows'/>
+		<set name='LFLAGS_INFGEN' value='-S -show only,names,unmangled,verbose '/>
+		<set name='LFLAGS_SYMGEN' value='-S -show only,names,verbose '/>
+		<set name='LINKPATH' value='winscw/udeb'/>
+		<set name='LISTING_OPTION' value='-S'/>
+		<set name='MMPDEFS' value=''/>
+		<set name='EPOCSTACKSIZE' value=''/>
+		<set name='NMAKE' value='nmake'/>
+		<set name='NMAKEFLAGS' value='-nologo -x - '/>
+		<set name='OPT.ADDCOMMAND' value='-addcommand '/>
+		<set name='OPT.CHECKLIB.STDCPP' value='stdc++'/>
+		<set name='OPT.CHECKLIB.SYMCPP' value='symc++'/>
+		<set name='OPT.CHECKLIB.WIN32' value='--coff'/>
+		<set name='OPT.HEAPCOMMIT' value='-heapcommit='/>
+		<set name='OPT.DEFINE' value='-d '/>
+		<set name='OPT.DEFFILE' value='-f '/>
+		<set name='OPT.DEPEND' value='-gccdepends -MD '/>
+		<set name='OPT.EXPORT' value='-export '/>
+		<set name='OPT.HEAPRESERVE' value='-heapreserve='/>
+		<set name='OPT.IMAGEBASE' value='-imagebase '/>
+		<set name='OPT.IMPLIB' value='-implib '/>
+		<set name='OPT.IMPORTLIB' value='-importlib '/>
+		<set name='OPT.LIBFILE' value='-l'/>
+		<set name='OPT.LIBPATH' value='-l '/>
+		<set name='OPT.LISTING' value='-S -show source,unmangled,comments '/>
+		<set name='OPT.MENTRYPOINT' value='-m '/>
+		<set name='OPT.MAINENTRYPOINT' value='-main '/>
+		<set name='OPT.MAP' value='-map '/>
+		<set name='OPT.NOCOMPACTIMPORTLIB' value='-nocompactimportlib '/>
+		<set name='OPT.NOENTRY' value='-noentry '/>
+		<set name='OPT.NOIMPLIB' value='-noimplib '/>
+		<set name='OPT.NOSTDINC' value='-nostdinc '/>
+		<set name='OPT.OUT' value='-o '/>
+		<set name='OPT.PREINCLUDE' value='-include '/>
+		<set name='OPT.RUNTIME' value='-runtime '/>
+		<set name='OPT.SEARCH' value='-search'/>
+		<set name='OPT.SHARED' value='-shared '/>
+		<set name='OPT.SPLITINCLUDE' value='-i-'/>
+		<set name='OPT.STATICLIBRARY' value='-library '/>
+		<set name='OPT.STDINC' value='-stdinc '/>
+		<set name='OPT.STDLIB' value='-stdlib '/>
+		<set name='OPT.SYM' value='-sym '/>
+		<set name='OPT.SYSINCLUDE' value='-i '/>
+		<set name='OPT.USERINCLUDE' value='-i '/>
+		<set name='OPT.WCHAR' value='-wchar_t '/>
+		<set name='OPT.WARNINGS' value='-warnings '/>
+		<set name='OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
+		<set name='BLDINF_OUTPUTPATH' value='$(SBS_BUILD_DIR)'/>
+		<set name='RC' value='$(MWWINRC)'/>
+		<set name='RELEASEPATH' value='$(EPOCROOT)/epoc32/release'/>
+		<set name='SBSV1MAKE' value='$(EPOCROOT)/epoc32/tools/make$(DOTEXE)'/>
+		<set name='STDCPP_DEF' value='__SYMBIAN_STDCPP_SUPPORT__'/>
+		<set name='STDCPP_INCLUDE' value='$(EPOCINCLUDE)/stdapis'/>
+		<set name='STDCPP_WCHAR_DEF' value='__wchar_t_defined'/>
+		<set name='SYMLOOKUPUTIL' value='$(PERL) $(EPOCROOT)/epoc32/tools/sym_lkup_util.pl'/>
+		<set name='SYMLOOKUPARGS' value='--ignore_export_dir'/>
+		<set name='SYSTEMINCLUDE' value=''/>
+		<set name='TARGET' value='TARGET_WAS_NOT_SET_PROPERLY'/>
+		<set name='TARGETPATH' value=''/>
+		<set name='TARGETTYPE' value='TARGETTYPE_WAS_NOT_SET_PROPERLY'/>
+		<set name='USERINCLUDE' value=''/>
+		<set name='VARIANTPLATFORM' value='winscw'/>
+		<set name='PLATMACROS.WINDOWS' value='CW32 WINS WINSCW'/>
+		<set name='PLATMACROS.LINUX' value='$(PLATMACROS.WINDOWS)'/>
+	</var>
+
+	<var name="winscw_udeb" extends="winscw_base">
+		<set name='FULLVARIANTPATH' value='winscw/udeb'/>
+		<set name='VARIANTTYPE' value='udeb'/>
+
+		<append name='CDEFS' value='_DEBUG'/>
+		<append name='CFLAGS' value='-g -O0 -inline off'/>
+		<append name='LFLAGS' value='-g'/>
+	</var>
+
+	<var name="winscw_urel" extends="winscw_base">
+		<set name='FULLVARIANTPATH' value='winscw/urel'/>
+		<set name='VARIANTTYPE' value='urel'/>
+
+		<append name='CDEFS' value='NDEBUG'/>
+		<append name='CFLAGS' value='-O4,s'/>
+	</var>
+
+	<group name="winscw">
+		<varRef ref="winscw_urel"/>
+		<varRef ref="winscw_udeb"/>
+	</group>
+</build>
--- a/sbsv2/raptor/lib/flm/analysis.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/analysis.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,199 +1,199 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- analysis interfaces -->
-
-	<interface name="analysis.flm" extends="base.flm" abstract="true">
-
-		<!-- analysis specific -->
-
-		<param name='EXPORTHEADERS' default=''/>
-		<param name='RESOURCEFILES' default=''/>
-
-		<!-- generic -->
-
-		<param name='NMAKE'/>
-		<param name='NMAKEFLAGS'/>
-		<param name='OUTPUTPATH'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='RELEASEPATH'/>
-		<param name='REQUESTEDTARGETEXT' default=''/>
-		<param name='SBSV1MAKE'/>
-		<param name='VARIANTTYPE'/>
-		<param name='FULLVARIANTPATH'/>
-		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
-	</interface>
-
-	<interface name="analysis.mmp" extends="analysis.flm" abstract="true">
-		<param name='CAPABILITY' default='none'/>
-		<param name='DEFFILE' default=''/>
-		<param name='FIRSTLIB' default=''/>
-		<param name='KERNEL_MODE_DEF'/>
-		<param name='KERNEL_MODE_INCLUDES'/>			
-		<param name='LIBRARY' default=''/>
-		<param name='LINKAS' default=''/>
-		<param name='MMPDEFS' default=''/>
-		<param name='NOSTDCPP' default=''/>
-		<param name='OPEN_ENVIRONMENT' default=''/>
-		<param name='SOURCE' default=''/>
-		<param name='STATICLIBRARY' default=''/>
-		<param name='STDCPP' default=''/>
-		<param name='STDCPP_DEF'/>
-		<param name='STDCPP_INCLUDE'/>
-		<param name='SYSTEMINCLUDE' default=''/>
-		<param name='TARGET'/>
-		<param name='TARGETPATH' default=''/>
-		<param name='TARGETTYPE'/>
-		<param name='TARGET_DEFS' default=''/>
-		<param name='TARGET_INCLUDES' default=''/>
-		<param name='UID2' default='00000000'/>
-		<param name='UID2_ZERO_OVERRIDE' default=''/>
-		<param name='UID3' default='00000000'/>
-		<param name='USERINCLUDE' default=''/>
-		<param name='VERSION' default='1.0'/>
-		<param name='OPTION_GCCXML' default=''/>
-		<param name='VERSIONHEX' default='00010000'/>
-	</interface>
-
-	<interface name="analysis.all" extends="analysis.mmp" abstract="true" flm="gccxml.flm">
-		<param name='CC'/>
-		<param name='CDEFS'/>
-		<param name='CFLAGS'/>
-		<param name='CPPFLAGS'/>
-		<param name='CREATERFIFILE'/>
-		<param name='GNUCPP'/>
-		<param name='GNUSED'/>
-		<param name='GNUAWK'/>
-		<param name='OPT.DEFINE'/>
-		<param name='OPT.OUT'/>
-		<param name='OPT.PREINCLUDE'/>
-		<param name='OPT.SPLITINCLUDE'/>
-		<param name='OPT.SYSINCLUDE'/>
-		<param name='OPT.USERINCLUDE'/>
-		<param name='ZIP'/>
-	</interface>
-
-	<!-- basic types -->
-
-	<interface name="analysis.exe" extends="analysis.all">
-		<param name='FIRSTLIB' default="eexe.lib"/>
-		<param name='UID1' default="1000007a"/>
-	</interface>
-
-	<interface name="analysis.dll" extends="analysis.all">
-		<param name='FIRSTLIB' default="edll.lib"/>
-		<param name='UID1' default="10000079"/>
-	</interface>
-
-	<interface name="analysis.lib" extends="analysis.all">
-		<param name='FIRSTLIB' default="elib.lib"/>
-		<param name='UID1' default="00000000"/>
-	</interface>
-
-	<!-- variations on the basic types -->
-
-	<interface name="analysis.ani" extends="analysis.dll">
-		<param name='UID2' default="10003b22"/>
-	</interface>
-
-	<interface name="analysis.exexp" extends="analysis.exe">
-	</interface>
-
-	<interface name="analysis.fsy" extends="analysis.dll">
-		<param name='UID2_ZERO_OVERRIDE' default="100039df"/>
-	</interface>
-
-	<interface name="analysis.kdll" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>		
-		<param name='FIRSTLIB' default="ekll.lib"/>
-	</interface>
-
-	<interface name="analysis.kext" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
-		<param name='FIRSTLIB' default="eext.lib"/>
-	</interface>
-
-	<interface name="analysis.klib" extends="analysis.lib">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-	</interface>
-
-	<interface name="analysis.ldd" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
-		<param name='FIRSTLIB' default="edev.lib"/>
-		<param name='UID2_ZERO_OVERRIDE' default="100000af"/>
-	</interface>
-
-	<interface name="analysis.pdd" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
-		<param name='FIRSTLIB' default="edev.lib"/>
-		<param name='UID2_ZERO_OVERRIDE' default="100039d0"/>
-	</interface>
-
-	<interface name="analysis.pdl" extends="analysis.dll">
-		<param name='UID2' default="10003b1c"/>
-	</interface>
-
-	<interface name="analysis.plugin" extends="analysis.dll">
-		<param name='UID2' default="10009D8D"/>
-	</interface>
-
-	<interface name="analysis.resource" extends="base.resource" flm="gccxmlresource.flm">
-		<param name='CREATERFIFILE'/>
-		<param name='OUTPUTPATHOFFSET' default=''/>
-		<param name='MAIN_OUTPUTPATH' default=''/>
-		<param name='MAIN_TARGET_lower' default=''/>
-		<param name='MAIN_REQUESTEDTARGETEXT' default=''/>
-		<param name='RFIFILE' default=''/>
-	</interface>
-
-	<interface name="analysis.stddll" extends="analysis.dll">
-		<param name='OPEN_ENVIRONMENT' default='1'/>
-		<param name='UID2' default="20004c45"/>
-	</interface>
-
-	<interface name="analysis.stdexe" extends="analysis.exe">
-		<param name='OPEN_ENVIRONMENT' default='1'/>
-		<param name='UID2' default="20004c45"/>
-	</interface>
-
-	<interface name="analysis.stdlib" extends="analysis.lib">
-		<param name='OPEN_ENVIRONMENT' default='1'/>
-	</interface>
-
-	<interface name="analysis.textnotifier2" extends="analysis.dll">
-		<param name='UID2' default="101fe38b"/>
-	</interface>
-
-	<interface name="analysis.var" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
-		<param name='FIRSTLIB' default="evar.lib"/>
-	</interface>
-	
-	<interface name="analysis.var2" extends="analysis.dll">
-		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
-		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
-		<param name='FIRSTLIB' default="evar.lib"/>
-	</interface>
-
-	<interface name="analysis.none" extends="analysis.mmp" flm="none.flm">
-	</interface>
-
-	<!-- TEMs are processed as if in an RVCT build -->
-
-	<interface name="analysis.extension" extends="base.extension" flm="template_ext.flm">
-		<param name='RVCTBIN'/>
-		<param name='RVCTLIB'/>
-		<param name='RVCTINC'/>
-	</interface>
-
-	<!-- types we don't much care about, but don't want any standard processing for -->
-
-	<interface name="analysis.implib" flm="null.flm">
-	</interface>
-
-</build>
-
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- analysis interfaces -->
+
+	<interface name="analysis.flm" extends="base.flm" abstract="true">
+
+		<!-- analysis specific -->
+
+		<param name='EXPORTHEADERS' default=''/>
+		<param name='RESOURCEFILES' default=''/>
+
+		<!-- generic -->
+
+		<param name='NMAKE'/>
+		<param name='NMAKEFLAGS'/>
+		<param name='OUTPUTPATH'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='RELEASEPATH'/>
+		<param name='REQUESTEDTARGETEXT' default=''/>
+		<param name='SBSV1MAKE'/>
+		<param name='VARIANTTYPE'/>
+		<param name='FULLVARIANTPATH'/>
+		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
+	</interface>
+
+	<interface name="analysis.mmp" extends="analysis.flm" abstract="true">
+		<param name='CAPABILITY' default='none'/>
+		<param name='DEFFILE' default=''/>
+		<param name='FIRSTLIB' default=''/>
+		<param name='KERNEL_MODE_DEF'/>
+		<param name='KERNEL_MODE_INCLUDES'/>			
+		<param name='LIBRARY' default=''/>
+		<param name='LINKAS' default=''/>
+		<param name='MMPDEFS' default=''/>
+		<param name='NOSTDCPP' default=''/>
+		<param name='OPEN_ENVIRONMENT' default=''/>
+		<param name='SOURCE' default=''/>
+		<param name='STATICLIBRARY' default=''/>
+		<param name='STDCPP' default=''/>
+		<param name='STDCPP_DEF'/>
+		<param name='STDCPP_INCLUDE'/>
+		<param name='SYSTEMINCLUDE' default=''/>
+		<param name='TARGET'/>
+		<param name='TARGETPATH' default=''/>
+		<param name='TARGETTYPE'/>
+		<param name='TARGET_DEFS' default=''/>
+		<param name='TARGET_INCLUDES' default=''/>
+		<param name='UID2' default='00000000'/>
+		<param name='UID2_ZERO_OVERRIDE' default=''/>
+		<param name='UID3' default='00000000'/>
+		<param name='USERINCLUDE' default=''/>
+		<param name='VERSION' default='1.0'/>
+		<param name='OPTION_GCCXML' default=''/>
+		<param name='VERSIONHEX' default='00010000'/>
+	</interface>
+
+	<interface name="analysis.all" extends="analysis.mmp" abstract="true" flm="gccxml.flm">
+		<param name='CC'/>
+		<param name='CDEFS'/>
+		<param name='CFLAGS'/>
+		<param name='CPPFLAGS'/>
+		<param name='CREATERFIFILE'/>
+		<param name='GNUCPP'/>
+		<param name='GNUSED'/>
+		<param name='GNUAWK'/>
+		<param name='OPT.DEFINE'/>
+		<param name='OPT.OUT'/>
+		<param name='OPT.PREINCLUDE'/>
+		<param name='OPT.SPLITINCLUDE'/>
+		<param name='OPT.SYSINCLUDE'/>
+		<param name='OPT.USERINCLUDE'/>
+		<param name='ZIP'/>
+	</interface>
+
+	<!-- basic types -->
+
+	<interface name="analysis.exe" extends="analysis.all">
+		<param name='FIRSTLIB' default="eexe.lib"/>
+		<param name='UID1' default="1000007a"/>
+	</interface>
+
+	<interface name="analysis.dll" extends="analysis.all">
+		<param name='FIRSTLIB' default="edll.lib"/>
+		<param name='UID1' default="10000079"/>
+	</interface>
+
+	<interface name="analysis.lib" extends="analysis.all">
+		<param name='FIRSTLIB' default="elib.lib"/>
+		<param name='UID1' default="00000000"/>
+	</interface>
+
+	<!-- variations on the basic types -->
+
+	<interface name="analysis.ani" extends="analysis.dll">
+		<param name='UID2' default="10003b22"/>
+	</interface>
+
+	<interface name="analysis.exexp" extends="analysis.exe">
+	</interface>
+
+	<interface name="analysis.fsy" extends="analysis.dll">
+		<param name='UID2_ZERO_OVERRIDE' default="100039df"/>
+	</interface>
+
+	<interface name="analysis.kdll" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>		
+		<param name='FIRSTLIB' default="ekll.lib"/>
+	</interface>
+
+	<interface name="analysis.kext" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
+		<param name='FIRSTLIB' default="eext.lib"/>
+	</interface>
+
+	<interface name="analysis.klib" extends="analysis.lib">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+	</interface>
+
+	<interface name="analysis.ldd" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
+		<param name='FIRSTLIB' default="edev.lib"/>
+		<param name='UID2_ZERO_OVERRIDE' default="100000af"/>
+	</interface>
+
+	<interface name="analysis.pdd" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
+		<param name='FIRSTLIB' default="edev.lib"/>
+		<param name='UID2_ZERO_OVERRIDE' default="100039d0"/>
+	</interface>
+
+	<interface name="analysis.pdl" extends="analysis.dll">
+		<param name='UID2' default="10003b1c"/>
+	</interface>
+
+	<interface name="analysis.plugin" extends="analysis.dll">
+		<param name='UID2' default="10009D8D"/>
+	</interface>
+
+	<interface name="analysis.resource" extends="base.resource" flm="gccxmlresource.flm">
+		<param name='CREATERFIFILE'/>
+		<param name='OUTPUTPATHOFFSET' default=''/>
+		<param name='MAIN_OUTPUTPATH' default=''/>
+		<param name='MAIN_TARGET_lower' default=''/>
+		<param name='MAIN_REQUESTEDTARGETEXT' default=''/>
+		<param name='RFIFILE' default=''/>
+	</interface>
+
+	<interface name="analysis.stddll" extends="analysis.dll">
+		<param name='OPEN_ENVIRONMENT' default='1'/>
+		<param name='UID2' default="20004c45"/>
+	</interface>
+
+	<interface name="analysis.stdexe" extends="analysis.exe">
+		<param name='OPEN_ENVIRONMENT' default='1'/>
+		<param name='UID2' default="20004c45"/>
+	</interface>
+
+	<interface name="analysis.stdlib" extends="analysis.lib">
+		<param name='OPEN_ENVIRONMENT' default='1'/>
+	</interface>
+
+	<interface name="analysis.textnotifier2" extends="analysis.dll">
+		<param name='UID2' default="101fe38b"/>
+	</interface>
+
+	<interface name="analysis.var" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
+		<param name='FIRSTLIB' default="evar.lib"/>
+	</interface>
+	
+	<interface name="analysis.var2" extends="analysis.dll">
+		<param name='TARGET_DEFS' default='$(KERNEL_MODE_DEF)'/>
+		<param name='TARGET_INCLUDES' default='$(KERNEL_MODE_INCLUDES)'/>	
+		<param name='FIRSTLIB' default="evar.lib"/>
+	</interface>
+
+	<interface name="analysis.none" extends="analysis.mmp" flm="none.flm">
+	</interface>
+
+	<!-- TEMs are processed as if in an RVCT build -->
+
+	<interface name="analysis.extension" extends="base.extension" flm="template_ext.flm">
+		<param name='RVCTBIN'/>
+		<param name='RVCTLIB'/>
+		<param name='RVCTINC'/>
+	</interface>
+
+	<!-- types we don't much care about, but don't want any standard processing for -->
+
+	<interface name="analysis.implib" flm="null.flm">
+	</interface>
+
+</build>
+
--- a/sbsv2/raptor/lib/flm/base.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/base.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,127 +1,127 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- 
-	Fundamental interfaces from which others (platform or nonplatform specific) 
-	may be derived 
-     -->
-
-	<interface name="base.null" flm="null.flm">
-		<!-- use this for "targets" which should be no-op -->
-	</interface>
-	
-	<interface name="base.flm" abstract="true">
-		<param name='COMPONENT_META' default=''/>  <!-- bld.inf -->
-		<param name='COMPONENT_NAME' default=''/>  <!-- MP4 Player -->
-		<param name='COMPONENT_LAYER' default=''/> <!-- Multimedia -->
-		<param name='PROJECT_META' default=''/>     <!-- my.mmp  -->
-		<param name='DATE' default=''/>
-		<param name='DUMPBCINFO' default=''/>
-		<param name='PLATFORM' default=''/>
-		<param name='GNUMAKE38'/>
-		<param name='GNUCP'/>
-		<param name='GNUCAT'/>
-		<param name='GNUMKDIR'/>
-		<param name='GNUMV'/>
-		<param name='GNURM'/>
-		<param name='GNULN'/>
-		<param name='GNURMDIR'/>
-		<param name='GNUCHMOD'/>
-		<param name='GNUTOUCH'/>
-		<param name='GNUFIND'/>
-		<param name='GNUGREP'/>
-		<param name='GNUSED'/>
-		<param name='GNUSORT'/>
-		<param name='SBS_JAVATC' default=''/>
-		<param name='ZIP'/>
-		<param name='UNZIP'/>
-		<param name='GNUMD5SUM'/>
-		<param name='SAVESPACE' default=''/> <!-- remove intermediate files ASAP -->
-		<param name='WHATLOG' default=''/>   <!-- emit formatted releasable info into the logs during the build -->
-		<param name='USE_PROFILER_FEEDBACK' default=''/> <!-- use the profiler feedback file for the builds -->
-		<param name='ARM_PROFILER_FILE' default=''/>
-	</interface>
-	<interface name="base.extension" extends="base.flm" flm="template_ext.flm">
-		<param name='TEMCOUNT'/>
-		<param name='TEMMAKE' default='$(GNUMAKE38)'/>
-		<param name='EPOCROOT'/>
-		<param name='TEMPLATE_EXTENSION_MAKEFILE'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='EPOCBLD'/>
-		<param name='TO_BLDINF'/>
-		<param name='TO_ROOT'/>
-		<param name='EXTENSION_ROOT'/>
-		<param name='O._MEMBERS' default=""/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='VARIANTTYPE'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='PLATFORM_PATH' default='$(VARIANTPLATFORM)'/>
-		<param name='CFG' default='$(VARIANTTYPE)'/>
-		<param name='CFG_PATH' default='$(VARIANTTYPE)'/>
-		<param name='NMAKE' default=''/>
-		<param name='NMAKEFLAGS' default=''/>
-		<param name='SBSV1MAKE' default=''/>
-		<paramgroup pattern='^O\.[^ \t]+$' default=""/>
-	</interface>
-	<interface name="base.stringtable" extends="base.flm" flm="stringtable.flm">
-		<param name='EPOCROOT'/>
-		<param name='SOURCE'/>
-		<param name='EXPORTPATH'/>
-		<param name='HEADERONLY' default=''/>
-		<param name='OUTPUTPATH'/>
-		<param name='STRINGTABLE'/>
-		<param name='TARGET'/>
-	</interface>
-	<interface name="base.bitmap" extends="base.flm" flm="bitmap.flm">
-		<param name='BINCOPYDIRS' default=''/>
-		<param name='BMCONV'/>
-		<param name='EPOCROOT'/>
-		<param name='HEADER' default=''/>
-		<param name='OUTPUTPATH'/>
-		<param name='SOURCE'/>
-		<param name='BMTARGET'/>
-		<param name='TARGETPATH' default=''/>
-	</interface>
-	<interface name="base.resource" extends="base.flm" flm="resource.flm">
-		<param name='BINCOPYDIRS' default=''/>
-		<param name='MMPDEFS' default=''/>
-		<param name='GNUCPP'/>
-		<param name='GNUSED'/>
-		<param name='EPOCROOT'/>
-		<param name='HEADER' default=''/>
-		<param name='HEADERONLY' default=''/>
-		<param name='LANGUAGES' default='sc'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='RCOMP'/>
-		<param name='OUTPUTPATH'/>
-		<param name='RSGDEPENDS' default=''/>
-		<param name='SOURCE'/>
-		<param name='SYSTEMINCLUDE'/>
-		<param name='USERINCLUDE'/>
-		<param name='TARGET'/>
-		<param name='TARGET_lower'/>
-		<param name='TARGETPATH' default=''/>
-		<param name='UID1' default="1000007a"/>
-		<param name='UID2' default='00000000'/>
-		<param name='UID3' default='00000000'/>
-	</interface>
-	<interface name="base.export" extends="base.null">
-		<!-- exports are done in Python -->
-	</interface>
-	<interface name="base.ext_makefile" extends="base.flm" flm="gnumakefile.flm">
-		<param name='CFG' default='$(VARIANTTYPE)'/>
-		<param name='EPOCROOT'/>
-		<param name='EXTENSION_ROOT'/>
-		<param name='DIRECTORY'/>
-		<param name='EXTMAKEFILENAME'/>
-		<param name='EPOCBLD'/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='TO_ROOT'/>
-		<param name='TO_BLDINF'/>
-		<param name='USENMAKE' default=''/>
-		<param name='NMAKE' default=''/>
-		<param name='NMAKEFLAGS' default=''/>
-		<param name='SBSV1MAKE' default=''/>
-	</interface>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- 
+	Fundamental interfaces from which others (platform or nonplatform specific) 
+	may be derived 
+     -->
+
+	<interface name="base.null" flm="null.flm">
+		<!-- use this for "targets" which should be no-op -->
+	</interface>
+	
+	<interface name="base.flm" abstract="true">
+		<param name='COMPONENT_META' default=''/>  <!-- bld.inf -->
+		<param name='COMPONENT_NAME' default=''/>  <!-- MP4 Player -->
+		<param name='COMPONENT_LAYER' default=''/> <!-- Multimedia -->
+		<param name='PROJECT_META' default=''/>     <!-- my.mmp  -->
+		<param name='DATE' default=''/>
+		<param name='DUMPBCINFO' default=''/>
+		<param name='PLATFORM' default=''/>
+		<param name='GNUMAKE38'/>
+		<param name='GNUCP'/>
+		<param name='GNUCAT'/>
+		<param name='GNUMKDIR'/>
+		<param name='GNUMV'/>
+		<param name='GNURM'/>
+		<param name='GNULN'/>
+		<param name='GNURMDIR'/>
+		<param name='GNUCHMOD'/>
+		<param name='GNUTOUCH'/>
+		<param name='GNUFIND'/>
+		<param name='GNUGREP'/>
+		<param name='GNUSED'/>
+		<param name='GNUSORT'/>
+		<param name='SBS_JAVATC' default=''/>
+		<param name='ZIP'/>
+		<param name='UNZIP'/>
+		<param name='GNUMD5SUM'/>
+		<param name='SAVESPACE' default=''/> <!-- remove intermediate files ASAP -->
+		<param name='WHATLOG' default=''/>   <!-- emit formatted releasable info into the logs during the build -->
+		<param name='USE_PROFILER_FEEDBACK' default=''/> <!-- use the profiler feedback file for the builds -->
+		<param name='ARM_PROFILER_FILE' default=''/>
+	</interface>
+	<interface name="base.extension" extends="base.flm" flm="template_ext.flm">
+		<param name='TEMCOUNT'/>
+		<param name='TEMMAKE' default='$(GNUMAKE38)'/>
+		<param name='EPOCROOT'/>
+		<param name='TEMPLATE_EXTENSION_MAKEFILE'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='EPOCBLD'/>
+		<param name='TO_BLDINF'/>
+		<param name='TO_ROOT'/>
+		<param name='EXTENSION_ROOT'/>
+		<param name='O._MEMBERS' default=""/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='VARIANTTYPE'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='PLATFORM_PATH' default='$(VARIANTPLATFORM)'/>
+		<param name='CFG' default='$(VARIANTTYPE)'/>
+		<param name='CFG_PATH' default='$(VARIANTTYPE)'/>
+		<param name='NMAKE' default=''/>
+		<param name='NMAKEFLAGS' default=''/>
+		<param name='SBSV1MAKE' default=''/>
+		<paramgroup pattern='^O\.[^ \t]+$' default=""/>
+	</interface>
+	<interface name="base.stringtable" extends="base.flm" flm="stringtable.flm">
+		<param name='EPOCROOT'/>
+		<param name='SOURCE'/>
+		<param name='EXPORTPATH'/>
+		<param name='HEADERONLY' default=''/>
+		<param name='OUTPUTPATH'/>
+		<param name='STRINGTABLE'/>
+		<param name='TARGET'/>
+	</interface>
+	<interface name="base.bitmap" extends="base.flm" flm="bitmap.flm">
+		<param name='BINCOPYDIRS' default=''/>
+		<param name='BMCONV'/>
+		<param name='EPOCROOT'/>
+		<param name='HEADER' default=''/>
+		<param name='OUTPUTPATH'/>
+		<param name='SOURCE'/>
+		<param name='BMTARGET'/>
+		<param name='TARGETPATH' default=''/>
+	</interface>
+	<interface name="base.resource" extends="base.flm" flm="resource.flm">
+		<param name='BINCOPYDIRS' default=''/>
+		<param name='MMPDEFS' default=''/>
+		<param name='GNUCPP'/>
+		<param name='GNUSED'/>
+		<param name='EPOCROOT'/>
+		<param name='HEADER' default=''/>
+		<param name='HEADERONLY' default=''/>
+		<param name='LANGUAGES' default='sc'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='RCOMP'/>
+		<param name='OUTPUTPATH'/>
+		<param name='RSGDEPENDS' default=''/>
+		<param name='SOURCE'/>
+		<param name='SYSTEMINCLUDE'/>
+		<param name='USERINCLUDE'/>
+		<param name='TARGET'/>
+		<param name='TARGET_lower'/>
+		<param name='TARGETPATH' default=''/>
+		<param name='UID1' default="1000007a"/>
+		<param name='UID2' default='00000000'/>
+		<param name='UID3' default='00000000'/>
+	</interface>
+	<interface name="base.export" extends="base.null">
+		<!-- exports are done in Python -->
+	</interface>
+	<interface name="base.ext_makefile" extends="base.flm" flm="gnumakefile.flm">
+		<param name='CFG' default='$(VARIANTTYPE)'/>
+		<param name='EPOCROOT'/>
+		<param name='EXTENSION_ROOT'/>
+		<param name='DIRECTORY'/>
+		<param name='EXTMAKEFILENAME'/>
+		<param name='EPOCBLD'/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='TO_ROOT'/>
+		<param name='TO_BLDINF'/>
+		<param name='USENMAKE' default=''/>
+		<param name='NMAKE' default=''/>
+		<param name='NMAKEFLAGS' default=''/>
+		<param name='SBSV1MAKE' default=''/>
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/bitmap.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/bitmap.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,182 +1,182 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Header file exporting Function Like Makefile (FLM)
-# The file destinations  relative to EPOCROOT
-# 
-#
-
-## Parameters that are expected:
-# BMCONV
-# EPOCROOT
-# HEADER
-# OUTPUTPATH
-# SOURCE
-# BMTARGET
-# TARGETPATH
-# BINCOPYDIRS
-
-ifneq ($(TARGETPATH),)
-DATAPATH:=$(subst //,/,$(EPOCROOT)/epoc32/data/z/$(TARGETPATH))
-else
-DATAPATH:=$(subst //,/,$(EPOCROOT)/epoc32/data)
-endif
-CREATABLEPATHS:=$(DATAPATH) $(OUTPUTPATH)
-
-BITMAPFILE:=$(subst //,/,$(DATAPATH)/$(BMTARGET))
-
-# additional binary resource copies performed based on BINCOPYDIRS
-MBMCOPYDIRS:=
-MBMCOPYFILES:=
-ifneq ($(BINCOPYDIRS),)
-  MBMCOPYDIRS:=$(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS)))
-  CREATABLEPATHS:=$(CREATABLEPATHS) $(MBMCOPYDIRS)
-  MBMCOPYFILES:=$(subst //,/,$(patsubst %, %/$(notdir $(BITMAPFILE)),$(MBMCOPYDIRS)))
-endif
-
-
-ifneq ($(HEADER),)
-BITMAPHEADER:=$(subst //,/,$(EPOCROOT)/epoc32/include/$(basename $(BMTARGET)).mbg)
-else
-BITMAPHEADER:=
-endif
-
-
-# SOURCE is something like "DEPTH=2 FILE=/var/local/fred.bmp"
-# Extract the file parts for the dependencies.
-# Generate -2/var/local/fred.bmp for the command-line argument.
-SOURCEDEPS:=$(subst //,/,$(subst FILE=,,$(filter FILE=%,$(SOURCE))))
-SOURCEARGS:=$(subst //,/,$(subst DEPTH=,-,$(subst $(CHAR_SPACE)FILE=,,$(SOURCE))))
-
-BMCONVCMDFILE:=$(OUTPUTPATH)/$(BMTARGET)_bmconvcommands
-RELEASEABLES:=$(BITMAPHEADER) $(BITMAPFILE)
-CLEANTARGETS:=$(BITMAPHEADER) $(BITMAPFILE) $(BMCONVCMDFILE)
-
-# The groupbmpin10 macro allows us to construct a command file, 10 
-# bitmap objects at a time to avoid limits on argument lengths and 
-# sizes on Windows.
-define groupbmpin10
-	$(if $1,$(shell echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >>$(BMCONVCMDFILE)),)
-	$(if $1,$(call groupbmpin10,$(wordlist 11,$(words $1),$1)))
-endef
-
-GUARD:=$(call sanitise,TARGET_$(BITMAPFILE))
-define generatebitmap
-$(GUARD):=1
-
-BITMAP:: $(RELEASEABLES)
-
-ifneq ($(BITMAPHEADER),)
-$(BITMAPHEADER): $(BITMAPFILE)
-endif
-
-# Create commandfile during parse so that the log is not littered with 
-# these commands in parallel builds.
-$(info <bmconvcmdfile>)
-$(info $(BMCONVCMDFILE))
-$(shell $(GNUMKDIR) -p "$(dir $(BMCONVCMDFILE))")
-$(if $(BITMAPHEADER),$(shell echo -e "-h$(BITMAPHEADER)\n$(BITMAPFILE)" >$(BMCONVCMDFILE)),$(shell echo "$(BITMAPFILE)" >$(BMCONVCMDFILE)) )
-$(call groupbmpin10, $(SOURCEARGS))
-$(info </bmconvcmdfile>)
-
-$(BITMAPFILE): $(SOURCEDEPS) $(BMCONV) 
-	$(call startrule,bitmapcompile,FORCESUCCESS) \
-	$(BMCONV) $(BMCONVCMDFILE) \
-	$(call endrule,bitmapcompile)
-
-endef
-
-
-# Some builds require further copies of the generated mbm binaries
-define copybitmap
-
-BITMAP:: $(MBMCOPYFILES)
-
-$(MBMCOPYFILES): $(BITMAPFILE) 
-	$(call startrule,bitmapcopy,FORCESUCCESS) \
-	$(GNUCP) $$< $$@ \
-	$(call endrule,bitmapcopy)
-
-CLEANTARGETS:=$(CLEANTARGETS) $(MBMCOPYFILES)
-endef
-
-
-ifeq ($($(GUARD)),)
-$(eval $(call generatebitmap))
-endif
-
-ifneq ($(MBMCOPYFILES),)
-$(eval $(call copybitmap))
-endif
-
-################################### localisation #########################################
-## copy .bmp files to localisation
-
-# $(BMPFILES) is a list of bmp files in src
-BMPFILES:=$(subst FILE=,,$(filter FILE=%,$(SOURCE)))
-BMBASENAME:=$(call lowercase,$(basename $(BMTARGET)))
-BMPCOPYFILES:=
-BMPCOPYDIR:=$(EPOCROOT)/epoc32/localisation/$(BMBASENAME)/mbm
-$(call makepath,$(BMPCOPYDIR))
-
-define copyBMP
-# $(1) is the source .bmp file
-# $(2) is the (lower cased) copy in localisation 
-
-ifneq ($(BINCOPYDIRS),)
-BITMAP:: $(2)
-
-$(2): $(1)
-	$(call startrule,bmpfilecopy,FORCESUCCESS) \
-	$(GNUCP) $(1) $(2) && $(GNUCHMOD) +rw $(2) \
-	$(call endrule,bmpfilecopy)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(2)
-endif
-
-BMPCOPYFILES:=$$(BMPCOPYFILES) $(2)
-endef
-
-$(foreach BMP,$(BMPFILES),$(eval $(call copyBMP,$(BMP),$(BMPCOPYDIR)/$(call lowercase,$(notdir $(BMP))))))
-
-## create and edit info files for bitmap files in localisation/group
-INFOFILE:=$(EPOCROOT)/epoc32/localisation/group/$(BMBASENAME).info
-DEPTH:=$(subst DEPTH=,,$(filter DEPTH=%,$(SOURCE)))
-BMP:=$(notdir $(BMPFILES))
-DEPTHBMP:=$(subst _,\,$(join $(patsubst %,/%,$(DEPTH)),$(patsubst %,_%,$(BMP))))
-
-define bmpInfo
-
-BITMAP::$(INFOFILE)
-
-$(INFOFILE)::
-	@if [ ! -d $(EPOCROOT)/epoc32/localisation/group ]; then $(GNUMKDIR) -p $(EPOCROOT)/epoc32/localisation/group; fi
-	@if [ ! -f $$@ ]; then echo "DATADIR: /$(BMBASENAME)" > $$@ ; fi
-	@echo -e "\n/z$(TARGETPATH)/$(BMTARGET) : $(DEPTHBMP)" >> $$@
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(INFOFILE)
-endef
-
-$(eval $(call bmpInfo))
-
-# end of localisation #########################################################
-
-## Clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS) ,$(CREATABLEPATHS)))
-$(call makepath,$(CREATABLEPATHS))
-$(call makepathfor,$(BITMAPHEADER))
-
-# for the abld -what target
-BMPRELEASEABLES:=$(RELEASEABLES) $(MBMCOPYFILES) $(BMPCOPYFILES) $(INFOFILE)
-$(eval $(call whatmacro,$(BMPRELEASEABLES),WHATBITMAP))
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Header file exporting Function Like Makefile (FLM)
+# The file destinations  relative to EPOCROOT
+# 
+#
+
+## Parameters that are expected:
+# BMCONV
+# EPOCROOT
+# HEADER
+# OUTPUTPATH
+# SOURCE
+# BMTARGET
+# TARGETPATH
+# BINCOPYDIRS
+
+ifneq ($(TARGETPATH),)
+DATAPATH:=$(subst //,/,$(EPOCROOT)/epoc32/data/z/$(TARGETPATH))
+else
+DATAPATH:=$(subst //,/,$(EPOCROOT)/epoc32/data)
+endif
+CREATABLEPATHS:=$(DATAPATH) $(OUTPUTPATH)
+
+BITMAPFILE:=$(subst //,/,$(DATAPATH)/$(BMTARGET))
+
+# additional binary resource copies performed based on BINCOPYDIRS
+MBMCOPYDIRS:=
+MBMCOPYFILES:=
+ifneq ($(BINCOPYDIRS),)
+  MBMCOPYDIRS:=$(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS)))
+  CREATABLEPATHS:=$(CREATABLEPATHS) $(MBMCOPYDIRS)
+  MBMCOPYFILES:=$(subst //,/,$(patsubst %, %/$(notdir $(BITMAPFILE)),$(MBMCOPYDIRS)))
+endif
+
+
+ifneq ($(HEADER),)
+BITMAPHEADER:=$(subst //,/,$(EPOCROOT)/epoc32/include/$(basename $(BMTARGET)).mbg)
+else
+BITMAPHEADER:=
+endif
+
+
+# SOURCE is something like "DEPTH=2 FILE=/var/local/fred.bmp"
+# Extract the file parts for the dependencies.
+# Generate -2/var/local/fred.bmp for the command-line argument.
+SOURCEDEPS:=$(subst //,/,$(subst FILE=,,$(filter FILE=%,$(SOURCE))))
+SOURCEARGS:=$(subst //,/,$(subst DEPTH=,-,$(subst $(CHAR_SPACE)FILE=,,$(SOURCE))))
+
+BMCONVCMDFILE:=$(OUTPUTPATH)/$(BMTARGET)_bmconvcommands
+RELEASEABLES:=$(BITMAPHEADER) $(BITMAPFILE)
+CLEANTARGETS:=$(BITMAPHEADER) $(BITMAPFILE) $(BMCONVCMDFILE)
+
+# The groupbmpin10 macro allows us to construct a command file, 10 
+# bitmap objects at a time to avoid limits on argument lengths and 
+# sizes on Windows.
+define groupbmpin10
+	$(if $1,$(shell echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >>$(BMCONVCMDFILE)),)
+	$(if $1,$(call groupbmpin10,$(wordlist 11,$(words $1),$1)))
+endef
+
+GUARD:=$(call sanitise,TARGET_$(BITMAPFILE))
+define generatebitmap
+$(GUARD):=1
+
+BITMAP:: $(RELEASEABLES)
+
+ifneq ($(BITMAPHEADER),)
+$(BITMAPHEADER): $(BITMAPFILE)
+endif
+
+# Create commandfile during parse so that the log is not littered with 
+# these commands in parallel builds.
+$(info <bmconvcmdfile>)
+$(info $(BMCONVCMDFILE))
+$(shell $(GNUMKDIR) -p "$(dir $(BMCONVCMDFILE))")
+$(if $(BITMAPHEADER),$(shell echo -e "-h$(BITMAPHEADER)\n$(BITMAPFILE)" >$(BMCONVCMDFILE)),$(shell echo "$(BITMAPFILE)" >$(BMCONVCMDFILE)) )
+$(call groupbmpin10, $(SOURCEARGS))
+$(info </bmconvcmdfile>)
+
+$(BITMAPFILE): $(SOURCEDEPS) $(BMCONV) 
+	$(call startrule,bitmapcompile,FORCESUCCESS) \
+	$(BMCONV) $(BMCONVCMDFILE) \
+	$(call endrule,bitmapcompile)
+
+endef
+
+
+# Some builds require further copies of the generated mbm binaries
+define copybitmap
+
+BITMAP:: $(MBMCOPYFILES)
+
+$(MBMCOPYFILES): $(BITMAPFILE) 
+	$(call startrule,bitmapcopy,FORCESUCCESS) \
+	$(GNUCP) $$< $$@ \
+	$(call endrule,bitmapcopy)
+
+CLEANTARGETS:=$(CLEANTARGETS) $(MBMCOPYFILES)
+endef
+
+
+ifeq ($($(GUARD)),)
+$(eval $(call generatebitmap))
+endif
+
+ifneq ($(MBMCOPYFILES),)
+$(eval $(call copybitmap))
+endif
+
+################################### localisation #########################################
+## copy .bmp files to localisation
+
+# $(BMPFILES) is a list of bmp files in src
+BMPFILES:=$(subst FILE=,,$(filter FILE=%,$(SOURCE)))
+BMBASENAME:=$(call lowercase,$(basename $(BMTARGET)))
+BMPCOPYFILES:=
+BMPCOPYDIR:=$(EPOCROOT)/epoc32/localisation/$(BMBASENAME)/mbm
+$(call makepath,$(BMPCOPYDIR))
+
+define copyBMP
+# $(1) is the source .bmp file
+# $(2) is the (lower cased) copy in localisation 
+
+ifneq ($(BINCOPYDIRS),)
+BITMAP:: $(2)
+
+$(2): $(1)
+	$(call startrule,bmpfilecopy,FORCESUCCESS) \
+	$(GNUCP) $(1) $(2) && $(GNUCHMOD) +rw $(2) \
+	$(call endrule,bmpfilecopy)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(2)
+endif
+
+BMPCOPYFILES:=$$(BMPCOPYFILES) $(2)
+endef
+
+$(foreach BMP,$(BMPFILES),$(eval $(call copyBMP,$(BMP),$(BMPCOPYDIR)/$(call lowercase,$(notdir $(BMP))))))
+
+## create and edit info files for bitmap files in localisation/group
+INFOFILE:=$(EPOCROOT)/epoc32/localisation/group/$(BMBASENAME).info
+DEPTH:=$(subst DEPTH=,,$(filter DEPTH=%,$(SOURCE)))
+BMP:=$(notdir $(BMPFILES))
+DEPTHBMP:=$(subst _,\,$(join $(patsubst %,/%,$(DEPTH)),$(patsubst %,_%,$(BMP))))
+
+define bmpInfo
+
+BITMAP::$(INFOFILE)
+
+$(INFOFILE)::
+	@if [ ! -d $(EPOCROOT)/epoc32/localisation/group ]; then $(GNUMKDIR) -p $(EPOCROOT)/epoc32/localisation/group; fi
+	@if [ ! -f $$@ ]; then echo "DATADIR: /$(BMBASENAME)" > $$@ ; fi
+	@echo -e "\n/z$(TARGETPATH)/$(BMTARGET) : $(DEPTHBMP)" >> $$@
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(INFOFILE)
+endef
+
+$(eval $(call bmpInfo))
+
+# end of localisation #########################################################
+
+## Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS) ,$(CREATABLEPATHS)))
+$(call makepath,$(CREATABLEPATHS))
+$(call makepathfor,$(BITMAPHEADER))
+
+# for the abld -what target
+BMPRELEASEABLES:=$(RELEASEABLES) $(MBMCOPYFILES) $(BMPCOPYFILES) $(INFOFILE)
+$(eval $(call whatmacro,$(BMPRELEASEABLES),WHATBITMAP))
+
--- a/sbsv2/raptor/lib/flm/booleanlogic.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/booleanlogic.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,61 +1,61 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# operators for boolean logic, including a case 
-# sensitive equality operator
-#
-
-
-define not
-$(if $1,,1)
-endef
-
-define xor
-$(and $(or $1,$2),$(call not,$1,$2))
-endef
-
-define equal
-$(if $(1:$(2)=),,$(if $(2:$(1)=),,1))
-endef
-
-define equal_debug
-$(info equal $1 $2 )$(if $(1:$(2)=),,$(if $(2:$(1)=),,1))
-endef
-
-# $(call isoneof,fred, alice bob james fred joe)  # returns 1
-define isoneof
-$(if $2,$(or $(call equal,$1,$(word 1,$2)),$(call isoneof,$(1),$(wordlist 2,$(words $(2)),$(2)))),)
-endef
-
-define isoneof_debug
-$(info one:$1 LIST: $2 nextCAR: $(word 1,$2) nextCDR: $(wordlist 2,$(words $2),$2))$(if $2,$(or $(call equal,$1,$(word 1,$2)),$(call isoneof,$(1),$(wordlist 2,$(words $(2)),$(2)))),)
-endef
-
-#testboolean::
-#	@echo -e "(call equal,dll,dll)            :  $(call equal,dll,dll)"
-#	@echo -e "(call equal,,dll)               :  $(call equal,,dll)"
-#	@echo -e "(call equal,thingdllthing,dll)  :  $(call equal,thingdllthing,dll)"
-#	@echo -e "(call equal,dll,thingdllthing)  :  $(call equal,dll,thingdllthing)"
-#	@echo -e "(call equal,dll,)               :  $(call equal,dll,)"
-#	@echo -e "(call equal,,)                  :  $(call equal,,)"
-#	@echo -e "(call equal,dlldlldll,dll)      :  $(call equal,dlldlldll,dll)"
-#	@echo -e "(call equal,dll,dlldlldll)      :  $(call equal,dll,dlldlldll)"
-#	@echo ""
-#	@echo -e '(call isoneof,fred, nobby cheery fred detritus ) :  $(call isoneof,fred, nobby cheery fred detritus) '
-#	@echo -e '(call isoneof,nobby, cheery fred carrot angiur)  :  $(call isoneof,nobby, cheery fred carrot angiur) '
-#	@echo -e '(call isoneof,vimes,vetinari) :  $(call isoneof,vimes,vetinari) '
-#	@echo -e '(call isoneof,vetinari,) :  $(call isoneof,vetinari,) '
-#	@echo -e '(call isoneof,vetinari,vetinari) :  $(call isoneof,vetinari,vetinari) '
-
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# operators for boolean logic, including a case 
+# sensitive equality operator
+#
+
+
+define not
+$(if $1,,1)
+endef
+
+define xor
+$(and $(or $1,$2),$(call not,$1,$2))
+endef
+
+define equal
+$(if $(1:$(2)=),,$(if $(2:$(1)=),,1))
+endef
+
+define equal_debug
+$(info equal $1 $2 )$(if $(1:$(2)=),,$(if $(2:$(1)=),,1))
+endef
+
+# $(call isoneof,fred, alice bob james fred joe)  # returns 1
+define isoneof
+$(if $2,$(or $(call equal,$1,$(word 1,$2)),$(call isoneof,$(1),$(wordlist 2,$(words $(2)),$(2)))),)
+endef
+
+define isoneof_debug
+$(info one:$1 LIST: $2 nextCAR: $(word 1,$2) nextCDR: $(wordlist 2,$(words $2),$2))$(if $2,$(or $(call equal,$1,$(word 1,$2)),$(call isoneof,$(1),$(wordlist 2,$(words $(2)),$(2)))),)
+endef
+
+#testboolean::
+#	@echo -e "(call equal,dll,dll)            :  $(call equal,dll,dll)"
+#	@echo -e "(call equal,,dll)               :  $(call equal,,dll)"
+#	@echo -e "(call equal,thingdllthing,dll)  :  $(call equal,thingdllthing,dll)"
+#	@echo -e "(call equal,dll,thingdllthing)  :  $(call equal,dll,thingdllthing)"
+#	@echo -e "(call equal,dll,)               :  $(call equal,dll,)"
+#	@echo -e "(call equal,,)                  :  $(call equal,,)"
+#	@echo -e "(call equal,dlldlldll,dll)      :  $(call equal,dlldlldll,dll)"
+#	@echo -e "(call equal,dll,dlldlldll)      :  $(call equal,dll,dlldlldll)"
+#	@echo ""
+#	@echo -e '(call isoneof,fred, nobby cheery fred detritus ) :  $(call isoneof,fred, nobby cheery fred detritus) '
+#	@echo -e '(call isoneof,nobby, cheery fred carrot angiur)  :  $(call isoneof,nobby, cheery fred carrot angiur) '
+#	@echo -e '(call isoneof,vimes,vetinari) :  $(call isoneof,vimes,vetinari) '
+#	@echo -e '(call isoneof,vetinari,) :  $(call isoneof,vetinari,) '
+#	@echo -e '(call isoneof,vetinari,vetinari) :  $(call isoneof,vetinari,vetinari) '
+
+
--- a/sbsv2/raptor/lib/flm/build.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/build.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,75 +1,75 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-#
-
-# Parameters:
-# COMPONENT_PATHS
-# CONFIGS
-#
-
-CREATABLEPATHS:=
-CLEANTARGETS:=
-
-.PHONY:: PP_EXPORTS
-
-
-SBS := $(subst \,/,$(SBS_HOME)/bin/sbs)
-
-define doexports
-PP_EXPORTS::
-	$(call startrule,makefile_generation_exports) \
-	export TALON_DESCRAMBLE=0; \
-	$(SBS) --export-only $(component_list) $(config_list) -f- -m $(SBS_BUILD_DIR)/makefiles_export.mk $(cli_options)  --mo=DESCRAMBLE:=  --mo=TALON_DESCRAMBLE:=0 | $(GNUSED) 's#]I*]>#XXX#' \
-	$(call endrule,makefile_generation_exports)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(SBS_BUILD_DIR)/makefiles_export.mk
-endef
-
-# Generate makefiles for particular bldinf
-# $(1) = source target source target......
-define generate_makefiles
-
-$$(info XXX component_list=$(COMPONENT_PATHS) makefile=$(MAKEFILE_PATH))
-
-ifeq ($(NO_BUILD),1)
-ALL:: $(MAKEFILE_PATH)
-else
-include $(MAKEFILE_PATH)
-endif
-
-$(MAKEFILE_PATH): $(COMPONENT_PATHS) | PP_EXPORTS 
-	$(call startrule,makefile_generation) \
-	export TALON_DESCRAMBLE=0; \
-	$(SBS) --toolcheck=off -n $(CLI_OPTIONS) $(component_list) $(config_list) -m $$@ -f- --mo=DESCRAMBLE:= --mo=TALON_DESCRAMBLE:=0  | $(GNUSED) 's#\]\][>]#XXX#' && \
-	$(MAKE) -j 8 -f $$@.resource_deps \
-	$(call endrule,makefile_generation)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(MAKEFILE_PATH) 
-
-endef
-
-# Create config list for commands
-config_list:=$(addprefix -c ,$(CONFIGS))
-component_list:=$(addprefix -b ,$(COMPONENT_PATHS))
-$(info COMFIG_LIST: $(config_list))
-
-$(eval $(doexports))
-
-# Create the Makefiles
-$(eval $(call generate_makefiles))
-
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
-$(call makepath,$(CREATABLEPATHS))
-
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+# Parameters:
+# COMPONENT_PATHS
+# CONFIGS
+#
+
+CREATABLEPATHS:=
+CLEANTARGETS:=
+
+.PHONY:: PP_EXPORTS
+
+
+SBS := $(subst \,/,$(SBS_HOME)/bin/sbs)
+
+define doexports
+PP_EXPORTS::
+	$(call startrule,makefile_generation_exports) \
+	export TALON_DESCRAMBLE=0; \
+	$(SBS) --export-only $(component_list) $(config_list) -f- -m $(SBS_BUILD_DIR)/makefiles_export.mk $(cli_options)  --mo=DESCRAMBLE:=  --mo=TALON_DESCRAMBLE:=0 | $(GNUSED) 's#]I*]>#XXX#' \
+	$(call endrule,makefile_generation_exports)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(SBS_BUILD_DIR)/makefiles_export.mk
+endef
+
+# Generate makefiles for particular bldinf
+# $(1) = source target source target......
+define generate_makefiles
+
+$$(info XXX component_list=$(COMPONENT_PATHS) makefile=$(MAKEFILE_PATH))
+
+ifeq ($(NO_BUILD),1)
+ALL:: $(MAKEFILE_PATH)
+else
+include $(MAKEFILE_PATH)
+endif
+
+$(MAKEFILE_PATH): $(COMPONENT_PATHS) | PP_EXPORTS 
+	$(call startrule,makefile_generation) \
+	export TALON_DESCRAMBLE=0; \
+	$(SBS) --toolcheck=off -n $(CLI_OPTIONS) $(component_list) $(config_list) -m $$@ -f- --mo=DESCRAMBLE:= --mo=TALON_DESCRAMBLE:=0  | $(GNUSED) 's#\]\][>]#XXX#' && \
+	$(MAKE) -j 8 -f $$@.resource_deps \
+	$(call endrule,makefile_generation)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(MAKEFILE_PATH) 
+
+endef
+
+# Create config list for commands
+config_list:=$(addprefix -c ,$(CONFIGS))
+component_list:=$(addprefix -b ,$(COMPONENT_PATHS))
+$(info COMFIG_LIST: $(config_list))
+
+$(eval $(doexports))
+
+# Create the Makefiles
+$(eval $(call generate_makefiles))
+
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+$(call makepath,$(CREATABLEPATHS))
+
--- a/sbsv2/raptor/lib/flm/build.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/build.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-
-	<interface name="build.makefiles" extends="base.flm" flm='build.flm' >
-		<param name='SBS_BUILD_DIR' /> 
-		<param name='DATE' /> 
-		<param name='COMPONENT_PATHS' />
-		<param name='MAKEFILE_PATH' />
-		<param name='CONFIGS' default=''/>
-		<param name='CLI_OPTIONS' default=''/>
-		<param name='NO_BUILD' default='' />
-	</interface>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+
+	<interface name="build.makefiles" extends="base.flm" flm='build.flm' >
+		<param name='SBS_BUILD_DIR' /> 
+		<param name='DATE' /> 
+		<param name='COMPONENT_PATHS' />
+		<param name='MAKEFILE_PATH' />
+		<param name='CONFIGS' default=''/>
+		<param name='CLI_OPTIONS' default=''/>
+		<param name='NO_BUILD' default='' />
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/config.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/config.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- interfaces which do not correspond to target types:
-         they are added automatically to the build specification for a given
-         build configuration if listed in its INTERFACE.config variable -->
-
-	<interface name="Symbian.config.default" flm="config/default.flm">
-		<param name='EPOCROOT'/>
-		<param name='ELF2E32' default=''/>
-		<param name='WHATLOG' default=''/>
-	</interface>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- interfaces which do not correspond to target types:
+         they are added automatically to the build specification for a given
+         build configuration if listed in its INTERFACE.config variable -->
+
+	<interface name="Symbian.config.default" flm="config/default.flm">
+		<param name='EPOCROOT'/>
+		<param name='ELF2E32' default=''/>
+		<param name='WHATLOG' default=''/>
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/config/default.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/config/default.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,61 +1,61 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# config/default.flm
-# Default build-configuration-wide rules and dependencies.
-# 
-#
-
-# put things in here that depend on EPOCROOT and 
-# therefore cannot go in globals.mk
-
-# metaflm depends on variables set in the configuration
-include $(FLMHOME)/metaflm.mk
-
-# TEM dependencies
-EPOC32BUILD:=$(EPOCROOT)/epoc32/build
-
-.PHONY:: $(EPOC32BUILD)/TEM_MAKMAKE
-.PHONY:: $(EPOC32BUILD)/TEM_RESOURCE
-.PHONY:: $(EPOC32BUILD)/TEM_BLD
-.PHONY:: $(EPOC32BUILD)/TEM_FINAL
-
-$(EPOC32BUILD)/TEM_MAKMAKE:: EXPORT
-$(EPOC32BUILD)/TEM_RESOURCE:: $(EPOC32BUILD)/TEM_MAKMAKE
-$(EPOC32BUILD)/TEM_BLD:: $(EPOC32BUILD)/TEM_LIB
-$(EPOC32BUILD)/TEM_FINAL:: $(EPOC32BUILD)/TEM_BLD
-
-# Make engines with order only prerequisites should use them
-# other engines can use a simulation
-#
-ifneq ($(HAVE_ORDERONLY),)
-.PHONY:: $(EPOC32BUILD)/TEM_LIB
-
-$(EPOC32BUILD)/TEM_LIB:: $(EPOC32BUILD)/TEM_RESOURCE
-
-else
-# Set up some rules that will simulate order only behaviour on all
-# make engines:
-
-define predatedupdate
-	@touch --date='10 years ago' "$1"
-endef
-
-# This one is non-phony because it's the only one that 
-# anything actually depends upon in a purely incremental build.
-$(EPOC32BUILD)/TEM_LIB:: $(EPOC32BUILD)/TEM_RESOURCE
-	$(call predatedupdate,$@)
-endif
-
-# Optionally include user configuration if it exists.
--include $(FLMHOME)/user/default.flm
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# config/default.flm
+# Default build-configuration-wide rules and dependencies.
+# 
+#
+
+# put things in here that depend on EPOCROOT and 
+# therefore cannot go in globals.mk
+
+# metaflm depends on variables set in the configuration
+include $(FLMHOME)/metaflm.mk
+
+# TEM dependencies
+EPOC32BUILD:=$(EPOCROOT)/epoc32/build
+
+.PHONY:: $(EPOC32BUILD)/TEM_MAKMAKE
+.PHONY:: $(EPOC32BUILD)/TEM_RESOURCE
+.PHONY:: $(EPOC32BUILD)/TEM_BLD
+.PHONY:: $(EPOC32BUILD)/TEM_FINAL
+
+$(EPOC32BUILD)/TEM_MAKMAKE:: EXPORT
+$(EPOC32BUILD)/TEM_RESOURCE:: $(EPOC32BUILD)/TEM_MAKMAKE
+$(EPOC32BUILD)/TEM_BLD:: $(EPOC32BUILD)/TEM_LIB
+$(EPOC32BUILD)/TEM_FINAL:: $(EPOC32BUILD)/TEM_BLD
+
+# Make engines with order only prerequisites should use them
+# other engines can use a simulation
+#
+ifneq ($(HAVE_ORDERONLY),)
+.PHONY:: $(EPOC32BUILD)/TEM_LIB
+
+$(EPOC32BUILD)/TEM_LIB:: $(EPOC32BUILD)/TEM_RESOURCE
+
+else
+# Set up some rules that will simulate order only behaviour on all
+# make engines:
+
+define predatedupdate
+	@touch --date='10 years ago' "$1"
+endef
+
+# This one is non-phony because it's the only one that 
+# anything actually depends upon in a purely incremental build.
+$(EPOC32BUILD)/TEM_LIB:: $(EPOC32BUILD)/TEM_RESOURCE
+	$(call predatedupdate,$@)
+endif
+
+# Optionally include user configuration if it exists.
+-include $(FLMHOME)/user/default.flm
--- a/sbsv2/raptor/lib/flm/converged-comms/createcommdbs.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/converged-comms/createcommdbs.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,60 +1,60 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to build CommDB databases using CED.
-
-DBDONE:=$(EPOCBLD)/CommDb_$(PLATFORM)_$(CFG).done
-$(call makepathfor,$(DBDONE))
-
-# remember the name of the .done file so that we can make the FINAL stage of
-# installdefaultcommdb.flm depend on it
-CommDb_$(PLATFORM)_$(CFG)_done:=$(DBDONE)
-
-# macro for all the rules
-define createcommdbs
-
-FINAL:: $(DBDONE)
-
-$(DBDONE): TARGET
-	$(call startrule,createcommdbs) \
-	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec && \
-	touch $(DBDONE) \
-	$(call endrule,createcommdbs)
-
-CLEAN:: 
-	$(call startrule,clean) \
-	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec && \
-	rm -f $(DBDONE) \
-	$(call endrule,clean)
-
-RELEASABLES:: 
-	@$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec
-
-ifeq ($(WHATLOG),TRUE)
-FINAL::
-	@ { echo "<whatlog bldinf='$(COMPONENT_META)' mmp='' config='$(SBS_CONFIGURATION)'>" ; \
-	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec | \
-	(read -r LINE; while [ $$$$? -eq 0 ]; do \
-	echo "<build>$$$$LINE</build>"; \
-	read -r LINE; done; ); \
-	echo "</whatlog>"; } \
-	$(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
-endif
-
-endef
-
-# expand
-$(eval $(createcommdbs))
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to build CommDB databases using CED.
+
+DBDONE:=$(EPOCBLD)/CommDb_$(PLATFORM)_$(CFG).done
+$(call makepathfor,$(DBDONE))
+
+# remember the name of the .done file so that we can make the FINAL stage of
+# installdefaultcommdb.flm depend on it
+CommDb_$(PLATFORM)_$(CFG)_done:=$(DBDONE)
+
+# macro for all the rules
+define createcommdbs
+
+FINAL:: $(DBDONE)
+
+$(DBDONE): TARGET
+	$(call startrule,createcommdbs) \
+	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec && \
+	touch $(DBDONE) \
+	$(call endrule,createcommdbs)
+
+CLEAN:: 
+	$(call startrule,clean) \
+	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec && \
+	rm -f $(DBDONE) \
+	$(call endrule,clean)
+
+RELEASABLES:: 
+	@$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec
+
+ifeq ($(WHATLOG),TRUE)
+FINAL::
+	@ { echo "<whatlog bldinf='$(COMPONENT_META)' mmp='' config='$(SBS_CONFIGURATION)'>" ; \
+	$(PERL) $(EXTENSION_ROOT)/createcommdbs.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --sourceDir=$(EXTENSION_ROOT)/$(SRCDIR) --platsec | \
+	(read -r LINE; while [ $$$$? -eq 0 ]; do \
+	echo "<build>$$$$LINE</build>"; \
+	read -r LINE; done; ); \
+	echo "</whatlog>"; } \
+	$(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
+endif
+
+endef
+
+# expand
+$(eval $(createcommdbs))
+
--- a/sbsv2/raptor/lib/flm/converged-comms/installdefaultcommdb.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/converged-comms/installdefaultcommdb.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,49 +1,49 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to install CommDB databases created using CED.
-
-# macro for all the rules
-define installdefaultcommdb
-
-FINAL:: $(CommDb_$(PLATFORM)_$(CFG)_done)
-	$(call startrule,installdefaultcommdb) \
-	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --platsec \
-	$(call endrule,installdefaultcommdb)
-
-CLEAN:: 
-	$(call startrule,clean) \
-	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --platsec \
-	$(call endrule,clean)
-
-RELEASABLES::
-	@$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --platsec
-
-ifeq ($(WHATLOG),TRUE)
-FINAL::
-	@ { echo "<whatlog bldinf='$(COMPONENT_META)' mmp='' config='$(SBS_CONFIGURATION)'>" ; \
-	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --platsec | \
-	(read -r LINE; while [ $$$$? -eq 0 ]; do \
-	echo "<build>$$$$LINE</build>"; \
-	read -r LINE; done; ); \
-	echo "</whatlog>"; } \
-	$(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
-endif
-
-endef
-
-# expand
-$(eval $(installdefaultcommdb))
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to install CommDB databases created using CED.
+
+# macro for all the rules
+define installdefaultcommdb
+
+FINAL:: $(CommDb_$(PLATFORM)_$(CFG)_done)
+	$(call startrule,installdefaultcommdb) \
+	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=build --platform=$(PLATFORM) --variant=$(CFG) --platsec \
+	$(call endrule,installdefaultcommdb)
+
+CLEAN:: 
+	$(call startrule,clean) \
+	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=clean --platform=$(PLATFORM) --variant=$(CFG) --platsec \
+	$(call endrule,clean)
+
+RELEASABLES::
+	@$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --platsec
+
+ifeq ($(WHATLOG),TRUE)
+FINAL::
+	@ { echo "<whatlog bldinf='$(COMPONENT_META)' mmp='' config='$(SBS_CONFIGURATION)'>" ; \
+	$(PERL) $(EXTENSION_ROOT)/installdefaultcommdb.pl --command=releasables --platform=$(PLATFORM) --variant=$(CFG) --platsec | \
+	(read -r LINE; while [ $$$$? -eq 0 ]; do \
+	echo "<build>$$$$LINE</build>"; \
+	read -r LINE; done; ); \
+	echo "</whatlog>"; } \
+	$(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
+endif
+
+endef
+
+# expand
+$(eval $(installdefaultcommdb))
+
--- a/sbsv2/raptor/lib/flm/e32abiv2.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,1178 +1,1194 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Knows how to build all possible ABIV2 executables for ARM
-#
-#
-
-# Only build feature invariant binaries in non-product builds *and*
-# Only build feature variant binaries in product builds.
-#
-# FEATUREVARIANTNAME != "" implies product build
-# FEATUREVARIANT == 1 implies a feature variant binary
-#
-# test FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
-#
-ifneq ($(or $(call equal,$(FEATUREVARIANTNAME),),$(call equal,$(FEATUREVARIANT),1)),)
-
-$(if $(FLMDEBUG),$(info <flm name='e32abiv2' target='$(TARGET)' type='$(TARGETTYPE)' outputpath='$(OUTPUTPATH)' metasource='$(METASOURCE)' postlinkfiletype='$(POSTLINKFILETYPE)' />))
-
-# Strip switch-type parameters
-#
-POSTLINKTARGETTYPE:=$(strip $(POSTLINKTARGETTYPE))
-UID1:=$(strip $(UID1))
-UID2:=$(strip $(UID2))
-UID3:=$(strip $(UID3))
-SID:=$(strip $(SECUREID))
-VENDORID:=$(strip $(VENDORID))
-AUTOEXPORTS:=$(strip $(AUTOEXPORTS))
-DEFFILE:=$(strip $(DEFFILE))
-IMPORTLIBRARYREQUIRED:=$(strip $(IMPORTLIBRARYREQUIRED))
-EPOCALLOWDLLDATA:=$(strip $(EPOCALLOWDLLDATA))
-PAGED:=$(strip $(PAGED))
-
-# the output directories
-VARIANTPLATFORM:=$(VARIANTPLATFORM)$(FEATUREVARIANTNAME)
-RELEASABLEPATH:=$(RELEASEPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
-INTERMEDIATEPATH:=$(OUTPUTPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
-INTERMEDIATE_PLATFORM_PATH:=$(OUTPUTPATH)/$(VARIANTPLATFORM)
-TRACE_MARKER_PATH:=$(OUTPUTPATH)
-IMPORTLIBPATH:=$(RUNTIME_LIBS_PATH)
-
-# LOCALLY USED VARIABLES
-CLEANTARGETS:=
-WHATRELEASE:=
-
-# Work out which new/delete library to use for binaries.
-CHECKLIB_TYPE:=symc++
-STDCPPTAGFILE:=
-ifeq ($(NOSTDCPP),1)
-  ifeq ($(STDCPP),1)
-    $(info <warning>STDCPP and NOSTDCPP both specified in $(PROJECT_META)</warning>)
-  else
-    ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
-      DEFAULT_NEWLIB:=$(DEFAULT_SYMBIAN_NEWLIB)
-    endif
-  endif
-else
-  ifeq ($(STDCPP),1)
-    CDEFS:=$(CDEFS) __SYMBIAN_STDCPP_SUPPORT__
-    ifneq ($(SUPPORTS_STDCPP_NEWLIB),)
-      ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
-        DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
-      endif
-      CHECKLIB_TYPE:=stdc++
-      STDCPPTAGFILE:=$(EPOCROOT)/epoc32/tools/tag/tag_elf
-    endif
-  endif
-endif
-
-# If NEWLIB is specified in the MMP file, it overrides all the past stuff.
-ifeq ($(NEWLIB),)
-  NEWLIB:=$(DEFAULT_NEWLIB)
-endif
-
-
-##########################################################################
-## OUTPUTS - externally relevant targets that this FLM generates
-
-
-ifeq ($(EXPORTLIBRARY),)
-  EXPORTLIBRARY:=$(TARGET)
-endif
-
-# This will insert the file version between the name and the extension.
-# If there is more than one dot in generated filename the inserted position will be
-# BEFORE the last but two dot. E.g name1.name2.name3.dll to name1.name2{version}.name3.dll
-LIBEXT:=$(lastword $(subst .,$(CHAR_SPACE) ,$(EXPORTLIBRARY)))
-LIBBASE:=$(patsubst %.$(LIBEXT),%,$(EXPORTLIBRARY))
-ifneq ($(findstring .,$(EXPORTLIBRARY)),)
-  # Please note $(EXPORTLIBRARY) doesn't include target type.
-  VER_E32IMPORTLIBBASE:=$(IMPORTLIBPATH)/$(LIBBASE){$(VERSIONHEX)}.$(LIBEXT)
-else
-  VER_E32IMPORTLIBBASE:=$(IMPORTLIBPATH)/$(EXPORTLIBRARY){$(VERSIONHEX)}
-endif
-
-# Postlinkable targets need to be linked and elf2e32'd
-ifneq ($(DOPOSTLINK),)
-    E32TARGET:=$(RELEASABLEPATH)/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))
-    LINK_TARGET:=$(RELEASABLEPATH)/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).sym
-    MAPFILE:=$(RELEASABLEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).map
-else
-  E32TARGET:=
-  LINK_TARGET:=
-  MAPFILE:=
-endif
-
-# libs and klibs, on the other hand need to be archived
-ifneq ($(call isoneof,$(TARGETTYPE),lib klib stdlib),)
-  ARTARGET:=$(RELEASABLEPATH)/$(TARGET).lib
-  # We need libs and klibs before we can link stuff with them:
-  LIBRARY:: $(ARTARGET)
-else
-  ARTARGET:=
-endif
-
-
-ifneq ($(IMPORTLIBRARYREQUIRED),) # no dso files for plugins, animation dlls etc
-  # make sure we don't build import libraries more than once for UDEB and UREL
-  # Without this, wierd target-specific variable problems happen with LIBRARY in particular
-
-  TMP_IMPORTLIBTARGET_ROOT:=$(IMPORTLIBPATH)/$(EXPORTLIBRARY)
-
-  # ABIv2 .dso
-  IMPORTLIBTARGET_DSO:=
-  IMPORTLIBTARGETVERSIONED_DSO:=
-
-  BUILDMARKER_IMPORTLIBTARGET_DSO:=TARGET_$(subst :,,$(VER_E32IMPORTLIBBASE)).dso
-  WHATRELEASE:=$(WHATRELEASE) $(if $(EXPLICITVERSION),,$(TMP_IMPORTLIBTARGET_ROOT).dso)
-  WHATRELEASE:=$(WHATRELEASE) $(VER_E32IMPORTLIBBASE).dso
-  ifeq ($($(BUILDMARKER_IMPORTLIBTARGET_DSO)),)
-    IMPORTLIBTARGET_DSO:=$(TMP_IMPORTLIBTARGET_ROOT).dso
-    IMPORTLIBTARGETVERSIONED_DSO:=$(VER_E32IMPORTLIBBASE).dso
-    $(eval $(BUILDMARKER_IMPORTLIBTARGET_DSO):=1)
-  endif
-
-  # ABIv1 .lib (for specific builds, toolchains and host OS platforms only)
-  IMPORTLIBTARGET_LIB:=
-  IMPORTLIBTARGETVERSIONED_LIB:=
-  BUILDMARKER_IMPORTLIBTARGET_LIB:=TARGET_$(subst :,,$(VER_E32IMPORTLIBBASE)).lib
-  # Only for builds that require and support them, and only on windows
-  ifeq ($(OSTYPE),cygwin)
-  ifeq ($(GENERATE_ABIV1_IMPLIBS),1)
-    WHATRELEASE:=$(WHATRELEASE) $(if $(EXPLICITVERSION),,$(TMP_IMPORTLIBTARGET_ROOT).lib)
-    WHATRELEASE:=$(WHATRELEASE) $(VER_E32IMPORTLIBBASE).lib
-    ifeq ($($(BUILDMARKER_IMPORTLIBTARGET_LIB)),)
-      IMPORTLIBTARGET_LIB:=$(TMP_IMPORTLIBTARGET_ROOT).lib
-      IMPORTLIBTARGETVERSIONED_LIB:=$(VER_E32IMPORTLIBBASE).lib
-      $(eval $(BUILDMARKER_IMPORTLIBTARGET_LIB):=1)
-    endif
-  endif
-  endif
-endif
-
-# Try to make sure that we get the right linkas name
-# If linkas is specified then split it up and
-# put the hex version number in the right place
-ifeq ($(LINKAS),)
-  LINKASNAME=$(TARGET)
-  LINKASTYPE=$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))
-else
-  SPLIT_LINKAS=$(subst ., ,$(LINKAS))
-  LINKASNAME=$(word 1,$(SPLIT_LINKAS))
-  LINKASTYPE=$(word 2,$(SPLIT_LINKAS))
-endif
-
-# ignore UID3 if it is zero
-ifeq ($(UID3),00000000)
-  LINKASVERSIONED=$(LINKASNAME){$(VERSIONHEX)}.$(LINKASTYPE)
-else
-  LINKASVERSIONED=$(LINKASNAME){$(VERSIONHEX)}$(if $(UID3),[$(UID3)],).$(LINKASTYPE)
-endif
-
-##########################################################################
-## TARGET GROUPS ##
-RELEASABLES:=$(strip $(E32TARGET) $(ARTARGET) $(LINK_TARGET) $(MAPFILE))
-# More targets to be added later
-TARGETS:=$(strip $(E32TARGET) $(IMPORTLIBTARGET) $(LINK_TARGET) $(ARTARGET))
-
-CREATABLEPATHS:=$(OUTPUTPATH)
-CREATABLEPATHS:=$(CREATABLEPATHS) $(INTERMEDIATE_PLATFORM_PATH)
-CREATABLEPATHS:=$(CREATABLEPATHS) $(INTERMEDIATEPATH)
-CREATABLEPATHS:=$(CREATABLEPATHS) $(RELEASABLEPATH)
-CREATABLEPATHS:=$(CREATABLEPATHS) $(RUNTIME_LIBS_PATH)
-CREATABLEPATHS:=$(CREATABLEPATHS) $(IMPORTLIBPATH)
-WHATRELEASE:=$(WHATRELEASE) $(RELEASABLES)
-
-
-
-## HIGH LEVEL Targets ##
-.PHONY:: $(ALLTARGET)
-
-## GLOBAL TARGETS ############################################################
-$(ALLTARGET):: $(RELEASABLES)
-TARGET:: $(RELEASABLES)
-
-## Internal targets ##
-
-# Determine the name of the generated DSO file ###############################
-# This is to generate the dso with the Some{Versionhex}.file.dso
-# It reproduces what appears to be a problem in the current build system
-# that affects messageintercept{000a0000}.esockdebug.dso whose
-# filename differs from it's "linkas" name.
-E32VAR:=$(subst .,$(CHAR_SPACE) ,$(TARGET))
-E32SOME:=$(word 1,$(E32VAR))
-E32VAR2:=$(patsubst $(E32SOME).%,%,$(TARGET))
-
-# Separate '_SH' variables created for output into bash - Preserves '{' and '}'
-
-ifneq ($(findstring .,$(TARGET)),)
-	DSODEFFILENAMEBASE:=$(E32SOME){$(VERSIONHEX)}.$(E32VAR2)
-else
-	DSODEFFILENAMEBASE:=$(TARGET){$(VERSIONHEX)}
-endif
-GENERATED_DSO:=$(call dblquote,$(INTERMEDIATEPATH)/$(DSODEFFILENAMEBASE).dso)
-GENERATED_DEFFILE:=$(call dblquote,$(INTERMEDIATEPATH)/$(DSODEFFILENAMEBASE).def)
-
-## IMPORT LIBRARY  ###########################################################
-
-# Static libraries will be postlinked when they are used so don't try to postlink them
-
-ifneq ($(IMPORTLIBRARYREQUIRED),)
-ifneq ($(or $(DEFFILE),$(EXPORTUNFROZEN)),)
-# Both ABIv2 .dso and ABIv1 .lib import library generation require a processed .def file,
-# unless EXPORTUNFROZEN is being used
-PREPPEDDEFFILE:=
-ifneq ($(DEFFILE),)
-  ifeq ($(EXPORTUNFROZEN),)
-    PREPPEDDEFFILE:=$(INTERMEDIATEPATH)/$(TARGET).prep
-    CLEANTARGETS:=$(CLEANTARGETS) $(PREPPEDDEFFILE)
-    define importlibtarget_prepfile
-      $(PREPPEDDEFFILE): $(DEFFILE)
-		$(call startrule,importlibtarget_prepfile,FORCESUCCESS) \
-		$(PREPDEF) $(call dblquote,$(DEFFILE)) $(call dblquote,$(PREPPEDDEFFILE)) \
-		$(call endrule,importlibtarget_prepfile)
-    endef
-    $(eval $(importlibtarget_prepfile))
-  endif
-endif
-
-# ABIv2 .dso
-ifneq ($(IMPORTLIBTARGET_DSO),) # check that we haven't tried to specify this target already
-
-  ifneq ($(EXPLICITVERSION),)
-    TARGETS:=$(strip $(TARGETS) $(IMPORTLIBTARGETVERSIONED_DSO))
-
-    # Add this importlibrary to our global targets
-    LIBRARY:: $(IMPORTLIBTARGETVERSIONED_DSO)
-    $(ALLTARGET):: $(IMPORTLIBTARGETVERSIONED_DSO)
-    TARGET:: $(IMPORTLIBTARGETVERSIONED_DSO)
-
-  else
-    TARGETS:=$(strip $(TARGETS) $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO))
-
-    # Add this importlibrary to our global targets
-    LIBRARY:: $(IMPORTLIBTARGET_DSO)
-    $(ALLTARGET):: $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO)
-    TARGET:: $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO)
-
-
-  endif
-
-
-
-  ifneq ($(EXPORTUNFROZEN),) # Unfrozen  - warn and create .dso as side-effect of the final postlink
-    $(info <warning project='$(PROJECT_META)' component='$(COMPONENT_META)'>EXPORTUNFROZEN present in $(PROJECT_META) - unfrozen exports will be represented in import library.</warning> )
-    define importlibtarget_unfrozen
-      $(IMPORTLIBTARGET_DSO): $(IMPORTLIBTARGETVERSIONED_DSO)
-		$(call startrule,importlibtarget_unfrozen,FORCESUCCESS) \
-		$(GNUCP) $$(call dblquote,$$<) $$(call dblquote,$$@) \
-		$(call endrule,importlibtarget_unfrozen)
-
-       CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
-
-    endef
-
-    define importlibtarget_unfrozen_ver
-      $(IMPORTLIBTARGETVERSIONED_DSO): $(E32TARGET)
-		$(call startrule,importlibversioned_unfrozen,FORCESUCCESS) \
-		$(GNUCP) "$(GENERATED_DSO)" "$$@" \
-		$(call endrule,importlibversioned_unfrozen)
-
-      CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
-    endef
-
-    ifeq ($(EXPLICITVERSION),)
-      # Generate the general dso if we aren't
-      # being asked to make just the specific version.
-      $(eval $(importlibtarget_unfrozen))
-    endif
-
-    $(eval $(importlibtarget_unfrozen_ver))
-  else
-    ifneq ($(DEFFILE),) # Frozen - use the def file and create .dso directly
-      define importlibtarget_func
-       $(IMPORTLIBTARGET_DSO): $(IMPORTLIBTARGETVERSIONED_DSO)
-	   $(call startrule,importlibtarget,FORCESUCCESS) \
-	   $(GNUCP) "$$<" "$$@" \
-	   $(call endrule,importlibtarget)
-
-          CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
-      endef
-
-      ifeq ($(EXPLICITVERSION),)
-          # Generate the general dso if we aren't
-          # being asked to make just the specific version.
-          $(eval $(importlibtarget_func))
-      endif
-
-      define importlibtargetversioned_func
-        $(IMPORTLIBTARGETVERSIONED_DSO): $(ELF2E32) $(PREPPEDDEFFILE)
-	      $(call startrule,importlibversioned,FORCESUCCESS) \
-	      $(ELF2E32) --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0))  --version=$(VERSION)  	   \
-	 	  --definput="$(PREPPEDDEFFILE)" 				   \
-	 	  --dso=$$(call dblquote,$$@) 				   \
-	 	  --linkas=$(call dblquote,$(LINKASVERSIONED)) \
-	      $(call endrule,importlibversioned)
-
-              CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGETVERSIONED_DSO)
-      endef
-      $(eval $(importlibtargetversioned_func))
-    endif #  ifneq ($(DEFFILE),)
-  endif #  ifneq ($(EXPORTUNFROZEN),)
-endif #  ifneq ($(IMPORTLIBTARGET_DSO),)
-
-# ABIv1 .lib
-ifneq ($(IMPORTLIBTARGETVERSIONED_LIB),) # check that we haven't tried to specify this target already
-  CLEANTARGETS:=$(CLEANTARGETS) $(IMPORTLIBTARGETVERSIONED_LIB) $(IMPORTLIBTARGET_LIB)
-
-  define abiv1_generatelib
-
-    ifeq ($(EXPLICITVERSION),)
-      LIBRARY:: $(IMPORTLIBTARGETVERSIONED_LIB) $(IMPORTLIBTARGET_LIB)
-
-    else
-      LIBRARY:: $(IMPORTLIBTARGETVERSIONED_LIB)
-
-    endif
-
-    # If frozen, a prepped .def file is used as the basis for .lib creation
-    # If unfrozen, .lib files are based on the .def file generated by the final postlink
-    $(IMPORTLIBTARGETVERSIONED_LIB): $(if $(EXPORTUNFROZEN),$(E32TARGET),$(PREPPEDDEFFILE))
-	$(call startrule,importlibversioned_abiv1) \
-        if [ -f "$(EPOCROOT)/epoc32/tools/def2dll.pl" -a -f "$(if $(EXPORTUNFROZEN),$(GENERATED_DEFFILE),$(PREPPEDDEFFILE))" ]; then \
-                 $(PERL) $(EPOCROOT)/epoc32/tools/def2dll.pl \
-		--path=$(IMPORTLIBPATH) \
-		--bldpath=$(INTERMEDIATEPATH) \
-		--import=$(notdir $(basename $(IMPORTLIBTARGETVERSIONED_LIB))) \
-		--deffile="$(if $(EXPORTUNFROZEN),$(GENERATED_DEFFILE),$(PREPPEDDEFFILE))" \
-		--linkAs=$(call dblquote,$(LINKASVERSIONED)) \
-		--inter ; fi \
-	$(call endrule,importlibversioned_abiv1)
-
-    ifeq ($(EXPLICITVERSION),)
-      $(IMPORTLIBTARGET_LIB): $(IMPORTLIBTARGETVERSIONED_LIB)
-	$(call startrule,importlibtarget_abiv1) \
-	if [ -f $(EPOCROOT)/epoc32/tools/def2dll.pl ]; then $(GNUCP) "$$<" "$$@" ; fi \
-	$(call endrule,importlibtarget_abiv1)
-    endif
-  endef
-
-  $(eval $(abiv1_generatelib))
-endif #  ifneq ($(IMPORTLIBTARGET_LIB),)
-endif #  ($(or $(DEFFILE),$(EXPORTUNFROZEN)),)
-endif #  ifneq ($(IMPORTLIBRARYREQUIRED),)
-
-
-## POSTLINK ##################################################################
-
-# Set up the name of the exports file if this is a customdll
-EXPTARGET:=
-ifneq ($(DOPOSTLINK),)
-  ifneq ($(and $(or $(STATICLIBRARY),$(ARMLIBS),$(ARMRT)),$(DEFFILE)),)
-    EXPTARGET:=$(INTERMEDIATE_PLATFORM_PATH)/$(notdir $(VER_E32IMPORTLIBBASE)).exp
-  endif
-endif
-
-# Generating the import library is enough if TARGETTYPE=implib #############
-
-ifneq ($(DOPOSTLINK),)
-include $(FLMHOME)/e32postlink.mk
-endif # ifneq ($(DOPOSTLINK),)
-
-ifneq ($(TARGETTYPE),implib)
-
-## CUSTOM DLLS ###############################################################
-# exp file
-#
-# This tends to help getting exported objects
-# out of the arm libs and into custom dlls.
-
-ifneq ($(EXPTARGET),)
-ifeq ($(TARGET_$(EXPTARGET)),)
-# We only need one of these exptargets for UDEB and UREL
-TARGET_$(EXPTARGET):=1
-
-EXPTARGETASMFILE:=$(INTERMEDIATE_PLATFORM_PATH)/$(notdir $(VER_E32IMPORTLIBBASE)).s
-
-define e32expgen_func
-$(EXPTARGET): $(DEFFILE) $(ELF2E32)
-	$(call startrule,expgen) \
-	$(ELF2E32) \
-	   --definput=$$(call dblquote,$(DEFFILE)) \
-	   --dump=a \
-	   --output=$(call dblquote,$(EXPTARGETASMFILE)) && \
-	$(ASM) $(TARGET_ARCH_OPTION) $(AAPCS_OPTION) $(ASM_OUTPUT_OPTION) $$(call dblquote, $$@) $(EXPTARGETASMFILE) \
-	$(call endrule,expgen)
-endef
-
-$(eval $(e32expgen_func))
-CLEANTARGETS:=$(CLEANTARGETS) $(EXPTARGET) $(EXPTARGETASMFILE)
-endif
-endif
-
-
-
-
-## SOURCE FILES ##############################################################
-
-# Source files can be either C++ files (.cpp) or Assmbler-in-C++ files (.cia)
-# We have to split the two because they have the same link stage, the compile
-# stage is different for each.
-
-CPPFILEEXTENSIONS:=.cpp .CPP .Cpp .CPp .CpP .cPP .cpP .cPp .cc .CC \
-	.Cc .c++ .C++ .cxx .CXX .Cxx .cXx .CxX .CXx .cC .cXX .cxX
-CFILEEXTENSIONS:=.c .C
-CIAFILEEXTENSIONS:=.CIA .cia .Cia .cIa .cIA .ciA .CIa .CiA
-ASMFILEEXTENSIONS:=.s .S
-
-
-# Extract the CPP files from our sources
-CPPFILES:=$(call extractfilesoftype,$(CPPFILEEXTENSIONS),$(SOURCE))
-CFILES:=$(call extractfilesoftype,$(CFILEEXTENSIONS),$(SOURCE))
-ASMFILES:=$(call extractfilesoftype,$(ASMFILEEXTENSIONS),$(SOURCE))
-
-# Find out what assember-in-c files there are
-# If appropriate, work out what CPP files will be created from the assembler files
-CIAFILES:=$(call extractfilesoftype,$(CIAFILEEXTENSIONS),$(SOURCE))
-CIA_CPPFILES:=
-ifeq ($(TRANSFORM_CIA),1)
-  CIA_CPPFILES:=$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),_.cpp,$(CIAFILES)))
-else
-
-endif
-
-## LINK ######################################################################
-# Bring together all the .o files compiled from  .cpp, .c, .s and .cia files.
-# These files are stored in the "non-releasable" output diretory.
-
-define mapcpp2object
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CPPFILEEXTENSIONS),.o,$1))
-endef
-
-define mapc2object
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CFILEEXTENSIONS),.o,$1))
-endef
-
-define mapasm2object
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(ASMFILEEXTENSIONS),.o,$1))
-endef
-
-define mapcia2object
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),_.o,$1))
-endef
-
-# Determine what object files will be linked by using the source files.
-CPPFILES_LINKOBJECTS:=$(call mapcpp2object,$(CPPFILES))
-CFILES_LINKOBJECTS:=$(call mapc2object,$(CFILES))
-ifeq ($(TRANSFORM_CIA),1) 
-  CIAFILES_LINKOBJECTS:=$(patsubst %_.cpp,%_.o,$(CIA_CPPFILES))
-else
-  CIAFILES_LINKOBJECTS:=$(call mapcia2object,$(CIAFILES))
-endif
-ASMFILES_LINKOBJECTS:=$(call mapasm2object,$(ASMFILES))
-
-# Try to link object files in the order in which the source files were specified.
-# This makes BC comparisons with non-Raptor builds easier.
-# Use the order of the source list to establish the order of the object files:
-LINKOBJECTS:=$(call relocatefiles,$(INTERMEDIATEPATH),$(SOURCE))
-# Replace the file extensions of the Source files with .o (or _.o for cia files) now
-# the list will contain the object files in the same order as the list of source files.
-LINKOBJECTS:=$(foreach FILE,$(LINKOBJECTS),$(basename $(FILE))$(if $(filter $(addprefix %,$(CIAFILEEXTENSIONS)),$(FILE)),_).o)
-
-ifneq ($(MULTIFILE_ENABLED),)
-MULTIFILEOBJECT:=$(INTERMEDIATEPATH)/$(TARGET).$(POSTLINKFILETYPE)_$(VARIANTTYPE)_multifileobject.o
-MULTIFILE_VIAFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_multifile.via
-endif
-
-## Via file ####################################
-# list of all objects to be linked
-#
-VIAFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_objects.via
-ifneq ($(GENERATELINKERFEEDBACK),)
-FEEDBACKFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_feedback.fdb
-endif
-
-# The groupin10 macro allows us to construct a via file, 10 objects at a time
-# to avoid limits on argument lengths and sizes on Windows.
-# It expands to a list of commands, each of which is on a separate line.
-# This causes the shell to be invoked once for each line but each line should
-# be shorter than the maximum allowed by windows.
-define groupin10
-	$(if $1,@echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >>$(VIAFILE),)
-	$(if $1,$(call groupin10,$(wordlist 11,$(words $1),$1)),@true)
-endef
-
-################################################
-
-
-## Link-type selection:
-#	runtime static libraries link via AR
-ifneq ($(ARTARGET),)
-# Assuming that there are no libdeps in this case because this is probably one of the
-# Runtime libraries which has no deps.
-
-define artarget_func
-$(ARTARGET): $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(LINKOBJECTS)) $(STDCPPTAGFILE)
-	$(if $(MULTIFILE_ENABLED),,@echo "$(STDCPPTAGFILE)" > $(VIAFILE);
-	$(call groupin10,$(LINKOBJECTS)) ;)
-	$(call startrule,ar,FORCESUCCESS) \
-	$$(call dblquote,$(AR)) $(ARCHIVER_CREATE_OPTION) $$@ $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(COMMANDFILE_OPTION)$(VIAFILE)) \
-	$(if $(DUMPBCINFO),&& $(FROMELF) -v $$@  > $$@.elfdump,)  \
-	$(call endrule,ar)
-endef
-$(eval $(artarget_func))
-
-CLEANTARGETS:=$(CLEANTARGETS) $(VIAFILE) $(ARTARGET) $(if $(DUMPBCINFO),$(ARTARGET).elfdump,)
-endif
-
-
-
-# Targettype is some type of DLL or EXE (or derivative)
-ifneq ($(LINK_TARGET),)
-
-escaped_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call ruleEscape,$(wildcard $(subst $(CHAR_SPACE),?,$(RVCTLIB)/*/$(L)))))
-quoted_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call dblquoteitem,$(wildcard $(RVCTLIB)/*/$(L))))
-located_STATICLIBRARIES:=$(foreach L,$(STATICLIBRARY),$(STATIC_LIBRARY_DIR)/$(L).lib)
-e32abiv2_LIBS:=$(EXPTARGET) $(LINKER_STUB_LIBRARY) $(if $(STATIC_RUNTIME_LIB),$(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB),) $(located_STATICLIBRARIES)
-# DLLS and EXEs - These objects are linked by a linker
-ifeq ($(ARMRT),)
-# Some of the runtime libraries do not set ARMRT because of a circular reference
-# problem; we need to stop these from linking to their own dso and not link to
-# the STATIC_LIBS_LIST.
-ifneq ($(findstring $(TARGET).dso,$(RUNTIME_LIBS_LIST)),)
-# (almost) ARM RUNTIME LIBS
-REDUCED_RUNTIME_LIBS_LIST:=$(subst $(TARGET).dso,,$(RUNTIME_LIBS_LIST))
-
-ifeq ($(VARIANTTYPE),udeb)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
-else
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
-endif
-quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
-
-else
-# NORMAL
-#
-ifeq ($(VARIANTTYPE),udeb)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG))
-else
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY))
-endif
-ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(NEWLIB))
-endif
-quoted_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(call addquotedprefix,$(STATIC_LIBS_PATH)/,$(STATIC_LIBS_LIST)) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(addprefix $(call ruleEscape,$(STATIC_LIBS_PATH)/),$(STATIC_LIBS_LIST)) $(escaped_located_ARMLIBS)
-
-endif
-else
-# ARM RUNTIME LIBS
-ifeq ($(VARIANTTYPE),udeb)
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) 
-else
-  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY))
-endif
-quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
-escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
-endif
-
-# NOTE: the groupin10 macro must be used before a call to the "startrule" macro
-# because the code between startrule and endrule is packaged up into one
-# commandline which would defeat the purpose of groupin10.
-# This is undesirable because viafile generation commands appear
-# outside the relevant tags but it is also unavoidable.
-define linktarget_func
-## The actual link target, dependencies and build step
-$(LINK_TARGET): $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(escaped_e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),)
-	$(if $(MULTIFILE_ENABLED),,@echo -n "" > $(VIAFILE);
-	$(call groupin10,$(LINKOBJECTS)) ;)
-	$(call startrule,link) \
-	$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
-	$(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(located_STATICLIBRARIES),$(CHECKLIB) $(CHECKLIB_TYPE) --elf $(call dblquote,$(located_STATICLIBRARIES)) &&,),) \
-	$(LD) $(LINKER_MISC_FLAGS) $(LINKER_DEFAULT_LIB_PATHS) $(SYMBIAN_LINK_FLAGS) $(if $(DEBUG_INFO),$(LINKER_DEBUG_OPTION),$(LINKER_NODEBUG_OPTION)) \
-	  $(SHARED_OBJECT_OPTION) $(SPLIT_OPTION) \
-	  $(RW_BASE_OPTION) 0x400000 \
-	  $(LINKER_ARCH_OPTION) \
-	  $(SYMVER_OPTION) $(SO_NAME_OPTION) $(call dblquote,$(LINKASVERSIONED)) \
-	  $(LINKER_ENTRYPOINT_SETTING) \
-	  -o $$(call dblquote,$$@) \
-	  $(if $(LTCG),$(LTCG_OPTION),) \
-	  $(LINKER_SYMBOLS_OPTION) $(LINKER_SYMBOLS_FILE_OPTION) \
-	  $(call dblquote,$(MAPFILE)) \
-  	  $(LINKEROPTION) \
-	  $(if $(MULTIFILE_ENABLED),$(call dblquote,$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS)),$(COMMANDFILE_OPTION)$(call dblquote,$(VIAFILE))) \
-          $(if $(GENERATELINKERFEEDBACK),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \
-	  $(if $(LINKER_ADD_STATIC_RUNTIME),$(if $(STATIC_RUNTIME_LIB),$(LINKER_GROUP_START_OPTION) $(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB) $(LINKER_GROUP_END_OPTION),)) \
-	  $(quoted_e32abiv2_LIBS) $(LINKER_DEFAULT_LIBS)\
-	$(call endrule,link)
-
-$(MAPFILE): $(LINK_TARGET)
-endef
-$(eval $(linktarget_func))
-
-CLEANTARGETS:=$(CLEANTARGETS) $(LINK_TARGET) $(if $(GENERATELINKERFEEDBACK),$(FEEDBACKFILE)) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT))
-CLEANTARGETS:=$(CLEANTARGETS) $(VIAFILE)
-CLEANTARGETS:=$(CLEANTARGETS) $(MAPFILE)
-WHATRELEASE:=$(WHATRELEASE) $(MAPFILE)
-
-endif # if TARGETTYPE lib
-
-
-## Run trace compiler ##############################################
-ifeq ($(UID3),)
- ifeq ($(UID2),)
-  USE_TRACE_COMPILER:=
- else
-  UID_TC:=$(UID2)
- endif
-else
- UID_TC:=$(UID3)
-endif
-
-# USE_TRACE_COMPILER defaults to blank in Raptor config.
-# Users can turn TC on by setting it to 1 in user config.
-ifneq ($(USE_TRACE_COMPILER),)
-  include $(FLMHOME)/tracecompiler.mk
-endif
-
-CC_CPPONLY_ARGS:=$(SYMBIAN_CCFLAGS) $(if $(DEBUG_INFO),-g) $(DEBUG_FORMAT) \
-  $(RUNTIME_SYMBOL_VISIBILITY_OPTION) $(EXCEPTIONS) \
-  $(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION) \
-  $(TARGET_ARCH_OPTION) $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) \
-  $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
-  $(CPPONLYOPTION) $(INSTRUCTION_SET) \
-  $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
-  $(COMPILER_FPU_FLAGS)
-
-## COMPILE CPP Files #################################################################
-
-# For ARMCC we can compile all sourcefiles with one invocation
-# The pathprep macro is used to make sure that forward slashes in options
-# are not interpreted as being paths by CYGWIN on Windows.  On windows
-# pathprep makes a forward slash into two.
-
-# The majority of ARMCC arguments are common across all compiler invocations
-# Order is significant here in that OPTION_REPLACE here and in ABLD should
-# have the same impact
-CC_CORE_ARGS:=$(SYMBIAN_CCFLAGS) $(if $(DEBUG_INFO),-g) $(DEBUG_FORMAT) \
-  $(RUNTIME_SYMBOL_VISIBILITY_OPTION) $(EXCEPTIONS) \
-  $(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION) \
-  $(TARGET_ARCH_OPTION) $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) \
-  $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
-  $(COMPILE_ONLY_OPTION) $(INSTRUCTION_SET) \
-  $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
-  $(COMPILER_FPU_FLAGS)
-
-ifeq ($(STDCPP),1)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(STDCPP_INCLUDE)))
-endif
-
-define option_replace
-  # Process a single, combined, item of the form 'search<->replace' in order to modify the command line tool call
-  # We split this into its component arguments for use in substitutions
-  # Spaces will have been escaped elsewhere to maintain distinct words, so we resurrect these
-  # after the split.
-  SEARCH:=$(subst %20,$(CHAR_SPACE),$(word 1,$(subst <->,$(CHAR_SPACE),$(1))))
-  REPLACE:=$(subst %20,$(CHAR_SPACE),$(word 2,$(subst <->,$(CHAR_SPACE),$(1))))
-
-  # Depending on whether there's a wildcard in the search, we may require either a normal $(subst) or a $(patsubst)
-  PATSUBST:=$$(if $$(findstring %,$$(SEARCH)),1,)
-
-  ifeq ($$(PATSUBST),1)
-    CC_CORE_ARGS:=$$(patsubst $$(SEARCH),$$(REPLACE),$$(CC_CORE_ARGS))
-  else
-    CC_CORE_ARGS:=$$(subst $$(SEARCH),$$(REPLACE),$$(CC_CORE_ARGS))
-  endif
-endef
-$(foreach ITEM,$(OPTION_REPLACE_COMPILER),$(eval $(call option_replace,$(ITEM))))
-
-define e32abiv2_compile
-
-$(eval DEPENDFILENAME:=$(1).d)
-$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-# $4 is for language specific options (e.g. C++ vs C)
-$(1): $(2) $(PROJECT_META) $(if $(MULTIFILE_ENABLED),,$(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER),) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),)
-	$(call startrule,compile,,$(2))		\
-		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
-		$(if $(MULTIFILE_ENABLED), echo $(2) $(3) > $(MULTIFILE_VIAFILE) ;,) \
-		$(CC) $(LICENSERETRY_OPTION) \
-			$(CC_CORE_ARGS) \
-			$(OPTION_COMPILER) $(if $(MULTIFILE_ENABLED),$(4),$(3)) \
-			$(if $(LTCG),$(LTCG_OPTION),) \
-			$(if $(USE_PROFILER_FEEDBACK),--profile=$(call dblquote,$(ARM_PROFILER_FILE)),) \
-			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
-			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
-			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
-			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                      \
-			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
-			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
-			$(if $(NOHIDEALL),--no_hide_all,) \
-			$(DEPEND_OPTION) $(call dblquote,$(1).d) \
-                        $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \
-			$(if $(MULTIFILE_ENABLED),--multifile $(OUTPUT_OPTION) $(MULTIFILEOBJECT) \
-			--via $$(call dblquote, $(MULTIFILE_VIAFILE)),$(OUTPUT_OPTION) $$@ $$(call dblquote, $$<))  \
-	$(call endrule,compile)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-ifneq "$(DEPENDFILE)" ""
-ifeq ($(NO_DEPEND_INCLUDE),)
-  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-    -include $(DEPENDFILE)
-  endif
-endif
-endif
-
-# individual source file compilation
-SOURCETARGET_$(call sanitise,$(2)): $(1)
-
-endef
-
-# Evaluate .cpp and .c files in one go for multifile, cannot do in separate steps since we have the same target.
-# This implementation means the .c files will always get put at the end of the .via file. Maybe there is a better way to do this?
-$(if $(MULTIFILE_ENABLED),$(eval $(call e32abiv2_compile,$(MULTIFILEOBJECT),$(CPPFILES),$(CFILES),$(CPP_LANG_OPTION))),$(foreach F,$(CPPFILES),$(eval $(call e32abiv2_compile,$(call mapcpp2object,$(F)),$(F),$(CPP_LANG_OPTION)))))
-$(if $(MULTIFILE_ENABLED),,$(foreach F,$(CFILES),$(eval $(call e32abiv2_compile,$(call mapc2object,$(F)),$(F),$(C_LANG_OPTION)))))
-ifneq ($(TRANSFORM_CIA),1)
-  $(if $(MULTIFILE_ENABLED),,$(foreach F,$(CIAFILES),$(eval $(call e32abiv2_compile,$(call mapcia2object,$(F)),$(F),$(CPP_LANG_OPTION) $(COMPILER_CIA_FLAGS)))))
-endif
-
-CLEANTARGETS:=$(CLEANTARGETS) $(if $(MULTIFILE_ENABLED),$(MULTIFILE_VIAFILE) $(MULTIFILEOBJECT),$(CPPFILES_LINKOBJECTS) $(CFILES_LINKOBJECTS) $(CIAFILES_LINKOBJECTS)) $(if $(GENERATELINKERFEEDBACK),$(FEEDBACKFILE))
-
-## Listing target ###################################################
-# Very similar to compile, apart from the extra flags passed to the
-# compile and different output options
-
-define map2listfile
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.lis,$1))
-endef
-
-
-define e32abiv2_cpponly
-# $1 is the sourcefile
-
-$(eval CPPONLYTARGET:=$(strip $(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.$(subst _,.,$(call sanitise,$(FULLVARIANTPATH))).pre,$1)))
-
-CPPONLY:: $(CPPONLYTARGET)
-
-$(CPPONLYTARGET): $(1) $(PROJECT_META)  $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	$(call startrule,e32cpponly,,$(1))		\
-		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
-		$(CC) $(LICENSERETRY_OPTION) $(SYMBIAN_CCFLAGS) \
-			$(CC_CPPONLY_ARGS) \
-			$(OPTION_COMPILER) 						\
-			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
-			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
-			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquote,$(RVCTINC)),),)       \
-			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                   \
-			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
-			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
-			$(if $(NOHIDEALL),--no_hide_all,) \
-			$$(call dblquote, $$<) $(OUTPUT_OPTION) $$(@) \
-	$(call endrule,e32cpponly)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(CPPONLYTARGET)
-endef
-
-ifneq ($(filter CPPONLY,$(call uppercase,$(MAKECMDGOALS))),)
-$(foreach F,$(CPPFILES) $(CFILES),$(eval $(call e32abiv2_cpponly,$(F))))
-endif
-
-define e32abiv2_listing
-# $1 is the sourcefile
-
-$(eval LISTINGTARGET:=$(strip $(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.$(subst _,.,$(call sanitise,$(FULLVARIANTPATH))).$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).lst,$1)))
-$(eval DEPENDFILENAME:=$(call map2listfile,$1).d)
-$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-
-LISTING:: $(LISTINGTARGET)
-
-$(LISTINGTARGET): $(1) $(PROJECT_META)  $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	$(call startrule,e32listing,,$(1))		\
-		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
-		$(CC) $(LICENSERETRY_OPTION) $(SYMBIAN_CCFLAGS) \
-			$(CC_CORE_ARGS) \
-			$(LISTING_OPTION)		            	\
-			$(OPTION_COMPILER) 						\
-			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
-			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
-			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
-			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                   \
-			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
-			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
-			$(if $(NOHIDEALL),--no_hide_all,) \
-			$(DEPEND_OPTION) $(call dblquote,$(DEPENDFILENAME)) \
-			$$(call dblquote, $$<) $(OUTPUT_OPTION) $$(@) \
-	$(call endrule,e32listing)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(LISTINGTARGET)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-ifneq "$(DEPENDFILE)" ""
-ifeq ($(NO_DEPEND_INCLUDE),)
-  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-    -include $(DEPENDFILE)
-  endif
-endif
-endif
-
-endef
-
-# No point at all in generating listing targetsif we aren't going to make them
-ifneq ($(filter LISTING,$(call uppercase,$(MAKECMDGOALS))),)
-$(foreach F,$(CPPFILES) $(CFILES),$(eval $(call e32abiv2_listing,$(F))))
-endif
-
-
-
-# Function to execute FREEZE ###########################################
-ifneq ($(SUPPORT_FREEZE),)
-
-# Fivespaces variable created to ensure a suitable gap of space characters
-# Is placed between the separate arguments. This fixes a problem in Cygwin, where
-# separate arguments are interpreted as a single argument when passed to bash
-FIVESPACES=$(BLANK)     $(BLANK)
-
-FREEZEGUARD:=TARGET_$(TARGET)_$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))_$(IMPORTLIBPATH)_EFREEZE
-
-define e32freeze
-
-FREEZE:: $(1)
-	$(call startrule,freeze,,$(RESOLVED_DEFFILE)) \
-	$(EFREEZE) $(EFREEZE_REMOVE_OPTION) "$(RESOLVED_DEFFILE)" $(FIVESPACES) $(GENERATED_DEFFILE) \
-	$(call endrule,freeze)
-endef
-
-# DEFFILE should only be generated for target types that have a def file
-ifeq ($(MAKEDEFFILE),1)
-# Eval freeze only once - no point making the DEFFILE for urel *and* udeb.
-ifeq ($($(FREEZEGUARD)),)
-$(eval $(call e32freeze,$(E32TARGET)))
-$(FREEZEGUARD):=1
-endif
-endif
-
-endif
-
-CLEANTARGETS:=$(CLEANTARGETS) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(CPPFILES_LINKOBJECTS) $(CFILES_LINKOBJECTS))
-
-## ASSEMBLER FILES ###################################################################
-# CIA VERSION      ############################################
-define mapcia2xxx
-$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),$2,$1))
-endef
-
-define e32abiv2_CIA2CPP
-
-$(eval e32abiv2_OFILE:=$(call mapcia2xxx,$(1),_.o))
-$(eval e32abiv2_PREFILE:=$(call mapcia2xxx,$(1),_.pre))
-$(eval e32abiv2_CPPFILE:=$(call mapcia2xxx,$(1),_.cpp))
-$(eval CLEANTARGETS:=$(CLEANTARGETS) $(e32abiv2_OFILE) $(e32abiv2_CPPFILE) $(e32abiv2_PREFILE))
-
-$(e32abiv2_OFILE): $(e32abiv2_CPPFILE) $(PROJECT_META)
-	$(call startrule,cia2cpp2o,,$(e32abiv2_CPPFILE)) \
-		$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
-			$(CC) $(LICENSERETRY_OPTION) \
-			$(CC_CORE_ARGS) \
-			$(if $(LTCG),$(LTCG_OPTION),) \
-			$(OPTION_COMPILER) \
-			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(CIADEFS)) $(CPP_LANG_OPTION)      \
-	 		$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE)))     \
-	 		$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE))) \
-	 		$$(call dblquote, $$<) $(OUTPUT_OPTION) $$@ \
-	$(call endrule,cia2cpp2o)
-
-
-# preprocessed CIA file to a CPP file
-$(e32abiv2_CPPFILE): $(e32abiv2_PREFILE)
-	$(call startrule,tranasm) \
-	$(if $(CPPFILT),CPPFILT="$(CPPFILT)",) \
-	$(TRANASM) --suppress-check --output="$$@" $$^ \
-	$(call endrule,tranasm)
-
-$(eval DEPENDFILENAME:=$(e32abiv2_PREFILE).d)
-$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-# preprocess the cia file
-$(eval e32abiv2_PREFILE_OPTIONS:= $(LICENSERETRY_OPTION) $(PREPROCESSOR_OPTION) $(CPP_OPTION) \
-       $(SYMBIAN_CCFLAGS) $(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(CIADEFS)) $(CPP_LANG_OPTION) \
-       $(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$$(call concat, $(PREINCLUDE_OPTION) ,$$(call dblquote,$(PREINCLUDE))) \
-       $(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE))) \
-       $(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE))) \
-       $(if $(ARMINC),$(if $(RVCTINC), $(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquoteitem,$(RVCTINC)),),) )
-
-
-$(e32abiv2_PREFILE): $1 $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	$(call startrule,cia2cpp,,$1) \
-	$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
-	$(CC) $(e32abiv2_PREFILE_OPTIONS) $(OUTPUT_OPTION) $$@ $$(call dblquote,$1) && \
-	$(CC) -M $(e32abiv2_PREFILE_OPTIONS) --depend_format=unix \
-	  $(OUTPUT_OPTION) $$@ $$(call dblquote,$1) > $(call dblquote,$(e32abiv2_PREFILE).d) \
-	$(call endrule,cia2cpp)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-ifneq "$(DEPENDFILE)" ""
-ifeq ($(NO_DEPEND_INCLUDE),)
-  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-    -include $(DEPENDFILE)
-  endif
-endif
-endif
-
-endef
-
-# Create a rule for each cia file
-ifeq ($(TRANSFORM_CIA),1)
-  $(eval $(foreach e32abiv2_RULE,$(CIAFILES),$(call e32abiv2_CIA2CPP,$(e32abiv2_RULE))))
-endif
-
-# Pure assembler (.s files) ################################
-
-e32abiv2_asm_OPTIONS:=$(LICENSERETRY_OPTION) \
-  $(CC_CORE_ARGS) \
-  $(OPTION_COMPILER) \
-  $(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS)) \
-  $(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE)))     \
-  $(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE)))
-
-# note that the --no_rtti option cannot be passed with the -M option
-# so forcibly remove it when generating ASM dependencies.
-#
-define e32abiv2_asm
-
-$(eval DEPENDFILENAME:=$(1).d)
-$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-$(1): $(2) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	$(call startrule,asmcompile,,$(2)) \
-		$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
-		$(CC) $(e32abiv2_asm_OPTIONS) \
-		$(DEPEND_OPTION) $(call dblquote,$(DEPENDFILENAME)) \
-	 	$$(call dblquote, $$<) $(OUTPUT_OPTION) $$@ \
-	$(call endrule,asmcompile)
-	$(call startrule,asmdependencies) \
-		$(CC) -M $(subst --no_rtti,,$(e32abiv2_asm_OPTIONS)) --depend_format=unix \
-	  	$(OUTPUT_OPTION) $$@ $$(call dblquote,$2) > $(call dblquote,$(DEPENDFILENAME)) \
-	$(call endrule,asmdependencies)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-ifneq "$(DEPENDFILE)" ""
-ifeq ($(NO_DEPEND_INCLUDE),)
-  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-    -include $(DEPENDFILE)
-  endif
-endif
-endif
-
-CREATABLEPATHS:=$$(CREATABLEPATHS) $(INTERMEDIATEPATH)
-
-endef
-
-$(eval $(foreach F,$(ASMFILES), $(call e32abiv2_asm,$(call mapasm2object,$(F)),$(F))))
-CLEANTARGETS:=$(CLEANTARGETS) $(ASMFILES_LINKOBJECTS)
-
-endif # ifneq ($(TARGETTYPE),implib)
-
-
-########################## Build ROMFILE target ############################
-EPOC_ROOT:=$(patsubst %/,%,$(EPOCROOT))
-TOBLDINF:=$(dir $(subst :,,$(subst $(EPOC_ROOT)/,,$(COMPONENT_META))))
-
-# Only build ROMFILE if asked
-ifneq ($(filter ROMFILE,$(call uppercase,$(MAKECMDGOALS))),)
-    ifeq ($(ROMFILE_$(call sanitise,$(TARGET).$(REQUESTEDTARGETEXT))),)
-        ROMFILE_$(call sanitise,$(TARGET).$(REQUESTEDTARGETEXT)):=1
-        ROMDIR:=$(EPOC_ROOT)/epoc32/rom/$(TOBLDINF)
-
-        # Default values
-        ROMFILETYPE:=file
-        ROMFILE:=$(TARGET).$(REQUESTEDTARGETEXT)
-        ROMPATH:=sys/bin/
-        ROMDECORATIONS:=
-        ROMFILETYPE_RAM:=data
-        ROMFILE_RAM:=$(TARGET).$(REQUESTEDTARGETEXT)
-        ROMPATH_RAM:=sys/bin/
-        BUILDROMTARGET:=1
-        ABIDIR:=MAIN
-
-        $(eval $(call DoRomSet))
-
-        ifneq ($(EPOCFIXEDPROCESS),)
-            ROMDECORATIONS:=$(ROMDECORATIONS) fixed
-        endif
-        ifeq ($(PAGED),1)
-            ROMDECORATIONS:=$(ROMDECORATIONS) paged
-        endif
-        ifeq ($(PAGED),0)
-            ROMDECORATIONS:=$(ROMDECORATIONS) unpaged
-        endif
-
-
-        ifeq ($(TESTCODE),TRUE)
-        	# Add 'TEST' to the .iby filename
-        	ROMTEST:=test
-            ifeq ($(TEST_OPTION),BOTH)
-                DATATEXT:="data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).auto.bat test/$(MODULE).auto.bat"\n"data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).manual.bat test/$(MODULE).manual.bat"
-            else
-                ifneq ($(TEST_OPTION),NONE)
-                    DATATEXT:="data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TEST_OPTION).bat test/$(MODULE).$(TEST_OPTION).bat"
-                endif
-            endif
-        else
-        	DATATEXT:=
-        endif
-
-        # ROMTARGET
-        ifneq ($(ROMTARGET),)
-            ifneq ($(words $(ROMTARGET)),1)
-                ROMTARGETALL:=$(ROMTARGET)
-                ROMTARGET:=$(word 1,$(ROMTARGET))
-            endif
-
-            ifeq ($(ROMTARGET),<none>)
-                BUILDROMTARGET:=
-            else
-                ifneq ($(ROMTARGET),+)
-                    ifneq ($(notdir $(ROMTARGET)),)
-                        ROMFILE:=$(notdir $(ROMTARGET))
-                    endif
-                    ifneq ($(dir $(ROMTARGET)),./)
-                        ROMPATH:=$(dir $(ROMTARGET))
-                    endif
-                endif
-            endif
-        endif
-    endif
-
-    ROMFILENAME:=$(ROMDIR)$(PLATFORM)$(ROMTEST).iby
-
-    # RAMTARGET
-    ifneq ($(RAMTARGET),)
-        ROMDECORATIONS_RAM:=" attrib=r"
-        ifneq ($(RAMTARGET),+)
-            ifneq ($(notdir $(RAMTARGET)),)
-                ROMFILE_RAM:=$(notdir $(RAMTARGET))
-            endif
-            ifneq ($(dir $(RAMTARGET)),./)
-                ROMPATH_RAM:=$(dir $(RAMTARGET))
-            endif
-        endif
-    endif
-
-    define BuildRomfileTarget
-        $(ALLTARGET)::ROMFILE
-        ROMFILE::
-	        $(call startrule,rombuild)	\
-	        $(GNUMKDIR) -p $(ROMDIR) \
-            $(if $(ROMFILE_CREATED_$(TOBLDINF)),,&& echo -e "// $(subst $(EPOC_ROOT)/,,$(ROMFILENAME))\n//\n$(DATATEXT)" > $(ROMFILENAME)) \
-            $(if $(BUILDROMTARGET),&& echo "$(ROMFILETYPE)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(1)$(ROMDECORATIONS)" >> $(ROMFILENAME))	\
-	        $(if $(RAMTARGET),&& echo "$(ROMFILETYPE_RAM)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(ROMPATH_RAM)$(ROMFILE_RAM)$(ROMDECORATIONS_RAM)" >> $(ROMFILENAME))	\
-	        $(call endrule,buildromfiletarget)
-    endef
-
-    # When VARIANTTYPE changes, romfile is finished,
-    # apart from if this is a new component......
-    ifneq ($(PREVIOUSVARIANTTYPE),)
-        ifneq ($(VARIANTTYPE),$(PREVIOUSVARIANTTYPE))
-            ifneq ($(ROMFILE_CREATED_$(TOBLDINF)),)
-                ROMFILEFINISHED:=1
-            else
-                ROMFILEFINISHED:=
-            endif
-        endif
-    endif
-
-    # When romfile is finished, don't continue to add to it
-    ifeq ($(ROMFILEFINISHED),)
-        $(eval $(call BuildRomfileTarget,$(ROMPATH)$(ROMFILE)))
-    endif
-
-    # Don't allow romfile to be recreated for every MMP
-    ifeq ($(ROMFILE_CREATED_$(TOBLDINF)),)
-        ROMFILE_CREATED_$(TOBLDINF):=1
-    endif
-
-    # Build other ROMTARGETs if there is more than one
-    ifneq ($(ROMTARGETALL),)
-        RAMTARGET:=
-        $(foreach ROMTARGET,$(wordlist 2,$(words $(ROMTARGETALL)),$(ROMTARGETALL)),$(eval $(call BuildRomfileTarget,$(ROMTARGET))))
-        ROMTARGETALL:=
-    endif
-
-    # Keep track of variant type while romfile is being created
-    PREVIOUSVARIANTTYPE:=$(VARIANTTYPE)
-
-    WHATRELEASE:=$(WHATRELEASE) $(ROMFILENAME)
-    CLEANTARGETS:=$(CLEANTARGETS) $(ROMFILENAME)
-endif
-
-# Deal with test code batch files generation.
-ifneq ($(TESTPATH),)
-
-    CREATABLEPATHS:=$(CREATABLEPATHS) $(EPOCROOT)/epoc32/data/z/test/
-    $(eval $(call MakeTestBatchFiles,$(TARGET),$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)))
-    BATCHFILE_CREATED_$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH):=1
-    TARGET_CREATED_$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)_$(TARGET):=1
-    WHATRELEASE:=$(WHATRELEASE) $(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
-    CLEANTARGETS:=$(CLEANTARGETS) $(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
-endif
-
-###################### End of Build ROMFILE target ######################
-
-# Feature Variation requires a .vmap file to be created for each binary
-#
-ifneq ($(FEATUREVARIANTNAME),)
-ifneq ($(E32TARGET),)
-
-OUTPUTVMAP:=$(E32TARGET).vmap
-WHATRELEASE:=$(WHATRELEASE) $(OUPUTVMAP)
-
-TARGET:: $(OUTPUTVMAP)
-VMAPNEEDS:=$(E32TARGET) $(SOURCE) $(PROJECT_META)
-
-BV_SOURCELIST:=$(addprefix -s ,$(SOURCE) $(PROJECT_META))
-BV_FEATURELIST:=$(addprefix -f ,$(FEATURELISTFILES))
-BV_USER_INCLUDES:=$(addprefix -u ,$(USERINCLUDE))
-BV_SYSTEM_INCLUDES:=$(addprefix -x ,$(SYSTEMINCLUDE))
-
-# translate double quoted macros because $(shell) messes them up in some make engines
-BV_MACROLIST:=$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(if $(ALWAYS_BUILD_AS_ARM),,$(COMPILER_THUMB_DEFINES))
-BV_DEFINES:=$(call makemacrodef,-D,$(subst ",__SBS__QUOTE__,$(BV_MACROLIST)))
-
-# the script to generate our .vmap file and hash value
-VMAPCOMMAND:=$(CREATEVMAP) -o $(OUTPUTVMAP) $(BV_FEATURELIST) $(BV_DEFINES) -p $(PREINCLUDE) $(BV_SOURCELIST) $(BV_USER_INCLUDES) $(BV_SYSTEM_INCLUDES) -c $(CREATEVMAPCPP)
-
-# a recipe to create the .vmap from the "sources" with the createvmap script
-$(call raptor_recipe,createvmap,$(OUTPUTVMAP),$(VMAPNEEDS),$(VMAPCOMMAND))
-
-endif # E32TARGET != ""
-endif # FEATUREVARIANTNAME != ""
-
-########################### CONCLUSION ###################################
-
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-
-## Clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS) ,$(CREATABLEPATHS),))
-
-# For the abld -what target
-$(eval $(call whatmacro,$(filter-out %.sym,$(WHATRELEASE)),WHATARMV5))
-
-endif # FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
-
-## The End
-
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Knows how to build all possible ABIV2 executables for ARM
+#
+#
+
+# Only build feature invariant binaries in non-product builds *and*
+# Only build feature variant binaries in product builds.
+#
+# FEATUREVARIANTNAME != "" implies product build
+# FEATUREVARIANT == 1 implies a feature variant binary
+#
+# test FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
+#
+ifneq ($(or $(call equal,$(FEATUREVARIANTNAME),),$(call equal,$(FEATUREVARIANT),1)),)
+
+$(if $(FLMDEBUG),$(info <flm name='e32abiv2' target='$(TARGET)' type='$(TARGETTYPE)' outputpath='$(OUTPUTPATH)' metasource='$(METASOURCE)' postlinkfiletype='$(POSTLINKFILETYPE)' />))
+
+# Strip switch-type parameters
+#
+POSTLINKTARGETTYPE:=$(strip $(POSTLINKTARGETTYPE))
+UID1:=$(strip $(UID1))
+UID2:=$(strip $(UID2))
+UID3:=$(strip $(UID3))
+SID:=$(strip $(SECUREID))
+VENDORID:=$(strip $(VENDORID))
+AUTOEXPORTS:=$(strip $(AUTOEXPORTS))
+DEFFILE:=$(strip $(DEFFILE))
+IMPORTLIBRARYREQUIRED:=$(strip $(IMPORTLIBRARYREQUIRED))
+EPOCALLOWDLLDATA:=$(strip $(EPOCALLOWDLLDATA))
+PAGED:=$(strip $(PAGED))
+
+# the output directories
+VARIANTPLATFORM:=$(VARIANTPLATFORM)$(FEATUREVARIANTNAME)
+RELEASABLEPATH:=$(RELEASEPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
+INTERMEDIATEPATH:=$(OUTPUTPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
+INTERMEDIATE_PLATFORM_PATH:=$(OUTPUTPATH)/$(VARIANTPLATFORM)
+TRACE_MARKER_PATH:=$(OUTPUTPATH)
+IMPORTLIBPATH:=$(RUNTIME_LIBS_PATH)
+
+# LOCALLY USED VARIABLES
+CLEANTARGETS:=
+WHATRELEASE:=
+
+# Work out which new/delete library to use for binaries.
+CHECKLIB_TYPE:=symc++
+STDCPPTAGFILE:=
+ifeq ($(NOSTDCPP),1)
+  ifeq ($(STDCPP),1)
+    $(info <warning>STDCPP and NOSTDCPP both specified in $(PROJECT_META)</warning>)
+  else
+    ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
+      DEFAULT_NEWLIB:=$(DEFAULT_SYMBIAN_NEWLIB)
+    endif
+  endif
+else
+  ifeq ($(STDCPP),1)
+    CDEFS:=$(CDEFS) __SYMBIAN_STDCPP_SUPPORT__
+    ifneq ($(SUPPORTS_STDCPP_NEWLIB),)
+      ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
+        DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
+      endif
+      CHECKLIB_TYPE:=stdc++
+      STDCPPTAGFILE:=$(EPOCROOT)/epoc32/tools/tag/tag_elf
+    endif
+  endif
+endif
+
+# If NEWLIB is specified in the MMP file, it overrides all the past stuff.
+ifeq ($(NEWLIB),)
+  NEWLIB:=$(DEFAULT_NEWLIB)
+endif
+
+
+##########################################################################
+## OUTPUTS - externally relevant targets that this FLM generates
+
+
+ifeq ($(EXPORTLIBRARY),)
+  EXPORTLIBRARY:=$(TARGET)
+endif
+
+# This will insert the file version between the name and the extension.
+# If there is more than one dot in generated filename the inserted position will be
+# BEFORE the last but two dot. E.g name1.name2.name3.dll to name1.name2{version}.name3.dll
+LIBEXT:=$(lastword $(subst .,$(CHAR_SPACE) ,$(EXPORTLIBRARY)))
+LIBBASE:=$(patsubst %.$(LIBEXT),%,$(EXPORTLIBRARY))
+ifneq ($(findstring .,$(EXPORTLIBRARY)),)
+  # Please note $(EXPORTLIBRARY) doesn't include target type.
+  VER_E32IMPORTLIBBASE:=$(IMPORTLIBPATH)/$(LIBBASE){$(VERSIONHEX)}.$(LIBEXT)
+else
+  VER_E32IMPORTLIBBASE:=$(IMPORTLIBPATH)/$(EXPORTLIBRARY){$(VERSIONHEX)}
+endif
+
+# Postlinkable targets need to be linked and elf2e32'd
+ifneq ($(DOPOSTLINK),)
+    E32TARGET:=$(RELEASABLEPATH)/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))
+    LINK_TARGET:=$(RELEASABLEPATH)/$(TARGET)$(if $(EXPLICITVERSION),{$(VERSIONHEX)},).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).sym
+    MAPFILE:=$(RELEASABLEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).map
+else
+  E32TARGET:=
+  LINK_TARGET:=
+  MAPFILE:=
+endif
+
+# libs and klibs, on the other hand need to be archived
+ifneq ($(call isoneof,$(TARGETTYPE),lib klib stdlib),)
+  ARTARGET:=$(RELEASABLEPATH)/$(TARGET).lib
+  # We need libs and klibs before we can link stuff with them:
+  LIBRARY:: $(ARTARGET)
+else
+  ARTARGET:=
+endif
+
+
+ifneq ($(IMPORTLIBRARYREQUIRED),) # no dso files for plugins, animation dlls etc
+  # make sure we don't build import libraries more than once for UDEB and UREL
+  # Without this, wierd target-specific variable problems happen with LIBRARY in particular
+
+  TMP_IMPORTLIBTARGET_ROOT:=$(IMPORTLIBPATH)/$(EXPORTLIBRARY)
+
+  # ABIv2 .dso
+  IMPORTLIBTARGET_DSO:=
+  IMPORTLIBTARGETVERSIONED_DSO:=
+
+  BUILDMARKER_IMPORTLIBTARGET_DSO:=TARGET_$(subst :,,$(VER_E32IMPORTLIBBASE)).dso
+  WHATRELEASE:=$(WHATRELEASE) $(if $(EXPLICITVERSION),,$(TMP_IMPORTLIBTARGET_ROOT).dso)
+  WHATRELEASE:=$(WHATRELEASE) $(VER_E32IMPORTLIBBASE).dso
+  ifeq ($($(BUILDMARKER_IMPORTLIBTARGET_DSO)),)
+    IMPORTLIBTARGET_DSO:=$(TMP_IMPORTLIBTARGET_ROOT).dso
+    IMPORTLIBTARGETVERSIONED_DSO:=$(VER_E32IMPORTLIBBASE).dso
+    $(eval $(BUILDMARKER_IMPORTLIBTARGET_DSO):=1)
+  endif
+
+  # ABIv1 .lib (for specific builds, toolchains and host OS platforms only)
+  IMPORTLIBTARGET_LIB:=
+  IMPORTLIBTARGETVERSIONED_LIB:=
+  BUILDMARKER_IMPORTLIBTARGET_LIB:=TARGET_$(subst :,,$(VER_E32IMPORTLIBBASE)).lib
+  # Only for builds that require and support them, and only on windows
+  ifeq ($(OSTYPE),cygwin)
+  ifeq ($(GENERATE_ABIV1_IMPLIBS),1)
+    WHATRELEASE:=$(WHATRELEASE) $(if $(EXPLICITVERSION),,$(TMP_IMPORTLIBTARGET_ROOT).lib)
+    WHATRELEASE:=$(WHATRELEASE) $(VER_E32IMPORTLIBBASE).lib
+    ifeq ($($(BUILDMARKER_IMPORTLIBTARGET_LIB)),)
+      IMPORTLIBTARGET_LIB:=$(TMP_IMPORTLIBTARGET_ROOT).lib
+      IMPORTLIBTARGETVERSIONED_LIB:=$(VER_E32IMPORTLIBBASE).lib
+      $(eval $(BUILDMARKER_IMPORTLIBTARGET_LIB):=1)
+    endif
+  endif
+  endif
+endif
+
+# Try to make sure that we get the right linkas name
+# If linkas is specified then split it up and
+# put the hex version number in the right place
+ifeq ($(LINKAS),)
+  LINKASNAME=$(TARGET)
+  LINKASTYPE=$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))
+else
+  SPLIT_LINKAS=$(subst ., ,$(LINKAS))
+  LINKASNAME=$(word 1,$(SPLIT_LINKAS))
+  LINKASTYPE=$(word 2,$(SPLIT_LINKAS))
+endif
+
+# ignore UID3 if it is zero
+ifeq ($(UID3),00000000)
+  LINKASVERSIONED=$(LINKASNAME){$(VERSIONHEX)}.$(LINKASTYPE)
+else
+  LINKASVERSIONED=$(LINKASNAME){$(VERSIONHEX)}$(if $(UID3),[$(UID3)],).$(LINKASTYPE)
+endif
+
+##########################################################################
+## TARGET GROUPS ##
+RELEASABLES:=$(strip $(E32TARGET) $(ARTARGET) $(LINK_TARGET) $(MAPFILE))
+# More targets to be added later
+TARGETS:=$(strip $(E32TARGET) $(IMPORTLIBTARGET) $(LINK_TARGET) $(ARTARGET))
+
+CREATABLEPATHS:=$(OUTPUTPATH)
+CREATABLEPATHS:=$(CREATABLEPATHS) $(INTERMEDIATE_PLATFORM_PATH)
+CREATABLEPATHS:=$(CREATABLEPATHS) $(INTERMEDIATEPATH)
+CREATABLEPATHS:=$(CREATABLEPATHS) $(RELEASABLEPATH)
+CREATABLEPATHS:=$(CREATABLEPATHS) $(RUNTIME_LIBS_PATH)
+CREATABLEPATHS:=$(CREATABLEPATHS) $(IMPORTLIBPATH)
+WHATRELEASE:=$(WHATRELEASE) $(RELEASABLES)
+
+
+
+## HIGH LEVEL Targets ##
+.PHONY:: $(ALLTARGET)
+
+## GLOBAL TARGETS ############################################################
+$(ALLTARGET):: $(RELEASABLES)
+TARGET:: $(RELEASABLES)
+
+## Internal targets ##
+
+# Determine the name of the generated DSO file ###############################
+# This is to generate the dso with the Some{Versionhex}.file.dso
+# It reproduces what appears to be a problem in the current build system
+# that affects messageintercept{000a0000}.esockdebug.dso whose
+# filename differs from it's "linkas" name.
+E32VAR:=$(subst .,$(CHAR_SPACE) ,$(TARGET))
+E32SOME:=$(word 1,$(E32VAR))
+E32VAR2:=$(patsubst $(E32SOME).%,%,$(TARGET))
+
+# Separate '_SH' variables created for output into bash - Preserves '{' and '}'
+
+ifneq ($(findstring .,$(TARGET)),)
+	DSODEFFILENAMEBASE:=$(E32SOME){$(VERSIONHEX)}.$(E32VAR2)
+else
+	DSODEFFILENAMEBASE:=$(TARGET){$(VERSIONHEX)}
+endif
+GENERATED_DSO:=$(call dblquote,$(INTERMEDIATEPATH)/$(DSODEFFILENAMEBASE).dso)
+GENERATED_DEFFILE:=$(INTERMEDIATEPATH)/$(DSODEFFILENAMEBASE).def
+
+## IMPORT LIBRARY  ###########################################################
+
+# Static libraries will be postlinked when they are used so don't try to postlink them
+
+ifneq ($(IMPORTLIBRARYREQUIRED),)
+ifneq ($(or $(DEFFILE),$(EXPORTUNFROZEN)),)
+# Both ABIv2 .dso and ABIv1 .lib import library generation require a processed .def file,
+# unless EXPORTUNFROZEN is being used
+PREPPEDDEFFILE:=
+ifneq ($(DEFFILE),)
+  ifeq ($(EXPORTUNFROZEN),)
+    PREPPEDDEFFILE:=$(INTERMEDIATEPATH)/$(TARGET).prep
+    CLEANTARGETS:=$(CLEANTARGETS) $(PREPPEDDEFFILE)
+    define importlibtarget_prepfile
+      $(PREPPEDDEFFILE): $(DEFFILE)
+		$(call startrule,importlibtarget_prepfile,FORCESUCCESS) \
+		$(PREPDEF) $(call dblquote,$(DEFFILE)) $(call dblquote,$(PREPPEDDEFFILE)) \
+		$(call endrule,importlibtarget_prepfile)
+    endef
+    $(eval $(importlibtarget_prepfile))
+  endif
+endif
+
+# ABIv2 .dso
+ifneq ($(IMPORTLIBTARGET_DSO),) # check that we haven't tried to specify this target already
+
+  ifneq ($(EXPLICITVERSION),)
+    TARGETS:=$(strip $(TARGETS) $(IMPORTLIBTARGETVERSIONED_DSO))
+
+    # Add this importlibrary to our global targets
+    LIBRARY:: $(IMPORTLIBTARGETVERSIONED_DSO)
+    $(ALLTARGET):: $(IMPORTLIBTARGETVERSIONED_DSO)
+    TARGET:: $(IMPORTLIBTARGETVERSIONED_DSO)
+
+  else
+    TARGETS:=$(strip $(TARGETS) $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO))
+
+    # Add this importlibrary to our global targets
+    LIBRARY:: $(IMPORTLIBTARGET_DSO)
+    $(ALLTARGET):: $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO)
+    TARGET:: $(IMPORTLIBTARGETVERSIONED_DSO) $(IMPORTLIBTARGET_DSO)
+
+
+  endif
+
+
+
+  ifneq ($(EXPORTUNFROZEN),) # Unfrozen  - warn and create .dso as side-effect of the final postlink
+    $(info <warning project='$(PROJECT_META)' component='$(COMPONENT_META)'>EXPORTUNFROZEN present in $(PROJECT_META) - unfrozen exports will be represented in import library.</warning> )
+    define importlibtarget_unfrozen
+      $(IMPORTLIBTARGET_DSO): $(IMPORTLIBTARGETVERSIONED_DSO)
+		$(call startrule,importlibtarget_unfrozen,FORCESUCCESS) \
+		$(GNUCP) $$(call dblquote,$$<) $$(call dblquote,$$@) \
+		$(call endrule,importlibtarget_unfrozen)
+
+       CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
+
+    endef
+
+    define importlibtarget_unfrozen_ver
+      $(IMPORTLIBTARGETVERSIONED_DSO): $(E32TARGET)
+		$(call startrule,importlibversioned_unfrozen,FORCESUCCESS) \
+		$(GNUCP) "$(GENERATED_DSO)" "$$@" \
+		$(call endrule,importlibversioned_unfrozen)
+
+      CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
+    endef
+
+    ifeq ($(EXPLICITVERSION),)
+      # Generate the general dso if we aren't
+      # being asked to make just the specific version.
+      $(eval $(importlibtarget_unfrozen))
+    endif
+
+    $(eval $(importlibtarget_unfrozen_ver))
+  else
+    ifneq ($(DEFFILE),) # Frozen - use the def file and create .dso directly
+      define importlibtarget_func
+       $(IMPORTLIBTARGET_DSO): $(IMPORTLIBTARGETVERSIONED_DSO)
+	   $(call startrule,importlibtarget,FORCESUCCESS) \
+	   $(GNUCP) "$$<" "$$@" \
+	   $(call endrule,importlibtarget)
+
+          CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGET_DSO)
+      endef
+
+      ifeq ($(EXPLICITVERSION),)
+          # Generate the general dso if we aren't
+          # being asked to make just the specific version.
+          $(eval $(importlibtarget_func))
+      endif
+
+      define importlibtargetversioned_func
+        $(IMPORTLIBTARGETVERSIONED_DSO): $(ELF2E32) $(PREPPEDDEFFILE)
+	      $(call startrule,importlibversioned,FORCESUCCESS) \
+	      $(ELF2E32) --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0))  --version=$(VERSION)  	   \
+	 	  --definput="$(PREPPEDDEFFILE)" 				   \
+	 	  --dso=$$(call dblquote,$$@) 				   \
+	 	  --linkas=$(call dblquote,$(LINKASVERSIONED)) \
+	      $(call endrule,importlibversioned)
+
+              CLEANTARGETS:=$$(CLEANTARGETS) $(IMPORTLIBTARGETVERSIONED_DSO)
+      endef
+      $(eval $(importlibtargetversioned_func))
+    endif #  ifneq ($(DEFFILE),)
+  endif #  ifneq ($(EXPORTUNFROZEN),)
+endif #  ifneq ($(IMPORTLIBTARGET_DSO),)
+
+# ABIv1 .lib
+ifneq ($(IMPORTLIBTARGETVERSIONED_LIB),) # check that we haven't tried to specify this target already
+  CLEANTARGETS:=$(CLEANTARGETS) $(IMPORTLIBTARGETVERSIONED_LIB) $(IMPORTLIBTARGET_LIB)
+
+  define abiv1_generatelib
+
+    ifeq ($(EXPLICITVERSION),)
+      LIBRARY:: $(IMPORTLIBTARGETVERSIONED_LIB) $(IMPORTLIBTARGET_LIB)
+
+    else
+      LIBRARY:: $(IMPORTLIBTARGETVERSIONED_LIB)
+
+    endif
+
+    # If frozen, a prepped .def file is used as the basis for .lib creation
+    # If unfrozen, .lib files are based on the .def file generated by the final postlink
+    $(IMPORTLIBTARGETVERSIONED_LIB): $(if $(EXPORTUNFROZEN),$(E32TARGET),$(PREPPEDDEFFILE))
+	$(call startrule,importlibversioned_abiv1) \
+        if [ -f "$(EPOCROOT)/epoc32/tools/def2dll.pl" -a -f "$(if $(EXPORTUNFROZEN),$(call dblquote,$(GENERATED_DEFFILE)),$(PREPPEDDEFFILE))" ]; then \
+                 $(PERL) $(EPOCROOT)/epoc32/tools/def2dll.pl \
+		--path=$(IMPORTLIBPATH) \
+		--bldpath=$(INTERMEDIATEPATH) \
+		--import=$(notdir $(basename $(IMPORTLIBTARGETVERSIONED_LIB))) \
+		--deffile="$(if $(EXPORTUNFROZEN),$(call dblquote,$(GENERATED_DEFFILE)),$(PREPPEDDEFFILE))" \
+		--linkAs=$(call dblquote,$(LINKASVERSIONED)) \
+		--inter ; fi \
+	$(call endrule,importlibversioned_abiv1)
+
+    ifeq ($(EXPLICITVERSION),)
+      $(IMPORTLIBTARGET_LIB): $(IMPORTLIBTARGETVERSIONED_LIB)
+	$(call startrule,importlibtarget_abiv1) \
+	if [ -f $(EPOCROOT)/epoc32/tools/def2dll.pl ]; then $(GNUCP) "$$<" "$$@" ; fi \
+	$(call endrule,importlibtarget_abiv1)
+    endif
+  endef
+
+  $(eval $(abiv1_generatelib))
+endif #  ifneq ($(IMPORTLIBTARGET_LIB),)
+endif #  ($(or $(DEFFILE),$(EXPORTUNFROZEN)),)
+endif #  ifneq ($(IMPORTLIBRARYREQUIRED),)
+
+
+## POSTLINK ##################################################################
+
+# Set up the name of the exports file if this is a customdll
+EXPTARGET:=
+ifneq ($(DOPOSTLINK),)
+  ifneq ($(and $(or $(STATICLIBRARY),$(ARMLIBS),$(ARMRT)),$(DEFFILE)),)
+    EXPTARGET:=$(INTERMEDIATE_PLATFORM_PATH)/$(notdir $(VER_E32IMPORTLIBBASE)).exp
+  endif
+endif
+
+# Generating the import library is enough if TARGETTYPE=implib #############
+
+ifneq ($(DOPOSTLINK),)
+include $(FLMHOME)/e32postlink.mk
+endif # ifneq ($(DOPOSTLINK),)
+
+ifneq ($(TARGETTYPE),implib)
+
+## CUSTOM DLLS ###############################################################
+# exp file
+#
+# This tends to help getting exported objects
+# out of the arm libs and into custom dlls.
+
+ifneq ($(EXPTARGET),)
+ifeq ($(TARGET_$(EXPTARGET)),)
+# We only need one of these exptargets for UDEB and UREL
+TARGET_$(EXPTARGET):=1
+
+EXPTARGETASMFILE:=$(INTERMEDIATE_PLATFORM_PATH)/$(notdir $(VER_E32IMPORTLIBBASE)).s
+
+define e32expgen_func
+$(EXPTARGET): $(DEFFILE) $(ELF2E32)
+	$(call startrule,expgen) \
+	$(ELF2E32) \
+	   --definput=$$(call dblquote,$(DEFFILE)) \
+	   --dump=a \
+	   --output=$(call dblquote,$(EXPTARGETASMFILE)) && \
+	$(ASM) $(TARGET_ARCH_OPTION) $(AAPCS_OPTION) $(ASM_OUTPUT_OPTION) $$(call dblquote, $$@) $(EXPTARGETASMFILE) \
+	$(call endrule,expgen)
+endef
+
+$(eval $(e32expgen_func))
+CLEANTARGETS:=$(CLEANTARGETS) $(EXPTARGET) $(EXPTARGETASMFILE)
+endif
+endif
+
+
+
+
+## SOURCE FILES ##############################################################
+
+# Source files can be either C++ files (.cpp) or Assmbler-in-C++ files (.cia)
+# We have to split the two because they have the same link stage, the compile
+# stage is different for each.
+
+CPPFILEEXTENSIONS:=.cpp .CPP .Cpp .CPp .CpP .cPP .cpP .cPp .cc .CC \
+	.Cc .c++ .C++ .cxx .CXX .Cxx .cXx .CxX .CXx .cC .cXX .cxX
+CFILEEXTENSIONS:=.c .C
+CIAFILEEXTENSIONS:=.CIA .cia .Cia .cIa .cIA .ciA .CIa .CiA
+ASMFILEEXTENSIONS:=.s .S
+
+
+# Extract the CPP files from our sources
+CPPFILES:=$(call extractfilesoftype,$(CPPFILEEXTENSIONS),$(SOURCE))
+CFILES:=$(call extractfilesoftype,$(CFILEEXTENSIONS),$(SOURCE))
+ASMFILES:=$(call extractfilesoftype,$(ASMFILEEXTENSIONS),$(SOURCE))
+
+# Find out what assember-in-c files there are
+# If appropriate, work out what CPP files will be created from the assembler files
+CIAFILES:=$(call extractfilesoftype,$(CIAFILEEXTENSIONS),$(SOURCE))
+CIA_CPPFILES:=
+ifeq ($(TRANSFORM_CIA),1)
+  CIA_CPPFILES:=$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),_.cpp,$(CIAFILES)))
+else
+
+endif
+
+## LINK ######################################################################
+# Bring together all the .o files compiled from  .cpp, .c, .s and .cia files.
+# These files are stored in the "non-releasable" output diretory.
+
+define mapcpp2object
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CPPFILEEXTENSIONS),.o,$1))
+endef
+
+define mapc2object
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CFILEEXTENSIONS),.o,$1))
+endef
+
+define mapasm2object
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(ASMFILEEXTENSIONS),.o,$1))
+endef
+
+define mapcia2object
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),_.o,$1))
+endef
+
+# Determine what object files will be linked by using the source files.
+CPPFILES_LINKOBJECTS:=$(call mapcpp2object,$(CPPFILES))
+CFILES_LINKOBJECTS:=$(call mapc2object,$(CFILES))
+ifeq ($(TRANSFORM_CIA),1) 
+  CIAFILES_LINKOBJECTS:=$(patsubst %_.cpp,%_.o,$(CIA_CPPFILES))
+else
+  CIAFILES_LINKOBJECTS:=$(call mapcia2object,$(CIAFILES))
+endif
+ASMFILES_LINKOBJECTS:=$(call mapasm2object,$(ASMFILES))
+
+# Try to link object files in the order in which the source files were specified.
+# This makes BC comparisons with non-Raptor builds easier.
+# Use the order of the source list to establish the order of the object files:
+LINKOBJECTS:=$(call relocatefiles,$(INTERMEDIATEPATH),$(SOURCE))
+# Replace the file extensions of the Source files with .o (or _.o for cia files) now
+# the list will contain the object files in the same order as the list of source files.
+LINKOBJECTS:=$(foreach FILE,$(LINKOBJECTS),$(basename $(FILE))$(if $(filter $(addprefix %,$(CIAFILEEXTENSIONS)),$(FILE)),_).o)
+
+ifneq ($(MULTIFILE_ENABLED),)
+MULTIFILEOBJECT:=$(INTERMEDIATEPATH)/$(TARGET).$(POSTLINKFILETYPE)_$(VARIANTTYPE)_multifileobject.o
+MULTIFILE_VIAFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_multifile.via
+endif
+
+## Via file ####################################
+# list of all objects to be linked
+#
+VIAFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_objects.via
+ifneq ($(GENERATELINKERFEEDBACK),)
+FEEDBACKFILE:=$(INTERMEDIATEPATH)/$(TARGET)_$(VARIANTTYPE)_feedback.fdb
+endif
+
+# The groupin10 macro allows us to construct a via file, 10 objects at a time
+# to avoid limits on argument lengths and sizes on Windows.
+# It expands to a list of commands, each of which is on a separate line.
+# This causes the shell to be invoked once for each line but each line should
+# be shorter than the maximum allowed by windows.
+define groupin10
+	$(if $1,@echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >>$(VIAFILE),)
+	$(if $1,$(call groupin10,$(wordlist 11,$(words $1),$1)),@true)
+endef
+
+################################################
+
+
+## Link-type selection:
+#	runtime static libraries link via AR
+ifneq ($(ARTARGET),)
+# Assuming that there are no libdeps in this case because this is probably one of the
+# Runtime libraries which has no deps.
+
+define artarget_func
+$(ARTARGET): $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(LINKOBJECTS)) $(STDCPPTAGFILE)
+	$(if $(MULTIFILE_ENABLED),,@echo "$(STDCPPTAGFILE)" > $(VIAFILE);
+	$(call groupin10,$(LINKOBJECTS)) ;)
+	$(call startrule,ar,FORCESUCCESS) \
+	$$(call dblquote,$(AR)) $(ARCHIVER_CREATE_OPTION) $$@ $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(COMMANDFILE_OPTION)$(VIAFILE)) \
+	$(if $(DUMPBCINFO),&& $(FROMELF) -v $$@  > $$@.elfdump,)  \
+	$(call endrule,ar)
+endef
+$(eval $(artarget_func))
+
+CLEANTARGETS:=$(CLEANTARGETS) $(VIAFILE) $(ARTARGET) $(if $(DUMPBCINFO),$(ARTARGET).elfdump,)
+endif
+
+
+
+# Targettype is some type of DLL or EXE (or derivative)
+ifneq ($(LINK_TARGET),)
+
+escaped_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call ruleEscape,$(wildcard $(subst $(CHAR_SPACE),?,$(RVCTLIB)/*/$(L)))))
+quoted_located_ARMLIBS:=$(foreach L,$(ARMLIBS),$(call dblquoteitem,$(wildcard $(RVCTLIB)/*/$(L))))
+located_STATICLIBRARIES:=$(foreach L,$(STATICLIBRARY),$(STATIC_LIBRARY_DIR)/$(L).lib)
+e32abiv2_LIBS:=$(EXPTARGET) $(LINKER_STUB_LIBRARY) $(if $(STATIC_RUNTIME_LIB),$(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB),) $(located_STATICLIBRARIES)
+# DLLS and EXEs - These objects are linked by a linker
+ifeq ($(ARMRT),)
+# Some of the runtime libraries do not set ARMRT because of a circular reference
+# problem; we need to stop these from linking to their own dso and not link to
+# the STATIC_LIBS_LIST.
+ifneq ($(findstring $(TARGET).dso,$(RUNTIME_LIBS_LIST)),)
+# (almost) ARM RUNTIME LIBS
+REDUCED_RUNTIME_LIBS_LIST:=$(subst $(TARGET).dso,,$(RUNTIME_LIBS_LIST))
+
+ifeq ($(VARIANTTYPE),udeb)
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
+else
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY)) $(addprefix $(RUNTIME_LIBS_PATH)/,$(REDUCED_RUNTIME_LIBS_LIST)) 
+endif
+quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
+escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
+
+else
+# NORMAL
+#
+ifeq ($(VARIANTTYPE),udeb)
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG))
+else
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY))
+endif
+ifeq ($(HAS_DEDICATED_OP_NEWDEL_LIB),1)
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(NEWLIB))
+endif
+quoted_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(call addquotedprefix,$(STATIC_LIBS_PATH)/,$(STATIC_LIBS_LIST)) $(quoted_located_ARMLIBS)
+escaped_e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(RUNTIME_LIBS_PATH)/,$(RUNTIME_LIBS_LIST)) $(addprefix $(call ruleEscape,$(STATIC_LIBS_PATH)/),$(STATIC_LIBS_LIST)) $(escaped_located_ARMLIBS)
+
+endif
+else
+# ARM RUNTIME LIBS
+ifeq ($(VARIANTTYPE),udeb)
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY_DEBUG)) 
+else
+  e32abiv2_LIBS:=$(e32abiv2_LIBS) $(addprefix $(IMPORTLIBPATH)/,$(LIBRARY))
+endif
+quoted_e32abiv2_LIBS=$(e32abiv2_LIBS) $(quoted_located_ARMLIBS)
+escaped_e32abiv2_LIBS=$(e32abiv2_LIBS) $(escaped_located_ARMLIBS)
+endif
+
+# NOTE: the groupin10 macro must be used before a call to the "startrule" macro
+# because the code between startrule and endrule is packaged up into one
+# commandline which would defeat the purpose of groupin10.
+# This is undesirable because viafile generation commands appear
+# outside the relevant tags but it is also unavoidable.
+define linktarget_func
+## The actual link target, dependencies and build step
+$(LINK_TARGET): $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS),$(LINKOBJECTS)) $(escaped_e32abiv2_LIBS) $(LINKER_ENTRYPOINT_LIBDEP) $(if $(SUPPORTS_STDCPP_NEWLIB),$(CHECKLIB)) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),)
+	$(if $(MULTIFILE_ENABLED),,@echo -n "" > $(VIAFILE);
+	$(call groupin10,$(LINKOBJECTS)) ;)
+	$(call startrule,link) \
+	$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
+	$(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(located_STATICLIBRARIES),$(CHECKLIB) $(CHECKLIB_TYPE) --elf $(call dblquote,$(located_STATICLIBRARIES)) &&,),) \
+	$(LD) $(LINKER_MISC_FLAGS) $(LINKER_DEFAULT_LIB_PATHS) $(SYMBIAN_LINK_FLAGS) $(if $(DEBUG_INFO),$(LINKER_DEBUG_OPTION),$(LINKER_NODEBUG_OPTION)) \
+	  $(if $(ARMLIBS),$(LD_WARNINGS_SUPPRESSION_ARMLIBS),) \
+	  $(SHARED_OBJECT_OPTION) $(SPLIT_OPTION) \
+	  $(RW_BASE_OPTION) 0x400000 \
+	  $(LINKER_ARCH_OPTION) \
+	  $(SYMVER_OPTION) $(SO_NAME_OPTION) $(call dblquote,$(LINKASVERSIONED)) \
+	  $(LINKER_ENTRYPOINT_SETTING) \
+	  -o $$(call dblquote,$$@) \
+	  $(if $(LTCG),$(LTCG_OPTION),) \
+	  $(LINKER_SYMBOLS_OPTION) $(LINKER_SYMBOLS_FILE_OPTION) \
+	  $(call dblquote,$(MAPFILE)) \
+  	  $(LINKEROPTION) \
+	  $(if $(MULTIFILE_ENABLED),$(call dblquote,$(MULTIFILEOBJECT) $(CIAFILES_LINKOBJECTS)),$(COMMANDFILE_OPTION)$(call dblquote,$(VIAFILE))) \
+          $(if $(GENERATELINKERFEEDBACK),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \
+	  $(if $(LINKER_ADD_STATIC_RUNTIME),$(if $(STATIC_RUNTIME_LIB),$(LINKER_GROUP_START_OPTION) $(STATIC_RUNTIME_DIR)/$(STATIC_RUNTIME_LIB) $(LINKER_GROUP_END_OPTION),)) \
+	  $(quoted_e32abiv2_LIBS) $(LINKER_DEFAULT_LIBS)\
+	$(call endrule,link)
+
+$(MAPFILE): $(LINK_TARGET)
+endef
+$(eval $(linktarget_func))
+
+CLEANTARGETS:=$(CLEANTARGETS) $(LINK_TARGET) $(if $(GENERATELINKERFEEDBACK),$(FEEDBACKFILE)) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT))
+CLEANTARGETS:=$(CLEANTARGETS) $(VIAFILE)
+CLEANTARGETS:=$(CLEANTARGETS) $(MAPFILE)
+WHATRELEASE:=$(WHATRELEASE) $(MAPFILE)
+
+endif # if TARGETTYPE lib
+
+
+## Run trace compiler ##############################################
+ifeq ($(UID3),)
+ ifeq ($(UID2),)
+  USE_TRACE_COMPILER:=
+ else
+  UID_TC:=$(UID2)
+ endif
+else
+ UID_TC:=$(UID3)
+endif
+
+# USE_TRACE_COMPILER defaults to blank in Raptor config.
+# Users can turn TC on by setting it to 1 in user config.
+ifneq ($(USE_TRACE_COMPILER),)
+  include $(FLMHOME)/tracecompiler.mk
+endif
+
+CC_CPPONLY_ARGS:=$(SYMBIAN_CCFLAGS) $(if $(DEBUG_INFO),-g) $(DEBUG_FORMAT) \
+  $(RUNTIME_SYMBOL_VISIBILITY_OPTION) $(EXCEPTIONS) \
+  $(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION) \
+  $(TARGET_ARCH_OPTION) $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) \
+  $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
+  $(CPPONLYOPTION) $(INSTRUCTION_SET) \
+  $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
+  $(COMPILER_FPU_FLAGS)
+
+## COMPILE CPP Files #################################################################
+
+# For ARMCC we can compile all sourcefiles with one invocation
+# The pathprep macro is used to make sure that forward slashes in options
+# are not interpreted as being paths by CYGWIN on Windows.  On windows
+# pathprep makes a forward slash into two.
+
+# The majority of ARMCC arguments are common across all compiler invocations
+# Order is significant here in that OPTION_REPLACE here and in ABLD should
+# have the same impact
+CC_CORE_ARGS:=$(SYMBIAN_CCFLAGS) $(if $(DEBUG_INFO),-g) $(DEBUG_FORMAT) \
+  $(RUNTIME_SYMBOL_VISIBILITY_OPTION) $(EXCEPTIONS) \
+  $(CC_WARNINGS_CONTROL_OPTION) $(CC_ERRORS_CONTROL_OPTION) \
+  $(TARGET_ARCH_OPTION) $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) \
+  $(EXPORT_VTBL_OPTION) $(NO_UNALIGNED_ACCESS) $(VFE_OPTION) $(AAPCS_OPTION) \
+  $(COMPILE_ONLY_OPTION) $(INSTRUCTION_SET) \
+  $(if $(ALWAYS_BUILD_AS_ARM),$(ARM_INSTRUCTION_SET),$(THUMB_INSTRUCTION_SET) $(call makemacrodef,-D,$(COMPILER_THUMB_DEFINES))) \
+  $(COMPILER_FPU_FLAGS)
+
+ifeq ($(STDCPP),1)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(STDCPP_INCLUDE)))
+endif
+
+define option_replace
+  # Process a single, combined, item of the form 'search<->replace' in order to modify the command line tool call
+  # We split this into its component arguments for use in substitutions
+  # Spaces will have been escaped elsewhere to maintain distinct words, so we resurrect these
+  # after the split.
+  SEARCH:=$(subst %20,$(CHAR_SPACE),$(word 1,$(subst <->,$(CHAR_SPACE),$(1))))
+  REPLACE:=$(subst %20,$(CHAR_SPACE),$(word 2,$(subst <->,$(CHAR_SPACE),$(1))))
+
+  # Depending on whether there's a wildcard in the search, we may require either a normal $(subst) or a $(patsubst)
+  PATSUBST:=$$(if $$(findstring %,$$(SEARCH)),1,)
+
+  ifeq ($$(PATSUBST),1)
+    CC_CORE_ARGS:=$$(patsubst $$(SEARCH),$$(REPLACE),$$(CC_CORE_ARGS))
+  else
+    CC_CORE_ARGS:=$$(subst $$(SEARCH),$$(REPLACE),$$(CC_CORE_ARGS))
+  endif
+endef
+$(foreach ITEM,$(OPTION_REPLACE_COMPILER),$(eval $(call option_replace,$(ITEM))))
+
+define e32abiv2_compile
+
+$(eval DEPENDFILENAME:=$(1).d)
+$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+# $4 is for language specific options (e.g. C++ vs C)
+$(1): $(2) $(PROJECT_META) $(if $(MULTIFILE_ENABLED),,$(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER),) $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACKFILE),)
+	$(call startrule,compile,,$(2))		\
+		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
+		$(if $(MULTIFILE_ENABLED), echo $(2) $(3) > $(MULTIFILE_VIAFILE) ;,) \
+		$(CC) $(LICENSERETRY_OPTION) \
+			$(CC_CORE_ARGS) \
+			$(OPTION_COMPILER) $(if $(MULTIFILE_ENABLED),$(4),$(3)) \
+			$(if $(LTCG),$(LTCG_OPTION),) \
+			$(if $(USE_PROFILER_FEEDBACK),--profile=$(call dblquote,$(ARM_PROFILER_FILE)),) \
+			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
+			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
+			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
+			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                      \
+			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
+			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
+			$(if $(NOHIDEALL),--no_hide_all,) \
+			$(DEPEND_OPTION) $(call dblquote,$(1).d) \
+                        $(if $(LINKERFEEDBACK_STAGE2),$(FEEDBACK_OPTION)$(call dblquote,$(FEEDBACKFILE))) \
+			$(if $(MULTIFILE_ENABLED),--multifile $(OUTPUT_OPTION) $(MULTIFILEOBJECT) \
+			--via $$(call dblquote, $(MULTIFILE_VIAFILE)),$(OUTPUT_OPTION) $$@ $$(call dblquote, $$<))  \
+	$(call endrule,compile)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+ifneq "$(DEPENDFILE)" ""
+ifeq ($(NO_DEPEND_INCLUDE),)
+  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+    -include $(DEPENDFILE)
+  endif
+endif
+endif
+
+# individual source file compilation
+SOURCETARGET_$(call sanitise,$(2)): $(1)
+
+endef
+
+# Evaluate .cpp and .c files in one go for multifile, cannot do in separate steps since we have the same target.
+# This implementation means the .c files will always get put at the end of the .via file. Maybe there is a better way to do this?
+$(if $(MULTIFILE_ENABLED),$(eval $(call e32abiv2_compile,$(MULTIFILEOBJECT),$(CPPFILES),$(CFILES),$(CPP_LANG_OPTION))),$(foreach F,$(CPPFILES),$(eval $(call e32abiv2_compile,$(call mapcpp2object,$(F)),$(F),$(CPP_LANG_OPTION)))))
+$(if $(MULTIFILE_ENABLED),,$(foreach F,$(CFILES),$(eval $(call e32abiv2_compile,$(call mapc2object,$(F)),$(F),$(C_LANG_OPTION)))))
+ifneq ($(TRANSFORM_CIA),1)
+  $(if $(MULTIFILE_ENABLED),,$(foreach F,$(CIAFILES),$(eval $(call e32abiv2_compile,$(call mapcia2object,$(F)),$(F),$(CPP_LANG_OPTION) $(COMPILER_CIA_FLAGS)))))
+endif
+
+CLEANTARGETS:=$(CLEANTARGETS) $(if $(MULTIFILE_ENABLED),$(MULTIFILE_VIAFILE) $(MULTIFILEOBJECT),$(CPPFILES_LINKOBJECTS) $(CFILES_LINKOBJECTS) $(CIAFILES_LINKOBJECTS)) $(if $(GENERATELINKERFEEDBACK),$(FEEDBACKFILE))
+
+## Listing target ###################################################
+# Very similar to compile, apart from the extra flags passed to the
+# compile and different output options
+
+define map2listfile
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.lis,$1))
+endef
+
+
+define e32abiv2_cpponly
+# $1 is the sourcefile
+
+$(eval CPPONLYTARGET:=$(strip $(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.$(subst _,.,$(call sanitise,$(FULLVARIANTPATH))).pre,$1)))
+
+CPPONLY:: $(CPPONLYTARGET)
+
+$(CPPONLYTARGET): $(1) $(PROJECT_META)  $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	$(call startrule,e32cpponly,,$(1))		\
+		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
+		$(CC) $(LICENSERETRY_OPTION) $(SYMBIAN_CCFLAGS) \
+			$(CC_CPPONLY_ARGS) \
+			$(OPTION_COMPILER) 						\
+			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
+			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
+			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquote,$(RVCTINC)),),)       \
+			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                   \
+			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
+			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
+			$(if $(NOHIDEALL),--no_hide_all,) \
+			$$(call dblquote, $$<) $(OUTPUT_OPTION) $$(@) \
+	$(call endrule,e32cpponly)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(CPPONLYTARGET)
+endef
+
+ifneq ($(filter CPPONLY,$(call uppercase,$(MAKECMDGOALS))),)
+$(foreach F,$(CPPFILES) $(CFILES),$(eval $(call e32abiv2_cpponly,$(F))))
+endif
+
+define e32abiv2_listing
+# $1 is the sourcefile
+
+$(eval LISTINGTARGET:=$(strip $(call extractandmap,$(CPPFILEEXTENSIONS) $(CFILEEXTENSIONS),.$(subst _,.,$(call sanitise,$(FULLVARIANTPATH))).$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE)).lst,$1)))
+$(eval DEPENDFILENAME:=$(call map2listfile,$1).d)
+$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+
+LISTING:: $(LISTINGTARGET)
+
+$(LISTINGTARGET): $(1) $(PROJECT_META)  $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	$(call startrule,e32listing,,$(1))		\
+		$(if $(PERTURBSTARTTIME), $(RANSLEEP) $(PERTURBMSECS) ;,) \
+		$(CC) $(LICENSERETRY_OPTION) $(SYMBIAN_CCFLAGS) \
+			$(CC_CORE_ARGS) \
+			$(LISTING_OPTION)		            	\
+			$(OPTION_COMPILER) 						\
+			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS))				\
+			$(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$(call concat, $(PREINCLUDE_OPTION) ,$(call dblquote,$(PREINCLUDE)))\
+			$(if $(SET_ARMINC),$(if $(RVCTINC),$(COMPILER_SYSTEM_INCLUDE_OPTION)$(call dblquoteitem,$(RVCTINC)),),)       \
+			$(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquote,$$(<D))                                                   \
+			$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(USERINCLUDE)))      \
+			$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$(call dblquote,$(SYSTEMINCLUDE)))  \
+			$(if $(NOHIDEALL),--no_hide_all,) \
+			$(DEPEND_OPTION) $(call dblquote,$(DEPENDFILENAME)) \
+			$$(call dblquote, $$<) $(OUTPUT_OPTION) $$(@) \
+	$(call endrule,e32listing)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(LISTINGTARGET)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+ifneq "$(DEPENDFILE)" ""
+ifeq ($(NO_DEPEND_INCLUDE),)
+  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+    -include $(DEPENDFILE)
+  endif
+endif
+endif
+
+endef
+
+# No point at all in generating listing targetsif we aren't going to make them
+ifneq ($(filter LISTING,$(call uppercase,$(MAKECMDGOALS))),)
+$(foreach F,$(CPPFILES) $(CFILES),$(eval $(call e32abiv2_listing,$(F))))
+endif
+
+
+
+# Function to execute FREEZE ###########################################
+ifneq ($(SUPPORT_FREEZE),)
+
+# Fivespaces variable created to ensure a suitable gap of space characters
+# Is placed between the separate arguments. This fixes a problem in Cygwin, where
+# separate arguments are interpreted as a single argument when passed to bash
+FIVESPACES=$(BLANK)     $(BLANK)
+
+FREEZEGUARD:=TARGET_$(TARGET)_$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(POSTLINKFILETYPE))_$(IMPORTLIBPATH)_EFREEZE
+
+define e32freeze
+
+FREEZE:: $(1)
+	$(call startrule,freeze,,$(RESOLVED_DEFFILE)) \
+	$(EFREEZE) $(EFREEZE_REMOVE_OPTION) "$(RESOLVED_DEFFILE)" $(FIVESPACES) $(call dblquote,$(GENERATED_DEFFILE)) \
+	$(call endrule,freeze)
+endef
+
+# Only freeze once - udeb and urel cannot differ
+ifeq ($($(FREEZEGUARD)),)
+  # For most freezing activity we need the temporary .def file generated in the final post-link
+  # that lists the current exports - FREEZE can therefore be dependent on the final post-linked binary,
+  # with the side-effect that a build is triggered if someone tries to freeze without having built.
+  #
+  # However, there's one case where we don't want to be dependent on the post-linked binary in this way,
+  # and that's when (a) there are missing exports, (b) the user's aware of them and (c) they're deliberately freezing to
+  # remove them using EFREEZE's remove option.  Being dependent on the post-linked binary in this case, where ELF2E32
+  # actually fails to generate a final binary, would mean that the freeze would never happen and post-linking would
+  # just be continually re-attempted (to fail each time).
+  #
+  # So, as a special case, if the user is explicitly attempting to freeze and perform removals, we make FREEZE dependent
+  # on the temporary .def file instead.  This has no rule to actually make it, but gives a hint as to what is wrong if
+  # the users performs a freeze with remove without having explicitly built previously.
+  #
+  ifneq ($(EFREEZE_REMOVE_OPTION),)
+    $(eval $(call e32freeze,$(GENERATED_DEFFILE)))
+  else
+    $(eval $(call e32freeze,$(E32TARGET)))
+  endif
+  $(FREEZEGUARD):=1
+endif
+
+endif
+
+CLEANTARGETS:=$(CLEANTARGETS) $(if $(MULTIFILE_ENABLED),$(MULTIFILEOBJECT),$(CPPFILES_LINKOBJECTS) $(CFILES_LINKOBJECTS))
+
+## ASSEMBLER FILES ###################################################################
+# CIA VERSION      ############################################
+define mapcia2xxx
+$(call relocatefiles,$(INTERMEDIATEPATH),$(call extractandmap,$(CIAFILEEXTENSIONS),$2,$1))
+endef
+
+define e32abiv2_CIA2CPP
+
+$(eval e32abiv2_OFILE:=$(call mapcia2xxx,$(1),_.o))
+$(eval e32abiv2_PREFILE:=$(call mapcia2xxx,$(1),_.pre))
+$(eval e32abiv2_CPPFILE:=$(call mapcia2xxx,$(1),_.cpp))
+$(eval CLEANTARGETS:=$(CLEANTARGETS) $(e32abiv2_OFILE) $(e32abiv2_CPPFILE) $(e32abiv2_PREFILE))
+
+$(e32abiv2_OFILE): $(e32abiv2_CPPFILE) $(PROJECT_META)
+	$(call startrule,cia2cpp2o,,$(e32abiv2_CPPFILE)) \
+		$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
+			$(CC) $(LICENSERETRY_OPTION) \
+			$(CC_CORE_ARGS) \
+			$(if $(LTCG),$(LTCG_OPTION),) \
+			$(OPTION_COMPILER) \
+			$(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(CIADEFS)) $(CPP_LANG_OPTION)      \
+	 		$(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE)))     \
+	 		$(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE))) \
+	 		$$(call dblquote, $$<) $(OUTPUT_OPTION) $$@ \
+	$(call endrule,cia2cpp2o)
+
+
+# preprocessed CIA file to a CPP file
+$(e32abiv2_CPPFILE): $(e32abiv2_PREFILE)
+	$(call startrule,tranasm) \
+	$(if $(CPPFILT),CPPFILT="$(CPPFILT)",) \
+	$(TRANASM) --suppress-check --output="$$@" $$^ \
+	$(call endrule,tranasm)
+
+$(eval DEPENDFILENAME:=$(e32abiv2_PREFILE).d)
+$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+# preprocess the cia file
+$(eval e32abiv2_PREFILE_OPTIONS:= $(LICENSERETRY_OPTION) $(PREPROCESSOR_OPTION) $(CPP_OPTION) \
+       $(SYMBIAN_CCFLAGS) $(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(CIADEFS)) $(CPP_LANG_OPTION) \
+       $(if $(PREINCLUDE),$(PREINCLUDE_OPTION) ,)$$(call concat, $(PREINCLUDE_OPTION) ,$$(call dblquote,$(PREINCLUDE))) \
+       $(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE))) \
+       $(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE))) \
+       $(if $(ARMINC),$(if $(RVCTINC), $(COMPILER_SYSTEM_INCLUDE_OPTION)$$(call dblquoteitem,$(RVCTINC)),),) )
+
+
+$(e32abiv2_PREFILE): $1 $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	$(call startrule,cia2cpp,,$1) \
+	$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
+	$(CC) $(e32abiv2_PREFILE_OPTIONS) $(OUTPUT_OPTION) $$@ $$(call dblquote,$1) && \
+	$(CC) -M $(e32abiv2_PREFILE_OPTIONS) --depend_format=unix \
+	  $(OUTPUT_OPTION) $$@ $$(call dblquote,$1) > $(call dblquote,$(e32abiv2_PREFILE).d) \
+	$(call endrule,cia2cpp)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+ifneq "$(DEPENDFILE)" ""
+ifeq ($(NO_DEPEND_INCLUDE),)
+  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+    -include $(DEPENDFILE)
+  endif
+endif
+endif
+
+endef
+
+# Create a rule for each cia file
+ifeq ($(TRANSFORM_CIA),1)
+  $(eval $(foreach e32abiv2_RULE,$(CIAFILES),$(call e32abiv2_CIA2CPP,$(e32abiv2_RULE))))
+endif
+
+# Pure assembler (.s files) ################################
+
+e32abiv2_asm_OPTIONS:=$(LICENSERETRY_OPTION) \
+  $(CC_CORE_ARGS) \
+  $(OPTION_COMPILER) \
+  $(call makemacrodef,-D,$(COMPILER_INTERWORK_DEFINES) $(CDEFS)) \
+  $(if $(USERINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(USERINCLUDE)))     \
+  $(if $(SYSTEMINCLUDE),$(COMPILER_SYSTEM_INCLUDE_OPTION),)$$(call concat, $(COMPILER_SYSTEM_INCLUDE_OPTION),$$(call dblquote,$(SYSTEMINCLUDE)))
+
+# note that the --no_rtti option cannot be passed with the -M option
+# so forcibly remove it when generating ASM dependencies.
+#
+define e32abiv2_asm
+
+$(eval DEPENDFILENAME:=$(1).d)
+$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+$(1): $(2) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	$(call startrule,asmcompile,,$(2)) \
+		$(if $(PERTURBSTARTTIME),$(RANSLEEP) $(PERTURBMSECS) ;,) \
+		$(CC) $(e32abiv2_asm_OPTIONS) \
+		$(DEPEND_OPTION) $(call dblquote,$(DEPENDFILENAME)) \
+	 	$$(call dblquote, $$<) $(OUTPUT_OPTION) $$@ \
+	$(call endrule,asmcompile)
+	$(call startrule,asmdependencies) \
+		$(CC) -M $(subst --no_rtti,,$(e32abiv2_asm_OPTIONS)) --depend_format=unix \
+	  	$(OUTPUT_OPTION) $$@ $$(call dblquote,$2) > $(call dblquote,$(DEPENDFILENAME)) \
+	$(call endrule,asmdependencies)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+ifneq "$(DEPENDFILE)" ""
+ifeq ($(NO_DEPEND_INCLUDE),)
+  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+    -include $(DEPENDFILE)
+  endif
+endif
+endif
+
+CREATABLEPATHS:=$$(CREATABLEPATHS) $(INTERMEDIATEPATH)
+
+endef
+
+$(eval $(foreach F,$(ASMFILES), $(call e32abiv2_asm,$(call mapasm2object,$(F)),$(F))))
+CLEANTARGETS:=$(CLEANTARGETS) $(ASMFILES_LINKOBJECTS)
+
+endif # ifneq ($(TARGETTYPE),implib)
+
+
+########################## Build ROMFILE target ############################
+EPOC_ROOT:=$(patsubst %/,%,$(EPOCROOT))
+TOBLDINF:=$(dir $(subst :,,$(subst $(EPOC_ROOT)/,,$(COMPONENT_META))))
+
+# Only build ROMFILE if asked
+ifneq ($(filter ROMFILE,$(call uppercase,$(MAKECMDGOALS))),)
+    ifeq ($(ROMFILE_$(call sanitise,$(TARGET).$(REQUESTEDTARGETEXT))),)
+        ROMFILE_$(call sanitise,$(TARGET).$(REQUESTEDTARGETEXT)):=1
+        ROMDIR:=$(EPOC_ROOT)/epoc32/rom/$(TOBLDINF)
+
+        # Default values
+        ROMFILETYPE:=file
+        ROMFILE:=$(TARGET).$(REQUESTEDTARGETEXT)
+        ROMPATH:=sys/bin/
+        ROMDECORATIONS:=
+        ROMFILETYPE_RAM:=data
+        ROMFILE_RAM:=$(TARGET).$(REQUESTEDTARGETEXT)
+        ROMPATH_RAM:=sys/bin/
+        BUILDROMTARGET:=1
+        ABIDIR:=MAIN
+
+        $(eval $(call DoRomSet))
+
+        ifneq ($(EPOCFIXEDPROCESS),)
+            ROMDECORATIONS:=$(ROMDECORATIONS) fixed
+        endif
+        ifeq ($(PAGED),1)
+            ROMDECORATIONS:=$(ROMDECORATIONS) paged
+        endif
+        ifeq ($(PAGED),0)
+            ROMDECORATIONS:=$(ROMDECORATIONS) unpaged
+        endif
+
+
+        ifeq ($(TESTCODE),TRUE)
+        	# Add 'TEST' to the .iby filename
+        	ROMTEST:=test
+            ifeq ($(TEST_OPTION),BOTH)
+                DATATEXT:="data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).auto.bat test/$(MODULE).auto.bat"\n"data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).manual.bat test/$(MODULE).manual.bat"
+            else
+                ifneq ($(TEST_OPTION),NONE)
+                    DATATEXT:="data=/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TEST_OPTION).bat test/$(MODULE).$(TEST_OPTION).bat"
+                endif
+            endif
+        else
+        	DATATEXT:=
+        endif
+
+        # ROMTARGET
+        ifneq ($(ROMTARGET),)
+            ifneq ($(words $(ROMTARGET)),1)
+                ROMTARGETALL:=$(ROMTARGET)
+                ROMTARGET:=$(word 1,$(ROMTARGET))
+            endif
+
+            ifeq ($(ROMTARGET),<none>)
+                BUILDROMTARGET:=
+            else
+                ifneq ($(ROMTARGET),+)
+                    ifneq ($(notdir $(ROMTARGET)),)
+                        ROMFILE:=$(notdir $(ROMTARGET))
+                    endif
+                    ifneq ($(dir $(ROMTARGET)),./)
+                        ROMPATH:=$(dir $(ROMTARGET))
+                    endif
+                endif
+            endif
+        endif
+    endif
+
+    ROMFILENAME:=$(ROMDIR)$(PLATFORM)$(ROMTEST).iby
+
+    # RAMTARGET
+    ifneq ($(RAMTARGET),)
+        ROMDECORATIONS_RAM:=" attrib=r"
+        ifneq ($(RAMTARGET),+)
+            ifneq ($(notdir $(RAMTARGET)),)
+                ROMFILE_RAM:=$(notdir $(RAMTARGET))
+            endif
+            ifneq ($(dir $(RAMTARGET)),./)
+                ROMPATH_RAM:=$(dir $(RAMTARGET))
+            endif
+        endif
+    endif
+
+    define BuildRomfileTarget
+        $(ALLTARGET)::ROMFILE
+        ROMFILE::
+	        $(call startrule,rombuild)	\
+	        $(GNUMKDIR) -p $(ROMDIR) \
+            $(if $(ROMFILE_CREATED_$(TOBLDINF)),,&& echo -e "// $(subst $(EPOC_ROOT)/,,$(ROMFILENAME))\n//\n$(DATATEXT)" > $(ROMFILENAME)) \
+            $(if $(BUILDROMTARGET),&& echo "$(ROMFILETYPE)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(1)$(ROMDECORATIONS)" >> $(ROMFILENAME))	\
+	        $(if $(RAMTARGET),&& echo "$(ROMFILETYPE_RAM)=/epoc32/release/##$(ABIDIR)##/##BUILD##/$(TARGET).$(REQUESTEDTARGETEXT)   $(ROMPATH_RAM)$(ROMFILE_RAM)$(ROMDECORATIONS_RAM)" >> $(ROMFILENAME))	\
+	        $(call endrule,buildromfiletarget)
+    endef
+
+    # When VARIANTTYPE changes, romfile is finished,
+    # apart from if this is a new component......
+    ifneq ($(PREVIOUSVARIANTTYPE),)
+        ifneq ($(VARIANTTYPE),$(PREVIOUSVARIANTTYPE))
+            ifneq ($(ROMFILE_CREATED_$(TOBLDINF)),)
+                ROMFILEFINISHED:=1
+            else
+                ROMFILEFINISHED:=
+            endif
+        endif
+    endif
+
+    # When romfile is finished, don't continue to add to it
+    ifeq ($(ROMFILEFINISHED),)
+        $(eval $(call BuildRomfileTarget,$(ROMPATH)$(ROMFILE)))
+    endif
+
+    # Don't allow romfile to be recreated for every MMP
+    ifeq ($(ROMFILE_CREATED_$(TOBLDINF)),)
+        ROMFILE_CREATED_$(TOBLDINF):=1
+    endif
+
+    # Build other ROMTARGETs if there is more than one
+    ifneq ($(ROMTARGETALL),)
+        RAMTARGET:=
+        $(foreach ROMTARGET,$(wordlist 2,$(words $(ROMTARGETALL)),$(ROMTARGETALL)),$(eval $(call BuildRomfileTarget,$(ROMTARGET))))
+        ROMTARGETALL:=
+    endif
+
+    # Keep track of variant type while romfile is being created
+    PREVIOUSVARIANTTYPE:=$(VARIANTTYPE)
+
+    WHATRELEASE:=$(WHATRELEASE) $(ROMFILENAME)
+    CLEANTARGETS:=$(CLEANTARGETS) $(ROMFILENAME)
+endif
+
+# Deal with test code batch files generation.
+ifneq ($(TESTPATH),)
+
+    CREATABLEPATHS:=$(CREATABLEPATHS) $(EPOCROOT)/epoc32/data/z/test/
+    $(eval $(call MakeTestBatchFiles,$(TARGET),$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)))
+    BATCHFILE_CREATED_$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH):=1
+    TARGET_CREATED_$(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)_$(TARGET):=1
+    WHATRELEASE:=$(WHATRELEASE) $(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
+    CLEANTARGETS:=$(CLEANTARGETS) $(EPOCROOT)/epoc32/data/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
+endif
+
+###################### End of Build ROMFILE target ######################
+
+# Feature Variation requires a .vmap file to be created for each binary
+#
+ifneq ($(FEATUREVARIANTNAME),)
+ifneq ($(E32TARGET),)
+
+OUTPUTVMAP:=$(E32TARGET).vmap
+WHATRELEASE:=$(WHATRELEASE) $(OUPUTVMAP)
+
+TARGET:: $(OUTPUTVMAP)
+VMAPNEEDS:=$(E32TARGET) $(SOURCE) $(PROJECT_META)
+
+BV_SOURCELIST:=$(addprefix -s ,$(SOURCE) $(PROJECT_META))
+BV_FEATURELIST:=$(addprefix -f ,$(FEATURELISTFILES))
+BV_USER_INCLUDES:=$(addprefix -u ,$(USERINCLUDE))
+BV_SYSTEM_INCLUDES:=$(addprefix -x ,$(SYSTEMINCLUDE))
+
+# translate double quoted macros because $(shell) messes them up in some make engines
+BV_MACROLIST:=$(COMPILER_INTERWORK_DEFINES) $(CDEFS) $(if $(ALWAYS_BUILD_AS_ARM),,$(COMPILER_THUMB_DEFINES))
+BV_DEFINES:=$(call makemacrodef,-D,$(subst ",__SBS__QUOTE__,$(BV_MACROLIST)))
+
+# the script to generate our .vmap file and hash value
+VMAPCOMMAND:=$(CREATEVMAP) -o $(OUTPUTVMAP) $(BV_FEATURELIST) $(BV_DEFINES) -p $(PREINCLUDE) $(BV_SOURCELIST) $(BV_USER_INCLUDES) $(BV_SYSTEM_INCLUDES) -c $(CREATEVMAPCPP)
+
+# a recipe to create the .vmap from the "sources" with the createvmap script
+$(call raptor_recipe,createvmap,$(OUTPUTVMAP),$(VMAPNEEDS),$(VMAPCOMMAND))
+
+endif # E32TARGET != ""
+endif # FEATUREVARIANTNAME != ""
+
+########################### CONCLUSION ###################################
+
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+
+## Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS) ,$(CREATABLEPATHS),))
+
+# For the abld -what target
+$(eval $(call whatmacro,$(filter-out %.sym,$(WHATRELEASE)),WHATARMV5))
+
+endif # FEATUREVARIANTNAME=="" or FEATUREVARIANT==1
+
+## The End
+
--- a/sbsv2/raptor/lib/flm/e32abiv2ani.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2ani.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,56 +1,56 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build a window server animation DLL. 
-# 
-#
-
-ifeq ($(TARGETTYPE),ani)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=ANI
-POSTLINKFILETYPE:=ani
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z15CreateCAnimDllLv,1;
-DEFFILE:=
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-CANIGNORENONCALLABLE:=1
-
-UID2:=10003b22
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'ani' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build a window server animation DLL. 
+# 
+#
+
+ifeq ($(TARGETTYPE),ani)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=ANI
+POSTLINKFILETYPE:=ani
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z15CreateCAnimDllLv,1;
+DEFFILE:=
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+CANIGNORENONCALLABLE:=1
+
+UID2:=10003b22
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'ani' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2defaults.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2defaults.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,91 +1,91 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# e32abiv2defaults.flm
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-#
-
-# This is for variables that are not set in an FLM call but
-# only in e32abiv2 flms.  
-
-AUTOEXPORTS:=
-CANHAVEEXPORTS:=
-CANIGNORENONCALLABLE:=
-DOPOSTLINK:=
-IMPORTLIBRARYREQUIRED:=
-LINKER_ENTRYPOINT_LIBDEP:=
-LINKER_ENTRYPOINT_SETTING:=
-LINKER_STUB_LIBRARY:=
-NAMEDSYMLKUP:=
-POSTLINKDEFFILE:=
-POSTLINKFILETYPE:=
-POSTLINKTARGETTYPE:=
-STATIC_RUNTIME_LIB:=
-SUPPORT_FREEZE:=
-NOHIDEALL:=
-DEFAULT_NEWLIB:=$(DEFAULT_SYMBIAN_NEWLIB)
-
-
-# Reset these variables as they change for every single target type
-# LINKER_ENTRYPOINT_ADORNMENT will be blank for GCCE; for RVCT it will look like "(uc_exe_.o)"
-# LINKER_ENTRYPOINT_DECORATION will be blank for RVCT; for GCCE it will look like "-u _E32Startup"
-
-LINKER_ENTRYPOINT_ADORNMENT:=
-LINKER_ENTRYPOINT_DECORATION:=
-
-# For GCCE
-ifeq ($(TOOLCHAIN),GCCE)
-LINKER_ENTRYPOINT_DECORATION:=$(if $(call isoneof,$(TARGETTYPE),exexp exe),-u _E32Startup,-u _E32Dll)
-endif
-
-# For RVCT
-ifeq ($(TOOLCHAIN),RVCT)
-  ifeq ($(call isoneof,$(TARGETTYPE),exe stdexe),1) # isoneof returns 1 if true, empty string if false
-	LINKER_ENTRYPOINT_ADORNMENT:=(uc_exe_.o)
-  endif
-
-  ifeq ($(call isoneof,$(TARGETTYPE),ani textnotifier2 stddll plugin fsy pdl dll),1)
-	LINKER_ENTRYPOINT_ADORNMENT:=(uc_dll_.o)
-  endif
-
-  ifeq ($(call isoneof,$(TARGETTYPE),var var2),1)
-	LINKER_ENTRYPOINT_ADORNMENT:=(v_entry_.o)
-  endif
-
-  ifeq ($(call isoneof,$(TARGETTYPE),ldd pdd),1)
-	LINKER_ENTRYPOINT_ADORNMENT:=(D_ENTRY_.o)
-  endif
-
-  ifeq ($(TARGETTYPE),kext)
-	LINKER_ENTRYPOINT_ADORNMENT:=(X_ENTRY_.o)
-  endif
-
-  ifeq ($(TARGETTYPE),kdll)
-	LINKER_ENTRYPOINT_ADORNMENT:=(L_ENTRY_.o)
-  endif
-endif
-
-# "OPTION" metadata from the front-end can potentially be supplied simultaneously for both GCCE and RVCT,
-# so we need to make a decision on what we make use of based on the TOOLCHAIN in use.
-# Currently we only support changes to RVCT tool calls.
-
-LINKEROPTION:=
-OPTION_COMPILER:=
-OPTION_REPLACE_COMPILER:=
-
-ifeq ($(TOOLCHAIN),RVCT)
-  LINKEROPTION:=$(LINKEROPTION_ARMCC)
-  OPTION_COMPILER:=$(OPTION_ARMCC)
-  OPTION_REPLACE_COMPILER:=$(OPTION_REPLACE_ARMCC)
-endif
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# e32abiv2defaults.flm
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+#
+
+# This is for variables that are not set in an FLM call but
+# only in e32abiv2 flms.  
+
+AUTOEXPORTS:=
+CANHAVEEXPORTS:=
+CANIGNORENONCALLABLE:=
+DOPOSTLINK:=
+IMPORTLIBRARYREQUIRED:=
+LINKER_ENTRYPOINT_LIBDEP:=
+LINKER_ENTRYPOINT_SETTING:=
+LINKER_STUB_LIBRARY:=
+NAMEDSYMLKUP:=
+POSTLINKDEFFILE:=
+POSTLINKFILETYPE:=
+POSTLINKTARGETTYPE:=
+STATIC_RUNTIME_LIB:=
+SUPPORT_FREEZE:=
+NOHIDEALL:=
+DEFAULT_NEWLIB:=$(DEFAULT_SYMBIAN_NEWLIB)
+
+
+# Reset these variables as they change for every single target type
+# LINKER_ENTRYPOINT_ADORNMENT will be blank for GCCE; for RVCT it will look like "(uc_exe_.o)"
+# LINKER_ENTRYPOINT_DECORATION will be blank for RVCT; for GCCE it will look like "-u _E32Startup"
+
+LINKER_ENTRYPOINT_ADORNMENT:=
+LINKER_ENTRYPOINT_DECORATION:=
+
+# For GCCE
+ifeq ($(TOOLCHAIN),GCCE)
+LINKER_ENTRYPOINT_DECORATION:=$(if $(call isoneof,$(TARGETTYPE),exexp exe),-u _E32Startup,-u _E32Dll)
+endif
+
+# For RVCT
+ifeq ($(TOOLCHAIN),RVCT)
+  ifeq ($(call isoneof,$(TARGETTYPE),exe stdexe),1) # isoneof returns 1 if true, empty string if false
+	LINKER_ENTRYPOINT_ADORNMENT:=(uc_exe_.o)
+  endif
+
+  ifeq ($(call isoneof,$(TARGETTYPE),ani textnotifier2 stddll plugin fsy pdl dll),1)
+	LINKER_ENTRYPOINT_ADORNMENT:=(uc_dll_.o)
+  endif
+
+  ifeq ($(call isoneof,$(TARGETTYPE),var var2),1)
+	LINKER_ENTRYPOINT_ADORNMENT:=(v_entry_.o)
+  endif
+
+  ifeq ($(call isoneof,$(TARGETTYPE),ldd pdd),1)
+	LINKER_ENTRYPOINT_ADORNMENT:=(D_ENTRY_.o)
+  endif
+
+  ifeq ($(TARGETTYPE),kext)
+	LINKER_ENTRYPOINT_ADORNMENT:=(X_ENTRY_.o)
+  endif
+
+  ifeq ($(TARGETTYPE),kdll)
+	LINKER_ENTRYPOINT_ADORNMENT:=(L_ENTRY_.o)
+  endif
+endif
+
+# "OPTION" metadata from the front-end can potentially be supplied simultaneously for both GCCE and RVCT,
+# so we need to make a decision on what we make use of based on the TOOLCHAIN in use.
+# Currently we only support changes to RVCT tool calls.
+
+LINKEROPTION:=
+OPTION_COMPILER:=
+OPTION_REPLACE_COMPILER:=
+
+ifeq ($(TOOLCHAIN),RVCT)
+  LINKEROPTION:=$(LINKEROPTION_ARMCC)
+  OPTION_COMPILER:=$(OPTION_ARMCC)
+  OPTION_REPLACE_COMPILER:=$(OPTION_REPLACE_ARMCC)
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2dll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2dll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,60 +1,60 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 DLL (Dynamic Link Library)
-# 
-#
-
-ifeq ($(TARGETTYPE),dll)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Default Linker settings for this target type
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-
-
-# Default Postlinker settings
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=DLL
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-CANIGNORENONCALLABLE:=1
-
-# Use the general EABI FLM 
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 DLL (Dynamic Link Library)
+# 
+#
+
+ifeq ($(TARGETTYPE),dll)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Default Linker settings for this target type
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=DLL
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+CANIGNORENONCALLABLE:=1
+
+# Use the general EABI FLM 
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2exe.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2exe.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,49 +1,47 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 EXE
-# 
-#
-
-# What we need to build an EXE
-
-ifeq ($(TARGETTYPE),exe)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-POSTLINKTARGETTYPE:=EXE
-POSTLINKFILETYPE:=exe
-DOPOSTLINK:=1
-# Determine what kind of entrypoint option to set
-LINKER_STUB_LIBRARY:=
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/$(if $(FIRSTLIB),$(FIRSTLIB),eexe.lib)
-
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/$(if $(FIRSTLIB),$(FIRSTLIB),eexe.lib)$(LINKER_ENTRYPOINT_ADORNMENT)) 
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-
-MAKEDEFFILE:=
-
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __EXE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2exe.flm called with wrong TARGETTYPE (should be 'exe' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 EXE
+# 
+#
+
+# What we need to build an EXE
+
+ifeq ($(TARGETTYPE),exe)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+POSTLINKTARGETTYPE:=EXE
+POSTLINKFILETYPE:=exe
+DOPOSTLINK:=1
+# Determine what kind of entrypoint option to set
+LINKER_STUB_LIBRARY:=
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/$(if $(FIRSTLIB),$(FIRSTLIB),eexe.lib)
+
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/$(if $(FIRSTLIB),$(FIRSTLIB),eexe.lib)$(LINKER_ENTRYPOINT_ADORNMENT)) 
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __EXE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2exe.flm called with wrong TARGETTYPE (should be 'exe' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2exexp.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2exexp.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,83 +1,83 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 EXE with exports
-# 
-#
-
-ifeq ($(TARGETTYPE),exexp)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build an EXEXP
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=EXEXP
-POSTLINKFILETYPE:=exe
-DOPOSTLINK:=1
-EPOCALLOWDLLDATA:=1
-CANIGNORENONCALLABLE:=1
-
-$(call vsave,CDEFS)
-# Determine what kind of entrypoint option to set
-FIRSTLIB_OBJECTFILE=uc_exe_.o
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-
-ifeq ($(FIRSTLIB),)
-FIRSTLIB:=eexe.lib
-else
-ifneq ($(findstring kc_exe,$(FIRSTLIB))$(findstring KC_EXE,$(FIRSTLIB)),)
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-CDEFS:=$(CDEFS) __KERNEL_MODE__
-FIRSTLIB_OBJECTFILE=k_entry_.o
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-# No exception support for kernel code
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-endif
-endif
-
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/$(FIRSTLIB)
-
-ifeq ("$(TOOLCHAIN)","RVCT")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup  $(call dblquote,$(STATIC_RUNTIME_DIR)/$(FIRSTLIB)($(FIRSTLIB_OBJECTFILE)))
-else
-# GCCE
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup -u _E32Startup  $(call dblquote,$(STATIC_RUNTIME_DIR)/$(FIRSTLIB))
-endif
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-else
-IMPORTLIBRARYREQUIRED:=
-endif
-
-
-CDEFS:=$(CDEFS) __EXE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-
-else
-$(error $e32abiv2exexp.flm called with wrong TARGETTYPE (should be 'exexp' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 EXE with exports
+# 
+#
+
+ifeq ($(TARGETTYPE),exexp)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build an EXEXP
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=EXEXP
+POSTLINKFILETYPE:=exe
+DOPOSTLINK:=1
+EPOCALLOWDLLDATA:=1
+CANIGNORENONCALLABLE:=1
+
+$(call vsave,CDEFS)
+# Determine what kind of entrypoint option to set
+FIRSTLIB_OBJECTFILE=uc_exe_.o
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+
+ifeq ($(FIRSTLIB),)
+FIRSTLIB:=eexe.lib
+else
+ifneq ($(findstring kc_exe,$(FIRSTLIB))$(findstring KC_EXE,$(FIRSTLIB)),)
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+CDEFS:=$(CDEFS) __KERNEL_MODE__
+FIRSTLIB_OBJECTFILE=k_entry_.o
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+# No exception support for kernel code
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+endif
+endif
+
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/$(FIRSTLIB)
+
+ifeq ("$(TOOLCHAIN)","RVCT")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup  $(call dblquote,$(STATIC_RUNTIME_DIR)/$(FIRSTLIB)($(FIRSTLIB_OBJECTFILE)))
+else
+# GCCE
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup -u _E32Startup  $(call dblquote,$(STATIC_RUNTIME_DIR)/$(FIRSTLIB))
+endif
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+else
+IMPORTLIBRARYREQUIRED:=
+endif
+
+
+CDEFS:=$(CDEFS) __EXE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+
+else
+$(error $e32abiv2exexp.flm called with wrong TARGETTYPE (should be 'exexp' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2fsy.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2fsy.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,55 +1,55 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 fsy - a filesystem driver
-# 
-#
-
-ifeq ($(TARGETTYPE),fsy)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=FSY
-POSTLINKFILETYPE:=fsy
-DOPOSTLINK:=1
-
-# Determine what kind of entrypoint option to set
-AUTOEXPORTS:=CreateFileSystem,1;
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-
-UID2:=100039df
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-CANIGNORENONCALLABLE:=1
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2fsy.flm called with wrong TARGETTYPE (should be 'fsy' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 fsy - a filesystem driver
+# 
+#
+
+ifeq ($(TARGETTYPE),fsy)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=FSY
+POSTLINKFILETYPE:=fsy
+DOPOSTLINK:=1
+
+# Determine what kind of entrypoint option to set
+AUTOEXPORTS:=CreateFileSystem,1;
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+
+UID2:=100039df
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+CANIGNORENONCALLABLE:=1
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2fsy.flm called with wrong TARGETTYPE (should be 'fsy' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2implib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2implib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,46 +1,46 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
-# Build an e32 static library
-# 
-#
-
-ifeq ($(TARGETTYPE),implib)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build an import library
-POSTLINKFILETYPE:=dll
-# Determine what kind of entrypoint option to set
-IMPORTLIBRARYREQUIRED:=1
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Import libraries are always built as .dso but
-# in their --linkas option they are meant to
-# "front" a dll.  So:
-REQUESTEDTARGETEXT:=dll
-# if there is a LINKAS variable then this won't matter
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2implib.flm called with wrong TARGETTYPE (should be 'implib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
+# Build an e32 static library
+# 
+#
+
+ifeq ($(TARGETTYPE),implib)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build an import library
+POSTLINKFILETYPE:=dll
+# Determine what kind of entrypoint option to set
+IMPORTLIBRARYREQUIRED:=1
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Import libraries are always built as .dso but
+# in their --linkas option they are meant to
+# "front" a dll.  So:
+REQUESTEDTARGETEXT:=dll
+# if there is a LINKAS variable then this won't matter
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2implib.flm called with wrong TARGETTYPE (should be 'implib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2kdll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2kdll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,69 +1,69 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 KDLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 KDLL (Kernel DLL)
-# 
-#
-
-ifeq ($(TARGETTYPE),kdll)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a Kernel DLL
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=DLL
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/ekll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/ekll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-BASELIBS:=ekll.lib
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2kdll.flm called with wrong TARGETTYPE (should be 'kdll' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 KDLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 KDLL (Kernel DLL)
+# 
+#
+
+ifeq ($(TARGETTYPE),kdll)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a Kernel DLL
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=DLL
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/ekll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/ekll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+BASELIBS:=ekll.lib
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2kdll.flm called with wrong TARGETTYPE (should be 'kdll' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2kext.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2kext.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,78 +1,78 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 KEXT ABIv2 Function Like Makefile (FLM)
-# Build an e32 KEXT (Kernel Extension)
-# 
-#
-
-ifeq ($(TARGETTYPE),kext)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-
-# What we need to build a Kernel Extension
-# an import library isn't strictly required, apparently. So only try to
-# generate one if the def file exists.
-ifeq ($(NOEXPORTLIBRARY),)
-ifneq ($(DEFFILE),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-endif
-
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Default Linker settings for this target type
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/eext.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/eext.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-CANIGNORENONCALLABLE:=1
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=KEXT
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-
-BASELIBS:=eext.lib
-
-
-# Use the general EABI FLM 
-# We are appending to CDEFS and SYSTEMINCLUDE but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2kext.flm called with wrong TARGETTYPE (should be 'kext' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 KEXT ABIv2 Function Like Makefile (FLM)
+# Build an e32 KEXT (Kernel Extension)
+# 
+#
+
+ifeq ($(TARGETTYPE),kext)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+
+# What we need to build a Kernel Extension
+# an import library isn't strictly required, apparently. So only try to
+# generate one if the def file exists.
+ifeq ($(NOEXPORTLIBRARY),)
+ifneq ($(DEFFILE),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+endif
+
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Default Linker settings for this target type
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/eext.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/eext.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+CANIGNORENONCALLABLE:=1
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=KEXT
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+
+BASELIBS:=eext.lib
+
+
+# Use the general EABI FLM 
+# We are appending to CDEFS and SYSTEMINCLUDE but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2kext.flm called with wrong TARGETTYPE (should be 'kext' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2klib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2klib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,41 +1,41 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
-# Build an e32 static library for kernel code
-# 
-#
-
-ifeq ($(TARGETTYPE),klib)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a kernel LIB
-POSTLINKFILETYPE:=lib
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2klib.flm called with wrong TARGETTYPE (should be 'klib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
+# Build an e32 static library for kernel code
+# 
+#
+
+ifeq ($(TARGETTYPE),klib)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a kernel LIB
+POSTLINKFILETYPE:=lib
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2klib.flm called with wrong TARGETTYPE (should be 'klib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2ldd.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2ldd.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,80 +1,80 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 ldd ABIv2 Function Like Makefile (FLM)
-# Build an e32 ldd (Logical Device Driver)
-# 
-#
-
-ifeq ($(TARGETTYPE),ldd)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-
-# What we need to build a Logical Device Driver
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=LDD
-POSTLINKFILETYPE:=ldd
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z19CreateLogicalDevicev,1;
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edev.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edev.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-CANIGNORENONCALLABLE:=1
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-BASELIBS:=edev
-UID2:=100000af
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-# Only process a def file if it's specified
-# in the MMP - not if it's merely the frontend's guess
-# at what the def file name might be
-IMPORTLIBRARYREQUIRED:=
-
-ifeq ($(NOEXPORTLIBRARY),)
-ifneq ($(DEFFILE),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2ldd.flm called with wrong TARGETTYPE (should be 'ldd' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 ldd ABIv2 Function Like Makefile (FLM)
+# Build an e32 ldd (Logical Device Driver)
+# 
+#
+
+ifeq ($(TARGETTYPE),ldd)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+
+# What we need to build a Logical Device Driver
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=LDD
+POSTLINKFILETYPE:=ldd
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z19CreateLogicalDevicev,1;
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edev.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edev.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+CANIGNORENONCALLABLE:=1
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+BASELIBS:=edev
+UID2:=100000af
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+# Only process a def file if it's specified
+# in the MMP - not if it's merely the frontend's guess
+# at what the def file name might be
+IMPORTLIBRARYREQUIRED:=
+
+ifeq ($(NOEXPORTLIBRARY),)
+ifneq ($(DEFFILE),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2ldd.flm called with wrong TARGETTYPE (should be 'ldd' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2lib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2lib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
-# Build an e32 static library
-# 
-#
-
-ifeq ($(TARGETTYPE),lib)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-ifeq ($(FEATUREVARIANT),1)
-$(error TARGETTYPE lib cannot be FEATUREVARIANT (in $(PROJECT_META) from $(COMPONENT_META)))
-endif
-
-POSTLINKFILETYPE:=lib
-MULTIFILE_ENABLED:=
-include $(FLMHOME)/e32abiv2.flm
-
-else
-$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'lib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
+# Build an e32 static library
+# 
+#
+
+ifeq ($(TARGETTYPE),lib)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+ifeq ($(FEATUREVARIANT),1)
+$(error TARGETTYPE lib cannot be FEATUREVARIANT (in $(PROJECT_META) from $(COMPONENT_META)))
+endif
+
+POSTLINKFILETYPE:=lib
+MULTIFILE_ENABLED:=
+include $(FLMHOME)/e32abiv2.flm
+
+else
+$(error $e32abiv2dll.flm called with wrong TARGETTYPE (should be 'lib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2none.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2none.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,36 +1,36 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build Resources only
-# 
-#
-
-ifeq ($(TARGETTYPE),none)
-include $(FLMHOME)/e32abiv2defaults.mk
-POSTLINKTARGETTYPE:=NONE
-POSTLINKFILETYPE:=none
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2none.flm called with wrong TARGETTYPE (should be 'none' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build Resources only
+# 
+#
+
+ifeq ($(TARGETTYPE),none)
+include $(FLMHOME)/e32abiv2defaults.mk
+POSTLINKTARGETTYPE:=NONE
+POSTLINKFILETYPE:=none
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2none.flm called with wrong TARGETTYPE (should be 'none' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2pdd.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2pdd.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,77 +1,77 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 pdd ABIv2 Function Like Makefile (FLM)
-# Build an e32 pdd (Physical Device Driver)
-# 
-#
-
-ifeq ($(TARGETTYPE),pdd)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a Logical Device Driver
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=PDD
-POSTLINKFILETYPE:=pdd
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z20CreatePhysicalDevicev,1;
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edev.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edev.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-CANIGNORENONCALLABLE:=1
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-
-BASELIBS:=edev
-UID2:=100039d0
-
-IMPORTLIBRARYREQUIRED:=
-# This is basically a DLL with some tweaks
-ifneq ($(DEFFILE),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2pdd.flm called with wrong TARGETTYPE (should be 'pdd' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 pdd ABIv2 Function Like Makefile (FLM)
+# Build an e32 pdd (Physical Device Driver)
+# 
+#
+
+ifeq ($(TARGETTYPE),pdd)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a Logical Device Driver
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=PDD
+POSTLINKFILETYPE:=pdd
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z20CreatePhysicalDevicev,1;
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edev.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edev.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+CANIGNORENONCALLABLE:=1
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+
+BASELIBS:=edev
+UID2:=100039d0
+
+IMPORTLIBRARYREQUIRED:=
+# This is basically a DLL with some tweaks
+ifneq ($(DEFFILE),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel  $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2pdd.flm called with wrong TARGETTYPE (should be 'pdd' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2pdl.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2pdl.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,56 +1,56 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 pdl ABIv2 Function Like Makefile (FLM)
-# Build an e32 pdl (Printer Device)
-# 
-#
-
-ifeq ($(TARGETTYPE),pdl)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a Printer Device
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=PDL
-POSTLINKFILETYPE:=pdl
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z17NewPrinterDeviceLv,1;
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-CANIGNORENONCALLABLE:=1
-
-BASELIBS:=
-UID2:=10003b1c
-RESOURCEPATH:=Resource\Printers
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2pdl.flm called with wrong TARGETTYPE (should be 'pdl' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 pdl ABIv2 Function Like Makefile (FLM)
+# Build an e32 pdl (Printer Device)
+# 
+#
+
+ifeq ($(TARGETTYPE),pdl)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a Printer Device
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=PDL
+POSTLINKFILETYPE:=pdl
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z17NewPrinterDeviceLv,1;
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+CANIGNORENONCALLABLE:=1
+
+BASELIBS:=
+UID2:=10003b1c
+RESOURCEPATH:=Resource\Printers
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2pdl.flm called with wrong TARGETTYPE (should be 'pdl' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2plugin.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2plugin.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,69 +1,69 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an ECOM plugin
-# 
-#
-
-ifeq ($(TARGETTYPE),plugin)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# This is basically a DLL with some tweaks
-# If DEFFILE keyword is specified in the MMP, set the POSTLINKDEFFILE
-# and guarantee the generation of import library; if not specified import library
-# won't be generated for plugin (default)
-ifneq ($(DEFFILEKEYWORD),)
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-IMPORTLIBRARYREQUIRED:=1
-endif
-
-# Default Linker settings for this target type
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-
-# Default Postlinker settings
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=PLUGIN
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z24ImplementationGroupProxyRi,1;
-CANIGNORENONCALLABLE:=1
-
-# We could check the UID rather than forcing it
-# but there seems to be no point in that.
-UID2:=10009D8D
-
-
-RESOURCEPATH:=Resource/Plugins
-
-# Use the general EABI FLM 
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2plugin.flm called with wrong TARGETTYPE (should be 'plugin' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an ECOM plugin
+# 
+#
+
+ifeq ($(TARGETTYPE),plugin)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# This is basically a DLL with some tweaks
+# If DEFFILE keyword is specified in the MMP, set the POSTLINKDEFFILE
+# and guarantee the generation of import library; if not specified import library
+# won't be generated for plugin (default)
+ifneq ($(DEFFILEKEYWORD),)
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+IMPORTLIBRARYREQUIRED:=1
+endif
+
+# Default Linker settings for this target type
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=PLUGIN
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z24ImplementationGroupProxyRi,1;
+CANIGNORENONCALLABLE:=1
+
+# We could check the UID rather than forcing it
+# but there seems to be no point in that.
+UID2:=10009D8D
+
+
+RESOURCEPATH:=Resource/Plugins
+
+# Use the general EABI FLM 
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2plugin.flm called with wrong TARGETTYPE (should be 'plugin' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2stddll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2stddll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,69 +1,69 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# e32abiv2dll.flm
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 DLL (Dynamic Link Library)
-# 
-#
-
-ifeq ($(TARGETTYPE),stddll)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Default Linker settings for this target type
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-LIBRARY:=$(LIBRARY) euser.dso
-
-
-# Default Postlinker settings
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=STDDLL
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-CANIGNORENONCALLABLE:=1
-NAMEDSYMLKUP:=1
-
-# Use the general EABI FLM 
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-
-#compile options
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/stdapis
-NOHIDEALL:=1
-CDEFS:=$(CDEFS) __DLL__
-
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error e32abiv2stddll.flm called with wrong TARGETTYPE (should be 'stddll' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# e32abiv2dll.flm
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 DLL (Dynamic Link Library)
+# 
+#
+
+ifeq ($(TARGETTYPE),stddll)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Default Linker settings for this target type
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+LIBRARY:=$(LIBRARY) euser.dso
+
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=STDDLL
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+CANIGNORENONCALLABLE:=1
+NAMEDSYMLKUP:=1
+
+# Use the general EABI FLM 
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+
+#compile options
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/stdapis
+NOHIDEALL:=1
+CDEFS:=$(CDEFS) __DLL__
+
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error e32abiv2stddll.flm called with wrong TARGETTYPE (should be 'stddll' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2stdexe.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2stdexe.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,63 +1,61 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# e32abiv2exe.flm
-# ARMv5 STDEXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 STDEXE
-# 
-#
-
-# What we need to build a STDEXE
-
-ifeq ($(TARGETTYPE),stdexe)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-POSTLINKTARGETTYPE:=STDEXE
-POSTLINKFILETYPE:=exe
-DOPOSTLINK:=1
-# Determine what kind of entrypoint option to set
-LINKER_STUB_LIBRARY:=
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/eexe.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/eexe.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-NAMEDSYMLKUP:=1
-LIBRARY:=$(LIBRARY) euser.dso
-
-MAKEDEFFILE:=
-
-$(call vsave,CDEFS SYSTEMINCLUDE STATICLIBRARY)
-
-# STDEXEs need the c runtime library
-ifneq ($(WCHARENTRYPOINT),)
-STATICLIBRARY:=$(STATICLIBRARY) libwcrt0
-else
-STATICLIBRARY:=$(STATICLIBRARY) libcrt0
-endif
-
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/stdapis
-CDEFS:=$(CDEFS) __EXE__
-NOHIDEALL:=1
-
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error e32abiv2stdexe.flm called with wrong TARGETTYPE (should be 'stdexe' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# e32abiv2exe.flm
+# ARMv5 STDEXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 STDEXE
+# 
+#
+
+# What we need to build a STDEXE
+
+ifeq ($(TARGETTYPE),stdexe)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+POSTLINKTARGETTYPE:=STDEXE
+POSTLINKFILETYPE:=exe
+DOPOSTLINK:=1
+# Determine what kind of entrypoint option to set
+LINKER_STUB_LIBRARY:=
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/eexe.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Startup $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/eexe.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+DEFAULT_NEWLIB:=$(DEFAULT_STDCPP_NEWLIB)
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+NAMEDSYMLKUP:=1
+LIBRARY:=$(LIBRARY) euser.dso
+
+$(call vsave,CDEFS SYSTEMINCLUDE STATICLIBRARY)
+
+# STDEXEs need the c runtime library
+ifneq ($(WCHARENTRYPOINT),)
+STATICLIBRARY:=$(STATICLIBRARY) libwcrt0
+else
+STATICLIBRARY:=$(STATICLIBRARY) libcrt0
+endif
+
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/stdapis
+CDEFS:=$(CDEFS) __EXE__
+NOHIDEALL:=1
+
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error e32abiv2stdexe.flm called with wrong TARGETTYPE (should be 'stdexe' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2stdlib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2stdlib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# e32abiv2lib.flm
-# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
-# Build an e32 static library
-# 
-#
-
-ifeq ($(TARGETTYPE),stdlib)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a LIB 
-POSTLINKFILETYPE:=lib
-
-NOHIDEALL:=1
-
-include $(FLMHOME)/e32abiv2.flm
-
-else
-$(error e32abiv2stdlib.flm called with wrong TARGETTYPE (should be 'stdlib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# e32abiv2lib.flm
+# ARMv5 LIB ABIv2 Function Like Makefile (FLM)
+# Build an e32 static library
+# 
+#
+
+ifeq ($(TARGETTYPE),stdlib)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a LIB 
+POSTLINKFILETYPE:=lib
+
+NOHIDEALL:=1
+
+include $(FLMHOME)/e32abiv2.flm
+
+else
+$(error e32abiv2stdlib.flm called with wrong TARGETTYPE (should be 'stdlib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/e32abiv2textnotifier2.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2textnotifier2.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,57 +1,57 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# e32abiv2textnotifier.flm
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 textnotifier DLL
-# 
-#
-
-ifeq ($(TARGETTYPE),textnotifier2)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=TEXTNOTIFIER2
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z13NotifierArrayv,1;
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
-CANIGNORENONCALLABLE:=1
-
-RESOURCEPATH:=System/Notifiers
-UID2:=101fe38b
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS)
-CDEFS:=$(CDEFS) __DLL__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2textnotifier.flm called with wrong TARGETTYPE (should be 'textnotifier2' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# e32abiv2textnotifier.flm
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 textnotifier DLL
+# 
+#
+
+ifeq ($(TARGETTYPE),textnotifier2)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=TEXTNOTIFIER2
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z13NotifierArrayv,1;
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+CANIGNORENONCALLABLE:=1
+
+RESOURCEPATH:=System/Notifiers
+UID2:=101fe38b
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2textnotifier.flm called with wrong TARGETTYPE (should be 'textnotifier2' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2var.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2var.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,72 +1,72 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 Variant DLL
-# 
-#
-
-ifeq ($(TARGETTYPE),var)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-# May need a dso e.g. ecust.dll
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/evar.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/evar.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-# Default Postlinker settings
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=VAR
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-AUTOEXPORTS:=_Z17VariantInitialisev,1;
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2var.flm called with wrong TARGETTYPE (should be 'var' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 Variant DLL
+# 
+#
+
+ifeq ($(TARGETTYPE),var)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+# May need a dso e.g. ecust.dll
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/evar.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/evar.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=VAR
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+AUTOEXPORTS:=_Z17VariantInitialisev,1;
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2var.flm called with wrong TARGETTYPE (should be 'var' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32abiv2var2.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2var2.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,72 +1,72 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build an e32 Variant DLL (version 2)
-# 
-#
-
-ifeq ($(TARGETTYPE),var2)
-include $(FLMHOME)/e32abiv2defaults.mk
-
-# What we need to build a DLL
-# May need a dso e.g. ecust.dll
-ifeq ($(NOEXPORTLIBRARY),)
-IMPORTLIBRARYREQUIRED:=1
-endif
-POSTLINKDEFFILE:=$(DEFFILE)
-SUPPORT_FREEZE:=1
-
-# Determine what kind of entrypoint option to set
-LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/evar.lib
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/evar.lib$(LINKER_ENTRYPOINT_ADORNMENT))
-
-ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
-LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
-endif
-
-LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
-STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
-RUNTIME_LIBS_LIST:=
-
-# Kernel code builds as arm
-ALWAYS_BUILD_AS_ARM:=1
-
-# No dedicated library for operator new/delete functions.
-HAS_DEDICATED_OP_NEWDEL_LIB:=
-
-# Default Postlinker settings
-CANHAVEEXPORTS:=1
-POSTLINKTARGETTYPE:=VAR2
-POSTLINKFILETYPE:=dll
-DOPOSTLINK:=1
-AUTOEXPORTS:=VariantInitialise,1;
-
-# No exception support for kernel code?
-EXCEPTIONS:=$(NO_EXCEPTIONS)
-
-
-
-# We are appending to CDEFS but we don't want this to affect
-# other invocations so we are going to save it on a stack
-# and restore it afterwards
-$(call vsave,CDEFS SYSTEMINCLUDE)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel $(EPOCROOT)/epoc32/include/nkern/arm
-CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
-include $(FLMHOME)/e32abiv2.flm
-$(call vrestore)
-
-else
-$(error $e32abiv2var2.flm called with wrong TARGETTYPE (should be 'var2' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 Variant DLL (version 2)
+# 
+#
+
+ifeq ($(TARGETTYPE),var2)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+# May need a dso e.g. ecust.dll
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Determine what kind of entrypoint option to set
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/evar.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION) _E32Dll $(LINKER_ENTRYPOINT_DECORATION) $(call dblquote,$(STATIC_RUNTIME_DIR)/evar.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(KERNEL_STATIC_RUNTIME_LIB)
+RUNTIME_LIBS_LIST:=
+
+# Kernel code builds as arm
+ALWAYS_BUILD_AS_ARM:=1
+
+# No dedicated library for operator new/delete functions.
+HAS_DEDICATED_OP_NEWDEL_LIB:=
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=VAR2
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+AUTOEXPORTS:=VariantInitialise,1;
+
+# No exception support for kernel code?
+EXCEPTIONS:=$(NO_EXCEPTIONS)
+
+
+
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS SYSTEMINCLUDE)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(EPOCROOT)/epoc32/include/nkern $(EPOCROOT)/epoc32/include/kernel/arm $(EPOCROOT)/epoc32/include/memmodel/epoc $(EPOCROOT)/epoc32/include/kernel $(EPOCROOT)/epoc32/include/nkern/arm
+CDEFS:=$(CDEFS) __DLL__ __KERNEL_MODE__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error $e32abiv2var2.flm called with wrong TARGETTYPE (should be 'var2' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/e32postlink.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/e32postlink.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,135 +1,135 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# ARMv5 e32 postlinking FLM
-# Knows how to postlink all possible ABIV2 executables for ARM
-#
-
-# Interface
-#
-#  Metadata supplied (or deduced from)
-#
-#   BYTEPAIRCOMPRESS
-#   CAPABILITY
-#   DEBUGGABLE                     Can be "udeb" or "urel" or "udeb urel" or ""
-#   E32TARGET
-#   EPOCALLOWDLLDATA
-#   EPOCFIXEDPROCESS
-#   EPOCHEAPSIZEMAX
-#   EPOCHEAPSIZEMIN
-#   EPOCPROCESSPRIORITY
-#   EPOCSTACKSIZE
-#   EXPORTUNFROZEN
-#   INFLATECOMPRESS
-#   POSTLINKFPU
-#   POSTLINKTARGETTYPE
-#   SID
-#   SMPSAFE
-#   UID2
-#   UID3
-#   VERSION
-#   VENDORID
-#
-#  Other
-#
-#   ARMLIBS
-#   AUTOEXPORTS                    Symbols that must be assumed to exist for this TARGETTYPE in the format: export,ordinal;export,ordinal;..
-#   CANIGNORENONCALLABLE           If the TARGETTYPE allows it, disregard non-callable exports (v-tables, type information, etc.)
-#   CANHAVEEXPORTS
-#   CLEANTARGETS
-#   ELF2E32
-#   EPOCDATALINKADDRESS            Redundant?
-#   EPOCROOT
-#   EXPTARGET
-#   GENERATED_DEFFILE
-#   GENERATED_DSO
-#   HAVE_ORDERONLY
-#   IMPORTLIBRARYREQUIRED
-#   INTERMEDIATEPATH
-#   LINKASVERSIONED
-#   LINK_TARGET                    Postlinker elf input
-#   NAMEDSYMLKUP
-#   PAGEDCODE_OPTION
-#   POSTLINKDEFFILE
-#   POSTLINKER_SUPPORTS_WDP
-#   RUNTIME_LIBS_PATH
-#   SAVESPACE
-#   STATIC_LIBS_PATH
-#   UID1
-#   VARIANTTYPE
-
-
-# Capabilities
-ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY)))
-SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY)))
-FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),NONE)
-
-# Paging options for the old postlinker
-POSTLINKER_PAGEDOPTION:=--defaultpaged
-ifeq ($(PAGED),1)
-  POSTLINKER_PAGEDOPTION:=--paged
-endif
-ifeq ($(PAGED),0)
-  POSTLINKER_PAGEDOPTION:--unpaged
-endif
-
-# Postlink target
-define e32postlink
-$(E32TARGET): $(LINK_TARGET) $(POSTLINKDEFFILE) $(ELF2E32) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB
-	$(call startrule,postlink) \
-	$(ELF2E32) \
-	  --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0)) \
-	  --version=$(VERSION) \
-	  --capability=$(FINAL_CAPABILITIES) \
-	  --linkas=$(call dblquote,$(LINKASVERSIONED)) \
-	  --fpu=$(POSTLINKFPU) \
-	  --targettype=$(POSTLINKTARGETTYPE) \
-	  --output=$$(call dblquote,$$@) \
-	  --elfinput=$(call dblquote,$(LINK_TARGET)) \
-	  $(if $(UID1),--uid1=0x$(UID1),) \
-	  $(if $(UID2),--uid2=0x$(UID2),) \
-	  $(if $(UID3),--uid3=0x$(UID3),) \
-	  $(if $(VENDORID),--vid=0x$(VENDORID),) \
-	  $(if $(EXPTARGET),--customdlltarget,) \
-	  $(if $(ARMLIBS),--excludeunwantedexports,) \
-	  $(if $(EPOCALLOWDLLDATA),--dlldata,) \
-	  $(if $(EPOCPROCESSPRIORITY),--priority=$(EPOCPROCESSPRIORITY),) \
-	  $(if $(EPOCSTACKSIZE),--stack=0x$(EPOCSTACKSIZE),) \
-	  $(if $(EPOCHEAPSIZEMIN),--heap=0x$(EPOCHEAPSIZEMIN)$(CHAR_COMMA)0x$(EPOCHEAPSIZEMAX),) \
-	  $(if $(EPOCFIXEDPROCESS),--fixedaddress,) \
-	  $(if $(EPOCDATALINKADDRESS),--datalinkaddress=$(EPOCDATALINKADDRESS),) \
-	  $(if $(NAMEDSYMLKUP),--namedlookup,) \
-	  $(if $(SMPSAFE),--smpsafe,) \
-	  $(if $(POSTLINKDEFFILE),--definput=$(POSTLINKDEFFILE),) \
-	  $(if $(EXPORTUNFROZEN),--unfrozen,) \
-	  $(if $(AUTOEXPORTS),--sysdef=$(call dblquote,$(AUTOEXPORTS)),) \
-	  $(if $(CANIGNORENONCALLABLE), \
-	    $(if $(IMPORTLIBRARYREQUIRED),,--ignorenoncallable),) \
-	  $(if $(CANHAVEEXPORTS), --defoutput="$(GENERATED_DEFFILE)" --dso=$(GENERATED_DSO)) \
-	  $(if $(filter $(VARIANTTYPE),$(DEBUGGABLE)),--debuggable,) \
-	  $(if $(POSTLINKER_SUPPORTS_WDP), \
-	    --codepaging=$(PAGEDCODE_OPTION) --datapaging=$(PAGEDDATA_OPTION), \
-	    $(POSTLINKER_PAGEDOPTION)) \
-	  $(if $(NOCOMPRESSTARGET), \
-	    --uncompressed, \
-	    $(if $(INFLATECOMPRESS),--compressionmethod inflate,$(if $(BYTEPAIRCOMPRESS),--compressionmethod bytepair,))) \
-	  --libpath="$(call concat,$(PATHSEP)$(CHAR_SEMIC),$(strip $(RUNTIME_LIBS_PATH) $(STATIC_LIBS_PATH)))" \
-	  $(if $(SAVESPACE),$(if $(EXPORTUNFROZEN),,;$(GNURM) -rf $(INTERMEDIATEPATH); true)) \
-	$(call endrule,postlink)
-endef
-$(eval $(e32postlink))
-
-CLEANTARGETS:=$(CLEANTARGETS) $(E32TARGET)
-CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DEFFILE)
-CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DSO)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# ARMv5 e32 postlinking FLM
+# Knows how to postlink all possible ABIV2 executables for ARM
+#
+
+# Interface
+#
+#  Metadata supplied (or deduced from)
+#
+#   BYTEPAIRCOMPRESS
+#   CAPABILITY
+#   DEBUGGABLE                     Can be "udeb" or "urel" or "udeb urel" or ""
+#   E32TARGET
+#   EPOCALLOWDLLDATA
+#   EPOCFIXEDPROCESS
+#   EPOCHEAPSIZEMAX
+#   EPOCHEAPSIZEMIN
+#   EPOCPROCESSPRIORITY
+#   EPOCSTACKSIZE
+#   EXPORTUNFROZEN
+#   INFLATECOMPRESS
+#   POSTLINKFPU
+#   POSTLINKTARGETTYPE
+#   SID
+#   SMPSAFE
+#   UID2
+#   UID3
+#   VERSION
+#   VENDORID
+#
+#  Other
+#
+#   ARMLIBS
+#   AUTOEXPORTS                    Symbols that must be assumed to exist for this TARGETTYPE in the format: export,ordinal;export,ordinal;..
+#   CANIGNORENONCALLABLE           If the TARGETTYPE allows it, disregard non-callable exports (v-tables, type information, etc.)
+#   CANHAVEEXPORTS
+#   CLEANTARGETS
+#   ELF2E32
+#   EPOCDATALINKADDRESS            Redundant?
+#   EPOCROOT
+#   EXPTARGET
+#   GENERATED_DEFFILE
+#   GENERATED_DSO
+#   HAVE_ORDERONLY
+#   IMPORTLIBRARYREQUIRED
+#   INTERMEDIATEPATH
+#   LINKASVERSIONED
+#   LINK_TARGET                    Postlinker elf input
+#   NAMEDSYMLKUP
+#   PAGEDCODE_OPTION
+#   POSTLINKDEFFILE
+#   POSTLINKER_SUPPORTS_WDP
+#   RUNTIME_LIBS_PATH
+#   SAVESPACE
+#   STATIC_LIBS_PATH
+#   UID1
+#   VARIANTTYPE
+
+
+# Capabilities
+ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY)))
+SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY)))
+FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),NONE)
+
+# Paging options for the old postlinker
+POSTLINKER_PAGEDOPTION:=--defaultpaged
+ifeq ($(PAGED),1)
+  POSTLINKER_PAGEDOPTION:=--paged
+endif
+ifeq ($(PAGED),0)
+  POSTLINKER_PAGEDOPTION:--unpaged
+endif
+
+# Postlink target
+define e32postlink
+$(E32TARGET): $(LINK_TARGET) $(POSTLINKDEFFILE) $(ELF2E32) $(if $(HAVE_ORDERONLY),|,) $(EPOCROOT)/epoc32/build/TEM_LIB
+	$(call startrule,postlink) \
+	$(ELF2E32) \
+	  --sid=0x$(if $(SID),$(SID),$(if $(UID3),$(UID3),0)) \
+	  --version=$(VERSION) \
+	  --capability=$(FINAL_CAPABILITIES) \
+	  --linkas=$(call dblquote,$(LINKASVERSIONED)) \
+	  --fpu=$(POSTLINKFPU) \
+	  --targettype=$(POSTLINKTARGETTYPE) \
+	  --output=$$(call dblquote,$$@) \
+	  --elfinput=$(call dblquote,$(LINK_TARGET)) \
+	  $(if $(UID1),--uid1=0x$(UID1),) \
+	  $(if $(UID2),--uid2=0x$(UID2),) \
+	  $(if $(UID3),--uid3=0x$(UID3),) \
+	  $(if $(VENDORID),--vid=0x$(VENDORID),) \
+	  $(if $(EXPTARGET),--customdlltarget,) \
+	  $(if $(ARMLIBS),--excludeunwantedexports,) \
+	  $(if $(EPOCALLOWDLLDATA),--dlldata,) \
+	  $(if $(EPOCPROCESSPRIORITY),--priority=$(EPOCPROCESSPRIORITY),) \
+	  $(if $(EPOCSTACKSIZE),--stack=0x$(EPOCSTACKSIZE),) \
+	  $(if $(EPOCHEAPSIZEMIN),--heap=0x$(EPOCHEAPSIZEMIN)$(CHAR_COMMA)0x$(EPOCHEAPSIZEMAX),) \
+	  $(if $(EPOCFIXEDPROCESS),--fixedaddress,) \
+	  $(if $(EPOCDATALINKADDRESS),--datalinkaddress=$(EPOCDATALINKADDRESS),) \
+	  $(if $(NAMEDSYMLKUP),--namedlookup,) \
+	  $(if $(SMPSAFE),--smpsafe,) \
+	  $(if $(POSTLINKDEFFILE),--definput=$(POSTLINKDEFFILE),) \
+	  $(if $(EXPORTUNFROZEN),--unfrozen,) \
+	  $(if $(AUTOEXPORTS),--sysdef=$(call dblquote,$(AUTOEXPORTS)),) \
+	  $(if $(CANIGNORENONCALLABLE), \
+	    $(if $(IMPORTLIBRARYREQUIRED),,--ignorenoncallable),) \
+	  $(if $(CANHAVEEXPORTS), --defoutput=$(call dblquote,$(GENERATED_DEFFILE)) --dso=$(GENERATED_DSO)) \
+	  $(if $(filter $(VARIANTTYPE),$(DEBUGGABLE)),--debuggable,) \
+	  $(if $(POSTLINKER_SUPPORTS_WDP), \
+	    --codepaging=$(PAGEDCODE_OPTION) --datapaging=$(PAGEDDATA_OPTION), \
+	    $(POSTLINKER_PAGEDOPTION)) \
+	  $(if $(NOCOMPRESSTARGET), \
+	    --uncompressed, \
+	    $(if $(INFLATECOMPRESS),--compressionmethod inflate,$(if $(BYTEPAIRCOMPRESS),--compressionmethod bytepair,))) \
+	  --libpath="$(call concat,$(PATHSEP)$(CHAR_SEMIC),$(strip $(RUNTIME_LIBS_PATH) $(STATIC_LIBS_PATH)))" \
+	  $(if $(SAVESPACE),$(if $(EXPORTUNFROZEN),,;$(GNURM) -rf $(INTERMEDIATEPATH); true)) \
+	$(call endrule,postlink)
+endef
+$(eval $(e32postlink))
+
+CLEANTARGETS:=$(CLEANTARGETS) $(E32TARGET)
+CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DEFFILE)
+CLEANTARGETS:=$(CLEANTARGETS) $(GENERATED_DSO)
--- a/sbsv2/raptor/lib/flm/emulator.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/emulator.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,226 +1,226 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Emulator interfaces -->
-
-	<interface name="Emulator.flm" extends="base.flm" abstract="true">
-		<param name='DEFFILEKEYWORD'/>
-		<param name='OUTPUTPATH'/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='RELEASEPATH'/>
-		<param name='REQUESTEDTARGETEXT' default=''/>
-		<param name='VARIANTTYPE'/>
-		<param name='SBSV1MAKE'/>
-		<param name='NMAKE'/>
-		<param name='NMAKEFLAGS'/>
-		<param name='FULLVARIANTPATH'/>
-		<param name='PLATMACROS.WINDOWS'/>
-		<param name='PLATMACROS.LINUX'/>
-		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
-	</interface>
-
-	<interface name="Emulator.mmp" extends="Emulator.flm" abstract="true">
-		<param name='BASEADDRESS' default=''/>
-		<param name='CAPABILITYFLAG1' default='00000000u'/>
-		<param name='CAPABILITYFLAG2' default='00000000u'/>
-		<param name='COPY_FOR_STATIC_LINKAGE' default='0'/>
-		<param name='DEBUGLIBRARY' default=''/>
-		<param name='DEFFILE' default=''/>
-		<param name='EFREEZE' default=''/>
-		<param name='EFREEZE_REMOVE_OPTION' default=''/>
-		<param name='EPOCALLOWDLLDATA' default='0'/>
-		<param name='EPOCHEAPSIZEMIN_DEC_KB' default=''/>
-		<param name='EPOCHEAPSIZEMAX_DEC_KB' default=''/>
-		<param name='EPOCPROCESSPRIORITY' default='Foreground'/>
-		<param name='EXPORTLIBRARY' default=''/>
-		<param name='EXPORTUNFROZEN' default=''/>
-		<param name='FIRSTLIB' default=''/>
-		<param name='LIBRARY' default=''/>
-		<param name='LIBRARY_DEBUG' default=''/>
-		<param name='LINKAS' default=''/>
-		<param name='LISTING_OPTION' default='-S'/>
-		<param name='MMPDEFS' default=''/>
-		<param name='NEWLIB' default=''/>
-		<param name='NOEXPORTLIBRARY' default='0'/>
-		<param name='NOSTDCPP' default=''/>
-		<param name='OPTION_CW' default=''/>
-		<param name='RESOLVED_DEFFILE' default=''/>
-		<param name='SECUREID' default=''/>
-		<param name='SOURCE' default=''/>
-		<param name='STATICLIBRARY' default=''/>
-		<param name='STDCPP' default=''/>
-		<param name='STDCPP_DEF' default=''/>
-		<param name='STDCPP_INCLUDE' default=''/>
-		<param name='STDCPP_WCHAR_DEF' default=''/>
-		<param name='SYSTEMINCLUDE' default=''/>
-		<param name='TARGET'/>
-		<param name='TARGETPATH'/>
-		<param name='TARGETTYPE'/>
-		<param name='TESTPATH' default=''/>
-		<param name='TESTCODE' default=''/>
-		<param name='TEST_OPTION' default=''/>
-		<param name='UID2' default='00000000'/>
-		<param name='UID3' default='00000000'/>
-		<param name='USE_TRACE_COMPILER' default=''/>
-		<param name='USERINCLUDE' default=''/>
-		<param name='VENDORID' default='00000000'/>
-		<param name='VERSIONHEX' default='00010000'/>
-		<param name='WIN32_HEADERS' default=''/>
-		<param name='WIN32_LIBRARY' default=''/>
-		<param name='WIN32_RESOURCE' default=''/>
-	</interface>
-
-	<interface name="Emulator.win32" extends="Emulator.mmp" abstract="true" flm="win32.flm">
-		<param name='CC'/>
-		<param name='CDEFS' default=''/>
-		<param name='CFLAGS' default=''/>
-		<param name='CW_DEFAULT_LIBS'/>
-		<param name='CW_RUNTIME_STATIC'/>
-		<param name='CW_RUNTIME_NONSTATIC'/>
-		<param name='DEFAULT_NORMAL_NEWLIB' default=''/>
-		<param name='DEFAULT_SYSTEM_NEWLIB' default=''/>
-		<param name='EXPORT_TYPE'/>
-		<param name='LINKPATH'/>
-		<param name='LFLAGS' default=''/>
-		<param name='NAME_LOOKUP' default=''/>
-		<param name='OPEN_ENVIRONMENT' default=''/>
-		<param name='OPT.ADDCOMMAND'/>
-		<param name='OPT.DEFINE'/>
-		<param name='OPT.DEFFILE'/>
-		<param name='OPT.DEPEND'/>
-		<param name='DEPEND_SKIP' default=''/>
-		<param name='OPT.EXPORT'/>
-		<param name='OPT.IMPORTLIB'/>
-		<param name='OPT.LISTING'/>
-		<param name='OPT.MENTRYPOINT'/>
-		<param name='OPT.MAINENTRYPOINT'/>
-		<param name='OPT.MAP'/>
-		<param name='OPT.NOCOMPACTIMPORTLIB'/>
-		<param name='OPT.NOENTRY'/>
-		<param name='OPT.NOSTDINC'/>
-		<param name='OPT.OUT'/>
-		<param name='OPT.PREINCLUDE'/>
-		<param name='OPT.RUNTIME'/>
-		<param name='OPT.SEARCH'/>
-		<param name='OPT.SHARED'/>
-		<param name='OPT.SPLITINCLUDE'/>
-		<param name='OPT.STDINC'/>
-		<param name='OPT.STDLIB'/>
-		<param name='OPT.SYSINCLUDE'/>
-		<param name='OPT.USERINCLUDE'/>
-		<param name='OPT.WARNINGS'/>
-		<param name='OPT.WCHAR'/>
-		<param name='PREPDEF'/>
-		<param name='RC'/>
-		<param name='MODULE'/>
-	</interface>
-
-	<interface name="Emulator.exe" extends="Emulator.win32" flm="win32exe.flm">
-		<param name='CHECKLIB' default=''/>
-		<param name='LD'/>
-		<param name='OPT.CHECKLIB.STDCPP'/>
-		<param name='OPT.CHECKLIB.SYMCPP'/>
-		<param name='OPT.CHECKLIB.WIN32'/>
-		<param name='OPT.HEAPCOMMIT'/>
-		<param name='OPT.HEAPRESERVE'/>
-		<param name='OPT.LIBFILE'/>
-		<param name='OPT.LIBPATH'/>
-		<param name='OPT.NOIMPLIB'/>
-	</interface>
-
-	<interface name="Emulator.stdexe" extends="Emulator.exe" flm="win32stdexe.flm">
-		<param name='TARGETTYPE' default="stdexe"/>
-		<param name='WCHARENTRYPOINT' default=""/>
-	</interface>
-
-	<interface name="Emulator.dll" extends="Emulator.win32" flm="win32dll.flm">
-		<param name='CHECKLIB' default=''/>
-		<param name='LD'/>
-		<param name='LFLAGS_INFGEN'/>
-		<param name='OPT.CHECKLIB.STDCPP'/>
-		<param name='OPT.CHECKLIB.SYMCPP'/>
-		<param name='OPT.CHECKLIB.WIN32'/>
-		<param name='OPT.HEAPCOMMIT'/>
-		<param name='OPT.HEAPRESERVE'/>
-		<param name='OPT.IMAGEBASE'/>
-		<param name='OPT.IMPLIB'/>
-		<param name='OPT.LIBFILE'/>
-		<param name='OPT.LIBPATH'/>
-		<param name='OPT.NOIMPLIB'/>
-		<param name='MAKEDEF'/>
-	</interface>
-
-	<interface name="Emulator.stddll" extends="Emulator.dll" flm="win32stddll.flm">
-		<param name='LFLAGS_SYMGEN'/>
-		<param name='SYMLOOKUPUTIL'/>
-		<param name='SYMLOOKUPARGS'/>
-		<param name='TARGETTYPE' default="stddll"/>
-	</interface>
-
-	<interface name="Emulator.implib" extends="Emulator.win32" flm="win32implib.flm">
-		<param name='LD'/>
-		<param name='OPT.IMPORTLIB'/>
-		<param name='PREPDEF'/>
-	</interface>
-
-	<interface name="Emulator.lib" extends="Emulator.win32" flm="win32lib.flm">
-		<param name='LD'/>
-		<param name='OPT.STATICLIBRARY'/>
-		<param name='OPT.LIBFILE'/>
-		<param name='OPT.LIBPATH'/>
-		<param name='OPT.NOIMPLIB'/>
-	</interface>
-
-	<interface name="Emulator.stdlib" extends="Emulator.lib" flm="win32stdlib.flm">
-		<param name='TARGETTYPE' default="stdlib"/>
-	</interface>
-
-	<interface name="Emulator.resource" extends="base.resource" flm="win32resource.flm">
-	</interface>
-
-	<interface name="Emulator.bitmap" extends="base.bitmap" flm="win32bitmap.flm">
-	</interface>
-
-	<interface name="Emulator.ani" extends="Emulator.dll" flm="win32ani.flm">
-	</interface>
-
-	<interface name="Emulator.exexp" extends="Emulator.dll" flm="win32exexp.flm">
-	</interface>
-
-	<interface name="Emulator.fsy" extends="Emulator.dll" flm="win32fsy.flm">
-	</interface>
-
-	<interface name="Emulator.kdll" extends="Emulator.dll" flm="win32kdll.flm">
-	</interface>
-
-	<interface name="Emulator.kext" extends="Emulator.dll" flm="win32kext.flm">
-	</interface>
-
-	<interface name="Emulator.klib" extends="Emulator.lib" flm="win32klib.flm">
-	</interface>
-
-	<interface name="Emulator.ldd" extends="Emulator.dll" flm="win32ldd.flm">
-	</interface>
-
-	<interface name="Emulator.none" extends="Emulator.mmp" flm="none.flm">
-	</interface>
-
-	<interface name="Emulator.pdd" extends="Emulator.dll" flm="win32pdd.flm">
-	</interface>
-
-	<interface name="Emulator.pdl" extends="Emulator.dll" flm="win32pdl.flm">
-	</interface>
-
-	<interface name="Emulator.plugin" extends="Emulator.dll" flm="win32plugin.flm">
-	</interface>
-
-	<interface name="Emulator.textnotifier2" extends="Emulator.dll" flm="win32textnotifier2.flm">
-	</interface>
-
-	<interface name="Emulator.var" extends="Emulator.dll" flm="win32var.flm">
-	</interface>
-
-	<interface name="Emulator.var2" extends="Emulator.dll" flm="win32var2.flm">
-	</interface>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Emulator interfaces -->
+
+	<interface name="Emulator.flm" extends="base.flm" abstract="true">
+		<param name='DEFFILEKEYWORD'/>
+		<param name='OUTPUTPATH'/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='RELEASEPATH'/>
+		<param name='REQUESTEDTARGETEXT' default=''/>
+		<param name='VARIANTTYPE'/>
+		<param name='SBSV1MAKE'/>
+		<param name='NMAKE'/>
+		<param name='NMAKEFLAGS'/>
+		<param name='FULLVARIANTPATH'/>
+		<param name='PLATMACROS.WINDOWS'/>
+		<param name='PLATMACROS.LINUX'/>
+		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
+	</interface>
+
+	<interface name="Emulator.mmp" extends="Emulator.flm" abstract="true">
+		<param name='BASEADDRESS' default=''/>
+		<param name='CAPABILITYFLAG1' default='00000000u'/>
+		<param name='CAPABILITYFLAG2' default='00000000u'/>
+		<param name='COPY_FOR_STATIC_LINKAGE' default='0'/>
+		<param name='DEBUGLIBRARY' default=''/>
+		<param name='DEFFILE' default=''/>
+		<param name='EFREEZE' default=''/>
+		<param name='EFREEZE_REMOVE_OPTION' default=''/>
+		<param name='EPOCALLOWDLLDATA' default='0'/>
+		<param name='EPOCHEAPSIZEMIN_DEC_KB' default=''/>
+		<param name='EPOCHEAPSIZEMAX_DEC_KB' default=''/>
+		<param name='EPOCPROCESSPRIORITY' default='Foreground'/>
+		<param name='EXPORTLIBRARY' default=''/>
+		<param name='EXPORTUNFROZEN' default=''/>
+		<param name='FIRSTLIB' default=''/>
+		<param name='LIBRARY' default=''/>
+		<param name='LIBRARY_DEBUG' default=''/>
+		<param name='LINKAS' default=''/>
+		<param name='LISTING_OPTION' default='-S'/>
+		<param name='MMPDEFS' default=''/>
+		<param name='NEWLIB' default=''/>
+		<param name='NOEXPORTLIBRARY' default='0'/>
+		<param name='NOSTDCPP' default=''/>
+		<param name='OPTION_CW' default=''/>
+		<param name='RESOLVED_DEFFILE' default=''/>
+		<param name='SECUREID' default=''/>
+		<param name='SOURCE' default=''/>
+		<param name='STATICLIBRARY' default=''/>
+		<param name='STDCPP' default=''/>
+		<param name='STDCPP_DEF' default=''/>
+		<param name='STDCPP_INCLUDE' default=''/>
+		<param name='STDCPP_WCHAR_DEF' default=''/>
+		<param name='SYSTEMINCLUDE' default=''/>
+		<param name='TARGET'/>
+		<param name='TARGETPATH'/>
+		<param name='TARGETTYPE'/>
+		<param name='TESTPATH' default=''/>
+		<param name='TESTCODE' default=''/>
+		<param name='TEST_OPTION' default=''/>
+		<param name='UID2' default='00000000'/>
+		<param name='UID3' default='00000000'/>
+		<param name='USE_TRACE_COMPILER' default=''/>
+		<param name='USERINCLUDE' default=''/>
+		<param name='VENDORID' default='00000000'/>
+		<param name='VERSIONHEX' default='00010000'/>
+		<param name='WIN32_HEADERS' default=''/>
+		<param name='WIN32_LIBRARY' default=''/>
+		<param name='WIN32_RESOURCE' default=''/>
+	</interface>
+
+	<interface name="Emulator.win32" extends="Emulator.mmp" abstract="true" flm="win32.flm">
+		<param name='CC'/>
+		<param name='CDEFS' default=''/>
+		<param name='CFLAGS' default=''/>
+		<param name='CW_DEFAULT_LIBS'/>
+		<param name='CW_RUNTIME_STATIC'/>
+		<param name='CW_RUNTIME_NONSTATIC'/>
+		<param name='DEFAULT_NORMAL_NEWLIB' default=''/>
+		<param name='DEFAULT_SYSTEM_NEWLIB' default=''/>
+		<param name='EXPORT_TYPE'/>
+		<param name='LINKPATH'/>
+		<param name='LFLAGS' default=''/>
+		<param name='NAME_LOOKUP' default=''/>
+		<param name='OPEN_ENVIRONMENT' default=''/>
+		<param name='OPT.ADDCOMMAND'/>
+		<param name='OPT.DEFINE'/>
+		<param name='OPT.DEFFILE'/>
+		<param name='OPT.DEPEND'/>
+		<param name='DEPEND_SKIP' default=''/>
+		<param name='OPT.EXPORT'/>
+		<param name='OPT.IMPORTLIB'/>
+		<param name='OPT.LISTING'/>
+		<param name='OPT.MENTRYPOINT'/>
+		<param name='OPT.MAINENTRYPOINT'/>
+		<param name='OPT.MAP'/>
+		<param name='OPT.NOCOMPACTIMPORTLIB'/>
+		<param name='OPT.NOENTRY'/>
+		<param name='OPT.NOSTDINC'/>
+		<param name='OPT.OUT'/>
+		<param name='OPT.PREINCLUDE'/>
+		<param name='OPT.RUNTIME'/>
+		<param name='OPT.SEARCH'/>
+		<param name='OPT.SHARED'/>
+		<param name='OPT.SPLITINCLUDE'/>
+		<param name='OPT.STDINC'/>
+		<param name='OPT.STDLIB'/>
+		<param name='OPT.SYSINCLUDE'/>
+		<param name='OPT.USERINCLUDE'/>
+		<param name='OPT.WARNINGS'/>
+		<param name='OPT.WCHAR'/>
+		<param name='PREPDEF'/>
+		<param name='RC'/>
+		<param name='MODULE'/>
+	</interface>
+
+	<interface name="Emulator.exe" extends="Emulator.win32" flm="win32exe.flm">
+		<param name='CHECKLIB' default=''/>
+		<param name='LD'/>
+		<param name='OPT.CHECKLIB.STDCPP'/>
+		<param name='OPT.CHECKLIB.SYMCPP'/>
+		<param name='OPT.CHECKLIB.WIN32'/>
+		<param name='OPT.HEAPCOMMIT'/>
+		<param name='OPT.HEAPRESERVE'/>
+		<param name='OPT.LIBFILE'/>
+		<param name='OPT.LIBPATH'/>
+		<param name='OPT.NOIMPLIB'/>
+	</interface>
+
+	<interface name="Emulator.stdexe" extends="Emulator.exe" flm="win32stdexe.flm">
+		<param name='TARGETTYPE' default="stdexe"/>
+		<param name='WCHARENTRYPOINT' default=""/>
+	</interface>
+
+	<interface name="Emulator.dll" extends="Emulator.win32" flm="win32dll.flm">
+		<param name='CHECKLIB' default=''/>
+		<param name='LD'/>
+		<param name='LFLAGS_INFGEN'/>
+		<param name='OPT.CHECKLIB.STDCPP'/>
+		<param name='OPT.CHECKLIB.SYMCPP'/>
+		<param name='OPT.CHECKLIB.WIN32'/>
+		<param name='OPT.HEAPCOMMIT'/>
+		<param name='OPT.HEAPRESERVE'/>
+		<param name='OPT.IMAGEBASE'/>
+		<param name='OPT.IMPLIB'/>
+		<param name='OPT.LIBFILE'/>
+		<param name='OPT.LIBPATH'/>
+		<param name='OPT.NOIMPLIB'/>
+		<param name='MAKEDEF'/>
+	</interface>
+
+	<interface name="Emulator.stddll" extends="Emulator.dll" flm="win32stddll.flm">
+		<param name='LFLAGS_SYMGEN'/>
+		<param name='SYMLOOKUPUTIL'/>
+		<param name='SYMLOOKUPARGS'/>
+		<param name='TARGETTYPE' default="stddll"/>
+	</interface>
+
+	<interface name="Emulator.implib" extends="Emulator.win32" flm="win32implib.flm">
+		<param name='LD'/>
+		<param name='OPT.IMPORTLIB'/>
+		<param name='PREPDEF'/>
+	</interface>
+
+	<interface name="Emulator.lib" extends="Emulator.win32" flm="win32lib.flm">
+		<param name='LD'/>
+		<param name='OPT.STATICLIBRARY'/>
+		<param name='OPT.LIBFILE'/>
+		<param name='OPT.LIBPATH'/>
+		<param name='OPT.NOIMPLIB'/>
+	</interface>
+
+	<interface name="Emulator.stdlib" extends="Emulator.lib" flm="win32stdlib.flm">
+		<param name='TARGETTYPE' default="stdlib"/>
+	</interface>
+
+	<interface name="Emulator.resource" extends="base.resource" flm="win32resource.flm">
+	</interface>
+
+	<interface name="Emulator.bitmap" extends="base.bitmap" flm="win32bitmap.flm">
+	</interface>
+
+	<interface name="Emulator.ani" extends="Emulator.dll" flm="win32ani.flm">
+	</interface>
+
+	<interface name="Emulator.exexp" extends="Emulator.dll" flm="win32exexp.flm">
+	</interface>
+
+	<interface name="Emulator.fsy" extends="Emulator.dll" flm="win32fsy.flm">
+	</interface>
+
+	<interface name="Emulator.kdll" extends="Emulator.dll" flm="win32kdll.flm">
+	</interface>
+
+	<interface name="Emulator.kext" extends="Emulator.dll" flm="win32kext.flm">
+	</interface>
+
+	<interface name="Emulator.klib" extends="Emulator.lib" flm="win32klib.flm">
+	</interface>
+
+	<interface name="Emulator.ldd" extends="Emulator.dll" flm="win32ldd.flm">
+	</interface>
+
+	<interface name="Emulator.none" extends="Emulator.mmp" flm="none.flm">
+	</interface>
+
+	<interface name="Emulator.pdd" extends="Emulator.dll" flm="win32pdd.flm">
+	</interface>
+
+	<interface name="Emulator.pdl" extends="Emulator.dll" flm="win32pdl.flm">
+	</interface>
+
+	<interface name="Emulator.plugin" extends="Emulator.dll" flm="win32plugin.flm">
+	</interface>
+
+	<interface name="Emulator.textnotifier2" extends="Emulator.dll" flm="win32textnotifier2.flm">
+	</interface>
+
+	<interface name="Emulator.var" extends="Emulator.dll" flm="win32var.flm">
+	</interface>
+
+	<interface name="Emulator.var2" extends="Emulator.dll" flm="win32var2.flm">
+	</interface>
+</build>
--- a/sbsv2/raptor/lib/flm/extensions.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/extensions.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,47 +1,47 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Extension interfaces : replacements for Template Extension Makefiles -->
-
-	<interface name="Symbian.UserFLM" extends="base.flm" abstract="true">
-		<param name='EPOCROOT'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='EPOCBLD'/>
-		<param name='TO_BLDINF'/>
-		<param name='EXTENSION_ROOT'/>
-		<param name='PLATFORM'/>
-		<param name='PLATFORM_PATH'/>
-		<param name='CFG'/>
-		<param name='CFG_PATH'/>
-		<param name='PERL'/>
-	</interface>
-
-	<interface name="Symbian.KernelFLM" extends="Symbian.UserFLM" abstract="true">
-		<param name='CC'/>
-		<param name='LD'/>
-		<param name='ASM'/>
-		<param name='FROMELF'/>		
-	</interface>
-	
-	<interface name="tools.stlport" extends="Symbian.UserFLM" flm="tools/stlport.flm">
-		<param name="STLPORT_VERSION"/>
-		<param name="STL_REL_LIB_NAME"/>
-		<param name="STL_DEB_LIB_NAME"/>
-		<param name="SOURCE_ARCHIVE"/>
-	</interface>
-
-	<interface name="converged-comms.createcommdbs" extends="Symbian.UserFLM" flm="converged-comms/createcommdbs.flm">
-		<param name="SRCDIR"/>
-	</interface>
-	<interface name="application-protocols.buildstubsis" extends="Symbian.UserFLM" flm="tools/buildstubsis.flm">
-		<param name="SISNAME"/>
-		<param name="SRCDIR"/>
-	</interface>
-	<!-- -->
-	<interface name="app-services.buildstubsis" extends="application-protocols.buildstubsis" flm="tools/buildstubsis.flm">
-	</interface>
-
-	<interface name="converged-comms.installdefaultcommdb" extends="Symbian.UserFLM" flm="converged-comms/installdefaultcommdb.flm">
-
-	</interface>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Extension interfaces : replacements for Template Extension Makefiles -->
+
+	<interface name="Symbian.UserFLM" extends="base.flm" abstract="true">
+		<param name='EPOCROOT'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='EPOCBLD'/>
+		<param name='TO_BLDINF'/>
+		<param name='EXTENSION_ROOT'/>
+		<param name='PLATFORM'/>
+		<param name='PLATFORM_PATH'/>
+		<param name='CFG'/>
+		<param name='CFG_PATH'/>
+		<param name='PERL'/>
+	</interface>
+
+	<interface name="Symbian.KernelFLM" extends="Symbian.UserFLM" abstract="true">
+		<param name='CC'/>
+		<param name='LD'/>
+		<param name='ASM'/>
+		<param name='FROMELF'/>		
+	</interface>
+	
+	<interface name="tools.stlport" extends="Symbian.UserFLM" flm="tools/stlport.flm">
+		<param name="STLPORT_VERSION"/>
+		<param name="STL_REL_LIB_NAME"/>
+		<param name="STL_DEB_LIB_NAME"/>
+		<param name="SOURCE_ARCHIVE"/>
+	</interface>
+
+	<interface name="converged-comms.createcommdbs" extends="Symbian.UserFLM" flm="converged-comms/createcommdbs.flm">
+		<param name="SRCDIR"/>
+	</interface>
+	<interface name="application-protocols.buildstubsis" extends="Symbian.UserFLM" flm="tools/buildstubsis.flm">
+		<param name="SISNAME"/>
+		<param name="SRCDIR"/>
+	</interface>
+	<!-- -->
+	<interface name="app-services.buildstubsis" extends="application-protocols.buildstubsis" flm="tools/buildstubsis.flm">
+	</interface>
+
+	<interface name="converged-comms.installdefaultcommdb" extends="Symbian.UserFLM" flm="converged-comms/installdefaultcommdb.flm">
+
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/final.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/final.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,30 +1,30 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# final include file : this is included at the end of
-# all generated makefiles
-# INPUTS : assumes OSTYPE and FLMHOME are set.
-#
-
-# The final makefile is not a once-per-build file
-# if the make tree is split into many files then
-# final must be "included" many times
-
-# Create all remaining buffered directories
-#
-$(call makepathfinalise)
-
-# For users of SBSv2 who wish to add in their own final settings
-# without modifying this file:
--include $(FLMHOME)/user/final.mk
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# final include file : this is included at the end of
+# all generated makefiles
+# INPUTS : assumes OSTYPE and FLMHOME are set.
+#
+
+# The final makefile is not a once-per-build file
+# if the make tree is split into many files then
+# final must be "included" many times
+
+# Create all remaining buffered directories
+#
+$(call makepathfinalise)
+
+# For users of SBSv2 who wish to add in their own final settings
+# without modifying this file:
+-include $(FLMHOME)/user/final.mk
--- a/sbsv2/raptor/lib/flm/flmtools.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/flmtools.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,300 +1,300 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Tools for use in FLMs - common macros and variables
-#
-
-ifeq ($(FLMTOOLS.MK),)
-FLMTOOLS.MK:=included
-
-CHAR_COMMA:=,
-CHAR_SEMIC:=;
-CHAR_COLON:=:
-CHAR_BLANK:=
-#the BLANK BLANK trick saves us from clever text editrors that remove spaces at the end of a line
-CHAR_SPACE:=$(BLANK) $(BLANK)
-CHAR_DQUOTE:="
-CHAR_QUOTE:='
-CHAR_LBRACKET:=(
-CHAR_RBRACKET:=)
-CHAR_DOLLAR:=$
-
-#'" # This comment makes syntax highlighting work again. Leave it here please!
-
-# A macro to ensure that the shell does not 
-# interpret brackets in a command
-define shEscapeBrackets
-$(subst $(CHAR_LBRACKET),\$(CHAR_LBRACKET),$(subst $(CHAR_RBRACKET),\$(CHAR_RBRACKET),$(1)))
-endef
-
-# A macro to protect quotes from shell expansion
-define shEscapeQuotes
-$(subst $(CHAR_QUOTE),\$(CHAR_QUOTE),$(subst $(CHAR_DQUOTE),\$(CHAR_DQUOTE),$(1)))
-endef
-
-# Protect against shell expansion
-define shEscape
-$(call shEscapeBrackets,$(call shEscapeQuotes,$(1)))
-endef
-
-# A macro to escape spaces for use in rule targets or dependencies
-define ruleEscape
-$(subst $(CHAR_SPACE),\$(CHAR_SPACE),$(1))
-endef
-
-# A macro for turning a list into a concatenated string
-# 1st parameter is the separator to use, second is the list
-# e.g. $(call concat,:,/sbin /usr/sbin /usr/local/sbin /bin /usr/bin /usr/local/bin)
-# would create the string
-#   /sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
-# It has to be recursive to manage to create a string from a list
-define concat
-$(if $(word 2,$(2)),$(firstword $(2))$(1)$(call concat,$(1),$(wordlist 2,$(words $(2)),$(2))),$(2))
-endef
-
-# A macro for converting a string to lowercase
-lowercase_TABLE:=A,a B,b C,c D,d E,e F,f G,g H,h I,i J,j K,k L,l M,m N,n O,o P,p Q,q R,r S,s T,t U,u V,v W,w X,x Y,y Z,z
-
-define lowercase_internal
-$(if $1,$$(subst $(firstword $1),$(call lowercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
-endef
-
-define lowercase
-$(eval lowercase_RESULT:=$(call lowercase_internal,$(lowercase_TABLE),$1))$(lowercase_RESULT)
-endef
-
-# A macro for converting a string to uppercase
-uppercase_TABLE:=a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
-
-define uppercase_internal
-$(if $1,$$(subst $(firstword $1),$(call uppercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
-endef
-
-define uppercase
-$(eval uppercase_RESULT:=$(call uppercase_internal,$(uppercase_TABLE),$1))$(uppercase_RESULT)
-endef
-
-# A macro for removing duplicate tokens from a list 
-# whilst retaining the list's order
-define uniq
-$(if $(1),$(info $(words $(1)) $(1))\
-$(firstword $(1))$(call uniq,$(filter-out $(firstword $(1)),$(wordlist 2,$(words $(1)),$(1))))\
-,)
-endef
-
-# A macro for enclosing all list elements in some kind of quote or bracket
-define enclose
-$(foreach ITEM,$(2),$(1)$(ITEM)$(1))
-endef
-
-# A macro enclosing all list elements in double quotes and removing escapes
-define dblquote
-$(subst \,,$(call enclose,$(CHAR_DQUOTE),$(1)))
-endef
-
-# A macro enclosing a single item in double quotes, so that spaces can be quoted
-define dblquoteitem
-$(if $(1),$(CHAR_DQUOTE)$(1)$(CHAR_DQUOTE),)
-endef
-
-# A macro to add a prefix to a list of items, while putting quotes around each
-# item so prefixed, to allow spaces in the prefix.
-define addquotedprefix
-$(addprefix $(CHAR_DQUOTE)$(1),$(addsuffix $(CHAR_DQUOTE),$(2)))
-endef
-
-# A macro enclosing all list elements in single quotes and prepending a string
-# basically to turn a list like:
-#    LINUX TOOLS EXP=_declspec(export) NODEBUG
-# into:
-#    -D'LINUX' -D'TOOLS' -D'EXP=_declspec(export)' -DNODEBUG
-define makemacrodef
-$(strip $(patsubst %,$1'%',$2))
-endef
-
-# Make a (filename) string safe for use as a variable name
-define sanitise
-$(subst /,_,$(subst :,_,$(1)))
-endef
-
-# A variation on several macros implemented directly in FLMs, this takes a filename and a list
-# of "words" and pumps groups of 10 words at a time into the file.  Its main use is the creation
-# of command/response files for tools that need to avoid blowing command line length limits
-# when referencing long lists of absolutely pathed files.
-define groupin10infile
-	$(if $2,@echo -e $(foreach L,$(wordlist 1,10,$2),"$(L)\\n") >>$1,)
-	$(if $2,$(call groupin10infile,$1,$(wordlist 11,$(words $2),$2)),@true)
-endef
-
-## DEBUGGING Macros ######################################
-
-# A macro to help with debugging FLMs by printing out variables specified in the FLMDEBUG variable
-define flmdebug
-$(if $(FLMDEBUG),@echo -e "<flmdebug>\\n $(foreach VAR,$(FLMDEBUG),$(VAR):=$($(VAR))\\n)</flmdebug>",)
-endef
-
-define flmdebug2
-flmdebug2_OUT:=$(if $(FLMDEBUG),$(shell echo -e "<flmdebug>\\n $(foreach VAR,$(FLMDEBUG),$(VAR):=$($(VAR))\\n)</flmdebug>" 1>&2),)
-endef
-
-## Path handling tools ###################################
-
-ifeq ($(OSTYPE),cygwin)
-
-SPACESLASH:=$(CHAR_SPACE)/
-SPACESLASH2:=$(CHAR_SPACE)\/
-SPACEDSLASH:=$(CHAR_SPACE)//
-# How lists of directories are separated on this OS:
-DIRSEP:=$(CHAR_SEMIC)
-
-define slashprotect
-$(subst $(SPACESLASH),$(SPACESLASH2),$(1))
-endef
-
-define pathprep
-$(subst $(SPACESLASH),$(SPACEDSLASH),$(1))
-endef
-
-else
-
-# How lists of directories are separated on this OS:
-DIRSEP:=$(CHAR_COLON)
-
-define slashprotect
-$(1)
-endef
-
-define pathprep
-$(1)
-endef
-
-endif
-
-# Path separator (always / in make)
-PATHSEP=/
-
-## Source to object file mapping #########################
-
-## Converting a list of source files to a list of object files without altering their
-## relative order.  Also deals with multiple file types mapping to the same object type
-## e.g. .CPP and .cpp and .c++ all map to .o
-define allsuffixsubst_internal
-$(if $1,$$(patsubst %$(firstword $1),%$2,$(call allsuffixsubst_internal,$(wordlist 2,$(words $1),$1),$2,$3)),$3)
-endef
-
-# $1 - the list of suffixes to replace
-# $2 - the suffix to replace them with
-# $3 - the list of strings to perform the replacement on
-define allsuffixsubst
-$(eval allsuffixsubst_RESULT:=$(call allsuffixsubst_internal,$1,$2,$3))$(allsuffixsubst_RESULT)
-endef
-
-## extractfilesoftype ##
-# $(1) is the list of types to extract e.g. cpp cxx CPP
-# $(2) is the list of files to select from
-define extractfilesoftype
-$(foreach EXT,$(1),$(filter %$(EXT),$(2)))
-endef
-
-## extractandmap ##
-# $(1) is the list of types e.g. cpp cxx CPP
-# $(2) is the extension to map to e.g. .o or .ARMV5.lst oe _.cpp
-# $(3) is the list of files to select from
-# This functon turns a list like 'fred.cpp bob.c++' into 'fred.o bob.o'
-define extractandmap
-$(foreach EXT,$(1),$(patsubst %$(EXT),%$(2),$(filter %$(EXT),$(3))))
-endef
-
-## relocatefiles ##
-# $(1) directory to relocate them in
-# $(2) list of files to relocate
-define relocatefiles
-$(patsubst %,$(1)/%,$(notdir $(2)))
-endef
-
-
-## Get stack handling code (for calls to FLMS which don't destroy variables)
-include $(FLMHOME)/stack.mk
-
-## Allow flm rules to be tagged and enable FORCESUCCESS feature etc
-include $(FLMHOME)/taggedrules.mk
-
-## Get boolean tools e.g. that implement the equals macro.
-include $(FLMHOME)/booleanlogic.mk
-
-## Macros for writing recipes without needing to know eval
-#
-# an ordinary recipe, for example,
-#
-# $(call raptor_recipe,name,$(TARGET),$(PREREQUISITES),$(COMMAND))
-#
-define raptor_recipe
-$(eval $2: $3
-	$(call startrule,$1) $4 $(call endrule,$1)
-)
-endef
-#
-# a phony recipe (double colon rule). Making a separate macro with an uglier
-# name will hopefully discourage people from using this unless they need to,
-# for example,
-#
-# $(call raptor_phony_recipe,name,ALL,,$(COMMAND))
-#
-define raptor_phony_recipe
-$(eval $2:: $3
-	$(call startrule,$1) $4 $(call endrule,$1)
-)
-endef
-
-################################################################################
-## Test code to allow this makefile fragment to be tested in a standalone manner
-##
-## example:
-##   FLMHOME=./ make -f flmtools.mk  STANDALONE_TEST=1 
-##
-
-ifneq ($(STANDALONE_TEST),)
-
-test::
-	@echo "macros"
-	test  "$(call concat,:,CON CAT EN ATED)" == "CON:CAT:EN:ATED" 
-	test  "$(call enclose,$(CHAR_QUOTE),THESE WORDS ARE QUOTED)" == "'THESE' 'WORDS' 'ARE' 'QUOTED'" 
-	echo $(SHELL)
-	test  '$(call dblquote,THESE WORDS ARE DOUBLEQUOTED)' == '"THESE" "WORDS" "ARE" "DOUBLEQUOTED"'
-	echo  $(call dqnp,/c/fred /d/alice /blah/blah)
-	@echo ""
-
-
-test::
-	@echo lowercase macro
-	test '$(call lowercase,ABCDEFGHIJKLMNOPQRSTUVWXYZ AA BB CC)' == 'abcdefghijklmnopqrstuvwxyz aa bb cc'
-
-define lowercase_internal
-$(if $1,$$(subst $(firstword $1),$(call lowercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
-endef
-
-define lowercase
-$(eval lowercase_RESULT:=$(call lowercase_internal,$(lowercase_TABLE),$1))$(lowercase_RESULT)
-endef
-
-	test '$(call pathprep,--apcs /inter)' == '--apcs //inter'
-	
-test::
-	@echo "pathprep macro"
-	test '$(call pathprep,--apcs /inter)' == '--apcs //inter'
-	test '$(call pathprep,blah theone/or/theother)' == 'blah theone/or/theother'
-
-endif
-endif
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Tools for use in FLMs - common macros and variables
+#
+
+ifeq ($(FLMTOOLS.MK),)
+FLMTOOLS.MK:=included
+
+CHAR_COMMA:=,
+CHAR_SEMIC:=;
+CHAR_COLON:=:
+CHAR_BLANK:=
+#the BLANK BLANK trick saves us from clever text editrors that remove spaces at the end of a line
+CHAR_SPACE:=$(BLANK) $(BLANK)
+CHAR_DQUOTE:="
+CHAR_QUOTE:='
+CHAR_LBRACKET:=(
+CHAR_RBRACKET:=)
+CHAR_DOLLAR:=$
+
+#'" # This comment makes syntax highlighting work again. Leave it here please!
+
+# A macro to ensure that the shell does not 
+# interpret brackets in a command
+define shEscapeBrackets
+$(subst $(CHAR_LBRACKET),\$(CHAR_LBRACKET),$(subst $(CHAR_RBRACKET),\$(CHAR_RBRACKET),$(1)))
+endef
+
+# A macro to protect quotes from shell expansion
+define shEscapeQuotes
+$(subst $(CHAR_QUOTE),\$(CHAR_QUOTE),$(subst $(CHAR_DQUOTE),\$(CHAR_DQUOTE),$(1)))
+endef
+
+# Protect against shell expansion
+define shEscape
+$(call shEscapeBrackets,$(call shEscapeQuotes,$(1)))
+endef
+
+# A macro to escape spaces for use in rule targets or dependencies
+define ruleEscape
+$(subst $(CHAR_SPACE),\$(CHAR_SPACE),$(1))
+endef
+
+# A macro for turning a list into a concatenated string
+# 1st parameter is the separator to use, second is the list
+# e.g. $(call concat,:,/sbin /usr/sbin /usr/local/sbin /bin /usr/bin /usr/local/bin)
+# would create the string
+#   /sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
+# It has to be recursive to manage to create a string from a list
+define concat
+$(if $(word 2,$(2)),$(firstword $(2))$(1)$(call concat,$(1),$(wordlist 2,$(words $(2)),$(2))),$(2))
+endef
+
+# A macro for converting a string to lowercase
+lowercase_TABLE:=A,a B,b C,c D,d E,e F,f G,g H,h I,i J,j K,k L,l M,m N,n O,o P,p Q,q R,r S,s T,t U,u V,v W,w X,x Y,y Z,z
+
+define lowercase_internal
+$(if $1,$$(subst $(firstword $1),$(call lowercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
+endef
+
+define lowercase
+$(eval lowercase_RESULT:=$(call lowercase_internal,$(lowercase_TABLE),$1))$(lowercase_RESULT)
+endef
+
+# A macro for converting a string to uppercase
+uppercase_TABLE:=a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
+
+define uppercase_internal
+$(if $1,$$(subst $(firstword $1),$(call uppercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
+endef
+
+define uppercase
+$(eval uppercase_RESULT:=$(call uppercase_internal,$(uppercase_TABLE),$1))$(uppercase_RESULT)
+endef
+
+# A macro for removing duplicate tokens from a list 
+# whilst retaining the list's order
+define uniq
+$(if $(1),$(info $(words $(1)) $(1))\
+$(firstword $(1))$(call uniq,$(filter-out $(firstword $(1)),$(wordlist 2,$(words $(1)),$(1))))\
+,)
+endef
+
+# A macro for enclosing all list elements in some kind of quote or bracket
+define enclose
+$(foreach ITEM,$(2),$(1)$(ITEM)$(1))
+endef
+
+# A macro enclosing all list elements in double quotes and removing escapes
+define dblquote
+$(subst \,,$(call enclose,$(CHAR_DQUOTE),$(1)))
+endef
+
+# A macro enclosing a single item in double quotes, so that spaces can be quoted
+define dblquoteitem
+$(if $(1),$(CHAR_DQUOTE)$(1)$(CHAR_DQUOTE),)
+endef
+
+# A macro to add a prefix to a list of items, while putting quotes around each
+# item so prefixed, to allow spaces in the prefix.
+define addquotedprefix
+$(addprefix $(CHAR_DQUOTE)$(1),$(addsuffix $(CHAR_DQUOTE),$(2)))
+endef
+
+# A macro enclosing all list elements in single quotes and prepending a string
+# basically to turn a list like:
+#    LINUX TOOLS EXP=_declspec(export) NODEBUG
+# into:
+#    -D'LINUX' -D'TOOLS' -D'EXP=_declspec(export)' -DNODEBUG
+define makemacrodef
+$(strip $(patsubst %,$1'%',$2))
+endef
+
+# Make a (filename) string safe for use as a variable name
+define sanitise
+$(subst /,_,$(subst :,_,$(1)))
+endef
+
+# A variation on several macros implemented directly in FLMs, this takes a filename and a list
+# of "words" and pumps groups of 10 words at a time into the file.  Its main use is the creation
+# of command/response files for tools that need to avoid blowing command line length limits
+# when referencing long lists of absolutely pathed files.
+define groupin10infile
+	$(if $2,@echo -e $(foreach L,$(wordlist 1,10,$2),"$(L)\\n") >>$1,)
+	$(if $2,$(call groupin10infile,$1,$(wordlist 11,$(words $2),$2)),@true)
+endef
+
+## DEBUGGING Macros ######################################
+
+# A macro to help with debugging FLMs by printing out variables specified in the FLMDEBUG variable
+define flmdebug
+$(if $(FLMDEBUG),@echo -e "<flmdebug>\\n $(foreach VAR,$(FLMDEBUG),$(VAR):=$($(VAR))\\n)</flmdebug>",)
+endef
+
+define flmdebug2
+flmdebug2_OUT:=$(if $(FLMDEBUG),$(shell echo -e "<flmdebug>\\n $(foreach VAR,$(FLMDEBUG),$(VAR):=$($(VAR))\\n)</flmdebug>" 1>&2),)
+endef
+
+## Path handling tools ###################################
+
+ifeq ($(OSTYPE),cygwin)
+
+SPACESLASH:=$(CHAR_SPACE)/
+SPACESLASH2:=$(CHAR_SPACE)\/
+SPACEDSLASH:=$(CHAR_SPACE)//
+# How lists of directories are separated on this OS:
+DIRSEP:=$(CHAR_SEMIC)
+
+define slashprotect
+$(subst $(SPACESLASH),$(SPACESLASH2),$(1))
+endef
+
+define pathprep
+$(subst $(SPACESLASH),$(SPACEDSLASH),$(1))
+endef
+
+else
+
+# How lists of directories are separated on this OS:
+DIRSEP:=$(CHAR_COLON)
+
+define slashprotect
+$(1)
+endef
+
+define pathprep
+$(1)
+endef
+
+endif
+
+# Path separator (always / in make)
+PATHSEP=/
+
+## Source to object file mapping #########################
+
+## Converting a list of source files to a list of object files without altering their
+## relative order.  Also deals with multiple file types mapping to the same object type
+## e.g. .CPP and .cpp and .c++ all map to .o
+define allsuffixsubst_internal
+$(if $1,$$(patsubst %$(firstword $1),%$2,$(call allsuffixsubst_internal,$(wordlist 2,$(words $1),$1),$2,$3)),$3)
+endef
+
+# $1 - the list of suffixes to replace
+# $2 - the suffix to replace them with
+# $3 - the list of strings to perform the replacement on
+define allsuffixsubst
+$(eval allsuffixsubst_RESULT:=$(call allsuffixsubst_internal,$1,$2,$3))$(allsuffixsubst_RESULT)
+endef
+
+## extractfilesoftype ##
+# $(1) is the list of types to extract e.g. cpp cxx CPP
+# $(2) is the list of files to select from
+define extractfilesoftype
+$(foreach EXT,$(1),$(filter %$(EXT),$(2)))
+endef
+
+## extractandmap ##
+# $(1) is the list of types e.g. cpp cxx CPP
+# $(2) is the extension to map to e.g. .o or .ARMV5.lst oe _.cpp
+# $(3) is the list of files to select from
+# This functon turns a list like 'fred.cpp bob.c++' into 'fred.o bob.o'
+define extractandmap
+$(foreach EXT,$(1),$(patsubst %$(EXT),%$(2),$(filter %$(EXT),$(3))))
+endef
+
+## relocatefiles ##
+# $(1) directory to relocate them in
+# $(2) list of files to relocate
+define relocatefiles
+$(patsubst %,$(1)/%,$(notdir $(2)))
+endef
+
+
+## Get stack handling code (for calls to FLMS which don't destroy variables)
+include $(FLMHOME)/stack.mk
+
+## Allow flm rules to be tagged and enable FORCESUCCESS feature etc
+include $(FLMHOME)/taggedrules.mk
+
+## Get boolean tools e.g. that implement the equals macro.
+include $(FLMHOME)/booleanlogic.mk
+
+## Macros for writing recipes without needing to know eval
+#
+# an ordinary recipe, for example,
+#
+# $(call raptor_recipe,name,$(TARGET),$(PREREQUISITES),$(COMMAND))
+#
+define raptor_recipe
+$(eval $2: $3
+	$(call startrule,$1) $4 $(call endrule,$1)
+)
+endef
+#
+# a phony recipe (double colon rule). Making a separate macro with an uglier
+# name will hopefully discourage people from using this unless they need to,
+# for example,
+#
+# $(call raptor_phony_recipe,name,ALL,,$(COMMAND))
+#
+define raptor_phony_recipe
+$(eval $2:: $3
+	$(call startrule,$1) $4 $(call endrule,$1)
+)
+endef
+
+################################################################################
+## Test code to allow this makefile fragment to be tested in a standalone manner
+##
+## example:
+##   FLMHOME=./ make -f flmtools.mk  STANDALONE_TEST=1 
+##
+
+ifneq ($(STANDALONE_TEST),)
+
+test::
+	@echo "macros"
+	test  "$(call concat,:,CON CAT EN ATED)" == "CON:CAT:EN:ATED" 
+	test  "$(call enclose,$(CHAR_QUOTE),THESE WORDS ARE QUOTED)" == "'THESE' 'WORDS' 'ARE' 'QUOTED'" 
+	echo $(SHELL)
+	test  '$(call dblquote,THESE WORDS ARE DOUBLEQUOTED)' == '"THESE" "WORDS" "ARE" "DOUBLEQUOTED"'
+	echo  $(call dqnp,/c/fred /d/alice /blah/blah)
+	@echo ""
+
+
+test::
+	@echo lowercase macro
+	test '$(call lowercase,ABCDEFGHIJKLMNOPQRSTUVWXYZ AA BB CC)' == 'abcdefghijklmnopqrstuvwxyz aa bb cc'
+
+define lowercase_internal
+$(if $1,$$(subst $(firstword $1),$(call lowercase_internal,$(wordlist 2,$(words $1),$1),$2)),$2)
+endef
+
+define lowercase
+$(eval lowercase_RESULT:=$(call lowercase_internal,$(lowercase_TABLE),$1))$(lowercase_RESULT)
+endef
+
+	test '$(call pathprep,--apcs /inter)' == '--apcs //inter'
+	
+test::
+	@echo "pathprep macro"
+	test '$(call pathprep,--apcs /inter)' == '--apcs //inter'
+	test '$(call pathprep,blah theone/or/theother)' == 'blah theone/or/theother'
+
+endif
+endif
+
--- a/sbsv2/raptor/lib/flm/gccxml.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/gccxml.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,257 +1,257 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# All targets Function Like Makefile (FLM) supporting the execution of
-# gccxml_cc1plus on source, the creation of project and resource descriptive XML files
-# and packaging into an appropriate archive for CDB processing.
-#
-#
-
-
-# passed in values, stripped of whitespace
-DEFFILE:=$(strip $(DEFFILE))
-LINKAS:=$(strip $(LINKAS))
-UID1:=$(strip $(UID1))
-UID2:=$(strip $(UID2))
-UID3:=$(strip $(UID3))
-
-# local variables
-CREATABLEPATHS:=
-CLEANTARGETS:=
-RELEASABLES:=
-STDCPP_BUILD:=
-CIAFILEEXTENSIONS:=%.CIA %.cia %.Cia %.cIa %.cIA %.ciA %.CIa %.CiA
-
-ROOTBLDPATH:=$(OUTPUTPATH)/gccxml
-VARIANTBLDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
-ROOTRELEASEPATH:=$(RELEASEPATH)/gccxml
-VARIANTRELEASEPATH:=$(RELEASEPATH)/$(FULLVARIANTPATH)
-
-CREATABLEPATHS:=$(CREATABLEPATHS) $(VARIANTBLDPATH) $(VARIANTRELEASEPATH) $(ROOTBLDPATH) $(ROOTRELEASEPATH)
-
-# type-specific definitions
-BASE_TYPE:=dll
-TARGET_MACRO:=__DLL__
-ifneq ($(findstring exe,$(TARGETTYPE)),)
-  BASE_TYPE:=exe
-  TARGET_MACRO:=__EXE__
-endif
-ifneq ($(findstring lib,$(TARGETTYPE)),)
-  BASE_TYPE:=lib
-  TARGET_MACRO:=
-endif
-
-# utility functions
-# returns absolutely-pathed temporary build filenames based solely on the basename of the source file, but with an additional "_" for .cia files
-# $(1) input source file list
-# $(2) output file extension
-define mapsource2output
-  $(foreach SOURCEFILE,$(1),$(patsubst %, $(VARIANTBLDPATH)/%, $(basename $(notdir $(SOURCEFILE)))$(if $(filter $(CIAFILEEXTENSIONS),$(SOURCEFILE)),_,)$(2)))
-endef
-
-# returns absolutely-pathed temporary build filenames based on the full resource filename
-# $(1) input resource file list
-# $(2) output file extension
-define mapresource2output
-  $(patsubst %, $(ROOTBLDPATH)/%, $(addsuffix $(2),$(notdir $(1))))
-endef
-
-# calls a tool multiple times with grouped arguments
-# $(1) tool to call with any non-variable arguments
-# $(2) list of further variable arguments to group in 150 element calls
-define groupcallin50
-	$(if $2,$1 $(foreach L,$(wordlist 1,50,$2),$(L)),)
-	$(if $2,$(call groupcallin50,$1,$(wordlist 51,$(words $2),$2)),true)
-endef
-
-# echos content to a file in groups performing optional search/replace based on passed args
-# $(1) template line with optional __VERBATIM__, __PATH__, __FILENAME__ replacements
-# $(2) list of pathed filenames to be batch processed and that can be used for template replacements
-# $(3) output file
-define groupreplacein50infile
-	$(if $2,@echo -e $(foreach L,$(wordlist 1,50,$2),"$(subst __VERBATIM__,$(L),$(subst __PATH__,$(dir $(L)),$(subst __FILENAME__,$(notdir $(L)),$1)))\\n") >>$3,)
-	$(if $2,$(call groupreplacein50infile,$1,$(wordlist 51,$(words $2),$2),$3),@true)
-endef
-
-# targets
-INCLUDESFILE:=$(ROOTRELEASEPATH)/includeheaders.txt
-MMPXMLFILE:=$(ROOTBLDPATH)/$(notdir $(PROJECT_META)).xml
-SRCXMLFILES:=$(call mapsource2output,$(SOURCE),.xml)
-RFIFILES:=$(call mapresource2output,$(RESOURCEFILES),.rfi)
-DEPFILES:=$(call mapsource2output,$(SOURCE),.xml.d)
-TEMPGXPARCHIVE:=$(VARIANTBLDPATH)/$(TARGET)$(BASE_TYPE).gxp
-GXPARCHIVE:=$(VARIANTRELEASEPATH)/$(TARGET)$(BASE_TYPE).gxp
-
-CLEANTARGETS:=$(CLEANTARGETS) $(MMPXMLFILE) $(SRCXMLFILES) $(DEPFILES) $(TEMPGXPARCHIVE) $(GXPARCHIVE)
-RELEASABLES:=$(RELEASABLES) $(GXPARCHIVE)
-
-# Deduce whether we should be performing a build with standard CPP characteristics
-# This operates differently per-OS release, although OE TARGETTYPEs always build with standard CPP traits
-ifeq ($(OPEN_ENVIRONMENT),1)
-  STDCPP_BUILD:=1
-endif
-
-ifeq ($(SUPPORTS_STDCPP_NEWLIB),1)
-  ifeq ($(NOSTDCPP),1)
-    STDCPP_BUILD:=
-  else
-    ifeq ($(STDCPP),1)
-      STDCPP_BUILD:=1
-    endif
-  endif
-endif
-
-ifeq ($(STDCPP_BUILD),1)
-  CDEFS:=$(CDEFS) $(STDCPP_DEF)
-  SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(STDCPP_INCLUDE)
-endif
-
-CDEFS:=$(CDEFS) $(TARGET_DEFS)
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(TARGET_INCLUDES)
-
-# include paths
-UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
-SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
-PINCLUDE:=$(OPT.PREINCLUDE)$(PRODUCT_INCLUDE)
-INCLUDES:=$(UINCLUDE) $(OPT.SPLITINCLUDE) $(SINCLUDE) $(PINCLUDE)
-
-DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(TARGET_MACRO))
-
-
-# .mmp XML description file
-ifneq ($(PROCESSED_$(call sanitise,$(MMPXMLFILE))),1)
-
-  ifeq ($(LINKAS),)
-    LINKASBASE:=$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-  else
-    LINKASBASE:=$(LINKAS)
-  endif
-
-  LINKASVERSIONED:=$(basename $(LINKASBASE)){$(VERSIONHEX)}$(suffix $(LINKASBASE))
-
-  ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY)))
-  SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY)))
-  FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),none)
-
-  ifeq ($(UID2),00000000)
-    UID2:=$(if $(UID2_ZERO_OVERRIDE),$(UID2_ZERO_OVERRIDE),00000000)
-  endif
-
-  define gccxmlmeta2xml
-  # note: we jump through some rather awkward hoops here in an attempt to not cause issues for the Bash shell
-  # with gargantuan concatenated "echo" statements.  This includes not being wrapped by start/endrule and
-  # using grouping functions where appropriate.
-    $(1):
-	  $(call startrule,gccxmlmeta2xml) \
-	    echo creating $(1) quietly \
-	  $(call endrule,gccxmlmeta2xml)
-	  @echo -e \
-	    "<?xml version=\"1.0\"?>\n" \
-	    "<mmpInfo>\n" \
-	    "\t<mmp path=\"$(PROJECT_META)\"/>\n" \
-	    "\t<target name=\"$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))\" type=\"$(TARGETTYPE)\"$(if $(TARGETPATH), path=\"$(TARGETPATH)\",)/>\n" \
-	    "\t<cwd path=\"$(dir $(COMPONENT_META))\"/>\n" \
-	    "\t<abi type=\"ARM4\"/>\n" \
-	    "\t<linkAs name=\"$(LINKASVERSIONED)\"/>\n" \
-	    "\t<linkAsBase name=\"$(LINKASBASE)\"/>\n" \
-	    "\t<uids$(if $(UID1), u0=\"0x$(UID1)\",)$(if $(UID2), u1=\"0x$(UID2)\",)$(if $(UID3), u2=\"0x$(UID3)\",)/>\n" \
-	    "\t<version major=\"$(basename $(VERSION))\" minor=\"$(subst .,,$(suffix $(VERSION)))\"/>\n" \
-	    "\t<capability id=\"$(FINAL_CAPABILITIES)\"/>\n" \
-	    "\t<defFile path=\"\" type=\"GCC\"/>\n" \
-	    "\t<defFile path=\"$(DEFFILE)\" type=\"EABI\"/>\n" \
-	    "\t<libs>\n" \
-	    "\t\t<lib name=\"$(FIRSTLIB)\" type=\"First\"/>" \
-	    > $(1)
-	  $(call groupreplacein50infile,\t\t<lib name=\"__VERBATIM__\"/>,$(subst .dso,.lib,$(LIBRARY)),$(1))
-	  $(call groupreplacein50infile,\t\t<lib name=\"__VERBATIM__\"/>,$(STATICLIBRARY),$(1))
-	  @echo -e \
-	    "\t</libs>\n" \
-	    "\t<resources>" \
-	    >> $(1)
-	  $(call groupreplacein50infile,\t\t<resource name=\"__FILENAME__\"/>,$(RFIFILES),$(1))
-	  @echo -e \
-	    "\t</resources>" \
-	    >> $(1)
-	  $(call groupreplacein50infile,\t<sourceFile name=\"__FILENAME__\" path=\"__PATH__\"/>,$(SOURCE),$(1))
-	  $(call groupreplacein50infile,\t<export name=\"__VERBATIM__\"/>,$(EXPORTHEADERS),$(1))
-	  @echo -e \
-	    "</mmpInfo>\n" \
-	    >> $(1)
-  endef
-
-  $(eval $(call gccxmlmeta2xml,$(MMPXMLFILE)))
-  $(eval PROCESSED_$(call sanitise,$(MMPXMLFILE)):=1)
-endif
-
-
-# process straight source files into .xml files, generating .d dependency files and updating includeheaders.txt
-# note: includeheaders.txt is neither tracked as a formal dependency, nor deleted during a clean.  This mirrors
-# the situation with ABLD where the GCCXML build continually updates the file as it finds it.
-define gccxmlprocesssource
-
-  $(eval DEPENDFILENAME:=$(call mapsource2output,$(1),.xml.d))
-  $(eval DEPENDFILE:=$(DEPENDFILENAME))
-
-  $(call mapsource2output,$(1),.xml): $(1) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	$(call startrule,gccxmlprocesssource) \
-	$(CC) $(CFLAGS) $(OPTION_GCCXML) \
-	$(if $(filter $(CIAFILEEXTENSIONS),$(1)),$(call makemacrodef,$(OPT.DEFINE),__CIA__),) \
-	$(DEFINES) \
-	$(OPT.USERINCLUDE)$(patsubst %/,%,$(dir $(1))) \
-	$(INCLUDES) \
-	-fxml="$$@" -MD "$$@.d" -MT "$$@" $(OPT.OUT) nul "$(1)" && \
-	$(GNUSED) '/^.*\.xml:.*$$$$/d;/^ [a-zA-Z].*$$$$/d;s/^  //;s/ \\\$$$$//;s/\/\//\//g;/^s*$$$$/d' < $$@.d | $(GNUAWK) '{sub(/ /,"\n")};1' >> $(INCLUDESFILE) \
-	$(call endrule,gccxmlprocesssource)
-
-    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-    ifneq "$(DEPENDFILE)" ""
-    ifeq ($(NO_DEPEND_INCLUDE),)
-      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-        -include $(DEPENDFILE)
-      endif
-    endif
-    endif
-
-endef
-$(foreach SRCFILE,$(SOURCE),$(eval $(call gccxmlprocesssource,$(SRCFILE))))
-
-
-# package output
-# this is done in a slightly indirect way in order to work around the fact that the ABLD GCCXML build doesn't always pick
-# a unique name for .gxp files for some components with multiple .mmp files i.e. it deletes/generates the same name
-# .gxp file over, and over, again.  What follows ensures that the build tree .gxp file is always unique, and that
-# we just publish that last one that is built.  This mirrors what ABLD achieves, and avoids "overriding" warnings in
-# makefile processing.
-# note: the main call here needs to reside outside of start/endrule in order to avoid command line length issues.
-define gccxmlpackage
-  $(TEMPGXPARCHIVE): $(MMPXMLFILE) $(SRCXMLFILES) $(DEFFILE)
-	  $$(call groupcallin50,$(ZIP) -j $$@,$$^ $(RFIFILES)) ;
-	  $(call startrule,gccxmlpackage) \
-	  $(GNURM) -f $(GXPARCHIVE) && \
-	  $(GNUCP) $$@ $(GXPARCHIVE) \
-	  $(if $(SAVESPACE),; $(GNURM) -rf $(VARIANTBLDPATH); true,) \
-	  $(call endrule,gccxmlpackage)
-
-  $(GXPARCHIVE): $(TEMPGXPARCHIVE)
-endef
-$(eval $(gccxmlpackage))
-
-# Global targets
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(RELEASABLES)
-TARGET:: $(RELEASABLES)
-
-# clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
-$(call makepath, $(CREATABLEPATHS))
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# All targets Function Like Makefile (FLM) supporting the execution of
+# gccxml_cc1plus on source, the creation of project and resource descriptive XML files
+# and packaging into an appropriate archive for CDB processing.
+#
+#
+
+
+# passed in values, stripped of whitespace
+DEFFILE:=$(strip $(DEFFILE))
+LINKAS:=$(strip $(LINKAS))
+UID1:=$(strip $(UID1))
+UID2:=$(strip $(UID2))
+UID3:=$(strip $(UID3))
+
+# local variables
+CREATABLEPATHS:=
+CLEANTARGETS:=
+RELEASABLES:=
+STDCPP_BUILD:=
+CIAFILEEXTENSIONS:=%.CIA %.cia %.Cia %.cIa %.cIA %.ciA %.CIa %.CiA
+
+ROOTBLDPATH:=$(OUTPUTPATH)/gccxml
+VARIANTBLDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
+ROOTRELEASEPATH:=$(RELEASEPATH)/gccxml
+VARIANTRELEASEPATH:=$(RELEASEPATH)/$(FULLVARIANTPATH)
+
+CREATABLEPATHS:=$(CREATABLEPATHS) $(VARIANTBLDPATH) $(VARIANTRELEASEPATH) $(ROOTBLDPATH) $(ROOTRELEASEPATH)
+
+# type-specific definitions
+BASE_TYPE:=dll
+TARGET_MACRO:=__DLL__
+ifneq ($(findstring exe,$(TARGETTYPE)),)
+  BASE_TYPE:=exe
+  TARGET_MACRO:=__EXE__
+endif
+ifneq ($(findstring lib,$(TARGETTYPE)),)
+  BASE_TYPE:=lib
+  TARGET_MACRO:=
+endif
+
+# utility functions
+# returns absolutely-pathed temporary build filenames based solely on the basename of the source file, but with an additional "_" for .cia files
+# $(1) input source file list
+# $(2) output file extension
+define mapsource2output
+  $(foreach SOURCEFILE,$(1),$(patsubst %, $(VARIANTBLDPATH)/%, $(basename $(notdir $(SOURCEFILE)))$(if $(filter $(CIAFILEEXTENSIONS),$(SOURCEFILE)),_,)$(2)))
+endef
+
+# returns absolutely-pathed temporary build filenames based on the full resource filename
+# $(1) input resource file list
+# $(2) output file extension
+define mapresource2output
+  $(patsubst %, $(ROOTBLDPATH)/%, $(addsuffix $(2),$(notdir $(1))))
+endef
+
+# calls a tool multiple times with grouped arguments
+# $(1) tool to call with any non-variable arguments
+# $(2) list of further variable arguments to group in 150 element calls
+define groupcallin50
+	$(if $2,$1 $(foreach L,$(wordlist 1,50,$2),$(L)),)
+	$(if $2,$(call groupcallin50,$1,$(wordlist 51,$(words $2),$2)),true)
+endef
+
+# echos content to a file in groups performing optional search/replace based on passed args
+# $(1) template line with optional __VERBATIM__, __PATH__, __FILENAME__ replacements
+# $(2) list of pathed filenames to be batch processed and that can be used for template replacements
+# $(3) output file
+define groupreplacein50infile
+	$(if $2,@echo -e $(foreach L,$(wordlist 1,50,$2),"$(subst __VERBATIM__,$(L),$(subst __PATH__,$(dir $(L)),$(subst __FILENAME__,$(notdir $(L)),$1)))\\n") >>$3,)
+	$(if $2,$(call groupreplacein50infile,$1,$(wordlist 51,$(words $2),$2),$3),@true)
+endef
+
+# targets
+INCLUDESFILE:=$(ROOTRELEASEPATH)/includeheaders.txt
+MMPXMLFILE:=$(ROOTBLDPATH)/$(notdir $(PROJECT_META)).xml
+SRCXMLFILES:=$(call mapsource2output,$(SOURCE),.xml)
+RFIFILES:=$(call mapresource2output,$(RESOURCEFILES),.rfi)
+DEPFILES:=$(call mapsource2output,$(SOURCE),.xml.d)
+TEMPGXPARCHIVE:=$(VARIANTBLDPATH)/$(TARGET)$(BASE_TYPE).gxp
+GXPARCHIVE:=$(VARIANTRELEASEPATH)/$(TARGET)$(BASE_TYPE).gxp
+
+CLEANTARGETS:=$(CLEANTARGETS) $(MMPXMLFILE) $(SRCXMLFILES) $(DEPFILES) $(TEMPGXPARCHIVE) $(GXPARCHIVE)
+RELEASABLES:=$(RELEASABLES) $(GXPARCHIVE)
+
+# Deduce whether we should be performing a build with standard CPP characteristics
+# This operates differently per-OS release, although OE TARGETTYPEs always build with standard CPP traits
+ifeq ($(OPEN_ENVIRONMENT),1)
+  STDCPP_BUILD:=1
+endif
+
+ifeq ($(SUPPORTS_STDCPP_NEWLIB),1)
+  ifeq ($(NOSTDCPP),1)
+    STDCPP_BUILD:=
+  else
+    ifeq ($(STDCPP),1)
+      STDCPP_BUILD:=1
+    endif
+  endif
+endif
+
+ifeq ($(STDCPP_BUILD),1)
+  CDEFS:=$(CDEFS) $(STDCPP_DEF)
+  SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(STDCPP_INCLUDE)
+endif
+
+CDEFS:=$(CDEFS) $(TARGET_DEFS)
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(TARGET_INCLUDES)
+
+# include paths
+UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
+SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
+PINCLUDE:=$(OPT.PREINCLUDE)$(PRODUCT_INCLUDE)
+INCLUDES:=$(UINCLUDE) $(OPT.SPLITINCLUDE) $(SINCLUDE) $(PINCLUDE)
+
+DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(TARGET_MACRO))
+
+
+# .mmp XML description file
+ifneq ($(PROCESSED_$(call sanitise,$(MMPXMLFILE))),1)
+
+  ifeq ($(LINKAS),)
+    LINKASBASE:=$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+  else
+    LINKASBASE:=$(LINKAS)
+  endif
+
+  LINKASVERSIONED:=$(basename $(LINKASBASE)){$(VERSIONHEX)}$(suffix $(LINKASBASE))
+
+  ADDED_CAPABILITIES:=$(subst $(CHAR_SPACE),+,$(filter-out -%,$(CAPABILITY)))
+  SUBTRACTED_CAPABILITIES:=$(subst $(CHAR_SPACE),,$(filter -%,$(CAPABILITY)))
+  FINAL_CAPABILITIES:=$(if $(ADDED_CAPABILITIES),$(ADDED_CAPABILITIES)$(SUBTRACTED_CAPABILITIES),none)
+
+  ifeq ($(UID2),00000000)
+    UID2:=$(if $(UID2_ZERO_OVERRIDE),$(UID2_ZERO_OVERRIDE),00000000)
+  endif
+
+  define gccxmlmeta2xml
+  # note: we jump through some rather awkward hoops here in an attempt to not cause issues for the Bash shell
+  # with gargantuan concatenated "echo" statements.  This includes not being wrapped by start/endrule and
+  # using grouping functions where appropriate.
+    $(1):
+	  $(call startrule,gccxmlmeta2xml) \
+	    echo creating $(1) quietly \
+	  $(call endrule,gccxmlmeta2xml)
+	  @echo -e \
+	    "<?xml version=\"1.0\"?>\n" \
+	    "<mmpInfo>\n" \
+	    "\t<mmp path=\"$(PROJECT_META)\"/>\n" \
+	    "\t<target name=\"$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))\" type=\"$(TARGETTYPE)\"$(if $(TARGETPATH), path=\"$(TARGETPATH)\",)/>\n" \
+	    "\t<cwd path=\"$(dir $(COMPONENT_META))\"/>\n" \
+	    "\t<abi type=\"ARM4\"/>\n" \
+	    "\t<linkAs name=\"$(LINKASVERSIONED)\"/>\n" \
+	    "\t<linkAsBase name=\"$(LINKASBASE)\"/>\n" \
+	    "\t<uids$(if $(UID1), u0=\"0x$(UID1)\",)$(if $(UID2), u1=\"0x$(UID2)\",)$(if $(UID3), u2=\"0x$(UID3)\",)/>\n" \
+	    "\t<version major=\"$(basename $(VERSION))\" minor=\"$(subst .,,$(suffix $(VERSION)))\"/>\n" \
+	    "\t<capability id=\"$(FINAL_CAPABILITIES)\"/>\n" \
+	    "\t<defFile path=\"\" type=\"GCC\"/>\n" \
+	    "\t<defFile path=\"$(DEFFILE)\" type=\"EABI\"/>\n" \
+	    "\t<libs>\n" \
+	    "\t\t<lib name=\"$(FIRSTLIB)\" type=\"First\"/>" \
+	    > $(1)
+	  $(call groupreplacein50infile,\t\t<lib name=\"__VERBATIM__\"/>,$(subst .dso,.lib,$(LIBRARY)),$(1))
+	  $(call groupreplacein50infile,\t\t<lib name=\"__VERBATIM__\"/>,$(STATICLIBRARY),$(1))
+	  @echo -e \
+	    "\t</libs>\n" \
+	    "\t<resources>" \
+	    >> $(1)
+	  $(call groupreplacein50infile,\t\t<resource name=\"__FILENAME__\"/>,$(RFIFILES),$(1))
+	  @echo -e \
+	    "\t</resources>" \
+	    >> $(1)
+	  $(call groupreplacein50infile,\t<sourceFile name=\"__FILENAME__\" path=\"__PATH__\"/>,$(SOURCE),$(1))
+	  $(call groupreplacein50infile,\t<export name=\"__VERBATIM__\"/>,$(EXPORTHEADERS),$(1))
+	  @echo -e \
+	    "</mmpInfo>\n" \
+	    >> $(1)
+  endef
+
+  $(eval $(call gccxmlmeta2xml,$(MMPXMLFILE)))
+  $(eval PROCESSED_$(call sanitise,$(MMPXMLFILE)):=1)
+endif
+
+
+# process straight source files into .xml files, generating .d dependency files and updating includeheaders.txt
+# note: includeheaders.txt is neither tracked as a formal dependency, nor deleted during a clean.  This mirrors
+# the situation with ABLD where the GCCXML build continually updates the file as it finds it.
+define gccxmlprocesssource
+
+  $(eval DEPENDFILENAME:=$(call mapsource2output,$(1),.xml.d))
+  $(eval DEPENDFILE:=$(DEPENDFILENAME))
+
+  $(call mapsource2output,$(1),.xml): $(1) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	$(call startrule,gccxmlprocesssource) \
+	$(CC) $(CFLAGS) $(OPTION_GCCXML) \
+	$(if $(filter $(CIAFILEEXTENSIONS),$(1)),$(call makemacrodef,$(OPT.DEFINE),__CIA__),) \
+	$(DEFINES) \
+	$(OPT.USERINCLUDE)$(patsubst %/,%,$(dir $(1))) \
+	$(INCLUDES) \
+	-fxml="$$@" -MD "$$@.d" -MT "$$@" $(OPT.OUT) nul "$(1)" && \
+	$(GNUSED) '/^.*\.xml:.*$$$$/d;/^ [a-zA-Z].*$$$$/d;s/^  //;s/ \\\$$$$//;s/\/\//\//g;/^s*$$$$/d' < $$@.d | $(GNUAWK) '{sub(/ /,"\n")};1' >> $(INCLUDESFILE) \
+	$(call endrule,gccxmlprocesssource)
+
+    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+    ifneq "$(DEPENDFILE)" ""
+    ifeq ($(NO_DEPEND_INCLUDE),)
+      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+        -include $(DEPENDFILE)
+      endif
+    endif
+    endif
+
+endef
+$(foreach SRCFILE,$(SOURCE),$(eval $(call gccxmlprocesssource,$(SRCFILE))))
+
+
+# package output
+# this is done in a slightly indirect way in order to work around the fact that the ABLD GCCXML build doesn't always pick
+# a unique name for .gxp files for some components with multiple .mmp files i.e. it deletes/generates the same name
+# .gxp file over, and over, again.  What follows ensures that the build tree .gxp file is always unique, and that
+# we just publish that last one that is built.  This mirrors what ABLD achieves, and avoids "overriding" warnings in
+# makefile processing.
+# note: the main call here needs to reside outside of start/endrule in order to avoid command line length issues.
+define gccxmlpackage
+  $(TEMPGXPARCHIVE): $(MMPXMLFILE) $(SRCXMLFILES) $(DEFFILE)
+	  $$(call groupcallin50,$(ZIP) -j $$@,$$^ $(RFIFILES)) ;
+	  $(call startrule,gccxmlpackage) \
+	  $(GNURM) -f $(GXPARCHIVE) && \
+	  $(GNUCP) $$@ $(GXPARCHIVE) \
+	  $(if $(SAVESPACE),; $(GNURM) -rf $(VARIANTBLDPATH); true,) \
+	  $(call endrule,gccxmlpackage)
+
+  $(GXPARCHIVE): $(TEMPGXPARCHIVE)
+endef
+$(eval $(gccxmlpackage))
+
+# Global targets
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(RELEASABLES)
+TARGET:: $(RELEASABLES)
+
+# clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+$(call makepath, $(CREATABLEPATHS))
+
--- a/sbsv2/raptor/lib/flm/gccxmlresource.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/gccxmlresource.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,37 +1,37 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
-# for gccxml builds.
-# 
-#
-
-
-# .rfi files need to be generated to a known location that is determined by the "core" GCCXML wrapper build
-RFIFILE:=$(MAIN_OUTPUTPATH)/$(OUTPUTPATHOFFSET)/$(MAIN_TARGET_lower)_$(MAIN_REQUESTEDTARGETEXT)/gccxml/$(notdir $(SOURCE)).rfi
-
-define generaterfifile
-# $(1) is the .rfi filename
-# $(2) is the list of .rpp files
-# $(3) is the list of dependency files
-
-   $(1): $(2)
-	$(call startrule,generaterfifile,FORCESUCCESS) \
-	$(CREATERFIFILE) -o $(1) -x "$(EPOCROOT)/epoc32" $(3) \
-	$(call endrule,generaterfifile)
-endef
-
-# Main (and mostly generic) resource building FLM
-include $(FLMHOME)/resource.flm
-
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
+# for gccxml builds.
+# 
+#
+
+
+# .rfi files need to be generated to a known location that is determined by the "core" GCCXML wrapper build
+RFIFILE:=$(MAIN_OUTPUTPATH)/$(OUTPUTPATHOFFSET)/$(MAIN_TARGET_lower)_$(MAIN_REQUESTEDTARGETEXT)/gccxml/$(notdir $(SOURCE)).rfi
+
+define generaterfifile
+# $(1) is the .rfi filename
+# $(2) is the list of .rpp files
+# $(3) is the list of dependency files
+
+   $(1): $(2)
+	$(call startrule,generaterfifile,FORCESUCCESS) \
+	$(CREATERFIFILE) -o $(1) -x "$(EPOCROOT)/epoc32" $(3) \
+	$(call endrule,generaterfifile)
+endef
+
+# Main (and mostly generic) resource building FLM
+include $(FLMHOME)/resource.flm
+
+
--- a/sbsv2/raptor/lib/flm/globals.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/globals.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,158 +1,158 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# global include file : this is included by all generated makefiles
-# 1) include all the common tools
-# 2) add global targets such as CLEAN and REALLYCLEAN
-# 3) specify the top level dependencies between targets
-# INPUTS : assumes OSTYPE and FLMHOME are set.
-#
-
-ifeq ($(SYMBIAN_FLM_GLOBALS_MK),)
-SYMBIAN_FLM_GLOBALS_MK:=1
-
-# get the common tools
-include $(FLMHOME)/flmtools.mk
-
-# initialise the list of created directories
-makepathLIST:=
-
-# set the variables TOOLPLATFORMDIR and DOTEXE
-ifeq ($(filter win,$(HOSTPLATFORM)),win)
-DOTEXE:=.exe
-TOOLPLATFORMDIR:=
-else
-DOTEXE:=
-TOOLPLATFORMDIR:=/$(HOSTPLATFORM_DIR)
-endif
-
-# addglobal(GlobalTargetName)
-SYMBIAN_GLOBAL_TARGETS:=
-
-define sgt_addcmds
-.PHONY:: $1
-
-$(if $(filter win,$(HOSTPLATFORM)),,$(call lowercase,$1):: $1)
-
-SYMBIAN_GLOBAL_TARGETS:=$$(SYMBIAN_GLOBAL_TARGETS) $(1)
-endef
-
-define addglobal
-$(eval $(call sgt_addcmds,$(1)))
-endef
-
-ALLTARGET:=ALL
-
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: BUILD
-
-# Global targets should generally be double colon rules because
-# they allow horizontal states to be placed into the build system.
-# e.g the "EXPORTED" state.
-$(call addglobal,BUILD)
-$(call addglobal,CLEAN)
-$(call addglobal,CLEANEXPORT)
-$(call addglobal,EXPORT)
-$(call addglobal,FINAL)
-$(call addglobal,FREEZE)
-$(call addglobal,LIBRARY)
-$(call addglobal,LISTING)
-$(call addglobal,MAKEFILE)
-$(call addglobal,REALLYCLEAN)
-$(call addglobal,BITMAP)
-$(call addglobal,RESOURCE)
-$(call addglobal,ROMFILE)
-$(call addglobal,TARGET)
-$(call addglobal,WHAT)
-$(call addglobal,WHATEXPORTS)
-$(call addglobal,WHATARMV5)
-$(call addglobal,WHATWINSCW)
-$(call addglobal,WHATTOOLS2)
-$(call addglobal,WHATTOOLS)
-$(call addglobal,WHATTEM)
-$(call addglobal,WHATRESOURCES)
-$(call addglobal,WHATBITMAP)
-$(call addglobal,WHATGNUEM)
-$(call addglobal,WHATSTRINGTABLE)
-
-# Ignore errors in some rules so as to "keep going"
-# so if one export fails then that won't stop unrelated
-# .cpp files from building. (.cpp files must all depend on EXPORT
-# so that parallel builds work)
-.IGNORE: EXPORT BITMAP RESOURCE LIBRARY
-# dependencies between top-level targets
-BUILD:: EXPORT MAKEFILE BITMAP RESOURCE LIBRARY TARGET FINAL
-
-MAKEFILE:: EXPORT
-BITMAP:: MAKEFILE
-RESOURCE:: BITMAP
-LIBRARY:: RESOURCE 
-TARGET:: LIBRARY
-FINAL:: TARGET
-
-.PHONY:: EXPORT
-
-
-WHAT:: WHATEXPORTS WHATARMV5 WHATWINSCW WHATTOOLS2 WHATTEM WHATGNUEM WHATRESOURCES WHATBITMAP WHATSTRINGTABLE
-
-REALLYCLEAN:: CLEAN CLEANEXPORT
-
-# Create one of every double colon rule
-WHATBITMAP::
-
-WHATRESOURCES::
-
-WHATSTRINGTABLE::
-
-WHATTEM::
-
-WHATGNUEM::
-
-WHATTOOLS2::
-
-WHATWINSCW::
-
-WHATARMV5::
-
-WHATEXPORTS::
-
-LISTING::
-
-CLEAN::
-
-CLEANEXPORT::
-
-REALLYCLEAN::
-
-EXPORT::
-
-RESOURCE::
-
-BITMAP::
-
-# put known resource header to resource header dependencies here
-
-eikcdlg_DEPENDS:=eikcore.rsg eikcoctl.rsg
-eikmisc_DEPENDS:=eikcore.rsg
-eikfile_DEPENDS:=eikcoctl.rsg
-eikir_DEPENDS:=eikcoctl.rsg
-eikprint_DEPENDS:=eikcoctl.rsg
-
-
-# For users of SBSv2 who wish to add in their own global settings
-# without modifying this file:
--include $(FLMHOME)/user/globals.mk
-
-endif
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# global include file : this is included by all generated makefiles
+# 1) include all the common tools
+# 2) add global targets such as CLEAN and REALLYCLEAN
+# 3) specify the top level dependencies between targets
+# INPUTS : assumes OSTYPE and FLMHOME are set.
+#
+
+ifeq ($(SYMBIAN_FLM_GLOBALS_MK),)
+SYMBIAN_FLM_GLOBALS_MK:=1
+
+# get the common tools
+include $(FLMHOME)/flmtools.mk
+
+# initialise the list of created directories
+makepathLIST:=
+
+# set the variables TOOLPLATFORMDIR and DOTEXE
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
+DOTEXE:=.exe
+TOOLPLATFORMDIR:=
+else
+DOTEXE:=
+TOOLPLATFORMDIR:=/$(HOSTPLATFORM_DIR)
+endif
+
+# addglobal(GlobalTargetName)
+SYMBIAN_GLOBAL_TARGETS:=
+
+define sgt_addcmds
+.PHONY:: $1
+
+$(if $(filter win,$(HOSTPLATFORM)),,$(call lowercase,$1):: $1)
+
+SYMBIAN_GLOBAL_TARGETS:=$$(SYMBIAN_GLOBAL_TARGETS) $(1)
+endef
+
+define addglobal
+$(eval $(call sgt_addcmds,$(1)))
+endef
+
+ALLTARGET:=ALL
+
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: BUILD
+
+# Global targets should generally be double colon rules because
+# they allow horizontal states to be placed into the build system.
+# e.g the "EXPORTED" state.
+$(call addglobal,BUILD)
+$(call addglobal,CLEAN)
+$(call addglobal,CLEANEXPORT)
+$(call addglobal,EXPORT)
+$(call addglobal,FINAL)
+$(call addglobal,FREEZE)
+$(call addglobal,LIBRARY)
+$(call addglobal,LISTING)
+$(call addglobal,MAKEFILE)
+$(call addglobal,REALLYCLEAN)
+$(call addglobal,BITMAP)
+$(call addglobal,RESOURCE)
+$(call addglobal,ROMFILE)
+$(call addglobal,TARGET)
+$(call addglobal,WHAT)
+$(call addglobal,WHATEXPORTS)
+$(call addglobal,WHATARMV5)
+$(call addglobal,WHATWINSCW)
+$(call addglobal,WHATTOOLS2)
+$(call addglobal,WHATTOOLS)
+$(call addglobal,WHATTEM)
+$(call addglobal,WHATRESOURCES)
+$(call addglobal,WHATBITMAP)
+$(call addglobal,WHATGNUEM)
+$(call addglobal,WHATSTRINGTABLE)
+
+# Ignore errors in some rules so as to "keep going"
+# so if one export fails then that won't stop unrelated
+# .cpp files from building. (.cpp files must all depend on EXPORT
+# so that parallel builds work)
+.IGNORE: EXPORT BITMAP RESOURCE LIBRARY
+# dependencies between top-level targets
+BUILD:: EXPORT MAKEFILE BITMAP RESOURCE LIBRARY TARGET FINAL
+
+MAKEFILE:: EXPORT
+BITMAP:: MAKEFILE
+RESOURCE:: BITMAP
+LIBRARY:: RESOURCE 
+TARGET:: LIBRARY
+FINAL:: TARGET
+
+.PHONY:: EXPORT
+
+
+WHAT:: WHATEXPORTS WHATARMV5 WHATWINSCW WHATTOOLS2 WHATTEM WHATGNUEM WHATRESOURCES WHATBITMAP WHATSTRINGTABLE
+
+REALLYCLEAN:: CLEAN CLEANEXPORT
+
+# Create one of every double colon rule
+WHATBITMAP::
+
+WHATRESOURCES::
+
+WHATSTRINGTABLE::
+
+WHATTEM::
+
+WHATGNUEM::
+
+WHATTOOLS2::
+
+WHATWINSCW::
+
+WHATARMV5::
+
+WHATEXPORTS::
+
+LISTING::
+
+CLEAN::
+
+CLEANEXPORT::
+
+REALLYCLEAN::
+
+EXPORT::
+
+RESOURCE::
+
+BITMAP::
+
+# put known resource header to resource header dependencies here
+
+eikcdlg_DEPENDS:=eikcore.rsg eikcoctl.rsg
+eikmisc_DEPENDS:=eikcore.rsg
+eikfile_DEPENDS:=eikcoctl.rsg
+eikir_DEPENDS:=eikcoctl.rsg
+eikprint_DEPENDS:=eikcoctl.rsg
+
+
+# For users of SBSv2 who wish to add in their own global settings
+# without modifying this file:
+-include $(FLMHOME)/user/globals.mk
+
+endif
+
--- a/sbsv2/raptor/lib/flm/gnumakefile.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/gnumakefile.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,191 +1,191 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Gnumakefile FLM -> Knows how to run gnumakefiles
-# Will only work on Windows
-# 
-#
-
-TMPROOT:=$(subst \,/,$(EPOCROOT))
-OLD_EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
-OLDSTYLE_EPOCROOT:=$(subst /,\,$(OLD_EPOCROOT))
-
-# Set up the correct make to be invoked
-MAKEVAR:=
-ifeq ($(USENMAKE),1)
-MAKEVAR:=$(NMAKE) $(NMAKEFLAGS)
-else
-MAKEVAR:="$(SBSV1MAKE)"
-endif
-
-################################# FLM Parameter description ##
-# Parameters:
-#   EPOCROOT:=
-#   PLATFORM:=$(VARIANTPLATFORM)
-# The current configuration either UREL or UDEB:
-#   CFG:=$(VARIANTTYPE)
-# Relative path to EPOCROOT. (to where?):
-#   TO_ROOT:=
-# The path to the top-level bld.inf.
-# Note: if a bld.inf file #includes another bld.inf, this variable will
-# always contain the directory of that top-level file. If you require
-# the directory of the bld.inf which actually references the makefile,
-# use $(EXTENSION_ROOT) instead.
-#   TO_BLDINF:=
-# The project's working build directory under \epoc32\build\..
-#   EPOCBLD:=
-
-
-################################ Standard Variables ##
-# We may set the following 
-# for the sake of gnumakefiles which
-# need to know them:
-
-## Path element separator.
-/:=/
-## PATH environment variable separator.
-;:=:
-
-####
-# Various file and directory manipulation tools.
-# We are using the standard GNU coretools.
-# On Windows these are supplied by CYGWIN
-RMDIR:=$(GNURMDIR)
-RM:=$(GNURM)
-ERASE:=$(GNURM)
-MKDIR:=$(GNUMKDIR)
-CP:=$(GNUCP)
-
-# Targets:
-# We need to hook the BLD, LIB, ..., targets in the gnumakefile into the
-# global phony TARGET, LIBRARY, ..., targets in the overall Makefile.
-#
-# Additionally we need a specific name for each gnumakefile's targets so
-# that we can create dependencies between, say, the FINAL target of one
-# extension and the FINAL target of another. Ideally this name would be
-# unique but that would require the full path to be used so we compromise
-# and use a unique name and a portable reference that is relatively "unique".
-
-UNIQ:=$(DIRECTORY)$(EXTMAKEFILENAME)$(TO_ROOT)$(EPOCBLD)$(TO_BLDINF)$(PLATFORM)$(CFG)$(MAKEVAR)
-UNIQ:=$(word 1,$(shell echo $(UNIQ) | $(GNUMD5SUM)))
-gmake_$(notdir $(EXTMAKEFILENAME))_$(PLATFORM)_$(CFG):=$(UNIQ)
-CFG_uppercase:=$(call uppercase,$(CFG))
-
-RVCT22BIN:=$(RVCTBIN)
-RVCT22LIB:=$(RVCTLIB)
-RVCT22INC:=$(RVCTINC)
-
-EXTMAKEFILEPARAMETERS:= \
-	EPOCROOT PLATFORM TO_ROOT TO_BLDINF \
-	EPOCBLD CFG RMDIR RM ERASE MKDIR CP  \
-	MAKEFILENAME DIRECTORY EXTMAKEFILENAME            \
-	DEPENDENCIES TOOL RVCT22LIB RVCT22INC RVCT22BIN MAKEVAR
-
-# The standard gnumakefile Targets
-# These will be implemented in terms of double colon
-# rules - such that make FREEZE will cause all FREEZE 
-# targets to be evaluated.
-# For each call of this FLM we also need
-# to create unique versions of each of these targets
-# so that there is something to attach
-# the current FLM parameters to using target-specific 
-# variable declarations.
-
-EXTMAKETARGETS:= \
-	MAKMAKE     \
-	BLD         \
-	FREEZE      \
-	LIB         \
-	CLEANLIB    \
-	RESOURCE    \
-	CLEAN       \
-	RELEASABLES \
-	FINAL
-#	DO_NOTHING  
-
-# Hook into global targets
-#
-MAKEFILE::    $(UNIQ)_MAKMAKE
-BITMAP::      $(UNIQ)_MAKMAKE
-TARGET::      $(UNIQ)_BLD
-FREEZE::      $(UNIQ)_FREEZE
-LIBRARY::     $(UNIQ)_LIB
-CLEAN::       $(UNIQ)_CLEAN $(UNIQ)_CLEANLIB
-RESOURCE::    $(UNIQ)_RESOURCE
-FINAL::       $(UNIQ)_FINAL
-RELEASABLES:: $(UNIQ)_RELEASABLES
-
-# make sure gnumakefiles happen at the right stages
-MAKMAKE_DEPS:=EXPORT
-RESOURCE_DEPS:=BITMAP 
-LIB_DEPS:=RESOURCE
-BLD_DEPS:=LIBRARY
-FINAL_DEPS:=TARGET
-
-export /
-export ;
-
-#################################### Global Targets ##
-## All the global targets for the gnumakefiles
-# gnumakes are called as sub-makes, using make 3.79 from abld (passed through $(SBSV1MAKE)). 
-# makefile and nmakefile are called using nmake.
-
-define callgnumake
-.PHONY:: $(UNIQ)_$(1)
-
-$(EPOCROOT)/epoc32/build/TEM_$(1):: $(UNIQ)_$(1)
-
-$(UNIQ)_$(1): $($(1)_DEPS)
-	$(call startrule,extension_makefile,FORCESUCCESS) \
-	$(foreach V,$(EXTMAKEFILEPARAMETERS),$(V)='$($(V))') EXTMAKEFILETARGET='$(1)' \
-	$(if $(USENMAKE),export MAKEFLAGS="";cd "$(subst /,\,$(DIRECTORY))";,) export EPOCROOT="$(strip $(OLDSTYLE_EPOCROOT))\"; export CFG=$(CFG_uppercase); \
-	$(MAKEVAR) $(if $(USENMAKE),,-C "$(subst /,\,$(DIRECTORY))") -f "$(EXTMAKEFILENAME)" \
-	CFG=$(CFG_uppercase) EPOCBLD="$(subst /,\,$(EPOCBLD))" TO_BLDINF="$(subst /,\,$(TO_BLDINF))" PLATFORM=$(PLATFORM) $(if $(SAVESPACE),$(subst BLD,SAVESPACE,$(1)),$(1)) \
-	$(call endrule,extension_makefile) 
-ifneq ($(call isoneof,$(1),RELEASABLES FINAL),)
-	$(call startrawoutput) \
-	echo "$(call whatLogOpen)" ; \
-	$(foreach V,$(EXTMAKEFILEPARAMETERS),$(V)='$($(V))') EXTMAKEFILETARGET='RELEASABLES' \
-	$(if $(USENMAKE),export MAKEFLAGS="";cd "$(subst /,\,$(DIRECTORY))";,) export EPOCROOT="$(strip $(OLDSTYLE_EPOCROOT))\"; export CFG=$(CFG_uppercase); \
-	$(MAKEVAR) $(if $(USENMAKE),-C -S,-C "$(subst /,\,$(DIRECTORY))" --no-print-directory) -f "$(EXTMAKEFILENAME)" \
-	CFG=$(CFG_uppercase) EPOCBLD="$(subst /,\,$(EPOCBLD))" TO_BLDINF="$(subst /,\,$(TO_BLDINF))" PLATFORM=$(PLATFORM) RELEASABLES | \
-	(read -r LINE; while [ $$$$? -eq 0 ]; do \
-	if [[ ! $$$$LINE =~ "Nothing to be done for"  ]] ; then echo "$(call whatLogItem,EM,$$$$LINE)"; fi; \
-	read -r LINE; done; ); \
-	echo "$(call whatLogClose)" \
-	$(call endrawoutput)
-
-
-WHATGNUEM:: $(UNIQ)_RELEASABLES
-
-endif
-endef
-
-DO_NOTHING:: $(UNIQ)_DO_NOTHING 
-$(UNIQ)_DO_NOTHING: ;
-
-$(foreach EXTTRG,$(EXTMAKETARGETS),$(eval $(call callgnumake,$(EXTTRG))))
-
-## Do ROMFILE target in romstuff.mke
-ifeq ($(ROMFILE_$(call sanitise,$(EXTMAKEFILENAME))),)
-ROMFILE_$(call sanitise,$(EXTMAKEFILENAME)):=1
-
-ROMDIR:=$(subst $(OLD_EPOCROOT),$(OLD_EPOCROOT)epoc32/rom/,$(TO_BLDINF))
-
-define RomfileRomstuff
-ROMFILE::
-	@$(MAKEVAR) --no-print-directory $(if $(USENMAKE),,-C "$(subst /,\,$(DIRECTORY))") -f "$(EXTMAKEFILENAME)" ROMFILE >> $(ROMDIR)/ARMV5TEST.IBY
-endef
-
-$(eval $(call RomfileRomstuff))
-endif
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Gnumakefile FLM -> Knows how to run gnumakefiles
+# Will only work on Windows
+# 
+#
+
+TMPROOT:=$(subst \,/,$(EPOCROOT))
+OLD_EPOCROOT:=$(patsubst %/,%,$(TMPROOT))/
+OLDSTYLE_EPOCROOT:=$(subst /,\,$(OLD_EPOCROOT))
+
+# Set up the correct make to be invoked
+MAKEVAR:=
+ifeq ($(USENMAKE),1)
+MAKEVAR:=$(NMAKE) $(NMAKEFLAGS)
+else
+MAKEVAR:="$(SBSV1MAKE)"
+endif
+
+################################# FLM Parameter description ##
+# Parameters:
+#   EPOCROOT:=
+#   PLATFORM:=$(VARIANTPLATFORM)
+# The current configuration either UREL or UDEB:
+#   CFG:=$(VARIANTTYPE)
+# Relative path to EPOCROOT. (to where?):
+#   TO_ROOT:=
+# The path to the top-level bld.inf.
+# Note: if a bld.inf file #includes another bld.inf, this variable will
+# always contain the directory of that top-level file. If you require
+# the directory of the bld.inf which actually references the makefile,
+# use $(EXTENSION_ROOT) instead.
+#   TO_BLDINF:=
+# The project's working build directory under \epoc32\build\..
+#   EPOCBLD:=
+
+
+################################ Standard Variables ##
+# We may set the following 
+# for the sake of gnumakefiles which
+# need to know them:
+
+## Path element separator.
+/:=/
+## PATH environment variable separator.
+;:=:
+
+####
+# Various file and directory manipulation tools.
+# We are using the standard GNU coretools.
+# On Windows these are supplied by CYGWIN
+RMDIR:=$(GNURMDIR)
+RM:=$(GNURM)
+ERASE:=$(GNURM)
+MKDIR:=$(GNUMKDIR)
+CP:=$(GNUCP)
+
+# Targets:
+# We need to hook the BLD, LIB, ..., targets in the gnumakefile into the
+# global phony TARGET, LIBRARY, ..., targets in the overall Makefile.
+#
+# Additionally we need a specific name for each gnumakefile's targets so
+# that we can create dependencies between, say, the FINAL target of one
+# extension and the FINAL target of another. Ideally this name would be
+# unique but that would require the full path to be used so we compromise
+# and use a unique name and a portable reference that is relatively "unique".
+
+UNIQ:=$(DIRECTORY)$(EXTMAKEFILENAME)$(TO_ROOT)$(EPOCBLD)$(TO_BLDINF)$(PLATFORM)$(CFG)$(MAKEVAR)
+UNIQ:=$(word 1,$(shell echo $(UNIQ) | $(GNUMD5SUM)))
+gmake_$(notdir $(EXTMAKEFILENAME))_$(PLATFORM)_$(CFG):=$(UNIQ)
+CFG_uppercase:=$(call uppercase,$(CFG))
+
+RVCT22BIN:=$(RVCTBIN)
+RVCT22LIB:=$(RVCTLIB)
+RVCT22INC:=$(RVCTINC)
+
+EXTMAKEFILEPARAMETERS:= \
+	EPOCROOT PLATFORM TO_ROOT TO_BLDINF \
+	EPOCBLD CFG RMDIR RM ERASE MKDIR CP  \
+	MAKEFILENAME DIRECTORY EXTMAKEFILENAME            \
+	DEPENDENCIES TOOL RVCT22LIB RVCT22INC RVCT22BIN MAKEVAR
+
+# The standard gnumakefile Targets
+# These will be implemented in terms of double colon
+# rules - such that make FREEZE will cause all FREEZE 
+# targets to be evaluated.
+# For each call of this FLM we also need
+# to create unique versions of each of these targets
+# so that there is something to attach
+# the current FLM parameters to using target-specific 
+# variable declarations.
+
+EXTMAKETARGETS:= \
+	MAKMAKE     \
+	BLD         \
+	FREEZE      \
+	LIB         \
+	CLEANLIB    \
+	RESOURCE    \
+	CLEAN       \
+	RELEASABLES \
+	FINAL
+#	DO_NOTHING  
+
+# Hook into global targets
+#
+MAKEFILE::    $(UNIQ)_MAKMAKE
+BITMAP::      $(UNIQ)_MAKMAKE
+TARGET::      $(UNIQ)_BLD
+FREEZE::      $(UNIQ)_FREEZE
+LIBRARY::     $(UNIQ)_LIB
+CLEAN::       $(UNIQ)_CLEAN $(UNIQ)_CLEANLIB
+RESOURCE::    $(UNIQ)_RESOURCE
+FINAL::       $(UNIQ)_FINAL
+RELEASABLES:: $(UNIQ)_RELEASABLES
+
+# make sure gnumakefiles happen at the right stages
+MAKMAKE_DEPS:=EXPORT
+RESOURCE_DEPS:=BITMAP 
+LIB_DEPS:=RESOURCE
+BLD_DEPS:=LIBRARY
+FINAL_DEPS:=TARGET
+
+export /
+export ;
+
+#################################### Global Targets ##
+## All the global targets for the gnumakefiles
+# gnumakes are called as sub-makes, using make 3.79 from abld (passed through $(SBSV1MAKE)). 
+# makefile and nmakefile are called using nmake.
+
+define callgnumake
+.PHONY:: $(UNIQ)_$(1)
+
+$(EPOCROOT)/epoc32/build/TEM_$(1):: $(UNIQ)_$(1)
+
+$(UNIQ)_$(1): $($(1)_DEPS)
+	$(call startrule,extension_makefile,FORCESUCCESS) \
+	$(foreach V,$(EXTMAKEFILEPARAMETERS),$(V)='$($(V))') EXTMAKEFILETARGET='$(1)' \
+	$(if $(USENMAKE),export MAKEFLAGS="";cd "$(subst /,\,$(DIRECTORY))";,) export EPOCROOT="$(strip $(OLDSTYLE_EPOCROOT))\"; export CFG=$(CFG_uppercase); \
+	$(MAKEVAR) $(if $(USENMAKE),,-C "$(subst /,\,$(DIRECTORY))") -f "$(EXTMAKEFILENAME)" \
+	CFG=$(CFG_uppercase) EPOCBLD="$(subst /,\,$(EPOCBLD))" TO_BLDINF="$(subst /,\,$(TO_BLDINF))" PLATFORM=$(PLATFORM) $(if $(SAVESPACE),$(subst BLD,SAVESPACE,$(1)),$(1)) \
+	$(call endrule,extension_makefile) 
+ifneq ($(call isoneof,$(1),RELEASABLES FINAL),)
+	$(call startrawoutput) \
+	echo "$(call whatLogOpen)" ; \
+	$(foreach V,$(EXTMAKEFILEPARAMETERS),$(V)='$($(V))') EXTMAKEFILETARGET='RELEASABLES' \
+	$(if $(USENMAKE),export MAKEFLAGS="";cd "$(subst /,\,$(DIRECTORY))";,) export EPOCROOT="$(strip $(OLDSTYLE_EPOCROOT))\"; export CFG=$(CFG_uppercase); \
+	$(MAKEVAR) $(if $(USENMAKE),-C -S,-C "$(subst /,\,$(DIRECTORY))" --no-print-directory) -f "$(EXTMAKEFILENAME)" \
+	CFG=$(CFG_uppercase) EPOCBLD="$(subst /,\,$(EPOCBLD))" TO_BLDINF="$(subst /,\,$(TO_BLDINF))" PLATFORM=$(PLATFORM) RELEASABLES | \
+	(read -r LINE; while [ $$$$? -eq 0 ]; do \
+	if [[ ! $$$$LINE =~ "Nothing to be done for"  ]] ; then echo "$(call whatLogItem,EM,$$$$LINE)"; fi; \
+	read -r LINE; done; ); \
+	echo "$(call whatLogClose)" \
+	$(call endrawoutput)
+
+
+WHATGNUEM:: $(UNIQ)_RELEASABLES
+
+endif
+endef
+
+DO_NOTHING:: $(UNIQ)_DO_NOTHING 
+$(UNIQ)_DO_NOTHING: ;
+
+$(foreach EXTTRG,$(EXTMAKETARGETS),$(eval $(call callgnumake,$(EXTTRG))))
+
+## Do ROMFILE target in romstuff.mke
+ifeq ($(ROMFILE_$(call sanitise,$(EXTMAKEFILENAME))),)
+ROMFILE_$(call sanitise,$(EXTMAKEFILENAME)):=1
+
+ROMDIR:=$(subst $(OLD_EPOCROOT),$(OLD_EPOCROOT)epoc32/rom/,$(TO_BLDINF))
+
+define RomfileRomstuff
+ROMFILE::
+	@$(MAKEVAR) --no-print-directory $(if $(USENMAKE),,-C "$(subst /,\,$(DIRECTORY))") -f "$(EXTMAKEFILENAME)" ROMFILE >> $(ROMDIR)/ARMV5TEST.IBY
+endef
+
+$(eval $(call RomfileRomstuff))
+endif
--- a/sbsv2/raptor/lib/flm/grouping.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/grouping.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,29 +1,29 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-
-$(ALLTARGET): /:=$(/)
-$(ALLTARGET): FLMHOME:=$(FLMHOME)
-$(ALLTARGET): COMPONENT_ALLTARGETS:=$(COMPONENT_ALLTARGETS)
-$(ALLTARGET): COMPONENT_GLUEMAKEFILES:=$(COMPONENT_GLUEMAKEFILES)
-
-
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(COMPONENT_ALLTARGETS)
-
-
-$(foreach COMPONENT_INC,$(COMPONENT_GLUEMAKEFILES),$(eval include $(COMPONENT_INC)))
-
-
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+
+$(ALLTARGET): /:=$(/)
+$(ALLTARGET): FLMHOME:=$(FLMHOME)
+$(ALLTARGET): COMPONENT_ALLTARGETS:=$(COMPONENT_ALLTARGETS)
+$(ALLTARGET): COMPONENT_GLUEMAKEFILES:=$(COMPONENT_GLUEMAKEFILES)
+
+
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(COMPONENT_ALLTARGETS)
+
+
+$(foreach COMPONENT_INC,$(COMPONENT_GLUEMAKEFILES),$(eval include $(COMPONENT_INC)))
+
+
--- a/sbsv2/raptor/lib/flm/metaflm.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/metaflm.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,224 +1,224 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-
-# Macros for creating Standard targets
-
-ifeq ($(_METAFLM_MK_),)
-_METAFLM_MK_:=1
-
-# GENERATE STANDARD CLEAN TARGET 
-# example usage:
-# $(eval $(call GenerateStandardCleanTarget,$(FILE_LIST),$(DIRECTORY_LIST)))
-
-## CLEAN macros #####################################
-# The clean macro does not generate a target but extension makefiles do have
-# CLEAN targets that need to be attached to something.
-.PHONY:: CLEAN
-
-define GenerateStandardCleanTarget
-$(info <clean bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>)
-$(foreach ITEM,$(1),$(info <file>$(ITEM)</file>))
-$(foreach ITEM,$(2),$(info <dir>$(ITEM)</dir>))
-$(info </clean>)
-endef
-
-## End CLEAN macros #####################################
-
-
-## WHAT macros #####################################
-
-
-## Begin --what Macros #####
-define outputWhat
-ifeq ($(OSTYPE),cygwin)
-$(2)::
-	@for FILE in $(subst %20,$(CHAR_SPACE),$(subst /,\\,$(call dblquote,$(1)))); do \
-		echo $$$$FILE; \
-	done;
-else
-$(2)::
-	@for FILE in $(subst %20,$(CHAR_SPACE),$(1)); do \
-		echo $$$$FILE; \
-	done
-endif
-endef
-
-## End --what Macros #####
-
-## Begin .whatlog Macros #####
-define whatLogOpen
-<whatlog bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>
-endef
-
-define whatLogItem
-$(if $(findstring EXPORT,$(1)),<export ,$(if $(findstring RESOURCE,$(1)),<resource>,$(if $(findstring BITMAP,$(1)),<bitmap>,$(if $(findstring STRINGTABLE,$(1)),<stringtable>,$(if $(findstring ARCHIVE,$(1)),<member>,<build>)))))$(subst %20,$(CHAR_SPACE),$(2))$(if $(findstring EXPORT,$(1)),/>,$(if $(findstring RESOURCE,$(1)),</resource>,$(if $(findstring BITMAP,$(1)),</bitmap>,$(if $(findstring STRINGTABLE,$(1)),</stringtable>,$(if $(findstring ARCHIVE,$(1)),</member>,</build>)))))
-endef
-
-define whatLogClose
-</whatlog>
-endef
-
-define outputWhatLog
-$(info $(call whatLogOpen))
-$(foreach ITEM,$(1),$(info $(call whatLogItem,$(2),$(ITEM))))
-$(info $(call whatLogClose))
-endef
-
-## End .whatlog Macros #####
-
-# General FLM entry points for what-related processing
-define WhatExports
-endef
-
-define whatmacro
-$(call outputWhatLog,$(1),$(2))
-endef
-
-define whatUnzip
-endef	
-## END WHAT UNZIP MACRO 
-
-## End WHAT macros #####################################
-
-# Macro for creating the test BATCH files.
-# Arguments: $(1) -> Target Name $(2) -> Output Batch file path
-define MakeTestBatchFiles
-    $(if $(BATCHFILE_CREATED_$(2))
-        ,
-            $(if $(TARGET_CREATED_$(2)_$(TARGET))
-                ,
-                ,
-                    $$(shell echo -e "$(1)\r" >> $(2))
-            )
-       	,
-       	    $$(shell $(GNUMKDIR) -p $(dir $(2)))
-       	    $$(shell echo -e "$(1)\r" > $(2))
-    )
-endef
-
-## path creation #########################
-# Make the destination directory if neccessary.  For some
-# make engines we must do this outside the rule or they
-# get confused by the apparent way in which different rules
-# can create a particular directory and they infer some kind
-# of dependency.
-
-# Makepath. Copyright (C) 2008 Symbian Software Ltd.
-# buffering with repeat prevention, makes directories after every 30 calls. Any more might overload 
-# the createprocess limit on arguments.
-#
-# makepathLIST is initialised in globals.mk
-define makepath_single
-$(if $(findstring $1,$(makepathLIST)),,$(eval makepathLIST:=$(makepathLIST) $1))
-$(if $(subst 30,,$(words $(makepathLIST))),,$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=))
-endef
-
-# The following turns out to be extremely slow - something to do with using eval 
-# or to do with creating huge numbers of TARGET_ variables? BTW, this is an attempt
-# to not make things that we have already made.
-# define makepath
-# $(info makepath_start)$(foreach DIR,$1,$(if $(TARGET_$(1)),,$(call makepath_single,$(DIR))$(eval TARGET_$(1):=1)))$(info makepath_end)
-# endef
-
-# In general, makepath creates directories during FLM evaluation.
-# However, if the WHAT target is being processed then it should do nothing.
-ifeq ($(filter WHAT,$(call uppercase,$(MAKECMDGOALS))),)
-define makepath
-$(strip $(foreach DIR,$(sort $1),$(call makepath_single,$(DIR))))
-endef
-else
-define makepath
-endef
-endif
-
-
-define makepathfor
-$(call makepath,$(dir $1))
-endef
-
-# Make any remaining paths in the path buffer
-define makepathfinalise
-$(strip $(if $(makepathLIST),$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=),))
-endef
-
-## ROMFILE macro #####################################
-define DoRomSet
-
-ifeq ($(call uppercase,$(TARGETTYPE)),LIB)
-BUILDROMTARGET:=
-endif
-
-ifeq ($(call uppercase,$(TARGETTYPE)),KEXT)
-ROMFILETYPE:=extension[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),LDD)
-ROMFILETYPE:=device[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),PDD)
-ROMFILETYPE:=device[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),VAR)
-ROMFILETYPE:=variant[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),KDLL)
-ABIDIR:=KMAIN
-endif
-
-ifneq ($(CALLDLLENTRYPOINTS),)
-ROMFILETYPE:=dll
-endif
-ifeq ($(ROMFILETYPE),primary)
-ABIDIR:=KMAIN
-endif
-
-endef
-
-## End of ROMFILE macro ##############################
-
-## Macros for writing FLMs without needing to know eval
-
-# declaring targets as RELEASABLE, for example,
-#
-# $(call raptor_release,$(TARGET1) $(TARGET2),RESOURCE)
-#
-# the optional type (RESOURCE) can be one of,
-# EXPORT RESOURCE BITMAP STRINGTABLE ARCHIVE
-#
-# no argument means just a default (binary) releasable.
-#
-define raptor_release
-$(eval $(call outputWhatLog,$1,$2))
-endef
-
-# declaring things that need to be cleaned.
-#
-# any files which are generated but are not RELEASABLE should be listed
-# using this macro, for example,
-#
-# $(call raptor_clean,$(OBJECT_FILES))
-#
-define raptor_clean
-$(eval $(call GenerateStandardCleanTarget,$1))
-endef
-
-endif 
-# end of metaflm
-## END TEST BATCH FILES MACRO
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+# Macros for creating Standard targets
+
+ifeq ($(_METAFLM_MK_),)
+_METAFLM_MK_:=1
+
+# GENERATE STANDARD CLEAN TARGET 
+# example usage:
+# $(eval $(call GenerateStandardCleanTarget,$(FILE_LIST),$(DIRECTORY_LIST)))
+
+## CLEAN macros #####################################
+# The clean macro does not generate a target but extension makefiles do have
+# CLEAN targets that need to be attached to something.
+.PHONY:: CLEAN
+
+define GenerateStandardCleanTarget
+$(info <clean bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>)
+$(foreach ITEM,$(1),$(info <file>$(ITEM)</file>))
+$(foreach ITEM,$(2),$(info <dir>$(ITEM)</dir>))
+$(info </clean>)
+endef
+
+## End CLEAN macros #####################################
+
+
+## WHAT macros #####################################
+
+
+## Begin --what Macros #####
+define outputWhat
+ifeq ($(OSTYPE),cygwin)
+$(2)::
+	@for FILE in $(subst %20,$(CHAR_SPACE),$(subst /,\\,$(call dblquote,$(1)))); do \
+		echo $$$$FILE; \
+	done;
+else
+$(2)::
+	@for FILE in $(subst %20,$(CHAR_SPACE),$(1)); do \
+		echo $$$$FILE; \
+	done
+endif
+endef
+
+## End --what Macros #####
+
+## Begin .whatlog Macros #####
+define whatLogOpen
+<whatlog bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>
+endef
+
+define whatLogItem
+$(if $(findstring EXPORT,$(1)),<export ,$(if $(findstring RESOURCE,$(1)),<resource>,$(if $(findstring BITMAP,$(1)),<bitmap>,$(if $(findstring STRINGTABLE,$(1)),<stringtable>,$(if $(findstring ARCHIVE,$(1)),<member>,<build>)))))$(subst %20,$(CHAR_SPACE),$(2))$(if $(findstring EXPORT,$(1)),/>,$(if $(findstring RESOURCE,$(1)),</resource>,$(if $(findstring BITMAP,$(1)),</bitmap>,$(if $(findstring STRINGTABLE,$(1)),</stringtable>,$(if $(findstring ARCHIVE,$(1)),</member>,</build>)))))
+endef
+
+define whatLogClose
+</whatlog>
+endef
+
+define outputWhatLog
+$(info $(call whatLogOpen))
+$(foreach ITEM,$(1),$(info $(call whatLogItem,$(2),$(ITEM))))
+$(info $(call whatLogClose))
+endef
+
+## End .whatlog Macros #####
+
+# General FLM entry points for what-related processing
+define WhatExports
+endef
+
+define whatmacro
+$(call outputWhatLog,$(1),$(2))
+endef
+
+define whatUnzip
+endef	
+## END WHAT UNZIP MACRO 
+
+## End WHAT macros #####################################
+
+# Macro for creating the test BATCH files.
+# Arguments: $(1) -> Target Name $(2) -> Output Batch file path
+define MakeTestBatchFiles
+    $(if $(BATCHFILE_CREATED_$(2))
+        ,
+            $(if $(TARGET_CREATED_$(2)_$(TARGET))
+                ,
+                ,
+                    $$(shell echo -e "$(1)\r" >> $(2))
+            )
+       	,
+       	    $$(shell $(GNUMKDIR) -p $(dir $(2)))
+       	    $$(shell echo -e "$(1)\r" > $(2))
+    )
+endef
+
+## path creation #########################
+# Make the destination directory if neccessary.  For some
+# make engines we must do this outside the rule or they
+# get confused by the apparent way in which different rules
+# can create a particular directory and they infer some kind
+# of dependency.
+
+# Makepath. Copyright (C) 2008 Symbian Software Ltd.
+# buffering with repeat prevention, makes directories after every 30 calls. Any more might overload 
+# the createprocess limit on arguments.
+#
+# makepathLIST is initialised in globals.mk
+define makepath_single
+$(if $(findstring $1,$(makepathLIST)),,$(eval makepathLIST:=$(makepathLIST) $1))
+$(if $(subst 30,,$(words $(makepathLIST))),,$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=))
+endef
+
+# The following turns out to be extremely slow - something to do with using eval 
+# or to do with creating huge numbers of TARGET_ variables? BTW, this is an attempt
+# to not make things that we have already made.
+# define makepath
+# $(info makepath_start)$(foreach DIR,$1,$(if $(TARGET_$(1)),,$(call makepath_single,$(DIR))$(eval TARGET_$(1):=1)))$(info makepath_end)
+# endef
+
+# In general, makepath creates directories during FLM evaluation.
+# However, if the WHAT target is being processed then it should do nothing.
+ifeq ($(filter WHAT,$(call uppercase,$(MAKECMDGOALS))),)
+define makepath
+$(strip $(foreach DIR,$(sort $1),$(call makepath_single,$(DIR))))
+endef
+else
+define makepath
+endef
+endif
+
+
+define makepathfor
+$(call makepath,$(dir $1))
+endef
+
+# Make any remaining paths in the path buffer
+define makepathfinalise
+$(strip $(if $(makepathLIST),$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=),))
+endef
+
+## ROMFILE macro #####################################
+define DoRomSet
+
+ifeq ($(call uppercase,$(TARGETTYPE)),LIB)
+BUILDROMTARGET:=
+endif
+
+ifeq ($(call uppercase,$(TARGETTYPE)),KEXT)
+ROMFILETYPE:=extension[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),LDD)
+ROMFILETYPE:=device[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),PDD)
+ROMFILETYPE:=device[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),VAR)
+ROMFILETYPE:=variant[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),KDLL)
+ABIDIR:=KMAIN
+endif
+
+ifneq ($(CALLDLLENTRYPOINTS),)
+ROMFILETYPE:=dll
+endif
+ifeq ($(ROMFILETYPE),primary)
+ABIDIR:=KMAIN
+endif
+
+endef
+
+## End of ROMFILE macro ##############################
+
+## Macros for writing FLMs without needing to know eval
+
+# declaring targets as RELEASABLE, for example,
+#
+# $(call raptor_release,$(TARGET1) $(TARGET2),RESOURCE)
+#
+# the optional type (RESOURCE) can be one of,
+# EXPORT RESOURCE BITMAP STRINGTABLE ARCHIVE
+#
+# no argument means just a default (binary) releasable.
+#
+define raptor_release
+$(eval $(call outputWhatLog,$1,$2))
+endef
+
+# declaring things that need to be cleaned.
+#
+# any files which are generated but are not RELEASABLE should be listed
+# using this macro, for example,
+#
+# $(call raptor_clean,$(OBJECT_FILES))
+#
+define raptor_clean
+$(eval $(call GenerateStandardCleanTarget,$1))
+endef
+
+endif 
+# end of metaflm
+## END TEST BATCH FILES MACRO
--- a/sbsv2/raptor/lib/flm/msvctools.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/msvctools.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,212 +1,212 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# MSVC TOOLS EXE/LIB Function Like Makefile (FLM)
-# Knows how to build all possible executables for the TOOLS build
-# 
-#
-
-CLEANTARGETS:=
-RELEASABLES:=
-INSTALLTARGET:=
-
-RELEASEPATH:=$(RELEASEPATHROOT)/$(FULLVARIANTPATH)
-BUILDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
-RELEASETARGET:=$(RELEASEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(RELEASEPATH))
-$(call makepath,$(BUILDPATH))
-
-CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET)
-RELEASEABLES:=$(RELEASEABLES) $(RELEASETARGET)
-
-GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
-
-# MSVC "no space" arguments must take the form /<ARG><PATH_WITH_DOS_SLASHES> e.g.
-# 	/FoF:\object\file\to\be\created.obj
-define msvcformatarg
-	$(1)$(subst /,\\\,$(2))
-endef
-
-#############
-## COMPILE ##
-#############
-
-# object files and related
-OBJFILES:=$(patsubst %,$(BUILDPATH)/%.obj,$(basename $(notdir $(SOURCE))))
-SBRFILES:=$(addsuffix .sbr, $(basename $(OBJFILES)))
-LISFILES:=$(addsuffix .lis, $(basename $(OBJFILES)))
-LSTFILES:=$(addsuffix .tools.lst, $(basename $(SOURCE)))
-CLEANTARGETS:=$(CLEANTARGETS) $(OBJFILES) $(SBRFILES) $(LISFILES) $(LSTFILES)
-
-# include paths and preinclude file
-UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
-SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
-PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
-INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
-
-# macros
-DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
-
-# other
-PDBFILE:=$(if $(GENDEBUGINFO),$(RELEASEPATH)/$(TARGET).pdb,)
-CLEANTARGETS:=$(CLEANTARGETS) $(PDBFILE)
-
-#compile
-define msvctoolscompile
-  $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META) $(if $(HAVE_ORDERONLY),|,)  EXPORT
-	$(call startrule,msvctoolscompile,,$(1)) \
-	$(CC) \
-	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
-	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
-	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
-	$(if $(PDBFILE),$$(call msvcformatarg,$(OPT.PDBFILE),$(PDBFILE)),) \
-	$(DEFINES) $(INCLUDES) \
-	$$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
-	$$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
-	$(call endrule,msvctoolscompile)
-endef
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(BUILDPATH))
-$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolscompile,$(SRCFILE))))
-
-# assembler listing
-define msvctoolslisting
-  LISTING:: $(BUILDPATH)/$(basename $(notdir $(1))).lis
-	$(GNUCP) $$< $(basename $(1)).tools.lst
-  
-  $(BUILDPATH)/$(basename $(notdir $(1))).lis: $(1)
-	$(call startrule,msvctoolslisting) \
-	$(CC) \
-	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
-	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
-	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
-	$(DEFINES) $(INCLUDES) \
-	$$(call msvcformatarg,$(OPT.LISTING),$(BUILDPATH)/$(basename $(notdir $(1))).lis) \
-	$(1) \
-	$(call endrule,msvctoolslisting)
-
-  endef
-$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolslisting,$(SRCFILE))))
-
-
-ifeq ($(BASE_TYPE),staticlib)
-
-  #############
-  ## ARCHIVE ##
-  #############
-
-  ARCHIVERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).arf
-  CLEANTARGETS:=$(CLEANTARGETS) $(ARCHIVERRESPONSEFILE)
-
-  define msvctoolsarchive
-    $(RELEASETARGET): $(OBJFILES)
-	  @echo "" > $(ARCHIVERRESPONSEFILE);
-	  $(call groupin10infile,$(ARCHIVERRESPONSEFILE),$(OBJFILES)) ;
-	  $(call startrule,msvctoolsarchive) \
-	  $(AR) $(ARFLAGS) $(OPT.SUBSYSTEM)$(SUBSYSTEM) $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
-	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(ARCHIVERRESPONSEFILE)) \
-	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
-	  $(call endrule,msvctoolsarchive)
-
-  endef
-  $(eval $(msvctoolsarchive))
-
-else
-
-  ##########
-  ## LINK ##
-  ##########
-
-  STATICLIBS:=$(patsubst %,$(RELEASEPATH)/%.lib,$(STATICLIBRARY))
-  IMPORTLIBS:=$(patsubst %.dso,$(IMPORTLIBPATH)/%.lib,$(LIBRARY))
-  LINKERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).lrf
-  CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET).lib $(LINKERRESPONSEFILE)
-  
-  define msvctoolslink
-    $(RELEASETARGET): $(OBJFILES) $(STATICLIBS) $(IMPORTLIBS)
-	  @echo "" > $(LINKERRESPONSEFILE);
-	  $(call groupin10infile,$(LINKERRESPONSEFILE),$(STATICLIBS) $(IMPORTLIBS) $(OBJFILES)) ;
-	  $(call startrule,msvctoolslink) \
-	  $(LD) $(LFLAGS) $(WIN32_LIBRARY) $(OPT.SUBSYSTEM)$(SUBSYSTEM) \
-	  $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
-	  $$(call msvcformatarg,$(OPT.IMPLIB),$(RELEASETARGET).lib) \
-	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(LINKERRESPONSEFILE)) \
-	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
-	  $(call endrule,msvctoolslink)
-  endef
-  $(eval $(msvctoolslink)) 
-
-endif
-
-
-#############
-## INSTALL ##
-#############
-
-ifneq ($(INSTALLPATH),)
-  INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-  CLEANTARGETS:=$(CLEANTARGETS) $(INSTALLTARGET)
-  RELEASEABLES:=$(RELEASEABLES) $(INSTALLTARGET)
-
-  define msvctoolsinstall
-    $(INSTALLTARGET): $(RELEASETARGET)
-	  $(call startrule,msvctoolsinstall) \
-	  $(GNUCP) $$< $$@ && \
-	  $(GNUCHMOD) a+rwx $$@ \
-	  $(call endrule,msvctoolsinstall)
-  endef
-  # make the output directories while reading makefile - some build engines prefer this
-  $(call makepath,$(INSTALLPATH))
-  $(eval $(msvctoolsinstall))
-endif
-
-
-##########################
-## BROWSE DB GENERATION ##
-##########################
-
-ifneq ($(GENDEBUGINFO),)
-  BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
-  BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
-  CLEANTARGETS:=$(CLEANTARGETS) $(BSCFILE) $(BSCRESPONSEFILE)
-  RELEASEABLES:=$(RELEASEABLES) $(BSCFILE)
-
-  define msvctoolsgenbrowse  
-    $(BSCFILE): $(OBJFILES)
-	  @echo "" > $(BSCRESPONSEFILE);
-	  $(call groupin10infile,$(BSCRESPONSEFILE),$(SBRFILES)) ;
-	  $(call startrule,msvctoolsgenbrowse) \
-	  $(BROWSETOOL) $(BROWSEFLAGS) $$(call msvcformatarg,$(OPT.BROWSEDB),$$@) \
-	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(BSCRESPONSEFILE)) \
-	  $(if $(SAVESPACE),; $(GNURM) -f $(SBRFILES); true,) \
-	  $(call endrule,msvctoolsgenbrowse)
-  endef
-  $(eval $(msvctoolsgenbrowse)) 
-endif
-
-
-# Global targets
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(RELEASEABLES)
-TARGET:: $(RELEASEABLES)
-
-ifeq ($(BASE_TYPE),staticlib)
-  LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
-endif
-
-# clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),,))
-# for the abld -what target
-$(eval $(call whatmacro,$(INSTALLTARGET),WHATTOOLS))
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# MSVC TOOLS EXE/LIB Function Like Makefile (FLM)
+# Knows how to build all possible executables for the TOOLS build
+# 
+#
+
+CLEANTARGETS:=
+RELEASABLES:=
+INSTALLTARGET:=
+
+RELEASEPATH:=$(RELEASEPATHROOT)/$(FULLVARIANTPATH)
+BUILDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
+RELEASETARGET:=$(RELEASEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(RELEASEPATH))
+$(call makepath,$(BUILDPATH))
+
+CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET)
+RELEASEABLES:=$(RELEASEABLES) $(RELEASETARGET)
+
+GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
+
+# MSVC "no space" arguments must take the form /<ARG><PATH_WITH_DOS_SLASHES> e.g.
+# 	/FoF:\object\file\to\be\created.obj
+define msvcformatarg
+	$(1)$(subst /,\\\,$(2))
+endef
+
+#############
+## COMPILE ##
+#############
+
+# object files and related
+OBJFILES:=$(patsubst %,$(BUILDPATH)/%.obj,$(basename $(notdir $(SOURCE))))
+SBRFILES:=$(addsuffix .sbr, $(basename $(OBJFILES)))
+LISFILES:=$(addsuffix .lis, $(basename $(OBJFILES)))
+LSTFILES:=$(addsuffix .tools.lst, $(basename $(SOURCE)))
+CLEANTARGETS:=$(CLEANTARGETS) $(OBJFILES) $(SBRFILES) $(LISFILES) $(LSTFILES)
+
+# include paths and preinclude file
+UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
+SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
+PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
+INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
+
+# macros
+DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
+
+# other
+PDBFILE:=$(if $(GENDEBUGINFO),$(RELEASEPATH)/$(TARGET).pdb,)
+CLEANTARGETS:=$(CLEANTARGETS) $(PDBFILE)
+
+#compile
+define msvctoolscompile
+  $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META) $(if $(HAVE_ORDERONLY),|,)  EXPORT
+	$(call startrule,msvctoolscompile,,$(1)) \
+	$(CC) \
+	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
+	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
+	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
+	$(if $(PDBFILE),$$(call msvcformatarg,$(OPT.PDBFILE),$(PDBFILE)),) \
+	$(DEFINES) $(INCLUDES) \
+	$$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
+	$$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
+	$(call endrule,msvctoolscompile)
+endef
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(BUILDPATH))
+$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolscompile,$(SRCFILE))))
+
+# assembler listing
+define msvctoolslisting
+  LISTING:: $(BUILDPATH)/$(basename $(notdir $(1))).lis
+	$(GNUCP) $$< $(basename $(1)).tools.lst
+  
+  $(BUILDPATH)/$(basename $(notdir $(1))).lis: $(1)
+	$(call startrule,msvctoolslisting) \
+	$(CC) \
+	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
+	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
+	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
+	$(DEFINES) $(INCLUDES) \
+	$$(call msvcformatarg,$(OPT.LISTING),$(BUILDPATH)/$(basename $(notdir $(1))).lis) \
+	$(1) \
+	$(call endrule,msvctoolslisting)
+
+  endef
+$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolslisting,$(SRCFILE))))
+
+
+ifeq ($(BASE_TYPE),staticlib)
+
+  #############
+  ## ARCHIVE ##
+  #############
+
+  ARCHIVERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).arf
+  CLEANTARGETS:=$(CLEANTARGETS) $(ARCHIVERRESPONSEFILE)
+
+  define msvctoolsarchive
+    $(RELEASETARGET): $(OBJFILES)
+	  @echo "" > $(ARCHIVERRESPONSEFILE);
+	  $(call groupin10infile,$(ARCHIVERRESPONSEFILE),$(OBJFILES)) ;
+	  $(call startrule,msvctoolsarchive) \
+	  $(AR) $(ARFLAGS) $(OPT.SUBSYSTEM)$(SUBSYSTEM) $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(ARCHIVERRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
+	  $(call endrule,msvctoolsarchive)
+
+  endef
+  $(eval $(msvctoolsarchive))
+
+else
+
+  ##########
+  ## LINK ##
+  ##########
+
+  STATICLIBS:=$(patsubst %,$(RELEASEPATH)/%.lib,$(STATICLIBRARY))
+  IMPORTLIBS:=$(patsubst %.dso,$(IMPORTLIBPATH)/%.lib,$(LIBRARY))
+  LINKERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).lrf
+  CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET).lib $(LINKERRESPONSEFILE)
+  
+  define msvctoolslink
+    $(RELEASETARGET): $(OBJFILES) $(STATICLIBS) $(IMPORTLIBS)
+	  @echo "" > $(LINKERRESPONSEFILE);
+	  $(call groupin10infile,$(LINKERRESPONSEFILE),$(STATICLIBS) $(IMPORTLIBS) $(OBJFILES)) ;
+	  $(call startrule,msvctoolslink) \
+	  $(LD) $(LFLAGS) $(WIN32_LIBRARY) $(OPT.SUBSYSTEM)$(SUBSYSTEM) \
+	  $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
+	  $$(call msvcformatarg,$(OPT.IMPLIB),$(RELEASETARGET).lib) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(LINKERRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
+	  $(call endrule,msvctoolslink)
+  endef
+  $(eval $(msvctoolslink)) 
+
+endif
+
+
+#############
+## INSTALL ##
+#############
+
+ifneq ($(INSTALLPATH),)
+  INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+  CLEANTARGETS:=$(CLEANTARGETS) $(INSTALLTARGET)
+  RELEASEABLES:=$(RELEASEABLES) $(INSTALLTARGET)
+
+  define msvctoolsinstall
+    $(INSTALLTARGET): $(RELEASETARGET)
+	  $(call startrule,msvctoolsinstall) \
+	  $(GNUCP) $$< $$@ && \
+	  $(GNUCHMOD) a+rwx $$@ \
+	  $(call endrule,msvctoolsinstall)
+  endef
+  # make the output directories while reading makefile - some build engines prefer this
+  $(call makepath,$(INSTALLPATH))
+  $(eval $(msvctoolsinstall))
+endif
+
+
+##########################
+## BROWSE DB GENERATION ##
+##########################
+
+ifneq ($(GENDEBUGINFO),)
+  BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
+  BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
+  CLEANTARGETS:=$(CLEANTARGETS) $(BSCFILE) $(BSCRESPONSEFILE)
+  RELEASEABLES:=$(RELEASEABLES) $(BSCFILE)
+
+  define msvctoolsgenbrowse  
+    $(BSCFILE): $(OBJFILES)
+	  @echo "" > $(BSCRESPONSEFILE);
+	  $(call groupin10infile,$(BSCRESPONSEFILE),$(SBRFILES)) ;
+	  $(call startrule,msvctoolsgenbrowse) \
+	  $(BROWSETOOL) $(BROWSEFLAGS) $$(call msvcformatarg,$(OPT.BROWSEDB),$$@) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(BSCRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(SBRFILES); true,) \
+	  $(call endrule,msvctoolsgenbrowse)
+  endef
+  $(eval $(msvctoolsgenbrowse)) 
+endif
+
+
+# Global targets
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(RELEASEABLES)
+TARGET:: $(RELEASEABLES)
+
+ifeq ($(BASE_TYPE),staticlib)
+  LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
+endif
+
+# clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),,))
+# for the abld -what target
+$(eval $(call whatmacro,$(INSTALLTARGET),WHATTOOLS))
--- a/sbsv2/raptor/lib/flm/msvctools.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/msvctools.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,79 +1,79 @@
-<?xml version='1.0' encoding='ISO-8859-1'?>
-<build xmlns='http://symbian.com/xml/build' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://symbian.com/xml/build ../../schema/build/2_0.xsd'>
-	<!-- Tools interfaces -->
-
-	<interface name='msvctools.flm' extends='base.flm' abstract='true'>
-		<param name='INSTALLPATH'/>
-		<param name='IMPORTLIBPATH'/>
-		<param name='OUTPUTPATH'/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='RELEASEPATHROOT'/>
-		<param name='REQUESTEDTARGETEXT' default=''/>
-		<param name='VARIANTTYPE'/>
-		<param name='FULLVARIANTPATH'/>
-		<param name='PLATMACROS.WINDOWS'/>
-		<param name='PLATMACROS.LINUX'/>
-	</interface>
-
-	<interface name='msvctools.mmp' extends='msvctools.flm' abstract='true'>
-		<param name='LIBRARY' default=''/>
-		<param name='OPTION_MSVC' default=''/>
-		<param name='SOURCE' default=''/>
-		<param name='STATICLIBRARY' default=''/>
-		<param name='SYSTEMINCLUDE' default=''/>
-		<param name='TARGET'/>
-		<param name='TARGETPATH'/>
-		<param name='TARGETTYPE'/>
-		<param name='USERINCLUDE' default=''/>
-		<param name='WIN32_HEADERS' default=''/>
-		<param name='WIN32_LIBRARY' default=''/>
-	</interface>
-
-	<interface name='msvctools.toolchain' extends='msvctools.mmp' abstract='true'>
-		<param name='INCLUDE'/>
-		<param name='LIB'/>
-		<param name='OPT.BROWSEDB'/>
-		<param name='OPT.BROWSEFILE'/>
-		<param name='OPT.COMPILE'/>
-		<param name='OPT.DEFINE'/>
-		<param name='OPT.INCLUDE'/>
-		<param name='OPT.LISTING'/>
-		<param name='OPT.OBJECTFILE'/>
-		<param name='OPT.OUTFILE'/>
-		<param name='OPT.PDBFILE'/>
-		<param name='OPT.PREINCLUDE'/>
-		<param name='OPT.SUBSYSTEM'/>
-		<param name='OPT.SYSINCLUDE'/>
-		<param name='OPT.USERINCLUDE'/>
-		<param name='PREFIX.RESPONSEFILE'/>
-		<param name='BROWSETOOL'/>
-		<param name='BROWSEFLAGS'/>
-		<param name='CC'/>
-		<param name='CDEFS'/>
-		<param name='CFLAGS'/>
-		<param name='CFLAGS.DEFAULT.WARNLEVEL'/>
-		<param name='CFLAGS.LIB'/>
-	</interface>
-
-	<interface name='msvctools.exe' extends='msvctools.toolchain' flm='msvctools.flm'>
-		<param name='BASE_TYPE' default='exe'/>
-		<param name='BASE_MACRO' default='__EXE__'/>
-		<param name='LD'/>
-		<param name='LFLAGS'/>
-		<param name='OPT.IMPLIB'/>
-		<param name='CFLAGS.ADD' default=''/>
-		<param name='SUBSYSTEM' default='console'/>
-	</interface>
-
-	<interface name='msvctools.lib' extends='msvctools.toolchain' flm='msvctools.flm'>
-		<param name='BASE_TYPE' default='staticlib'/>
-		<param name='BASE_MACRO' default=''/>
-		<param name='AR'/>
-		<param name='ARFLAGS'/>
-		<param name='CFLAGS.ADD' default='_MT'/>
-		<param name='SUBSYSTEM' default='windows'/>
-	</interface>
-
-</build>
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<build xmlns='http://symbian.com/xml/build' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://symbian.com/xml/build ../../schema/build/2_0.xsd'>
+	<!-- Tools interfaces -->
+
+	<interface name='msvctools.flm' extends='base.flm' abstract='true'>
+		<param name='INSTALLPATH'/>
+		<param name='IMPORTLIBPATH'/>
+		<param name='OUTPUTPATH'/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='RELEASEPATHROOT'/>
+		<param name='REQUESTEDTARGETEXT' default=''/>
+		<param name='VARIANTTYPE'/>
+		<param name='FULLVARIANTPATH'/>
+		<param name='PLATMACROS.WINDOWS'/>
+		<param name='PLATMACROS.LINUX'/>
+	</interface>
+
+	<interface name='msvctools.mmp' extends='msvctools.flm' abstract='true'>
+		<param name='LIBRARY' default=''/>
+		<param name='OPTION_MSVC' default=''/>
+		<param name='SOURCE' default=''/>
+		<param name='STATICLIBRARY' default=''/>
+		<param name='SYSTEMINCLUDE' default=''/>
+		<param name='TARGET'/>
+		<param name='TARGETPATH'/>
+		<param name='TARGETTYPE'/>
+		<param name='USERINCLUDE' default=''/>
+		<param name='WIN32_HEADERS' default=''/>
+		<param name='WIN32_LIBRARY' default=''/>
+	</interface>
+
+	<interface name='msvctools.toolchain' extends='msvctools.mmp' abstract='true'>
+		<param name='INCLUDE'/>
+		<param name='LIB'/>
+		<param name='OPT.BROWSEDB'/>
+		<param name='OPT.BROWSEFILE'/>
+		<param name='OPT.COMPILE'/>
+		<param name='OPT.DEFINE'/>
+		<param name='OPT.INCLUDE'/>
+		<param name='OPT.LISTING'/>
+		<param name='OPT.OBJECTFILE'/>
+		<param name='OPT.OUTFILE'/>
+		<param name='OPT.PDBFILE'/>
+		<param name='OPT.PREINCLUDE'/>
+		<param name='OPT.SUBSYSTEM'/>
+		<param name='OPT.SYSINCLUDE'/>
+		<param name='OPT.USERINCLUDE'/>
+		<param name='PREFIX.RESPONSEFILE'/>
+		<param name='BROWSETOOL'/>
+		<param name='BROWSEFLAGS'/>
+		<param name='CC'/>
+		<param name='CDEFS'/>
+		<param name='CFLAGS'/>
+		<param name='CFLAGS.DEFAULT.WARNLEVEL'/>
+		<param name='CFLAGS.LIB'/>
+	</interface>
+
+	<interface name='msvctools.exe' extends='msvctools.toolchain' flm='msvctools.flm'>
+		<param name='BASE_TYPE' default='exe'/>
+		<param name='BASE_MACRO' default='__EXE__'/>
+		<param name='LD'/>
+		<param name='LFLAGS'/>
+		<param name='OPT.IMPLIB'/>
+		<param name='CFLAGS.ADD' default=''/>
+		<param name='SUBSYSTEM' default='console'/>
+	</interface>
+
+	<interface name='msvctools.lib' extends='msvctools.toolchain' flm='msvctools.flm'>
+		<param name='BASE_TYPE' default='staticlib'/>
+		<param name='BASE_MACRO' default=''/>
+		<param name='AR'/>
+		<param name='ARFLAGS'/>
+		<param name='CFLAGS.ADD' default='_MT'/>
+		<param name='SUBSYSTEM' default='windows'/>
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/none.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/none.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,27 +1,27 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
-# Build Resources only
-# 
-#
-
-ifeq ($(TARGETTYPE),none)
-
-# Nothing to do here at the moment.  Perhaps later 
-# this will contain "all" rules to tie resources together
-
-else
-$(error none.flm called with wrong TARGETTYPE (should be 'none' but is '$(TARGETTYPE)'))
-endif
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 EXE/DLL ABIv2 Function Like Makefile (FLM)
+# Build Resources only
+# 
+#
+
+ifeq ($(TARGETTYPE),none)
+
+# Nothing to do here at the moment.  Perhaps later 
+# this will contain "all" rules to tie resources together
+
+else
+$(error none.flm called with wrong TARGETTYPE (should be 'none' but is '$(TARGETTYPE)'))
+endif
+
--- a/sbsv2/raptor/lib/flm/null.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/null.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,16 +1,16 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# An empty FLM, for cases where no action is required
-# 
-#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# An empty FLM, for cases where no action is required
+# 
+#
--- a/sbsv2/raptor/lib/flm/readme.txt	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/readme.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-Function-Like Makefiles
-------------------------
-
-Tests may be run from the "test" subdirectory.  Simply change into it and type 'make'.
-
-CHECKING YOUR BUILD ENVIRONMENT
---------------------------------
-In the test directory type "make envcheck" to see if you have correct path
-settings and determine if critical tools are available.
-
-FLMS
-----
-
-e32abiv2.flm    # PARENT FLM for building ARMv5 ABIv2 binaries
-e32abiv2.mk     # defaults makefile for building ARMv5 ABIv2 binaries 
-e32abiv2exe.flm # derived FLM (from e32abiv2.flm) for building ARMv5 ABIv2 exes
-e32abiv2dll.flm # derived FLM (from e32abiv2.flm) for building ARMv5 ABIv2 dlls
-example_exedll.flm # example flm
-extend_exe.flm  # example flm
-flmtools.mk     # utility functions for use in flms
-grouping.flm    # FLM for creating components
-metaflm.mk      # FLM for manipulating and working with other FLMS
-readme.txt	# This file
-rvct_armv5.mk   # defaults for ARMv5 ABIv2 parameters, used by e32abiv2.mk
-standard.xml	# interface file for e32abiv2.flm
-test		# ===== Base directory for all tests =====
-	Makefile # Glue makefile.  calls grouping.flm to bind all tests
-		 # together into a top-level target
-	basiclibs
-	dllabiv2_1
-	dllabiv2_defaults.mk
-	exeabiv2_1	# Test building a basic EXE
-	exeabiv2_2
-	exeabiv2_3
-	exeabiv2_defaults.mk
-tools			# ======= FLM related tools =======
-	command_diff.py # compare two commandlines to find what options are
-different
-	flm2if.py	# Produce an interface file from an FLM
-	flmcheck.py	# Check FLM for errors
-	flm.py		# Parse and manipulate flms
-	test_command_diff.sh
+Function-Like Makefiles
+------------------------
+
+Tests may be run from the "test" subdirectory.  Simply change into it and type 'make'.
+
+CHECKING YOUR BUILD ENVIRONMENT
+--------------------------------
+In the test directory type "make envcheck" to see if you have correct path
+settings and determine if critical tools are available.
+
+FLMS
+----
+
+e32abiv2.flm    # PARENT FLM for building ARMv5 ABIv2 binaries
+e32abiv2.mk     # defaults makefile for building ARMv5 ABIv2 binaries 
+e32abiv2exe.flm # derived FLM (from e32abiv2.flm) for building ARMv5 ABIv2 exes
+e32abiv2dll.flm # derived FLM (from e32abiv2.flm) for building ARMv5 ABIv2 dlls
+example_exedll.flm # example flm
+extend_exe.flm  # example flm
+flmtools.mk     # utility functions for use in flms
+grouping.flm    # FLM for creating components
+metaflm.mk      # FLM for manipulating and working with other FLMS
+readme.txt	# This file
+rvct_armv5.mk   # defaults for ARMv5 ABIv2 parameters, used by e32abiv2.mk
+standard.xml	# interface file for e32abiv2.flm
+test		# ===== Base directory for all tests =====
+	Makefile # Glue makefile.  calls grouping.flm to bind all tests
+		 # together into a top-level target
+	basiclibs
+	dllabiv2_1
+	dllabiv2_defaults.mk
+	exeabiv2_1	# Test building a basic EXE
+	exeabiv2_2
+	exeabiv2_3
+	exeabiv2_defaults.mk
+tools			# ======= FLM related tools =======
+	command_diff.py # compare two commandlines to find what options are
+different
+	flm2if.py	# Produce an interface file from an FLM
+	flmcheck.py	# Check FLM for errors
+	flm.py		# Parse and manipulate flms
+	test_command_diff.sh
--- a/sbsv2/raptor/lib/flm/resource.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/resource.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,301 +1,301 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Function Like Makefile (FLM) to create a resource header (.rsg)
-# and resource files (.rsc, .r01, .r02 etc.)
-#
-#
-
-## Parameters that are expected:
-# TARGET
-# TARGETPATH
-# LANGUAGES
-# HEADER
-# HEADERONLY
-# EPOCROOT
-# MMPDEFS
-# PRODUCT_INCLUDE
-# SYSTEMINCLUDE
-# USERINCLUDE
-# GNUCPP
-# GNUSED
-# RCOMP
-# OUTPUTPATH
-# SOURCE
-# BINCOPYDIRS
-
-
-# The rss is pre-processed once for each language and results
-# in a file with extension r$(LANGUAGE) where $(LANGUAGE) is
-# either "sc" or a 2 (or more) digit number.
-ifneq ($(TARGETPATH),)
-RSCDIR:=$(subst //,/,$(EPOCROOT)/epoc32/data/z/$(TARGETPATH))
-else
-RSCDIR:=$(subst //,/,$(EPOCROOT)/epoc32/data)
-endif
-RESBASE:=$(RSCDIR)/$(TARGET_lower)
-
-# Ensure that RELEASABLES and CLEANTARGETS cannot expand indefinitely in successive calls to this flm:
-CLEANTARGETS:=
-RELEASABLES:=
-
-# There is only one resource header (.rsg) file and we only
-# make that if we are asked.
-RSGDIR:=$(EPOCROOT)/epoc32/include
-ifneq ($(or $(HEADER),$(HEADERONLY)),)
-        RESOURCEHEADER:=$(RSGDIR)/$(HEADER)
-
-        # If there are multiple LANGUAGES then it is the last one in the list
-        # which produces the header.
-        HEADLANG:=$(lastword $(LANGUAGES:SC=sc))
-else
-	HEADLANG:=
-    RESOURCEHEADER:=
-endif
-
-# we create intermediate .rpp and .d files
-INTERBASE:=$(OUTPUTPATH)/$(TARGET_lower)$(if $(TARGETPATH),_$(subst /,_,$(TARGETPATH)),)
-
-################################## localisation ###########################$(GNUMKDIR)#############
-# Only make copies for full resource builds
-
-# Initialise to prevent RELEASABLES spill-over between calls
-DESTRPP:=
-INFOFILE:=
-
-ifeq ($(HEADERONLY),)
-
-RSSBASENAME:=$(call lowercase,$(basename $(notdir $(SOURCE))))
-DESTRPP:=$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc/$(RSSBASENAME).rpp
-$(call makepath,$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc)
-
-INFOFILE:=$(EPOCROOT)/epoc32/localisation/group/$(RSSBASENAME).info
-# If there are MULTIPLE languages then copy the .rpp for the last one
-RPPLANG:=$(lastword $(LANGUAGES:SC=sc))
-
-# Copy .rpp files from epoc32/build/ to epoc32/localisation/x/rsc/x.rpp and create .info files in localisation
-define CreateRppAndInfo
-
-ifeq ($(RESOURCE_$(call sanitise,$(SOURCE))),)
-RESOURCE_$(call sanitise,$(SOURCE)):=1
-
-RESOURCE:: $(DESTRPP) $(INFOFILE)
-
-$(DESTRPP): $(INTERBASE)_$(RPPLANG).rpp
-	$(call startrule,rppfilecopy,FORCESUCCESS) \
-	$(GNUCP) $$< $$@ \
-	$(call endrule,rppfilecopy)
-
-$(INFOFILE)::
-	@if [ ! -d $(EPOCROOT)/epoc32/localisation/group ]; then $(GNUMKDIR) -p $(EPOCROOT)/epoc32/localisation/group; fi
-	@if [ ! -f $$@ ]; then echo "DATADIR: /$(RSSBASENAME)" > $$@ ; fi
-	@echo -e "\n/z$(TARGETPATH)/$(TARGET_lower).rsc : $(RSSBASENAME).rpp" >> $$@
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DESTRPP) $(INFOFILE)
-
-endif
-endef
-
-$(eval $(call CreateRppAndInfo))
-endif
-################################# end of localisation ###################################
-
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(INTERBASE))
-
-# common pre-processor options
-CPPOPT:=-nostdinc -undef -D_UNICODE -include $(PRODUCT_INCLUDE)\
- -I$(dir $(SOURCE)) $(foreach I, $(USERINCLUDE),-I$(I) ) -I- $(foreach J,$(SYSTEMINCLUDE),-I$(J) )
-
-CREATABLEPATHS:=$(RSCDIR) $(RSGDIR) $(OUTPUTPATH)
-
-# additional binary resource copies performed based on BINCOPYDIRS
-RSCCOPYDIRS:=
-ifneq ($(BINCOPYDIRS),)
-        RSCCOPYDIRS:=$(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS)))
-        CREATABLEPATHS:=$(CREATABLEPATHS) $(RSCCOPYDIRS)
-endif
-
-###############################################################################
-define preprocessresource
-# $(1) is the RPPFILE		(eg. /epoc32/build/xxx/b_sc.rpp)
-# $(2) is the related RESOURCEFILE if any (eg. /a/b.rsc)
-# $(3) is the LANGUAGE		(eg. sc or 01 or 02 ...)
-
-  ifeq ($(TARGET_$(call sanitise,$1)),)
-    TARGET_$(call sanitise,$1):=1
-    $(if $(FLMDEBUG),$(info preprocessresource: $(1) for $(2) LANG:$(3)))
-
-    RESOURCE_DEPS:: $(1).d
-    $(1).d: $(SOURCE)
-	  $(call startrule,resourcedependencies,FORCESUCCESS) \
-	  $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\
-	  $(CPPOPT) $(SOURCE) -M -MG -MT"$(1)" | \
-	  $(GNUSED)  -r 's# ([^ \/]+\.((rsg)|(mbg)))# $(EPOCROOT)\/epoc32\/include\/\1#ig' > $(1).d \
-	  $(call endrule,resourcedependencies)
-
-    $(1): $(1).d
-	  $(call startrule,resourcepreprocess,FORCESUCCESS) \
-	  $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\
-	  $(CPPOPT) $(SOURCE) -o $$@ \
-	  $(call endrule,resourcepreprocess)
-
-    CLEANTARGETS:= $$(CLEANTARGETS) $(1)
-
-    $(eval DEPENDFILENAME:=$(1).d)
-    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-    ifneq "$(DEPENDFILE)" ""
-      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-        -include $(DEPENDFILE)
-      endif
-    endif
-
-  endif
-endef # preprocessresource #
-
-###############################################################################
-define copyresource
-# $(1) is the source
-# $(2) is the destination
-
-RELEASABLES:=$$(RELEASABLES) $(2)
-
-   ifeq ($(TARGET_$(call sanitise,$2)),)
-           TARGET_$(call sanitise,$2):=1
-        CLEANTARGETS:=$$(CLEANTARGETS) $2
-
-        RESOURCE:: $2
-        ## perform additional copies of binaries
-        #
-        # Only certain builds require further copies of the generated resource binaries
-        #
-        $(2): $(1)
-		$(call startrule,resourcecopy,FORCESUCCESS) \
-		$(GNUCP) $$< $$@ \
-		$(call endrule,resourcecopy)
-
-   endif
-
-endef # copyresource #
-
-###############################################################################
-define generateresource
-
-# $(1) is the resource filename e.g. /a/b/resource.rsc
-# $(2) is the preprocessed resource to make it from
-# $(3) is the language e.g. sc or 01 or 02
-
-    RELEASABLES:=$$(RELEASABLES) $(1)
-
-        ifeq ($(TARGET_$(call sanitise,$1)),)
-                TARGET_$(call sanitise,$1):=1
-            CLEANTARGETS:=$$(CLEANTARGETS) $(1)
-
-            $(if $(FLMDEBUG),$(info generateresource: $(1) from $(2) LANG:$(3)),)
-
-
-            RESOURCE:: $(1)
-
-            $(1): $(2) $(RCOMP)
-			$(call startrule,resourcecompile,FORCESUCCESS) \
-			$(RCOMP) -m045,046,047 -u -o$(1) -s$(2) \
-			$(call endrule,resourcecompile)
-
-        endif
-#	Whether or not we have generated this resource for some other variant, check if there
-#       are any new copies to be made for this variant. e.g. winscw requires that we make
-#       some extra copies.
-
-        $(foreach F,$(sort $(patsubst %,%/$(notdir $(1)),$(RSCCOPYDIRS))),$(call copyresource,$(1),$(F)))
-
-        # individual source file compilation
-        SOURCETARGET_$(call sanitise,$(SOURCE)): $(1)
-
-endef # generateresource
-
-
-###############################################################################
-define generateresourceheader
-# $(1) is the resource header	(eg. /epoc32/include/a.rsg)
-# $(2) is the preprocessed resource to make it from
-# $(3) is the language to use	(eg. sc)
-
-		RELEASABLES:= $$(RELEASABLES) $(1)
-
-        ifeq ($(TARGET_$(call sanitise,$1)),)
-                TARGET_$(call sanitise,$1):=1
-                CLEANTARGETS:= $$(CLEANTARGETS) $(1)
-                $(if $(FLMDEBUG),$(info resourceheader: $(1) from $(2) LANG:$(3)))
-
-                RESOURCE:: $(1)
-
-                $(1): $(2) $(RCOMP)
-			$(call startrule,resourceheader,FORCESUCCESS) \
-			$(RCOMP) -m045,046,047 -u -h$(1) -s$(2) \
-			$(call endrule,resourceheader)
-
-        endif
-
-
-        # individual source file compilation
-        SOURCETARGET_$(call sanitise,$(SOURCE)): $(1)
-
-endef
-
-###############################################################################
-## call the generator
-
-# We always create at least the header
-# even if we sometimes don't create the resources
-ifneq ($(RESOURCEHEADER),)
-        $(eval $(call generateresourceheader,$(RESOURCEHEADER),$(INTERBASE)_$(HEADLANG).rpp,$(HEADLANG)))
-endif
-
-ifeq ($(HEADERONLY),)
-        # generate a resource file for each language
-        # For sc we generate $(RESBASE).rsc and define LANGUAGE_SC and LANGUAGE_sc.
-        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call preprocessresource,$(INTERBASE)_$(L).rpp,$(RESBASE).r$(L),$(L))))
-        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(RESBASE).r$(L),$(INTERBASE)_$(L).rpp,$(L))))
-else
-        # No resources are going to be made so unless we specifically ask for it, there will be no
-        # preprocessed file from which to create the header:
-
-        $(eval $(call preprocessresource,$(INTERBASE)_$(HEADLANG).rpp,,$(HEADLANG)))
-
-endif
-
-###############################################################################
-## .rfi generation in support of the gccxml build
-## Note that .rfi files are created from the dependency files generated from preprocessing resources to create .rpp files
-ifneq ($(RFIFILE),)
-  RESOURCE:: $(RFIFILE)
-  RELEASABLES:=$(RELEASABLES) $(RFIFILE)
-  CLEANTARGETS:=$(CLEANTARGETS) $(RFIFILE)
-  CREATABLEPATHS:=$(CREATABLEPATHS) $(dir $(RFIFILE))
-
-  RPPFILES:=$(foreach L,$(LANGUAGES:SC=sc),$(INTERBASE)_$(L).rpp)
-  $(eval $(call generaterfifile,$(RFIFILE),$(RPPFILES),$(addsuffix .d,$(RPPFILES))))
-endif
-
-
-## Clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-
-# for the abld -what target
-RELEASABLES:=$(RELEASABLES) $(DESTRPP) $(INFOFILE)
-$(eval $(call whatmacro,$(RELEASABLES),WHATRESOURCES))
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Function Like Makefile (FLM) to create a resource header (.rsg)
+# and resource files (.rsc, .r01, .r02 etc.)
+#
+#
+
+## Parameters that are expected:
+# TARGET
+# TARGETPATH
+# LANGUAGES
+# HEADER
+# HEADERONLY
+# EPOCROOT
+# MMPDEFS
+# PRODUCT_INCLUDE
+# SYSTEMINCLUDE
+# USERINCLUDE
+# GNUCPP
+# GNUSED
+# RCOMP
+# OUTPUTPATH
+# SOURCE
+# BINCOPYDIRS
+
+
+# The rss is pre-processed once for each language and results
+# in a file with extension r$(LANGUAGE) where $(LANGUAGE) is
+# either "sc" or a 2 (or more) digit number.
+ifneq ($(TARGETPATH),)
+RSCDIR:=$(subst //,/,$(EPOCROOT)/epoc32/data/z/$(TARGETPATH))
+else
+RSCDIR:=$(subst //,/,$(EPOCROOT)/epoc32/data)
+endif
+RESBASE:=$(RSCDIR)/$(TARGET_lower)
+
+# Ensure that RELEASABLES and CLEANTARGETS cannot expand indefinitely in successive calls to this flm:
+CLEANTARGETS:=
+RELEASABLES:=
+
+# There is only one resource header (.rsg) file and we only
+# make that if we are asked.
+RSGDIR:=$(EPOCROOT)/epoc32/include
+ifneq ($(or $(HEADER),$(HEADERONLY)),)
+        RESOURCEHEADER:=$(RSGDIR)/$(HEADER)
+
+        # If there are multiple LANGUAGES then it is the last one in the list
+        # which produces the header.
+        HEADLANG:=$(lastword $(LANGUAGES:SC=sc))
+else
+	HEADLANG:=
+    RESOURCEHEADER:=
+endif
+
+# we create intermediate .rpp and .d files
+INTERBASE:=$(OUTPUTPATH)/$(TARGET_lower)$(if $(TARGETPATH),_$(subst /,_,$(TARGETPATH)),)
+
+################################## localisation ###########################$(GNUMKDIR)#############
+# Only make copies for full resource builds
+
+# Initialise to prevent RELEASABLES spill-over between calls
+DESTRPP:=
+INFOFILE:=
+
+ifeq ($(HEADERONLY),)
+
+RSSBASENAME:=$(call lowercase,$(basename $(notdir $(SOURCE))))
+DESTRPP:=$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc/$(RSSBASENAME).rpp
+$(call makepath,$(EPOCROOT)/epoc32/localisation/$(RSSBASENAME)/rsc)
+
+INFOFILE:=$(EPOCROOT)/epoc32/localisation/group/$(RSSBASENAME).info
+# If there are MULTIPLE languages then copy the .rpp for the last one
+RPPLANG:=$(lastword $(LANGUAGES:SC=sc))
+
+# Copy .rpp files from epoc32/build/ to epoc32/localisation/x/rsc/x.rpp and create .info files in localisation
+define CreateRppAndInfo
+
+ifeq ($(RESOURCE_$(call sanitise,$(SOURCE))),)
+RESOURCE_$(call sanitise,$(SOURCE)):=1
+
+RESOURCE:: $(DESTRPP) $(INFOFILE)
+
+$(DESTRPP): $(INTERBASE)_$(RPPLANG).rpp
+	$(call startrule,rppfilecopy,FORCESUCCESS) \
+	$(GNUCP) $$< $$@ \
+	$(call endrule,rppfilecopy)
+
+$(INFOFILE)::
+	@if [ ! -d $(EPOCROOT)/epoc32/localisation/group ]; then $(GNUMKDIR) -p $(EPOCROOT)/epoc32/localisation/group; fi
+	@if [ ! -f $$@ ]; then echo "DATADIR: /$(RSSBASENAME)" > $$@ ; fi
+	@echo -e "\n/z$(TARGETPATH)/$(TARGET_lower).rsc : $(RSSBASENAME).rpp" >> $$@
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DESTRPP) $(INFOFILE)
+
+endif
+endef
+
+$(eval $(call CreateRppAndInfo))
+endif
+################################# end of localisation ###################################
+
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(INTERBASE))
+
+# common pre-processor options
+CPPOPT:=-nostdinc -undef -D_UNICODE -include $(PRODUCT_INCLUDE)\
+ -I$(dir $(SOURCE)) $(foreach I, $(USERINCLUDE),-I$(I) ) -I- $(foreach J,$(SYSTEMINCLUDE),-I$(J) )
+
+CREATABLEPATHS:=$(RSCDIR) $(RSGDIR) $(OUTPUTPATH)
+
+# additional binary resource copies performed based on BINCOPYDIRS
+RSCCOPYDIRS:=
+ifneq ($(BINCOPYDIRS),)
+        RSCCOPYDIRS:=$(subst //,/,$(patsubst %,%/$(if $(TARGETPATH),/z/$(TARGETPATH),),$(BINCOPYDIRS)))
+        CREATABLEPATHS:=$(CREATABLEPATHS) $(RSCCOPYDIRS)
+endif
+
+###############################################################################
+define preprocessresource
+# $(1) is the RPPFILE		(eg. /epoc32/build/xxx/b_sc.rpp)
+# $(2) is the related RESOURCEFILE if any (eg. /a/b.rsc)
+# $(3) is the LANGUAGE		(eg. sc or 01 or 02 ...)
+
+  ifeq ($(TARGET_$(call sanitise,$1)),)
+    TARGET_$(call sanitise,$1):=1
+    $(if $(FLMDEBUG),$(info preprocessresource: $(1) for $(2) LANG:$(3)))
+
+    RESOURCE_DEPS:: $(1).d
+    $(1).d: $(SOURCE)
+	  $(call startrule,resourcedependencies,FORCESUCCESS) \
+	  $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\
+	  $(CPPOPT) $(SOURCE) -M -MG -MT"$(1)" | \
+	  $(GNUSED)  -r 's# ([^ \/]+\.((rsg)|(mbg)))# $(EPOCROOT)\/epoc32\/include\/\1#ig' > $(1).d \
+	  $(call endrule,resourcedependencies)
+
+    $(1): $(1).d
+	  $(call startrule,resourcepreprocess,FORCESUCCESS) \
+	  $(GNUCPP) -C -DLANGUAGE_$(3) -DLANGUAGE_$(subst sc,SC,$(3)) $(call makemacrodef,-D,$(MMPDEFS))\
+	  $(CPPOPT) $(SOURCE) -o $$@ \
+	  $(call endrule,resourcepreprocess)
+
+    CLEANTARGETS:= $$(CLEANTARGETS) $(1)
+
+    $(eval DEPENDFILENAME:=$(1).d)
+    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+    ifneq "$(DEPENDFILE)" ""
+      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+        -include $(DEPENDFILE)
+      endif
+    endif
+
+  endif
+endef # preprocessresource #
+
+###############################################################################
+define copyresource
+# $(1) is the source
+# $(2) is the destination
+
+RELEASABLES:=$$(RELEASABLES) $(2)
+
+   ifeq ($(TARGET_$(call sanitise,$2)),)
+           TARGET_$(call sanitise,$2):=1
+        CLEANTARGETS:=$$(CLEANTARGETS) $2
+
+        RESOURCE:: $2
+        ## perform additional copies of binaries
+        #
+        # Only certain builds require further copies of the generated resource binaries
+        #
+        $(2): $(1)
+		$(call startrule,resourcecopy,FORCESUCCESS) \
+		$(GNUCP) $$< $$@ \
+		$(call endrule,resourcecopy)
+
+   endif
+
+endef # copyresource #
+
+###############################################################################
+define generateresource
+
+# $(1) is the resource filename e.g. /a/b/resource.rsc
+# $(2) is the preprocessed resource to make it from
+# $(3) is the language e.g. sc or 01 or 02
+
+    RELEASABLES:=$$(RELEASABLES) $(1)
+
+        ifeq ($(TARGET_$(call sanitise,$1)),)
+                TARGET_$(call sanitise,$1):=1
+            CLEANTARGETS:=$$(CLEANTARGETS) $(1)
+
+            $(if $(FLMDEBUG),$(info generateresource: $(1) from $(2) LANG:$(3)),)
+
+
+            RESOURCE:: $(1)
+
+            $(1): $(2) $(RCOMP)
+			$(call startrule,resourcecompile,FORCESUCCESS) \
+			$(RCOMP) -m045,046,047 -u -o$(1) -s$(2) \
+			$(call endrule,resourcecompile)
+
+        endif
+#	Whether or not we have generated this resource for some other variant, check if there
+#       are any new copies to be made for this variant. e.g. winscw requires that we make
+#       some extra copies.
+
+        $(foreach F,$(sort $(patsubst %,%/$(notdir $(1)),$(RSCCOPYDIRS))),$(call copyresource,$(1),$(F)))
+
+        # individual source file compilation
+        SOURCETARGET_$(call sanitise,$(SOURCE)): $(1)
+
+endef # generateresource
+
+
+###############################################################################
+define generateresourceheader
+# $(1) is the resource header	(eg. /epoc32/include/a.rsg)
+# $(2) is the preprocessed resource to make it from
+# $(3) is the language to use	(eg. sc)
+
+		RELEASABLES:= $$(RELEASABLES) $(1)
+
+        ifeq ($(TARGET_$(call sanitise,$1)),)
+                TARGET_$(call sanitise,$1):=1
+                CLEANTARGETS:= $$(CLEANTARGETS) $(1)
+                $(if $(FLMDEBUG),$(info resourceheader: $(1) from $(2) LANG:$(3)))
+
+                RESOURCE:: $(1)
+
+                $(1): $(2) $(RCOMP)
+			$(call startrule,resourceheader,FORCESUCCESS) \
+			$(RCOMP) -m045,046,047 -u -h$(1) -s$(2) \
+			$(call endrule,resourceheader)
+
+        endif
+
+
+        # individual source file compilation
+        SOURCETARGET_$(call sanitise,$(SOURCE)): $(1)
+
+endef
+
+###############################################################################
+## call the generator
+
+# We always create at least the header
+# even if we sometimes don't create the resources
+ifneq ($(RESOURCEHEADER),)
+        $(eval $(call generateresourceheader,$(RESOURCEHEADER),$(INTERBASE)_$(HEADLANG).rpp,$(HEADLANG)))
+endif
+
+ifeq ($(HEADERONLY),)
+        # generate a resource file for each language
+        # For sc we generate $(RESBASE).rsc and define LANGUAGE_SC and LANGUAGE_sc.
+        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call preprocessresource,$(INTERBASE)_$(L).rpp,$(RESBASE).r$(L),$(L))))
+        $(foreach L,$(LANGUAGES:SC=sc),$(eval $(call generateresource,$(RESBASE).r$(L),$(INTERBASE)_$(L).rpp,$(L))))
+else
+        # No resources are going to be made so unless we specifically ask for it, there will be no
+        # preprocessed file from which to create the header:
+
+        $(eval $(call preprocessresource,$(INTERBASE)_$(HEADLANG).rpp,,$(HEADLANG)))
+
+endif
+
+###############################################################################
+## .rfi generation in support of the gccxml build
+## Note that .rfi files are created from the dependency files generated from preprocessing resources to create .rpp files
+ifneq ($(RFIFILE),)
+  RESOURCE:: $(RFIFILE)
+  RELEASABLES:=$(RELEASABLES) $(RFIFILE)
+  CLEANTARGETS:=$(CLEANTARGETS) $(RFIFILE)
+  CREATABLEPATHS:=$(CREATABLEPATHS) $(dir $(RFIFILE))
+
+  RPPFILES:=$(foreach L,$(LANGUAGES:SC=sc),$(INTERBASE)_$(L).rpp)
+  $(eval $(call generaterfifile,$(RFIFILE),$(RPPFILES),$(addsuffix .d,$(RPPFILES))))
+endif
+
+
+## Clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+
+# for the abld -what target
+RELEASABLES:=$(RELEASABLES) $(DESTRPP) $(INFOFILE)
+$(eval $(call whatmacro,$(RELEASABLES),WHATRESOURCES))
+
--- a/sbsv2/raptor/lib/flm/romfile.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/romfile.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-# romfile.mk
-#
-# Copyright (c) 2008 : Symbian Software Limited. All rights reserved.
-#
-# define macros that are needed by romfile creation
-
-define DoRomSet
-
-ifeq ($(call uppercase,$(TARGETTYPE)),LIB)
-BUILDROMTARGET:=
-endif
-
-ifeq ($(call uppercase,$(TARGETTYPE)),KEXT)
-ROMFILETYPE:=extension[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),LDD)
-ROMFILETYPE:=device[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),PDD)
-ROMFILETYPE:=device[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),VAR)
-ROMFILETYPE:=variant[MAGIC]
-ABIDIR:=KMAIN
-endif
-ifeq ($(call uppercase,$(TARGETTYPE)),KDLL)
-ABIDIR:=KMAIN
-endif
-
-ifneq ($(CALLDLLENTRYPOINTS),)
-ROMFILETYPE:=dll
-endif
-ifeq ($(ROMFILETYPE),primary)
-ABIDIR:=KMAIN
-endif
-
-endef
-
-
+# romfile.mk
+#
+# Copyright (c) 2008 : Symbian Software Limited. All rights reserved.
+#
+# define macros that are needed by romfile creation
+
+define DoRomSet
+
+ifeq ($(call uppercase,$(TARGETTYPE)),LIB)
+BUILDROMTARGET:=
+endif
+
+ifeq ($(call uppercase,$(TARGETTYPE)),KEXT)
+ROMFILETYPE:=extension[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),LDD)
+ROMFILETYPE:=device[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),PDD)
+ROMFILETYPE:=device[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),VAR)
+ROMFILETYPE:=variant[MAGIC]
+ABIDIR:=KMAIN
+endif
+ifeq ($(call uppercase,$(TARGETTYPE)),KDLL)
+ABIDIR:=KMAIN
+endif
+
+ifneq ($(CALLDLLENTRYPOINTS),)
+ROMFILETYPE:=dll
+endif
+ifeq ($(ROMFILETYPE),primary)
+ABIDIR:=KMAIN
+endif
+
+endef
+
+
--- a/sbsv2/raptor/lib/flm/stack.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/stack.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,76 +1,76 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# # Implements a stack mechanism for FLMS
-# # Author: Timothy Murphy
-# # CHANGE THIS FILE AT YOUR PERIL! :-)
-# # It is very sensitive to spaces on the end of variables.
-# # It took a lot of trouble to get this exactly right so 
-# # be careful about changing it.
-# # A "call stack" is necessary for variables which are used
-# # in an append-manner by glue makefiles.  This behavior
-# # is only needed where and FLM call has the form:
-# # 	OUTPUTPATH:=$(OUTPUTPATH)/subdir
-# #	include $(FLMHOME)/exefile.flm
-# # This is because the outputpath setting must be undone
-# # before the next call to an FLM that uses OUTPUTPATH (otherwise it keeps growing)
-# # USAGE:
-# # $(call vsave,VARIABLE1 VARIABLE2)
-# # $(call vrestore)
-#
-
-ifeq ($(VARIABLE_STACK_NAME),)
-VARIABLE_STACK_NAME:=STACK
-endif
-# $(1) should list the variables 
-
-# vadd must be exactly of the form of 3 lines, the middle one containing "$(1)"
-# Otherwise the extra return will be treated like a character rather than as whitespace
-
-define LINEFEED
-
-
-endef
-
-define vadd
-$(1):=$(2)
-
-endef
-
-#
-# Create a kind of stack "frame"
-# The parameters are names of variables whose values are to be stored in the frame
-# so that these values may be restored later.
-#
-# use thus:
-# $(call vsave,OUTPUTPATH SOURCEPATH CDEFS)
-#
-define vsave
-$(eval 
-VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME).F
-$$(VARIABLE_STACK_NAME):=$$(foreach VAR,$(1),$$(call vadd,$$(VAR),$$($$(VAR)))))
-endef
-
-#
-# Pop the top stack frame.
-#
-# use thus:
-# $(call vrestore)
-#
-define vrestore
-$(eval $($(VARIABLE_STACK_NAME))
-VARIABLE_STACK_NAME:=$(patsubst %.F,%,$(VARIABLE_STACK_NAME))
-)
-endef
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# # Implements a stack mechanism for FLMS
+# # Author: Timothy Murphy
+# # CHANGE THIS FILE AT YOUR PERIL! :-)
+# # It is very sensitive to spaces on the end of variables.
+# # It took a lot of trouble to get this exactly right so 
+# # be careful about changing it.
+# # A "call stack" is necessary for variables which are used
+# # in an append-manner by glue makefiles.  This behavior
+# # is only needed where and FLM call has the form:
+# # 	OUTPUTPATH:=$(OUTPUTPATH)/subdir
+# #	include $(FLMHOME)/exefile.flm
+# # This is because the outputpath setting must be undone
+# # before the next call to an FLM that uses OUTPUTPATH (otherwise it keeps growing)
+# # USAGE:
+# # $(call vsave,VARIABLE1 VARIABLE2)
+# # $(call vrestore)
+#
+
+ifeq ($(VARIABLE_STACK_NAME),)
+VARIABLE_STACK_NAME:=STACK
+endif
+# $(1) should list the variables 
+
+# vadd must be exactly of the form of 3 lines, the middle one containing "$(1)"
+# Otherwise the extra return will be treated like a character rather than as whitespace
+
+define LINEFEED
+
+
+endef
+
+define vadd
+$(1):=$(2)
+
+endef
+
+#
+# Create a kind of stack "frame"
+# The parameters are names of variables whose values are to be stored in the frame
+# so that these values may be restored later.
+#
+# use thus:
+# $(call vsave,OUTPUTPATH SOURCEPATH CDEFS)
+#
+define vsave
+$(eval 
+VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME).F
+$$(VARIABLE_STACK_NAME):=$$(foreach VAR,$(1),$$(call vadd,$$(VAR),$$($$(VAR)))))
+endef
+
+#
+# Pop the top stack frame.
+#
+# use thus:
+# $(call vrestore)
+#
+define vrestore
+$(eval $($(VARIABLE_STACK_NAME))
+VARIABLE_STACK_NAME:=$(patsubst %.F,%,$(VARIABLE_STACK_NAME))
+)
+endef
+
--- a/sbsv2/raptor/lib/flm/standard.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/standard.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,260 +1,260 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<interface name="Symbian.mmp" extends="base.flm" abstract="true">
-		<param name='AAPCS_OPTION'/>
-		<param name='ALWAYS_BUILD_AS_ARM' default=''/>
-		<param name='SET_ARMINC' default=''/>
-		<param name='ARMLIBS' default=''/>
-		<param name='ARMFPU' default='softvfp'/>
-		<param name='POSTLINKFPU' default='softvfp'/>
-		<param name='ARMRT' default=''/>
-		<param name='TESTPATH' default=''/>
-		<param name='CAPABILITY'/>
-		<param name='CPPONLYOPTION' default='-E'/>
-		<param name='LIBRARY'/>
-		<param name='LIBRARY_DEBUG'/>
-		<param name='LINKAS' default=''/>
-		<param name='STATICLIBRARY' default=''/>
-		<param name='NOEXPORTLIBRARY' default=''/>
-		<param name='EXPORTLIBRARY' default=''/>
-		<param name='EXPORTUNFROZEN' default=''/>
-		<param name='FEEDBACK_OPTION' default='--feedback=' />
-		<param name='FIRSTLIB' default=''/>
-		<param name='LINKEROPTION_ARMCC' default=''/>
-		<param name='LISTING_OPTION' default='-S'/>
-		<param name='MMPDEFS' default=''/>
-		<param name='NOCOMPRESSTARGET' default=''/>
-		<param name='POSTLINKER_SUPPORTS_WDP' default=''/>
-		<param name='PAGED' default=''/>
-		<param name='PAGEDCODE_OPTION' default='default'/>
-		<param name='PAGEDDATA_OPTION' default='default'/>
-		<param name='PRODUCT_INCLUDE'/>
-		<param name='REQUESTEDTARGETEXT' default=''/>
-		<param name='GENERATELINKERFEEDBACK' default=''/>
-		<param name='LINKERFEEDBACK_STAGE2' default='' />
-		<param name='MULTIFILE_ENABLED' default=''/>
-		<param name='SYSTEMINCLUDE'/>
-		<param name='SECUREID' default=''/>
-		<param name='SOURCE' default=''/>
-		<param name='TARGET'/>
-		<param name='TARGET_lower'/>
-		<param name='LTCG' default=''/>
-		<param name='LTCG_OPTION' default='--ltcg'/>
-		<param name='TARGETTYPE'/>
-		<!-- UID2 and 3 must be empty by default or def file name generation is affected -->
-		<param name='UID2' default=''/>
-		<param name='UID3' default=''/>
-		<param name='VENDORID' default=''/>
-		<param name='USERINCLUDE'/>
-		<param name='OPTION_ARMCC' default=''/>
-		<param name='OPTION_REPLACE_ARMCC' default=''/>
-		<param name='DEBUGLIBRARY' default=''/>
-		<param name='DEFFILE'/>
-		<param name='DEBUGGABLE' default=''/>
-		<param name='DEFFILEKEYWORD' default=''/>
-		<param name='EPOCHEAPSIZEMIN' default=''/>
-		<param name='EPOCHEAPSIZEMAX' default=''/>
-		<param name='EPOCPROCESSPRIORITY' default=''/>
-		<param name='EPOCSTACKSIZE' default=''/>
-		<param name='EPOCFIXEDPROCESS' default=''/>
-		<param name='EPOCALLOWDLLDATA' default=''/>
-		<param name='PLATMACROS.WINDOWS' default=''/>
-		<param name='PLATMACROS.LINUX' default=''/>
-		<param name='MAKEDEFFILE' default='1'/>
-		<param name='STDCPP' default=''/>
-		<param name='NOSTDCPP' default=''/>
-		<param name='NEWLIB' default=''/>
-		<param name='SMPSAFE' default=''/>
-		<param name='STDCPP_INCLUDE' default=''/>
-		<param name='ROMTARGET' default=''/>
-		<param name='RAMTARGET' default=''/>
-		<param name='CC.OPT.SOFTVFP_MAYBE_VFPV2' default=''/>
-		<param name='CC.VAL.SOFTVFP_MAYBE_VFPV2' default=''/>
-		<param name='CODE_SEGMENT_START' default=''/>
-		<param name='TOOLCHAIN' default=''/>
-		<param name='TOOLCHAINVERSION' default=''/>
-	</interface>
-	<interface name="Symbian.e32abiv2" extends="Symbian.mmp" flm="e32abiv2.flm">
-		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
-		<param name='HAS_DEDICATED_OP_NEWDEL_LIB' default='1'/>
-		<param name='DEFAULT_STDCPP_NEWLIB'/>
-		<param name='DEFAULT_SYMBIAN_NEWLIB'/>
-		<param name='CHECKLIB'/>
-		<param name='ASM'/>
-		<param name='ASM_OUTPUT_OPTION'/>
-		<param name='ARM_INSTRUCTION_SET'/>
-		<param name='THUMB_INSTRUCTION_SET'/>
-		<param name='CC'/>
-		<param name='CC_ERRORS_CONTROL_OPTION'/>
-		<param name='CC_WARNINGS_CONTROL_OPTION'/>
-		<param name='CDEFS'/>
-		<param name='CIADEFS'/>
-		<param name='CFLAGS'/>
-		<param name='COMMANDFILE_OPTION'/>
-		<param name='COMPILE_ONLY_OPTION'/>
-		<param name='COMPILER_CIA_FLAGS'/>
-		<param name='COMPILER_FPU_FLAGS'/>
-		<param name='COMPILER_INTERWORK_DEFINES'/>
-		<param name='COMPILER_SYSTEM_INCLUDE_OPTION'/>
-		<param name='COMPILER_THUMB_DEFINES'/>
-		<param name='C_LANG_OPTION'/>		
-		<param name='CPP_LANG_OPTION'/>
-		<param name='CPPFILT'/>
-		<param name='CREATEVMAP'/>
-		<param name='CREATEVMAPCPP'/>
-		<param name='DEBUG_FORMAT'/>
-		<param name='DEBUG_INFO'/>
-		<param name='DEPEND_OPTION'/>
-		<param name='DEPEND_SKIP' default=''/>
-		<param name='ELF2E32'/>
-		<param name='EFREEZE'/>
-		<param name='EFREEZE_REMOVE_OPTION' default=''/>
-		<param name='ENUM_OPTION'/>
-		<param name='EXCEPTIONS'/>
-		<param name='NO_EXCEPTIONS'/>
-		<param name='EXPORT_VTBL_OPTION'/>
-		<param name='FEATURELISTFILES' default=''/>
-		<param name='FEATUREVARIANT' default=''/>
-		<param name='FEATUREVARIANTNAME' default=''/>
-		<param name='FPMODE_OPTION'/>
-		<param name='FROMELF'/>
-		<param name='FULLVARIANTPATH'/>
-		<param name='GENERATE_ABIV1_IMPLIBS' default=''/>		
-		<param name='RVCT3_1' default=''/>
-		<param name='LD'/>
-		<param name='LD_ERRORS_CONTROL_OPTION'/>
-		<param name='LD_WARNINGS_CONTROL_OPTION'/>
-		<param name='LIBPATH'/>
-		<param name='LICENSERETRY_OPTION' default=''/>
-		<param name='LINKER_ADD_STATIC_RUNTIME'/>
-		<param name='LINKER_DEBUG_OPTION'/>
-		<param name='LINKER_DEFAULT_LIBS'/>
-		<param name='LINKER_DEFAULT_LIB_PATHS'/>
-		<param name='LINKER_ENTRY_OPTION'/>
-		<param name='LINKER_GROUP_START_OPTION'/>
-		<param name='LINKER_GROUP_END_OPTION'/>
-		<param name='LINKER_MISC_FLAGS'/>		
-		<param name='LINKER_NODEBUG_OPTION'/>
-		<param name='LINKER_SYMBOLS_FILE_OPTION'/>
-		<param name='LINKER_SYMBOLS_OPTION'/>
-		<param name='NEED_ENTRYPOINT_LIBRARY'/>
-		<param name='OUTPUT_OPTION' default='-o'/>
-		<param name='OUTPUTPATH'/>
-		<param name='OWN_LIBRARY_OPTION'/>
-		<param name='PERL'/>
-		<param name='PERTURBSTARTTIME'/>
-		<param name='PERTURBMSECS' default='500'/>
-		<param name='PREPDEF'/>
-		<param name='PREINCLUDE'/>
-		<param name='PREINCLUDE_OPTION'/>
-		<param name='PREPROCESSOR_OPTION'/>
-		<param name='RANSLEEP'/>
-		<param name='RELEASEPATH'/>
-		<param name='RESOLVED_DEFFILE'/>
-		<param name='RUNTIME_LIBS_LIST'/>
-		<param name='RUNTIME_LIBS_PATH'/>
-		<param name='RUNTIME_SYMBOL_VISIBILITY_OPTION'/>
-		<param name='NO_UNALIGNED_ACCESS' default=''/>
-		<param name='RVCTBIN'/>
-		<param name='RVCTINC'/>
-		<param name='RVCTLIB'/>
-		<param name='RW_BASE_OPTION'/>
-		<param name='SBSV1MAKE'/>
-		<param name='NMAKE'/>
-		<param name='NMAKEFLAGS'/>
-		<param name='SHARED_OBJECT_OPTION'/>
-		<param name='SO_NAME_OPTION'/>
-		<param name='SPLIT_OPTION'/>
-		<param name='KERNEL_STATIC_RUNTIME_LIB'/>
-		<param name='USER_STATIC_RUNTIME_LIB'/>
-		<param name='STATIC_LIBS_LIST'/>
-		<param name='STATIC_LIBS_PATH'/>
-		<param name='STATIC_LIBRARY_DIR'/>
-		<param name='STATIC_RUNTIME_DIR'/>
-		<param name='SYMBIAN_CCFLAGS'/>
-		<param name='SYMBIAN_LD_MESSAGE_OPTION'/>
-		<param name='SYMBIAN_LINK_FLAGS'/>
-		<param name='SYMVER_OPTION'/>
-		<param name='TARGET_ARCH_OPTION'/>
-		<param name='LINKER_ARCH_OPTION'/>
-		<param name='TESTCODE' default=''/>
-		<param name='TEST_OPTION' default=''/>
-		<param name='TRANSFORM_CIA'/>
-		<param name='USE_TRACE_COMPILER' default=''/>
-		<param name='TRANASM'/>
-		<param name='INSTRUCTION_SET'/>
-		<param name='MODULE'/>
-		<param name='USER_LIBS_PATH_OPTION'/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='VARIANTTYPE'/>
-		<param name='VERSION' default='10.0'/>
-		<param name='VERSIONHEX' default='000a0000'/>
-		<param name='VFE_OPTION'/>
-		<param name='EXPLICITVERSION' default=''/>
-	</interface>
-	<interface name="Symbian.exe" extends="Symbian.e32abiv2" flm="e32abiv2exe.flm">
-		<param name='TARGETTYPE' default="exe"/>
-		<param name='UID1' default="1000007a"/>
-	</interface>
-	<interface name="Symbian.stdexe" extends="Symbian.e32abiv2" flm="e32abiv2stdexe.flm">
-		<param name='TARGETTYPE' default="stdexe"/>
-		<param name='UID1' default="1000007a"/>
-		<param name='UID2' default="20004c45"/>
-		<param name='WCHARENTRYPOINT' default=""/>
-	</interface>
-	<interface name="Symbian.dll" extends="Symbian.e32abiv2" flm="e32abiv2dll.flm">
-		<param name='TARGETTYPE' default="dll"/>
-		<param name='UID1' default="10000079"/>
-	</interface>
-	<interface name="Symbian.stddll" extends="Symbian.e32abiv2" flm="e32abiv2stddll.flm">
-		<param name='TARGETTYPE' default="stddll"/>
-		<param name='UID1' default="10000079"/>
-		<param name='UID2' default="20004c45"/>
-	</interface>
-	<interface name="Symbian.lib" extends="Symbian.e32abiv2" flm="e32abiv2lib.flm">
-		<param name='AR'/>
-		<param name='ARCHIVER_CREATE_OPTION'/>
-		<param name='TARGETTYPE' default="lib"/>
-	</interface>
-	<interface name="Symbian.stdlib" extends="Symbian.lib" flm="e32abiv2stdlib.flm">
-		<param name='TARGETTYPE' default="stdlib"/>
-	</interface>
-	<interface name="Symbian.extension" extends="base.extension" flm="template_ext.flm">
-		<param name='RVCTBIN'/>
-		<param name='RVCTLIB'/>
-		<param name='RVCTINC'/>
-	</interface>
-	<interface name="Symbian.ani" extends="Symbian.dll" flm="e32abiv2ani.flm">
-	</interface>
-	<interface name="Symbian.plugin" extends="Symbian.dll" flm="e32abiv2plugin.flm">
-	</interface>
-	<interface name="Symbian.textnotifier2" extends="Symbian.dll" flm="e32abiv2textnotifier2.flm">
-	</interface>
-	<interface name="Symbian.implib" extends="Symbian.dll" flm="e32abiv2implib.flm">
-	</interface>
-	<interface name="Symbian.var" extends="Symbian.dll" flm="e32abiv2var.flm">
-	</interface>
-	<interface name="Symbian.var2" extends="Symbian.dll" flm="e32abiv2var2.flm">
-	</interface>
-	<interface name="Symbian.exexp" extends="Symbian.exe" flm="e32abiv2exexp.flm">
-	</interface>
-	<interface name="Symbian.kexe" extends="Symbian.exe" flm="e32abiv2kexe.flm">
-	</interface>
-	<interface name="Symbian.kdll" extends="Symbian.dll" flm="e32abiv2kdll.flm">
-	</interface>
-	<interface name="Symbian.kext" extends="Symbian.dll" flm="e32abiv2kext.flm">
-	</interface>
-	<interface name="Symbian.klib" extends="Symbian.lib" flm="e32abiv2klib.flm">
-	</interface>
-	<interface name="Symbian.ldd" extends="Symbian.dll" flm="e32abiv2ldd.flm">
-	</interface>
-	<interface name="Symbian.pdd" extends="Symbian.dll" flm="e32abiv2pdd.flm">
-	</interface>
-	<interface name="Symbian.pdl" extends="Symbian.dll" flm="e32abiv2pdl.flm">
-	</interface>
-	<interface name="Symbian.fsy" extends="Symbian.dll" flm="e32abiv2fsy.flm">
-	</interface>
-	<interface name="Symbian.none" extends="Symbian.mmp" flm="none.flm">
-	</interface>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<interface name="Symbian.mmp" extends="base.flm" abstract="true">
+		<param name='AAPCS_OPTION'/>
+		<param name='ALWAYS_BUILD_AS_ARM' default=''/>
+		<param name='SET_ARMINC' default=''/>
+		<param name='ARMLIBS' default=''/>
+		<param name='ARMFPU' default='softvfp'/>
+		<param name='POSTLINKFPU' default='softvfp'/>
+		<param name='ARMRT' default=''/>
+		<param name='TESTPATH' default=''/>
+		<param name='CAPABILITY'/>
+		<param name='CPPONLYOPTION' default='-E'/>
+		<param name='LIBRARY'/>
+		<param name='LIBRARY_DEBUG'/>
+		<param name='LINKAS' default=''/>
+		<param name='STATICLIBRARY' default=''/>
+		<param name='NOEXPORTLIBRARY' default=''/>
+		<param name='EXPORTLIBRARY' default=''/>
+		<param name='EXPORTUNFROZEN' default=''/>
+		<param name='FEEDBACK_OPTION' default='--feedback=' />
+		<param name='FIRSTLIB' default=''/>
+		<param name='LINKEROPTION_ARMCC' default=''/>
+		<param name='LISTING_OPTION' default='-S'/>
+		<param name='MMPDEFS' default=''/>
+		<param name='NOCOMPRESSTARGET' default=''/>
+		<param name='POSTLINKER_SUPPORTS_WDP' default=''/>
+		<param name='PAGED' default=''/>
+		<param name='PAGEDCODE_OPTION' default='default'/>
+		<param name='PAGEDDATA_OPTION' default='default'/>
+		<param name='PRODUCT_INCLUDE'/>
+		<param name='REQUESTEDTARGETEXT' default=''/>
+		<param name='GENERATELINKERFEEDBACK' default=''/>
+		<param name='LINKERFEEDBACK_STAGE2' default='' />
+		<param name='MULTIFILE_ENABLED' default=''/>
+		<param name='SYSTEMINCLUDE'/>
+		<param name='SECUREID' default=''/>
+		<param name='SOURCE' default=''/>
+		<param name='TARGET'/>
+		<param name='TARGET_lower'/>
+		<param name='LTCG' default=''/>
+		<param name='LTCG_OPTION' default='--ltcg'/>
+		<param name='TARGETTYPE'/>
+		<!-- UID2 and 3 must be empty by default or def file name generation is affected -->
+		<param name='UID2' default=''/>
+		<param name='UID3' default=''/>
+		<param name='VENDORID' default=''/>
+		<param name='USERINCLUDE'/>
+		<param name='OPTION_ARMCC' default=''/>
+		<param name='OPTION_REPLACE_ARMCC' default=''/>
+		<param name='DEBUGLIBRARY' default=''/>
+		<param name='DEFFILE'/>
+		<param name='DEBUGGABLE' default=''/>
+		<param name='DEFFILEKEYWORD' default=''/>
+		<param name='EPOCHEAPSIZEMIN' default=''/>
+		<param name='EPOCHEAPSIZEMAX' default=''/>
+		<param name='EPOCPROCESSPRIORITY' default=''/>
+		<param name='EPOCSTACKSIZE' default=''/>
+		<param name='EPOCFIXEDPROCESS' default=''/>
+		<param name='EPOCALLOWDLLDATA' default=''/>
+		<param name='PLATMACROS.WINDOWS' default=''/>
+		<param name='PLATMACROS.LINUX' default=''/>
+		<param name='STDCPP' default=''/>
+		<param name='NOSTDCPP' default=''/>
+		<param name='NEWLIB' default=''/>
+		<param name='SMPSAFE' default=''/>
+		<param name='STDCPP_INCLUDE' default=''/>
+		<param name='ROMTARGET' default=''/>
+		<param name='RAMTARGET' default=''/>
+		<param name='CC.OPT.SOFTVFP_MAYBE_VFPV2' default=''/>
+		<param name='CC.VAL.SOFTVFP_MAYBE_VFPV2' default=''/>
+		<param name='CODE_SEGMENT_START' default=''/>
+		<param name='TOOLCHAIN' default=''/>
+		<param name='TOOLCHAINVERSION' default=''/>
+	</interface>
+	<interface name="Symbian.e32abiv2" extends="Symbian.mmp" flm="e32abiv2.flm">
+		<param name='SUPPORTS_STDCPP_NEWLIB' default='1'/>
+		<param name='HAS_DEDICATED_OP_NEWDEL_LIB' default='1'/>
+		<param name='DEFAULT_STDCPP_NEWLIB'/>
+		<param name='DEFAULT_SYMBIAN_NEWLIB'/>
+		<param name='CHECKLIB'/>
+		<param name='ASM'/>
+		<param name='ASM_OUTPUT_OPTION'/>
+		<param name='ARM_INSTRUCTION_SET'/>
+		<param name='THUMB_INSTRUCTION_SET'/>
+		<param name='CC'/>
+		<param name='CC_ERRORS_CONTROL_OPTION'/>
+		<param name='CC_WARNINGS_CONTROL_OPTION'/>
+		<param name='CDEFS'/>
+		<param name='CIADEFS'/>
+		<param name='CFLAGS'/>
+		<param name='COMMANDFILE_OPTION'/>
+		<param name='COMPILE_ONLY_OPTION'/>
+		<param name='COMPILER_CIA_FLAGS'/>
+		<param name='COMPILER_FPU_FLAGS'/>
+		<param name='COMPILER_INTERWORK_DEFINES'/>
+		<param name='COMPILER_SYSTEM_INCLUDE_OPTION'/>
+		<param name='COMPILER_THUMB_DEFINES'/>
+		<param name='C_LANG_OPTION'/>		
+		<param name='CPP_LANG_OPTION'/>
+		<param name='CPPFILT'/>
+		<param name='CREATEVMAP'/>
+		<param name='CREATEVMAPCPP'/>
+		<param name='DEBUG_FORMAT'/>
+		<param name='DEBUG_INFO'/>
+		<param name='DEPEND_OPTION'/>
+		<param name='DEPEND_SKIP' default=''/>
+		<param name='ELF2E32'/>
+		<param name='EFREEZE'/>
+		<param name='EFREEZE_REMOVE_OPTION' default=''/>
+		<param name='ENUM_OPTION'/>
+		<param name='EXCEPTIONS'/>
+		<param name='NO_EXCEPTIONS'/>
+		<param name='EXPORT_VTBL_OPTION'/>
+		<param name='FEATURELISTFILES' default=''/>
+		<param name='FEATUREVARIANT' default=''/>
+		<param name='FEATUREVARIANTNAME' default=''/>
+		<param name='FPMODE_OPTION'/>
+		<param name='FROMELF'/>
+		<param name='FULLVARIANTPATH'/>
+		<param name='GENERATE_ABIV1_IMPLIBS' default=''/>		
+		<param name='RVCT3_1' default=''/>
+		<param name='LD'/>
+		<param name='LD_ERRORS_CONTROL_OPTION'/>
+		<param name='LD_WARNINGS_CONTROL_OPTION'/>
+		<param name='LD_WARNINGS_SUPPRESSION_ARMLIBS' default='' />
+		<param name='LIBPATH'/>
+		<param name='LICENSERETRY_OPTION' default=''/>
+		<param name='LINKER_ADD_STATIC_RUNTIME'/>
+		<param name='LINKER_DEBUG_OPTION'/>
+		<param name='LINKER_DEFAULT_LIBS'/>
+		<param name='LINKER_DEFAULT_LIB_PATHS'/>
+		<param name='LINKER_ENTRY_OPTION'/>
+		<param name='LINKER_GROUP_START_OPTION'/>
+		<param name='LINKER_GROUP_END_OPTION'/>
+		<param name='LINKER_MISC_FLAGS'/>		
+		<param name='LINKER_NODEBUG_OPTION'/>
+		<param name='LINKER_SYMBOLS_FILE_OPTION'/>
+		<param name='LINKER_SYMBOLS_OPTION'/>
+		<param name='NEED_ENTRYPOINT_LIBRARY'/>
+		<param name='OUTPUT_OPTION' default='-o'/>
+		<param name='OUTPUTPATH'/>
+		<param name='OWN_LIBRARY_OPTION'/>
+		<param name='PERL'/>
+		<param name='PERTURBSTARTTIME'/>
+		<param name='PERTURBMSECS' default='500'/>
+		<param name='PREPDEF'/>
+		<param name='PREINCLUDE'/>
+		<param name='PREINCLUDE_OPTION'/>
+		<param name='PREPROCESSOR_OPTION'/>
+		<param name='RANSLEEP'/>
+		<param name='RELEASEPATH'/>
+		<param name='RESOLVED_DEFFILE'/>
+		<param name='RUNTIME_LIBS_LIST'/>
+		<param name='RUNTIME_LIBS_PATH'/>
+		<param name='RUNTIME_SYMBOL_VISIBILITY_OPTION'/>
+		<param name='NO_UNALIGNED_ACCESS' default=''/>
+		<param name='RVCTBIN'/>
+		<param name='RVCTINC'/>
+		<param name='RVCTLIB'/>
+		<param name='RW_BASE_OPTION'/>
+		<param name='SBSV1MAKE'/>
+		<param name='NMAKE'/>
+		<param name='NMAKEFLAGS'/>
+		<param name='SHARED_OBJECT_OPTION'/>
+		<param name='SO_NAME_OPTION'/>
+		<param name='SPLIT_OPTION'/>
+		<param name='KERNEL_STATIC_RUNTIME_LIB'/>
+		<param name='USER_STATIC_RUNTIME_LIB'/>
+		<param name='STATIC_LIBS_LIST'/>
+		<param name='STATIC_LIBS_PATH'/>
+		<param name='STATIC_LIBRARY_DIR'/>
+		<param name='STATIC_RUNTIME_DIR'/>
+		<param name='SYMBIAN_CCFLAGS'/>
+		<param name='SYMBIAN_LD_MESSAGE_OPTION'/>
+		<param name='SYMBIAN_LINK_FLAGS'/>
+		<param name='SYMVER_OPTION'/>
+		<param name='TARGET_ARCH_OPTION'/>
+		<param name='LINKER_ARCH_OPTION'/>
+		<param name='TESTCODE' default=''/>
+		<param name='TEST_OPTION' default=''/>
+		<param name='TRANSFORM_CIA'/>
+		<param name='USE_TRACE_COMPILER' default=''/>
+		<param name='TRANASM'/>
+		<param name='INSTRUCTION_SET'/>
+		<param name='MODULE'/>
+		<param name='USER_LIBS_PATH_OPTION'/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='VARIANTTYPE'/>
+		<param name='VERSION' default='10.0'/>
+		<param name='VERSIONHEX' default='000a0000'/>
+		<param name='VFE_OPTION'/>
+		<param name='EXPLICITVERSION' default=''/>
+	</interface>
+	<interface name="Symbian.exe" extends="Symbian.e32abiv2" flm="e32abiv2exe.flm">
+		<param name='TARGETTYPE' default="exe"/>
+		<param name='UID1' default="1000007a"/>
+	</interface>
+	<interface name="Symbian.stdexe" extends="Symbian.e32abiv2" flm="e32abiv2stdexe.flm">
+		<param name='TARGETTYPE' default="stdexe"/>
+		<param name='UID1' default="1000007a"/>
+		<param name='UID2' default="20004c45"/>
+		<param name='WCHARENTRYPOINT' default=""/>
+	</interface>
+	<interface name="Symbian.dll" extends="Symbian.e32abiv2" flm="e32abiv2dll.flm">
+		<param name='TARGETTYPE' default="dll"/>
+		<param name='UID1' default="10000079"/>
+	</interface>
+	<interface name="Symbian.stddll" extends="Symbian.e32abiv2" flm="e32abiv2stddll.flm">
+		<param name='TARGETTYPE' default="stddll"/>
+		<param name='UID1' default="10000079"/>
+		<param name='UID2' default="20004c45"/>
+	</interface>
+	<interface name="Symbian.lib" extends="Symbian.e32abiv2" flm="e32abiv2lib.flm">
+		<param name='AR'/>
+		<param name='ARCHIVER_CREATE_OPTION'/>
+		<param name='TARGETTYPE' default="lib"/>
+	</interface>
+	<interface name="Symbian.stdlib" extends="Symbian.lib" flm="e32abiv2stdlib.flm">
+		<param name='TARGETTYPE' default="stdlib"/>
+	</interface>
+	<interface name="Symbian.extension" extends="base.extension" flm="template_ext.flm">
+		<param name='RVCTBIN'/>
+		<param name='RVCTLIB'/>
+		<param name='RVCTINC'/>
+	</interface>
+	<interface name="Symbian.ani" extends="Symbian.dll" flm="e32abiv2ani.flm">
+	</interface>
+	<interface name="Symbian.plugin" extends="Symbian.dll" flm="e32abiv2plugin.flm">
+	</interface>
+	<interface name="Symbian.textnotifier2" extends="Symbian.dll" flm="e32abiv2textnotifier2.flm">
+	</interface>
+	<interface name="Symbian.implib" extends="Symbian.dll" flm="e32abiv2implib.flm">
+	</interface>
+	<interface name="Symbian.var" extends="Symbian.dll" flm="e32abiv2var.flm">
+	</interface>
+	<interface name="Symbian.var2" extends="Symbian.dll" flm="e32abiv2var2.flm">
+	</interface>
+	<interface name="Symbian.exexp" extends="Symbian.exe" flm="e32abiv2exexp.flm">
+	</interface>
+	<interface name="Symbian.kexe" extends="Symbian.exe" flm="e32abiv2kexe.flm">
+	</interface>
+	<interface name="Symbian.kdll" extends="Symbian.dll" flm="e32abiv2kdll.flm">
+	</interface>
+	<interface name="Symbian.kext" extends="Symbian.dll" flm="e32abiv2kext.flm">
+	</interface>
+	<interface name="Symbian.klib" extends="Symbian.lib" flm="e32abiv2klib.flm">
+	</interface>
+	<interface name="Symbian.ldd" extends="Symbian.dll" flm="e32abiv2ldd.flm">
+	</interface>
+	<interface name="Symbian.pdd" extends="Symbian.dll" flm="e32abiv2pdd.flm">
+	</interface>
+	<interface name="Symbian.pdl" extends="Symbian.dll" flm="e32abiv2pdl.flm">
+	</interface>
+	<interface name="Symbian.fsy" extends="Symbian.dll" flm="e32abiv2fsy.flm">
+	</interface>
+	<interface name="Symbian.none" extends="Symbian.mmp" flm="none.flm">
+	</interface>
+</build>
--- a/sbsv2/raptor/lib/flm/stringtable.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/stringtable.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,106 +1,106 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Header file exporting Function Like Makefile (FLM)
-# The file destinations  relative to EPOCROOT
-# 
-#
-
-## Parameters that are expected:
-# SOURCE
-# HEADERONLY
-# OUTPUTPATH
-# EPOCROOT
-# EXPORTPATH
-
-## GLOBAL TARGETS ###############################################
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(RELEASEABLES)
-
-
-# StringTable FLM
-
-
-EXPORT::
-
-
-CLEANTARGETS:=
-CLEANEXPORTS:=
-RELEASEEXPORTS:=
-CREATABLEPATHS:=$(OUTPUTPATH) $(EXPORTPATH)
-
-# Work out the names of the various output files before
-# trying to use them in rules and dependencies. Cuts repetition
-# and avoids mistakes.
-EXPORTEDSTRINGTABLEHEADER:=$(EXPORTPATH)/$(TARGET).h
-STRINGTABLECPP:=$(OUTPUTPATH)/$(TARGET).cpp
-STRINGTABLEHEADER:=$(OUTPUTPATH)/$(TARGET).h
-STRINGTABLEPHONYTARGET:=$(OUTPUTPATH)_$(TARGET)
-TEMPSOURCE:=$(OUTPUTPATH)/$(TARGET).st
-
-# Macro to generate string table targets and rules
-# Always return true if the make engine doesn't support 
-# the .IGNORE:: target.
-define exportstringtableheader
-
-EXPORT:: $(EXPORTEDSTRINGTABLEHEADER)
-
-$(EXPORTEDSTRINGTABLEHEADER): $(STRINGTABLEHEADER) 
-	$(call startrule,exportstringtableheader,FORCESUCCESS) \
-	$(GNUCP) '$(STRINGTABLEHEADER)' '$$@'  \
-	$(call endrule,exportstringtableheader) 
-
-CLEANEXPORTS:=$(EXPORTEDSTRINGTABLEHEADER)
-RELEASEEXPORTS:=$(EXPORTEDSTRINGTABLEHEADER)
-endef
-
-define genstringtable
-$(STRINGTABLECPP) : $(STRINGTABLEHEADER)
-
-$(STRINGTABLEHEADER): $(SOURCE) 
-	$(call startrule,stringtable,FORCESUCCESS) \
-	$(GNUCP) --no-preserve=mode $(SOURCE) $(TEMPSOURCE)  && $(GNUCHMOD) a+w $(TEMPSOURCE) &&  \
-	$(STRINGTABLE) $(TEMPSOURCE)  \
-	$(call endrule,stringtable)
-
-CLEANTARGETS:=$(STRINGTABLEHEADER) $(STRINGTABLECPP)
-
-endef
-
-
-$(if $(EXPORTPATH),$(eval $(exportstringtableheader)),)
-$(if $(EXPORTPATH),,$(eval EXPORT:: $(STRINGTABLEHEADER)))
-$(eval $(genstringtable))
-
-
-## Clean up and log releasables (using eval to avoid target specific variables)
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
-$(eval $(call GenerateStandardCleanTarget,$(CLEANEXPORTS),,CLEANEXPORT))
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-$(eval $(call whatmacro,$(RELEASEEXPORTS),WHATSTRINGTABLE))
-
-########################
-# SBSv1 example:
-########################
-# GENERATED_FILES= \
-#         $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp \
-#         $(EPOCROOT)epoc32\include\WspParamConstants.h
-# 
-# $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp : ..\strings\WspParamConstants.st
-#         perl -S ecopyfile.pl ..\strings\WspParamConstants.st $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.st
-#         perl $(EPOCROOT)epoc32\tools\stringtable.pl $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.st
-# 
-# $(EPOCROOT)epoc32\include\WspParamConstants.h : $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp
-#         perl -S ecopyfile.pl $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.h $(EPOCROOT)epoc32\include\WspParamConstants.h
-# 
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Header file exporting Function Like Makefile (FLM)
+# The file destinations  relative to EPOCROOT
+# 
+#
+
+## Parameters that are expected:
+# SOURCE
+# HEADERONLY
+# OUTPUTPATH
+# EPOCROOT
+# EXPORTPATH
+
+## GLOBAL TARGETS ###############################################
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(RELEASEABLES)
+
+
+# StringTable FLM
+
+
+EXPORT::
+
+
+CLEANTARGETS:=
+CLEANEXPORTS:=
+RELEASEEXPORTS:=
+CREATABLEPATHS:=$(OUTPUTPATH) $(EXPORTPATH)
+
+# Work out the names of the various output files before
+# trying to use them in rules and dependencies. Cuts repetition
+# and avoids mistakes.
+EXPORTEDSTRINGTABLEHEADER:=$(EXPORTPATH)/$(TARGET).h
+STRINGTABLECPP:=$(OUTPUTPATH)/$(TARGET).cpp
+STRINGTABLEHEADER:=$(OUTPUTPATH)/$(TARGET).h
+STRINGTABLEPHONYTARGET:=$(OUTPUTPATH)_$(TARGET)
+TEMPSOURCE:=$(OUTPUTPATH)/$(TARGET).st
+
+# Macro to generate string table targets and rules
+# Always return true if the make engine doesn't support 
+# the .IGNORE:: target.
+define exportstringtableheader
+
+EXPORT:: $(EXPORTEDSTRINGTABLEHEADER)
+
+$(EXPORTEDSTRINGTABLEHEADER): $(STRINGTABLEHEADER) 
+	$(call startrule,exportstringtableheader,FORCESUCCESS) \
+	$(GNUCP) '$(STRINGTABLEHEADER)' '$$@'  \
+	$(call endrule,exportstringtableheader) 
+
+CLEANEXPORTS:=$(EXPORTEDSTRINGTABLEHEADER)
+RELEASEEXPORTS:=$(EXPORTEDSTRINGTABLEHEADER)
+endef
+
+define genstringtable
+$(STRINGTABLECPP) : $(STRINGTABLEHEADER)
+
+$(STRINGTABLEHEADER): $(SOURCE) 
+	$(call startrule,stringtable,FORCESUCCESS) \
+	$(GNUCP) --no-preserve=mode $(SOURCE) $(TEMPSOURCE)  && $(GNUCHMOD) a+w $(TEMPSOURCE) &&  \
+	$(STRINGTABLE) $(TEMPSOURCE)  \
+	$(call endrule,stringtable)
+
+CLEANTARGETS:=$(STRINGTABLEHEADER) $(STRINGTABLECPP)
+
+endef
+
+
+$(if $(EXPORTPATH),$(eval $(exportstringtableheader)),)
+$(if $(EXPORTPATH),,$(eval EXPORT:: $(STRINGTABLEHEADER)))
+$(eval $(genstringtable))
+
+
+## Clean up and log releasables (using eval to avoid target specific variables)
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+$(eval $(call GenerateStandardCleanTarget,$(CLEANEXPORTS),,CLEANEXPORT))
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+$(eval $(call whatmacro,$(RELEASEEXPORTS),WHATSTRINGTABLE))
+
+########################
+# SBSv1 example:
+########################
+# GENERATED_FILES= \
+#         $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp \
+#         $(EPOCROOT)epoc32\include\WspParamConstants.h
+# 
+# $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp : ..\strings\WspParamConstants.st
+#         perl -S ecopyfile.pl ..\strings\WspParamConstants.st $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.st
+#         perl $(EPOCROOT)epoc32\tools\stringtable.pl $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.st
+# 
+# $(EPOCROOT)epoc32\include\WspParamConstants.h : $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.cpp
+#         perl -S ecopyfile.pl $(EPOCROOT)epoc32\build\generated\http\WspParamConstants.h $(EPOCROOT)epoc32\include\WspParamConstants.h
+# 
--- a/sbsv2/raptor/lib/flm/taggedrules.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/taggedrules.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,138 +1,138 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Tools for use in FLMs - enabling the output from
-# rules to be logged with start and end tags.
-# This is a place where one might to permit various information to
-# be logged, such as timestamps and host names or process ids
-#
-
-ifndef _TAGGEDRULES_FLM_
-_TAGGEDRULES_FLM_:=1
-
-# only run recipes once by default
-RECIPETRIES?=1
-
-ifeq ($(USE_TALON),)
-
-##
-##  Example usage:
-##
-#   define func
-#	auto_ok:
-#		$(call startrule,auto) \
-#		true && \
-#		true && \
-#		true    \
-#		$(call endrule,auto)
-#	
-#	auto_fail:
-#		$(call startrule,auto) \
-#		find /usr >/dev/null 2>&1 && \
-#		false && \
-#		true    \
-#		$(call endrule,auto)
-#   endef
-#   $(eval $(func))
-
-# $(1) is the name of the FLM function
-# $(2) indicates whether the failure of this rule should be ignored (but still logged)
-#      FORCESUCCESS indicates "on"
-define startrule
-  @set -o pipefail; RV=0; ATTEMPT=1; \
-  { while (( $$$$ATTEMPT <= $(RECIPETRIES) )); do \
-    echo -e "<recipe name='$(1)' \
-    target='$$@' host='$$$$HOSTNAME' \
-    layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' \
-    bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' \
-    config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' \
-    phase='$(MAKEFILE_GROUP)' \
-    source='$(3)'>\n<![CDATA["; \
-    FLM_RECIPE_FLAGS='$(2)'; \
-    export TIMEFORMAT="]]><time start='$$$$($(DATE) +%s.%N)' elapsed='%6R' />"; \
-    { time { set -x;
-endef
-
-define endrule
-    ; }  } 2>&1  ; RV=$$$$?; set +x; \
-    if (( $$$$RV==0  )); then \
-       echo "<status exit='ok' attempt='$$$$ATTEMPT' />";  \
-       echo "</recipe>"; \
-       break; \
-    else  \
-       if (( $$$$ATTEMPT < $(RECIPETRIES) )); then \
-         echo "<status exit='retry' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
-         sleep 1; \
-       else \
-         if [ ! "$$$${FLM_RECIPE_FLAGS//FORCESUCCESS/}" == "$$$${FLM_RECIPE_FLAGS}" ]; then \
-             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' forcesuccess='FORCESUCCESS' />"; \
-             RV=0; \
-         else \
-             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
-         fi; \
-       fi; \
-    fi; \
-    echo "</recipe>"; \
-    (( ATTEMPT=$$$$ATTEMPT + 1 )); \
-  done ; exit $$$${RV}; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
-endef
-
-
-define startrawoutput
-  @ set -o pipefail; { 
-endef
-
-define endrawoutput
-  ; exit 0; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
-endef
-
-
-else
-TALON_RECIPEATTRIBUTES:=\
- name='$$RECIPE'\
- target='$$TARGET'\
- host='$$HOSTNAME'\
- layer='$$COMPONENT_LAYER'\
- component='$$COMPONENT_NAME'\
- bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
- config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
- phase='$$MAKEFILE_GROUP' source='$$SOURCE'
-
-export TALON_RECIPEATTRIBUTES
-export TALON_RETRIES
-export TALON_DESCRAMBLE
-
-define startrule
-	@|RECIPE=$1;TARGET=$$@;COMPONENT_LAYER=$(COMPONENT_LAYER);COMPONENT_NAME=$(COMPONENT_NAME);COMPONENT_META=$(COMPONENT_META);PROJECT_META=$(PROJECT_META);SBS_CONFIGURATION=$(SBS_CONFIGURATION);PLATFORM=$(PLATFORM);MAKEFILE_GROUP=$(MAKEFILE_GROUP);SOURCE=$3;TALON_FLAGS=$2;|
-endef
-
-define endrule
-endef
-
-
-define startrawoutput
-	@|TALON_FLAGS=forcesuccess rawoutput;|
-endef
-
-define endrawoutput
-endef
-
-
-
-endif
-
-
-
-
-endif
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Tools for use in FLMs - enabling the output from
+# rules to be logged with start and end tags.
+# This is a place where one might to permit various information to
+# be logged, such as timestamps and host names or process ids
+#
+
+ifndef _TAGGEDRULES_FLM_
+_TAGGEDRULES_FLM_:=1
+
+# only run recipes once by default
+RECIPETRIES?=1
+
+ifeq ($(USE_TALON),)
+
+##
+##  Example usage:
+##
+#   define func
+#	auto_ok:
+#		$(call startrule,auto) \
+#		true && \
+#		true && \
+#		true    \
+#		$(call endrule,auto)
+#	
+#	auto_fail:
+#		$(call startrule,auto) \
+#		find /usr >/dev/null 2>&1 && \
+#		false && \
+#		true    \
+#		$(call endrule,auto)
+#   endef
+#   $(eval $(func))
+
+# $(1) is the name of the FLM function
+# $(2) indicates whether the failure of this rule should be ignored (but still logged)
+#      FORCESUCCESS indicates "on"
+define startrule
+  @set -o pipefail; RV=0; ATTEMPT=1; \
+  { while (( $$$$ATTEMPT <= $(RECIPETRIES) )); do \
+    echo -e "<recipe name='$(1)' \
+    target='$$@' host='$$$$HOSTNAME' \
+    layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' \
+    bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' \
+    config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' \
+    phase='$(MAKEFILE_GROUP)' \
+    source='$(3)'>\n<![CDATA["; \
+    FLM_RECIPE_FLAGS='$(2)'; \
+    export TIMEFORMAT="]]><time start='$$$$($(DATE) +%s.%N)' elapsed='%6R' />"; \
+    { time { set -x;
+endef
+
+define endrule
+    ; }  } 2>&1  ; RV=$$$$?; set +x; \
+    if (( $$$$RV==0  )); then \
+       echo "<status exit='ok' attempt='$$$$ATTEMPT' />";  \
+       echo "</recipe>"; \
+       break; \
+    else  \
+       if (( $$$$ATTEMPT < $(RECIPETRIES) )); then \
+         echo "<status exit='retry' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         sleep 1; \
+       else \
+         if [ ! "$$$${FLM_RECIPE_FLAGS//FORCESUCCESS/}" == "$$$${FLM_RECIPE_FLAGS}" ]; then \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' forcesuccess='FORCESUCCESS' />"; \
+             RV=0; \
+         else \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         fi; \
+       fi; \
+    fi; \
+    echo "</recipe>"; \
+    (( ATTEMPT=$$$$ATTEMPT + 1 )); \
+  done ; exit $$$${RV}; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
+endef
+
+
+define startrawoutput
+  @ set -o pipefail; { 
+endef
+
+define endrawoutput
+  ; exit 0; } $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$) 
+endef
+
+
+else
+TALON_RECIPEATTRIBUTES:=\
+ name='$$RECIPE'\
+ target='$$TARGET'\
+ host='$$HOSTNAME'\
+ layer='$$COMPONENT_LAYER'\
+ component='$$COMPONENT_NAME'\
+ bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
+ config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
+ phase='$$MAKEFILE_GROUP' source='$$SOURCE'
+
+export TALON_RECIPEATTRIBUTES
+export TALON_RETRIES
+export TALON_DESCRAMBLE
+
+define startrule
+	@|RECIPE=$1;TARGET=$$@;COMPONENT_LAYER=$(COMPONENT_LAYER);COMPONENT_NAME=$(COMPONENT_NAME);COMPONENT_META=$(COMPONENT_META);PROJECT_META=$(PROJECT_META);SBS_CONFIGURATION=$(SBS_CONFIGURATION);PLATFORM=$(PLATFORM);MAKEFILE_GROUP=$(MAKEFILE_GROUP);SOURCE=$3;TALON_FLAGS=$2;|
+endef
+
+define endrule
+endef
+
+
+define startrawoutput
+	@|TALON_FLAGS=forcesuccess rawoutput;|
+endef
+
+define endrawoutput
+endef
+
+
+
+endif
+
+
+
+
+endif
--- a/sbsv2/raptor/lib/flm/template_ext.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/template_ext.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,230 +1,230 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Template Extension Makefile  (TEM) FLM
-# Knows how to run TEMs
-# 
-#
-
-################################# FLM Parameter description ##
-# Parameters:
-#   TEMPLATE_EXTENSION_MAKEFILE
-#   PRODUCT_INCLUDE
-#   EPOCROOT:=
-#   PLATFORM:=$(VARIANTPLATFORM)
-# The current configuration either UREL or UDEB:
-#   CFG:=$(VARIANTTYPE)
-# Relative path to EPOCROOT. (to where?):
-#   TO_ROOT:=
-# The path to the top-level bld.inf.
-# Note: if a bld.inf file #includes another bld.inf, this variable will
-# always contain the directory of that top-level file. If you require
-# the directory of the bld.inf which actually references the makefile,
-# use $(EXTENSION_ROOT) instead.
-#   TO_BLDINF:=
-# The project's working build directory under \epoc32\build\..
-#   EPOCBLD:=
-# The path to the directory containing the bld.inf in which the extension makefile was called:
-#   EXTENSION_ROOT:=
-# The path of the host-platform specific (i.e. the shell) makefile containing the above definitions:
-#   HOST_SHELL:=
-# The current platform in lower case to be used as part of path
-# names.
-#   PLATFORM_PATH:=
-# The current configuration in lower case to be used as part of
-# path names.
-#   CFG_PATH:=
-# A list of options passed from a bld.inf to this
-# Template Extension Makefile
-#  O._MEMBERS:=
-# Options should have the name specifed in the bld.inf 
-# but with a prefix of "O." e.g. O.PATH or O.FILENAME
-# (in which case O._MEMBERS:=PATH FILENAME)
-
-# create the working directory for the TEM
-$(shell $(GNUMKDIR) -p $(EPOCBLD))
-
-################################ Standard Variables ##
-# We may set the following 
-# for the sake of template
-# extension makefiles which
-# need to know them:
-
-## Path element separator.
-/:=/
-## PATH environment variable separator.
-;:=:
-
-####
-# Various file and directory manipulation tools.
-# We are using the standard GNU coretools.
-# On Windows these are supplied by CYGWIN
-RMDIR:=$(GNURMDIR)
-RM:=$(GNURM)
-ERASE:=$(GNURM)
-MKDIR:=$(GNUMKDIR)
-CP:=$(GNUCP)
-ARMV7BUILD:=
-
-######################## Target Specific Parameters ##
-# We need to declare the parameters for the TEM 
-# to be target specific to the unique targets
-# that we have created.
-
-UNIQ:=$(TEMPLATE_EXTENSION_MAKEFILE)$(PLATFORM)$(TO_ROOT)$(TO_BLDINF)$(EPOCBLD)$(EXTENSION_ROOT)$(TEMCOUNT)
-UNIQ:=$(word 1,$(shell echo $(UNIQ) | $(GNUMD5SUM)))
-
-# Work out the other FINAL target if we're building both udeb and urel
-ifneq ($($(UNIQ)),)
-
-ifeq ($(CFG),urel)
-OTHER_CFG:=udeb
-endif
-ifeq ($(CFG),udeb)
-OTHER_CFG:=urel
-endif
-ifeq ($(CFG),rel)
-OTHER_CFG:=deb
-endif
-ifeq ($(CFG),deb)
-OTHER_CFG:=rel
-endif
-
-OTHER_MAKMAKE:=$(UNIQ)_$(OTHER_CFG)_MAKMAKE
-OTHER_BLD:=$(UNIQ)_$(OTHER_CFG)_BLD
-OTHER_FREEZE:=$(UNIQ)_$(OTHER_CFG)_FREEZE
-OTHER_LIB:=$(UNIQ)_$(OTHER_CFG)_LIB
-OTHER_CLEANLIB:=$(UNIQ)_$(OTHER_CFG)_CLEANLIB
-OTHER_RESOURCE:=$(UNIQ)_$(OTHER_CFG)_RESOURCE
-OTHER_CLEAN:=$(UNIQ)_$(OTHER_CFG)_CLEAN
-OTHER_FINAL:=$(UNIQ)_$(OTHER_CFG)_FINAL
-endif # ifneq ($($(UNIQ)),)
-
-# Set $($(UNIQ)) so it can be detected if we're run again
-$(UNIQ):=1
-
-tem_$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(PLATFORM)_$(CFG):=$(tem_$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(PLATFORM)_$(CFG)) $(UNIQ)_$(CFG)
-
-TEPARAMETERS:= \
-	EPOCROOT PLATFORM CFG TO_ROOT TO_BLDINF \
-	EPOCBLD EXTENSION_ROOT HOST_SHELL       \
-	RMDIR RM ERASE MKDIR CP                 \
-	PLATFORM_PATH CFG_PATH                  \
-	TEMPLATE_EXTENSION_MAKEFILE             \
-	TARGET SOURCE DEPENDENCIES TOOL PRODUCT_INCLUDE \
-	RVCTBIN RVCTINC RVCTLIB
-
-
-# The standard Template Extension Makefile Targets
-# These will be implemented in terms of double colon
-# rules - such that make FREEZE will cause all FREEZE 
-# targets to be evaluated.
-# For each call of this FLM we also need
-# to create unique versions of each of these targets
-# so that there is something to attach
-# the current FLM parameters to using target-specific 
-# variable declarations.
-
-TETARGETS:= \
-	MAKMAKE     \
-	BLD         \
-	FREEZE      \
-	LIB         \
-	CLEANLIB    \
-	RESOURCE    \
-	CLEAN       \
-	RELEASABLES \
-	FINAL
-
-# If we split the makefiles then only use a subset of
-# the targets for each group makefile.
-#
-ifeq ($(MAKEFILE_GROUP),BITMAP)
-TETARGETS:=MAKMAKE
-endif
-#
-ifeq ($(MAKEFILE_GROUP),RESOURCE)
-TETARGETS:=RESOURCE
-endif
-#
-ifeq ($(MAKEFILE_GROUP),ALL)
-TETARGETS:=BLD FREEZE LIB CLEANLIB CLEAN RELEASABLES FINAL
-endif
-
-# Hook into global targets
-#
-MAKMAKE_HOOK:=BITMAP
-BLD_HOOK:=TARGET
-FREEZE_HOOK:=FREEZE
-LIB_HOOK:=LIBRARY
-CLEAN_HOOK:=CLEAN
-CLEANLIB_HOOK:=CLEAN
-RESOURCE_HOOK:=RESOURCE
-FINAL_HOOK:=FINAL
-RELEASABLES_HOOK:=RELEASABLES
-
-# make sure TEMS happen at the right stages
-# OTHER_$(STAGE) only set if running udeb+urel
-MAKMAKE_DEPS:=EXPORT $(OTHER_MAKMAKE)
-RESOURCE_DEPS:=BITMAP $(OTHER_RESOURCE)
-LIB_DEPS:=RESOURCE $(OTHER_LIB)
-BLD_DEPS:=LIBRARY $(OTHER_BLD)
-FINAL_DEPS:=TARGET $(OTHER_FINAL)
-FREEZE_DEPS:=$(OTHER_FREEZE)
-CLEANLIB_DEPS:=$(OTHER_CLEANLIB)
-CLEAN_DEPS:=$(OTHER_CLEAN)
-
-export /
-export ;
-export SHELL
-
-#################################### Global Targets ##
-## All the global targets for the TEM
-# TEMs are called as sub-makes.
-
-define getMember
-$(subst $$,$$$$,$(O.$(1)))
-endef
-
-define callTEM
-.PHONY:: $(UNIQ)_$(CFG)_$(1) 
-$($(1)_HOOK):: $(UNIQ)_$(CFG)_$(1)
-
-$(EPOCROOT)/epoc32/build/TEM_$(1):: $(UNIQ)_$(CFG)_$(1)
-
-$(UNIQ)_$(CFG)_$(1) : $($(1)_DEPS)
-	$(call startrule,tem,FORCESUCCESS,$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(1)) \
-	$(foreach V,$(TEPARAMETERS),$(V)='$($(V))') TEMTARGET='$(1)' $(foreach V,$(O._MEMBERS),$(V)='$(call getMember,$(V))')  $(TEMMAKE) -C $(EPOCBLD) -f $(TEMPLATE_EXTENSION_MAKEFILE) $(if $(SAVESPACE),$(subst BLD,SAVESPACE,$(1)),$(1)) \
-	$(call endrule,tem)
-ifneq ($(call isoneof,$(1),RELEASABLES FINAL),)
-	$(call startrawoutput) \
-	echo "$(call whatLogOpen)" ; \
-	$(foreach V,$(TEPARAMETERS),$(V)='$($(V))') TEMTARGET='$(1)' \
-	$(foreach V,$(O._MEMBERS),$(V)='$(call getMember,$(V))')  \
-	$(TEMMAKE) -s --no-print-directory -C $(EPOCBLD) -f $(TEMPLATE_EXTENSION_MAKEFILE) RELEASABLES | \
-	(read -r LINE; while [ $$$$? -eq 0 ]; do \
-	if [[ ! $$$$LINE =~ "Nothing to be done for"  ]] ; then echo "$(call whatLogItem,TEM,$$$$LINE)"; fi; \
-	read -r LINE; done; ); \
-	echo "$(call whatLogClose)" \
-	$(call endrawoutput) 
-
-WHATTEM:: $(UNIQ)_$(CFG)_RELEASABLES
-
-endif
-
-
-tem_debug::
-	@echo "TEM_DEBUG: O._MEMBERS=$(O._MEMBERS)"
-endef
-
-$(foreach TETRG,$(TETARGETS),$(eval $(call callTEM,$(TETRG))))
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Template Extension Makefile  (TEM) FLM
+# Knows how to run TEMs
+# 
+#
+
+################################# FLM Parameter description ##
+# Parameters:
+#   TEMPLATE_EXTENSION_MAKEFILE
+#   PRODUCT_INCLUDE
+#   EPOCROOT:=
+#   PLATFORM:=$(VARIANTPLATFORM)
+# The current configuration either UREL or UDEB:
+#   CFG:=$(VARIANTTYPE)
+# Relative path to EPOCROOT. (to where?):
+#   TO_ROOT:=
+# The path to the top-level bld.inf.
+# Note: if a bld.inf file #includes another bld.inf, this variable will
+# always contain the directory of that top-level file. If you require
+# the directory of the bld.inf which actually references the makefile,
+# use $(EXTENSION_ROOT) instead.
+#   TO_BLDINF:=
+# The project's working build directory under \epoc32\build\..
+#   EPOCBLD:=
+# The path to the directory containing the bld.inf in which the extension makefile was called:
+#   EXTENSION_ROOT:=
+# The path of the host-platform specific (i.e. the shell) makefile containing the above definitions:
+#   HOST_SHELL:=
+# The current platform in lower case to be used as part of path
+# names.
+#   PLATFORM_PATH:=
+# The current configuration in lower case to be used as part of
+# path names.
+#   CFG_PATH:=
+# A list of options passed from a bld.inf to this
+# Template Extension Makefile
+#  O._MEMBERS:=
+# Options should have the name specifed in the bld.inf 
+# but with a prefix of "O." e.g. O.PATH or O.FILENAME
+# (in which case O._MEMBERS:=PATH FILENAME)
+
+# create the working directory for the TEM
+$(shell $(GNUMKDIR) -p $(EPOCBLD))
+
+################################ Standard Variables ##
+# We may set the following 
+# for the sake of template
+# extension makefiles which
+# need to know them:
+
+## Path element separator.
+/:=/
+## PATH environment variable separator.
+;:=:
+
+####
+# Various file and directory manipulation tools.
+# We are using the standard GNU coretools.
+# On Windows these are supplied by CYGWIN
+RMDIR:=$(GNURMDIR)
+RM:=$(GNURM)
+ERASE:=$(GNURM)
+MKDIR:=$(GNUMKDIR)
+CP:=$(GNUCP)
+ARMV7BUILD:=
+
+######################## Target Specific Parameters ##
+# We need to declare the parameters for the TEM 
+# to be target specific to the unique targets
+# that we have created.
+
+UNIQ:=$(TEMPLATE_EXTENSION_MAKEFILE)$(PLATFORM)$(TO_ROOT)$(TO_BLDINF)$(EPOCBLD)$(EXTENSION_ROOT)$(TEMCOUNT)
+UNIQ:=$(word 1,$(shell echo $(UNIQ) | $(GNUMD5SUM)))
+
+# Work out the other FINAL target if we're building both udeb and urel
+ifneq ($($(UNIQ)),)
+
+ifeq ($(CFG),urel)
+OTHER_CFG:=udeb
+endif
+ifeq ($(CFG),udeb)
+OTHER_CFG:=urel
+endif
+ifeq ($(CFG),rel)
+OTHER_CFG:=deb
+endif
+ifeq ($(CFG),deb)
+OTHER_CFG:=rel
+endif
+
+OTHER_MAKMAKE:=$(UNIQ)_$(OTHER_CFG)_MAKMAKE
+OTHER_BLD:=$(UNIQ)_$(OTHER_CFG)_BLD
+OTHER_FREEZE:=$(UNIQ)_$(OTHER_CFG)_FREEZE
+OTHER_LIB:=$(UNIQ)_$(OTHER_CFG)_LIB
+OTHER_CLEANLIB:=$(UNIQ)_$(OTHER_CFG)_CLEANLIB
+OTHER_RESOURCE:=$(UNIQ)_$(OTHER_CFG)_RESOURCE
+OTHER_CLEAN:=$(UNIQ)_$(OTHER_CFG)_CLEAN
+OTHER_FINAL:=$(UNIQ)_$(OTHER_CFG)_FINAL
+endif # ifneq ($($(UNIQ)),)
+
+# Set $($(UNIQ)) so it can be detected if we're run again
+$(UNIQ):=1
+
+tem_$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(PLATFORM)_$(CFG):=$(tem_$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(PLATFORM)_$(CFG)) $(UNIQ)_$(CFG)
+
+TEPARAMETERS:= \
+	EPOCROOT PLATFORM CFG TO_ROOT TO_BLDINF \
+	EPOCBLD EXTENSION_ROOT HOST_SHELL       \
+	RMDIR RM ERASE MKDIR CP                 \
+	PLATFORM_PATH CFG_PATH                  \
+	TEMPLATE_EXTENSION_MAKEFILE             \
+	TARGET SOURCE DEPENDENCIES TOOL PRODUCT_INCLUDE \
+	RVCTBIN RVCTINC RVCTLIB
+
+
+# The standard Template Extension Makefile Targets
+# These will be implemented in terms of double colon
+# rules - such that make FREEZE will cause all FREEZE 
+# targets to be evaluated.
+# For each call of this FLM we also need
+# to create unique versions of each of these targets
+# so that there is something to attach
+# the current FLM parameters to using target-specific 
+# variable declarations.
+
+TETARGETS:= \
+	MAKMAKE     \
+	BLD         \
+	FREEZE      \
+	LIB         \
+	CLEANLIB    \
+	RESOURCE    \
+	CLEAN       \
+	RELEASABLES \
+	FINAL
+
+# If we split the makefiles then only use a subset of
+# the targets for each group makefile.
+#
+ifeq ($(MAKEFILE_GROUP),BITMAP)
+TETARGETS:=MAKMAKE
+endif
+#
+ifeq ($(MAKEFILE_GROUP),RESOURCE)
+TETARGETS:=RESOURCE
+endif
+#
+ifeq ($(MAKEFILE_GROUP),ALL)
+TETARGETS:=BLD FREEZE LIB CLEANLIB CLEAN RELEASABLES FINAL
+endif
+
+# Hook into global targets
+#
+MAKMAKE_HOOK:=BITMAP
+BLD_HOOK:=TARGET
+FREEZE_HOOK:=FREEZE
+LIB_HOOK:=LIBRARY
+CLEAN_HOOK:=CLEAN
+CLEANLIB_HOOK:=CLEAN
+RESOURCE_HOOK:=RESOURCE
+FINAL_HOOK:=FINAL
+RELEASABLES_HOOK:=RELEASABLES
+
+# make sure TEMS happen at the right stages
+# OTHER_$(STAGE) only set if running udeb+urel
+MAKMAKE_DEPS:=EXPORT $(OTHER_MAKMAKE)
+RESOURCE_DEPS:=BITMAP $(OTHER_RESOURCE)
+LIB_DEPS:=RESOURCE $(OTHER_LIB)
+BLD_DEPS:=LIBRARY $(OTHER_BLD)
+FINAL_DEPS:=TARGET $(OTHER_FINAL)
+FREEZE_DEPS:=$(OTHER_FREEZE)
+CLEANLIB_DEPS:=$(OTHER_CLEANLIB)
+CLEAN_DEPS:=$(OTHER_CLEAN)
+
+export /
+export ;
+export SHELL
+
+#################################### Global Targets ##
+## All the global targets for the TEM
+# TEMs are called as sub-makes.
+
+define getMember
+$(subst $$,$$$$,$(O.$(1)))
+endef
+
+define callTEM
+.PHONY:: $(UNIQ)_$(CFG)_$(1) 
+$($(1)_HOOK):: $(UNIQ)_$(CFG)_$(1)
+
+$(EPOCROOT)/epoc32/build/TEM_$(1):: $(UNIQ)_$(CFG)_$(1)
+
+$(UNIQ)_$(CFG)_$(1) : $($(1)_DEPS)
+	$(call startrule,tem,FORCESUCCESS,$(notdir $(TEMPLATE_EXTENSION_MAKEFILE))_$(1)) \
+	$(foreach V,$(TEPARAMETERS),$(V)='$($(V))') TEMTARGET='$(1)' $(foreach V,$(O._MEMBERS),$(V)='$(call getMember,$(V))')  $(TEMMAKE) -C $(EPOCBLD) -f $(TEMPLATE_EXTENSION_MAKEFILE) $(if $(SAVESPACE),$(subst BLD,SAVESPACE,$(1)),$(1)) \
+	$(call endrule,tem)
+ifneq ($(call isoneof,$(1),RELEASABLES FINAL),)
+	$(call startrawoutput) \
+	echo "$(call whatLogOpen)" ; \
+	$(foreach V,$(TEPARAMETERS),$(V)='$($(V))') TEMTARGET='$(1)' \
+	$(foreach V,$(O._MEMBERS),$(V)='$(call getMember,$(V))')  \
+	$(TEMMAKE) -s --no-print-directory -C $(EPOCBLD) -f $(TEMPLATE_EXTENSION_MAKEFILE) RELEASABLES | \
+	(read -r LINE; while [ $$$$? -eq 0 ]; do \
+	if [[ ! $$$$LINE =~ "Nothing to be done for"  ]] ; then echo "$(call whatLogItem,TEM,$$$$LINE)"; fi; \
+	read -r LINE; done; ); \
+	echo "$(call whatLogClose)" \
+	$(call endrawoutput) 
+
+WHATTEM:: $(UNIQ)_$(CFG)_RELEASABLES
+
+endif
+
+
+tem_debug::
+	@echo "TEM_DEBUG: O._MEMBERS=$(O._MEMBERS)"
+endef
+
+$(foreach TETRG,$(TETARGETS),$(eval $(call callTEM,$(TETRG))))
--- a/sbsv2/raptor/lib/flm/test/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,66 +1,66 @@
-##
-# Create and check test environment.
-# build all tests.
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-# Parameters which may be overridden by the environment:
-RAPTOR_HOME?=/localhome/tmurphy/pf/EPOC/development/tools/personal/tmurphy/tools/raptor
-# Need elf2e32 etc.
-RAPTOOLS?=/localhome/tmurphy/raptools/linux86
-EPOCROOT?=/tmp/tim-epocroot
-# End of Environment-overridable parameters.
-
-#Where are flms located?
-FLMHOME:=$(RAPTOR_HOME)/lib/flm
-FLMTESTHOME:=$(FLMHOME)/test
-SOURCEPATH:=$(FLMHOME)/test
-
-
-.PHONY:: all
-
-#### Call all the test makefiles ##############
-ALLTARGET:=all
-
-OUTPUTPATH=$(EPOCROOT)/epoc32/build
-RELEASEPATH:=$(EPOCROOT)/epoc32/release
-FULLVARIANTPATH:=ARMV5/UREL
-
-include $(FLMHOME)/test/exebasictests.mk
-
-include $(FLMHOME)/test/ciatests.mk
-
-include $(FLMHOME)/test/exeperftests.mk
-
-include $(FLMHOME)/test/dllbasictests.mk
-
-###############################################
-
-#EPOCROOT:=
-SYSTEMSOURCEPATH:=/c/p4_Perforce011666_LON-TIMOTHYM01/EPOC/development/tools/personal/tmurphy/EPOC/master
-OSNAME:=cedar
-#include $(FLMHOME)/system.flm
-
-flmcheck:: flmtoolscheck
-	@ERRCOUNT=0; for i in $(FLMHOME)/*.flm; do \
-		$(FLMHOME)/tools/flmcheck.py  $$i; ERRCOUNT=$$[ $$ERRCOUNT + $$?];  done;  \
-		echo "flmcheck issued warnings for $$ERRCOUNT  FLMS.";
-		@true # For the time being this is not a sufficient condition to stop the tests
-
-# Run through the flmtools tests to make sure thye work
-flmtoolscheck::
-	make -f ../flmtools.mk STANDALONE_TEST:=1 FLMHOME:=$(FLMHOME) test
-
-envcheck::
-	@echo "<envcheck>"
-	@echo -n "<elf2e32>"; ELF2E32=`which elf2e32`; if [ "$$ELF2E32" == "" ]; then echo -n "elf2e32 not available in the path."; else echo -n "$$ELF2E32"; fi; echo "<elf2e32>"
-	@echo -n "<make>"; make -v | egrep '^.*GNU Make 3.81.*$$' ; if [ $$? -ne 0 ]; then echo -n "Version of make in the path appears not to be 3.81."; fi; echo "<make>"
-	@echo -n "<tranasm>"; $$TRANASM | egrep 'tranasm' ; if [ $$? -ne 0 ]; then echo -n "tranasm not found"; fi; echo "<tranasm>"
-	@echo -n "<epocroot>"; if [ ! -d "$$EPOCROOT" ]; then echo -n "EPOCROOT='$$EPOCROOT' directory not found."; else echo -n "$$EPOCROOT"; fi; echo "</epocroot>"
-	@echo -n "<raptorhome>"; if [ ! -d "$$RAPTOR_HOME" ]; then echo -n "RAPTOR_HOME='$$RAPTOR_HOME' directory not found."; else echo -n "$$RAPTOR_HOME"; fi; echo "</raptorhome>"
-	@echo "</envcheck>"
-
-	
-	
-# END TEST - Check FLMS
+##
+# Create and check test environment.
+# build all tests.
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+# Parameters which may be overridden by the environment:
+RAPTOR_HOME?=/localhome/tmurphy/pf/EPOC/development/tools/personal/tmurphy/tools/raptor
+# Need elf2e32 etc.
+RAPTOOLS?=/localhome/tmurphy/raptools/linux86
+EPOCROOT?=/tmp/tim-epocroot
+# End of Environment-overridable parameters.
+
+#Where are flms located?
+FLMHOME:=$(RAPTOR_HOME)/lib/flm
+FLMTESTHOME:=$(FLMHOME)/test
+SOURCEPATH:=$(FLMHOME)/test
+
+
+.PHONY:: all
+
+#### Call all the test makefiles ##############
+ALLTARGET:=all
+
+OUTPUTPATH=$(EPOCROOT)/epoc32/build
+RELEASEPATH:=$(EPOCROOT)/epoc32/release
+FULLVARIANTPATH:=ARMV5/UREL
+
+include $(FLMHOME)/test/exebasictests.mk
+
+include $(FLMHOME)/test/ciatests.mk
+
+include $(FLMHOME)/test/exeperftests.mk
+
+include $(FLMHOME)/test/dllbasictests.mk
+
+###############################################
+
+#EPOCROOT:=
+SYSTEMSOURCEPATH:=/c/p4_Perforce011666_LON-TIMOTHYM01/EPOC/development/tools/personal/tmurphy/EPOC/master
+OSNAME:=cedar
+#include $(FLMHOME)/system.flm
+
+flmcheck:: flmtoolscheck
+	@ERRCOUNT=0; for i in $(FLMHOME)/*.flm; do \
+		$(FLMHOME)/tools/flmcheck.py  $$i; ERRCOUNT=$$[ $$ERRCOUNT + $$?];  done;  \
+		echo "flmcheck issued warnings for $$ERRCOUNT  FLMS.";
+		@true # For the time being this is not a sufficient condition to stop the tests
+
+# Run through the flmtools tests to make sure thye work
+flmtoolscheck::
+	make -f ../flmtools.mk STANDALONE_TEST:=1 FLMHOME:=$(FLMHOME) test
+
+envcheck::
+	@echo "<envcheck>"
+	@echo -n "<elf2e32>"; ELF2E32=`which elf2e32`; if [ "$$ELF2E32" == "" ]; then echo -n "elf2e32 not available in the path."; else echo -n "$$ELF2E32"; fi; echo "<elf2e32>"
+	@echo -n "<make>"; make -v | egrep '^.*GNU Make 3.81.*$$' ; if [ $$? -ne 0 ]; then echo -n "Version of make in the path appears not to be 3.81."; fi; echo "<make>"
+	@echo -n "<tranasm>"; $$TRANASM | egrep 'tranasm' ; if [ $$? -ne 0 ]; then echo -n "tranasm not found"; fi; echo "<tranasm>"
+	@echo -n "<epocroot>"; if [ ! -d "$$EPOCROOT" ]; then echo -n "EPOCROOT='$$EPOCROOT' directory not found."; else echo -n "$$EPOCROOT"; fi; echo "</epocroot>"
+	@echo -n "<raptorhome>"; if [ ! -d "$$RAPTOR_HOME" ]; then echo -n "RAPTOR_HOME='$$RAPTOR_HOME' directory not found."; else echo -n "$$RAPTOR_HOME"; fi; echo "</raptorhome>"
+	@echo "</envcheck>"
+
+	
+	
+# END TEST - Check FLMS
--- a/sbsv2/raptor/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/ciaabiv2_1/ciaabiv2_1.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 EXE on Linux
-## parameters relevant to the test.
-
-## Purpose: To demonstrate use of 1 call to a basic flm with one input file
-## Postconditions: test1.cia is written to the output directory $OUTPUTPATH/test1/test1.cia:
-
-# Pull tools
-include $(FLMHOME)/flmtools.mk
-
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-# Pull in defaults for building test ciacutables
-include $(FLMTESTHOME)/dllabiv2_defaults.mk
-
-TARGET:=ciaabiv2_1
-CDEFS:=$(CDEFS) __TESTNAME__=\"ciaabiv2_1\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/ciaabiv2_1
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
-SOURCEFILES:=$(SOURCEPATH)/uc_exe.cia  $(SOURCEPATH)/uc_exe.cpp
-UID3:=0x000001
-
-
-include $(FLMHOME)/$(FLM)
-
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 EXE on Linux
+## parameters relevant to the test.
+
+## Purpose: To demonstrate use of 1 call to a basic flm with one input file
+## Postconditions: test1.cia is written to the output directory $OUTPUTPATH/test1/test1.cia:
+
+# Pull tools
+include $(FLMHOME)/flmtools.mk
+
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+# Pull in defaults for building test ciacutables
+include $(FLMTESTHOME)/dllabiv2_defaults.mk
+
+TARGET:=ciaabiv2_1
+CDEFS:=$(CDEFS) __TESTNAME__=\"ciaabiv2_1\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/ciaabiv2_1
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
+SOURCEFILES:=$(SOURCEPATH)/uc_exe.cia  $(SOURCEPATH)/uc_exe.cpp
+UID3:=0x000001
+
+
+include $(FLMHOME)/$(FLM)
+
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cia	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cia	Mon Nov 16 09:46:46 2009 +0000
@@ -1,128 +1,128 @@
-/*
-* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-* e32\euser\epoc\arm\uc_exe.cia
-*
-*/
-
-
-#include <e32cia.h>
-#include <u32std.h>
-// Include this to get imports from User (i.e. User::Invariant and User::HandleException). 
-// This sets VISIBILITY to DEFAULT for BPABI builds.
-#include <e32std.h>
-
-extern "C" {
-
-void _xxxx_call_user_invariant();
-void _xxxx_call_user_handle_exception(void *);
-
-extern void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo);
-
-// NOTE: This MUST be the first function in this module
-__NAKED__ TInt _E32Startup()
-	{
-	// Process entry point
-	// R4 = entry reason
-	// SP points to information block
-	EKA2_ENTRY_POINT_VERSION_IDENTIFIER;	// DUMMY INSTRUCTION TO INDICATE EKA2 ENTRY POINT
-	asm("cmp r4, #%a0" : : "i" ((TInt)KModuleEntryReasonThreadInit) );
-	asm("b 1f ");				// branch over space for unique ID
-
-	asm(".word 0 ");			// loader will replace with code seg unique ID
-								// for RAM-loaded code segment
-								// MUST BE AT OFFSET 12 FROM ENTRY POINT
-
-	asm("1: ");
-	asm("movls r0, r4 ");		// r0 = aNotFirst
-	asm("movls r1, sp ");		// r1 -> parameter block
-	asm("bls RunThread ");		// process or thread init
-	asm("cmp r4, #%a0" : : "i" ((TInt)KModuleEntryReasonException) );
-//  	asm("bne " CSM_ZN4User9InvariantEv );	// invalid entry reason
-  	asm("bne _xxxx_call_user_invariant " );	// invalid entry reason
-
-	// exception entry
-	// NOTE: THUMB only works on ARMv5 and above
-	asm("mov r0, sp ");			// r0->parameter block
-	asm("ldr r4, [sp, #16]");	// r4 = saved CPSR
-	asm("tst r4, #0x20 ");		// test for THUMB
-	asm("ldrne r1, [sp, #80] ");	// r1 = saved return addr
-	asm("orrne r1, r1, #1 ");
-	asm("strne r1, [sp, #80] ");	// if THUMB, set bit 0 of return addr
-
-	asm("mov r11, sp ");		// save stack pointer
-
-	// The frame starts 84 bytes (up) from r11 i.e. CFA is r11 + 84
-	__EH_FRAME_ADDRESS(r11, 84)
-	// we can only restore callee-save values, but that's what we want if we 'leave'
-	// saved link is -8 bytes from CFA (= r11 + 0x24 + 0x20 + 0x8)
-	__EH_FRAME_SAVE1(lr, -8)
-
-	// the other callee saves start at -48 from CFA (= r11 + 0x24)
-#if 0
-	// would like to say this 
-	__EH_FRAME_SAVE1(r4-r11, -48)
-	// but the macro expansion gives rise to odd code so we do what follows
-#endif
-#ifdef __ARMCC__
-	FRAME SAVE {r4-r11}, -48
-#endif
-
-	asm("bic sp, sp, #4 ");		// align stack to 8 byte boundary
-//  	asm("bl " CSM_ZN4User15HandleExceptionEPv );
-  	asm("bl _xxxx_call_user_handle_exception ");
-	asm("add sp, r11, #16 ");	// skip exc type, exc code, FAR, FSR
-	asm("ldr r4, [sp], #4 ");	// r4 = saved CPSR
-	asm("bic r4, r4, #0x20 ");	// clear THUMB bit
-	asm("msr cpsr, r4 ");		// restore flags
-	asm("ldmia sp, {r0-r15} ");	// restore r0-r15
-
-#ifdef __ARMCC__
-#ifdef __SUPPORT_CPP_EXCEPTIONS__
-
-
-  /* It is possible no functions included in the image require
-   * a handler table. Therefore make only a weak reference to
-   * the handler table base symbol, which may be absent.
-   */
-  extern |.ARM.exidx$$Base|;
-  extern |.ARM.exidx$$Limit|;
-  extern |.ARM.extab$$Base| [WEAK];
-  extern |Image$$ER_RO$$Base|;
-  extern |Image$$ER_RO$$Limit|;
-  export |Symbian$$CPP$$Exception$$Descriptor|;
-
-|Symbian$$CPP$$Exception$$Descriptor|
-#ifdef __LEAVE_EQUALS_THROW__
-|Symbian$$eit_base|  		dcd |.ARM.exidx$$Base|;   /* index table base */
-|Symbian$$eit_limit|  		dcd |.ARM.exidx$$Limit| ;  /* index table limit */
-#endif
-#if __ARMCC_VERSION > 220000
-|Symbian$$code_seg_base| 	dcd |Image$$ER_RO$$Base| + 1 ; /* RO segment base + mark as ehabi v2 */
-|Symbian$$code_seg_limit| 	dcd |Image$$ER_RO$$Limit| ;/* RO segment limit */
-|Symbian$$reserved|		dcd 0 ; /* reserved for future use */
-#else
-|Symbian$$code_seg_base| 	dcd |Image$$ER_RO$$Base| ; /* RO segment base */
-|Symbian$$code_seg_limit| 	dcd |Image$$ER_RO$$Limit| ;/* RO segment limit */
-#endif
-
-#endif
-#endif
-
-	}
-void _xxxx_call_user_invariant() { User::Invariant(); }
-void _xxxx_call_user_handle_exception(void * arg) { User::HandleException(arg); }
-
-}
-
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\euser\epoc\arm\uc_exe.cia
+*
+*/
+
+
+#include <e32cia.h>
+#include <u32std.h>
+// Include this to get imports from User (i.e. User::Invariant and User::HandleException). 
+// This sets VISIBILITY to DEFAULT for BPABI builds.
+#include <e32std.h>
+
+extern "C" {
+
+void _xxxx_call_user_invariant();
+void _xxxx_call_user_handle_exception(void *);
+
+extern void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo);
+
+// NOTE: This MUST be the first function in this module
+__NAKED__ TInt _E32Startup()
+	{
+	// Process entry point
+	// R4 = entry reason
+	// SP points to information block
+	EKA2_ENTRY_POINT_VERSION_IDENTIFIER;	// DUMMY INSTRUCTION TO INDICATE EKA2 ENTRY POINT
+	asm("cmp r4, #%a0" : : "i" ((TInt)KModuleEntryReasonThreadInit) );
+	asm("b 1f ");				// branch over space for unique ID
+
+	asm(".word 0 ");			// loader will replace with code seg unique ID
+								// for RAM-loaded code segment
+								// MUST BE AT OFFSET 12 FROM ENTRY POINT
+
+	asm("1: ");
+	asm("movls r0, r4 ");		// r0 = aNotFirst
+	asm("movls r1, sp ");		// r1 -> parameter block
+	asm("bls RunThread ");		// process or thread init
+	asm("cmp r4, #%a0" : : "i" ((TInt)KModuleEntryReasonException) );
+//  	asm("bne " CSM_ZN4User9InvariantEv );	// invalid entry reason
+  	asm("bne _xxxx_call_user_invariant " );	// invalid entry reason
+
+	// exception entry
+	// NOTE: THUMB only works on ARMv5 and above
+	asm("mov r0, sp ");			// r0->parameter block
+	asm("ldr r4, [sp, #16]");	// r4 = saved CPSR
+	asm("tst r4, #0x20 ");		// test for THUMB
+	asm("ldrne r1, [sp, #80] ");	// r1 = saved return addr
+	asm("orrne r1, r1, #1 ");
+	asm("strne r1, [sp, #80] ");	// if THUMB, set bit 0 of return addr
+
+	asm("mov r11, sp ");		// save stack pointer
+
+	// The frame starts 84 bytes (up) from r11 i.e. CFA is r11 + 84
+	__EH_FRAME_ADDRESS(r11, 84)
+	// we can only restore callee-save values, but that's what we want if we 'leave'
+	// saved link is -8 bytes from CFA (= r11 + 0x24 + 0x20 + 0x8)
+	__EH_FRAME_SAVE1(lr, -8)
+
+	// the other callee saves start at -48 from CFA (= r11 + 0x24)
+#if 0
+	// would like to say this 
+	__EH_FRAME_SAVE1(r4-r11, -48)
+	// but the macro expansion gives rise to odd code so we do what follows
+#endif
+#ifdef __ARMCC__
+	FRAME SAVE {r4-r11}, -48
+#endif
+
+	asm("bic sp, sp, #4 ");		// align stack to 8 byte boundary
+//  	asm("bl " CSM_ZN4User15HandleExceptionEPv );
+  	asm("bl _xxxx_call_user_handle_exception ");
+	asm("add sp, r11, #16 ");	// skip exc type, exc code, FAR, FSR
+	asm("ldr r4, [sp], #4 ");	// r4 = saved CPSR
+	asm("bic r4, r4, #0x20 ");	// clear THUMB bit
+	asm("msr cpsr, r4 ");		// restore flags
+	asm("ldmia sp, {r0-r15} ");	// restore r0-r15
+
+#ifdef __ARMCC__
+#ifdef __SUPPORT_CPP_EXCEPTIONS__
+
+
+  /* It is possible no functions included in the image require
+   * a handler table. Therefore make only a weak reference to
+   * the handler table base symbol, which may be absent.
+   */
+  extern |.ARM.exidx$$Base|;
+  extern |.ARM.exidx$$Limit|;
+  extern |.ARM.extab$$Base| [WEAK];
+  extern |Image$$ER_RO$$Base|;
+  extern |Image$$ER_RO$$Limit|;
+  export |Symbian$$CPP$$Exception$$Descriptor|;
+
+|Symbian$$CPP$$Exception$$Descriptor|
+#ifdef __LEAVE_EQUALS_THROW__
+|Symbian$$eit_base|  		dcd |.ARM.exidx$$Base|;   /* index table base */
+|Symbian$$eit_limit|  		dcd |.ARM.exidx$$Limit| ;  /* index table limit */
+#endif
+#if __ARMCC_VERSION > 220000
+|Symbian$$code_seg_base| 	dcd |Image$$ER_RO$$Base| + 1 ; /* RO segment base + mark as ehabi v2 */
+|Symbian$$code_seg_limit| 	dcd |Image$$ER_RO$$Limit| ;/* RO segment limit */
+|Symbian$$reserved|		dcd 0 ; /* reserved for future use */
+#else
+|Symbian$$code_seg_base| 	dcd |Image$$ER_RO$$Base| ; /* RO segment base */
+|Symbian$$code_seg_limit| 	dcd |Image$$ER_RO$$Limit| ;/* RO segment limit */
+#endif
+
+#endif
+#endif
+
+	}
+void _xxxx_call_user_invariant() { User::Invariant(); }
+void _xxxx_call_user_handle_exception(void * arg) { User::HandleException(arg); }
+
+}
+
--- a/sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/ciaabiv2_1/uc_exe.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,73 +1,73 @@
-/*
-* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-* e32\euser\epoc\arm\uc_exe.cpp
-*
-*/
-
-
-#include <u32std.h>
-
-
-GLREF_C TInt E32Main();
-
-extern "C" {
-
-#if defined(__GCC32__)
-typedef void (*PFV)();
-extern PFV __CTOR_LIST__[];
-extern PFV __DTOR_LIST__[];
-
-void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo)
-	{
-	SStdEpocThreadCreateInfo& cinfo = (SStdEpocThreadCreateInfo&)aInfo;
-	TInt r = UserHeap::SetupThreadHeap(aNotFirst, cinfo);
-	if (r==KErrNone)
-		{
-		if (aNotFirst)
-			r = (*cinfo.iFunction)(cinfo.iPtr);
-		else
-			{
-			// Init statics for implicitly linked DLLs
-			User::InitProcess();
-
-			// Init statics for EXE
-			TUint i=1;
-			while (__CTOR_LIST__[i])
-				(*__CTOR_LIST__[i++])();
-
-			r = E32Main();
-			}
-		}
-	User::Exit(r);
-	}
-}
-
-#elif defined(__ARMCC__)
-
-TInt CallThrdProcEntry(TInt (*aFn)(void*), void* aPtr, TInt aNotFirst);
-
-void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo)
-	{
-	SStdEpocThreadCreateInfo& cinfo = (SStdEpocThreadCreateInfo&)aInfo;
-	TInt r = UserHeap::SetupThreadHeap(aNotFirst, cinfo);
-	if (r==KErrNone)
-		r = CallThrdProcEntry(cinfo.iFunction, cinfo.iPtr, aNotFirst);
-	User::Exit(r);
-	}
-}
-
-#else
-#error not supported
-#endif
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\euser\epoc\arm\uc_exe.cpp
+*
+*/
+
+
+#include <u32std.h>
+
+
+GLREF_C TInt E32Main();
+
+extern "C" {
+
+#if defined(__GCC32__)
+typedef void (*PFV)();
+extern PFV __CTOR_LIST__[];
+extern PFV __DTOR_LIST__[];
+
+void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo)
+	{
+	SStdEpocThreadCreateInfo& cinfo = (SStdEpocThreadCreateInfo&)aInfo;
+	TInt r = UserHeap::SetupThreadHeap(aNotFirst, cinfo);
+	if (r==KErrNone)
+		{
+		if (aNotFirst)
+			r = (*cinfo.iFunction)(cinfo.iPtr);
+		else
+			{
+			// Init statics for implicitly linked DLLs
+			User::InitProcess();
+
+			// Init statics for EXE
+			TUint i=1;
+			while (__CTOR_LIST__[i])
+				(*__CTOR_LIST__[i++])();
+
+			r = E32Main();
+			}
+		}
+	User::Exit(r);
+	}
+}
+
+#elif defined(__ARMCC__)
+
+TInt CallThrdProcEntry(TInt (*aFn)(void*), void* aPtr, TInt aNotFirst);
+
+void RunThread(TBool aNotFirst, SThreadCreateInfo& aInfo)
+	{
+	SStdEpocThreadCreateInfo& cinfo = (SStdEpocThreadCreateInfo&)aInfo;
+	TInt r = UserHeap::SetupThreadHeap(aNotFirst, cinfo);
+	if (r==KErrNone)
+		r = CallThrdProcEntry(cinfo.iFunction, cinfo.iPtr, aNotFirst);
+	User::Exit(r);
+	}
+}
+
+#else
+#error not supported
+#endif
--- a/sbsv2/raptor/lib/flm/test/ciatests.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/ciatests.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,31 +1,31 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# A grouping glue makefile that runs all tests
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,ALLTARGET)
-COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/ciaabiv2_1.dll
-COMPONENT_GLUEMAKEFILES:=ciaabiv2_1/ciaabiv2_1.mk
-$(ALLTARGET):: ciatests
-ALLTARGET:=ciatests
-
-include $(FLMHOME)/grouping.flm
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# A grouping glue makefile that runs all tests
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,ALLTARGET)
+COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/ciaabiv2_1.dll
+COMPONENT_GLUEMAKEFILES:=ciaabiv2_1/ciaabiv2_1.mk
+$(ALLTARGET):: ciatests
+ALLTARGET:=ciatests
+
+include $(FLMHOME)/grouping.flm
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/dllabiv2_1/dllabiv2_1.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/dllabiv2_1/dllabiv2_1.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,40 +1,40 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 DLL
-## parameters relevant to the test.
-
-## Purpose: To demonstrate the building of a trivial library
-## Postconditions: dllabiv2_1.dll is written to the releasables directory
-
-# Pull in defaults for building test executables
-
-#Get the tools so we can save some variables
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-include $(FLMTESTHOME)/dllabiv2_defaults.mk
-
-TARGET:=dllabiv2_1
-CDEFS:=$(CDEFS) __TESTNAME__=\"dllabiv2_1\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/dllabiv2_1
-SOURCEFILES:=$(SOURCEPATH)/test.cpp
-
-include $(FLMHOME)/$(FLM)
-
-# Restore the variables we modified
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 DLL
+## parameters relevant to the test.
+
+## Purpose: To demonstrate the building of a trivial library
+## Postconditions: dllabiv2_1.dll is written to the releasables directory
+
+# Pull in defaults for building test executables
+
+#Get the tools so we can save some variables
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+include $(FLMTESTHOME)/dllabiv2_defaults.mk
+
+TARGET:=dllabiv2_1
+CDEFS:=$(CDEFS) __TESTNAME__=\"dllabiv2_1\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/dllabiv2_1
+SOURCEFILES:=$(SOURCEPATH)/test.cpp
+
+include $(FLMHOME)/$(FLM)
+
+# Restore the variables we modified
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/dllabiv2_1/test.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/dllabiv2_1/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,24 +1,24 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-#include "e32def.h" // intentional  include
-
-char test[]=__TESTNAME__;
-
-TInt E32Main()
-{
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+TInt E32Main()
+{
+	return 0;
+}
--- a/sbsv2/raptor/lib/flm/test/dllabiv2_defaults.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/dllabiv2_defaults.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,45 +1,45 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# Defaults for ABIv2 EXE build tests
-
-## Purpose: To enable all test makefiles to be updated rapidly
-
-
-include $(FLMHOME)/e32abiv2.mk
-
-DEBUG:=1
-
-CAPABILITY:=LocalServices ReadDeviceData ReadUserData
-UID1:=0x1000007a
-UID2:=0x100039ce
-UID3:=0x000001
-SID:=0x10003a5c
-EXETARGET:=
-MAPFILENAME:=
-BMPS:=
-EPOCDATA:=
-
-VARIANTARCH:=ARMV5
-FULLVARIANTPATH=$(VARIANTARCH)/$(VARIANTTYPE)
-STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
-RUNTIME_LIBS_PATH=$(RELEASEPATH)/$(VARIANTARCH)/LIB
-RELEASEPATH:=$(EPOCROOT)/epoc32/release
-FLM:=e32abiv2dll.flm
-CDEFS:=$(CDEFS) __DLL__
-
-
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# Defaults for ABIv2 EXE build tests
+
+## Purpose: To enable all test makefiles to be updated rapidly
+
+
+include $(FLMHOME)/e32abiv2.mk
+
+DEBUG:=1
+
+CAPABILITY:=LocalServices ReadDeviceData ReadUserData
+UID1:=0x1000007a
+UID2:=0x100039ce
+UID3:=0x000001
+SID:=0x10003a5c
+EXETARGET:=
+MAPFILENAME:=
+BMPS:=
+EPOCDATA:=
+
+VARIANTARCH:=ARMV5
+FULLVARIANTPATH=$(VARIANTARCH)/$(VARIANTTYPE)
+STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
+RUNTIME_LIBS_PATH=$(RELEASEPATH)/$(VARIANTARCH)/LIB
+RELEASEPATH:=$(EPOCROOT)/epoc32/release
+FLM:=e32abiv2dll.flm
+CDEFS:=$(CDEFS) __DLL__
+
+
+
--- a/sbsv2/raptor/lib/flm/test/dllbasictests.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/dllbasictests.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,31 +1,31 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# A grouping glue makefile that runs all tests
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,ALLTARGET OUTPUTPATH)
-COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/dllabiv2_1.dll
-COMPONENT_GLUEMAKEFILES:=dllabiv2_1/dllabiv2_1.mk 
-$(ALLTARGET):: dllbasictests
-ALLTARGET:=dllbasictests
-
-include $(FLMHOME)/grouping.flm
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# A grouping glue makefile that runs all tests
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,ALLTARGET OUTPUTPATH)
+COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/dllabiv2_1.dll
+COMPONENT_GLUEMAKEFILES:=dllabiv2_1/dllabiv2_1.mk 
+$(ALLTARGET):: dllbasictests
+ALLTARGET:=dllbasictests
+
+include $(FLMHOME)/grouping.flm
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/environment/make/test_variable_restore.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/environment/make/test_variable_restore.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,97 +1,97 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-# Makefile that demonstrates the effect of state saving macros
-# when used across multiple FLM calls
-
-#
-# basically for testing the stack.mk amkefile fragmemt
-# Which chould be inluded by flmtools.mk
-#
-
-
-.PHONY: stack-debug
-
-OUTPUTPATH:=_PRE_OUTPUTPATH_
-SOURCEPATH:=_PRE_SOURCEPATH_
-
-COMMA:= ,
-EMPTY:=
-SPACE:= $(EMPTY) $(EMPTY)
-
-
-include $(FLMHOME)/flmtools.mk
-
-OUTPUTPATH:=ORIGINAL_OUTPUTPATH OP2 OP3
-SOURCEPATH:=ORIGINAL_SOURCEPATH SP2 SP3
-
-###############################################################################
-# Rules for testing
-.PHONY: all
-
-all: stack-debug stack-debug2 stack-debug3
-	@echo "FLM stack TEST SUCCEEDED"
-
-.PHONY: stack-debug
-stack-debug: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
-stack-debug: OUTPUTPATH:=$(OUTPUTPATH)
-stack-debug: SOURCEPATH:=$(SOURCEPATH)
-
-stack-debug:
-	@echo NAME=\"$(VARIABLE_STACK_NAME)\"
-	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
-	@echo "	Stack contents: \"$($(VARIABLE_STACK_NAME)$)\""
-	@echo "Original Parameters iprior to 'FLM Call': "
-	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
-	@echo "	SOURCEPATH: "$(SOURCEPATH)
-	[ "$(OUTPUTPATH)" == "ORIGINAL_OUTPUTPATH OP2 OP3" ]
-	[ "$(SOURCEPATH)" == "ORIGINAL_SOURCEPATH SP2 SP3" ]
-
-
-$(call vsave,OUTPUTPATH SOURCEPATH)
-OUTPUTPATH:=MODIFIED OUTPUTPATH
-SOURCEPATH:=MODIFIED OUTPUTPATH
-
-
-
-.PHONY: stack-debug2
-stack-debug2: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
-stack-debug2: OUTPUTPATH:=$(OUTPUTPATH)
-stack-debug2: SOURCEPATH:=$(SOURCEPATH)
-stack-debug2:
-	@echo "--------------------"
-	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
-	@echo "Parameters after 'FLM Call': "
-	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
-	@echo "	SOURCEPATH: "$(SOURCEPATH)
-	[ "$(OUTPUTPATH)" == "MODIFIED OUTPUTPATH" ]
-	[ "$(SOURCEPATH)" == "MODIFIED OUTPUTPATH" ]
-
-
-$(call vrestore)
-
-
-.PHONY: stack-debug3
-stack-debug3: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
-stack-debug3: OUTPUTPATH:=$(OUTPUTPATH)
-stack-debug3: SOURCEPATH:=$(SOURCEPATH)
-stack-debug3:
-	@echo "--------------------"
-	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
-	@echo "Parameters after restore: "
-	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
-	@echo "	SOURCEPATH: "$(SOURCEPATH)
-	[ "$(OUTPUTPATH)" == "ORIGINAL_OUTPUTPATH OP2 OP3" ]
-	[ "$(SOURCEPATH)" == "ORIGINAL_SOURCEPATH SP2 SP3" ]
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Makefile that demonstrates the effect of state saving macros
+# when used across multiple FLM calls
+
+#
+# basically for testing the stack.mk amkefile fragmemt
+# Which chould be inluded by flmtools.mk
+#
+
+
+.PHONY: stack-debug
+
+OUTPUTPATH:=_PRE_OUTPUTPATH_
+SOURCEPATH:=_PRE_SOURCEPATH_
+
+COMMA:= ,
+EMPTY:=
+SPACE:= $(EMPTY) $(EMPTY)
+
+
+include $(FLMHOME)/flmtools.mk
+
+OUTPUTPATH:=ORIGINAL_OUTPUTPATH OP2 OP3
+SOURCEPATH:=ORIGINAL_SOURCEPATH SP2 SP3
+
+###############################################################################
+# Rules for testing
+.PHONY: all
+
+all: stack-debug stack-debug2 stack-debug3
+	@echo "FLM stack TEST SUCCEEDED"
+
+.PHONY: stack-debug
+stack-debug: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
+stack-debug: OUTPUTPATH:=$(OUTPUTPATH)
+stack-debug: SOURCEPATH:=$(SOURCEPATH)
+
+stack-debug:
+	@echo NAME=\"$(VARIABLE_STACK_NAME)\"
+	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
+	@echo "	Stack contents: \"$($(VARIABLE_STACK_NAME)$)\""
+	@echo "Original Parameters iprior to 'FLM Call': "
+	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
+	@echo "	SOURCEPATH: "$(SOURCEPATH)
+	[ "$(OUTPUTPATH)" == "ORIGINAL_OUTPUTPATH OP2 OP3" ]
+	[ "$(SOURCEPATH)" == "ORIGINAL_SOURCEPATH SP2 SP3" ]
+
+
+$(call vsave,OUTPUTPATH SOURCEPATH)
+OUTPUTPATH:=MODIFIED OUTPUTPATH
+SOURCEPATH:=MODIFIED OUTPUTPATH
+
+
+
+.PHONY: stack-debug2
+stack-debug2: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
+stack-debug2: OUTPUTPATH:=$(OUTPUTPATH)
+stack-debug2: SOURCEPATH:=$(SOURCEPATH)
+stack-debug2:
+	@echo "--------------------"
+	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
+	@echo "Parameters after 'FLM Call': "
+	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
+	@echo "	SOURCEPATH: "$(SOURCEPATH)
+	[ "$(OUTPUTPATH)" == "MODIFIED OUTPUTPATH" ]
+	[ "$(SOURCEPATH)" == "MODIFIED OUTPUTPATH" ]
+
+
+$(call vrestore)
+
+
+.PHONY: stack-debug3
+stack-debug3: VARIABLE_STACK_NAME:=$(VARIABLE_STACK_NAME)
+stack-debug3: OUTPUTPATH:=$(OUTPUTPATH)
+stack-debug3: SOURCEPATH:=$(SOURCEPATH)
+stack-debug3:
+	@echo "--------------------"
+	@echo "	Stack Name: \"$(VARIABLE_STACK_NAME)\""
+	@echo "Parameters after restore: "
+	@echo "	OUTPUTPATH: "$(OUTPUTPATH)
+	@echo "	SOURCEPATH: "$(SOURCEPATH)
+	[ "$(OUTPUTPATH)" == "ORIGINAL_OUTPUTPATH OP2 OP3" ]
+	[ "$(SOURCEPATH)" == "ORIGINAL_SOURCEPATH SP2 SP3" ]
--- a/sbsv2/raptor/lib/flm/test/environment/pvm/pvmtest.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/environment/pvm/pvmtest.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,25 +1,25 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-.PHONY: all one two
-
-all: one two
-
-one:
-	@echo ARCH=`$(PVM_ROOT)/lib/pvmgetarch`/`hostname`; hostname; /usr/local/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 
-
-two:
-	@echo ARCH=`$(PVM_ROOT)/lib/pvmgetarch`/`hostname`; hostname; /usr/local/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+.PHONY: all one two
+
+all: one two
+
+one:
+	@echo ARCH=`$(PVM_ROOT)/lib/pvmgetarch`/`hostname`; hostname; /usr/local/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 
+
+two:
+	@echo ARCH=`$(PVM_ROOT)/lib/pvmgetarch`/`hostname`; hostname; /usr/local/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_1/exeabiv2_1.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_1/exeabiv2_1.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 EXE on Linux
-## parameters relevant to the test.
-
-## Purpose: To demonstrate use of 1 call to a basic flm with one input file
-## Postconditions: test1.exe is written to the output directory $OUTPUTPATH/test1/test1.exe:
-
-# Pull tools
-include $(FLMHOME)/flmtools.mk
-
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-# Pull in defaults for building test executables
-include $(FLMTESTHOME)/exeabiv2_defaults.mk
-
-TARGET:=exeabiv2_1
-CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_1\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/exeabiv2_1
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
-SOURCEFILES:=$(SOURCEPATH)/test.cpp
-UID3:=0x000001
-
-
-include $(FLMHOME)/$(FLM)
-
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 EXE on Linux
+## parameters relevant to the test.
+
+## Purpose: To demonstrate use of 1 call to a basic flm with one input file
+## Postconditions: test1.exe is written to the output directory $OUTPUTPATH/test1/test1.exe:
+
+# Pull tools
+include $(FLMHOME)/flmtools.mk
+
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+# Pull in defaults for building test executables
+include $(FLMTESTHOME)/exeabiv2_defaults.mk
+
+TARGET:=exeabiv2_1
+CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_1\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/exeabiv2_1
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
+SOURCEFILES:=$(SOURCEPATH)/test.cpp
+UID3:=0x000001
+
+
+include $(FLMHOME)/$(FLM)
+
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_1/test.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_1/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,24 +1,24 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-#include "e32def.h" // intentional  include
-
-char test[]=__TESTNAME__;
-
-TInt E32Main()
-{
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+TInt E32Main()
+{
+	return 0;
+}
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_2/exeabiv2_2.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_2/exeabiv2_2.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,47 +1,47 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 EXE on Linux
-## parameters relevant to the test.
-##
-
-
-## Purpose:
-## to demonstrate use of 1 call to a basic flm with two input files
-## postconditions:
-## test2.exe is written to the output directory $OUTPUTPATH/test2/test2.exe
-## test1.o and test2.o are generated in $OUTPUTPATH/test1/test1.o and $OUTPUTPATH/test2/test2.exe
-
-
-# Pull tools
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-# Pull in defaults for building test executables
-include $(FLMTESTHOME)/exeabiv2_defaults.mk
-
-
-TARGET:=exeabiv2_2
-CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_2\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/exeabiv2_2
-SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_function.cpp
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
-UID3:=0x000002
-
-include $(FLMHOME)/$(FLM)
-
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 EXE on Linux
+## parameters relevant to the test.
+##
+
+
+## Purpose:
+## to demonstrate use of 1 call to a basic flm with two input files
+## postconditions:
+## test2.exe is written to the output directory $OUTPUTPATH/test2/test2.exe
+## test1.o and test2.o are generated in $OUTPUTPATH/test1/test1.o and $OUTPUTPATH/test2/test2.exe
+
+
+# Pull tools
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+# Pull in defaults for building test executables
+include $(FLMTESTHOME)/exeabiv2_defaults.mk
+
+
+TARGET:=exeabiv2_2
+CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_2\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/exeabiv2_2
+SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_function.cpp
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
+UID3:=0x000002
+
+include $(FLMHOME)/$(FLM)
+
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_2/test.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_2/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,27 +1,27 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-#include <e32def.h>
-
-int i=1;
-
-extern int function_in_test2(void);
-TInt E32Main(void)
-{
-	function_in_test2();
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <e32def.h>
+
+int i=1;
+
+extern int function_in_test2(void);
+TInt E32Main(void)
+{
+	function_in_test2();
+	return 0;
+}
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_2/test_function.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_2/test_function.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,27 +1,27 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-int function_in_test2(void)
-{
-	int x,y;
-	x=20+30* 10-1;
-	y=x*4;
-
-	x=y+1;
-
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+int function_in_test2(void)
+{
+	int x,y;
+	x=20+30* 10-1;
+	y=x*4;
+
+	x=y+1;
+
+	return 0;
+}
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_3/exeabiv2_3.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_3/exeabiv2_3.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,46 +1,46 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 EXE on Linux
-## parameters relevant to the test.
-##
-
-
-## Purpose:
-## This is used to gauge perfomance 
-## At least one "large" input file is built
-## The input file has no dependencies so it really is just something for the compiler to "chew"
-
-
-# Pull tools
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-# Pull in defaults for building test executables
-include $(FLMTESTHOME)/exeabiv2_defaults.mk
-
-
-TARGET:=exeabiv2_3
-CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_3\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/exeabiv2_3
-SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_big.cpp
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
-UID3:=0x000003
-
-include $(FLMHOME)/$(FLM)
-
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 EXE on Linux
+## parameters relevant to the test.
+##
+
+
+## Purpose:
+## This is used to gauge perfomance 
+## At least one "large" input file is built
+## The input file has no dependencies so it really is just something for the compiler to "chew"
+
+
+# Pull tools
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+# Pull in defaults for building test executables
+include $(FLMTESTHOME)/exeabiv2_defaults.mk
+
+
+TARGET:=exeabiv2_3
+CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_3\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/exeabiv2_3
+SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_big.cpp
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
+UID3:=0x000003
+
+include $(FLMHOME)/$(FLM)
+
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_3/test_big.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_3/test_big.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,2045 +1,2045 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/* 
-This is jsut some "compiler fibre" for the compiler to chew
-on as part of a compilation performace test
-*/
-
-#define FUNC(VARIABLE)	\
-int function_##VARIABLE(void)	\
-{	\
-	int x,y,z;	\
-	x=VARIABLE+30* 10-1;	\
-	y=x*4;	\
-	\
-	\
-	x=y+1;	\
-	\
-	int a[VARIABLE];	\
-	\
-	\
-	\
-	for (z=0; z < 1000+VARIABLE; z++)	\
-	{	\
-		x+=a[z];		\
-	}	\
-	\
-	return x;	\
-}
-
-
-
-FUNC(1)
-FUNC(2)
-FUNC(3)
-FUNC(4)
-FUNC(5)
-FUNC(6)
-FUNC(7)
-FUNC(8)
-FUNC(9)
-FUNC(10)
-FUNC(11)
-FUNC(12)
-FUNC(13)
-FUNC(14)
-FUNC(15)
-FUNC(16)
-FUNC(17)
-FUNC(18)
-FUNC(19)
-FUNC(20)
-FUNC(21)
-FUNC(22)
-FUNC(23)
-FUNC(24)
-FUNC(25)
-FUNC(26)
-FUNC(27)
-FUNC(28)
-FUNC(29)
-FUNC(30)
-FUNC(31)
-FUNC(32)
-FUNC(33)
-FUNC(34)
-FUNC(35)
-FUNC(36)
-FUNC(37)
-FUNC(38)
-FUNC(39)
-FUNC(40)
-FUNC(41)
-FUNC(42)
-FUNC(43)
-FUNC(44)
-FUNC(45)
-FUNC(46)
-FUNC(47)
-FUNC(48)
-FUNC(49)
-FUNC(50)
-FUNC(51)
-FUNC(52)
-FUNC(53)
-FUNC(54)
-FUNC(55)
-FUNC(56)
-FUNC(57)
-FUNC(58)
-FUNC(59)
-FUNC(60)
-FUNC(61)
-FUNC(62)
-FUNC(63)
-FUNC(64)
-FUNC(65)
-FUNC(66)
-FUNC(67)
-FUNC(68)
-FUNC(69)
-FUNC(70)
-FUNC(71)
-FUNC(72)
-FUNC(73)
-FUNC(74)
-FUNC(75)
-FUNC(76)
-FUNC(77)
-FUNC(78)
-FUNC(79)
-FUNC(80)
-FUNC(81)
-FUNC(82)
-FUNC(83)
-FUNC(84)
-FUNC(85)
-FUNC(86)
-FUNC(87)
-FUNC(88)
-FUNC(89)
-FUNC(90)
-FUNC(91)
-FUNC(92)
-FUNC(93)
-FUNC(94)
-FUNC(95)
-FUNC(96)
-FUNC(97)
-FUNC(98)
-FUNC(99)
-FUNC(100)
-FUNC(101)
-FUNC(102)
-FUNC(103)
-FUNC(104)
-FUNC(105)
-FUNC(106)
-FUNC(107)
-FUNC(108)
-FUNC(109)
-FUNC(110)
-FUNC(111)
-FUNC(112)
-FUNC(113)
-FUNC(114)
-FUNC(115)
-FUNC(116)
-FUNC(117)
-FUNC(118)
-FUNC(119)
-FUNC(120)
-FUNC(121)
-FUNC(122)
-FUNC(123)
-FUNC(124)
-FUNC(125)
-FUNC(126)
-FUNC(127)
-FUNC(128)
-FUNC(129)
-FUNC(130)
-FUNC(131)
-FUNC(132)
-FUNC(133)
-FUNC(134)
-FUNC(135)
-FUNC(136)
-FUNC(137)
-FUNC(138)
-FUNC(139)
-FUNC(140)
-FUNC(141)
-FUNC(142)
-FUNC(143)
-FUNC(144)
-FUNC(145)
-FUNC(146)
-FUNC(147)
-FUNC(148)
-FUNC(149)
-FUNC(150)
-FUNC(151)
-FUNC(152)
-FUNC(153)
-FUNC(154)
-FUNC(155)
-FUNC(156)
-FUNC(157)
-FUNC(158)
-FUNC(159)
-FUNC(160)
-FUNC(161)
-FUNC(162)
-FUNC(163)
-FUNC(164)
-FUNC(165)
-FUNC(166)
-FUNC(167)
-FUNC(168)
-FUNC(169)
-FUNC(170)
-FUNC(171)
-FUNC(172)
-FUNC(173)
-FUNC(174)
-FUNC(175)
-FUNC(176)
-FUNC(177)
-FUNC(178)
-FUNC(179)
-FUNC(180)
-FUNC(181)
-FUNC(182)
-FUNC(183)
-FUNC(184)
-FUNC(185)
-FUNC(186)
-FUNC(187)
-FUNC(188)
-FUNC(189)
-FUNC(190)
-FUNC(191)
-FUNC(192)
-FUNC(193)
-FUNC(194)
-FUNC(195)
-FUNC(196)
-FUNC(197)
-FUNC(198)
-FUNC(199)
-FUNC(200)
-FUNC(201)
-FUNC(202)
-FUNC(203)
-FUNC(204)
-FUNC(205)
-FUNC(206)
-FUNC(207)
-FUNC(208)
-FUNC(209)
-FUNC(210)
-FUNC(211)
-FUNC(212)
-FUNC(213)
-FUNC(214)
-FUNC(215)
-FUNC(216)
-FUNC(217)
-FUNC(218)
-FUNC(219)
-FUNC(220)
-FUNC(221)
-FUNC(222)
-FUNC(223)
-FUNC(224)
-FUNC(225)
-FUNC(226)
-FUNC(227)
-FUNC(228)
-FUNC(229)
-FUNC(230)
-FUNC(231)
-FUNC(232)
-FUNC(233)
-FUNC(234)
-FUNC(235)
-FUNC(236)
-FUNC(237)
-FUNC(238)
-FUNC(239)
-FUNC(240)
-FUNC(241)
-FUNC(242)
-FUNC(243)
-FUNC(244)
-FUNC(245)
-FUNC(246)
-FUNC(247)
-FUNC(248)
-FUNC(249)
-FUNC(250)
-FUNC(251)
-FUNC(252)
-FUNC(253)
-FUNC(254)
-FUNC(255)
-FUNC(256)
-FUNC(257)
-FUNC(258)
-FUNC(259)
-FUNC(260)
-FUNC(261)
-FUNC(262)
-FUNC(263)
-FUNC(264)
-FUNC(265)
-FUNC(266)
-FUNC(267)
-FUNC(268)
-FUNC(269)
-FUNC(270)
-FUNC(271)
-FUNC(272)
-FUNC(273)
-FUNC(274)
-FUNC(275)
-FUNC(276)
-FUNC(277)
-FUNC(278)
-FUNC(279)
-FUNC(280)
-FUNC(281)
-FUNC(282)
-FUNC(283)
-FUNC(284)
-FUNC(285)
-FUNC(286)
-FUNC(287)
-FUNC(288)
-FUNC(289)
-FUNC(290)
-FUNC(291)
-FUNC(292)
-FUNC(293)
-FUNC(294)
-FUNC(295)
-FUNC(296)
-FUNC(297)
-FUNC(298)
-FUNC(299)
-FUNC(300)
-FUNC(301)
-FUNC(302)
-FUNC(303)
-FUNC(304)
-FUNC(305)
-FUNC(306)
-FUNC(307)
-FUNC(308)
-FUNC(309)
-FUNC(310)
-FUNC(311)
-FUNC(312)
-FUNC(313)
-FUNC(314)
-FUNC(315)
-FUNC(316)
-FUNC(317)
-FUNC(318)
-FUNC(319)
-FUNC(320)
-FUNC(321)
-FUNC(322)
-FUNC(323)
-FUNC(324)
-FUNC(325)
-FUNC(326)
-FUNC(327)
-FUNC(328)
-FUNC(329)
-FUNC(330)
-FUNC(331)
-FUNC(332)
-FUNC(333)
-FUNC(334)
-FUNC(335)
-FUNC(336)
-FUNC(337)
-FUNC(338)
-FUNC(339)
-FUNC(340)
-FUNC(341)
-FUNC(342)
-FUNC(343)
-FUNC(344)
-FUNC(345)
-FUNC(346)
-FUNC(347)
-FUNC(348)
-FUNC(349)
-FUNC(350)
-FUNC(351)
-FUNC(352)
-FUNC(353)
-FUNC(354)
-FUNC(355)
-FUNC(356)
-FUNC(357)
-FUNC(358)
-FUNC(359)
-FUNC(360)
-FUNC(361)
-FUNC(362)
-FUNC(363)
-FUNC(364)
-FUNC(365)
-FUNC(366)
-FUNC(367)
-FUNC(368)
-FUNC(369)
-FUNC(370)
-FUNC(371)
-FUNC(372)
-FUNC(373)
-FUNC(374)
-FUNC(375)
-FUNC(376)
-FUNC(377)
-FUNC(378)
-FUNC(379)
-FUNC(380)
-FUNC(381)
-FUNC(382)
-FUNC(383)
-FUNC(384)
-FUNC(385)
-FUNC(386)
-FUNC(387)
-FUNC(388)
-FUNC(389)
-FUNC(390)
-FUNC(391)
-FUNC(392)
-FUNC(393)
-FUNC(394)
-FUNC(395)
-FUNC(396)
-FUNC(397)
-FUNC(398)
-FUNC(399)
-FUNC(400)
-FUNC(401)
-FUNC(402)
-FUNC(403)
-FUNC(404)
-FUNC(405)
-FUNC(406)
-FUNC(407)
-FUNC(408)
-FUNC(409)
-FUNC(410)
-FUNC(411)
-FUNC(412)
-FUNC(413)
-FUNC(414)
-FUNC(415)
-FUNC(416)
-FUNC(417)
-FUNC(418)
-FUNC(419)
-FUNC(420)
-FUNC(421)
-FUNC(422)
-FUNC(423)
-FUNC(424)
-FUNC(425)
-FUNC(426)
-FUNC(427)
-FUNC(428)
-FUNC(429)
-FUNC(430)
-FUNC(431)
-FUNC(432)
-FUNC(433)
-FUNC(434)
-FUNC(435)
-FUNC(436)
-FUNC(437)
-FUNC(438)
-FUNC(439)
-FUNC(440)
-FUNC(441)
-FUNC(442)
-FUNC(443)
-FUNC(444)
-FUNC(445)
-FUNC(446)
-FUNC(447)
-FUNC(448)
-FUNC(449)
-FUNC(450)
-FUNC(451)
-FUNC(452)
-FUNC(453)
-FUNC(454)
-FUNC(455)
-FUNC(456)
-FUNC(457)
-FUNC(458)
-FUNC(459)
-FUNC(460)
-FUNC(461)
-FUNC(462)
-FUNC(463)
-FUNC(464)
-FUNC(465)
-FUNC(466)
-FUNC(467)
-FUNC(468)
-FUNC(469)
-FUNC(470)
-FUNC(471)
-FUNC(472)
-FUNC(473)
-FUNC(474)
-FUNC(475)
-FUNC(476)
-FUNC(477)
-FUNC(478)
-FUNC(479)
-FUNC(480)
-FUNC(481)
-FUNC(482)
-FUNC(483)
-FUNC(484)
-FUNC(485)
-FUNC(486)
-FUNC(487)
-FUNC(488)
-FUNC(489)
-FUNC(490)
-FUNC(491)
-FUNC(492)
-FUNC(493)
-FUNC(494)
-FUNC(495)
-FUNC(496)
-FUNC(497)
-FUNC(498)
-FUNC(499)
-FUNC(500)
-FUNC(501)
-FUNC(502)
-FUNC(503)
-FUNC(504)
-FUNC(505)
-FUNC(506)
-FUNC(507)
-FUNC(508)
-FUNC(509)
-FUNC(510)
-FUNC(511)
-FUNC(512)
-FUNC(513)
-FUNC(514)
-FUNC(515)
-FUNC(516)
-FUNC(517)
-FUNC(518)
-FUNC(519)
-FUNC(520)
-FUNC(521)
-FUNC(522)
-FUNC(523)
-FUNC(524)
-FUNC(525)
-FUNC(526)
-FUNC(527)
-FUNC(528)
-FUNC(529)
-FUNC(530)
-FUNC(531)
-FUNC(532)
-FUNC(533)
-FUNC(534)
-FUNC(535)
-FUNC(536)
-FUNC(537)
-FUNC(538)
-FUNC(539)
-FUNC(540)
-FUNC(541)
-FUNC(542)
-FUNC(543)
-FUNC(544)
-FUNC(545)
-FUNC(546)
-FUNC(547)
-FUNC(548)
-FUNC(549)
-FUNC(550)
-FUNC(551)
-FUNC(552)
-FUNC(553)
-FUNC(554)
-FUNC(555)
-FUNC(556)
-FUNC(557)
-FUNC(558)
-FUNC(559)
-FUNC(560)
-FUNC(561)
-FUNC(562)
-FUNC(563)
-FUNC(564)
-FUNC(565)
-FUNC(566)
-FUNC(567)
-FUNC(568)
-FUNC(569)
-FUNC(570)
-FUNC(571)
-FUNC(572)
-FUNC(573)
-FUNC(574)
-FUNC(575)
-FUNC(576)
-FUNC(577)
-FUNC(578)
-FUNC(579)
-FUNC(580)
-FUNC(581)
-FUNC(582)
-FUNC(583)
-FUNC(584)
-FUNC(585)
-FUNC(586)
-FUNC(587)
-FUNC(588)
-FUNC(589)
-FUNC(590)
-FUNC(591)
-FUNC(592)
-FUNC(593)
-FUNC(594)
-FUNC(595)
-FUNC(596)
-FUNC(597)
-FUNC(598)
-FUNC(599)
-FUNC(600)
-FUNC(601)
-FUNC(602)
-FUNC(603)
-FUNC(604)
-FUNC(605)
-FUNC(606)
-FUNC(607)
-FUNC(608)
-FUNC(609)
-FUNC(610)
-FUNC(611)
-FUNC(612)
-FUNC(613)
-FUNC(614)
-FUNC(615)
-FUNC(616)
-FUNC(617)
-FUNC(618)
-FUNC(619)
-FUNC(620)
-FUNC(621)
-FUNC(622)
-FUNC(623)
-FUNC(624)
-FUNC(625)
-FUNC(626)
-FUNC(627)
-FUNC(628)
-FUNC(629)
-FUNC(630)
-FUNC(631)
-FUNC(632)
-FUNC(633)
-FUNC(634)
-FUNC(635)
-FUNC(636)
-FUNC(637)
-FUNC(638)
-FUNC(639)
-FUNC(640)
-FUNC(641)
-FUNC(642)
-FUNC(643)
-FUNC(644)
-FUNC(645)
-FUNC(646)
-FUNC(647)
-FUNC(648)
-FUNC(649)
-FUNC(650)
-FUNC(651)
-FUNC(652)
-FUNC(653)
-FUNC(654)
-FUNC(655)
-FUNC(656)
-FUNC(657)
-FUNC(658)
-FUNC(659)
-FUNC(660)
-FUNC(661)
-FUNC(662)
-FUNC(663)
-FUNC(664)
-FUNC(665)
-FUNC(666)
-FUNC(667)
-FUNC(668)
-FUNC(669)
-FUNC(670)
-FUNC(671)
-FUNC(672)
-FUNC(673)
-FUNC(674)
-FUNC(675)
-FUNC(676)
-FUNC(677)
-FUNC(678)
-FUNC(679)
-FUNC(680)
-FUNC(681)
-FUNC(682)
-FUNC(683)
-FUNC(684)
-FUNC(685)
-FUNC(686)
-FUNC(687)
-FUNC(688)
-FUNC(689)
-FUNC(690)
-FUNC(691)
-FUNC(692)
-FUNC(693)
-FUNC(694)
-FUNC(695)
-FUNC(696)
-FUNC(697)
-FUNC(698)
-FUNC(699)
-FUNC(700)
-FUNC(701)
-FUNC(702)
-FUNC(703)
-FUNC(704)
-FUNC(705)
-FUNC(706)
-FUNC(707)
-FUNC(708)
-FUNC(709)
-FUNC(710)
-FUNC(711)
-FUNC(712)
-FUNC(713)
-FUNC(714)
-FUNC(715)
-FUNC(716)
-FUNC(717)
-FUNC(718)
-FUNC(719)
-FUNC(720)
-FUNC(721)
-FUNC(722)
-FUNC(723)
-FUNC(724)
-FUNC(725)
-FUNC(726)
-FUNC(727)
-FUNC(728)
-FUNC(729)
-FUNC(730)
-FUNC(731)
-FUNC(732)
-FUNC(733)
-FUNC(734)
-FUNC(735)
-FUNC(736)
-FUNC(737)
-FUNC(738)
-FUNC(739)
-FUNC(740)
-FUNC(741)
-FUNC(742)
-FUNC(743)
-FUNC(744)
-FUNC(745)
-FUNC(746)
-FUNC(747)
-FUNC(748)
-FUNC(749)
-FUNC(750)
-FUNC(751)
-FUNC(752)
-FUNC(753)
-FUNC(754)
-FUNC(755)
-FUNC(756)
-FUNC(757)
-FUNC(758)
-FUNC(759)
-FUNC(760)
-FUNC(761)
-FUNC(762)
-FUNC(763)
-FUNC(764)
-FUNC(765)
-FUNC(766)
-FUNC(767)
-FUNC(768)
-FUNC(769)
-FUNC(770)
-FUNC(771)
-FUNC(772)
-FUNC(773)
-FUNC(774)
-FUNC(775)
-FUNC(776)
-FUNC(777)
-FUNC(778)
-FUNC(779)
-FUNC(780)
-FUNC(781)
-FUNC(782)
-FUNC(783)
-FUNC(784)
-FUNC(785)
-FUNC(786)
-FUNC(787)
-FUNC(788)
-FUNC(789)
-FUNC(790)
-FUNC(791)
-FUNC(792)
-FUNC(793)
-FUNC(794)
-FUNC(795)
-FUNC(796)
-FUNC(797)
-FUNC(798)
-FUNC(799)
-FUNC(800)
-FUNC(801)
-FUNC(802)
-FUNC(803)
-FUNC(804)
-FUNC(805)
-FUNC(806)
-FUNC(807)
-FUNC(808)
-FUNC(809)
-FUNC(810)
-FUNC(811)
-FUNC(812)
-FUNC(813)
-FUNC(814)
-FUNC(815)
-FUNC(816)
-FUNC(817)
-FUNC(818)
-FUNC(819)
-FUNC(820)
-FUNC(821)
-FUNC(822)
-FUNC(823)
-FUNC(824)
-FUNC(825)
-FUNC(826)
-FUNC(827)
-FUNC(828)
-FUNC(829)
-FUNC(830)
-FUNC(831)
-FUNC(832)
-FUNC(833)
-FUNC(834)
-FUNC(835)
-FUNC(836)
-FUNC(837)
-FUNC(838)
-FUNC(839)
-FUNC(840)
-FUNC(841)
-FUNC(842)
-FUNC(843)
-FUNC(844)
-FUNC(845)
-FUNC(846)
-FUNC(847)
-FUNC(848)
-FUNC(849)
-FUNC(850)
-FUNC(851)
-FUNC(852)
-FUNC(853)
-FUNC(854)
-FUNC(855)
-FUNC(856)
-FUNC(857)
-FUNC(858)
-FUNC(859)
-FUNC(860)
-FUNC(861)
-FUNC(862)
-FUNC(863)
-FUNC(864)
-FUNC(865)
-FUNC(866)
-FUNC(867)
-FUNC(868)
-FUNC(869)
-FUNC(870)
-FUNC(871)
-FUNC(872)
-FUNC(873)
-FUNC(874)
-FUNC(875)
-FUNC(876)
-FUNC(877)
-FUNC(878)
-FUNC(879)
-FUNC(880)
-FUNC(881)
-FUNC(882)
-FUNC(883)
-FUNC(884)
-FUNC(885)
-FUNC(886)
-FUNC(887)
-FUNC(888)
-FUNC(889)
-FUNC(890)
-FUNC(891)
-FUNC(892)
-FUNC(893)
-FUNC(894)
-FUNC(895)
-FUNC(896)
-FUNC(897)
-FUNC(898)
-FUNC(899)
-FUNC(900)
-FUNC(901)
-FUNC(902)
-FUNC(903)
-FUNC(904)
-FUNC(905)
-FUNC(906)
-FUNC(907)
-FUNC(908)
-FUNC(909)
-FUNC(910)
-FUNC(911)
-FUNC(912)
-FUNC(913)
-FUNC(914)
-FUNC(915)
-FUNC(916)
-FUNC(917)
-FUNC(918)
-FUNC(919)
-FUNC(920)
-FUNC(921)
-FUNC(922)
-FUNC(923)
-FUNC(924)
-FUNC(925)
-FUNC(926)
-FUNC(927)
-FUNC(928)
-FUNC(929)
-FUNC(930)
-FUNC(931)
-FUNC(932)
-FUNC(933)
-FUNC(934)
-FUNC(935)
-FUNC(936)
-FUNC(937)
-FUNC(938)
-FUNC(939)
-FUNC(940)
-FUNC(941)
-FUNC(942)
-FUNC(943)
-FUNC(944)
-FUNC(945)
-FUNC(946)
-FUNC(947)
-FUNC(948)
-FUNC(949)
-FUNC(950)
-FUNC(951)
-FUNC(952)
-FUNC(953)
-FUNC(954)
-FUNC(955)
-FUNC(956)
-FUNC(957)
-FUNC(958)
-FUNC(959)
-FUNC(960)
-FUNC(961)
-FUNC(962)
-FUNC(963)
-FUNC(964)
-FUNC(965)
-FUNC(966)
-FUNC(967)
-FUNC(968)
-FUNC(969)
-FUNC(970)
-FUNC(971)
-FUNC(972)
-FUNC(973)
-FUNC(974)
-FUNC(975)
-FUNC(976)
-FUNC(977)
-FUNC(978)
-FUNC(979)
-FUNC(980)
-FUNC(981)
-FUNC(982)
-FUNC(983)
-FUNC(984)
-FUNC(985)
-FUNC(986)
-FUNC(987)
-FUNC(988)
-FUNC(989)
-FUNC(990)
-FUNC(991)
-FUNC(992)
-FUNC(993)
-FUNC(994)
-FUNC(995)
-FUNC(996)
-FUNC(997)
-FUNC(998)
-FUNC(999)
-FUNC(1000)
-FUNC(1001)
-FUNC(1002)
-FUNC(1003)
-FUNC(1004)
-FUNC(1005)
-FUNC(1006)
-FUNC(1007)
-FUNC(1008)
-FUNC(1009)
-FUNC(1010)
-FUNC(1011)
-FUNC(1012)
-FUNC(1013)
-FUNC(1014)
-FUNC(1015)
-FUNC(1016)
-FUNC(1017)
-FUNC(1018)
-FUNC(1019)
-FUNC(1020)
-FUNC(1021)
-FUNC(1022)
-FUNC(1023)
-FUNC(1024)
-FUNC(1025)
-FUNC(1026)
-FUNC(1027)
-FUNC(1028)
-FUNC(1029)
-FUNC(1030)
-FUNC(1031)
-FUNC(1032)
-FUNC(1033)
-FUNC(1034)
-FUNC(1035)
-FUNC(1036)
-FUNC(1037)
-FUNC(1038)
-FUNC(1039)
-FUNC(1040)
-FUNC(1041)
-FUNC(1042)
-FUNC(1043)
-FUNC(1044)
-FUNC(1045)
-FUNC(1046)
-FUNC(1047)
-FUNC(1048)
-FUNC(1049)
-FUNC(1050)
-FUNC(1051)
-FUNC(1052)
-FUNC(1053)
-FUNC(1054)
-FUNC(1055)
-FUNC(1056)
-FUNC(1057)
-FUNC(1058)
-FUNC(1059)
-FUNC(1060)
-FUNC(1061)
-FUNC(1062)
-FUNC(1063)
-FUNC(1064)
-FUNC(1065)
-FUNC(1066)
-FUNC(1067)
-FUNC(1068)
-FUNC(1069)
-FUNC(1070)
-FUNC(1071)
-FUNC(1072)
-FUNC(1073)
-FUNC(1074)
-FUNC(1075)
-FUNC(1076)
-FUNC(1077)
-FUNC(1078)
-FUNC(1079)
-FUNC(1080)
-FUNC(1081)
-FUNC(1082)
-FUNC(1083)
-FUNC(1084)
-FUNC(1085)
-FUNC(1086)
-FUNC(1087)
-FUNC(1088)
-FUNC(1089)
-FUNC(1090)
-FUNC(1091)
-FUNC(1092)
-FUNC(1093)
-FUNC(1094)
-FUNC(1095)
-FUNC(1096)
-FUNC(1097)
-FUNC(1098)
-FUNC(1099)
-FUNC(1100)
-FUNC(1101)
-FUNC(1102)
-FUNC(1103)
-FUNC(1104)
-FUNC(1105)
-FUNC(1106)
-FUNC(1107)
-FUNC(1108)
-FUNC(1109)
-FUNC(1110)
-FUNC(1111)
-FUNC(1112)
-FUNC(1113)
-FUNC(1114)
-FUNC(1115)
-FUNC(1116)
-FUNC(1117)
-FUNC(1118)
-FUNC(1119)
-FUNC(1120)
-FUNC(1121)
-FUNC(1122)
-FUNC(1123)
-FUNC(1124)
-FUNC(1125)
-FUNC(1126)
-FUNC(1127)
-FUNC(1128)
-FUNC(1129)
-FUNC(1130)
-FUNC(1131)
-FUNC(1132)
-FUNC(1133)
-FUNC(1134)
-FUNC(1135)
-FUNC(1136)
-FUNC(1137)
-FUNC(1138)
-FUNC(1139)
-FUNC(1140)
-FUNC(1141)
-FUNC(1142)
-FUNC(1143)
-FUNC(1144)
-FUNC(1145)
-FUNC(1146)
-FUNC(1147)
-FUNC(1148)
-FUNC(1149)
-FUNC(1150)
-FUNC(1151)
-FUNC(1152)
-FUNC(1153)
-FUNC(1154)
-FUNC(1155)
-FUNC(1156)
-FUNC(1157)
-FUNC(1158)
-FUNC(1159)
-FUNC(1160)
-FUNC(1161)
-FUNC(1162)
-FUNC(1163)
-FUNC(1164)
-FUNC(1165)
-FUNC(1166)
-FUNC(1167)
-FUNC(1168)
-FUNC(1169)
-FUNC(1170)
-FUNC(1171)
-FUNC(1172)
-FUNC(1173)
-FUNC(1174)
-FUNC(1175)
-FUNC(1176)
-FUNC(1177)
-FUNC(1178)
-FUNC(1179)
-FUNC(1180)
-FUNC(1181)
-FUNC(1182)
-FUNC(1183)
-FUNC(1184)
-FUNC(1185)
-FUNC(1186)
-FUNC(1187)
-FUNC(1188)
-FUNC(1189)
-FUNC(1190)
-FUNC(1191)
-FUNC(1192)
-FUNC(1193)
-FUNC(1194)
-FUNC(1195)
-FUNC(1196)
-FUNC(1197)
-FUNC(1198)
-FUNC(1199)
-FUNC(1200)
-FUNC(1201)
-FUNC(1202)
-FUNC(1203)
-FUNC(1204)
-FUNC(1205)
-FUNC(1206)
-FUNC(1207)
-FUNC(1208)
-FUNC(1209)
-FUNC(1210)
-FUNC(1211)
-FUNC(1212)
-FUNC(1213)
-FUNC(1214)
-FUNC(1215)
-FUNC(1216)
-FUNC(1217)
-FUNC(1218)
-FUNC(1219)
-FUNC(1220)
-FUNC(1221)
-FUNC(1222)
-FUNC(1223)
-FUNC(1224)
-FUNC(1225)
-FUNC(1226)
-FUNC(1227)
-FUNC(1228)
-FUNC(1229)
-FUNC(1230)
-FUNC(1231)
-FUNC(1232)
-FUNC(1233)
-FUNC(1234)
-FUNC(1235)
-FUNC(1236)
-FUNC(1237)
-FUNC(1238)
-FUNC(1239)
-FUNC(1240)
-FUNC(1241)
-FUNC(1242)
-FUNC(1243)
-FUNC(1244)
-FUNC(1245)
-FUNC(1246)
-FUNC(1247)
-FUNC(1248)
-FUNC(1249)
-FUNC(1250)
-FUNC(1251)
-FUNC(1252)
-FUNC(1253)
-FUNC(1254)
-FUNC(1255)
-FUNC(1256)
-FUNC(1257)
-FUNC(1258)
-FUNC(1259)
-FUNC(1260)
-FUNC(1261)
-FUNC(1262)
-FUNC(1263)
-FUNC(1264)
-FUNC(1265)
-FUNC(1266)
-FUNC(1267)
-FUNC(1268)
-FUNC(1269)
-FUNC(1270)
-FUNC(1271)
-FUNC(1272)
-FUNC(1273)
-FUNC(1274)
-FUNC(1275)
-FUNC(1276)
-FUNC(1277)
-FUNC(1278)
-FUNC(1279)
-FUNC(1280)
-FUNC(1281)
-FUNC(1282)
-FUNC(1283)
-FUNC(1284)
-FUNC(1285)
-FUNC(1286)
-FUNC(1287)
-FUNC(1288)
-FUNC(1289)
-FUNC(1290)
-FUNC(1291)
-FUNC(1292)
-FUNC(1293)
-FUNC(1294)
-FUNC(1295)
-FUNC(1296)
-FUNC(1297)
-FUNC(1298)
-FUNC(1299)
-FUNC(1300)
-FUNC(1301)
-FUNC(1302)
-FUNC(1303)
-FUNC(1304)
-FUNC(1305)
-FUNC(1306)
-FUNC(1307)
-FUNC(1308)
-FUNC(1309)
-FUNC(1310)
-FUNC(1311)
-FUNC(1312)
-FUNC(1313)
-FUNC(1314)
-FUNC(1315)
-FUNC(1316)
-FUNC(1317)
-FUNC(1318)
-FUNC(1319)
-FUNC(1320)
-FUNC(1321)
-FUNC(1322)
-FUNC(1323)
-FUNC(1324)
-FUNC(1325)
-FUNC(1326)
-FUNC(1327)
-FUNC(1328)
-FUNC(1329)
-FUNC(1330)
-FUNC(1331)
-FUNC(1332)
-FUNC(1333)
-FUNC(1334)
-FUNC(1335)
-FUNC(1336)
-FUNC(1337)
-FUNC(1338)
-FUNC(1339)
-FUNC(1340)
-FUNC(1341)
-FUNC(1342)
-FUNC(1343)
-FUNC(1344)
-FUNC(1345)
-FUNC(1346)
-FUNC(1347)
-FUNC(1348)
-FUNC(1349)
-FUNC(1350)
-FUNC(1351)
-FUNC(1352)
-FUNC(1353)
-FUNC(1354)
-FUNC(1355)
-FUNC(1356)
-FUNC(1357)
-FUNC(1358)
-FUNC(1359)
-FUNC(1360)
-FUNC(1361)
-FUNC(1362)
-FUNC(1363)
-FUNC(1364)
-FUNC(1365)
-FUNC(1366)
-FUNC(1367)
-FUNC(1368)
-FUNC(1369)
-FUNC(1370)
-FUNC(1371)
-FUNC(1372)
-FUNC(1373)
-FUNC(1374)
-FUNC(1375)
-FUNC(1376)
-FUNC(1377)
-FUNC(1378)
-FUNC(1379)
-FUNC(1380)
-FUNC(1381)
-FUNC(1382)
-FUNC(1383)
-FUNC(1384)
-FUNC(1385)
-FUNC(1386)
-FUNC(1387)
-FUNC(1388)
-FUNC(1389)
-FUNC(1390)
-FUNC(1391)
-FUNC(1392)
-FUNC(1393)
-FUNC(1394)
-FUNC(1395)
-FUNC(1396)
-FUNC(1397)
-FUNC(1398)
-FUNC(1399)
-FUNC(1400)
-FUNC(1401)
-FUNC(1402)
-FUNC(1403)
-FUNC(1404)
-FUNC(1405)
-FUNC(1406)
-FUNC(1407)
-FUNC(1408)
-FUNC(1409)
-FUNC(1410)
-FUNC(1411)
-FUNC(1412)
-FUNC(1413)
-FUNC(1414)
-FUNC(1415)
-FUNC(1416)
-FUNC(1417)
-FUNC(1418)
-FUNC(1419)
-FUNC(1420)
-FUNC(1421)
-FUNC(1422)
-FUNC(1423)
-FUNC(1424)
-FUNC(1425)
-FUNC(1426)
-FUNC(1427)
-FUNC(1428)
-FUNC(1429)
-FUNC(1430)
-FUNC(1431)
-FUNC(1432)
-FUNC(1433)
-FUNC(1434)
-FUNC(1435)
-FUNC(1436)
-FUNC(1437)
-FUNC(1438)
-FUNC(1439)
-FUNC(1440)
-FUNC(1441)
-FUNC(1442)
-FUNC(1443)
-FUNC(1444)
-FUNC(1445)
-FUNC(1446)
-FUNC(1447)
-FUNC(1448)
-FUNC(1449)
-FUNC(1450)
-FUNC(1451)
-FUNC(1452)
-FUNC(1453)
-FUNC(1454)
-FUNC(1455)
-FUNC(1456)
-FUNC(1457)
-FUNC(1458)
-FUNC(1459)
-FUNC(1460)
-FUNC(1461)
-FUNC(1462)
-FUNC(1463)
-FUNC(1464)
-FUNC(1465)
-FUNC(1466)
-FUNC(1467)
-FUNC(1468)
-FUNC(1469)
-FUNC(1470)
-FUNC(1471)
-FUNC(1472)
-FUNC(1473)
-FUNC(1474)
-FUNC(1475)
-FUNC(1476)
-FUNC(1477)
-FUNC(1478)
-FUNC(1479)
-FUNC(1480)
-FUNC(1481)
-FUNC(1482)
-FUNC(1483)
-FUNC(1484)
-FUNC(1485)
-FUNC(1486)
-FUNC(1487)
-FUNC(1488)
-FUNC(1489)
-FUNC(1490)
-FUNC(1491)
-FUNC(1492)
-FUNC(1493)
-FUNC(1494)
-FUNC(1495)
-FUNC(1496)
-FUNC(1497)
-FUNC(1498)
-FUNC(1499)
-FUNC(1500)
-FUNC(1501)
-FUNC(1502)
-FUNC(1503)
-FUNC(1504)
-FUNC(1505)
-FUNC(1506)
-FUNC(1507)
-FUNC(1508)
-FUNC(1509)
-FUNC(1510)
-FUNC(1511)
-FUNC(1512)
-FUNC(1513)
-FUNC(1514)
-FUNC(1515)
-FUNC(1516)
-FUNC(1517)
-FUNC(1518)
-FUNC(1519)
-FUNC(1520)
-FUNC(1521)
-FUNC(1522)
-FUNC(1523)
-FUNC(1524)
-FUNC(1525)
-FUNC(1526)
-FUNC(1527)
-FUNC(1528)
-FUNC(1529)
-FUNC(1530)
-FUNC(1531)
-FUNC(1532)
-FUNC(1533)
-FUNC(1534)
-FUNC(1535)
-FUNC(1536)
-FUNC(1537)
-FUNC(1538)
-FUNC(1539)
-FUNC(1540)
-FUNC(1541)
-FUNC(1542)
-FUNC(1543)
-FUNC(1544)
-FUNC(1545)
-FUNC(1546)
-FUNC(1547)
-FUNC(1548)
-FUNC(1549)
-FUNC(1550)
-FUNC(1551)
-FUNC(1552)
-FUNC(1553)
-FUNC(1554)
-FUNC(1555)
-FUNC(1556)
-FUNC(1557)
-FUNC(1558)
-FUNC(1559)
-FUNC(1560)
-FUNC(1561)
-FUNC(1562)
-FUNC(1563)
-FUNC(1564)
-FUNC(1565)
-FUNC(1566)
-FUNC(1567)
-FUNC(1568)
-FUNC(1569)
-FUNC(1570)
-FUNC(1571)
-FUNC(1572)
-FUNC(1573)
-FUNC(1574)
-FUNC(1575)
-FUNC(1576)
-FUNC(1577)
-FUNC(1578)
-FUNC(1579)
-FUNC(1580)
-FUNC(1581)
-FUNC(1582)
-FUNC(1583)
-FUNC(1584)
-FUNC(1585)
-FUNC(1586)
-FUNC(1587)
-FUNC(1588)
-FUNC(1589)
-FUNC(1590)
-FUNC(1591)
-FUNC(1592)
-FUNC(1593)
-FUNC(1594)
-FUNC(1595)
-FUNC(1596)
-FUNC(1597)
-FUNC(1598)
-FUNC(1599)
-FUNC(1600)
-FUNC(1601)
-FUNC(1602)
-FUNC(1603)
-FUNC(1604)
-FUNC(1605)
-FUNC(1606)
-FUNC(1607)
-FUNC(1608)
-FUNC(1609)
-FUNC(1610)
-FUNC(1611)
-FUNC(1612)
-FUNC(1613)
-FUNC(1614)
-FUNC(1615)
-FUNC(1616)
-FUNC(1617)
-FUNC(1618)
-FUNC(1619)
-FUNC(1620)
-FUNC(1621)
-FUNC(1622)
-FUNC(1623)
-FUNC(1624)
-FUNC(1625)
-FUNC(1626)
-FUNC(1627)
-FUNC(1628)
-FUNC(1629)
-FUNC(1630)
-FUNC(1631)
-FUNC(1632)
-FUNC(1633)
-FUNC(1634)
-FUNC(1635)
-FUNC(1636)
-FUNC(1637)
-FUNC(1638)
-FUNC(1639)
-FUNC(1640)
-FUNC(1641)
-FUNC(1642)
-FUNC(1643)
-FUNC(1644)
-FUNC(1645)
-FUNC(1646)
-FUNC(1647)
-FUNC(1648)
-FUNC(1649)
-FUNC(1650)
-FUNC(1651)
-FUNC(1652)
-FUNC(1653)
-FUNC(1654)
-FUNC(1655)
-FUNC(1656)
-FUNC(1657)
-FUNC(1658)
-FUNC(1659)
-FUNC(1660)
-FUNC(1661)
-FUNC(1662)
-FUNC(1663)
-FUNC(1664)
-FUNC(1665)
-FUNC(1666)
-FUNC(1667)
-FUNC(1668)
-FUNC(1669)
-FUNC(1670)
-FUNC(1671)
-FUNC(1672)
-FUNC(1673)
-FUNC(1674)
-FUNC(1675)
-FUNC(1676)
-FUNC(1677)
-FUNC(1678)
-FUNC(1679)
-FUNC(1680)
-FUNC(1681)
-FUNC(1682)
-FUNC(1683)
-FUNC(1684)
-FUNC(1685)
-FUNC(1686)
-FUNC(1687)
-FUNC(1688)
-FUNC(1689)
-FUNC(1690)
-FUNC(1691)
-FUNC(1692)
-FUNC(1693)
-FUNC(1694)
-FUNC(1695)
-FUNC(1696)
-FUNC(1697)
-FUNC(1698)
-FUNC(1699)
-FUNC(1700)
-FUNC(1701)
-FUNC(1702)
-FUNC(1703)
-FUNC(1704)
-FUNC(1705)
-FUNC(1706)
-FUNC(1707)
-FUNC(1708)
-FUNC(1709)
-FUNC(1710)
-FUNC(1711)
-FUNC(1712)
-FUNC(1713)
-FUNC(1714)
-FUNC(1715)
-FUNC(1716)
-FUNC(1717)
-FUNC(1718)
-FUNC(1719)
-FUNC(1720)
-FUNC(1721)
-FUNC(1722)
-FUNC(1723)
-FUNC(1724)
-FUNC(1725)
-FUNC(1726)
-FUNC(1727)
-FUNC(1728)
-FUNC(1729)
-FUNC(1730)
-FUNC(1731)
-FUNC(1732)
-FUNC(1733)
-FUNC(1734)
-FUNC(1735)
-FUNC(1736)
-FUNC(1737)
-FUNC(1738)
-FUNC(1739)
-FUNC(1740)
-FUNC(1741)
-FUNC(1742)
-FUNC(1743)
-FUNC(1744)
-FUNC(1745)
-FUNC(1746)
-FUNC(1747)
-FUNC(1748)
-FUNC(1749)
-FUNC(1750)
-FUNC(1751)
-FUNC(1752)
-FUNC(1753)
-FUNC(1754)
-FUNC(1755)
-FUNC(1756)
-FUNC(1757)
-FUNC(1758)
-FUNC(1759)
-FUNC(1760)
-FUNC(1761)
-FUNC(1762)
-FUNC(1763)
-FUNC(1764)
-FUNC(1765)
-FUNC(1766)
-FUNC(1767)
-FUNC(1768)
-FUNC(1769)
-FUNC(1770)
-FUNC(1771)
-FUNC(1772)
-FUNC(1773)
-FUNC(1774)
-FUNC(1775)
-FUNC(1776)
-FUNC(1777)
-FUNC(1778)
-FUNC(1779)
-FUNC(1780)
-FUNC(1781)
-FUNC(1782)
-FUNC(1783)
-FUNC(1784)
-FUNC(1785)
-FUNC(1786)
-FUNC(1787)
-FUNC(1788)
-FUNC(1789)
-FUNC(1790)
-FUNC(1791)
-FUNC(1792)
-FUNC(1793)
-FUNC(1794)
-FUNC(1795)
-FUNC(1796)
-FUNC(1797)
-FUNC(1798)
-FUNC(1799)
-FUNC(1800)
-FUNC(1801)
-FUNC(1802)
-FUNC(1803)
-FUNC(1804)
-FUNC(1805)
-FUNC(1806)
-FUNC(1807)
-FUNC(1808)
-FUNC(1809)
-FUNC(1810)
-FUNC(1811)
-FUNC(1812)
-FUNC(1813)
-FUNC(1814)
-FUNC(1815)
-FUNC(1816)
-FUNC(1817)
-FUNC(1818)
-FUNC(1819)
-FUNC(1820)
-FUNC(1821)
-FUNC(1822)
-FUNC(1823)
-FUNC(1824)
-FUNC(1825)
-FUNC(1826)
-FUNC(1827)
-FUNC(1828)
-FUNC(1829)
-FUNC(1830)
-FUNC(1831)
-FUNC(1832)
-FUNC(1833)
-FUNC(1834)
-FUNC(1835)
-FUNC(1836)
-FUNC(1837)
-FUNC(1838)
-FUNC(1839)
-FUNC(1840)
-FUNC(1841)
-FUNC(1842)
-FUNC(1843)
-FUNC(1844)
-FUNC(1845)
-FUNC(1846)
-FUNC(1847)
-FUNC(1848)
-FUNC(1849)
-FUNC(1850)
-FUNC(1851)
-FUNC(1852)
-FUNC(1853)
-FUNC(1854)
-FUNC(1855)
-FUNC(1856)
-FUNC(1857)
-FUNC(1858)
-FUNC(1859)
-FUNC(1860)
-FUNC(1861)
-FUNC(1862)
-FUNC(1863)
-FUNC(1864)
-FUNC(1865)
-FUNC(1866)
-FUNC(1867)
-FUNC(1868)
-FUNC(1869)
-FUNC(1870)
-FUNC(1871)
-FUNC(1872)
-FUNC(1873)
-FUNC(1874)
-FUNC(1875)
-FUNC(1876)
-FUNC(1877)
-FUNC(1878)
-FUNC(1879)
-FUNC(1880)
-FUNC(1881)
-FUNC(1882)
-FUNC(1883)
-FUNC(1884)
-FUNC(1885)
-FUNC(1886)
-FUNC(1887)
-FUNC(1888)
-FUNC(1889)
-FUNC(1890)
-FUNC(1891)
-FUNC(1892)
-FUNC(1893)
-FUNC(1894)
-FUNC(1895)
-FUNC(1896)
-FUNC(1897)
-FUNC(1898)
-FUNC(1899)
-FUNC(1900)
-FUNC(1901)
-FUNC(1902)
-FUNC(1903)
-FUNC(1904)
-FUNC(1905)
-FUNC(1906)
-FUNC(1907)
-FUNC(1908)
-FUNC(1909)
-FUNC(1910)
-FUNC(1911)
-FUNC(1912)
-FUNC(1913)
-FUNC(1914)
-FUNC(1915)
-FUNC(1916)
-FUNC(1917)
-FUNC(1918)
-FUNC(1919)
-FUNC(1920)
-FUNC(1921)
-FUNC(1922)
-FUNC(1923)
-FUNC(1924)
-FUNC(1925)
-FUNC(1926)
-FUNC(1927)
-FUNC(1928)
-FUNC(1929)
-FUNC(1930)
-FUNC(1931)
-FUNC(1932)
-FUNC(1933)
-FUNC(1934)
-FUNC(1935)
-FUNC(1936)
-FUNC(1937)
-FUNC(1938)
-FUNC(1939)
-FUNC(1940)
-FUNC(1941)
-FUNC(1942)
-FUNC(1943)
-FUNC(1944)
-FUNC(1945)
-FUNC(1946)
-FUNC(1947)
-FUNC(1948)
-FUNC(1949)
-FUNC(1950)
-FUNC(1951)
-FUNC(1952)
-FUNC(1953)
-FUNC(1954)
-FUNC(1955)
-FUNC(1956)
-FUNC(1957)
-FUNC(1958)
-FUNC(1959)
-FUNC(1960)
-FUNC(1961)
-FUNC(1962)
-FUNC(1963)
-FUNC(1964)
-FUNC(1965)
-FUNC(1966)
-FUNC(1967)
-FUNC(1968)
-FUNC(1969)
-FUNC(1970)
-FUNC(1971)
-FUNC(1972)
-FUNC(1973)
-FUNC(1974)
-FUNC(1975)
-FUNC(1976)
-FUNC(1977)
-FUNC(1978)
-FUNC(1979)
-FUNC(1980)
-FUNC(1981)
-FUNC(1982)
-FUNC(1983)
-FUNC(1984)
-FUNC(1985)
-FUNC(1986)
-FUNC(1987)
-FUNC(1988)
-FUNC(1989)
-FUNC(1990)
-FUNC(1991)
-FUNC(1992)
-FUNC(1993)
-FUNC(1994)
-FUNC(1995)
-FUNC(1996)
-FUNC(1997)
-FUNC(1998)
-FUNC(1999)
-FUNC(2000)
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* 
+This is jsut some "compiler fibre" for the compiler to chew
+on as part of a compilation performace test
+*/
+
+#define FUNC(VARIABLE)	\
+int function_##VARIABLE(void)	\
+{	\
+	int x,y,z;	\
+	x=VARIABLE+30* 10-1;	\
+	y=x*4;	\
+	\
+	\
+	x=y+1;	\
+	\
+	int a[VARIABLE];	\
+	\
+	\
+	\
+	for (z=0; z < 1000+VARIABLE; z++)	\
+	{	\
+		x+=a[z];		\
+	}	\
+	\
+	return x;	\
+}
+
+
+
+FUNC(1)
+FUNC(2)
+FUNC(3)
+FUNC(4)
+FUNC(5)
+FUNC(6)
+FUNC(7)
+FUNC(8)
+FUNC(9)
+FUNC(10)
+FUNC(11)
+FUNC(12)
+FUNC(13)
+FUNC(14)
+FUNC(15)
+FUNC(16)
+FUNC(17)
+FUNC(18)
+FUNC(19)
+FUNC(20)
+FUNC(21)
+FUNC(22)
+FUNC(23)
+FUNC(24)
+FUNC(25)
+FUNC(26)
+FUNC(27)
+FUNC(28)
+FUNC(29)
+FUNC(30)
+FUNC(31)
+FUNC(32)
+FUNC(33)
+FUNC(34)
+FUNC(35)
+FUNC(36)
+FUNC(37)
+FUNC(38)
+FUNC(39)
+FUNC(40)
+FUNC(41)
+FUNC(42)
+FUNC(43)
+FUNC(44)
+FUNC(45)
+FUNC(46)
+FUNC(47)
+FUNC(48)
+FUNC(49)
+FUNC(50)
+FUNC(51)
+FUNC(52)
+FUNC(53)
+FUNC(54)
+FUNC(55)
+FUNC(56)
+FUNC(57)
+FUNC(58)
+FUNC(59)
+FUNC(60)
+FUNC(61)
+FUNC(62)
+FUNC(63)
+FUNC(64)
+FUNC(65)
+FUNC(66)
+FUNC(67)
+FUNC(68)
+FUNC(69)
+FUNC(70)
+FUNC(71)
+FUNC(72)
+FUNC(73)
+FUNC(74)
+FUNC(75)
+FUNC(76)
+FUNC(77)
+FUNC(78)
+FUNC(79)
+FUNC(80)
+FUNC(81)
+FUNC(82)
+FUNC(83)
+FUNC(84)
+FUNC(85)
+FUNC(86)
+FUNC(87)
+FUNC(88)
+FUNC(89)
+FUNC(90)
+FUNC(91)
+FUNC(92)
+FUNC(93)
+FUNC(94)
+FUNC(95)
+FUNC(96)
+FUNC(97)
+FUNC(98)
+FUNC(99)
+FUNC(100)
+FUNC(101)
+FUNC(102)
+FUNC(103)
+FUNC(104)
+FUNC(105)
+FUNC(106)
+FUNC(107)
+FUNC(108)
+FUNC(109)
+FUNC(110)
+FUNC(111)
+FUNC(112)
+FUNC(113)
+FUNC(114)
+FUNC(115)
+FUNC(116)
+FUNC(117)
+FUNC(118)
+FUNC(119)
+FUNC(120)
+FUNC(121)
+FUNC(122)
+FUNC(123)
+FUNC(124)
+FUNC(125)
+FUNC(126)
+FUNC(127)
+FUNC(128)
+FUNC(129)
+FUNC(130)
+FUNC(131)
+FUNC(132)
+FUNC(133)
+FUNC(134)
+FUNC(135)
+FUNC(136)
+FUNC(137)
+FUNC(138)
+FUNC(139)
+FUNC(140)
+FUNC(141)
+FUNC(142)
+FUNC(143)
+FUNC(144)
+FUNC(145)
+FUNC(146)
+FUNC(147)
+FUNC(148)
+FUNC(149)
+FUNC(150)
+FUNC(151)
+FUNC(152)
+FUNC(153)
+FUNC(154)
+FUNC(155)
+FUNC(156)
+FUNC(157)
+FUNC(158)
+FUNC(159)
+FUNC(160)
+FUNC(161)
+FUNC(162)
+FUNC(163)
+FUNC(164)
+FUNC(165)
+FUNC(166)
+FUNC(167)
+FUNC(168)
+FUNC(169)
+FUNC(170)
+FUNC(171)
+FUNC(172)
+FUNC(173)
+FUNC(174)
+FUNC(175)
+FUNC(176)
+FUNC(177)
+FUNC(178)
+FUNC(179)
+FUNC(180)
+FUNC(181)
+FUNC(182)
+FUNC(183)
+FUNC(184)
+FUNC(185)
+FUNC(186)
+FUNC(187)
+FUNC(188)
+FUNC(189)
+FUNC(190)
+FUNC(191)
+FUNC(192)
+FUNC(193)
+FUNC(194)
+FUNC(195)
+FUNC(196)
+FUNC(197)
+FUNC(198)
+FUNC(199)
+FUNC(200)
+FUNC(201)
+FUNC(202)
+FUNC(203)
+FUNC(204)
+FUNC(205)
+FUNC(206)
+FUNC(207)
+FUNC(208)
+FUNC(209)
+FUNC(210)
+FUNC(211)
+FUNC(212)
+FUNC(213)
+FUNC(214)
+FUNC(215)
+FUNC(216)
+FUNC(217)
+FUNC(218)
+FUNC(219)
+FUNC(220)
+FUNC(221)
+FUNC(222)
+FUNC(223)
+FUNC(224)
+FUNC(225)
+FUNC(226)
+FUNC(227)
+FUNC(228)
+FUNC(229)
+FUNC(230)
+FUNC(231)
+FUNC(232)
+FUNC(233)
+FUNC(234)
+FUNC(235)
+FUNC(236)
+FUNC(237)
+FUNC(238)
+FUNC(239)
+FUNC(240)
+FUNC(241)
+FUNC(242)
+FUNC(243)
+FUNC(244)
+FUNC(245)
+FUNC(246)
+FUNC(247)
+FUNC(248)
+FUNC(249)
+FUNC(250)
+FUNC(251)
+FUNC(252)
+FUNC(253)
+FUNC(254)
+FUNC(255)
+FUNC(256)
+FUNC(257)
+FUNC(258)
+FUNC(259)
+FUNC(260)
+FUNC(261)
+FUNC(262)
+FUNC(263)
+FUNC(264)
+FUNC(265)
+FUNC(266)
+FUNC(267)
+FUNC(268)
+FUNC(269)
+FUNC(270)
+FUNC(271)
+FUNC(272)
+FUNC(273)
+FUNC(274)
+FUNC(275)
+FUNC(276)
+FUNC(277)
+FUNC(278)
+FUNC(279)
+FUNC(280)
+FUNC(281)
+FUNC(282)
+FUNC(283)
+FUNC(284)
+FUNC(285)
+FUNC(286)
+FUNC(287)
+FUNC(288)
+FUNC(289)
+FUNC(290)
+FUNC(291)
+FUNC(292)
+FUNC(293)
+FUNC(294)
+FUNC(295)
+FUNC(296)
+FUNC(297)
+FUNC(298)
+FUNC(299)
+FUNC(300)
+FUNC(301)
+FUNC(302)
+FUNC(303)
+FUNC(304)
+FUNC(305)
+FUNC(306)
+FUNC(307)
+FUNC(308)
+FUNC(309)
+FUNC(310)
+FUNC(311)
+FUNC(312)
+FUNC(313)
+FUNC(314)
+FUNC(315)
+FUNC(316)
+FUNC(317)
+FUNC(318)
+FUNC(319)
+FUNC(320)
+FUNC(321)
+FUNC(322)
+FUNC(323)
+FUNC(324)
+FUNC(325)
+FUNC(326)
+FUNC(327)
+FUNC(328)
+FUNC(329)
+FUNC(330)
+FUNC(331)
+FUNC(332)
+FUNC(333)
+FUNC(334)
+FUNC(335)
+FUNC(336)
+FUNC(337)
+FUNC(338)
+FUNC(339)
+FUNC(340)
+FUNC(341)
+FUNC(342)
+FUNC(343)
+FUNC(344)
+FUNC(345)
+FUNC(346)
+FUNC(347)
+FUNC(348)
+FUNC(349)
+FUNC(350)
+FUNC(351)
+FUNC(352)
+FUNC(353)
+FUNC(354)
+FUNC(355)
+FUNC(356)
+FUNC(357)
+FUNC(358)
+FUNC(359)
+FUNC(360)
+FUNC(361)
+FUNC(362)
+FUNC(363)
+FUNC(364)
+FUNC(365)
+FUNC(366)
+FUNC(367)
+FUNC(368)
+FUNC(369)
+FUNC(370)
+FUNC(371)
+FUNC(372)
+FUNC(373)
+FUNC(374)
+FUNC(375)
+FUNC(376)
+FUNC(377)
+FUNC(378)
+FUNC(379)
+FUNC(380)
+FUNC(381)
+FUNC(382)
+FUNC(383)
+FUNC(384)
+FUNC(385)
+FUNC(386)
+FUNC(387)
+FUNC(388)
+FUNC(389)
+FUNC(390)
+FUNC(391)
+FUNC(392)
+FUNC(393)
+FUNC(394)
+FUNC(395)
+FUNC(396)
+FUNC(397)
+FUNC(398)
+FUNC(399)
+FUNC(400)
+FUNC(401)
+FUNC(402)
+FUNC(403)
+FUNC(404)
+FUNC(405)
+FUNC(406)
+FUNC(407)
+FUNC(408)
+FUNC(409)
+FUNC(410)
+FUNC(411)
+FUNC(412)
+FUNC(413)
+FUNC(414)
+FUNC(415)
+FUNC(416)
+FUNC(417)
+FUNC(418)
+FUNC(419)
+FUNC(420)
+FUNC(421)
+FUNC(422)
+FUNC(423)
+FUNC(424)
+FUNC(425)
+FUNC(426)
+FUNC(427)
+FUNC(428)
+FUNC(429)
+FUNC(430)
+FUNC(431)
+FUNC(432)
+FUNC(433)
+FUNC(434)
+FUNC(435)
+FUNC(436)
+FUNC(437)
+FUNC(438)
+FUNC(439)
+FUNC(440)
+FUNC(441)
+FUNC(442)
+FUNC(443)
+FUNC(444)
+FUNC(445)
+FUNC(446)
+FUNC(447)
+FUNC(448)
+FUNC(449)
+FUNC(450)
+FUNC(451)
+FUNC(452)
+FUNC(453)
+FUNC(454)
+FUNC(455)
+FUNC(456)
+FUNC(457)
+FUNC(458)
+FUNC(459)
+FUNC(460)
+FUNC(461)
+FUNC(462)
+FUNC(463)
+FUNC(464)
+FUNC(465)
+FUNC(466)
+FUNC(467)
+FUNC(468)
+FUNC(469)
+FUNC(470)
+FUNC(471)
+FUNC(472)
+FUNC(473)
+FUNC(474)
+FUNC(475)
+FUNC(476)
+FUNC(477)
+FUNC(478)
+FUNC(479)
+FUNC(480)
+FUNC(481)
+FUNC(482)
+FUNC(483)
+FUNC(484)
+FUNC(485)
+FUNC(486)
+FUNC(487)
+FUNC(488)
+FUNC(489)
+FUNC(490)
+FUNC(491)
+FUNC(492)
+FUNC(493)
+FUNC(494)
+FUNC(495)
+FUNC(496)
+FUNC(497)
+FUNC(498)
+FUNC(499)
+FUNC(500)
+FUNC(501)
+FUNC(502)
+FUNC(503)
+FUNC(504)
+FUNC(505)
+FUNC(506)
+FUNC(507)
+FUNC(508)
+FUNC(509)
+FUNC(510)
+FUNC(511)
+FUNC(512)
+FUNC(513)
+FUNC(514)
+FUNC(515)
+FUNC(516)
+FUNC(517)
+FUNC(518)
+FUNC(519)
+FUNC(520)
+FUNC(521)
+FUNC(522)
+FUNC(523)
+FUNC(524)
+FUNC(525)
+FUNC(526)
+FUNC(527)
+FUNC(528)
+FUNC(529)
+FUNC(530)
+FUNC(531)
+FUNC(532)
+FUNC(533)
+FUNC(534)
+FUNC(535)
+FUNC(536)
+FUNC(537)
+FUNC(538)
+FUNC(539)
+FUNC(540)
+FUNC(541)
+FUNC(542)
+FUNC(543)
+FUNC(544)
+FUNC(545)
+FUNC(546)
+FUNC(547)
+FUNC(548)
+FUNC(549)
+FUNC(550)
+FUNC(551)
+FUNC(552)
+FUNC(553)
+FUNC(554)
+FUNC(555)
+FUNC(556)
+FUNC(557)
+FUNC(558)
+FUNC(559)
+FUNC(560)
+FUNC(561)
+FUNC(562)
+FUNC(563)
+FUNC(564)
+FUNC(565)
+FUNC(566)
+FUNC(567)
+FUNC(568)
+FUNC(569)
+FUNC(570)
+FUNC(571)
+FUNC(572)
+FUNC(573)
+FUNC(574)
+FUNC(575)
+FUNC(576)
+FUNC(577)
+FUNC(578)
+FUNC(579)
+FUNC(580)
+FUNC(581)
+FUNC(582)
+FUNC(583)
+FUNC(584)
+FUNC(585)
+FUNC(586)
+FUNC(587)
+FUNC(588)
+FUNC(589)
+FUNC(590)
+FUNC(591)
+FUNC(592)
+FUNC(593)
+FUNC(594)
+FUNC(595)
+FUNC(596)
+FUNC(597)
+FUNC(598)
+FUNC(599)
+FUNC(600)
+FUNC(601)
+FUNC(602)
+FUNC(603)
+FUNC(604)
+FUNC(605)
+FUNC(606)
+FUNC(607)
+FUNC(608)
+FUNC(609)
+FUNC(610)
+FUNC(611)
+FUNC(612)
+FUNC(613)
+FUNC(614)
+FUNC(615)
+FUNC(616)
+FUNC(617)
+FUNC(618)
+FUNC(619)
+FUNC(620)
+FUNC(621)
+FUNC(622)
+FUNC(623)
+FUNC(624)
+FUNC(625)
+FUNC(626)
+FUNC(627)
+FUNC(628)
+FUNC(629)
+FUNC(630)
+FUNC(631)
+FUNC(632)
+FUNC(633)
+FUNC(634)
+FUNC(635)
+FUNC(636)
+FUNC(637)
+FUNC(638)
+FUNC(639)
+FUNC(640)
+FUNC(641)
+FUNC(642)
+FUNC(643)
+FUNC(644)
+FUNC(645)
+FUNC(646)
+FUNC(647)
+FUNC(648)
+FUNC(649)
+FUNC(650)
+FUNC(651)
+FUNC(652)
+FUNC(653)
+FUNC(654)
+FUNC(655)
+FUNC(656)
+FUNC(657)
+FUNC(658)
+FUNC(659)
+FUNC(660)
+FUNC(661)
+FUNC(662)
+FUNC(663)
+FUNC(664)
+FUNC(665)
+FUNC(666)
+FUNC(667)
+FUNC(668)
+FUNC(669)
+FUNC(670)
+FUNC(671)
+FUNC(672)
+FUNC(673)
+FUNC(674)
+FUNC(675)
+FUNC(676)
+FUNC(677)
+FUNC(678)
+FUNC(679)
+FUNC(680)
+FUNC(681)
+FUNC(682)
+FUNC(683)
+FUNC(684)
+FUNC(685)
+FUNC(686)
+FUNC(687)
+FUNC(688)
+FUNC(689)
+FUNC(690)
+FUNC(691)
+FUNC(692)
+FUNC(693)
+FUNC(694)
+FUNC(695)
+FUNC(696)
+FUNC(697)
+FUNC(698)
+FUNC(699)
+FUNC(700)
+FUNC(701)
+FUNC(702)
+FUNC(703)
+FUNC(704)
+FUNC(705)
+FUNC(706)
+FUNC(707)
+FUNC(708)
+FUNC(709)
+FUNC(710)
+FUNC(711)
+FUNC(712)
+FUNC(713)
+FUNC(714)
+FUNC(715)
+FUNC(716)
+FUNC(717)
+FUNC(718)
+FUNC(719)
+FUNC(720)
+FUNC(721)
+FUNC(722)
+FUNC(723)
+FUNC(724)
+FUNC(725)
+FUNC(726)
+FUNC(727)
+FUNC(728)
+FUNC(729)
+FUNC(730)
+FUNC(731)
+FUNC(732)
+FUNC(733)
+FUNC(734)
+FUNC(735)
+FUNC(736)
+FUNC(737)
+FUNC(738)
+FUNC(739)
+FUNC(740)
+FUNC(741)
+FUNC(742)
+FUNC(743)
+FUNC(744)
+FUNC(745)
+FUNC(746)
+FUNC(747)
+FUNC(748)
+FUNC(749)
+FUNC(750)
+FUNC(751)
+FUNC(752)
+FUNC(753)
+FUNC(754)
+FUNC(755)
+FUNC(756)
+FUNC(757)
+FUNC(758)
+FUNC(759)
+FUNC(760)
+FUNC(761)
+FUNC(762)
+FUNC(763)
+FUNC(764)
+FUNC(765)
+FUNC(766)
+FUNC(767)
+FUNC(768)
+FUNC(769)
+FUNC(770)
+FUNC(771)
+FUNC(772)
+FUNC(773)
+FUNC(774)
+FUNC(775)
+FUNC(776)
+FUNC(777)
+FUNC(778)
+FUNC(779)
+FUNC(780)
+FUNC(781)
+FUNC(782)
+FUNC(783)
+FUNC(784)
+FUNC(785)
+FUNC(786)
+FUNC(787)
+FUNC(788)
+FUNC(789)
+FUNC(790)
+FUNC(791)
+FUNC(792)
+FUNC(793)
+FUNC(794)
+FUNC(795)
+FUNC(796)
+FUNC(797)
+FUNC(798)
+FUNC(799)
+FUNC(800)
+FUNC(801)
+FUNC(802)
+FUNC(803)
+FUNC(804)
+FUNC(805)
+FUNC(806)
+FUNC(807)
+FUNC(808)
+FUNC(809)
+FUNC(810)
+FUNC(811)
+FUNC(812)
+FUNC(813)
+FUNC(814)
+FUNC(815)
+FUNC(816)
+FUNC(817)
+FUNC(818)
+FUNC(819)
+FUNC(820)
+FUNC(821)
+FUNC(822)
+FUNC(823)
+FUNC(824)
+FUNC(825)
+FUNC(826)
+FUNC(827)
+FUNC(828)
+FUNC(829)
+FUNC(830)
+FUNC(831)
+FUNC(832)
+FUNC(833)
+FUNC(834)
+FUNC(835)
+FUNC(836)
+FUNC(837)
+FUNC(838)
+FUNC(839)
+FUNC(840)
+FUNC(841)
+FUNC(842)
+FUNC(843)
+FUNC(844)
+FUNC(845)
+FUNC(846)
+FUNC(847)
+FUNC(848)
+FUNC(849)
+FUNC(850)
+FUNC(851)
+FUNC(852)
+FUNC(853)
+FUNC(854)
+FUNC(855)
+FUNC(856)
+FUNC(857)
+FUNC(858)
+FUNC(859)
+FUNC(860)
+FUNC(861)
+FUNC(862)
+FUNC(863)
+FUNC(864)
+FUNC(865)
+FUNC(866)
+FUNC(867)
+FUNC(868)
+FUNC(869)
+FUNC(870)
+FUNC(871)
+FUNC(872)
+FUNC(873)
+FUNC(874)
+FUNC(875)
+FUNC(876)
+FUNC(877)
+FUNC(878)
+FUNC(879)
+FUNC(880)
+FUNC(881)
+FUNC(882)
+FUNC(883)
+FUNC(884)
+FUNC(885)
+FUNC(886)
+FUNC(887)
+FUNC(888)
+FUNC(889)
+FUNC(890)
+FUNC(891)
+FUNC(892)
+FUNC(893)
+FUNC(894)
+FUNC(895)
+FUNC(896)
+FUNC(897)
+FUNC(898)
+FUNC(899)
+FUNC(900)
+FUNC(901)
+FUNC(902)
+FUNC(903)
+FUNC(904)
+FUNC(905)
+FUNC(906)
+FUNC(907)
+FUNC(908)
+FUNC(909)
+FUNC(910)
+FUNC(911)
+FUNC(912)
+FUNC(913)
+FUNC(914)
+FUNC(915)
+FUNC(916)
+FUNC(917)
+FUNC(918)
+FUNC(919)
+FUNC(920)
+FUNC(921)
+FUNC(922)
+FUNC(923)
+FUNC(924)
+FUNC(925)
+FUNC(926)
+FUNC(927)
+FUNC(928)
+FUNC(929)
+FUNC(930)
+FUNC(931)
+FUNC(932)
+FUNC(933)
+FUNC(934)
+FUNC(935)
+FUNC(936)
+FUNC(937)
+FUNC(938)
+FUNC(939)
+FUNC(940)
+FUNC(941)
+FUNC(942)
+FUNC(943)
+FUNC(944)
+FUNC(945)
+FUNC(946)
+FUNC(947)
+FUNC(948)
+FUNC(949)
+FUNC(950)
+FUNC(951)
+FUNC(952)
+FUNC(953)
+FUNC(954)
+FUNC(955)
+FUNC(956)
+FUNC(957)
+FUNC(958)
+FUNC(959)
+FUNC(960)
+FUNC(961)
+FUNC(962)
+FUNC(963)
+FUNC(964)
+FUNC(965)
+FUNC(966)
+FUNC(967)
+FUNC(968)
+FUNC(969)
+FUNC(970)
+FUNC(971)
+FUNC(972)
+FUNC(973)
+FUNC(974)
+FUNC(975)
+FUNC(976)
+FUNC(977)
+FUNC(978)
+FUNC(979)
+FUNC(980)
+FUNC(981)
+FUNC(982)
+FUNC(983)
+FUNC(984)
+FUNC(985)
+FUNC(986)
+FUNC(987)
+FUNC(988)
+FUNC(989)
+FUNC(990)
+FUNC(991)
+FUNC(992)
+FUNC(993)
+FUNC(994)
+FUNC(995)
+FUNC(996)
+FUNC(997)
+FUNC(998)
+FUNC(999)
+FUNC(1000)
+FUNC(1001)
+FUNC(1002)
+FUNC(1003)
+FUNC(1004)
+FUNC(1005)
+FUNC(1006)
+FUNC(1007)
+FUNC(1008)
+FUNC(1009)
+FUNC(1010)
+FUNC(1011)
+FUNC(1012)
+FUNC(1013)
+FUNC(1014)
+FUNC(1015)
+FUNC(1016)
+FUNC(1017)
+FUNC(1018)
+FUNC(1019)
+FUNC(1020)
+FUNC(1021)
+FUNC(1022)
+FUNC(1023)
+FUNC(1024)
+FUNC(1025)
+FUNC(1026)
+FUNC(1027)
+FUNC(1028)
+FUNC(1029)
+FUNC(1030)
+FUNC(1031)
+FUNC(1032)
+FUNC(1033)
+FUNC(1034)
+FUNC(1035)
+FUNC(1036)
+FUNC(1037)
+FUNC(1038)
+FUNC(1039)
+FUNC(1040)
+FUNC(1041)
+FUNC(1042)
+FUNC(1043)
+FUNC(1044)
+FUNC(1045)
+FUNC(1046)
+FUNC(1047)
+FUNC(1048)
+FUNC(1049)
+FUNC(1050)
+FUNC(1051)
+FUNC(1052)
+FUNC(1053)
+FUNC(1054)
+FUNC(1055)
+FUNC(1056)
+FUNC(1057)
+FUNC(1058)
+FUNC(1059)
+FUNC(1060)
+FUNC(1061)
+FUNC(1062)
+FUNC(1063)
+FUNC(1064)
+FUNC(1065)
+FUNC(1066)
+FUNC(1067)
+FUNC(1068)
+FUNC(1069)
+FUNC(1070)
+FUNC(1071)
+FUNC(1072)
+FUNC(1073)
+FUNC(1074)
+FUNC(1075)
+FUNC(1076)
+FUNC(1077)
+FUNC(1078)
+FUNC(1079)
+FUNC(1080)
+FUNC(1081)
+FUNC(1082)
+FUNC(1083)
+FUNC(1084)
+FUNC(1085)
+FUNC(1086)
+FUNC(1087)
+FUNC(1088)
+FUNC(1089)
+FUNC(1090)
+FUNC(1091)
+FUNC(1092)
+FUNC(1093)
+FUNC(1094)
+FUNC(1095)
+FUNC(1096)
+FUNC(1097)
+FUNC(1098)
+FUNC(1099)
+FUNC(1100)
+FUNC(1101)
+FUNC(1102)
+FUNC(1103)
+FUNC(1104)
+FUNC(1105)
+FUNC(1106)
+FUNC(1107)
+FUNC(1108)
+FUNC(1109)
+FUNC(1110)
+FUNC(1111)
+FUNC(1112)
+FUNC(1113)
+FUNC(1114)
+FUNC(1115)
+FUNC(1116)
+FUNC(1117)
+FUNC(1118)
+FUNC(1119)
+FUNC(1120)
+FUNC(1121)
+FUNC(1122)
+FUNC(1123)
+FUNC(1124)
+FUNC(1125)
+FUNC(1126)
+FUNC(1127)
+FUNC(1128)
+FUNC(1129)
+FUNC(1130)
+FUNC(1131)
+FUNC(1132)
+FUNC(1133)
+FUNC(1134)
+FUNC(1135)
+FUNC(1136)
+FUNC(1137)
+FUNC(1138)
+FUNC(1139)
+FUNC(1140)
+FUNC(1141)
+FUNC(1142)
+FUNC(1143)
+FUNC(1144)
+FUNC(1145)
+FUNC(1146)
+FUNC(1147)
+FUNC(1148)
+FUNC(1149)
+FUNC(1150)
+FUNC(1151)
+FUNC(1152)
+FUNC(1153)
+FUNC(1154)
+FUNC(1155)
+FUNC(1156)
+FUNC(1157)
+FUNC(1158)
+FUNC(1159)
+FUNC(1160)
+FUNC(1161)
+FUNC(1162)
+FUNC(1163)
+FUNC(1164)
+FUNC(1165)
+FUNC(1166)
+FUNC(1167)
+FUNC(1168)
+FUNC(1169)
+FUNC(1170)
+FUNC(1171)
+FUNC(1172)
+FUNC(1173)
+FUNC(1174)
+FUNC(1175)
+FUNC(1176)
+FUNC(1177)
+FUNC(1178)
+FUNC(1179)
+FUNC(1180)
+FUNC(1181)
+FUNC(1182)
+FUNC(1183)
+FUNC(1184)
+FUNC(1185)
+FUNC(1186)
+FUNC(1187)
+FUNC(1188)
+FUNC(1189)
+FUNC(1190)
+FUNC(1191)
+FUNC(1192)
+FUNC(1193)
+FUNC(1194)
+FUNC(1195)
+FUNC(1196)
+FUNC(1197)
+FUNC(1198)
+FUNC(1199)
+FUNC(1200)
+FUNC(1201)
+FUNC(1202)
+FUNC(1203)
+FUNC(1204)
+FUNC(1205)
+FUNC(1206)
+FUNC(1207)
+FUNC(1208)
+FUNC(1209)
+FUNC(1210)
+FUNC(1211)
+FUNC(1212)
+FUNC(1213)
+FUNC(1214)
+FUNC(1215)
+FUNC(1216)
+FUNC(1217)
+FUNC(1218)
+FUNC(1219)
+FUNC(1220)
+FUNC(1221)
+FUNC(1222)
+FUNC(1223)
+FUNC(1224)
+FUNC(1225)
+FUNC(1226)
+FUNC(1227)
+FUNC(1228)
+FUNC(1229)
+FUNC(1230)
+FUNC(1231)
+FUNC(1232)
+FUNC(1233)
+FUNC(1234)
+FUNC(1235)
+FUNC(1236)
+FUNC(1237)
+FUNC(1238)
+FUNC(1239)
+FUNC(1240)
+FUNC(1241)
+FUNC(1242)
+FUNC(1243)
+FUNC(1244)
+FUNC(1245)
+FUNC(1246)
+FUNC(1247)
+FUNC(1248)
+FUNC(1249)
+FUNC(1250)
+FUNC(1251)
+FUNC(1252)
+FUNC(1253)
+FUNC(1254)
+FUNC(1255)
+FUNC(1256)
+FUNC(1257)
+FUNC(1258)
+FUNC(1259)
+FUNC(1260)
+FUNC(1261)
+FUNC(1262)
+FUNC(1263)
+FUNC(1264)
+FUNC(1265)
+FUNC(1266)
+FUNC(1267)
+FUNC(1268)
+FUNC(1269)
+FUNC(1270)
+FUNC(1271)
+FUNC(1272)
+FUNC(1273)
+FUNC(1274)
+FUNC(1275)
+FUNC(1276)
+FUNC(1277)
+FUNC(1278)
+FUNC(1279)
+FUNC(1280)
+FUNC(1281)
+FUNC(1282)
+FUNC(1283)
+FUNC(1284)
+FUNC(1285)
+FUNC(1286)
+FUNC(1287)
+FUNC(1288)
+FUNC(1289)
+FUNC(1290)
+FUNC(1291)
+FUNC(1292)
+FUNC(1293)
+FUNC(1294)
+FUNC(1295)
+FUNC(1296)
+FUNC(1297)
+FUNC(1298)
+FUNC(1299)
+FUNC(1300)
+FUNC(1301)
+FUNC(1302)
+FUNC(1303)
+FUNC(1304)
+FUNC(1305)
+FUNC(1306)
+FUNC(1307)
+FUNC(1308)
+FUNC(1309)
+FUNC(1310)
+FUNC(1311)
+FUNC(1312)
+FUNC(1313)
+FUNC(1314)
+FUNC(1315)
+FUNC(1316)
+FUNC(1317)
+FUNC(1318)
+FUNC(1319)
+FUNC(1320)
+FUNC(1321)
+FUNC(1322)
+FUNC(1323)
+FUNC(1324)
+FUNC(1325)
+FUNC(1326)
+FUNC(1327)
+FUNC(1328)
+FUNC(1329)
+FUNC(1330)
+FUNC(1331)
+FUNC(1332)
+FUNC(1333)
+FUNC(1334)
+FUNC(1335)
+FUNC(1336)
+FUNC(1337)
+FUNC(1338)
+FUNC(1339)
+FUNC(1340)
+FUNC(1341)
+FUNC(1342)
+FUNC(1343)
+FUNC(1344)
+FUNC(1345)
+FUNC(1346)
+FUNC(1347)
+FUNC(1348)
+FUNC(1349)
+FUNC(1350)
+FUNC(1351)
+FUNC(1352)
+FUNC(1353)
+FUNC(1354)
+FUNC(1355)
+FUNC(1356)
+FUNC(1357)
+FUNC(1358)
+FUNC(1359)
+FUNC(1360)
+FUNC(1361)
+FUNC(1362)
+FUNC(1363)
+FUNC(1364)
+FUNC(1365)
+FUNC(1366)
+FUNC(1367)
+FUNC(1368)
+FUNC(1369)
+FUNC(1370)
+FUNC(1371)
+FUNC(1372)
+FUNC(1373)
+FUNC(1374)
+FUNC(1375)
+FUNC(1376)
+FUNC(1377)
+FUNC(1378)
+FUNC(1379)
+FUNC(1380)
+FUNC(1381)
+FUNC(1382)
+FUNC(1383)
+FUNC(1384)
+FUNC(1385)
+FUNC(1386)
+FUNC(1387)
+FUNC(1388)
+FUNC(1389)
+FUNC(1390)
+FUNC(1391)
+FUNC(1392)
+FUNC(1393)
+FUNC(1394)
+FUNC(1395)
+FUNC(1396)
+FUNC(1397)
+FUNC(1398)
+FUNC(1399)
+FUNC(1400)
+FUNC(1401)
+FUNC(1402)
+FUNC(1403)
+FUNC(1404)
+FUNC(1405)
+FUNC(1406)
+FUNC(1407)
+FUNC(1408)
+FUNC(1409)
+FUNC(1410)
+FUNC(1411)
+FUNC(1412)
+FUNC(1413)
+FUNC(1414)
+FUNC(1415)
+FUNC(1416)
+FUNC(1417)
+FUNC(1418)
+FUNC(1419)
+FUNC(1420)
+FUNC(1421)
+FUNC(1422)
+FUNC(1423)
+FUNC(1424)
+FUNC(1425)
+FUNC(1426)
+FUNC(1427)
+FUNC(1428)
+FUNC(1429)
+FUNC(1430)
+FUNC(1431)
+FUNC(1432)
+FUNC(1433)
+FUNC(1434)
+FUNC(1435)
+FUNC(1436)
+FUNC(1437)
+FUNC(1438)
+FUNC(1439)
+FUNC(1440)
+FUNC(1441)
+FUNC(1442)
+FUNC(1443)
+FUNC(1444)
+FUNC(1445)
+FUNC(1446)
+FUNC(1447)
+FUNC(1448)
+FUNC(1449)
+FUNC(1450)
+FUNC(1451)
+FUNC(1452)
+FUNC(1453)
+FUNC(1454)
+FUNC(1455)
+FUNC(1456)
+FUNC(1457)
+FUNC(1458)
+FUNC(1459)
+FUNC(1460)
+FUNC(1461)
+FUNC(1462)
+FUNC(1463)
+FUNC(1464)
+FUNC(1465)
+FUNC(1466)
+FUNC(1467)
+FUNC(1468)
+FUNC(1469)
+FUNC(1470)
+FUNC(1471)
+FUNC(1472)
+FUNC(1473)
+FUNC(1474)
+FUNC(1475)
+FUNC(1476)
+FUNC(1477)
+FUNC(1478)
+FUNC(1479)
+FUNC(1480)
+FUNC(1481)
+FUNC(1482)
+FUNC(1483)
+FUNC(1484)
+FUNC(1485)
+FUNC(1486)
+FUNC(1487)
+FUNC(1488)
+FUNC(1489)
+FUNC(1490)
+FUNC(1491)
+FUNC(1492)
+FUNC(1493)
+FUNC(1494)
+FUNC(1495)
+FUNC(1496)
+FUNC(1497)
+FUNC(1498)
+FUNC(1499)
+FUNC(1500)
+FUNC(1501)
+FUNC(1502)
+FUNC(1503)
+FUNC(1504)
+FUNC(1505)
+FUNC(1506)
+FUNC(1507)
+FUNC(1508)
+FUNC(1509)
+FUNC(1510)
+FUNC(1511)
+FUNC(1512)
+FUNC(1513)
+FUNC(1514)
+FUNC(1515)
+FUNC(1516)
+FUNC(1517)
+FUNC(1518)
+FUNC(1519)
+FUNC(1520)
+FUNC(1521)
+FUNC(1522)
+FUNC(1523)
+FUNC(1524)
+FUNC(1525)
+FUNC(1526)
+FUNC(1527)
+FUNC(1528)
+FUNC(1529)
+FUNC(1530)
+FUNC(1531)
+FUNC(1532)
+FUNC(1533)
+FUNC(1534)
+FUNC(1535)
+FUNC(1536)
+FUNC(1537)
+FUNC(1538)
+FUNC(1539)
+FUNC(1540)
+FUNC(1541)
+FUNC(1542)
+FUNC(1543)
+FUNC(1544)
+FUNC(1545)
+FUNC(1546)
+FUNC(1547)
+FUNC(1548)
+FUNC(1549)
+FUNC(1550)
+FUNC(1551)
+FUNC(1552)
+FUNC(1553)
+FUNC(1554)
+FUNC(1555)
+FUNC(1556)
+FUNC(1557)
+FUNC(1558)
+FUNC(1559)
+FUNC(1560)
+FUNC(1561)
+FUNC(1562)
+FUNC(1563)
+FUNC(1564)
+FUNC(1565)
+FUNC(1566)
+FUNC(1567)
+FUNC(1568)
+FUNC(1569)
+FUNC(1570)
+FUNC(1571)
+FUNC(1572)
+FUNC(1573)
+FUNC(1574)
+FUNC(1575)
+FUNC(1576)
+FUNC(1577)
+FUNC(1578)
+FUNC(1579)
+FUNC(1580)
+FUNC(1581)
+FUNC(1582)
+FUNC(1583)
+FUNC(1584)
+FUNC(1585)
+FUNC(1586)
+FUNC(1587)
+FUNC(1588)
+FUNC(1589)
+FUNC(1590)
+FUNC(1591)
+FUNC(1592)
+FUNC(1593)
+FUNC(1594)
+FUNC(1595)
+FUNC(1596)
+FUNC(1597)
+FUNC(1598)
+FUNC(1599)
+FUNC(1600)
+FUNC(1601)
+FUNC(1602)
+FUNC(1603)
+FUNC(1604)
+FUNC(1605)
+FUNC(1606)
+FUNC(1607)
+FUNC(1608)
+FUNC(1609)
+FUNC(1610)
+FUNC(1611)
+FUNC(1612)
+FUNC(1613)
+FUNC(1614)
+FUNC(1615)
+FUNC(1616)
+FUNC(1617)
+FUNC(1618)
+FUNC(1619)
+FUNC(1620)
+FUNC(1621)
+FUNC(1622)
+FUNC(1623)
+FUNC(1624)
+FUNC(1625)
+FUNC(1626)
+FUNC(1627)
+FUNC(1628)
+FUNC(1629)
+FUNC(1630)
+FUNC(1631)
+FUNC(1632)
+FUNC(1633)
+FUNC(1634)
+FUNC(1635)
+FUNC(1636)
+FUNC(1637)
+FUNC(1638)
+FUNC(1639)
+FUNC(1640)
+FUNC(1641)
+FUNC(1642)
+FUNC(1643)
+FUNC(1644)
+FUNC(1645)
+FUNC(1646)
+FUNC(1647)
+FUNC(1648)
+FUNC(1649)
+FUNC(1650)
+FUNC(1651)
+FUNC(1652)
+FUNC(1653)
+FUNC(1654)
+FUNC(1655)
+FUNC(1656)
+FUNC(1657)
+FUNC(1658)
+FUNC(1659)
+FUNC(1660)
+FUNC(1661)
+FUNC(1662)
+FUNC(1663)
+FUNC(1664)
+FUNC(1665)
+FUNC(1666)
+FUNC(1667)
+FUNC(1668)
+FUNC(1669)
+FUNC(1670)
+FUNC(1671)
+FUNC(1672)
+FUNC(1673)
+FUNC(1674)
+FUNC(1675)
+FUNC(1676)
+FUNC(1677)
+FUNC(1678)
+FUNC(1679)
+FUNC(1680)
+FUNC(1681)
+FUNC(1682)
+FUNC(1683)
+FUNC(1684)
+FUNC(1685)
+FUNC(1686)
+FUNC(1687)
+FUNC(1688)
+FUNC(1689)
+FUNC(1690)
+FUNC(1691)
+FUNC(1692)
+FUNC(1693)
+FUNC(1694)
+FUNC(1695)
+FUNC(1696)
+FUNC(1697)
+FUNC(1698)
+FUNC(1699)
+FUNC(1700)
+FUNC(1701)
+FUNC(1702)
+FUNC(1703)
+FUNC(1704)
+FUNC(1705)
+FUNC(1706)
+FUNC(1707)
+FUNC(1708)
+FUNC(1709)
+FUNC(1710)
+FUNC(1711)
+FUNC(1712)
+FUNC(1713)
+FUNC(1714)
+FUNC(1715)
+FUNC(1716)
+FUNC(1717)
+FUNC(1718)
+FUNC(1719)
+FUNC(1720)
+FUNC(1721)
+FUNC(1722)
+FUNC(1723)
+FUNC(1724)
+FUNC(1725)
+FUNC(1726)
+FUNC(1727)
+FUNC(1728)
+FUNC(1729)
+FUNC(1730)
+FUNC(1731)
+FUNC(1732)
+FUNC(1733)
+FUNC(1734)
+FUNC(1735)
+FUNC(1736)
+FUNC(1737)
+FUNC(1738)
+FUNC(1739)
+FUNC(1740)
+FUNC(1741)
+FUNC(1742)
+FUNC(1743)
+FUNC(1744)
+FUNC(1745)
+FUNC(1746)
+FUNC(1747)
+FUNC(1748)
+FUNC(1749)
+FUNC(1750)
+FUNC(1751)
+FUNC(1752)
+FUNC(1753)
+FUNC(1754)
+FUNC(1755)
+FUNC(1756)
+FUNC(1757)
+FUNC(1758)
+FUNC(1759)
+FUNC(1760)
+FUNC(1761)
+FUNC(1762)
+FUNC(1763)
+FUNC(1764)
+FUNC(1765)
+FUNC(1766)
+FUNC(1767)
+FUNC(1768)
+FUNC(1769)
+FUNC(1770)
+FUNC(1771)
+FUNC(1772)
+FUNC(1773)
+FUNC(1774)
+FUNC(1775)
+FUNC(1776)
+FUNC(1777)
+FUNC(1778)
+FUNC(1779)
+FUNC(1780)
+FUNC(1781)
+FUNC(1782)
+FUNC(1783)
+FUNC(1784)
+FUNC(1785)
+FUNC(1786)
+FUNC(1787)
+FUNC(1788)
+FUNC(1789)
+FUNC(1790)
+FUNC(1791)
+FUNC(1792)
+FUNC(1793)
+FUNC(1794)
+FUNC(1795)
+FUNC(1796)
+FUNC(1797)
+FUNC(1798)
+FUNC(1799)
+FUNC(1800)
+FUNC(1801)
+FUNC(1802)
+FUNC(1803)
+FUNC(1804)
+FUNC(1805)
+FUNC(1806)
+FUNC(1807)
+FUNC(1808)
+FUNC(1809)
+FUNC(1810)
+FUNC(1811)
+FUNC(1812)
+FUNC(1813)
+FUNC(1814)
+FUNC(1815)
+FUNC(1816)
+FUNC(1817)
+FUNC(1818)
+FUNC(1819)
+FUNC(1820)
+FUNC(1821)
+FUNC(1822)
+FUNC(1823)
+FUNC(1824)
+FUNC(1825)
+FUNC(1826)
+FUNC(1827)
+FUNC(1828)
+FUNC(1829)
+FUNC(1830)
+FUNC(1831)
+FUNC(1832)
+FUNC(1833)
+FUNC(1834)
+FUNC(1835)
+FUNC(1836)
+FUNC(1837)
+FUNC(1838)
+FUNC(1839)
+FUNC(1840)
+FUNC(1841)
+FUNC(1842)
+FUNC(1843)
+FUNC(1844)
+FUNC(1845)
+FUNC(1846)
+FUNC(1847)
+FUNC(1848)
+FUNC(1849)
+FUNC(1850)
+FUNC(1851)
+FUNC(1852)
+FUNC(1853)
+FUNC(1854)
+FUNC(1855)
+FUNC(1856)
+FUNC(1857)
+FUNC(1858)
+FUNC(1859)
+FUNC(1860)
+FUNC(1861)
+FUNC(1862)
+FUNC(1863)
+FUNC(1864)
+FUNC(1865)
+FUNC(1866)
+FUNC(1867)
+FUNC(1868)
+FUNC(1869)
+FUNC(1870)
+FUNC(1871)
+FUNC(1872)
+FUNC(1873)
+FUNC(1874)
+FUNC(1875)
+FUNC(1876)
+FUNC(1877)
+FUNC(1878)
+FUNC(1879)
+FUNC(1880)
+FUNC(1881)
+FUNC(1882)
+FUNC(1883)
+FUNC(1884)
+FUNC(1885)
+FUNC(1886)
+FUNC(1887)
+FUNC(1888)
+FUNC(1889)
+FUNC(1890)
+FUNC(1891)
+FUNC(1892)
+FUNC(1893)
+FUNC(1894)
+FUNC(1895)
+FUNC(1896)
+FUNC(1897)
+FUNC(1898)
+FUNC(1899)
+FUNC(1900)
+FUNC(1901)
+FUNC(1902)
+FUNC(1903)
+FUNC(1904)
+FUNC(1905)
+FUNC(1906)
+FUNC(1907)
+FUNC(1908)
+FUNC(1909)
+FUNC(1910)
+FUNC(1911)
+FUNC(1912)
+FUNC(1913)
+FUNC(1914)
+FUNC(1915)
+FUNC(1916)
+FUNC(1917)
+FUNC(1918)
+FUNC(1919)
+FUNC(1920)
+FUNC(1921)
+FUNC(1922)
+FUNC(1923)
+FUNC(1924)
+FUNC(1925)
+FUNC(1926)
+FUNC(1927)
+FUNC(1928)
+FUNC(1929)
+FUNC(1930)
+FUNC(1931)
+FUNC(1932)
+FUNC(1933)
+FUNC(1934)
+FUNC(1935)
+FUNC(1936)
+FUNC(1937)
+FUNC(1938)
+FUNC(1939)
+FUNC(1940)
+FUNC(1941)
+FUNC(1942)
+FUNC(1943)
+FUNC(1944)
+FUNC(1945)
+FUNC(1946)
+FUNC(1947)
+FUNC(1948)
+FUNC(1949)
+FUNC(1950)
+FUNC(1951)
+FUNC(1952)
+FUNC(1953)
+FUNC(1954)
+FUNC(1955)
+FUNC(1956)
+FUNC(1957)
+FUNC(1958)
+FUNC(1959)
+FUNC(1960)
+FUNC(1961)
+FUNC(1962)
+FUNC(1963)
+FUNC(1964)
+FUNC(1965)
+FUNC(1966)
+FUNC(1967)
+FUNC(1968)
+FUNC(1969)
+FUNC(1970)
+FUNC(1971)
+FUNC(1972)
+FUNC(1973)
+FUNC(1974)
+FUNC(1975)
+FUNC(1976)
+FUNC(1977)
+FUNC(1978)
+FUNC(1979)
+FUNC(1980)
+FUNC(1981)
+FUNC(1982)
+FUNC(1983)
+FUNC(1984)
+FUNC(1985)
+FUNC(1986)
+FUNC(1987)
+FUNC(1988)
+FUNC(1989)
+FUNC(1990)
+FUNC(1991)
+FUNC(1992)
+FUNC(1993)
+FUNC(1994)
+FUNC(1995)
+FUNC(1996)
+FUNC(1997)
+FUNC(1998)
+FUNC(1999)
+FUNC(2000)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_4/exeabiv2_4.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_4/exeabiv2_4.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,46 +1,46 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-## Test 1 - build an ARM E32 EXE on Linux
-## parameters relevant to the test.
-##
-
-
-## Purpose:
-## This is used to gauge perfomance 
-## At least one "large" input file is built
-## The input file has no dependencies so it really is just something for the compiler to "chew"
-
-
-# Pull tools
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
-# Pull in defaults for building test executables
-include $(FLMTESTHOME)/exeabiv2_defaults.mk
-
-
-TARGET:=exeabiv2_4
-CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_4\"
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
-SOURCEPATH:=$(SOURCEPATH)/exeabiv2_4
-SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_big.cpp
-SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
-UID3:=0x000004
-
-include $(FLMHOME)/$(FLM)
-
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+## Test 1 - build an ARM E32 EXE on Linux
+## parameters relevant to the test.
+##
+
+
+## Purpose:
+## This is used to gauge perfomance 
+## At least one "large" input file is built
+## The input file has no dependencies so it really is just something for the compiler to "chew"
+
+
+# Pull tools
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,OUTPUTPATH SOURCEPATH CDEFS SYSTEMINCLUDE)
+# Pull in defaults for building test executables
+include $(FLMTESTHOME)/exeabiv2_defaults.mk
+
+
+TARGET:=exeabiv2_4
+CDEFS:=$(CDEFS) __TESTNAME__=\"exeabiv2_4\"
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)
+SOURCEPATH:=$(SOURCEPATH)/exeabiv2_4
+SOURCEFILES:=$(SOURCEPATH)/test.cpp $(SOURCEPATH)/test_big.cpp
+SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(FLMTESTHOME)/include
+UID3:=0x000004
+
+include $(FLMHOME)/$(FLM)
+
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_4/test.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_4/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,27 +1,27 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-#include <e32def.h>
-
-int i=1;
-
-extern int function_1(void);
-TInt E32Main(void)
-{
-	function_1();
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <e32def.h>
+
+int i=1;
+
+extern int function_1(void);
+TInt E32Main(void)
+{
+	function_1();
+	return 0;
+}
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_4/test_big.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_4/test_big.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,2045 +1,2045 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/* 
-This is jsut some "compiler fibre" for the compiler to chew
-on as part of a compilation performace test
-*/
-
-#define FUNC(VARIABLE)	\
-int function_##VARIABLE(void)	\
-{	\
-	int x,y,z;	\
-	x=VARIABLE+30* 10-1;	\
-	y=x*4;	\
-	\
-	\
-	x=y+1;	\
-	\
-	int a[VARIABLE];	\
-	\
-	\
-	\
-	for (z=0; z < 1000+VARIABLE; z++)	\
-	{	\
-		x+=a[z];		\
-	}	\
-	\
-	return x;	\
-}
-
-
-
-FUNC(1)
-FUNC(2)
-FUNC(3)
-FUNC(4)
-FUNC(5)
-FUNC(6)
-FUNC(7)
-FUNC(8)
-FUNC(9)
-FUNC(10)
-FUNC(11)
-FUNC(12)
-FUNC(13)
-FUNC(14)
-FUNC(15)
-FUNC(16)
-FUNC(17)
-FUNC(18)
-FUNC(19)
-FUNC(20)
-FUNC(21)
-FUNC(22)
-FUNC(23)
-FUNC(24)
-FUNC(25)
-FUNC(26)
-FUNC(27)
-FUNC(28)
-FUNC(29)
-FUNC(30)
-FUNC(31)
-FUNC(32)
-FUNC(33)
-FUNC(34)
-FUNC(35)
-FUNC(36)
-FUNC(37)
-FUNC(38)
-FUNC(39)
-FUNC(40)
-FUNC(41)
-FUNC(42)
-FUNC(43)
-FUNC(44)
-FUNC(45)
-FUNC(46)
-FUNC(47)
-FUNC(48)
-FUNC(49)
-FUNC(50)
-FUNC(51)
-FUNC(52)
-FUNC(53)
-FUNC(54)
-FUNC(55)
-FUNC(56)
-FUNC(57)
-FUNC(58)
-FUNC(59)
-FUNC(60)
-FUNC(61)
-FUNC(62)
-FUNC(63)
-FUNC(64)
-FUNC(65)
-FUNC(66)
-FUNC(67)
-FUNC(68)
-FUNC(69)
-FUNC(70)
-FUNC(71)
-FUNC(72)
-FUNC(73)
-FUNC(74)
-FUNC(75)
-FUNC(76)
-FUNC(77)
-FUNC(78)
-FUNC(79)
-FUNC(80)
-FUNC(81)
-FUNC(82)
-FUNC(83)
-FUNC(84)
-FUNC(85)
-FUNC(86)
-FUNC(87)
-FUNC(88)
-FUNC(89)
-FUNC(90)
-FUNC(91)
-FUNC(92)
-FUNC(93)
-FUNC(94)
-FUNC(95)
-FUNC(96)
-FUNC(97)
-FUNC(98)
-FUNC(99)
-FUNC(100)
-FUNC(101)
-FUNC(102)
-FUNC(103)
-FUNC(104)
-FUNC(105)
-FUNC(106)
-FUNC(107)
-FUNC(108)
-FUNC(109)
-FUNC(110)
-FUNC(111)
-FUNC(112)
-FUNC(113)
-FUNC(114)
-FUNC(115)
-FUNC(116)
-FUNC(117)
-FUNC(118)
-FUNC(119)
-FUNC(120)
-FUNC(121)
-FUNC(122)
-FUNC(123)
-FUNC(124)
-FUNC(125)
-FUNC(126)
-FUNC(127)
-FUNC(128)
-FUNC(129)
-FUNC(130)
-FUNC(131)
-FUNC(132)
-FUNC(133)
-FUNC(134)
-FUNC(135)
-FUNC(136)
-FUNC(137)
-FUNC(138)
-FUNC(139)
-FUNC(140)
-FUNC(141)
-FUNC(142)
-FUNC(143)
-FUNC(144)
-FUNC(145)
-FUNC(146)
-FUNC(147)
-FUNC(148)
-FUNC(149)
-FUNC(150)
-FUNC(151)
-FUNC(152)
-FUNC(153)
-FUNC(154)
-FUNC(155)
-FUNC(156)
-FUNC(157)
-FUNC(158)
-FUNC(159)
-FUNC(160)
-FUNC(161)
-FUNC(162)
-FUNC(163)
-FUNC(164)
-FUNC(165)
-FUNC(166)
-FUNC(167)
-FUNC(168)
-FUNC(169)
-FUNC(170)
-FUNC(171)
-FUNC(172)
-FUNC(173)
-FUNC(174)
-FUNC(175)
-FUNC(176)
-FUNC(177)
-FUNC(178)
-FUNC(179)
-FUNC(180)
-FUNC(181)
-FUNC(182)
-FUNC(183)
-FUNC(184)
-FUNC(185)
-FUNC(186)
-FUNC(187)
-FUNC(188)
-FUNC(189)
-FUNC(190)
-FUNC(191)
-FUNC(192)
-FUNC(193)
-FUNC(194)
-FUNC(195)
-FUNC(196)
-FUNC(197)
-FUNC(198)
-FUNC(199)
-FUNC(200)
-FUNC(201)
-FUNC(202)
-FUNC(203)
-FUNC(204)
-FUNC(205)
-FUNC(206)
-FUNC(207)
-FUNC(208)
-FUNC(209)
-FUNC(210)
-FUNC(211)
-FUNC(212)
-FUNC(213)
-FUNC(214)
-FUNC(215)
-FUNC(216)
-FUNC(217)
-FUNC(218)
-FUNC(219)
-FUNC(220)
-FUNC(221)
-FUNC(222)
-FUNC(223)
-FUNC(224)
-FUNC(225)
-FUNC(226)
-FUNC(227)
-FUNC(228)
-FUNC(229)
-FUNC(230)
-FUNC(231)
-FUNC(232)
-FUNC(233)
-FUNC(234)
-FUNC(235)
-FUNC(236)
-FUNC(237)
-FUNC(238)
-FUNC(239)
-FUNC(240)
-FUNC(241)
-FUNC(242)
-FUNC(243)
-FUNC(244)
-FUNC(245)
-FUNC(246)
-FUNC(247)
-FUNC(248)
-FUNC(249)
-FUNC(250)
-FUNC(251)
-FUNC(252)
-FUNC(253)
-FUNC(254)
-FUNC(255)
-FUNC(256)
-FUNC(257)
-FUNC(258)
-FUNC(259)
-FUNC(260)
-FUNC(261)
-FUNC(262)
-FUNC(263)
-FUNC(264)
-FUNC(265)
-FUNC(266)
-FUNC(267)
-FUNC(268)
-FUNC(269)
-FUNC(270)
-FUNC(271)
-FUNC(272)
-FUNC(273)
-FUNC(274)
-FUNC(275)
-FUNC(276)
-FUNC(277)
-FUNC(278)
-FUNC(279)
-FUNC(280)
-FUNC(281)
-FUNC(282)
-FUNC(283)
-FUNC(284)
-FUNC(285)
-FUNC(286)
-FUNC(287)
-FUNC(288)
-FUNC(289)
-FUNC(290)
-FUNC(291)
-FUNC(292)
-FUNC(293)
-FUNC(294)
-FUNC(295)
-FUNC(296)
-FUNC(297)
-FUNC(298)
-FUNC(299)
-FUNC(300)
-FUNC(301)
-FUNC(302)
-FUNC(303)
-FUNC(304)
-FUNC(305)
-FUNC(306)
-FUNC(307)
-FUNC(308)
-FUNC(309)
-FUNC(310)
-FUNC(311)
-FUNC(312)
-FUNC(313)
-FUNC(314)
-FUNC(315)
-FUNC(316)
-FUNC(317)
-FUNC(318)
-FUNC(319)
-FUNC(320)
-FUNC(321)
-FUNC(322)
-FUNC(323)
-FUNC(324)
-FUNC(325)
-FUNC(326)
-FUNC(327)
-FUNC(328)
-FUNC(329)
-FUNC(330)
-FUNC(331)
-FUNC(332)
-FUNC(333)
-FUNC(334)
-FUNC(335)
-FUNC(336)
-FUNC(337)
-FUNC(338)
-FUNC(339)
-FUNC(340)
-FUNC(341)
-FUNC(342)
-FUNC(343)
-FUNC(344)
-FUNC(345)
-FUNC(346)
-FUNC(347)
-FUNC(348)
-FUNC(349)
-FUNC(350)
-FUNC(351)
-FUNC(352)
-FUNC(353)
-FUNC(354)
-FUNC(355)
-FUNC(356)
-FUNC(357)
-FUNC(358)
-FUNC(359)
-FUNC(360)
-FUNC(361)
-FUNC(362)
-FUNC(363)
-FUNC(364)
-FUNC(365)
-FUNC(366)
-FUNC(367)
-FUNC(368)
-FUNC(369)
-FUNC(370)
-FUNC(371)
-FUNC(372)
-FUNC(373)
-FUNC(374)
-FUNC(375)
-FUNC(376)
-FUNC(377)
-FUNC(378)
-FUNC(379)
-FUNC(380)
-FUNC(381)
-FUNC(382)
-FUNC(383)
-FUNC(384)
-FUNC(385)
-FUNC(386)
-FUNC(387)
-FUNC(388)
-FUNC(389)
-FUNC(390)
-FUNC(391)
-FUNC(392)
-FUNC(393)
-FUNC(394)
-FUNC(395)
-FUNC(396)
-FUNC(397)
-FUNC(398)
-FUNC(399)
-FUNC(400)
-FUNC(401)
-FUNC(402)
-FUNC(403)
-FUNC(404)
-FUNC(405)
-FUNC(406)
-FUNC(407)
-FUNC(408)
-FUNC(409)
-FUNC(410)
-FUNC(411)
-FUNC(412)
-FUNC(413)
-FUNC(414)
-FUNC(415)
-FUNC(416)
-FUNC(417)
-FUNC(418)
-FUNC(419)
-FUNC(420)
-FUNC(421)
-FUNC(422)
-FUNC(423)
-FUNC(424)
-FUNC(425)
-FUNC(426)
-FUNC(427)
-FUNC(428)
-FUNC(429)
-FUNC(430)
-FUNC(431)
-FUNC(432)
-FUNC(433)
-FUNC(434)
-FUNC(435)
-FUNC(436)
-FUNC(437)
-FUNC(438)
-FUNC(439)
-FUNC(440)
-FUNC(441)
-FUNC(442)
-FUNC(443)
-FUNC(444)
-FUNC(445)
-FUNC(446)
-FUNC(447)
-FUNC(448)
-FUNC(449)
-FUNC(450)
-FUNC(451)
-FUNC(452)
-FUNC(453)
-FUNC(454)
-FUNC(455)
-FUNC(456)
-FUNC(457)
-FUNC(458)
-FUNC(459)
-FUNC(460)
-FUNC(461)
-FUNC(462)
-FUNC(463)
-FUNC(464)
-FUNC(465)
-FUNC(466)
-FUNC(467)
-FUNC(468)
-FUNC(469)
-FUNC(470)
-FUNC(471)
-FUNC(472)
-FUNC(473)
-FUNC(474)
-FUNC(475)
-FUNC(476)
-FUNC(477)
-FUNC(478)
-FUNC(479)
-FUNC(480)
-FUNC(481)
-FUNC(482)
-FUNC(483)
-FUNC(484)
-FUNC(485)
-FUNC(486)
-FUNC(487)
-FUNC(488)
-FUNC(489)
-FUNC(490)
-FUNC(491)
-FUNC(492)
-FUNC(493)
-FUNC(494)
-FUNC(495)
-FUNC(496)
-FUNC(497)
-FUNC(498)
-FUNC(499)
-FUNC(500)
-FUNC(501)
-FUNC(502)
-FUNC(503)
-FUNC(504)
-FUNC(505)
-FUNC(506)
-FUNC(507)
-FUNC(508)
-FUNC(509)
-FUNC(510)
-FUNC(511)
-FUNC(512)
-FUNC(513)
-FUNC(514)
-FUNC(515)
-FUNC(516)
-FUNC(517)
-FUNC(518)
-FUNC(519)
-FUNC(520)
-FUNC(521)
-FUNC(522)
-FUNC(523)
-FUNC(524)
-FUNC(525)
-FUNC(526)
-FUNC(527)
-FUNC(528)
-FUNC(529)
-FUNC(530)
-FUNC(531)
-FUNC(532)
-FUNC(533)
-FUNC(534)
-FUNC(535)
-FUNC(536)
-FUNC(537)
-FUNC(538)
-FUNC(539)
-FUNC(540)
-FUNC(541)
-FUNC(542)
-FUNC(543)
-FUNC(544)
-FUNC(545)
-FUNC(546)
-FUNC(547)
-FUNC(548)
-FUNC(549)
-FUNC(550)
-FUNC(551)
-FUNC(552)
-FUNC(553)
-FUNC(554)
-FUNC(555)
-FUNC(556)
-FUNC(557)
-FUNC(558)
-FUNC(559)
-FUNC(560)
-FUNC(561)
-FUNC(562)
-FUNC(563)
-FUNC(564)
-FUNC(565)
-FUNC(566)
-FUNC(567)
-FUNC(568)
-FUNC(569)
-FUNC(570)
-FUNC(571)
-FUNC(572)
-FUNC(573)
-FUNC(574)
-FUNC(575)
-FUNC(576)
-FUNC(577)
-FUNC(578)
-FUNC(579)
-FUNC(580)
-FUNC(581)
-FUNC(582)
-FUNC(583)
-FUNC(584)
-FUNC(585)
-FUNC(586)
-FUNC(587)
-FUNC(588)
-FUNC(589)
-FUNC(590)
-FUNC(591)
-FUNC(592)
-FUNC(593)
-FUNC(594)
-FUNC(595)
-FUNC(596)
-FUNC(597)
-FUNC(598)
-FUNC(599)
-FUNC(600)
-FUNC(601)
-FUNC(602)
-FUNC(603)
-FUNC(604)
-FUNC(605)
-FUNC(606)
-FUNC(607)
-FUNC(608)
-FUNC(609)
-FUNC(610)
-FUNC(611)
-FUNC(612)
-FUNC(613)
-FUNC(614)
-FUNC(615)
-FUNC(616)
-FUNC(617)
-FUNC(618)
-FUNC(619)
-FUNC(620)
-FUNC(621)
-FUNC(622)
-FUNC(623)
-FUNC(624)
-FUNC(625)
-FUNC(626)
-FUNC(627)
-FUNC(628)
-FUNC(629)
-FUNC(630)
-FUNC(631)
-FUNC(632)
-FUNC(633)
-FUNC(634)
-FUNC(635)
-FUNC(636)
-FUNC(637)
-FUNC(638)
-FUNC(639)
-FUNC(640)
-FUNC(641)
-FUNC(642)
-FUNC(643)
-FUNC(644)
-FUNC(645)
-FUNC(646)
-FUNC(647)
-FUNC(648)
-FUNC(649)
-FUNC(650)
-FUNC(651)
-FUNC(652)
-FUNC(653)
-FUNC(654)
-FUNC(655)
-FUNC(656)
-FUNC(657)
-FUNC(658)
-FUNC(659)
-FUNC(660)
-FUNC(661)
-FUNC(662)
-FUNC(663)
-FUNC(664)
-FUNC(665)
-FUNC(666)
-FUNC(667)
-FUNC(668)
-FUNC(669)
-FUNC(670)
-FUNC(671)
-FUNC(672)
-FUNC(673)
-FUNC(674)
-FUNC(675)
-FUNC(676)
-FUNC(677)
-FUNC(678)
-FUNC(679)
-FUNC(680)
-FUNC(681)
-FUNC(682)
-FUNC(683)
-FUNC(684)
-FUNC(685)
-FUNC(686)
-FUNC(687)
-FUNC(688)
-FUNC(689)
-FUNC(690)
-FUNC(691)
-FUNC(692)
-FUNC(693)
-FUNC(694)
-FUNC(695)
-FUNC(696)
-FUNC(697)
-FUNC(698)
-FUNC(699)
-FUNC(700)
-FUNC(701)
-FUNC(702)
-FUNC(703)
-FUNC(704)
-FUNC(705)
-FUNC(706)
-FUNC(707)
-FUNC(708)
-FUNC(709)
-FUNC(710)
-FUNC(711)
-FUNC(712)
-FUNC(713)
-FUNC(714)
-FUNC(715)
-FUNC(716)
-FUNC(717)
-FUNC(718)
-FUNC(719)
-FUNC(720)
-FUNC(721)
-FUNC(722)
-FUNC(723)
-FUNC(724)
-FUNC(725)
-FUNC(726)
-FUNC(727)
-FUNC(728)
-FUNC(729)
-FUNC(730)
-FUNC(731)
-FUNC(732)
-FUNC(733)
-FUNC(734)
-FUNC(735)
-FUNC(736)
-FUNC(737)
-FUNC(738)
-FUNC(739)
-FUNC(740)
-FUNC(741)
-FUNC(742)
-FUNC(743)
-FUNC(744)
-FUNC(745)
-FUNC(746)
-FUNC(747)
-FUNC(748)
-FUNC(749)
-FUNC(750)
-FUNC(751)
-FUNC(752)
-FUNC(753)
-FUNC(754)
-FUNC(755)
-FUNC(756)
-FUNC(757)
-FUNC(758)
-FUNC(759)
-FUNC(760)
-FUNC(761)
-FUNC(762)
-FUNC(763)
-FUNC(764)
-FUNC(765)
-FUNC(766)
-FUNC(767)
-FUNC(768)
-FUNC(769)
-FUNC(770)
-FUNC(771)
-FUNC(772)
-FUNC(773)
-FUNC(774)
-FUNC(775)
-FUNC(776)
-FUNC(777)
-FUNC(778)
-FUNC(779)
-FUNC(780)
-FUNC(781)
-FUNC(782)
-FUNC(783)
-FUNC(784)
-FUNC(785)
-FUNC(786)
-FUNC(787)
-FUNC(788)
-FUNC(789)
-FUNC(790)
-FUNC(791)
-FUNC(792)
-FUNC(793)
-FUNC(794)
-FUNC(795)
-FUNC(796)
-FUNC(797)
-FUNC(798)
-FUNC(799)
-FUNC(800)
-FUNC(801)
-FUNC(802)
-FUNC(803)
-FUNC(804)
-FUNC(805)
-FUNC(806)
-FUNC(807)
-FUNC(808)
-FUNC(809)
-FUNC(810)
-FUNC(811)
-FUNC(812)
-FUNC(813)
-FUNC(814)
-FUNC(815)
-FUNC(816)
-FUNC(817)
-FUNC(818)
-FUNC(819)
-FUNC(820)
-FUNC(821)
-FUNC(822)
-FUNC(823)
-FUNC(824)
-FUNC(825)
-FUNC(826)
-FUNC(827)
-FUNC(828)
-FUNC(829)
-FUNC(830)
-FUNC(831)
-FUNC(832)
-FUNC(833)
-FUNC(834)
-FUNC(835)
-FUNC(836)
-FUNC(837)
-FUNC(838)
-FUNC(839)
-FUNC(840)
-FUNC(841)
-FUNC(842)
-FUNC(843)
-FUNC(844)
-FUNC(845)
-FUNC(846)
-FUNC(847)
-FUNC(848)
-FUNC(849)
-FUNC(850)
-FUNC(851)
-FUNC(852)
-FUNC(853)
-FUNC(854)
-FUNC(855)
-FUNC(856)
-FUNC(857)
-FUNC(858)
-FUNC(859)
-FUNC(860)
-FUNC(861)
-FUNC(862)
-FUNC(863)
-FUNC(864)
-FUNC(865)
-FUNC(866)
-FUNC(867)
-FUNC(868)
-FUNC(869)
-FUNC(870)
-FUNC(871)
-FUNC(872)
-FUNC(873)
-FUNC(874)
-FUNC(875)
-FUNC(876)
-FUNC(877)
-FUNC(878)
-FUNC(879)
-FUNC(880)
-FUNC(881)
-FUNC(882)
-FUNC(883)
-FUNC(884)
-FUNC(885)
-FUNC(886)
-FUNC(887)
-FUNC(888)
-FUNC(889)
-FUNC(890)
-FUNC(891)
-FUNC(892)
-FUNC(893)
-FUNC(894)
-FUNC(895)
-FUNC(896)
-FUNC(897)
-FUNC(898)
-FUNC(899)
-FUNC(900)
-FUNC(901)
-FUNC(902)
-FUNC(903)
-FUNC(904)
-FUNC(905)
-FUNC(906)
-FUNC(907)
-FUNC(908)
-FUNC(909)
-FUNC(910)
-FUNC(911)
-FUNC(912)
-FUNC(913)
-FUNC(914)
-FUNC(915)
-FUNC(916)
-FUNC(917)
-FUNC(918)
-FUNC(919)
-FUNC(920)
-FUNC(921)
-FUNC(922)
-FUNC(923)
-FUNC(924)
-FUNC(925)
-FUNC(926)
-FUNC(927)
-FUNC(928)
-FUNC(929)
-FUNC(930)
-FUNC(931)
-FUNC(932)
-FUNC(933)
-FUNC(934)
-FUNC(935)
-FUNC(936)
-FUNC(937)
-FUNC(938)
-FUNC(939)
-FUNC(940)
-FUNC(941)
-FUNC(942)
-FUNC(943)
-FUNC(944)
-FUNC(945)
-FUNC(946)
-FUNC(947)
-FUNC(948)
-FUNC(949)
-FUNC(950)
-FUNC(951)
-FUNC(952)
-FUNC(953)
-FUNC(954)
-FUNC(955)
-FUNC(956)
-FUNC(957)
-FUNC(958)
-FUNC(959)
-FUNC(960)
-FUNC(961)
-FUNC(962)
-FUNC(963)
-FUNC(964)
-FUNC(965)
-FUNC(966)
-FUNC(967)
-FUNC(968)
-FUNC(969)
-FUNC(970)
-FUNC(971)
-FUNC(972)
-FUNC(973)
-FUNC(974)
-FUNC(975)
-FUNC(976)
-FUNC(977)
-FUNC(978)
-FUNC(979)
-FUNC(980)
-FUNC(981)
-FUNC(982)
-FUNC(983)
-FUNC(984)
-FUNC(985)
-FUNC(986)
-FUNC(987)
-FUNC(988)
-FUNC(989)
-FUNC(990)
-FUNC(991)
-FUNC(992)
-FUNC(993)
-FUNC(994)
-FUNC(995)
-FUNC(996)
-FUNC(997)
-FUNC(998)
-FUNC(999)
-FUNC(1000)
-FUNC(1001)
-FUNC(1002)
-FUNC(1003)
-FUNC(1004)
-FUNC(1005)
-FUNC(1006)
-FUNC(1007)
-FUNC(1008)
-FUNC(1009)
-FUNC(1010)
-FUNC(1011)
-FUNC(1012)
-FUNC(1013)
-FUNC(1014)
-FUNC(1015)
-FUNC(1016)
-FUNC(1017)
-FUNC(1018)
-FUNC(1019)
-FUNC(1020)
-FUNC(1021)
-FUNC(1022)
-FUNC(1023)
-FUNC(1024)
-FUNC(1025)
-FUNC(1026)
-FUNC(1027)
-FUNC(1028)
-FUNC(1029)
-FUNC(1030)
-FUNC(1031)
-FUNC(1032)
-FUNC(1033)
-FUNC(1034)
-FUNC(1035)
-FUNC(1036)
-FUNC(1037)
-FUNC(1038)
-FUNC(1039)
-FUNC(1040)
-FUNC(1041)
-FUNC(1042)
-FUNC(1043)
-FUNC(1044)
-FUNC(1045)
-FUNC(1046)
-FUNC(1047)
-FUNC(1048)
-FUNC(1049)
-FUNC(1050)
-FUNC(1051)
-FUNC(1052)
-FUNC(1053)
-FUNC(1054)
-FUNC(1055)
-FUNC(1056)
-FUNC(1057)
-FUNC(1058)
-FUNC(1059)
-FUNC(1060)
-FUNC(1061)
-FUNC(1062)
-FUNC(1063)
-FUNC(1064)
-FUNC(1065)
-FUNC(1066)
-FUNC(1067)
-FUNC(1068)
-FUNC(1069)
-FUNC(1070)
-FUNC(1071)
-FUNC(1072)
-FUNC(1073)
-FUNC(1074)
-FUNC(1075)
-FUNC(1076)
-FUNC(1077)
-FUNC(1078)
-FUNC(1079)
-FUNC(1080)
-FUNC(1081)
-FUNC(1082)
-FUNC(1083)
-FUNC(1084)
-FUNC(1085)
-FUNC(1086)
-FUNC(1087)
-FUNC(1088)
-FUNC(1089)
-FUNC(1090)
-FUNC(1091)
-FUNC(1092)
-FUNC(1093)
-FUNC(1094)
-FUNC(1095)
-FUNC(1096)
-FUNC(1097)
-FUNC(1098)
-FUNC(1099)
-FUNC(1100)
-FUNC(1101)
-FUNC(1102)
-FUNC(1103)
-FUNC(1104)
-FUNC(1105)
-FUNC(1106)
-FUNC(1107)
-FUNC(1108)
-FUNC(1109)
-FUNC(1110)
-FUNC(1111)
-FUNC(1112)
-FUNC(1113)
-FUNC(1114)
-FUNC(1115)
-FUNC(1116)
-FUNC(1117)
-FUNC(1118)
-FUNC(1119)
-FUNC(1120)
-FUNC(1121)
-FUNC(1122)
-FUNC(1123)
-FUNC(1124)
-FUNC(1125)
-FUNC(1126)
-FUNC(1127)
-FUNC(1128)
-FUNC(1129)
-FUNC(1130)
-FUNC(1131)
-FUNC(1132)
-FUNC(1133)
-FUNC(1134)
-FUNC(1135)
-FUNC(1136)
-FUNC(1137)
-FUNC(1138)
-FUNC(1139)
-FUNC(1140)
-FUNC(1141)
-FUNC(1142)
-FUNC(1143)
-FUNC(1144)
-FUNC(1145)
-FUNC(1146)
-FUNC(1147)
-FUNC(1148)
-FUNC(1149)
-FUNC(1150)
-FUNC(1151)
-FUNC(1152)
-FUNC(1153)
-FUNC(1154)
-FUNC(1155)
-FUNC(1156)
-FUNC(1157)
-FUNC(1158)
-FUNC(1159)
-FUNC(1160)
-FUNC(1161)
-FUNC(1162)
-FUNC(1163)
-FUNC(1164)
-FUNC(1165)
-FUNC(1166)
-FUNC(1167)
-FUNC(1168)
-FUNC(1169)
-FUNC(1170)
-FUNC(1171)
-FUNC(1172)
-FUNC(1173)
-FUNC(1174)
-FUNC(1175)
-FUNC(1176)
-FUNC(1177)
-FUNC(1178)
-FUNC(1179)
-FUNC(1180)
-FUNC(1181)
-FUNC(1182)
-FUNC(1183)
-FUNC(1184)
-FUNC(1185)
-FUNC(1186)
-FUNC(1187)
-FUNC(1188)
-FUNC(1189)
-FUNC(1190)
-FUNC(1191)
-FUNC(1192)
-FUNC(1193)
-FUNC(1194)
-FUNC(1195)
-FUNC(1196)
-FUNC(1197)
-FUNC(1198)
-FUNC(1199)
-FUNC(1200)
-FUNC(1201)
-FUNC(1202)
-FUNC(1203)
-FUNC(1204)
-FUNC(1205)
-FUNC(1206)
-FUNC(1207)
-FUNC(1208)
-FUNC(1209)
-FUNC(1210)
-FUNC(1211)
-FUNC(1212)
-FUNC(1213)
-FUNC(1214)
-FUNC(1215)
-FUNC(1216)
-FUNC(1217)
-FUNC(1218)
-FUNC(1219)
-FUNC(1220)
-FUNC(1221)
-FUNC(1222)
-FUNC(1223)
-FUNC(1224)
-FUNC(1225)
-FUNC(1226)
-FUNC(1227)
-FUNC(1228)
-FUNC(1229)
-FUNC(1230)
-FUNC(1231)
-FUNC(1232)
-FUNC(1233)
-FUNC(1234)
-FUNC(1235)
-FUNC(1236)
-FUNC(1237)
-FUNC(1238)
-FUNC(1239)
-FUNC(1240)
-FUNC(1241)
-FUNC(1242)
-FUNC(1243)
-FUNC(1244)
-FUNC(1245)
-FUNC(1246)
-FUNC(1247)
-FUNC(1248)
-FUNC(1249)
-FUNC(1250)
-FUNC(1251)
-FUNC(1252)
-FUNC(1253)
-FUNC(1254)
-FUNC(1255)
-FUNC(1256)
-FUNC(1257)
-FUNC(1258)
-FUNC(1259)
-FUNC(1260)
-FUNC(1261)
-FUNC(1262)
-FUNC(1263)
-FUNC(1264)
-FUNC(1265)
-FUNC(1266)
-FUNC(1267)
-FUNC(1268)
-FUNC(1269)
-FUNC(1270)
-FUNC(1271)
-FUNC(1272)
-FUNC(1273)
-FUNC(1274)
-FUNC(1275)
-FUNC(1276)
-FUNC(1277)
-FUNC(1278)
-FUNC(1279)
-FUNC(1280)
-FUNC(1281)
-FUNC(1282)
-FUNC(1283)
-FUNC(1284)
-FUNC(1285)
-FUNC(1286)
-FUNC(1287)
-FUNC(1288)
-FUNC(1289)
-FUNC(1290)
-FUNC(1291)
-FUNC(1292)
-FUNC(1293)
-FUNC(1294)
-FUNC(1295)
-FUNC(1296)
-FUNC(1297)
-FUNC(1298)
-FUNC(1299)
-FUNC(1300)
-FUNC(1301)
-FUNC(1302)
-FUNC(1303)
-FUNC(1304)
-FUNC(1305)
-FUNC(1306)
-FUNC(1307)
-FUNC(1308)
-FUNC(1309)
-FUNC(1310)
-FUNC(1311)
-FUNC(1312)
-FUNC(1313)
-FUNC(1314)
-FUNC(1315)
-FUNC(1316)
-FUNC(1317)
-FUNC(1318)
-FUNC(1319)
-FUNC(1320)
-FUNC(1321)
-FUNC(1322)
-FUNC(1323)
-FUNC(1324)
-FUNC(1325)
-FUNC(1326)
-FUNC(1327)
-FUNC(1328)
-FUNC(1329)
-FUNC(1330)
-FUNC(1331)
-FUNC(1332)
-FUNC(1333)
-FUNC(1334)
-FUNC(1335)
-FUNC(1336)
-FUNC(1337)
-FUNC(1338)
-FUNC(1339)
-FUNC(1340)
-FUNC(1341)
-FUNC(1342)
-FUNC(1343)
-FUNC(1344)
-FUNC(1345)
-FUNC(1346)
-FUNC(1347)
-FUNC(1348)
-FUNC(1349)
-FUNC(1350)
-FUNC(1351)
-FUNC(1352)
-FUNC(1353)
-FUNC(1354)
-FUNC(1355)
-FUNC(1356)
-FUNC(1357)
-FUNC(1358)
-FUNC(1359)
-FUNC(1360)
-FUNC(1361)
-FUNC(1362)
-FUNC(1363)
-FUNC(1364)
-FUNC(1365)
-FUNC(1366)
-FUNC(1367)
-FUNC(1368)
-FUNC(1369)
-FUNC(1370)
-FUNC(1371)
-FUNC(1372)
-FUNC(1373)
-FUNC(1374)
-FUNC(1375)
-FUNC(1376)
-FUNC(1377)
-FUNC(1378)
-FUNC(1379)
-FUNC(1380)
-FUNC(1381)
-FUNC(1382)
-FUNC(1383)
-FUNC(1384)
-FUNC(1385)
-FUNC(1386)
-FUNC(1387)
-FUNC(1388)
-FUNC(1389)
-FUNC(1390)
-FUNC(1391)
-FUNC(1392)
-FUNC(1393)
-FUNC(1394)
-FUNC(1395)
-FUNC(1396)
-FUNC(1397)
-FUNC(1398)
-FUNC(1399)
-FUNC(1400)
-FUNC(1401)
-FUNC(1402)
-FUNC(1403)
-FUNC(1404)
-FUNC(1405)
-FUNC(1406)
-FUNC(1407)
-FUNC(1408)
-FUNC(1409)
-FUNC(1410)
-FUNC(1411)
-FUNC(1412)
-FUNC(1413)
-FUNC(1414)
-FUNC(1415)
-FUNC(1416)
-FUNC(1417)
-FUNC(1418)
-FUNC(1419)
-FUNC(1420)
-FUNC(1421)
-FUNC(1422)
-FUNC(1423)
-FUNC(1424)
-FUNC(1425)
-FUNC(1426)
-FUNC(1427)
-FUNC(1428)
-FUNC(1429)
-FUNC(1430)
-FUNC(1431)
-FUNC(1432)
-FUNC(1433)
-FUNC(1434)
-FUNC(1435)
-FUNC(1436)
-FUNC(1437)
-FUNC(1438)
-FUNC(1439)
-FUNC(1440)
-FUNC(1441)
-FUNC(1442)
-FUNC(1443)
-FUNC(1444)
-FUNC(1445)
-FUNC(1446)
-FUNC(1447)
-FUNC(1448)
-FUNC(1449)
-FUNC(1450)
-FUNC(1451)
-FUNC(1452)
-FUNC(1453)
-FUNC(1454)
-FUNC(1455)
-FUNC(1456)
-FUNC(1457)
-FUNC(1458)
-FUNC(1459)
-FUNC(1460)
-FUNC(1461)
-FUNC(1462)
-FUNC(1463)
-FUNC(1464)
-FUNC(1465)
-FUNC(1466)
-FUNC(1467)
-FUNC(1468)
-FUNC(1469)
-FUNC(1470)
-FUNC(1471)
-FUNC(1472)
-FUNC(1473)
-FUNC(1474)
-FUNC(1475)
-FUNC(1476)
-FUNC(1477)
-FUNC(1478)
-FUNC(1479)
-FUNC(1480)
-FUNC(1481)
-FUNC(1482)
-FUNC(1483)
-FUNC(1484)
-FUNC(1485)
-FUNC(1486)
-FUNC(1487)
-FUNC(1488)
-FUNC(1489)
-FUNC(1490)
-FUNC(1491)
-FUNC(1492)
-FUNC(1493)
-FUNC(1494)
-FUNC(1495)
-FUNC(1496)
-FUNC(1497)
-FUNC(1498)
-FUNC(1499)
-FUNC(1500)
-FUNC(1501)
-FUNC(1502)
-FUNC(1503)
-FUNC(1504)
-FUNC(1505)
-FUNC(1506)
-FUNC(1507)
-FUNC(1508)
-FUNC(1509)
-FUNC(1510)
-FUNC(1511)
-FUNC(1512)
-FUNC(1513)
-FUNC(1514)
-FUNC(1515)
-FUNC(1516)
-FUNC(1517)
-FUNC(1518)
-FUNC(1519)
-FUNC(1520)
-FUNC(1521)
-FUNC(1522)
-FUNC(1523)
-FUNC(1524)
-FUNC(1525)
-FUNC(1526)
-FUNC(1527)
-FUNC(1528)
-FUNC(1529)
-FUNC(1530)
-FUNC(1531)
-FUNC(1532)
-FUNC(1533)
-FUNC(1534)
-FUNC(1535)
-FUNC(1536)
-FUNC(1537)
-FUNC(1538)
-FUNC(1539)
-FUNC(1540)
-FUNC(1541)
-FUNC(1542)
-FUNC(1543)
-FUNC(1544)
-FUNC(1545)
-FUNC(1546)
-FUNC(1547)
-FUNC(1548)
-FUNC(1549)
-FUNC(1550)
-FUNC(1551)
-FUNC(1552)
-FUNC(1553)
-FUNC(1554)
-FUNC(1555)
-FUNC(1556)
-FUNC(1557)
-FUNC(1558)
-FUNC(1559)
-FUNC(1560)
-FUNC(1561)
-FUNC(1562)
-FUNC(1563)
-FUNC(1564)
-FUNC(1565)
-FUNC(1566)
-FUNC(1567)
-FUNC(1568)
-FUNC(1569)
-FUNC(1570)
-FUNC(1571)
-FUNC(1572)
-FUNC(1573)
-FUNC(1574)
-FUNC(1575)
-FUNC(1576)
-FUNC(1577)
-FUNC(1578)
-FUNC(1579)
-FUNC(1580)
-FUNC(1581)
-FUNC(1582)
-FUNC(1583)
-FUNC(1584)
-FUNC(1585)
-FUNC(1586)
-FUNC(1587)
-FUNC(1588)
-FUNC(1589)
-FUNC(1590)
-FUNC(1591)
-FUNC(1592)
-FUNC(1593)
-FUNC(1594)
-FUNC(1595)
-FUNC(1596)
-FUNC(1597)
-FUNC(1598)
-FUNC(1599)
-FUNC(1600)
-FUNC(1601)
-FUNC(1602)
-FUNC(1603)
-FUNC(1604)
-FUNC(1605)
-FUNC(1606)
-FUNC(1607)
-FUNC(1608)
-FUNC(1609)
-FUNC(1610)
-FUNC(1611)
-FUNC(1612)
-FUNC(1613)
-FUNC(1614)
-FUNC(1615)
-FUNC(1616)
-FUNC(1617)
-FUNC(1618)
-FUNC(1619)
-FUNC(1620)
-FUNC(1621)
-FUNC(1622)
-FUNC(1623)
-FUNC(1624)
-FUNC(1625)
-FUNC(1626)
-FUNC(1627)
-FUNC(1628)
-FUNC(1629)
-FUNC(1630)
-FUNC(1631)
-FUNC(1632)
-FUNC(1633)
-FUNC(1634)
-FUNC(1635)
-FUNC(1636)
-FUNC(1637)
-FUNC(1638)
-FUNC(1639)
-FUNC(1640)
-FUNC(1641)
-FUNC(1642)
-FUNC(1643)
-FUNC(1644)
-FUNC(1645)
-FUNC(1646)
-FUNC(1647)
-FUNC(1648)
-FUNC(1649)
-FUNC(1650)
-FUNC(1651)
-FUNC(1652)
-FUNC(1653)
-FUNC(1654)
-FUNC(1655)
-FUNC(1656)
-FUNC(1657)
-FUNC(1658)
-FUNC(1659)
-FUNC(1660)
-FUNC(1661)
-FUNC(1662)
-FUNC(1663)
-FUNC(1664)
-FUNC(1665)
-FUNC(1666)
-FUNC(1667)
-FUNC(1668)
-FUNC(1669)
-FUNC(1670)
-FUNC(1671)
-FUNC(1672)
-FUNC(1673)
-FUNC(1674)
-FUNC(1675)
-FUNC(1676)
-FUNC(1677)
-FUNC(1678)
-FUNC(1679)
-FUNC(1680)
-FUNC(1681)
-FUNC(1682)
-FUNC(1683)
-FUNC(1684)
-FUNC(1685)
-FUNC(1686)
-FUNC(1687)
-FUNC(1688)
-FUNC(1689)
-FUNC(1690)
-FUNC(1691)
-FUNC(1692)
-FUNC(1693)
-FUNC(1694)
-FUNC(1695)
-FUNC(1696)
-FUNC(1697)
-FUNC(1698)
-FUNC(1699)
-FUNC(1700)
-FUNC(1701)
-FUNC(1702)
-FUNC(1703)
-FUNC(1704)
-FUNC(1705)
-FUNC(1706)
-FUNC(1707)
-FUNC(1708)
-FUNC(1709)
-FUNC(1710)
-FUNC(1711)
-FUNC(1712)
-FUNC(1713)
-FUNC(1714)
-FUNC(1715)
-FUNC(1716)
-FUNC(1717)
-FUNC(1718)
-FUNC(1719)
-FUNC(1720)
-FUNC(1721)
-FUNC(1722)
-FUNC(1723)
-FUNC(1724)
-FUNC(1725)
-FUNC(1726)
-FUNC(1727)
-FUNC(1728)
-FUNC(1729)
-FUNC(1730)
-FUNC(1731)
-FUNC(1732)
-FUNC(1733)
-FUNC(1734)
-FUNC(1735)
-FUNC(1736)
-FUNC(1737)
-FUNC(1738)
-FUNC(1739)
-FUNC(1740)
-FUNC(1741)
-FUNC(1742)
-FUNC(1743)
-FUNC(1744)
-FUNC(1745)
-FUNC(1746)
-FUNC(1747)
-FUNC(1748)
-FUNC(1749)
-FUNC(1750)
-FUNC(1751)
-FUNC(1752)
-FUNC(1753)
-FUNC(1754)
-FUNC(1755)
-FUNC(1756)
-FUNC(1757)
-FUNC(1758)
-FUNC(1759)
-FUNC(1760)
-FUNC(1761)
-FUNC(1762)
-FUNC(1763)
-FUNC(1764)
-FUNC(1765)
-FUNC(1766)
-FUNC(1767)
-FUNC(1768)
-FUNC(1769)
-FUNC(1770)
-FUNC(1771)
-FUNC(1772)
-FUNC(1773)
-FUNC(1774)
-FUNC(1775)
-FUNC(1776)
-FUNC(1777)
-FUNC(1778)
-FUNC(1779)
-FUNC(1780)
-FUNC(1781)
-FUNC(1782)
-FUNC(1783)
-FUNC(1784)
-FUNC(1785)
-FUNC(1786)
-FUNC(1787)
-FUNC(1788)
-FUNC(1789)
-FUNC(1790)
-FUNC(1791)
-FUNC(1792)
-FUNC(1793)
-FUNC(1794)
-FUNC(1795)
-FUNC(1796)
-FUNC(1797)
-FUNC(1798)
-FUNC(1799)
-FUNC(1800)
-FUNC(1801)
-FUNC(1802)
-FUNC(1803)
-FUNC(1804)
-FUNC(1805)
-FUNC(1806)
-FUNC(1807)
-FUNC(1808)
-FUNC(1809)
-FUNC(1810)
-FUNC(1811)
-FUNC(1812)
-FUNC(1813)
-FUNC(1814)
-FUNC(1815)
-FUNC(1816)
-FUNC(1817)
-FUNC(1818)
-FUNC(1819)
-FUNC(1820)
-FUNC(1821)
-FUNC(1822)
-FUNC(1823)
-FUNC(1824)
-FUNC(1825)
-FUNC(1826)
-FUNC(1827)
-FUNC(1828)
-FUNC(1829)
-FUNC(1830)
-FUNC(1831)
-FUNC(1832)
-FUNC(1833)
-FUNC(1834)
-FUNC(1835)
-FUNC(1836)
-FUNC(1837)
-FUNC(1838)
-FUNC(1839)
-FUNC(1840)
-FUNC(1841)
-FUNC(1842)
-FUNC(1843)
-FUNC(1844)
-FUNC(1845)
-FUNC(1846)
-FUNC(1847)
-FUNC(1848)
-FUNC(1849)
-FUNC(1850)
-FUNC(1851)
-FUNC(1852)
-FUNC(1853)
-FUNC(1854)
-FUNC(1855)
-FUNC(1856)
-FUNC(1857)
-FUNC(1858)
-FUNC(1859)
-FUNC(1860)
-FUNC(1861)
-FUNC(1862)
-FUNC(1863)
-FUNC(1864)
-FUNC(1865)
-FUNC(1866)
-FUNC(1867)
-FUNC(1868)
-FUNC(1869)
-FUNC(1870)
-FUNC(1871)
-FUNC(1872)
-FUNC(1873)
-FUNC(1874)
-FUNC(1875)
-FUNC(1876)
-FUNC(1877)
-FUNC(1878)
-FUNC(1879)
-FUNC(1880)
-FUNC(1881)
-FUNC(1882)
-FUNC(1883)
-FUNC(1884)
-FUNC(1885)
-FUNC(1886)
-FUNC(1887)
-FUNC(1888)
-FUNC(1889)
-FUNC(1890)
-FUNC(1891)
-FUNC(1892)
-FUNC(1893)
-FUNC(1894)
-FUNC(1895)
-FUNC(1896)
-FUNC(1897)
-FUNC(1898)
-FUNC(1899)
-FUNC(1900)
-FUNC(1901)
-FUNC(1902)
-FUNC(1903)
-FUNC(1904)
-FUNC(1905)
-FUNC(1906)
-FUNC(1907)
-FUNC(1908)
-FUNC(1909)
-FUNC(1910)
-FUNC(1911)
-FUNC(1912)
-FUNC(1913)
-FUNC(1914)
-FUNC(1915)
-FUNC(1916)
-FUNC(1917)
-FUNC(1918)
-FUNC(1919)
-FUNC(1920)
-FUNC(1921)
-FUNC(1922)
-FUNC(1923)
-FUNC(1924)
-FUNC(1925)
-FUNC(1926)
-FUNC(1927)
-FUNC(1928)
-FUNC(1929)
-FUNC(1930)
-FUNC(1931)
-FUNC(1932)
-FUNC(1933)
-FUNC(1934)
-FUNC(1935)
-FUNC(1936)
-FUNC(1937)
-FUNC(1938)
-FUNC(1939)
-FUNC(1940)
-FUNC(1941)
-FUNC(1942)
-FUNC(1943)
-FUNC(1944)
-FUNC(1945)
-FUNC(1946)
-FUNC(1947)
-FUNC(1948)
-FUNC(1949)
-FUNC(1950)
-FUNC(1951)
-FUNC(1952)
-FUNC(1953)
-FUNC(1954)
-FUNC(1955)
-FUNC(1956)
-FUNC(1957)
-FUNC(1958)
-FUNC(1959)
-FUNC(1960)
-FUNC(1961)
-FUNC(1962)
-FUNC(1963)
-FUNC(1964)
-FUNC(1965)
-FUNC(1966)
-FUNC(1967)
-FUNC(1968)
-FUNC(1969)
-FUNC(1970)
-FUNC(1971)
-FUNC(1972)
-FUNC(1973)
-FUNC(1974)
-FUNC(1975)
-FUNC(1976)
-FUNC(1977)
-FUNC(1978)
-FUNC(1979)
-FUNC(1980)
-FUNC(1981)
-FUNC(1982)
-FUNC(1983)
-FUNC(1984)
-FUNC(1985)
-FUNC(1986)
-FUNC(1987)
-FUNC(1988)
-FUNC(1989)
-FUNC(1990)
-FUNC(1991)
-FUNC(1992)
-FUNC(1993)
-FUNC(1994)
-FUNC(1995)
-FUNC(1996)
-FUNC(1997)
-FUNC(1998)
-FUNC(1999)
-FUNC(2000)
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* 
+This is jsut some "compiler fibre" for the compiler to chew
+on as part of a compilation performace test
+*/
+
+#define FUNC(VARIABLE)	\
+int function_##VARIABLE(void)	\
+{	\
+	int x,y,z;	\
+	x=VARIABLE+30* 10-1;	\
+	y=x*4;	\
+	\
+	\
+	x=y+1;	\
+	\
+	int a[VARIABLE];	\
+	\
+	\
+	\
+	for (z=0; z < 1000+VARIABLE; z++)	\
+	{	\
+		x+=a[z];		\
+	}	\
+	\
+	return x;	\
+}
+
+
+
+FUNC(1)
+FUNC(2)
+FUNC(3)
+FUNC(4)
+FUNC(5)
+FUNC(6)
+FUNC(7)
+FUNC(8)
+FUNC(9)
+FUNC(10)
+FUNC(11)
+FUNC(12)
+FUNC(13)
+FUNC(14)
+FUNC(15)
+FUNC(16)
+FUNC(17)
+FUNC(18)
+FUNC(19)
+FUNC(20)
+FUNC(21)
+FUNC(22)
+FUNC(23)
+FUNC(24)
+FUNC(25)
+FUNC(26)
+FUNC(27)
+FUNC(28)
+FUNC(29)
+FUNC(30)
+FUNC(31)
+FUNC(32)
+FUNC(33)
+FUNC(34)
+FUNC(35)
+FUNC(36)
+FUNC(37)
+FUNC(38)
+FUNC(39)
+FUNC(40)
+FUNC(41)
+FUNC(42)
+FUNC(43)
+FUNC(44)
+FUNC(45)
+FUNC(46)
+FUNC(47)
+FUNC(48)
+FUNC(49)
+FUNC(50)
+FUNC(51)
+FUNC(52)
+FUNC(53)
+FUNC(54)
+FUNC(55)
+FUNC(56)
+FUNC(57)
+FUNC(58)
+FUNC(59)
+FUNC(60)
+FUNC(61)
+FUNC(62)
+FUNC(63)
+FUNC(64)
+FUNC(65)
+FUNC(66)
+FUNC(67)
+FUNC(68)
+FUNC(69)
+FUNC(70)
+FUNC(71)
+FUNC(72)
+FUNC(73)
+FUNC(74)
+FUNC(75)
+FUNC(76)
+FUNC(77)
+FUNC(78)
+FUNC(79)
+FUNC(80)
+FUNC(81)
+FUNC(82)
+FUNC(83)
+FUNC(84)
+FUNC(85)
+FUNC(86)
+FUNC(87)
+FUNC(88)
+FUNC(89)
+FUNC(90)
+FUNC(91)
+FUNC(92)
+FUNC(93)
+FUNC(94)
+FUNC(95)
+FUNC(96)
+FUNC(97)
+FUNC(98)
+FUNC(99)
+FUNC(100)
+FUNC(101)
+FUNC(102)
+FUNC(103)
+FUNC(104)
+FUNC(105)
+FUNC(106)
+FUNC(107)
+FUNC(108)
+FUNC(109)
+FUNC(110)
+FUNC(111)
+FUNC(112)
+FUNC(113)
+FUNC(114)
+FUNC(115)
+FUNC(116)
+FUNC(117)
+FUNC(118)
+FUNC(119)
+FUNC(120)
+FUNC(121)
+FUNC(122)
+FUNC(123)
+FUNC(124)
+FUNC(125)
+FUNC(126)
+FUNC(127)
+FUNC(128)
+FUNC(129)
+FUNC(130)
+FUNC(131)
+FUNC(132)
+FUNC(133)
+FUNC(134)
+FUNC(135)
+FUNC(136)
+FUNC(137)
+FUNC(138)
+FUNC(139)
+FUNC(140)
+FUNC(141)
+FUNC(142)
+FUNC(143)
+FUNC(144)
+FUNC(145)
+FUNC(146)
+FUNC(147)
+FUNC(148)
+FUNC(149)
+FUNC(150)
+FUNC(151)
+FUNC(152)
+FUNC(153)
+FUNC(154)
+FUNC(155)
+FUNC(156)
+FUNC(157)
+FUNC(158)
+FUNC(159)
+FUNC(160)
+FUNC(161)
+FUNC(162)
+FUNC(163)
+FUNC(164)
+FUNC(165)
+FUNC(166)
+FUNC(167)
+FUNC(168)
+FUNC(169)
+FUNC(170)
+FUNC(171)
+FUNC(172)
+FUNC(173)
+FUNC(174)
+FUNC(175)
+FUNC(176)
+FUNC(177)
+FUNC(178)
+FUNC(179)
+FUNC(180)
+FUNC(181)
+FUNC(182)
+FUNC(183)
+FUNC(184)
+FUNC(185)
+FUNC(186)
+FUNC(187)
+FUNC(188)
+FUNC(189)
+FUNC(190)
+FUNC(191)
+FUNC(192)
+FUNC(193)
+FUNC(194)
+FUNC(195)
+FUNC(196)
+FUNC(197)
+FUNC(198)
+FUNC(199)
+FUNC(200)
+FUNC(201)
+FUNC(202)
+FUNC(203)
+FUNC(204)
+FUNC(205)
+FUNC(206)
+FUNC(207)
+FUNC(208)
+FUNC(209)
+FUNC(210)
+FUNC(211)
+FUNC(212)
+FUNC(213)
+FUNC(214)
+FUNC(215)
+FUNC(216)
+FUNC(217)
+FUNC(218)
+FUNC(219)
+FUNC(220)
+FUNC(221)
+FUNC(222)
+FUNC(223)
+FUNC(224)
+FUNC(225)
+FUNC(226)
+FUNC(227)
+FUNC(228)
+FUNC(229)
+FUNC(230)
+FUNC(231)
+FUNC(232)
+FUNC(233)
+FUNC(234)
+FUNC(235)
+FUNC(236)
+FUNC(237)
+FUNC(238)
+FUNC(239)
+FUNC(240)
+FUNC(241)
+FUNC(242)
+FUNC(243)
+FUNC(244)
+FUNC(245)
+FUNC(246)
+FUNC(247)
+FUNC(248)
+FUNC(249)
+FUNC(250)
+FUNC(251)
+FUNC(252)
+FUNC(253)
+FUNC(254)
+FUNC(255)
+FUNC(256)
+FUNC(257)
+FUNC(258)
+FUNC(259)
+FUNC(260)
+FUNC(261)
+FUNC(262)
+FUNC(263)
+FUNC(264)
+FUNC(265)
+FUNC(266)
+FUNC(267)
+FUNC(268)
+FUNC(269)
+FUNC(270)
+FUNC(271)
+FUNC(272)
+FUNC(273)
+FUNC(274)
+FUNC(275)
+FUNC(276)
+FUNC(277)
+FUNC(278)
+FUNC(279)
+FUNC(280)
+FUNC(281)
+FUNC(282)
+FUNC(283)
+FUNC(284)
+FUNC(285)
+FUNC(286)
+FUNC(287)
+FUNC(288)
+FUNC(289)
+FUNC(290)
+FUNC(291)
+FUNC(292)
+FUNC(293)
+FUNC(294)
+FUNC(295)
+FUNC(296)
+FUNC(297)
+FUNC(298)
+FUNC(299)
+FUNC(300)
+FUNC(301)
+FUNC(302)
+FUNC(303)
+FUNC(304)
+FUNC(305)
+FUNC(306)
+FUNC(307)
+FUNC(308)
+FUNC(309)
+FUNC(310)
+FUNC(311)
+FUNC(312)
+FUNC(313)
+FUNC(314)
+FUNC(315)
+FUNC(316)
+FUNC(317)
+FUNC(318)
+FUNC(319)
+FUNC(320)
+FUNC(321)
+FUNC(322)
+FUNC(323)
+FUNC(324)
+FUNC(325)
+FUNC(326)
+FUNC(327)
+FUNC(328)
+FUNC(329)
+FUNC(330)
+FUNC(331)
+FUNC(332)
+FUNC(333)
+FUNC(334)
+FUNC(335)
+FUNC(336)
+FUNC(337)
+FUNC(338)
+FUNC(339)
+FUNC(340)
+FUNC(341)
+FUNC(342)
+FUNC(343)
+FUNC(344)
+FUNC(345)
+FUNC(346)
+FUNC(347)
+FUNC(348)
+FUNC(349)
+FUNC(350)
+FUNC(351)
+FUNC(352)
+FUNC(353)
+FUNC(354)
+FUNC(355)
+FUNC(356)
+FUNC(357)
+FUNC(358)
+FUNC(359)
+FUNC(360)
+FUNC(361)
+FUNC(362)
+FUNC(363)
+FUNC(364)
+FUNC(365)
+FUNC(366)
+FUNC(367)
+FUNC(368)
+FUNC(369)
+FUNC(370)
+FUNC(371)
+FUNC(372)
+FUNC(373)
+FUNC(374)
+FUNC(375)
+FUNC(376)
+FUNC(377)
+FUNC(378)
+FUNC(379)
+FUNC(380)
+FUNC(381)
+FUNC(382)
+FUNC(383)
+FUNC(384)
+FUNC(385)
+FUNC(386)
+FUNC(387)
+FUNC(388)
+FUNC(389)
+FUNC(390)
+FUNC(391)
+FUNC(392)
+FUNC(393)
+FUNC(394)
+FUNC(395)
+FUNC(396)
+FUNC(397)
+FUNC(398)
+FUNC(399)
+FUNC(400)
+FUNC(401)
+FUNC(402)
+FUNC(403)
+FUNC(404)
+FUNC(405)
+FUNC(406)
+FUNC(407)
+FUNC(408)
+FUNC(409)
+FUNC(410)
+FUNC(411)
+FUNC(412)
+FUNC(413)
+FUNC(414)
+FUNC(415)
+FUNC(416)
+FUNC(417)
+FUNC(418)
+FUNC(419)
+FUNC(420)
+FUNC(421)
+FUNC(422)
+FUNC(423)
+FUNC(424)
+FUNC(425)
+FUNC(426)
+FUNC(427)
+FUNC(428)
+FUNC(429)
+FUNC(430)
+FUNC(431)
+FUNC(432)
+FUNC(433)
+FUNC(434)
+FUNC(435)
+FUNC(436)
+FUNC(437)
+FUNC(438)
+FUNC(439)
+FUNC(440)
+FUNC(441)
+FUNC(442)
+FUNC(443)
+FUNC(444)
+FUNC(445)
+FUNC(446)
+FUNC(447)
+FUNC(448)
+FUNC(449)
+FUNC(450)
+FUNC(451)
+FUNC(452)
+FUNC(453)
+FUNC(454)
+FUNC(455)
+FUNC(456)
+FUNC(457)
+FUNC(458)
+FUNC(459)
+FUNC(460)
+FUNC(461)
+FUNC(462)
+FUNC(463)
+FUNC(464)
+FUNC(465)
+FUNC(466)
+FUNC(467)
+FUNC(468)
+FUNC(469)
+FUNC(470)
+FUNC(471)
+FUNC(472)
+FUNC(473)
+FUNC(474)
+FUNC(475)
+FUNC(476)
+FUNC(477)
+FUNC(478)
+FUNC(479)
+FUNC(480)
+FUNC(481)
+FUNC(482)
+FUNC(483)
+FUNC(484)
+FUNC(485)
+FUNC(486)
+FUNC(487)
+FUNC(488)
+FUNC(489)
+FUNC(490)
+FUNC(491)
+FUNC(492)
+FUNC(493)
+FUNC(494)
+FUNC(495)
+FUNC(496)
+FUNC(497)
+FUNC(498)
+FUNC(499)
+FUNC(500)
+FUNC(501)
+FUNC(502)
+FUNC(503)
+FUNC(504)
+FUNC(505)
+FUNC(506)
+FUNC(507)
+FUNC(508)
+FUNC(509)
+FUNC(510)
+FUNC(511)
+FUNC(512)
+FUNC(513)
+FUNC(514)
+FUNC(515)
+FUNC(516)
+FUNC(517)
+FUNC(518)
+FUNC(519)
+FUNC(520)
+FUNC(521)
+FUNC(522)
+FUNC(523)
+FUNC(524)
+FUNC(525)
+FUNC(526)
+FUNC(527)
+FUNC(528)
+FUNC(529)
+FUNC(530)
+FUNC(531)
+FUNC(532)
+FUNC(533)
+FUNC(534)
+FUNC(535)
+FUNC(536)
+FUNC(537)
+FUNC(538)
+FUNC(539)
+FUNC(540)
+FUNC(541)
+FUNC(542)
+FUNC(543)
+FUNC(544)
+FUNC(545)
+FUNC(546)
+FUNC(547)
+FUNC(548)
+FUNC(549)
+FUNC(550)
+FUNC(551)
+FUNC(552)
+FUNC(553)
+FUNC(554)
+FUNC(555)
+FUNC(556)
+FUNC(557)
+FUNC(558)
+FUNC(559)
+FUNC(560)
+FUNC(561)
+FUNC(562)
+FUNC(563)
+FUNC(564)
+FUNC(565)
+FUNC(566)
+FUNC(567)
+FUNC(568)
+FUNC(569)
+FUNC(570)
+FUNC(571)
+FUNC(572)
+FUNC(573)
+FUNC(574)
+FUNC(575)
+FUNC(576)
+FUNC(577)
+FUNC(578)
+FUNC(579)
+FUNC(580)
+FUNC(581)
+FUNC(582)
+FUNC(583)
+FUNC(584)
+FUNC(585)
+FUNC(586)
+FUNC(587)
+FUNC(588)
+FUNC(589)
+FUNC(590)
+FUNC(591)
+FUNC(592)
+FUNC(593)
+FUNC(594)
+FUNC(595)
+FUNC(596)
+FUNC(597)
+FUNC(598)
+FUNC(599)
+FUNC(600)
+FUNC(601)
+FUNC(602)
+FUNC(603)
+FUNC(604)
+FUNC(605)
+FUNC(606)
+FUNC(607)
+FUNC(608)
+FUNC(609)
+FUNC(610)
+FUNC(611)
+FUNC(612)
+FUNC(613)
+FUNC(614)
+FUNC(615)
+FUNC(616)
+FUNC(617)
+FUNC(618)
+FUNC(619)
+FUNC(620)
+FUNC(621)
+FUNC(622)
+FUNC(623)
+FUNC(624)
+FUNC(625)
+FUNC(626)
+FUNC(627)
+FUNC(628)
+FUNC(629)
+FUNC(630)
+FUNC(631)
+FUNC(632)
+FUNC(633)
+FUNC(634)
+FUNC(635)
+FUNC(636)
+FUNC(637)
+FUNC(638)
+FUNC(639)
+FUNC(640)
+FUNC(641)
+FUNC(642)
+FUNC(643)
+FUNC(644)
+FUNC(645)
+FUNC(646)
+FUNC(647)
+FUNC(648)
+FUNC(649)
+FUNC(650)
+FUNC(651)
+FUNC(652)
+FUNC(653)
+FUNC(654)
+FUNC(655)
+FUNC(656)
+FUNC(657)
+FUNC(658)
+FUNC(659)
+FUNC(660)
+FUNC(661)
+FUNC(662)
+FUNC(663)
+FUNC(664)
+FUNC(665)
+FUNC(666)
+FUNC(667)
+FUNC(668)
+FUNC(669)
+FUNC(670)
+FUNC(671)
+FUNC(672)
+FUNC(673)
+FUNC(674)
+FUNC(675)
+FUNC(676)
+FUNC(677)
+FUNC(678)
+FUNC(679)
+FUNC(680)
+FUNC(681)
+FUNC(682)
+FUNC(683)
+FUNC(684)
+FUNC(685)
+FUNC(686)
+FUNC(687)
+FUNC(688)
+FUNC(689)
+FUNC(690)
+FUNC(691)
+FUNC(692)
+FUNC(693)
+FUNC(694)
+FUNC(695)
+FUNC(696)
+FUNC(697)
+FUNC(698)
+FUNC(699)
+FUNC(700)
+FUNC(701)
+FUNC(702)
+FUNC(703)
+FUNC(704)
+FUNC(705)
+FUNC(706)
+FUNC(707)
+FUNC(708)
+FUNC(709)
+FUNC(710)
+FUNC(711)
+FUNC(712)
+FUNC(713)
+FUNC(714)
+FUNC(715)
+FUNC(716)
+FUNC(717)
+FUNC(718)
+FUNC(719)
+FUNC(720)
+FUNC(721)
+FUNC(722)
+FUNC(723)
+FUNC(724)
+FUNC(725)
+FUNC(726)
+FUNC(727)
+FUNC(728)
+FUNC(729)
+FUNC(730)
+FUNC(731)
+FUNC(732)
+FUNC(733)
+FUNC(734)
+FUNC(735)
+FUNC(736)
+FUNC(737)
+FUNC(738)
+FUNC(739)
+FUNC(740)
+FUNC(741)
+FUNC(742)
+FUNC(743)
+FUNC(744)
+FUNC(745)
+FUNC(746)
+FUNC(747)
+FUNC(748)
+FUNC(749)
+FUNC(750)
+FUNC(751)
+FUNC(752)
+FUNC(753)
+FUNC(754)
+FUNC(755)
+FUNC(756)
+FUNC(757)
+FUNC(758)
+FUNC(759)
+FUNC(760)
+FUNC(761)
+FUNC(762)
+FUNC(763)
+FUNC(764)
+FUNC(765)
+FUNC(766)
+FUNC(767)
+FUNC(768)
+FUNC(769)
+FUNC(770)
+FUNC(771)
+FUNC(772)
+FUNC(773)
+FUNC(774)
+FUNC(775)
+FUNC(776)
+FUNC(777)
+FUNC(778)
+FUNC(779)
+FUNC(780)
+FUNC(781)
+FUNC(782)
+FUNC(783)
+FUNC(784)
+FUNC(785)
+FUNC(786)
+FUNC(787)
+FUNC(788)
+FUNC(789)
+FUNC(790)
+FUNC(791)
+FUNC(792)
+FUNC(793)
+FUNC(794)
+FUNC(795)
+FUNC(796)
+FUNC(797)
+FUNC(798)
+FUNC(799)
+FUNC(800)
+FUNC(801)
+FUNC(802)
+FUNC(803)
+FUNC(804)
+FUNC(805)
+FUNC(806)
+FUNC(807)
+FUNC(808)
+FUNC(809)
+FUNC(810)
+FUNC(811)
+FUNC(812)
+FUNC(813)
+FUNC(814)
+FUNC(815)
+FUNC(816)
+FUNC(817)
+FUNC(818)
+FUNC(819)
+FUNC(820)
+FUNC(821)
+FUNC(822)
+FUNC(823)
+FUNC(824)
+FUNC(825)
+FUNC(826)
+FUNC(827)
+FUNC(828)
+FUNC(829)
+FUNC(830)
+FUNC(831)
+FUNC(832)
+FUNC(833)
+FUNC(834)
+FUNC(835)
+FUNC(836)
+FUNC(837)
+FUNC(838)
+FUNC(839)
+FUNC(840)
+FUNC(841)
+FUNC(842)
+FUNC(843)
+FUNC(844)
+FUNC(845)
+FUNC(846)
+FUNC(847)
+FUNC(848)
+FUNC(849)
+FUNC(850)
+FUNC(851)
+FUNC(852)
+FUNC(853)
+FUNC(854)
+FUNC(855)
+FUNC(856)
+FUNC(857)
+FUNC(858)
+FUNC(859)
+FUNC(860)
+FUNC(861)
+FUNC(862)
+FUNC(863)
+FUNC(864)
+FUNC(865)
+FUNC(866)
+FUNC(867)
+FUNC(868)
+FUNC(869)
+FUNC(870)
+FUNC(871)
+FUNC(872)
+FUNC(873)
+FUNC(874)
+FUNC(875)
+FUNC(876)
+FUNC(877)
+FUNC(878)
+FUNC(879)
+FUNC(880)
+FUNC(881)
+FUNC(882)
+FUNC(883)
+FUNC(884)
+FUNC(885)
+FUNC(886)
+FUNC(887)
+FUNC(888)
+FUNC(889)
+FUNC(890)
+FUNC(891)
+FUNC(892)
+FUNC(893)
+FUNC(894)
+FUNC(895)
+FUNC(896)
+FUNC(897)
+FUNC(898)
+FUNC(899)
+FUNC(900)
+FUNC(901)
+FUNC(902)
+FUNC(903)
+FUNC(904)
+FUNC(905)
+FUNC(906)
+FUNC(907)
+FUNC(908)
+FUNC(909)
+FUNC(910)
+FUNC(911)
+FUNC(912)
+FUNC(913)
+FUNC(914)
+FUNC(915)
+FUNC(916)
+FUNC(917)
+FUNC(918)
+FUNC(919)
+FUNC(920)
+FUNC(921)
+FUNC(922)
+FUNC(923)
+FUNC(924)
+FUNC(925)
+FUNC(926)
+FUNC(927)
+FUNC(928)
+FUNC(929)
+FUNC(930)
+FUNC(931)
+FUNC(932)
+FUNC(933)
+FUNC(934)
+FUNC(935)
+FUNC(936)
+FUNC(937)
+FUNC(938)
+FUNC(939)
+FUNC(940)
+FUNC(941)
+FUNC(942)
+FUNC(943)
+FUNC(944)
+FUNC(945)
+FUNC(946)
+FUNC(947)
+FUNC(948)
+FUNC(949)
+FUNC(950)
+FUNC(951)
+FUNC(952)
+FUNC(953)
+FUNC(954)
+FUNC(955)
+FUNC(956)
+FUNC(957)
+FUNC(958)
+FUNC(959)
+FUNC(960)
+FUNC(961)
+FUNC(962)
+FUNC(963)
+FUNC(964)
+FUNC(965)
+FUNC(966)
+FUNC(967)
+FUNC(968)
+FUNC(969)
+FUNC(970)
+FUNC(971)
+FUNC(972)
+FUNC(973)
+FUNC(974)
+FUNC(975)
+FUNC(976)
+FUNC(977)
+FUNC(978)
+FUNC(979)
+FUNC(980)
+FUNC(981)
+FUNC(982)
+FUNC(983)
+FUNC(984)
+FUNC(985)
+FUNC(986)
+FUNC(987)
+FUNC(988)
+FUNC(989)
+FUNC(990)
+FUNC(991)
+FUNC(992)
+FUNC(993)
+FUNC(994)
+FUNC(995)
+FUNC(996)
+FUNC(997)
+FUNC(998)
+FUNC(999)
+FUNC(1000)
+FUNC(1001)
+FUNC(1002)
+FUNC(1003)
+FUNC(1004)
+FUNC(1005)
+FUNC(1006)
+FUNC(1007)
+FUNC(1008)
+FUNC(1009)
+FUNC(1010)
+FUNC(1011)
+FUNC(1012)
+FUNC(1013)
+FUNC(1014)
+FUNC(1015)
+FUNC(1016)
+FUNC(1017)
+FUNC(1018)
+FUNC(1019)
+FUNC(1020)
+FUNC(1021)
+FUNC(1022)
+FUNC(1023)
+FUNC(1024)
+FUNC(1025)
+FUNC(1026)
+FUNC(1027)
+FUNC(1028)
+FUNC(1029)
+FUNC(1030)
+FUNC(1031)
+FUNC(1032)
+FUNC(1033)
+FUNC(1034)
+FUNC(1035)
+FUNC(1036)
+FUNC(1037)
+FUNC(1038)
+FUNC(1039)
+FUNC(1040)
+FUNC(1041)
+FUNC(1042)
+FUNC(1043)
+FUNC(1044)
+FUNC(1045)
+FUNC(1046)
+FUNC(1047)
+FUNC(1048)
+FUNC(1049)
+FUNC(1050)
+FUNC(1051)
+FUNC(1052)
+FUNC(1053)
+FUNC(1054)
+FUNC(1055)
+FUNC(1056)
+FUNC(1057)
+FUNC(1058)
+FUNC(1059)
+FUNC(1060)
+FUNC(1061)
+FUNC(1062)
+FUNC(1063)
+FUNC(1064)
+FUNC(1065)
+FUNC(1066)
+FUNC(1067)
+FUNC(1068)
+FUNC(1069)
+FUNC(1070)
+FUNC(1071)
+FUNC(1072)
+FUNC(1073)
+FUNC(1074)
+FUNC(1075)
+FUNC(1076)
+FUNC(1077)
+FUNC(1078)
+FUNC(1079)
+FUNC(1080)
+FUNC(1081)
+FUNC(1082)
+FUNC(1083)
+FUNC(1084)
+FUNC(1085)
+FUNC(1086)
+FUNC(1087)
+FUNC(1088)
+FUNC(1089)
+FUNC(1090)
+FUNC(1091)
+FUNC(1092)
+FUNC(1093)
+FUNC(1094)
+FUNC(1095)
+FUNC(1096)
+FUNC(1097)
+FUNC(1098)
+FUNC(1099)
+FUNC(1100)
+FUNC(1101)
+FUNC(1102)
+FUNC(1103)
+FUNC(1104)
+FUNC(1105)
+FUNC(1106)
+FUNC(1107)
+FUNC(1108)
+FUNC(1109)
+FUNC(1110)
+FUNC(1111)
+FUNC(1112)
+FUNC(1113)
+FUNC(1114)
+FUNC(1115)
+FUNC(1116)
+FUNC(1117)
+FUNC(1118)
+FUNC(1119)
+FUNC(1120)
+FUNC(1121)
+FUNC(1122)
+FUNC(1123)
+FUNC(1124)
+FUNC(1125)
+FUNC(1126)
+FUNC(1127)
+FUNC(1128)
+FUNC(1129)
+FUNC(1130)
+FUNC(1131)
+FUNC(1132)
+FUNC(1133)
+FUNC(1134)
+FUNC(1135)
+FUNC(1136)
+FUNC(1137)
+FUNC(1138)
+FUNC(1139)
+FUNC(1140)
+FUNC(1141)
+FUNC(1142)
+FUNC(1143)
+FUNC(1144)
+FUNC(1145)
+FUNC(1146)
+FUNC(1147)
+FUNC(1148)
+FUNC(1149)
+FUNC(1150)
+FUNC(1151)
+FUNC(1152)
+FUNC(1153)
+FUNC(1154)
+FUNC(1155)
+FUNC(1156)
+FUNC(1157)
+FUNC(1158)
+FUNC(1159)
+FUNC(1160)
+FUNC(1161)
+FUNC(1162)
+FUNC(1163)
+FUNC(1164)
+FUNC(1165)
+FUNC(1166)
+FUNC(1167)
+FUNC(1168)
+FUNC(1169)
+FUNC(1170)
+FUNC(1171)
+FUNC(1172)
+FUNC(1173)
+FUNC(1174)
+FUNC(1175)
+FUNC(1176)
+FUNC(1177)
+FUNC(1178)
+FUNC(1179)
+FUNC(1180)
+FUNC(1181)
+FUNC(1182)
+FUNC(1183)
+FUNC(1184)
+FUNC(1185)
+FUNC(1186)
+FUNC(1187)
+FUNC(1188)
+FUNC(1189)
+FUNC(1190)
+FUNC(1191)
+FUNC(1192)
+FUNC(1193)
+FUNC(1194)
+FUNC(1195)
+FUNC(1196)
+FUNC(1197)
+FUNC(1198)
+FUNC(1199)
+FUNC(1200)
+FUNC(1201)
+FUNC(1202)
+FUNC(1203)
+FUNC(1204)
+FUNC(1205)
+FUNC(1206)
+FUNC(1207)
+FUNC(1208)
+FUNC(1209)
+FUNC(1210)
+FUNC(1211)
+FUNC(1212)
+FUNC(1213)
+FUNC(1214)
+FUNC(1215)
+FUNC(1216)
+FUNC(1217)
+FUNC(1218)
+FUNC(1219)
+FUNC(1220)
+FUNC(1221)
+FUNC(1222)
+FUNC(1223)
+FUNC(1224)
+FUNC(1225)
+FUNC(1226)
+FUNC(1227)
+FUNC(1228)
+FUNC(1229)
+FUNC(1230)
+FUNC(1231)
+FUNC(1232)
+FUNC(1233)
+FUNC(1234)
+FUNC(1235)
+FUNC(1236)
+FUNC(1237)
+FUNC(1238)
+FUNC(1239)
+FUNC(1240)
+FUNC(1241)
+FUNC(1242)
+FUNC(1243)
+FUNC(1244)
+FUNC(1245)
+FUNC(1246)
+FUNC(1247)
+FUNC(1248)
+FUNC(1249)
+FUNC(1250)
+FUNC(1251)
+FUNC(1252)
+FUNC(1253)
+FUNC(1254)
+FUNC(1255)
+FUNC(1256)
+FUNC(1257)
+FUNC(1258)
+FUNC(1259)
+FUNC(1260)
+FUNC(1261)
+FUNC(1262)
+FUNC(1263)
+FUNC(1264)
+FUNC(1265)
+FUNC(1266)
+FUNC(1267)
+FUNC(1268)
+FUNC(1269)
+FUNC(1270)
+FUNC(1271)
+FUNC(1272)
+FUNC(1273)
+FUNC(1274)
+FUNC(1275)
+FUNC(1276)
+FUNC(1277)
+FUNC(1278)
+FUNC(1279)
+FUNC(1280)
+FUNC(1281)
+FUNC(1282)
+FUNC(1283)
+FUNC(1284)
+FUNC(1285)
+FUNC(1286)
+FUNC(1287)
+FUNC(1288)
+FUNC(1289)
+FUNC(1290)
+FUNC(1291)
+FUNC(1292)
+FUNC(1293)
+FUNC(1294)
+FUNC(1295)
+FUNC(1296)
+FUNC(1297)
+FUNC(1298)
+FUNC(1299)
+FUNC(1300)
+FUNC(1301)
+FUNC(1302)
+FUNC(1303)
+FUNC(1304)
+FUNC(1305)
+FUNC(1306)
+FUNC(1307)
+FUNC(1308)
+FUNC(1309)
+FUNC(1310)
+FUNC(1311)
+FUNC(1312)
+FUNC(1313)
+FUNC(1314)
+FUNC(1315)
+FUNC(1316)
+FUNC(1317)
+FUNC(1318)
+FUNC(1319)
+FUNC(1320)
+FUNC(1321)
+FUNC(1322)
+FUNC(1323)
+FUNC(1324)
+FUNC(1325)
+FUNC(1326)
+FUNC(1327)
+FUNC(1328)
+FUNC(1329)
+FUNC(1330)
+FUNC(1331)
+FUNC(1332)
+FUNC(1333)
+FUNC(1334)
+FUNC(1335)
+FUNC(1336)
+FUNC(1337)
+FUNC(1338)
+FUNC(1339)
+FUNC(1340)
+FUNC(1341)
+FUNC(1342)
+FUNC(1343)
+FUNC(1344)
+FUNC(1345)
+FUNC(1346)
+FUNC(1347)
+FUNC(1348)
+FUNC(1349)
+FUNC(1350)
+FUNC(1351)
+FUNC(1352)
+FUNC(1353)
+FUNC(1354)
+FUNC(1355)
+FUNC(1356)
+FUNC(1357)
+FUNC(1358)
+FUNC(1359)
+FUNC(1360)
+FUNC(1361)
+FUNC(1362)
+FUNC(1363)
+FUNC(1364)
+FUNC(1365)
+FUNC(1366)
+FUNC(1367)
+FUNC(1368)
+FUNC(1369)
+FUNC(1370)
+FUNC(1371)
+FUNC(1372)
+FUNC(1373)
+FUNC(1374)
+FUNC(1375)
+FUNC(1376)
+FUNC(1377)
+FUNC(1378)
+FUNC(1379)
+FUNC(1380)
+FUNC(1381)
+FUNC(1382)
+FUNC(1383)
+FUNC(1384)
+FUNC(1385)
+FUNC(1386)
+FUNC(1387)
+FUNC(1388)
+FUNC(1389)
+FUNC(1390)
+FUNC(1391)
+FUNC(1392)
+FUNC(1393)
+FUNC(1394)
+FUNC(1395)
+FUNC(1396)
+FUNC(1397)
+FUNC(1398)
+FUNC(1399)
+FUNC(1400)
+FUNC(1401)
+FUNC(1402)
+FUNC(1403)
+FUNC(1404)
+FUNC(1405)
+FUNC(1406)
+FUNC(1407)
+FUNC(1408)
+FUNC(1409)
+FUNC(1410)
+FUNC(1411)
+FUNC(1412)
+FUNC(1413)
+FUNC(1414)
+FUNC(1415)
+FUNC(1416)
+FUNC(1417)
+FUNC(1418)
+FUNC(1419)
+FUNC(1420)
+FUNC(1421)
+FUNC(1422)
+FUNC(1423)
+FUNC(1424)
+FUNC(1425)
+FUNC(1426)
+FUNC(1427)
+FUNC(1428)
+FUNC(1429)
+FUNC(1430)
+FUNC(1431)
+FUNC(1432)
+FUNC(1433)
+FUNC(1434)
+FUNC(1435)
+FUNC(1436)
+FUNC(1437)
+FUNC(1438)
+FUNC(1439)
+FUNC(1440)
+FUNC(1441)
+FUNC(1442)
+FUNC(1443)
+FUNC(1444)
+FUNC(1445)
+FUNC(1446)
+FUNC(1447)
+FUNC(1448)
+FUNC(1449)
+FUNC(1450)
+FUNC(1451)
+FUNC(1452)
+FUNC(1453)
+FUNC(1454)
+FUNC(1455)
+FUNC(1456)
+FUNC(1457)
+FUNC(1458)
+FUNC(1459)
+FUNC(1460)
+FUNC(1461)
+FUNC(1462)
+FUNC(1463)
+FUNC(1464)
+FUNC(1465)
+FUNC(1466)
+FUNC(1467)
+FUNC(1468)
+FUNC(1469)
+FUNC(1470)
+FUNC(1471)
+FUNC(1472)
+FUNC(1473)
+FUNC(1474)
+FUNC(1475)
+FUNC(1476)
+FUNC(1477)
+FUNC(1478)
+FUNC(1479)
+FUNC(1480)
+FUNC(1481)
+FUNC(1482)
+FUNC(1483)
+FUNC(1484)
+FUNC(1485)
+FUNC(1486)
+FUNC(1487)
+FUNC(1488)
+FUNC(1489)
+FUNC(1490)
+FUNC(1491)
+FUNC(1492)
+FUNC(1493)
+FUNC(1494)
+FUNC(1495)
+FUNC(1496)
+FUNC(1497)
+FUNC(1498)
+FUNC(1499)
+FUNC(1500)
+FUNC(1501)
+FUNC(1502)
+FUNC(1503)
+FUNC(1504)
+FUNC(1505)
+FUNC(1506)
+FUNC(1507)
+FUNC(1508)
+FUNC(1509)
+FUNC(1510)
+FUNC(1511)
+FUNC(1512)
+FUNC(1513)
+FUNC(1514)
+FUNC(1515)
+FUNC(1516)
+FUNC(1517)
+FUNC(1518)
+FUNC(1519)
+FUNC(1520)
+FUNC(1521)
+FUNC(1522)
+FUNC(1523)
+FUNC(1524)
+FUNC(1525)
+FUNC(1526)
+FUNC(1527)
+FUNC(1528)
+FUNC(1529)
+FUNC(1530)
+FUNC(1531)
+FUNC(1532)
+FUNC(1533)
+FUNC(1534)
+FUNC(1535)
+FUNC(1536)
+FUNC(1537)
+FUNC(1538)
+FUNC(1539)
+FUNC(1540)
+FUNC(1541)
+FUNC(1542)
+FUNC(1543)
+FUNC(1544)
+FUNC(1545)
+FUNC(1546)
+FUNC(1547)
+FUNC(1548)
+FUNC(1549)
+FUNC(1550)
+FUNC(1551)
+FUNC(1552)
+FUNC(1553)
+FUNC(1554)
+FUNC(1555)
+FUNC(1556)
+FUNC(1557)
+FUNC(1558)
+FUNC(1559)
+FUNC(1560)
+FUNC(1561)
+FUNC(1562)
+FUNC(1563)
+FUNC(1564)
+FUNC(1565)
+FUNC(1566)
+FUNC(1567)
+FUNC(1568)
+FUNC(1569)
+FUNC(1570)
+FUNC(1571)
+FUNC(1572)
+FUNC(1573)
+FUNC(1574)
+FUNC(1575)
+FUNC(1576)
+FUNC(1577)
+FUNC(1578)
+FUNC(1579)
+FUNC(1580)
+FUNC(1581)
+FUNC(1582)
+FUNC(1583)
+FUNC(1584)
+FUNC(1585)
+FUNC(1586)
+FUNC(1587)
+FUNC(1588)
+FUNC(1589)
+FUNC(1590)
+FUNC(1591)
+FUNC(1592)
+FUNC(1593)
+FUNC(1594)
+FUNC(1595)
+FUNC(1596)
+FUNC(1597)
+FUNC(1598)
+FUNC(1599)
+FUNC(1600)
+FUNC(1601)
+FUNC(1602)
+FUNC(1603)
+FUNC(1604)
+FUNC(1605)
+FUNC(1606)
+FUNC(1607)
+FUNC(1608)
+FUNC(1609)
+FUNC(1610)
+FUNC(1611)
+FUNC(1612)
+FUNC(1613)
+FUNC(1614)
+FUNC(1615)
+FUNC(1616)
+FUNC(1617)
+FUNC(1618)
+FUNC(1619)
+FUNC(1620)
+FUNC(1621)
+FUNC(1622)
+FUNC(1623)
+FUNC(1624)
+FUNC(1625)
+FUNC(1626)
+FUNC(1627)
+FUNC(1628)
+FUNC(1629)
+FUNC(1630)
+FUNC(1631)
+FUNC(1632)
+FUNC(1633)
+FUNC(1634)
+FUNC(1635)
+FUNC(1636)
+FUNC(1637)
+FUNC(1638)
+FUNC(1639)
+FUNC(1640)
+FUNC(1641)
+FUNC(1642)
+FUNC(1643)
+FUNC(1644)
+FUNC(1645)
+FUNC(1646)
+FUNC(1647)
+FUNC(1648)
+FUNC(1649)
+FUNC(1650)
+FUNC(1651)
+FUNC(1652)
+FUNC(1653)
+FUNC(1654)
+FUNC(1655)
+FUNC(1656)
+FUNC(1657)
+FUNC(1658)
+FUNC(1659)
+FUNC(1660)
+FUNC(1661)
+FUNC(1662)
+FUNC(1663)
+FUNC(1664)
+FUNC(1665)
+FUNC(1666)
+FUNC(1667)
+FUNC(1668)
+FUNC(1669)
+FUNC(1670)
+FUNC(1671)
+FUNC(1672)
+FUNC(1673)
+FUNC(1674)
+FUNC(1675)
+FUNC(1676)
+FUNC(1677)
+FUNC(1678)
+FUNC(1679)
+FUNC(1680)
+FUNC(1681)
+FUNC(1682)
+FUNC(1683)
+FUNC(1684)
+FUNC(1685)
+FUNC(1686)
+FUNC(1687)
+FUNC(1688)
+FUNC(1689)
+FUNC(1690)
+FUNC(1691)
+FUNC(1692)
+FUNC(1693)
+FUNC(1694)
+FUNC(1695)
+FUNC(1696)
+FUNC(1697)
+FUNC(1698)
+FUNC(1699)
+FUNC(1700)
+FUNC(1701)
+FUNC(1702)
+FUNC(1703)
+FUNC(1704)
+FUNC(1705)
+FUNC(1706)
+FUNC(1707)
+FUNC(1708)
+FUNC(1709)
+FUNC(1710)
+FUNC(1711)
+FUNC(1712)
+FUNC(1713)
+FUNC(1714)
+FUNC(1715)
+FUNC(1716)
+FUNC(1717)
+FUNC(1718)
+FUNC(1719)
+FUNC(1720)
+FUNC(1721)
+FUNC(1722)
+FUNC(1723)
+FUNC(1724)
+FUNC(1725)
+FUNC(1726)
+FUNC(1727)
+FUNC(1728)
+FUNC(1729)
+FUNC(1730)
+FUNC(1731)
+FUNC(1732)
+FUNC(1733)
+FUNC(1734)
+FUNC(1735)
+FUNC(1736)
+FUNC(1737)
+FUNC(1738)
+FUNC(1739)
+FUNC(1740)
+FUNC(1741)
+FUNC(1742)
+FUNC(1743)
+FUNC(1744)
+FUNC(1745)
+FUNC(1746)
+FUNC(1747)
+FUNC(1748)
+FUNC(1749)
+FUNC(1750)
+FUNC(1751)
+FUNC(1752)
+FUNC(1753)
+FUNC(1754)
+FUNC(1755)
+FUNC(1756)
+FUNC(1757)
+FUNC(1758)
+FUNC(1759)
+FUNC(1760)
+FUNC(1761)
+FUNC(1762)
+FUNC(1763)
+FUNC(1764)
+FUNC(1765)
+FUNC(1766)
+FUNC(1767)
+FUNC(1768)
+FUNC(1769)
+FUNC(1770)
+FUNC(1771)
+FUNC(1772)
+FUNC(1773)
+FUNC(1774)
+FUNC(1775)
+FUNC(1776)
+FUNC(1777)
+FUNC(1778)
+FUNC(1779)
+FUNC(1780)
+FUNC(1781)
+FUNC(1782)
+FUNC(1783)
+FUNC(1784)
+FUNC(1785)
+FUNC(1786)
+FUNC(1787)
+FUNC(1788)
+FUNC(1789)
+FUNC(1790)
+FUNC(1791)
+FUNC(1792)
+FUNC(1793)
+FUNC(1794)
+FUNC(1795)
+FUNC(1796)
+FUNC(1797)
+FUNC(1798)
+FUNC(1799)
+FUNC(1800)
+FUNC(1801)
+FUNC(1802)
+FUNC(1803)
+FUNC(1804)
+FUNC(1805)
+FUNC(1806)
+FUNC(1807)
+FUNC(1808)
+FUNC(1809)
+FUNC(1810)
+FUNC(1811)
+FUNC(1812)
+FUNC(1813)
+FUNC(1814)
+FUNC(1815)
+FUNC(1816)
+FUNC(1817)
+FUNC(1818)
+FUNC(1819)
+FUNC(1820)
+FUNC(1821)
+FUNC(1822)
+FUNC(1823)
+FUNC(1824)
+FUNC(1825)
+FUNC(1826)
+FUNC(1827)
+FUNC(1828)
+FUNC(1829)
+FUNC(1830)
+FUNC(1831)
+FUNC(1832)
+FUNC(1833)
+FUNC(1834)
+FUNC(1835)
+FUNC(1836)
+FUNC(1837)
+FUNC(1838)
+FUNC(1839)
+FUNC(1840)
+FUNC(1841)
+FUNC(1842)
+FUNC(1843)
+FUNC(1844)
+FUNC(1845)
+FUNC(1846)
+FUNC(1847)
+FUNC(1848)
+FUNC(1849)
+FUNC(1850)
+FUNC(1851)
+FUNC(1852)
+FUNC(1853)
+FUNC(1854)
+FUNC(1855)
+FUNC(1856)
+FUNC(1857)
+FUNC(1858)
+FUNC(1859)
+FUNC(1860)
+FUNC(1861)
+FUNC(1862)
+FUNC(1863)
+FUNC(1864)
+FUNC(1865)
+FUNC(1866)
+FUNC(1867)
+FUNC(1868)
+FUNC(1869)
+FUNC(1870)
+FUNC(1871)
+FUNC(1872)
+FUNC(1873)
+FUNC(1874)
+FUNC(1875)
+FUNC(1876)
+FUNC(1877)
+FUNC(1878)
+FUNC(1879)
+FUNC(1880)
+FUNC(1881)
+FUNC(1882)
+FUNC(1883)
+FUNC(1884)
+FUNC(1885)
+FUNC(1886)
+FUNC(1887)
+FUNC(1888)
+FUNC(1889)
+FUNC(1890)
+FUNC(1891)
+FUNC(1892)
+FUNC(1893)
+FUNC(1894)
+FUNC(1895)
+FUNC(1896)
+FUNC(1897)
+FUNC(1898)
+FUNC(1899)
+FUNC(1900)
+FUNC(1901)
+FUNC(1902)
+FUNC(1903)
+FUNC(1904)
+FUNC(1905)
+FUNC(1906)
+FUNC(1907)
+FUNC(1908)
+FUNC(1909)
+FUNC(1910)
+FUNC(1911)
+FUNC(1912)
+FUNC(1913)
+FUNC(1914)
+FUNC(1915)
+FUNC(1916)
+FUNC(1917)
+FUNC(1918)
+FUNC(1919)
+FUNC(1920)
+FUNC(1921)
+FUNC(1922)
+FUNC(1923)
+FUNC(1924)
+FUNC(1925)
+FUNC(1926)
+FUNC(1927)
+FUNC(1928)
+FUNC(1929)
+FUNC(1930)
+FUNC(1931)
+FUNC(1932)
+FUNC(1933)
+FUNC(1934)
+FUNC(1935)
+FUNC(1936)
+FUNC(1937)
+FUNC(1938)
+FUNC(1939)
+FUNC(1940)
+FUNC(1941)
+FUNC(1942)
+FUNC(1943)
+FUNC(1944)
+FUNC(1945)
+FUNC(1946)
+FUNC(1947)
+FUNC(1948)
+FUNC(1949)
+FUNC(1950)
+FUNC(1951)
+FUNC(1952)
+FUNC(1953)
+FUNC(1954)
+FUNC(1955)
+FUNC(1956)
+FUNC(1957)
+FUNC(1958)
+FUNC(1959)
+FUNC(1960)
+FUNC(1961)
+FUNC(1962)
+FUNC(1963)
+FUNC(1964)
+FUNC(1965)
+FUNC(1966)
+FUNC(1967)
+FUNC(1968)
+FUNC(1969)
+FUNC(1970)
+FUNC(1971)
+FUNC(1972)
+FUNC(1973)
+FUNC(1974)
+FUNC(1975)
+FUNC(1976)
+FUNC(1977)
+FUNC(1978)
+FUNC(1979)
+FUNC(1980)
+FUNC(1981)
+FUNC(1982)
+FUNC(1983)
+FUNC(1984)
+FUNC(1985)
+FUNC(1986)
+FUNC(1987)
+FUNC(1988)
+FUNC(1989)
+FUNC(1990)
+FUNC(1991)
+FUNC(1992)
+FUNC(1993)
+FUNC(1994)
+FUNC(1995)
+FUNC(1996)
+FUNC(1997)
+FUNC(1998)
+FUNC(1999)
+FUNC(2000)
--- a/sbsv2/raptor/lib/flm/test/exeabiv2_defaults.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeabiv2_defaults.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,48 +1,48 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# Defaults for ABIv2 EXE build tests
-
-## Purpose: To enable all test makefiles to be updated rapidly
-
-
-include $(FLMHOME)/e32abiv2.mk
-
-
-DEBUG:=1
-
-CAPABILITY:=LocalServices ReadDeviceData ReadUserData
-UID1:=0x1000007a
-UID2:=0x100039ce
-UID3:=0x000001
-VID:=0x000001
-SID:=0x10003a5c
-EXETARGET:=
-TARGETTYPE:=EXE
-MAPFILENAME:=
-BMPS:=
-EPOCDATA:=
-
-VARIANTARCH:=ARMV5
-FULLVARIANTPATH=$(VARIANTARCH)/$(VARIANTTYPE)
-STATIC_LIBS_PATH:=$(call fromnativepath,$(RVCT22LIB))/armlib
-RUNTIME_LIBS_PATH=$(RELEASEPATH)/$(VARIANTARCH)/LIB
-RELEASEPATH:=$(EPOCROOT)/epoc32/release
-FLM:=e32abiv2exe.flm
-CDEFS:=$(CDEFS) __EXE__
-
-
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# Defaults for ABIv2 EXE build tests
+
+## Purpose: To enable all test makefiles to be updated rapidly
+
+
+include $(FLMHOME)/e32abiv2.mk
+
+
+DEBUG:=1
+
+CAPABILITY:=LocalServices ReadDeviceData ReadUserData
+UID1:=0x1000007a
+UID2:=0x100039ce
+UID3:=0x000001
+VID:=0x000001
+SID:=0x10003a5c
+EXETARGET:=
+TARGETTYPE:=EXE
+MAPFILENAME:=
+BMPS:=
+EPOCDATA:=
+
+VARIANTARCH:=ARMV5
+FULLVARIANTPATH=$(VARIANTARCH)/$(VARIANTTYPE)
+STATIC_LIBS_PATH:=$(call fromnativepath,$(RVCT22LIB))/armlib
+RUNTIME_LIBS_PATH=$(RELEASEPATH)/$(VARIANTARCH)/LIB
+RELEASEPATH:=$(EPOCROOT)/epoc32/release
+FLM:=e32abiv2exe.flm
+CDEFS:=$(CDEFS) __EXE__
+
+
+
--- a/sbsv2/raptor/lib/flm/test/exebasictests.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exebasictests.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,30 +1,30 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# A grouping glue makefile that runs all tests
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,ALLTARGET OUTPUTPATH FART)
-COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_2.exe
-COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk exeabiv2_2/exeabiv2_2.mk
-$(ALLTARGET):: exebasictests
-ALLTARGET:=exebasictests
-include $(FLMHOME)/grouping.flm
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# A grouping glue makefile that runs all tests
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,ALLTARGET OUTPUTPATH FART)
+COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_2.exe
+COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk exeabiv2_2/exeabiv2_2.mk
+$(ALLTARGET):: exebasictests
+ALLTARGET:=exebasictests
+include $(FLMHOME)/grouping.flm
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/exeperftests.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/exeperftests.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,31 +1,31 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# A grouping glue makefile that runs all tests
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-include $(FLMHOME)/flmtools.mk
-
-$(call vsave,ALLTARGET OUTPUTPATH)
-COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_3.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_4.exe
-COMPONENT_GLUEMAKEFILES:=exeabiv2_3/exeabiv2_3.mk exeabiv2_4/exeabiv2_4.mk
-$(ALLTARGET):: exeperftests
-ALLTARGET:=exeperftests
-
-include $(FLMHOME)/grouping.flm
-$(call vrestore)
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# A grouping glue makefile that runs all tests
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+include $(FLMHOME)/flmtools.mk
+
+$(call vsave,ALLTARGET OUTPUTPATH)
+COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_3.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_4.exe
+COMPONENT_GLUEMAKEFILES:=exeabiv2_3/exeabiv2_3.mk exeabiv2_4/exeabiv2_4.mk
+$(ALLTARGET):: exeperftests
+ALLTARGET:=exeperftests
+
+include $(FLMHOME)/grouping.flm
+$(call vrestore)
--- a/sbsv2/raptor/lib/flm/test/export1/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/export1/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,10 +1,10 @@
-
-EXPORT:=testexport/test1exp.h<-t1e.h \
-	testexport/test2exp.h<-t2e.h \
-	testexport/test3exp.h<-t1e.h \
-	testexport/test4exp.h<-t2e.h
-
-ALLTARGET:=all
-
-include $(FLMHOME)/export.flm
-
+
+EXPORT:=testexport/test1exp.h<-t1e.h \
+	testexport/test2exp.h<-t2e.h \
+	testexport/test3exp.h<-t1e.h \
+	testexport/test4exp.h<-t2e.h
+
+ALLTARGET:=all
+
+include $(FLMHOME)/export.flm
+
--- a/sbsv2/raptor/lib/flm/test/export1/t1e.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/export1/t1e.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,20 +1,20 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/*
-  test header file.
-
-*/
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/*
+  test header file.
+
+*/
--- a/sbsv2/raptor/lib/flm/test/export1/t2e.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/export1/t2e.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,20 +1,20 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/*
-  test header file.
-
-*/
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/*
+  test header file.
+
+*/
--- a/sbsv2/raptor/lib/flm/test/export1/t3e.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/export1/t3e.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,20 +1,20 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/*
-  test header file.
-
-*/
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/*
+  test header file.
+
+*/
--- a/sbsv2/raptor/lib/flm/test/export1/t4e.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/export1/t4e.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,20 +1,20 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-/*
-  test header file.
-
-*/
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/*
+  test header file.
+
+*/
--- a/sbsv2/raptor/lib/flm/test/flmtests.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/flmtests.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,35 +1,35 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-##
-# A grouping glue makefile that runs all tests
-
-## Purpose: Run test makefiles in parallel to ensure that they all work
-## Postconditions: All postconditions for all the makefiles are satisfied
-
-#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1/exeabiv2_1.exe
-#COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk
-
-#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1/exeabiv2_1.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_2/exeabiv2_2.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_3/exeabiv2_3.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_4/exeabiv2_4.exe
-#COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk exeabiv2_2/exeabiv2_2.mk exeabiv2_3/exeabiv2_3.mk exeabiv2_4/exeabiv2_4.mk
-
-
-#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/nothing/nothing.mk
-#COMPONENT_GLUEMAKEFILES:=nothing/nothing.mk
-
-COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/ciaabiv2_1
-COMPONENT_GLUEMAKEFILES:=ciaabiv2_1/ciaabiv2_1.mk
-
-include $(FLMHOME)/grouping.flm
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+##
+# A grouping glue makefile that runs all tests
+
+## Purpose: Run test makefiles in parallel to ensure that they all work
+## Postconditions: All postconditions for all the makefiles are satisfied
+
+#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1/exeabiv2_1.exe
+#COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk
+
+#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_1/exeabiv2_1.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_2/exeabiv2_2.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_3/exeabiv2_3.exe $(RELEASEPATH)/$(FULLVARIANTPATH)/exeabiv2_4/exeabiv2_4.exe
+#COMPONENT_GLUEMAKEFILES:=exeabiv2_1/exeabiv2_1.mk exeabiv2_2/exeabiv2_2.mk exeabiv2_3/exeabiv2_3.mk exeabiv2_4/exeabiv2_4.mk
+
+
+#COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/nothing/nothing.mk
+#COMPONENT_GLUEMAKEFILES:=nothing/nothing.mk
+
+COMPONENT_ALLTARGETS:=$(RELEASEPATH)/$(FULLVARIANTPATH)/ciaabiv2_1
+COMPONENT_GLUEMAKEFILES:=ciaabiv2_1/ciaabiv2_1.mk
+
+include $(FLMHOME)/grouping.flm
--- a/sbsv2/raptor/lib/flm/test/raptorglue/raptorglue.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/raptorglue/raptorglue.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,133 +1,133 @@
-
-# test a "real" raptor gluefile
-# generated by Raptor 0.0.1
-
-RAPTOR_HOME?=/localhome/tmurphy/pf/EPOC/development/tools/personal/tmurphy/tools/raptor
-EPOCROOT?=/tmp/tim-epocroot/
-
-# start simple 
-
-# configuration ARMV5_UDEB
-AAPCS_OPTION:=--apcs /inter
-CAPABILITY:=LocalServices ReadDeviceData ReadUserData
-CC:=armcc
-CC_ERRORS_CONTROL_OPTION:=--diag_error 1267
-CC_WARNINGS_CONTROL_OPTION:=--diag_suppress 161,611,654,997,1152,1300,1464,1488,6318
-CDEFS:=__MARM_THUMB__ __MARM_INTERWORK__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE=\"$(EPOCROOT)/epoc32/include/variant/Symbian_OS_vFuture.hrh\" _EXE_
-CFLAGS:=
-COMMANDFILE_OPTION:=--via
-COMPILE_ONLY_OPTION:=-c
-CPP_LANG_OPTION:=--cpp
-CREATABLEPATHS:=
-SOURCEFILES:=$(RAPTOR_HOME)/test/simple/test.cpp
-ELF2E32:=$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)
-ENUM_OPTION:=--enum_is_int
-EXCEPTIONS:=--exceptions --exceptions_unwind
-EXEBASELIBS:=usrt2_2.lib euser.dso efsrv.dso bafl.dso commsdat.dso
-EXENAME:=test
-EXPORT_VTBL_OPTION:=--export_all_vtbl
-FLMHOME:=$(RAPTOR_HOME)/lib/flm
-FPMODE_OPTION:=--fpmode ieee_no_fenv
-FULLVARIANTPATH:=ARMV5/UDEB
-INCLUDES:=-J $(EPOCROOT)/epoc32/include -J $(EPOCROOT)/epoc32/include/variant
-LD:=armlink
-LIBPATH:=
-LINKER_DEBUG_OPTION:=--debug
-LINKER_ENTRY_OPTION:=--entry
-LINKER_SYMBOLS_FILE_OPTION:=--list
-LINKER_SYMBOLS_OPTION:=--symbols
-OUTPUTPATH:=$(EPOCROOT)/epoc32/build
-OUTPUT_OPTION:=-o
-OWN_LIBRARY_OPTION:=-Ono_known_library
-PREINCLUDE_OPTION:=--preinclude $(EPOCROOT)/epoc32/include/rvct2_2/rvct2_2.h
-RELEASEPATH:=$(EPOCROOT)/epoc32/release
-RUNTIME_LIBS_LIST:=drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso scppnwdl.dso drtrvct2_2.dso
-RUNTIME_LIBS_PATH:=$(EPOCROOT)/epoc32/release/ARMV5,$(EPOCROOT)/epoc32/release/ARMV5/LIB
-RUNTIME_SYMBOL_VISIBILITY_OPTION:=--dllimport_runtime
-RW_BASE_OPTION:=--rw-base
-SHARED_OBJECT_OPTION:=--dll
-SID:=0x10003a5c
-SOFTVFPMODE_OPTION:=
-SO_NAME_OPTION:=--soname
-SPLIT_OPTION:=--split
-STACKSIZE:=0x00005000
-STATIC_LIBS_LIST:="h_t__uf.l(switch8.o)"
-STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
-SYMBIAN_CCFLAGS:=-g -O0
-SYMBIAN_LINK_FLAGS:=--diag_suppress 6331  --bpabi --reloc   --no_scanlib --datacompressor=off
-SYMVER_OPTION:=--symver_soname
-TARGETTYPE:=EXE
-TARGET_ARCH_OPTION:=--cpu 5T
-THUMB_INSTRUCTION_SET:=--thumb
-UID1:=0x1000007a
-UID2:=0x100039ce
-UID3:=0x00000001
-USER_LIBS_PATH_OPTION:=--userlibpath
-VARIANTTYPE:=UDEB
-VFE_OPTION:=--no_vfe
-include $(FLMHOME)/e32abiv2exe.flm
-
-
-# configuration ARMV5_UREL
-AAPCS_OPTION:=--apcs /inter
-CAPABILITY:=LocalServices ReadDeviceData ReadUserData
-CC:=armcc
-CC_ERRORS_CONTROL_OPTION:=--diag_error 1267
-CC_WARNINGS_CONTROL_OPTION:=--diag_suppress 161,611,654,997,1152,1300,1464,1488,6318
-CDEFS:=__MARM_THUMB__ __MARM_INTERWORK__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE=\"$(EPOCROOT)/epoc32/include/variant/Symbian_OS_vFuture.hrh\" _EXE_
-CFLAGS:=
-COMMANDFILE_OPTION:=--via
-COMPILE_ONLY_OPTION:=-c
-CPP_LANG_OPTION:=--cpp
-CREATABLEPATHS:=
-SOURCEFILES:=$(RAPTOR_HOME)/test/simple/test.cpp
-ELF2E32:=$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)
-ENUM_OPTION:=--enum_is_int
-EXCEPTIONS:=--exceptions --exceptions_unwind
-EXEBASELIBS:=usrt2_2.lib euser.dso efsrv.dso bafl.dso commsdat.dso
-EXENAME:=test
-EXPORT_VTBL_OPTION:=--export_all_vtbl
-FLMHOME:=$(RAPTOR_HOME)/lib/flm
-FPMODE_OPTION:=--fpmode ieee_no_fenv
-FULLVARIANTPATH:=ARMV5/UREL
-INCLUDES:=-J $(EPOCROOT)/epoc32/include -J $(EPOCROOT)/epoc32/include/variant
-LD:=armlink
-LIBPATH:=
-LINKER_DEBUG_OPTION:=--debug
-LINKER_ENTRY_OPTION:=--entry
-LINKER_SYMBOLS_FILE_OPTION:=--list
-LINKER_SYMBOLS_OPTION:=--symbols
-OUTPUTPATH:=$(EPOCROOT)/epoc32/build
-OUTPUT_OPTION:=-o
-OWN_LIBRARY_OPTION:=-Ono_known_library
-PREINCLUDE_OPTION:=--preinclude $(EPOCROOT)/epoc32/include/rvct2_2/rvct2_2.h
-RELEASEPATH:=$(EPOCROOT)/epoc32/release
-RUNTIME_LIBS_LIST:=drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso scppnwdl.dso drtrvct2_2.dso
-RUNTIME_LIBS_PATH:=$(EPOCROOT)/epoc32/release/ARMV5,$(EPOCROOT)/epoc32/release/ARMV5/LIB
-RUNTIME_SYMBOL_VISIBILITY_OPTION:=--dllimport_runtime
-RW_BASE_OPTION:=--rw-base
-SHARED_OBJECT_OPTION:=--dll
-SID:=0x10003a5c
-SOFTVFPMODE_OPTION:=
-SO_NAME_OPTION:=--soname
-SPLIT_OPTION:=--split
-STACKSIZE:=0x00005000
-STATIC_LIBS_LIST:="h_t__uf.l(switch8.o)"
-STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
-SYMBIAN_CCFLAGS:=-O2
-SYMBIAN_LINK_FLAGS:=--diag_suppress 6331  --bpabi --reloc   --no_scanlib --datacompressor=off
-SYMVER_OPTION:=--symver_soname
-TARGETTYPE:=EXE
-TARGET_ARCH_OPTION:=--cpu 5T
-THUMB_INSTRUCTION_SET:=--thumb
-UID1:=0x1000007a
-UID2:=0x100039ce
-UID3:=0x00000001
-USER_LIBS_PATH_OPTION:=--userlibpath
-VARIANTTYPE:=UREL
-VFE_OPTION:=--no_vfe
-include $(FLMHOME)/e32abiv2exe.flm
-
-# end simple 
-
-# END OF GENERATED MAKEFILE : DO NOT EDIT
+
+# test a "real" raptor gluefile
+# generated by Raptor 0.0.1
+
+RAPTOR_HOME?=/localhome/tmurphy/pf/EPOC/development/tools/personal/tmurphy/tools/raptor
+EPOCROOT?=/tmp/tim-epocroot/
+
+# start simple 
+
+# configuration ARMV5_UDEB
+AAPCS_OPTION:=--apcs /inter
+CAPABILITY:=LocalServices ReadDeviceData ReadUserData
+CC:=armcc
+CC_ERRORS_CONTROL_OPTION:=--diag_error 1267
+CC_WARNINGS_CONTROL_OPTION:=--diag_suppress 161,611,654,997,1152,1300,1464,1488,6318
+CDEFS:=__MARM_THUMB__ __MARM_INTERWORK__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE=\"$(EPOCROOT)/epoc32/include/variant/Symbian_OS_vFuture.hrh\" _EXE_
+CFLAGS:=
+COMMANDFILE_OPTION:=--via
+COMPILE_ONLY_OPTION:=-c
+CPP_LANG_OPTION:=--cpp
+CREATABLEPATHS:=
+SOURCEFILES:=$(RAPTOR_HOME)/test/simple/test.cpp
+ELF2E32:=$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)
+ENUM_OPTION:=--enum_is_int
+EXCEPTIONS:=--exceptions --exceptions_unwind
+EXEBASELIBS:=usrt2_2.lib euser.dso efsrv.dso bafl.dso commsdat.dso
+EXENAME:=test
+EXPORT_VTBL_OPTION:=--export_all_vtbl
+FLMHOME:=$(RAPTOR_HOME)/lib/flm
+FPMODE_OPTION:=--fpmode ieee_no_fenv
+FULLVARIANTPATH:=ARMV5/UDEB
+INCLUDES:=-J $(EPOCROOT)/epoc32/include -J $(EPOCROOT)/epoc32/include/variant
+LD:=armlink
+LIBPATH:=
+LINKER_DEBUG_OPTION:=--debug
+LINKER_ENTRY_OPTION:=--entry
+LINKER_SYMBOLS_FILE_OPTION:=--list
+LINKER_SYMBOLS_OPTION:=--symbols
+OUTPUTPATH:=$(EPOCROOT)/epoc32/build
+OUTPUT_OPTION:=-o
+OWN_LIBRARY_OPTION:=-Ono_known_library
+PREINCLUDE_OPTION:=--preinclude $(EPOCROOT)/epoc32/include/rvct2_2/rvct2_2.h
+RELEASEPATH:=$(EPOCROOT)/epoc32/release
+RUNTIME_LIBS_LIST:=drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso scppnwdl.dso drtrvct2_2.dso
+RUNTIME_LIBS_PATH:=$(EPOCROOT)/epoc32/release/ARMV5,$(EPOCROOT)/epoc32/release/ARMV5/LIB
+RUNTIME_SYMBOL_VISIBILITY_OPTION:=--dllimport_runtime
+RW_BASE_OPTION:=--rw-base
+SHARED_OBJECT_OPTION:=--dll
+SID:=0x10003a5c
+SOFTVFPMODE_OPTION:=
+SO_NAME_OPTION:=--soname
+SPLIT_OPTION:=--split
+STACKSIZE:=0x00005000
+STATIC_LIBS_LIST:="h_t__uf.l(switch8.o)"
+STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
+SYMBIAN_CCFLAGS:=-g -O0
+SYMBIAN_LINK_FLAGS:=--diag_suppress 6331  --bpabi --reloc   --no_scanlib --datacompressor=off
+SYMVER_OPTION:=--symver_soname
+TARGETTYPE:=EXE
+TARGET_ARCH_OPTION:=--cpu 5T
+THUMB_INSTRUCTION_SET:=--thumb
+UID1:=0x1000007a
+UID2:=0x100039ce
+UID3:=0x00000001
+USER_LIBS_PATH_OPTION:=--userlibpath
+VARIANTTYPE:=UDEB
+VFE_OPTION:=--no_vfe
+include $(FLMHOME)/e32abiv2exe.flm
+
+
+# configuration ARMV5_UREL
+AAPCS_OPTION:=--apcs /inter
+CAPABILITY:=LocalServices ReadDeviceData ReadUserData
+CC:=armcc
+CC_ERRORS_CONTROL_OPTION:=--diag_error 1267
+CC_WARNINGS_CONTROL_OPTION:=--diag_suppress 161,611,654,997,1152,1300,1464,1488,6318
+CDEFS:=__MARM_THUMB__ __MARM_INTERWORK__ _UNICODE __SYMBIAN32__ __ARMCC__ __EPOC32__ __MARM__ __EABI__ __PRODUCT_INCLUDE=\"$(EPOCROOT)/epoc32/include/variant/Symbian_OS_vFuture.hrh\" _EXE_
+CFLAGS:=
+COMMANDFILE_OPTION:=--via
+COMPILE_ONLY_OPTION:=-c
+CPP_LANG_OPTION:=--cpp
+CREATABLEPATHS:=
+SOURCEFILES:=$(RAPTOR_HOME)/test/simple/test.cpp
+ELF2E32:=$(EPOCROOT)/epoc32/tools/elf2e32$(DOTEXE)
+ENUM_OPTION:=--enum_is_int
+EXCEPTIONS:=--exceptions --exceptions_unwind
+EXEBASELIBS:=usrt2_2.lib euser.dso efsrv.dso bafl.dso commsdat.dso
+EXENAME:=test
+EXPORT_VTBL_OPTION:=--export_all_vtbl
+FLMHOME:=$(RAPTOR_HOME)/lib/flm
+FPMODE_OPTION:=--fpmode ieee_no_fenv
+FULLVARIANTPATH:=ARMV5/UREL
+INCLUDES:=-J $(EPOCROOT)/epoc32/include -J $(EPOCROOT)/epoc32/include/variant
+LD:=armlink
+LIBPATH:=
+LINKER_DEBUG_OPTION:=--debug
+LINKER_ENTRY_OPTION:=--entry
+LINKER_SYMBOLS_FILE_OPTION:=--list
+LINKER_SYMBOLS_OPTION:=--symbols
+OUTPUTPATH:=$(EPOCROOT)/epoc32/build
+OUTPUT_OPTION:=-o
+OWN_LIBRARY_OPTION:=-Ono_known_library
+PREINCLUDE_OPTION:=--preinclude $(EPOCROOT)/epoc32/include/rvct2_2/rvct2_2.h
+RELEASEPATH:=$(EPOCROOT)/epoc32/release
+RUNTIME_LIBS_LIST:=drtaeabi.dso dfpaeabi.dso dfprvct2_2.dso scppnwdl.dso drtrvct2_2.dso
+RUNTIME_LIBS_PATH:=$(EPOCROOT)/epoc32/release/ARMV5,$(EPOCROOT)/epoc32/release/ARMV5/LIB
+RUNTIME_SYMBOL_VISIBILITY_OPTION:=--dllimport_runtime
+RW_BASE_OPTION:=--rw-base
+SHARED_OBJECT_OPTION:=--dll
+SID:=0x10003a5c
+SOFTVFPMODE_OPTION:=
+SO_NAME_OPTION:=--soname
+SPLIT_OPTION:=--split
+STACKSIZE:=0x00005000
+STATIC_LIBS_LIST:="h_t__uf.l(switch8.o)"
+STATIC_LIBS_PATH:=/usr/local/ARM/RVCT/Data/2.2/308/lib/armlib
+SYMBIAN_CCFLAGS:=-O2
+SYMBIAN_LINK_FLAGS:=--diag_suppress 6331  --bpabi --reloc   --no_scanlib --datacompressor=off
+SYMVER_OPTION:=--symver_soname
+TARGETTYPE:=EXE
+TARGET_ARCH_OPTION:=--cpu 5T
+THUMB_INSTRUCTION_SET:=--thumb
+UID1:=0x1000007a
+UID2:=0x100039ce
+UID3:=0x00000001
+USER_LIBS_PATH_OPTION:=--userlibpath
+VARIANTTYPE:=UREL
+VFE_OPTION:=--no_vfe
+include $(FLMHOME)/e32abiv2exe.flm
+
+# end simple 
+
+# END OF GENERATED MAKEFILE : DO NOT EDIT
--- a/sbsv2/raptor/lib/flm/test/templateext/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/templateext/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,48 +1,48 @@
-include $(FLMHOME)/flmtools.mk
-
-
-
-EPOCROOT:=fred1
-PLATFORM:=fred1
-CFG:=fred1
-TO_ROOT:=fred1
-TO_BLDINF:=fred1
-EPOCBLD:=fred1
-EXTENSION_ROOT:=fred1
-HOST_SHELL:=fred1
-PLATFORM_PATH:=fred1
-CFG_PATH:=fred1
-TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
-HALPATH:=fred1/..
-
-include $(FLMHOME)/template_ext.flm
-
-
-EPOCROOT:=alice2
-PLATFORM:=alice2
-CFG:=alice2
-TO_ROOT:=alice2
-TO_BLDINF:=alice2
-EPOCBLD:=alice2
-EXTENSION_ROOT:=alice2
-HOST_SHELL:=alice2
-PLATFORM_PATH:=alice2
-CFG_PATH:=alice2
-TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
-
-include $(FLMHOME)/template_ext.flm
-
-
-EPOCROOT:=test1
-PLATFORM:=test2
-CFG:=test3
-TO_ROOT:=test4
-TO_BLDINF:=test5
-EPOCBLD:=test6
-EXTENSION_ROOT:=test7
-HOST_SHELL:=test8
-PLATFORM_PATH:=test16
-CFG_PATH:=test17
-TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
-
-include $(FLMHOME)/template_ext.flm
+include $(FLMHOME)/flmtools.mk
+
+
+
+EPOCROOT:=fred1
+PLATFORM:=fred1
+CFG:=fred1
+TO_ROOT:=fred1
+TO_BLDINF:=fred1
+EPOCBLD:=fred1
+EXTENSION_ROOT:=fred1
+HOST_SHELL:=fred1
+PLATFORM_PATH:=fred1
+CFG_PATH:=fred1
+TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
+HALPATH:=fred1/..
+
+include $(FLMHOME)/template_ext.flm
+
+
+EPOCROOT:=alice2
+PLATFORM:=alice2
+CFG:=alice2
+TO_ROOT:=alice2
+TO_BLDINF:=alice2
+EPOCBLD:=alice2
+EXTENSION_ROOT:=alice2
+HOST_SHELL:=alice2
+PLATFORM_PATH:=alice2
+CFG_PATH:=alice2
+TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
+
+include $(FLMHOME)/template_ext.flm
+
+
+EPOCROOT:=test1
+PLATFORM:=test2
+CFG:=test3
+TO_ROOT:=test4
+TO_BLDINF:=test5
+EPOCBLD:=test6
+EXTENSION_ROOT:=test7
+HOST_SHELL:=test8
+PLATFORM_PATH:=test16
+CFG_PATH:=test17
+TEMPLATE_EXTENSION_MAKEFILE:=temex.mk
+
+include $(FLMHOME)/template_ext.flm
--- a/sbsv2/raptor/lib/flm/test/templateext/temex.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/test/templateext/temex.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,96 +1,96 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-#
-# A test-template extension makefile
-# supposed to demonstrate that different calls
-# to the same template extension makefile will
-# get different variable values.
-# i.e. it's supposed to show target specific variables 
-# working properly for template extension makefiles.
-
-# The test is by manual comparison at the moment.
-
-
-
-define print
-echo ""
-echo ""
-@echo ""
-@echo "EPOCROOT=$(EPOCROOT)"
-@echo "PLATFORM=$(PLATFORM)"
-@echo "CFG=$(CFG)"
-@echo "TO_ROOT=$(TO_ROOT)"
-@echo "TO_BLDINF=$(TO_BLDINF)"
-@echo "EPOCBLD=$(EPOCBLD)"
-@echo "EXTENSION_ROOT=$(EXTENSION_ROOT)"
-@echo "HOST_SHELL=$(HOST_SHELL)"
-@echo "/=$(/)"
-@echo ";=$(;)"
-@echo "RMDIR=$(RMDIR)"
-@echo "RM=$(RM)"
-@echo "ERASE=$(ERASE)"
-@echo "MKDIR=$(MKDIR)"
-@echo "CP=$(CP)"
-@echo "PLATFORM_PATH=$(PLATFORM_PATH)"
-@echo "CFG_PATH=$(CFG_PATH)"
-@echo "TEMPLATE_EXTENSION_MAKEFILE=$(TEMPLATE_EXTENSION_MAKEFILE)"
-endef
-
-DO_NOTHING :
-	@echo "DO_NOTHING"
-	$(print)
-
-
-MAKMAKE :
-	@echo "MAKMAKE"
-	$(print)
-
-BLD :
-	@echo "BLD"
-	$(print)
-
-SAVESPACE :
-	@echo "SAVESPACE"
-	$(print)
-
-FREEZE :
-	@echo "FREEZE"
-	$(print)
-
-LIB :
-	@echo "LIB"
-	$(print)
-
-CLEANLIB :
-	@echo "CLEANLIB"
-	$(print)
-
-RESOURCE :
-	@echo "RESOURCE"
-	$(print)
-
-CLEAN :
-	@echo "CLEAN"
-	$(print)
-
-RELEASABLES :
-	@echo "RELEASABLES"
-	$(print)
-
-FINAL :
-	@echo "FINAL"
-	$(print)
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# A test-template extension makefile
+# supposed to demonstrate that different calls
+# to the same template extension makefile will
+# get different variable values.
+# i.e. it's supposed to show target specific variables 
+# working properly for template extension makefiles.
+
+# The test is by manual comparison at the moment.
+
+
+
+define print
+echo ""
+echo ""
+@echo ""
+@echo "EPOCROOT=$(EPOCROOT)"
+@echo "PLATFORM=$(PLATFORM)"
+@echo "CFG=$(CFG)"
+@echo "TO_ROOT=$(TO_ROOT)"
+@echo "TO_BLDINF=$(TO_BLDINF)"
+@echo "EPOCBLD=$(EPOCBLD)"
+@echo "EXTENSION_ROOT=$(EXTENSION_ROOT)"
+@echo "HOST_SHELL=$(HOST_SHELL)"
+@echo "/=$(/)"
+@echo ";=$(;)"
+@echo "RMDIR=$(RMDIR)"
+@echo "RM=$(RM)"
+@echo "ERASE=$(ERASE)"
+@echo "MKDIR=$(MKDIR)"
+@echo "CP=$(CP)"
+@echo "PLATFORM_PATH=$(PLATFORM_PATH)"
+@echo "CFG_PATH=$(CFG_PATH)"
+@echo "TEMPLATE_EXTENSION_MAKEFILE=$(TEMPLATE_EXTENSION_MAKEFILE)"
+endef
+
+DO_NOTHING :
+	@echo "DO_NOTHING"
+	$(print)
+
+
+MAKMAKE :
+	@echo "MAKMAKE"
+	$(print)
+
+BLD :
+	@echo "BLD"
+	$(print)
+
+SAVESPACE :
+	@echo "SAVESPACE"
+	$(print)
+
+FREEZE :
+	@echo "FREEZE"
+	$(print)
+
+LIB :
+	@echo "LIB"
+	$(print)
+
+CLEANLIB :
+	@echo "CLEANLIB"
+	$(print)
+
+RESOURCE :
+	@echo "RESOURCE"
+	$(print)
+
+CLEAN :
+	@echo "CLEAN"
+	$(print)
+
+RELEASABLES :
+	@echo "RELEASABLES"
+	$(print)
+
+FINAL :
+	@echo "FINAL"
+	$(print)
+
--- a/sbsv2/raptor/lib/flm/tools.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,58 +1,58 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
-	<!-- Tools interfaces -->
-
-	<interface name="Tools.common" abstract="true" extends="base.flm">
-		<param name='CDEFS.WIN32' default=''/>
-		<param name='CDEFS.LINUX' default=''/>
-		<param name='CDEFS'/>
-		<param name='CFLAGS'/>
-		<param name='CFLAGS.WIN32'/>
-		<param name='COMPILER'/>
-		<param name='COMPILER_PATH.WIN32'/>
-		<param name='COMPILER_PATH.LINUX'/>
-		<param name='INC.COMPILER' default=''/>
-		<param name='MMPDEFS' default=''/>
-		<param name='OPT.D'/>
-		<param name='OPT.O'/>
-		<param name='OPT.PREINCLUDE'/>
-		<param name='OPT.SYSTEMINCLUDE'/>
-		<param name='OPT.USERINCLUDE'/>
-		<param name='OPTION_GCC' default=''/>
-		<param name='OUTPUTPATH'/>
-		<param name='VARIANTPLATFORM'/>
-		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
-		<param name='RELEASEPATH'/>
-		<param name='SOURCE'/>
-		<param name='SYSTEMINCLUDE' default=''/>
-		<param name='TARGET'/>
-		<param name='TOOLSPATH'/>
-		<param name='USERINCLUDE' default=''/>
-		<param name='PRODUCT_INCLUDE' default=''/>
-		<param name='PLATMACROS.WINDOWS'/>
-		<param name='PLATMACROS.LINUX'/>
-		<param name='VARIANTTYPE'/>
-	</interface>
-
-	<interface name="Tools.exe" extends="Tools.common" flm="tools2exe.flm">
-		<param name='LINKER'/>
-		<param name='LFLAGS'/>
-		<param name='LIBS.WIN32' default=''/>
-		<param name='LIBS.LINUX' default=''/>
-		<param name='OPT.L'/>
-		<param name='OPT.l'/>
-		<param name='STATICLIBRARY'/>
-		<param name='TARGETTYPE' default="EXE"/>
-	</interface>
-
-	<interface name="Tools.lib" extends="Tools.common" flm="tools2lib.flm">
-		<param name='ARCHIVER'/>
-		<param name='RANLIB'/>
-		<param name='AFLAGS'/>
-		<param name='TARGETTYPE' default="LIB"/>
-	</interface>
-
-	<interface name="Tools.extension" extends="base.extension" flm="template_ext.flm">
-	</interface>
-
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Tools interfaces -->
+
+	<interface name="Tools.common" abstract="true" extends="base.flm">
+		<param name='CDEFS.WIN32' default=''/>
+		<param name='CDEFS.LINUX' default=''/>
+		<param name='CDEFS'/>
+		<param name='CFLAGS'/>
+		<param name='CFLAGS.WIN32'/>
+		<param name='COMPILER'/>
+		<param name='COMPILER_PATH.WIN32'/>
+		<param name='COMPILER_PATH.LINUX'/>
+		<param name='INC.COMPILER' default=''/>
+		<param name='MMPDEFS' default=''/>
+		<param name='OPT.D'/>
+		<param name='OPT.O'/>
+		<param name='OPT.PREINCLUDE'/>
+		<param name='OPT.SYSTEMINCLUDE'/>
+		<param name='OPT.USERINCLUDE'/>
+		<param name='OPTION_GCC' default=''/>
+		<param name='OUTPUTPATH'/>
+		<param name='VARIANTPLATFORM'/>
+		<param name='PLATFORM' default='$(VARIANTPLATFORM)'/>
+		<param name='RELEASEPATH'/>
+		<param name='SOURCE'/>
+		<param name='SYSTEMINCLUDE' default=''/>
+		<param name='TARGET'/>
+		<param name='TOOLSPATH'/>
+		<param name='USERINCLUDE' default=''/>
+		<param name='PRODUCT_INCLUDE' default=''/>
+		<param name='PLATMACROS.WINDOWS'/>
+		<param name='PLATMACROS.LINUX'/>
+		<param name='VARIANTTYPE'/>
+	</interface>
+
+	<interface name="Tools.exe" extends="Tools.common" flm="tools2exe.flm">
+		<param name='LINKER'/>
+		<param name='LFLAGS'/>
+		<param name='LIBS.WIN32' default=''/>
+		<param name='LIBS.LINUX' default=''/>
+		<param name='OPT.L'/>
+		<param name='OPT.l'/>
+		<param name='STATICLIBRARY'/>
+		<param name='TARGETTYPE' default="EXE"/>
+	</interface>
+
+	<interface name="Tools.lib" extends="Tools.common" flm="tools2lib.flm">
+		<param name='ARCHIVER'/>
+		<param name='RANLIB'/>
+		<param name='AFLAGS'/>
+		<param name='TARGETTYPE' default="LIB"/>
+	</interface>
+
+	<interface name="Tools.extension" extends="base.extension" flm="template_ext.flm">
+	</interface>
+
+</build>
--- a/sbsv2/raptor/lib/flm/tools/buildstubsis.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools/buildstubsis.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,50 +1,50 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to build StubSis libraries.
-
-## Outputs - externally relevant targets that this FLM generates
-
-TARGETDIR:=$(EPOCROOT)/epoc32/data/z/system/install
-
-ifeq ($(PLATFORM),WINSCW)
-	TARGETDIR:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
-endif
-
-$(call makepath,$(TARGETDIR))
-
-# This section is in a macro oherwise startrule could get wrong values
-define SisFileCreation
-$(SISFILE): $(EXTENSION_ROOT)/$(SRCDIR)/$(SISNAME).pkg
-	$(call startrule,stubsis) \
-	$(EPOCROOT)/epoc32/tools/makesis$(DOTEXE) -s $$? $$@  \
-	$(call endrule,stubsis)
-endef
-
-# Build stub SIS file
-SISFILE:= $(TARGETDIR)/$(SISNAME).sis
-# Here a variable named "done_<sanitised $SISFILE>" gets created
-GUARD:=done_$(call sanitise,$(SISFILE))
-# If variable "done_..." not set, set it to 1, so that
-# UREL and UDEB do not execute makesis twice on the same target 
-ifeq ($($(GUARD)),)
-$(GUARD):=1
-ALL:: $(SISFILE)
-$(eval $(call SisFileCreation))
-$(eval $(call whatmacro,$(SISFILE)))
-$(eval $(call GenerateStandardCleanTarget,$(SISFILE),$(TARGETDIR)))
-endif
-
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to build StubSis libraries.
+
+## Outputs - externally relevant targets that this FLM generates
+
+TARGETDIR:=$(EPOCROOT)/epoc32/data/z/system/install
+
+ifeq ($(PLATFORM),WINSCW)
+	TARGETDIR:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/z/system/install
+endif
+
+$(call makepath,$(TARGETDIR))
+
+# This section is in a macro oherwise startrule could get wrong values
+define SisFileCreation
+$(SISFILE): $(EXTENSION_ROOT)/$(SRCDIR)/$(SISNAME).pkg
+	$(call startrule,stubsis) \
+	$(EPOCROOT)/epoc32/tools/makesis$(DOTEXE) -s $$? $$@  \
+	$(call endrule,stubsis)
+endef
+
+# Build stub SIS file
+SISFILE:= $(TARGETDIR)/$(SISNAME).sis
+# Here a variable named "done_<sanitised $SISFILE>" gets created
+GUARD:=done_$(call sanitise,$(SISFILE))
+# If variable "done_..." not set, set it to 1, so that
+# UREL and UDEB do not execute makesis twice on the same target 
+ifeq ($($(GUARD)),)
+$(GUARD):=1
+ALL:: $(SISFILE)
+$(eval $(call SisFileCreation))
+$(eval $(call whatmacro,$(SISFILE)))
+$(eval $(call GenerateStandardCleanTarget,$(SISFILE),$(TARGETDIR)))
+endif
+
+
--- a/sbsv2/raptor/lib/flm/tools/stlport.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools/stlport.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,139 +1,139 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to build STLport libraries.
-
-## Outputs - externally relevant targets that this FLM generates
-
-ifeq ($(OSTYPE),unix)
-STLPORT.OPT:=-fPIC -m32 -O2
-STLPORT.CXXFLAGS:=-m32 
-else
-STLPORT.OPT:=-O2
-STLPORT.CXXFLAGS:=
-endif
-
-
-SOURCE_ARCHIVE:=$(EXTENSION_ROOT)/$(SOURCE_ARCHIVE)
-
-EXTRACT_DIR:=$(EPOCBLD)$(TOOLPLATFORMDIR)
-STL_DIR:=$(EXTRACT_DIR)/STLport-$(STLPORT_VERSION)
-BUILD_DIR:=$(STL_DIR)/build/lib
-UNZIPPED:=$(STL_DIR)/unzipped.ok
-
-RELEASE_DIR:=$(EPOCROOT)/epoc32/release/tools2$(TOOLPLATFORMDIR)
-RELEASE_DIR_REL:=$(RELEASE_DIR)/rel
-RELEASE_DIR_DEB:=$(RELEASE_DIR)/deb
-WHATFLM:=
-
-ifeq ($(OSTYPE),unix)
-STLPORT.OPT:=-fPIC -m32 -O2
-STLPORT.CXXFLAGS:=-m32 
-else
-STLPORT.OPT:=-O2
-STLPORT.CXXFLAGS:=
-endif
-
-STL_REL_LIB_PATH:=$(STL_DIR)/lib/libstlport.a
-STL_DEB_LIB_PATH:=$(STL_DIR)/lib/libstlportg.a
-
-REL_LIB:=$(RELEASE_DIR_REL)/$(STL_REL_LIB_NAME)
-DEB_LIB:=$(RELEASE_DIR_DEB)/$(STL_REL_LIB_NAME)
-
-STL_HEADERS_PATH:=$(EPOCROOT)/epoc32/include/tools/stlport
-
-CLEANTARGETS:=
-CREATABLEPATHS:=
-
-define stlportcommon
-
-$(UNZIPPED): $(SOURCE_ARCHIVE) 
-	$(call startrule,unzip) \
-	$(UNZIP) -aa -o $(SOURCE_ARCHIVE) -d $(EXTRACT_DIR) && \
-	echo "SHELL:=$$$${SHELL}" > "$(BUILD_DIR)/raptor_gcc.mak" && \
-	$(GNUCAT) $(BUILD_DIR)/gcc.mak >> "$(BUILD_DIR)/raptor_gcc.mak" && \
-	$(GNUTOUCH) $(UNZIPPED) \
-	$(call endrule,unzip)
-
-CLEAN::
-	$(call startrule,clean) \
-	$(GNURM) -f $(UNZIPPED) ; \
-	$(GNURM) -rf $(STL_DIR)  \
-	$(call endrule,clean)
-
-CREATABLEPATHS:=$$(CREATABLEPATHS) $(dir $(UNZIPPED))
-endef
-
-# only declare targets once if they are the same for urel or udeb
-
-ifeq ($(TARGET_$(STL_DIR)),)
-$(eval $(stlportcommon))
-TARGET_$(STL_DIR):=1
-endif
-
-
-define stlportrel
-$(ALLTARGET):: $(REL_LIB)
-LIBRARY:: $(REL_LIB)
-
-$(REL_LIB): $(STL_REL_LIB_PATH)
-	$(call startrule,install) \
-	$(GNUCP) $(STL_REL_LIB_PATH) $(REL_LIB) \
-	$(call endrule,install)
-
-$(STL_REL_LIB_PATH): $(UNZIPPED)
-	$(call startrule,make) \
-	$(GNUMAKE38) -C "$(BUILD_DIR)" -fraptor_gcc.mak install-release-static LIB_SUFFIX= BASE_INSTALL_DIR=../.. EXTRA_CXXFLAGS='$(STLPORT.CXXFLAGS)' OPT='$(STLPORT.OPT)' \
-	$(call endrule,make)
-
-CREATABLEPATHS:=$$(CREATABLEPATHS) $(dir $(REL_LIB))
-CLEANTARGETS:=$$(CLEANTARGETS) $(REL_LIB)
-WHATFLM:=$$(WHATFLM) $(REL_LIB)
-endef
-
-ifeq ($(CFG_PATH),rel)
-$(eval $(stlportrel))
-endif
-
-define stlportdeb
-$(ALLTARGET):: $(DEB_LIB)
-LIBRARY:: $(DEB_LIB)
-
-$(DEB_LIB): $(STL_DEB_LIB_PATH)
-	$(call startrule,install) \
-	$(GNUCP) $(STL_DEB_LIB_PATH) $(DEB_LIB) \
-	$(call endrule,install)
-
-$(STL_DEB_LIB_PATH):  $(UNZIPPED)
-	$(call startrule,make) \
-	$(GNUMAKE38) -C "$(BUILD_DIR)" -fraptor_gcc.mak install-dbg-static LIB_SUFFIX= BASE_INSTALL_DIR=../.. EXTRA_CXXFLAGS='$(STLPORT.CXXFLAGS)' OPT='$(STLPORT.OPT)' \
-	$(call endrule,make)
-
-	
-CREATABLEPATHS:=$$(CREATABLE_PATHS) $(dir $(DEB_LIB))
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEB_LIB)
-WHATFLM:=$$(WHATFLM) $(DEB_LIB)
-endef
-
-ifeq ($(CFG_PATH),deb)
-$(eval $(stlportdeb))
-endif
-
-$(eval $(call whatmacro,$(WHATFLM),WHATTEM))
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-
-## Clean up (using eval to avoid target specific variables)
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),))
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to build STLport libraries.
+
+## Outputs - externally relevant targets that this FLM generates
+
+ifeq ($(OSTYPE),unix)
+STLPORT.OPT:=-fPIC -m32 -O2
+STLPORT.CXXFLAGS:=-m32 
+else
+STLPORT.OPT:=-O2
+STLPORT.CXXFLAGS:=
+endif
+
+
+SOURCE_ARCHIVE:=$(EXTENSION_ROOT)/$(SOURCE_ARCHIVE)
+
+EXTRACT_DIR:=$(EPOCBLD)$(TOOLPLATFORMDIR)
+STL_DIR:=$(EXTRACT_DIR)/STLport-$(STLPORT_VERSION)
+BUILD_DIR:=$(STL_DIR)/build/lib
+UNZIPPED:=$(STL_DIR)/unzipped.ok
+
+RELEASE_DIR:=$(EPOCROOT)/epoc32/release/tools2$(TOOLPLATFORMDIR)
+RELEASE_DIR_REL:=$(RELEASE_DIR)/rel
+RELEASE_DIR_DEB:=$(RELEASE_DIR)/deb
+WHATFLM:=
+
+ifeq ($(OSTYPE),unix)
+STLPORT.OPT:=-fPIC -m32 -O2
+STLPORT.CXXFLAGS:=-m32 
+else
+STLPORT.OPT:=-O2
+STLPORT.CXXFLAGS:=
+endif
+
+STL_REL_LIB_PATH:=$(STL_DIR)/lib/libstlport.a
+STL_DEB_LIB_PATH:=$(STL_DIR)/lib/libstlportg.a
+
+REL_LIB:=$(RELEASE_DIR_REL)/$(STL_REL_LIB_NAME)
+DEB_LIB:=$(RELEASE_DIR_DEB)/$(STL_REL_LIB_NAME)
+
+STL_HEADERS_PATH:=$(EPOCROOT)/epoc32/include/tools/stlport
+
+CLEANTARGETS:=
+CREATABLEPATHS:=
+
+define stlportcommon
+
+$(UNZIPPED): $(SOURCE_ARCHIVE) 
+	$(call startrule,unzip) \
+	$(UNZIP) -aa -o $(SOURCE_ARCHIVE) -d $(EXTRACT_DIR) && \
+	echo "SHELL:=$$$${SHELL}" > "$(BUILD_DIR)/raptor_gcc.mak" && \
+	$(GNUCAT) $(BUILD_DIR)/gcc.mak >> "$(BUILD_DIR)/raptor_gcc.mak" && \
+	$(GNUTOUCH) $(UNZIPPED) \
+	$(call endrule,unzip)
+
+CLEAN::
+	$(call startrule,clean) \
+	$(GNURM) -f $(UNZIPPED) ; \
+	$(GNURM) -rf $(STL_DIR)  \
+	$(call endrule,clean)
+
+CREATABLEPATHS:=$$(CREATABLEPATHS) $(dir $(UNZIPPED))
+endef
+
+# only declare targets once if they are the same for urel or udeb
+
+ifeq ($(TARGET_$(STL_DIR)),)
+$(eval $(stlportcommon))
+TARGET_$(STL_DIR):=1
+endif
+
+
+define stlportrel
+$(ALLTARGET):: $(REL_LIB)
+LIBRARY:: $(REL_LIB)
+
+$(REL_LIB): $(STL_REL_LIB_PATH)
+	$(call startrule,install) \
+	$(GNUCP) $(STL_REL_LIB_PATH) $(REL_LIB) \
+	$(call endrule,install)
+
+$(STL_REL_LIB_PATH): $(UNZIPPED)
+	$(call startrule,make) \
+	$(GNUMAKE38) -C "$(BUILD_DIR)" -fraptor_gcc.mak install-release-static LIB_SUFFIX= BASE_INSTALL_DIR=../.. EXTRA_CXXFLAGS='$(STLPORT.CXXFLAGS)' OPT='$(STLPORT.OPT)' \
+	$(call endrule,make)
+
+CREATABLEPATHS:=$$(CREATABLEPATHS) $(dir $(REL_LIB))
+CLEANTARGETS:=$$(CLEANTARGETS) $(REL_LIB)
+WHATFLM:=$$(WHATFLM) $(REL_LIB)
+endef
+
+ifeq ($(CFG_PATH),rel)
+$(eval $(stlportrel))
+endif
+
+define stlportdeb
+$(ALLTARGET):: $(DEB_LIB)
+LIBRARY:: $(DEB_LIB)
+
+$(DEB_LIB): $(STL_DEB_LIB_PATH)
+	$(call startrule,install) \
+	$(GNUCP) $(STL_DEB_LIB_PATH) $(DEB_LIB) \
+	$(call endrule,install)
+
+$(STL_DEB_LIB_PATH):  $(UNZIPPED)
+	$(call startrule,make) \
+	$(GNUMAKE38) -C "$(BUILD_DIR)" -fraptor_gcc.mak install-dbg-static LIB_SUFFIX= BASE_INSTALL_DIR=../.. EXTRA_CXXFLAGS='$(STLPORT.CXXFLAGS)' OPT='$(STLPORT.OPT)' \
+	$(call endrule,make)
+
+	
+CREATABLEPATHS:=$$(CREATABLE_PATHS) $(dir $(DEB_LIB))
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEB_LIB)
+WHATFLM:=$$(WHATFLM) $(DEB_LIB)
+endef
+
+ifeq ($(CFG_PATH),deb)
+$(eval $(stlportdeb))
+endif
+
+$(eval $(call whatmacro,$(WHATFLM),WHATTEM))
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+
+## Clean up (using eval to avoid target specific variables)
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),))
--- a/sbsv2/raptor/lib/flm/tools/test_command_diff.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools/test_command_diff.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,5 +1,5 @@
-#!/bin/bash
-
-# Example of how to compare two invocations of a tool
-( echo 'armcc    -O2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318 --diag_error 1267 --cpu 5T  --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter -c   --thumb  --fpu softvfp  -D__MARM_THUMB__  -D__MARM_INTERWORK__   -DNDEBUG -D_UNICODE   -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__MARM_ARMV5__ -D__EXE__ -D__SUPPORT_CPP_EXCEPTIONS__   -D__PRODUCT_INCLUDE__=\"/epoc32/include/variant/Symbian_OS_vFuture.hrh\"    --cpp --preinclude \EPOC32\INCLUDE\RVCT2_2\RVCT2_2.h -J\comms-infras\commsdat\Tools\ced\src -J\comms-infras\commsdat\Tools\ced\inc -J\EPOC32\include -J\epoc32\include\variant -o \EPOC32\BUILD\comms-infras\commsdat\group\CED\ARMV5\UREL\database.o \comms-infras\commsdat\Tools\ced\src\database.cpp filedump.cpp';
-echo 'armcc  -g --dwarf3  -O0 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318 --diag_error 1267 --cpu 5T  --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter   -c   --thumb  --fpu softvfp  -D__MARM_THUMB__  -D__MARM_INTERWORK__   -D_DEBUG -D_UNICODE   -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__MARM_ARMV5__ -D__EXE__ -D__SUPPORT_CPP_EXCEPTIONS__   -D__PRODUCT_INCLUDE__=\"/epoc32/include/variant/Symbian_OS_vFuture.hrh\"    --cpp --preinclude \EPOC32\INCLUDE\RVCT2_2\RVCT2_2.h  -J\comms-infras\commsdat\Tools\ceddump\src -J\comms-infras\commsdat\Tools\ceddump\inc  -J\comms-infras\commsdat\Tools\ced\inc -J\EPOC32\include -J\epoc32\include\variant -o \EPOC32\BUILD\comms-infras\commsdat\group\CEDDUMP\ARMV5\UDEB\mainentry.o \comms-infras\commsdat\Tools\ceddump\src\mainentry.cpp r99qosconversion.cpp') | python command_diff.py
+#!/bin/bash
+
+# Example of how to compare two invocations of a tool
+( echo 'armcc    -O2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318 --diag_error 1267 --cpu 5T  --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter -c   --thumb  --fpu softvfp  -D__MARM_THUMB__  -D__MARM_INTERWORK__   -DNDEBUG -D_UNICODE   -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__MARM_ARMV5__ -D__EXE__ -D__SUPPORT_CPP_EXCEPTIONS__   -D__PRODUCT_INCLUDE__=\"/epoc32/include/variant/Symbian_OS_vFuture.hrh\"    --cpp --preinclude \EPOC32\INCLUDE\RVCT2_2\RVCT2_2.h -J\comms-infras\commsdat\Tools\ced\src -J\comms-infras\commsdat\Tools\ced\inc -J\EPOC32\include -J\epoc32\include\variant -o \EPOC32\BUILD\comms-infras\commsdat\group\CED\ARMV5\UREL\database.o \comms-infras\commsdat\Tools\ced\src\database.cpp filedump.cpp';
+echo 'armcc  -g --dwarf3  -O0 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,6318 --diag_error 1267 --cpu 5T  --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter   -c   --thumb  --fpu softvfp  -D__MARM_THUMB__  -D__MARM_INTERWORK__   -D_DEBUG -D_UNICODE   -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D__MARM_ARMV5__ -D__EXE__ -D__SUPPORT_CPP_EXCEPTIONS__   -D__PRODUCT_INCLUDE__=\"/epoc32/include/variant/Symbian_OS_vFuture.hrh\"    --cpp --preinclude \EPOC32\INCLUDE\RVCT2_2\RVCT2_2.h  -J\comms-infras\commsdat\Tools\ceddump\src -J\comms-infras\commsdat\Tools\ceddump\inc  -J\comms-infras\commsdat\Tools\ced\inc -J\EPOC32\include -J\epoc32\include\variant -o \EPOC32\BUILD\comms-infras\commsdat\group\CEDDUMP\ARMV5\UDEB\mainentry.o \comms-infras\commsdat\Tools\ceddump\src\mainentry.cpp r99qosconversion.cpp') | python command_diff.py
--- a/sbsv2/raptor/lib/flm/tools2common.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools2common.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,107 +1,107 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Function-Like Makefile to build common TOOLS2 objects with gcc
-# (included by tools2exe.flm and tools2lib.flm)
-#
-#
-
-## Input parameters
-
-OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)_$(TARGETTYPE)/tools2/$(VARIANTTYPE)$(TOOLPLATFORMDIR)
-
-ifeq ($(OSTYPE),cygwin)
-CDEFS.TOOLS2:=$(CDEFS.WIN32) $(CDEFS)
-CFLAGS:=$(CFLAGS.WIN32) $(CFLAGS) $(OPTION_GCC)
-COMPILER_PATH:=$(COMPILER_PATH.WIN32)
-else
-CDEFS.TOOLS2:=$(CDEFS.LINUX) $(CDEFS)
-CFLAGS:=$(CFLAGS) $(OPTION_GCC)
-COMPILER_PATH=$(COMPILER_PATH.LINUX)
-endif
-CDEFS.TOOLS2:=$(call makemacrodef,$(OPT.D),$(CDEFS.TOOLS2))
-
-## Locally used variables
-CREATABLEPATHS:=$(OUTPUTPATH) $(RELEASEPATH) $(TOOLSPATH)
-
-## Global targets
-$(ALLTARGET):: $(TARGETS)
-TARGET:: $(TARGETS)
-
-## Pre-Include directories
-ifneq ($(INC.COMPILER),)
-PINCLUDE:=$(patsubst %,$(OPT.PREINCLUDE)%,$(INC.COMPILER))
-endif
-
-## User and System Include directories
-ifneq ($(USERINCLUDE),)
-UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
-endif
-ifneq ($(SYSTEMINCLUDE),)
-SINCLUDE:=$(patsubst %,$(OPT.SYSTEMINCLUDE)%,$(SYSTEMINCLUDE))
-endif
-
-INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
-
-## Source files
-CPPFILES:=$(filter %.CPP,$(SOURCE))
-cppFILES:=$(filter %.cpp,$(SOURCE))
-CFILES:=$(filter %.C,$(SOURCE))
-cFILES:=$(filter %.c,$(SOURCE))
-
-## Object files
-CPPOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.CPP,%.o,$(CPPFILES))))
-cppOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.cpp,%.o,$(cppFILES))))
-COBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.C,%.o,$(CFILES))))
-cOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.c,%.o,$(cFILES))))
-OBJECTFILES:=$(CPPOBJFILES) $(cppOBJFILES) $(cOBJFILES) $(COBJFILES)
-
-CLEANTARGETS:=
-## Compile CPP and cpp files
-define compile2object
-$(eval compile2object_TARGET:=$(OUTPUTPATH)/$(patsubst %.$(2),%.o,$(notdir $(1))))
-$(eval DEPENDFILENAME:=$(compile2object_TARGET).d)
-$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-$(compile2object_TARGET): $(1) $(if (DEPENDFILE),,EXPORT)
-	$(call startrule,compile2object,,$(1)) \
-	$(if $(COMPILER_PATH),COMPILER_PATH="$(COMPILER_PATH)",) \
-	$(COMPILER) $(CFLAGS) $(CDEFS.TOOLS2) -MD -MT"$$@" -MF"$(DEPENDFILENAME)" $(INCLUDES) $(OPT.O)"$$@" "$(1)" \
-	$(call endrule,compile2object)
-
-CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-ifneq "$(DEPENDFILE)" ""
-ifeq ($(NO_DEPEND_INCLUDE),)
-  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-    -include $(DEPENDFILE)
-  endif
-endif
-endif
-
-endef
-
-$(foreach SRC,$(CPPFILES),$(eval $(call compile2object,$(SRC),CPP)))
-$(foreach SRC,$(cppFILES),$(eval $(call compile2object,$(SRC),cpp)))
-$(foreach SRC,$(CFILES),$(eval $(call compile2object,$(SRC),C)))
-$(foreach SRC,$(cFILES),$(eval $(call compile2object,$(SRC),c)))
-
-### Conclusion - cleanup and introspection #######################
-
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-
-## Clean up (using eval to avoid target specific variables)
-$(eval $(call GenerateStandardCleanTarget,$(TARGETS) $(OBJECTFILES),$(CREATABLEPATHS),))
-## WHAT target
-$(eval $(call whatmacro,$(RELEASEABLES),WHATTOOLS2))
-
-## The End
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Function-Like Makefile to build common TOOLS2 objects with gcc
+# (included by tools2exe.flm and tools2lib.flm)
+#
+#
+
+## Input parameters
+
+OUTPUTPATH:=$(OUTPUTPATH)/$(TARGET)_$(TARGETTYPE)/tools2/$(VARIANTTYPE)$(TOOLPLATFORMDIR)
+
+ifeq ($(OSTYPE),cygwin)
+CDEFS.TOOLS2:=$(CDEFS.WIN32) $(CDEFS)
+CFLAGS:=$(CFLAGS.WIN32) $(CFLAGS) $(OPTION_GCC)
+COMPILER_PATH:=$(COMPILER_PATH.WIN32)
+else
+CDEFS.TOOLS2:=$(CDEFS.LINUX) $(CDEFS)
+CFLAGS:=$(CFLAGS) $(OPTION_GCC)
+COMPILER_PATH=$(COMPILER_PATH.LINUX)
+endif
+CDEFS.TOOLS2:=$(call makemacrodef,$(OPT.D),$(CDEFS.TOOLS2))
+
+## Locally used variables
+CREATABLEPATHS:=$(OUTPUTPATH) $(RELEASEPATH) $(TOOLSPATH)
+
+## Global targets
+$(ALLTARGET):: $(TARGETS)
+TARGET:: $(TARGETS)
+
+## Pre-Include directories
+ifneq ($(INC.COMPILER),)
+PINCLUDE:=$(patsubst %,$(OPT.PREINCLUDE)%,$(INC.COMPILER))
+endif
+
+## User and System Include directories
+ifneq ($(USERINCLUDE),)
+UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
+endif
+ifneq ($(SYSTEMINCLUDE),)
+SINCLUDE:=$(patsubst %,$(OPT.SYSTEMINCLUDE)%,$(SYSTEMINCLUDE))
+endif
+
+INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
+
+## Source files
+CPPFILES:=$(filter %.CPP,$(SOURCE))
+cppFILES:=$(filter %.cpp,$(SOURCE))
+CFILES:=$(filter %.C,$(SOURCE))
+cFILES:=$(filter %.c,$(SOURCE))
+
+## Object files
+CPPOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.CPP,%.o,$(CPPFILES))))
+cppOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.cpp,%.o,$(cppFILES))))
+COBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.C,%.o,$(CFILES))))
+cOBJFILES:=$(patsubst %,$(OUTPUTPATH)/%,$(notdir $(patsubst %.c,%.o,$(cFILES))))
+OBJECTFILES:=$(CPPOBJFILES) $(cppOBJFILES) $(cOBJFILES) $(COBJFILES)
+
+CLEANTARGETS:=
+## Compile CPP and cpp files
+define compile2object
+$(eval compile2object_TARGET:=$(OUTPUTPATH)/$(patsubst %.$(2),%.o,$(notdir $(1))))
+$(eval DEPENDFILENAME:=$(compile2object_TARGET).d)
+$(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+$(compile2object_TARGET): $(1) $(if (DEPENDFILE),,EXPORT)
+	$(call startrule,compile2object,,$(1)) \
+	$(if $(COMPILER_PATH),COMPILER_PATH="$(COMPILER_PATH)",) \
+	$(COMPILER) $(CFLAGS) $(CDEFS.TOOLS2) -MD -MT"$$@" -MF"$(DEPENDFILENAME)" $(INCLUDES) $(OPT.O)"$$@" "$(1)" \
+	$(call endrule,compile2object)
+
+CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+ifneq "$(DEPENDFILE)" ""
+ifeq ($(NO_DEPEND_INCLUDE),)
+  ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+    -include $(DEPENDFILE)
+  endif
+endif
+endif
+
+endef
+
+$(foreach SRC,$(CPPFILES),$(eval $(call compile2object,$(SRC),CPP)))
+$(foreach SRC,$(cppFILES),$(eval $(call compile2object,$(SRC),cpp)))
+$(foreach SRC,$(CFILES),$(eval $(call compile2object,$(SRC),C)))
+$(foreach SRC,$(cFILES),$(eval $(call compile2object,$(SRC),c)))
+
+### Conclusion - cleanup and introspection #######################
+
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+
+## Clean up (using eval to avoid target specific variables)
+$(eval $(call GenerateStandardCleanTarget,$(TARGETS) $(OBJECTFILES),$(CREATABLEPATHS),))
+## WHAT target
+$(eval $(call whatmacro,$(RELEASEABLES),WHATTOOLS2))
+
+## The End
--- a/sbsv2/raptor/lib/flm/tools2exe.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools2exe.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,77 +1,77 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Function-Like Makefile to build a TOOLS2 EXE with gcc
-# 
-#
-
-## Outputs - externally relevant targets that this FLM generates
-ifeq ($(OSTYPE),cygwin)
-SYSTEMLIBS:=$(LIBS.WIN32)
-else
-SYSTEMLIBS:=$(LIBS.LINUX)
-endif
-
-EXETARGET:=$(RELEASEPATH)/$(TARGET)$(DOTEXE)
-
-ifneq ($(TOOLSPATH),)
-INSTALLED:=$(TOOLSPATH)/$(TARGET)$(DOTEXE)
-endif
-
-## Target groups
-RELEASEABLES:=$(INSTALLED)
-TARGETS:=$(EXETARGET) $(INSTALLED)
-
-## Common build steps (compiling and cleaning)
-include $(FLMHOME)/tools2common.flm
-
-## Static libraries
-ifneq ($(STATICLIBRARY),)
-STATICLIBS:=$(patsubst %,$(RELEASEPATH)/lib%.a,$(STATICLIBRARY))
-LLIBS:=$(OPT.L)"$(RELEASEPATH)" $(patsubst %,$(OPT.l)%,$(STATICLIBRARY))
-#
-ifneq ($(SYSTEMLIBS),)
-LLIBS:=$(LLIBS) $(patsubst %,$(OPT.l)%,$(SYSTEMLIBS))
-endif
-#
-endif
-
-## Link executable
-# get OBJECTFILES from call to tools2common
-define tools2linkexe
-$(EXETARGET): $(OBJECTFILES) $(STATICLIBS)
-	$(call startrule,tools2linkexe) \
-	$(LINKER) $(CFLAGS) $(LFLAGS) $(OPT.O)"$(EXETARGET)" $(call dblquote,$(OBJECTFILES)) $(LLIBS) \
-	$(if $(SAVESPACE),; $(GNURM) -rf $(OUTPUTPATH); true,) \
-	$(call endrule,tools2linkexe)
-
-endef
-
-$(eval $(call tools2linkexe))
-
-	
-## Copy executable to the tools directory
-ifneq ($(TOOLSPATH),)
-define tools2install
-$(INSTALLED): $(EXETARGET)
-	$(call startrule,tools2install) \
-	$(GNUCP) "$(EXETARGET)" "$(INSTALLED)" && \
-	$(GNUCHMOD) a+rwx "$(INSTALLED)" \
-	$(call endrule,tools2install)
-endef
-
-$(eval $(call tools2install))
-
-endif
-
-## The End
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Function-Like Makefile to build a TOOLS2 EXE with gcc
+# 
+#
+
+## Outputs - externally relevant targets that this FLM generates
+ifeq ($(OSTYPE),cygwin)
+SYSTEMLIBS:=$(LIBS.WIN32)
+else
+SYSTEMLIBS:=$(LIBS.LINUX)
+endif
+
+EXETARGET:=$(RELEASEPATH)/$(TARGET)$(DOTEXE)
+
+ifneq ($(TOOLSPATH),)
+INSTALLED:=$(TOOLSPATH)/$(TARGET)$(DOTEXE)
+endif
+
+## Target groups
+RELEASEABLES:=$(INSTALLED)
+TARGETS:=$(EXETARGET) $(INSTALLED)
+
+## Common build steps (compiling and cleaning)
+include $(FLMHOME)/tools2common.flm
+
+## Static libraries
+ifneq ($(STATICLIBRARY),)
+STATICLIBS:=$(patsubst %,$(RELEASEPATH)/lib%.a,$(STATICLIBRARY))
+LLIBS:=$(OPT.L)"$(RELEASEPATH)" $(patsubst %,$(OPT.l)%,$(STATICLIBRARY))
+#
+ifneq ($(SYSTEMLIBS),)
+LLIBS:=$(LLIBS) $(patsubst %,$(OPT.l)%,$(SYSTEMLIBS))
+endif
+#
+endif
+
+## Link executable
+# get OBJECTFILES from call to tools2common
+define tools2linkexe
+$(EXETARGET): $(OBJECTFILES) $(STATICLIBS)
+	$(call startrule,tools2linkexe) \
+	$(LINKER) $(CFLAGS) $(LFLAGS) $(OPT.O)"$(EXETARGET)" $(call dblquote,$(OBJECTFILES)) $(LLIBS) \
+	$(if $(SAVESPACE),; $(GNURM) -rf $(OUTPUTPATH); true,) \
+	$(call endrule,tools2linkexe)
+
+endef
+
+$(eval $(call tools2linkexe))
+
+	
+## Copy executable to the tools directory
+ifneq ($(TOOLSPATH),)
+define tools2install
+$(INSTALLED): $(EXETARGET)
+	$(call startrule,tools2install) \
+	$(GNUCP) "$(EXETARGET)" "$(INSTALLED)" && \
+	$(GNUCHMOD) a+rwx "$(INSTALLED)" \
+	$(call endrule,tools2install)
+endef
+
+$(eval $(call tools2install))
+
+endif
+
+## The End
--- a/sbsv2/raptor/lib/flm/tools2lib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tools2lib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,45 +1,45 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Function-Like Makefile to build a TOOLS2 LIB with gcc
-# 
-#
-
-## Outputs - externally relevant targets that this FLM generates
-LIBTARGET:=$(RELEASEPATH)/$(TARGET).a
-
-## Target groups
-RELEASEABLES:=$(LIBTARGET)
-TARGETS:=$(LIBTARGET)
-
-## Common build steps (compiling)
-include $(FLMHOME)/tools2common.flm
-
-## Create library archive
-# get OBJECTFILES from tools2common
-define tools2lib
-$(LIBTARGET): $(OBJECTFILES)
-	$(call startrule,tools2lib) \
-	$(ARCHIVER) $(AFLAGS) $(LIBTARGET) $(OBJECTFILES) && \
-	$(RANLIB) $(LIBTARGET) \
-	$(if $(SAVESPACE),; $(GNURM) -rf $(OUTPUTPATH); true,) \
-	$(call endrule,tools2lib)
-
-endef
-
-$(eval $(call tools2lib))
-
-## Global target
-LIBRARY:: $(LIBTARGET)
-
-## The End
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Function-Like Makefile to build a TOOLS2 LIB with gcc
+# 
+#
+
+## Outputs - externally relevant targets that this FLM generates
+LIBTARGET:=$(RELEASEPATH)/$(TARGET).a
+
+## Target groups
+RELEASEABLES:=$(LIBTARGET)
+TARGETS:=$(LIBTARGET)
+
+## Common build steps (compiling)
+include $(FLMHOME)/tools2common.flm
+
+## Create library archive
+# get OBJECTFILES from tools2common
+define tools2lib
+$(LIBTARGET): $(OBJECTFILES)
+	$(call startrule,tools2lib) \
+	$(ARCHIVER) $(AFLAGS) $(LIBTARGET) $(OBJECTFILES) && \
+	$(RANLIB) $(LIBTARGET) \
+	$(if $(SAVESPACE),; $(GNURM) -rf $(OUTPUTPATH); true,) \
+	$(call endrule,tools2lib)
+
+endef
+
+$(eval $(call tools2lib))
+
+## Global target
+LIBRARY:: $(LIBTARGET)
+
+## The End
--- a/sbsv2/raptor/lib/flm/tracecompiler.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/tracecompiler.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,76 +1,86 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Run Trace Compiler on source files to generate trace headers and decode files
-#
-
-TRACE_PRJNAME:=$(basename $(notdir $(PROJECT_META)))
-# Find out TRACE_PATH
-TRACE_PATH:=$(strip $(foreach DIR,$(USERINCLUDE),$(filter %/traces_$(TRACE_PRJNAME),$(DIR))))
-ifeq ($(TRACE_PATH),)
-TRACE_PATH:=$(strip $(foreach DIR,$(USERINCLUDE),$(filter %/traces,$(DIR))))
-endif
-
-# Run trace compiler only if TRACE_PATH exists
-ifneq ($(TRACE_PATH),)
-TRACE_MARKER:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_PRJNAME)_$(UID_TC).done
-TRACE_HEADERS:=
-
-TRACE_SOURCE_LIST:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_PRJNAME)_$(UID_TC).sourcelist
-
-# 1. Append to or create the list of source files for trace compiler to process
-# 2. Check if the hash in trace marker remain unchanged. If not, remove marker so trace compiler will run again. 
-X:=$(shell set -x ; $(GNUMKDIR) -p $(TRACE_MARKER_PATH) ; $(GNUTOUCH) $(TRACE_SOURCE_LIST) ; echo -e "$(subst $(CHAR_SPACE),\\n,$(SOURCE))" | $(GNUSORT) -u $(TRACE_SOURCE_LIST) - > $(TRACE_SOURCE_LIST).tmp && $(GNUMV) $(TRACE_SOURCE_LIST).tmp $(TRACE_SOURCE_LIST) ; $(GNUMD5SUM) -c $(TRACE_MARKER) || $(GNURM) $(TRACE_MARKER))
-
-$(if $(FLMDEBUG),$(info <debug>Trace Compiler sourcelist generation output: $(X)</debug>))
-
-$(TRACE_MARKER) : $(SOURCE)
-
-ifeq ($(GUARD_$(call sanitise,$(TRACE_MARKER))),)
-GUARD_$(call sanitise,$(TRACE_MARKER)):=1
-
-JAVA_COMMAND:=$(SBS_JAVATC)
-TRACE_COMPILER_PATH:=$(EPOCROOT)/epoc32/tools
-TRACE_COMPILER_START:=-classpath $(TRACE_COMPILER_PATH)/tracecompiler com.nokia.tracecompiler.TraceCompiler
-
-TRACE_HEADERS:=$(foreach SRC,$(SOURCE),$(TRACE_PATH)/$(basename $(notdir $(SRC)))Traces.h)
-
-# 1. Use pipe to send inputs to trace compiler to process
-# 2. Create a hash regarding to source names and put it in marker.
-# 3. Show source names that are processed by trace compiler
-define trace_compile
-$(TRACE_MARKER) : $(PROJECT_META)
-	$(call startrule,tracecompile) \
-	( echo -en "$(TRACE_PRJNAME)\n$(PROJECT_META)\n"; \
-	  $(GNUCAT) $(TRACE_SOURCE_LIST); \
-	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
-	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) && \
-	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) ; \
-	$(GNUCAT) $(TRACE_SOURCE_LIST) \
-	$(call endrule,tracecompile)
-endef
-
-$(eval $(trace_compile))
-
-$(eval $(call GenerateStandardCleanTarget,$(TRACE_HEADERS) $(TRACE_PATH)/tracebuilder.cache $(TRACE_MARKER) $(TRACE_SOURCE_LIST),,))
-
-# End sanity guard
-endif
-
-else
-# Indicate to following parts of the FLM that we actually won't run
-# trace compiler so they can set dependencies accordingly.
-USE_TRACE_COMPILER:=
-endif
-
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Run Trace Compiler on source files to generate trace headers and decode files
+
+TRACE_PRJNAME:=$(basename $(notdir $(PROJECT_META)))
+# Find out TRACE_PATH
+TRACE_PATH:=$(strip $(foreach DIR,$(USERINCLUDE),$(filter %/traces_$(TRACE_PRJNAME),$(DIR))))
+ifeq ($(TRACE_PATH),)
+TRACE_PATH:=$(strip $(foreach DIR,$(USERINCLUDE),$(filter %/traces,$(DIR))))
+endif
+ifeq ($(TRACE_PATH),)
+TRACE_PATH:=$(strip $(foreach DIR,$(USERINCLUDE),$(filter %/traces_$(TARGET)_$(TARGETTYPE),$(DIR))))
+# Use target name instead of mmp file name
+TRACE_PRJNAME:=$(TARGET)_$(TARGETTYPE)
+endif
+
+$(if $(FLMDEBUG),$(info <debug>TRACE_PATH = $(TRACE_PATH)</debug>))
+
+# Run trace compiler only if TRACE_PATH exists
+ifneq ($(TRACE_PATH),)
+TRACE_MARKER:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_PRJNAME)_$(UID_TC).done
+TRACE_HEADERS:=
+
+TRACE_SOURCE_LIST:=$(TRACE_MARKER_PATH)/tracecompile_$(TRACE_PRJNAME)_$(UID_TC).sourcelist
+
+# 1. Append to or create the list of source files for trace compiler to process
+# 2. Check if the hash in trace marker remain unchanged. If not, remove marker so trace compiler will run again. 
+X:=$(shell set -x ; $(GNUMKDIR) -p $(TRACE_MARKER_PATH) ; $(GNUTOUCH) $(TRACE_SOURCE_LIST) ; echo -e "$(subst $(CHAR_SPACE),\\n,$(SOURCE))" | $(GNUSORT) -u $(TRACE_SOURCE_LIST) - > $(TRACE_SOURCE_LIST).tmp && $(GNUMV) $(TRACE_SOURCE_LIST).tmp $(TRACE_SOURCE_LIST) ; $(GNUMD5SUM) -c $(TRACE_MARKER) || $(GNURM) $(TRACE_MARKER))
+
+$(if $(FLMDEBUG),$(info <debug>Trace Compiler sourcelist generation output: $(X)</debug>))
+
+$(TRACE_MARKER) : $(SOURCE)
+
+TRACE_HEADERS:=$(foreach SRC,$(SOURCE),$(TRACE_PATH)/$(basename $(notdir $(SRC)))Traces.h)
+
+$(TRACE_HEADERS): $(TRACE_MARKER)
+
+ifeq ($(GUARD_$(call sanitise,$(TRACE_MARKER))),)
+GUARD_$(call sanitise,$(TRACE_MARKER)):=1
+
+JAVA_COMMAND:=$(SBS_JAVATC)
+TRACE_COMPILER_PATH:=$(EPOCROOT)/epoc32/tools
+TRACE_COMPILER_START:=-classpath $(TRACE_COMPILER_PATH)/tracecompiler com.nokia.tracecompiler.TraceCompiler
+
+
+# 1. Use pipe to send inputs to trace compiler to process
+# 2. Create a hash regarding to source names and put it in marker.
+# 3. Show source names that are processed by trace compiler
+define trace_compile
+$(TRACE_MARKER) : $(PROJECT_META)
+	$(call startrule,tracecompile) \
+	( echo -en "$(TRACE_PRJNAME)\n$(PROJECT_META)\n"; \
+	  $(GNUCAT) $(TRACE_SOURCE_LIST); \
+	  echo -en "*ENDOFSOURCEFILES*\n" ) | \
+	$(JAVA_COMMAND) $(TRACE_COMPILER_START) $(UID_TC) && \
+	$(GNUMD5SUM) $(TRACE_SOURCE_LIST) > $(TRACE_MARKER) ; \
+	$(GNUCAT) $(TRACE_SOURCE_LIST) \
+	$(call endrule,tracecompile)
+endef
+
+$(eval $(trace_compile))
+
+$(eval $(call GenerateStandardCleanTarget, $(TRACE_PATH)/tracebuilder.cache $(TRACE_MARKER) $(TRACE_SOURCE_LIST),,))
+
+# End sanity guard
+endif
+
+$(eval $(call GenerateStandardCleanTarget,$(TRACE_HEADERS),,))
+
+else
+# Indicate to following parts of the FLM that we actually won't run
+# trace compiler so they can set dependencies accordingly.
+USE_TRACE_COMPILER:=
+endif
+
--- a/sbsv2/raptor/lib/flm/user/default.flm_ex	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/user/default.flm_ex	Mon Nov 16 09:46:46 2009 +0000
@@ -1,26 +1,26 @@
-# Copyright (c) Symbian Software Ltd 2008-2009.
-#
-# Description:
-# This is an example file.
-# If it exists, the file default.flm in this directory is automatically
-# included by $(SBS_HOME)/lib/flm/config/default.flm
-# This allows end-users to "drop in" a file which adds to the default
-# behaviour (or overrides it) rather than editing the shipped .flm file.
-# default.flm contains things which require one instance per configuration.
-# For example, dependencies in the epoc32 tree (which need the $(EPOCROOT)
-# variable) and recipes to make things not specified in a bld.inf file.
-#
-
-
-# an example dependency - the script my.pl uses the rcomp tool
-
-$(EPOCROOT)/epoc32/tools/my.pl:	$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)
-
-
-# an example recipe - run an accounting script after the binaries are made
-
-FINAL::
-	python $(EPOCROOT)/epoc32/tools/my_account.py $(EPOCROOT) $(PLATFORM)
-
-
-# end of example file
+# Copyright (c) Symbian Software Ltd 2008-2009.
+#
+# Description:
+# This is an example file.
+# If it exists, the file default.flm in this directory is automatically
+# included by $(SBS_HOME)/lib/flm/config/default.flm
+# This allows end-users to "drop in" a file which adds to the default
+# behaviour (or overrides it) rather than editing the shipped .flm file.
+# default.flm contains things which require one instance per configuration.
+# For example, dependencies in the epoc32 tree (which need the $(EPOCROOT)
+# variable) and recipes to make things not specified in a bld.inf file.
+#
+
+
+# an example dependency - the script my.pl uses the rcomp tool
+
+$(EPOCROOT)/epoc32/tools/my.pl:	$(EPOCROOT)/epoc32/tools/rcomp$(DOTEXE)
+
+
+# an example recipe - run an accounting script after the binaries are made
+
+FINAL::
+	python $(EPOCROOT)/epoc32/tools/my_account.py $(EPOCROOT) $(PLATFORM)
+
+
+# end of example file
--- a/sbsv2/raptor/lib/flm/user/globals.mk_ex	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/user/globals.mk_ex	Mon Nov 16 09:46:46 2009 +0000
@@ -1,21 +1,21 @@
-# Copyright (c) Symbian Software Ltd 2008-2009.
-#
-# Description:
-# This is an example file.
-# If it exists, the file globals.mk in this directory is automatically
-# included by $(SBS_HOME)/lib/flm/globals.mk
-# This allows end-users to "drop in" a file which adds to the default
-# behaviour (or overrides it) rather than editing the shipped .mk file.
-# globals.mk contains things which require one instance per build.
-# For example, macros and variables, dependencies and targets which are
-# truly global - independent of the epoc32 tree location.
-#
-
-
-# example resource dependency variables
-
-mycore_DEPENDS:=eikcore.rsg eikcoctl.rsg
-mymisc_DEPENDS:=eikmisc.rsg
-
-
-# end of example file
+# Copyright (c) Symbian Software Ltd 2008-2009.
+#
+# Description:
+# This is an example file.
+# If it exists, the file globals.mk in this directory is automatically
+# included by $(SBS_HOME)/lib/flm/globals.mk
+# This allows end-users to "drop in" a file which adds to the default
+# behaviour (or overrides it) rather than editing the shipped .mk file.
+# globals.mk contains things which require one instance per build.
+# For example, macros and variables, dependencies and targets which are
+# truly global - independent of the epoc32 tree location.
+#
+
+
+# example resource dependency variables
+
+mycore_DEPENDS:=eikcore.rsg eikcoctl.rsg
+mymisc_DEPENDS:=eikmisc.rsg
+
+
+# end of example file
--- a/sbsv2/raptor/lib/flm/utils/copydir.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/utils/copydir.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,73 +1,73 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to recursively copy one directory into another.
-
-# parameters
-#
-# SOURCE_DIR	the source directory, relative to EXTENSION_ROOT
-# DEST_DIR		the destination directory, relative to EPOCROOT
-
-SOURCEPATH:=$(EXTENSION_ROOT)/$(SOURCE_DIR)
-DESTPATH:=$(EPOCROOT)/$(DEST_DIR)
-
-# create the destination directory
-$(call makepath,$(DESTPATH))
-
-# macro for copying.
-define copydirectory
-
-# everything gets copied every time.
-ALL::
-	$(call startrule,copydir) \
-	$(GNUCP) -R $(SOURCEPATH)/* $(DESTPATH) && \
-	$(GNUCHMOD) -R a+rw $(DESTPATH) \
-	$(call endrule,copydir)
-
-# CLEAN removes the whole destination directory.
-CLEAN::
-	$(call startrule,clean) \
-	$(GNURM) -rf $(DESTPATH)  \
-	$(call endrule,clean)
-
-endef # copydirectory
-
-$(eval $(copydirectory))
-
-# for WHAT reporting we have to list every file because CBR
-# wont just take a directory name and include the contents.
-
-# normally we would just use the "whatmacro" macro, which
-# handles everything nicely for us, but we are likely to be
-# generating long lists of files here and might over-run the
-# space available for a single variable :-(
-
-FINDFILES:=$(GNUFIND) $(SOURCEPATH) -type f -print | $(GNUSED) 's!$(SOURCEPATH)!$(DESTPATH)!'
-
-define whatcopies
-
-WHAT::
-	@(echo "<whatlog bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>"; \
-	$(FINDFILES) | (read LINE; \
-	while [ $$$$? -eq 0 ]; do \
-		echo "<build>$$$$LINE</build>"; \
-		read LINE; \
-	done); \
-	echo "</whatlog>") $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
-
-endef # whatcopies
-
-$(eval $(whatcopies))
-
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to recursively copy one directory into another.
+
+# parameters
+#
+# SOURCE_DIR	the source directory, relative to EXTENSION_ROOT
+# DEST_DIR		the destination directory, relative to EPOCROOT
+
+SOURCEPATH:=$(EXTENSION_ROOT)/$(SOURCE_DIR)
+DESTPATH:=$(EPOCROOT)/$(DEST_DIR)
+
+# create the destination directory
+$(call makepath,$(DESTPATH))
+
+# macro for copying.
+define copydirectory
+
+# everything gets copied every time.
+ALL::
+	$(call startrule,copydir) \
+	$(GNUCP) -R $(SOURCEPATH)/* $(DESTPATH) && \
+	$(GNUCHMOD) -R a+rw $(DESTPATH) \
+	$(call endrule,copydir)
+
+# CLEAN removes the whole destination directory.
+CLEAN::
+	$(call startrule,clean) \
+	$(GNURM) -rf $(DESTPATH)  \
+	$(call endrule,clean)
+
+endef # copydirectory
+
+$(eval $(copydirectory))
+
+# for WHAT reporting we have to list every file because CBR
+# wont just take a directory name and include the contents.
+
+# normally we would just use the "whatmacro" macro, which
+# handles everything nicely for us, but we are likely to be
+# generating long lists of files here and might over-run the
+# space available for a single variable :-(
+
+FINDFILES:=$(GNUFIND) $(SOURCEPATH) -type f -print | $(GNUSED) 's!$(SOURCEPATH)!$(DESTPATH)!'
+
+define whatcopies
+
+WHAT::
+	@(echo "<whatlog bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)'>"; \
+	$(FINDFILES) | (read LINE; \
+	while [ $$$$? -eq 0 ]; do \
+		echo "<build>$$$$LINE</build>"; \
+		read LINE; \
+	done); \
+	echo "</whatlog>") $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE))
+
+endef # whatcopies
+
+$(eval $(whatcopies))
+
--- a/sbsv2/raptor/lib/flm/utils/prebuilt.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/utils/prebuilt.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,103 +1,103 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-# FLM to copy pre-built binaries into the right release locations
-
-# parameters
-#
-# PRE_PLATFORM    the target of the binaries, e.g. armv5
-# PRE_TYPE        the build variant of the binaries, e.g. urel
-# BINARIES        the list of binary files, relative to EXTENSION_ROOT
-
-# The filenames in the list BINARIES may optionally have an appended "->name"
-# when the destination basename should be different from the source. For
-# example, ../bin/deb_codec66.lib->codec66.lib will create files
-# called "codec66.lib" and not "deb_codec66.lib"
-               
-# ensure that there are no nasty leading or trailing spaces
-PRE_PLATFORM:=$(strip $(PRE_PLATFORM))
-PRE_TYPE:=$(strip $(PRE_TYPE))
-
-# don't do anything unless the prebuilt binaries match what we are building
-#
-ifeq ($(PRE_PLATFORM),$(VARIANTPLATFORM))
-ifeq ($(PRE_TYPE),$(VARIANTTYPE))
-
-# the feature Invariant directory for binaries of this ilk
-INV:=$(RELEASEPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
-
-CREATABLEPATHS:=
-RELEASABLES:=
-
-# for any configuration (feature variant or not) add rules to copy the
-# prebuilt binaries from the source directory to the Invariant directory.
-#
-# For example,
-# cp /src/armv5/urel/my.lib /epoc32/release/armv5/urel/my.lib
-#
-# Without this you would always have to build the invariant configuration
-# before (or alongside) any feature variant configuration.
-
-define copyprebuilt
-#
-# $1 is the source file
-# $2 is the destination file
-
-ALL:: $(2)
-
-$(2): $(1)
-	$(call startrule,copyprebuilt) \
-	$(GNUCP) $(1) $(2) && \
-	$(GNUCHMOD) a+rw $(2) \
-	$(call endrule,copyprebuilt)
-
-CREATABLEPATHS:=$(INV)
-RELEASABLES:=$$(RELEASABLES) $(2)
-
-endef # copyprebuilt
-
-define copyprebuiltfile
-#
-# $1 is "name" or "name->name"
-
-ifeq ($(findstring ->,$(1)),)
-$(call copyprebuilt,$(EXTENSION_ROOT)/$(1),$(INV)/$(notdir $(1)))
-else
-$(call copyprebuilt,$(EXTENSION_ROOT)/$(word 1,$(subst ->, ,$(1))),$(INV)/$(word 2,$(subst ->, ,$(1))))
-endif
-endef # copyprebuiltfile
-
-$(eval $(foreach B,$(BINARIES),$(call copyprebuiltfile,$(B))))
-
-
-# housekeeping
-
-# make the output directories while reading the makefile,
-# as some build engines prefer this.
-$(call makepath,$(CREATABLEPATHS))
-
-# clean
-$(eval $(call GenerateStandardCleanTarget,$(RELEASABLES),$(CREATABLEPATHS)))
-
-# what
-$(eval $(call whatmacro,$(RELEASABLES)))
-
-
-endif # PRE_TYPE == VARIANTTYPE
-endif # PRE_PLATFORM == VARIANTPLATFORM
-
-
-# the end
-
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# FLM to copy pre-built binaries into the right release locations
+
+# parameters
+#
+# PRE_PLATFORM    the target of the binaries, e.g. armv5
+# PRE_TYPE        the build variant of the binaries, e.g. urel
+# BINARIES        the list of binary files, relative to EXTENSION_ROOT
+
+# The filenames in the list BINARIES may optionally have an appended "->name"
+# when the destination basename should be different from the source. For
+# example, ../bin/deb_codec66.lib->codec66.lib will create files
+# called "codec66.lib" and not "deb_codec66.lib"
+               
+# ensure that there are no nasty leading or trailing spaces
+PRE_PLATFORM:=$(strip $(PRE_PLATFORM))
+PRE_TYPE:=$(strip $(PRE_TYPE))
+
+# don't do anything unless the prebuilt binaries match what we are building
+#
+ifeq ($(PRE_PLATFORM),$(VARIANTPLATFORM))
+ifeq ($(PRE_TYPE),$(VARIANTTYPE))
+
+# the feature Invariant directory for binaries of this ilk
+INV:=$(RELEASEPATH)/$(VARIANTPLATFORM)/$(VARIANTTYPE)
+
+CREATABLEPATHS:=
+RELEASABLES:=
+
+# for any configuration (feature variant or not) add rules to copy the
+# prebuilt binaries from the source directory to the Invariant directory.
+#
+# For example,
+# cp /src/armv5/urel/my.lib /epoc32/release/armv5/urel/my.lib
+#
+# Without this you would always have to build the invariant configuration
+# before (or alongside) any feature variant configuration.
+
+define copyprebuilt
+#
+# $1 is the source file
+# $2 is the destination file
+
+ALL:: $(2)
+
+$(2): $(1)
+	$(call startrule,copyprebuilt) \
+	$(GNUCP) $(1) $(2) && \
+	$(GNUCHMOD) a+rw $(2) \
+	$(call endrule,copyprebuilt)
+
+CREATABLEPATHS:=$(INV)
+RELEASABLES:=$$(RELEASABLES) $(2)
+
+endef # copyprebuilt
+
+define copyprebuiltfile
+#
+# $1 is "name" or "name->name"
+
+ifeq ($(findstring ->,$(1)),)
+$(call copyprebuilt,$(EXTENSION_ROOT)/$(1),$(INV)/$(notdir $(1)))
+else
+$(call copyprebuilt,$(EXTENSION_ROOT)/$(word 1,$(subst ->, ,$(1))),$(INV)/$(word 2,$(subst ->, ,$(1))))
+endif
+endef # copyprebuiltfile
+
+$(eval $(foreach B,$(BINARIES),$(call copyprebuiltfile,$(B))))
+
+
+# housekeeping
+
+# make the output directories while reading the makefile,
+# as some build engines prefer this.
+$(call makepath,$(CREATABLEPATHS))
+
+# clean
+$(eval $(call GenerateStandardCleanTarget,$(RELEASABLES),$(CREATABLEPATHS)))
+
+# what
+$(eval $(call whatmacro,$(RELEASABLES)))
+
+
+endif # PRE_TYPE == VARIANTTYPE
+endif # PRE_PLATFORM == VARIANTPLATFORM
+
+
+# the end
+
--- a/sbsv2/raptor/lib/flm/utils/utility.xml	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/utils/utility.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../../schema/build/2_0.xsd">
-	<!-- utility interfaces : handy FLMs for simple things -->
-
-	<interface name="utility.base" extends="base.flm" abstract="true">
-		<param name='EPOCROOT'/>
-		<param name='EPOCBLD'/>
-		<param name='EXTENSION_ROOT'/>
-	</interface>
-
-	<interface name="utility.copydir" extends="utility.base" flm="copydir.flm">
-		<param name="SOURCE_DIR"/>
-		<param name="DEST_DIR"/>
-	</interface>
-
-	<interface name="utility.prebuilt" extends="utility.base" flm="prebuilt.flm">
-		<!-- from the configuration -->
-		<param name="GNUCHMOD"/>
-		<param name="GNUCP"/>
-		<param name="RELEASEPATH"/>
-		<param name="VARIANTPLATFORM"/>
-		<param name="VARIANTTYPE"/>
-		<!-- from the bld.inf -->
-		<param name="BINARIES"/>
-		<param name="PRE_PLATFORM"/> 
-		<param name="PRE_TYPE"/>
-	</interface>
-</build>
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../../schema/build/2_0.xsd">
+	<!-- utility interfaces : handy FLMs for simple things -->
+
+	<interface name="utility.base" extends="base.flm" abstract="true">
+		<param name='EPOCROOT'/>
+		<param name='EPOCBLD'/>
+		<param name='EXTENSION_ROOT'/>
+	</interface>
+
+	<interface name="utility.copydir" extends="utility.base" flm="copydir.flm">
+		<param name="SOURCE_DIR"/>
+		<param name="DEST_DIR"/>
+	</interface>
+
+	<interface name="utility.prebuilt" extends="utility.base" flm="prebuilt.flm">
+		<!-- from the configuration -->
+		<param name="GNUCHMOD"/>
+		<param name="GNUCP"/>
+		<param name="RELEASEPATH"/>
+		<param name="VARIANTPLATFORM"/>
+		<param name="VARIANTTYPE"/>
+		<!-- from the bld.inf -->
+		<param name="BINARIES"/>
+		<param name="PRE_PLATFORM"/> 
+		<param name="PRE_TYPE"/>
+	</interface>
+</build>
--- a/sbsv2/raptor/lib/flm/win32.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,688 +1,688 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW EXE/DLL/IMPLIB/LIB Function Like Makefile (FLM)
-# Knows how to build all possible executables for the WINSCW emulator build
-#
-#
-
-# passed in values, stripped of whitespace
-COPY_FOR_STATIC_LINKAGE:=$(strip $(COPY_FOR_STATIC_LINKAGE))
-DEFFILE:=$(strip $(DEFFILE))
-DEFFILEKEYWORD:=$(strip $(DEFFILEKEYWORD))
-EPOCALLOWDLLDATA:=$(strip $(EPOCALLOWDLLDATA))
-EXPORTLIBRARY:=$(strip $(EXPORTLIBRARY))
-BASEADDRESS:=$(strip $(BASEADDRESS))
-LINKAS:=$(strip $(LINKAS))
-NOEXPORTLIBRARY:=$(strip $(NOEXPORTLIBRARY))
-SECUREID:=$(strip $(SECUREID))
-UID2:=$(strip $(UID2))
-UID3:=$(strip $(UID3))
-VENDORID:=$(strip $(VENDORID))
-VID:=$(strip $(VID))
-WIN32_HEADERS:=$(strip $(WIN32_HEADERS))
-
-# local variables
-BINDIR:=
-BINDIRSTATICLINK:=
-BINTARGET:=
-BINTARGETSTATICLINK:=
-BLDDIR:=
-CHECKLIB_TYPE:=
-CREATABLEPATHS:=
-CLEANTARGETS:=
-CW_RUNTIME:=
-ENTRYSYMBOL:=
-IMPORTLIBLINKAS:=
-IMPORTLIBTARGET:=
-LIBDIR:=
-LINKER_FIRSTSTATLIB:=
-MAINLINKAS:=
-NEWLIBFILE:=
-RELEASABLES:=
-STATLIBDIR:=
-STDCPP_BUILD:=
-STDCPPTAGFILE:=
-UID1:=
-WIN32_LIBRARIES:=
-
-# FIVESPACES variable created to ensure that a suitable gap of space characters can
-# be placed between the separate arguments in the call to a tool (if required).
-# This is a workaround for a problem in Cygwin, where separate arguments are interpreted
-# as a single argument when passed to bash.
-FIVESPACES=$(BLANK)     $(BLANK)
-
-# CW runtime varies based on TARGETTYPE requirements, with wrapper FLMs dictating the choice
-# We override a CW-specific environment variable to do this, in common with ABLD
-ifeq ($(CW_STATIC_RUNTIME),1)
-  CW_RUNTIME:=$(CW_RUNTIME_STATIC)
-  CFLAGS:=$(CFLAGS) $(OPT.RUNTIME)staticmulti
-else
-  CW_RUNTIME:=$(CW_RUNTIME_NONSTATIC)
-  CFLAGS:=$(CFLAGS) $(OPT.RUNTIME)dllmulti
-endif
-MWSym2LibraryFiles:=$(subst $(CHAR_SPACE),$(DIRSEP),$(CW_RUNTIME) $(CW_DEFAULT_LIBS))
-ifneq ($(WIN32_LIBRARY),)
-  WIN32_HEADERS:=1
-  WIN32_LIBRARIES:=$(addprefix $(OPT.LIBFILE),$(WIN32_LIBRARY))
-endif
-
-# top-level definitions
-BINDIR:=$(RELEASEPATH)/$(FULLVARIANTPATH)
-
-# TARGETPATH and COPY_FOR_STATIC_LINKAGE only apply when TARGETPATH is a sub-directory of /sys/bin
-TARGETPATH_APPEND:=$(subst \,/,$(TARGETPATH))
-ifneq ($(findstring /sys/bin/,$(TARGETPATH_APPEND)),)
-  ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
-    BINDIRSTATICLINK:=$(BINDIR)
-  endif
-  BINDIR:=$(BINDIR)/z$(TARGETPATH_APPEND)
-else
-  COPY_FOR_STATIC_LINKAGE:=0
-endif
-
-BLDDIR:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
-LIBDIR:=$(RELEASEPATH)/$(LINKPATH)
-STATLIBDIR:=$(RELEASEPATH)/$(FULLVARIANTPATH)
-CREATABLEPATHS:=$(BLDDIR) $(BINDIR) $(BINDIRSTATICLINK)
-
-# Deduce whether we should be performing a build with standard CPP characteristics
-# This operates differently per-OS release, although OE TARGETTYPEs always build with standard CPP traits
-ifeq ($(OPEN_ENVIRONMENT),1)
-  STDCPP_BUILD:=1
-endif
-
-ifeq ($(SUPPORTS_STDCPP_NEWLIB),1)
-  ifeq ($(NOSTDCPP),1)
-    STDCPP_BUILD:=
-  else
-    ifeq ($(STDCPP),1)
-      STDCPP_BUILD:=1
-    endif
-  endif
-
-  ifneq ($(NEWLIB),)
-    NEWLIBFILE:=$(STATLIBDIR)/$(NEWLIB)
-  else
-    ifeq ($(SYSTEM_TARGET),1)
-      NEWLIBFILE:=$(STATLIBDIR)/$(DEFAULT_SYSTEM_NEWLIB)
-    else
-      NEWLIBFILE:=$(STATLIBDIR)/$(DEFAULT_NORMAL_NEWLIB)
-    endif
-  endif
-endif
-
-ifeq ($(STDCPP_BUILD),1)
-  CDEFS:=$(CDEFS) $(STDCPP_DEF)
-  SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(STDCPP_INCLUDE)
-  CFLAGS:=$(CFLAGS) $(OPT.WCHAR) on
-  CHECKLIB_TYPE:=$(OPT.CHECKLIB.STDCPP)
-  STDCPPTAGFILE:=$(OPT.LIBPATH)$(EPOCROOT)/epoc32/tools/tag $(OPT.SEARCH) tag_coff
-else
-  CFLAGS:=$(CFLAGS) $(OPT.WCHAR) off
-  CHECKLIB_TYPE:=$(OPT.CHECKLIB.SYMCPP)
-endif
-
-ifeq ($(WIN32_HEADERS),1)
-  CDEFS:=$(CDEFS) WIN32
-  CDEFS:=$(CDEFS) _WINDOWS
-  CFLAGS:=$(CFLAGS) $(OPT.STDINC)
-else
-  CFLAGS:=$(CFLAGS) $(OPT.NOSTDINC)
-endif
-
-# get the compiler to generate dependencies for us?
-ifeq ($(DEPEND_SKIP),)
-  CFLAGS:=$(CFLAGS) $(OPT.DEPEND)
-endif
-
-# specifics relating to the base type of the target being processed
-ifeq ($(BASE_TYPE),dll)
-  # Special case, although this should be dealt with in the wrapper FLM in a better way
-  ifeq ($(TARGETTYPE),exexp)
-    CDEFS:=$(CDEFS) __EXE__
-    ENTRYSYMBOL:=__E32Startup
-    LFLAGS:=$(LFLAGS) $(OPT.NOENTRY)
-    UID1:=1000007a
-  else
-    CDEFS:=$(CDEFS) __DLL__
-    ENTRYSYMBOL:=__E32Dll
-    LFLAGS:=$(LFLAGS) $(OPT.MAINENTRYPOINT)__Win32DllMain@12
-    UID1:=10000079
-  endif
-  LFLAGS:=$(LFLAGS) $(OPT.SHARED)
-
-  ifneq ($(BASEADDRESS),)
-    LFLAGS:=$(LFLAGS) $(OPT.IMAGEBASE)$(BASEADDRESS)
-  endif
-
-  ifeq ($(FIRST_STATLIB),)
-    BASE_TYPE_STATLIB:=edll.lib
-  else
-    BASE_TYPE_STATLIB:=$(FIRST_STATLIB)
-  endif
-endif
-ifeq ($(BASE_TYPE),exe)
-  CDEFS:=$(CDEFS) __EXE__
-  ENTRYSYMBOL:=?_E32Bootstrap@@YGXXZ
-  UID1:=1000007a
-
-  ifeq ($(FIRST_STATLIB),)
-    BASE_TYPE_STATLIB:=eexe.lib
-  else
-    BASE_TYPE_STATLIB:=$(FIRST_STATLIB)
-  endif
-endif
-
-ifeq ($(FIRSTLIB),)
-  LINKER_FIRSTSTATLIB:=$(BASE_TYPE_STATLIB)
-else
-  LINKER_FIRSTSTATLIB:=$(FIRSTLIB)
-endif
-
-
-BINTARGET:=$(BINDIR)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-
-
-# Run trace compiler #####################################
-TRACE_MARKER_PATH:=$(OUTPUTPATH)
-
-ifeq ($(UID3),)
-  ifeq ($(UID2),)
-    USE_TRACE_COMPILER:=
-  else
-    UID_TC:=$(UID2)
-  endif
-else
-  UID_TC:=$(UID3)
-endif
-
-# USE_TRACE_COMPILER defaults to blank in Raptor config.
-# Users can turn TC on by setting it to 1 in user config.
-ifneq ($(USE_TRACE_COMPILER),) 
-  include $(FLMHOME)/tracecompiler.mk
-endif
-
-
-####################
-## IMPORT LIBRARY ##
-####################
-
-IMPORTLIBLINKAS:=$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-# LINKAS, if supplied, only applies to IMPLIB TARGETTYPEs
-ifeq ($(BASE_TYPE),importlib)
-  ifneq ($(LINKAS),)
-    IMPORTLIBLINKAS:=$(LINKAS)
-  else
-    IMPORTLIBLINKAS:=$(TARGET).dll
-  endif
-endif
-
-ifneq ($(EXPORTLIBRARY),)
-  IMPORTLIBTARGET:=$(LIBDIR)/$(EXPORTLIBRARY).lib
-else
-  IMPORTLIBTARGET:=$(LIBDIR)/$(TARGET).lib
-endif
-
-# Regardless of whether a TARGETTYPE normally supports an import library, always attempt
-# to generate one if an explicit DEFFILE keyword was listed
-ifeq ($(DEFFILEKEYWORD),1)
-  SUPPORTS_IMPORT_LIBRARY:=1
-endif
-
-ifeq ($(SUPPORTS_IMPORT_LIBRARY),1)
-  ifneq ($(NOEXPORTLIBRARY),1)
-    ifneq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))),1)
-      CLEANTARGETS:=$(CLEANTARGETS) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
-      RELEASABLES:=$(RELEASABLES) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
-
-      # import libraries are generated to the UDEB release directory
-      ifneq ($(VARIANTTYPE),udeb)
-        CREATABLEPATHS:=$(CREATABLEPATHS) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(LIBDIR))
-      endif
-
-      ifneq ($(EXPORTUNFROZEN),)
-        # EXPORTUNFROZEN amounts to doing the stage-two link with the makedef generated temporary .def file but creating a .lib
-        # file as a side-effect of linking.  The import library is therefore dependent on the final binary in this instance.
-        $(info <warning project='$(PROJECT_META)' component='$(COMPONENT_META)'>EXPORTUNFROZEN present in $(PROJECT_META) - unfrozen exports will be represented in import library.</warning> )
-        $(IMPORTLIBTARGET): $(BINTARGET)
-        $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET)):=1)
-      else
-        ifneq ($(DEFFILE),)
-          # If a .def file physically exists (either explicitly via DEFFILE or implicitly in the correct place) then we
-          # generate an import library with reference to it
-          PREPPEDDEFFILE:=$(BLDDIR)/$(TARGET).prep.def
-          CLEANTARGETS:=$(CLEANTARGETS) $(PREPPEDDEFFILE)
-
-          define win32def2lib
-            $(IMPORTLIBTARGET): $(DEFFILE)
-	          $(call startrule,win32def2lib) \
-	          $(PREPDEF) "$(DEFFILE)" "$(PREPPEDDEFFILE)" && \
-	          $(LD) $(PREPPEDDEFFILE) $(OPT.IMPORTLIB) -o "$$@" $(OPT.ADDCOMMAND) "out:$(IMPORTLIBLINKAS)" $(OPT.WARNINGS) off \
-	          $(call endrule,win32def2lib)
-          endef
-          $(eval $(win32def2lib))
-          $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET)):=1)
-        endif
-      endif
-    endif
-  endif
-endif
-
-
-ifneq ($(BASE_TYPE),importlib)
-
-  #############
-  ## COMPILE ##
-  #############
-
-  ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
-    BINTARGETSTATICLINK:=$(BINDIRSTATICLINK)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-  endif
-
-  CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET) $(BINTARGETSTATICLINK)
-  RELEASABLES:=$(RELEASABLES) $(BINTARGET) $(BINTARGETSTATICLINK)
-
-  # work on a local source files list
-  SRCFILES:=$(SOURCE)
-  # and there may be more source for stage 2 in OE builds
-  SRCFILES_OE:=
-
-  ifneq ($(BASE_TYPE),staticlib)
-    # add the generated UID source file
-    GENSOURCE:=$(BLDDIR)/$(TARGET).UID.CPP
-    SRCFILES:=$(SRCFILES) $(GENSOURCE)
-
-    # the generated symbol lookup source file for Open Environment.
-    # this only gets linked in at stage 2
-    SYMSOURCE:=$(if $(OPEN_ENVIRONMENT),$(BLDDIR)/$(TARGET)_SYM_.cpp,)
-    SRCFILES_OE:=$(SYMSOURCE)
-
-    CLEANTARGETS:=$(CLEANTARGETS) $(GENSOURCE) $(SYMSOURCE)
-
-    ifeq ($(UID2),00000000)
-      ifneq ($(UID2_DEFAULT),)
-        UID2:=$(UID2_DEFAULT)
-      endif
-    endif
-
-    ifeq ($(SECUREID),)
-      SECUREID:=$(UID3)
-    endif
-
-    define win32generateUIDcpp
-      $(GENSOURCE): $(PROJECT_META)
-	    $(call startrule,win32generateUIDcpp,,) \
-	    echo "// SBS-generated uid source file" > $$@ && \
-	    echo "#include <e32cmn.h>" >> $$@ && \
-	    echo "#pragma data_seg(\".SYMBIAN\")" >> $$@ && \
-	    echo "__EMULATOR_IMAGE_HEADER2(0x$(UID1),0x$(UID2),0x$(UID3),EPriority$(EPOCPROCESSPRIORITY),0x$(CAPABILITYFLAG1),0x$(CAPABILITYFLAG2),0x$(SECUREID),0x$(VENDORID),0x$(VERSIONHEX),$(EPOCALLOWDLLDATA))" >> $$@ && \
-	    echo "#pragma data_seg()" >> $$@ \
-	    $(call endrule,win32generateUIDcpp)
-    endef
-    $(eval $(win32generateUIDcpp))
-  endif # neq $(BASE_TYPE),staticlib
-
-  # object files
-  OBJECTFILES:=$(patsubst %,$(BLDDIR)/%,$(addsuffix .o,$(basename $(notdir $(call allsuffixsubst,.cia .CIA .Cia,_.cia,$(SRCFILES))))))
-  OBJECTFILES:=$(patsubst %.UID.o,%_UID_.o,$(OBJECTFILES))
-
-  # object file extras for stage 2
-  OBJECTFILES_OE:=$(patsubst %,$(BLDDIR)/%,$(addsuffix .o,$(basename $(notdir $(SRCFILES_OE)))))
-
-  CLEANTARGETS:=$(CLEANTARGETS) $(OBJECTFILES) $(OBJECTFILES_OE)
-
-  # include paths and preinclude file
-  UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
-  SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
-  PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
-
-  #INCLUDES:=$(UINCLUDE) $(OPT.SPLITINCLUDE) $(SINCLUDE) $(PINCLUDE)
-  INCLUDES:=$(OPT.SPLITINCLUDE) $(UINCLUDE) $(SINCLUDE) $(PINCLUDE)
-
-  # macro definitions
-  DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(TARGET_MACRO))
-
-
-  # $(1) is the name of the source file, $(2) is the extension to map it to e.g. .o
-  # no space in front of function body
-  define mapwin32file
-    $(patsubst %.UID$(2),%_UID_$(2),$(BLDDIR)/$(addsuffix $2,$(basename $(notdir $(call allsuffixsubst,.cia .CIA .Cia,_.cia,$(1))))))
-  endef
-
-  # compile all source files, creating and including compiler generated dependency files along the way
-  # SED is used to (a) remove relatively pathed "object_file: source_file" references that can appear
-  # with some versions of mwccsym2 and (b) convert slashes
-  define win32compile2object
-
-    $(eval DEPENDFILENAME:=$(call mapwin32file,$(1),.o.d))
-    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-    $(call mapwin32file,$(1),.o): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER))
-	  $(call startrule,win32compile2object,,$(1)) \
-	  $(CC) $$(if $$(filter %.C,$(1)),-lang c) $(CFLAGS) $(OPTION_CW) \
-	  $(if $(STDCPP_BUILD),$$(if $$(filter %.c %.C,$(1)),,$$(call makemacrodef,$(OPT.DEFINE),$(STDCPP_WCHAR_DEF))),) \
-	  $(DEFINES) $(INCLUDES) $(OPT.OUT)"$$@" "$(1)" && \
-	  $(GNUSED) 's#\\\\\(.\)#/\1#g;s#/ #\\\ #g;s#\([A-Za-z]:\)\\\\#\1/#g;1,1s#.*: .* \(.\)\?$$$$#$(call mapwin32file,$(1),.o): $1 \1#' $(call mapwin32file,$(1),.dep) > $(call mapwin32file,$(1),.o.d) \
-	  $(call endrule,win32compile2object)
-
-    CLEANTARGETS:=$$(CLEANTARGETS) $(call mapwin32file,$(1),.dep)
-
-    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-    ifneq "$(DEPENDFILE)" ""
-    ifeq ($(NO_DEPEND_INCLUDE),)
-      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-        -include $(DEPENDFILE)
-      endif
-    endif
-    endif
-
-    # individual source file compilation
-    SOURCETARGET_$(call sanitise,$(1)): $(call mapwin32file,$(1),.o)
-
-  endef
-
-  # List target, depends on object file
-  define win32list
-  LISTING:: $(OBJECTFILES) $(OBJECTFILES_OE)
-	$(call startrule,win32listing) \
-	$(CC) $(OPT.LISTING) $(patsubst %.UID.o,%_UID_.o,$(BLDDIR)/$(addsuffix .o,$(basename $(notdir $(1))))) -o $(basename $1).WINSCW.lst \
-	$(call endrule,win32listing)
-  endef
-
-  $(foreach SRCFILE,$(SRCFILES) $(SRCFILES_OE),$(eval $(call win32compile2object,$(SRCFILE))))
-  $(foreach SRCFILE,$(SRCFILES) $(SRCFILES_OE),$(eval $(call win32list,$(SRCFILE))))
-
-  ######################
-  ## RESOURCE COMPILE ##
-  ######################
-
-  # If Python has been used to construct the environment on Windows then the standard MW include path environment
-  # variable will have been munged to UPPERCASE.
-  STDMWCINCLUDEPATHS:=$(if $(MWCSym2Includes),$(MWCSym2Includes),$(MWCSYM2INCLUDES))
-
-  define win32resourcecompile
-    # Note that two calls are made to the resource compiler here.  There seems to be no means to override the
-    # default behaviour of dumping dependency files into the CWD when using -MD.  So - we compile once for real,
-    # and then pipe dependency output through SED afterwards to create the dependency file where we want it
-
-    $(eval DEPENDFILENAME:=$(call mapwin32file,$(1),.res.d))
-    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
-
-    $(call mapwin32file,$(1),.res): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
-	  $(call startrule,win32resourcecompile,,$(1)) \
-	  MWCIncludes='$(STDMWCINCLUDEPATHS)' $(RC) $(OPT.OUT)"$$@" "$(1)" && \
-	  MWCIncludes='$(STDMWCINCLUDEPATHS)' $(RC) -make $(OPT.OUT)"$$@" "$(1)" | \
-	  $(GNUSED) 's#\\\\\(.\)#/\1#g;s#/ #\\\ #g;s#\([A-Za-z]:\)\\\\#\1/#g;1,1s#.*: .* \(.\)\?$$$$#$(call mapwin32file,$(1),.res): $1 \1#' > $(call mapwin32file,$(1),.res.d) \
-	  $(call endrule,win32resourcecompile)
-
-    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
-    ifneq "$(DEPENDFILE)" ""
-    ifeq ($(NO_DEPEND_INCLUDE),)
-      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
-        -include $(DEPENDFILE)
-      endif
-    endif
-    endif
-
-  endef
-
-  $(foreach WIN32RESOURCEFILE,$(WIN32_RESOURCE),$(eval $(call win32resourcecompile,$(WIN32RESOURCEFILE))))
-  OBJECTFILES:=$(OBJECTFILES) $(patsubst %,$(BLDDIR)/%,$(addsuffix .res,$(basename $(notdir $(WIN32_RESOURCE)))))
-
-  ##################
-  ## LINK/ARCHIVE ##
-  ##################
-
-  # libraries
-  STATICLIBS:=$(patsubst %,%.lib,$(STATICLIBRARY))
-  STATICLIBFILES:=$(patsubst %,$(STATLIBDIR)/%,$(STATICLIBS))
-  LINKER_FIRSTSTATLIBFILE:=$(STATLIBDIR)/$(LINKER_FIRSTSTATLIB)
-
-  ifeq ($(VARIANTTYPE),urel)
-    LINKLIBS:=$(patsubst %.dso,%.lib,$(LIBRARY))
-  else
-    LINKLIBS:=$(patsubst %.dso,%.lib,$(LIBRARY_DEBUG))
-  endif
-
-  LINKLIBFILES:=$(patsubst %,$(LIBDIR)/%,$(LINKLIBS))
-
-  MAP:=
-  ifneq ($(BASE_TYPE),staticlib)
-    ifneq ($(BASE_TYPE),importlib)
-      # link map file (urel only)
-      ifeq ($(VARIANTTYPE),urel)
-        MAP:=$(OPT.MAP)$(BINTARGET).map
-        CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET).map
-        RELEASABLES:=$(RELEASABLES) $(BINTARGET).map
-      endif
-    endif
-  endif
-
-  # all object files are listed in a response file to minimise the length of linker calls
-  OBJECTFILES_LRF:=$(BLDDIR)/$(TARGET)_$(VARIANTTYPE)_objects.lrf
-  CLEANTARGET:=$(CLEANTARGETS) $(OBJECTFILES_LRF)
-
-  define groupin10
-	$(if $1,@echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >> $(OBJECTFILES_LRF),)
-	$(if $1,$(call groupin10,$(wordlist 11,$(words $1),$1)),@true)
-  endef
-
-  #
-  # Archive
-  #
-  ifeq ($(BASE_TYPE),staticlib)
-    define win32archive
-      $(BINTARGET): $(OBJECTFILES)
-	    @echo "" > $(OBJECTFILES_LRF);
-		$(call groupin10,$(notdir $(OBJECTFILES))) ;
-	    $(call startrule,win32archive) \
-	    $(LD) $(OPT.STATICLIBRARY) $(LFLAGS) $(OPT.NOIMPLIB) $(WIN32_LIBRARIES) $(OPT.OUT)"$$@" $(STDCPPTAGFILE) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
-	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
-	    $(call endrule,win32archive)
-    endef
-    $(eval $(win32archive))
-  endif
-
-  ifneq ($(EPOCHEAPSIZEMIN_DEC_KB),)
-    LFLAGS:=$(LFLAGS) $(OPT.HEAPRESERVE)$(EPOCHEAPSIZEMAX_DEC_KB) $(OPT.HEAPCOMMIT)$(EPOCHEAPSIZEMIN_DEC_KB)
-  endif
-
-  #
-  # Simple link
-  #
-  ifeq ($(BASE_TYPE),exe)
-    define win32simplelink
-      $(BINTARGET).map: $(BINTARGET)
-
-      $(BINTARGET): $(OBJECTFILES) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(STATICLIBFILES) $(LINKLIBFILES)
-	    @echo "" > $(OBJECTFILES_LRF);
-		$(call groupin10,$(notdir $(OBJECTFILES))) ;
-	    $(call startrule,win32simplelink) \
-	    $(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(STATICLIBFILES),$(CHECKLIB) $(CHECKLIB_TYPE) $(OPT.CHECKLIB.WIN32) $(STATICLIBFILES) &&,),) \
-	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" $(LD) $(LFLAGS) $(OPT.MENTRYPOINT)$(ENTRYSYMBOL) $(MAP) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) $(OPT.OUT)"$$@" $(OPT.NOIMPLIB) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
-	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
-	    $(call endrule,win32simplelink)
-    endef
-    $(eval $(win32simplelink))
-  endif
-
-  #
-  # Two stage link
-  #
-  ifeq ($(BASE_TYPE),dll)
-    TMP_IMPLIB:=$(BLDDIR)/$(TARGET).lib
-    TMP_INFFILE:=$(BLDDIR)/$(TARGET).inf
-    TMP_SYMFILE:=$(if $(OPEN_ENVIRONMENT),$(BLDDIR)/$(TARGET).sym,)
-    TMP_TARGET:=$(BLDDIR)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
-    TMP_DEFFILE:=$(BLDDIR)/$(TARGET).def
-
-    CLEANTARGETS:=$(CLEANTARGETS) $(TMP_IMPLIB) $(TMP_INFFILE) $(TMP_TARGET) $(TMP_DEFFILE) $(TMP_SYMFILE)
-
-    MAKEDEF_ARGS:=-absent $(ENTRYSYMBOL) -Inffile  $(call dblquote,$(TMP_INFFILE)) $(NAME_LOOKUP)
-
-    ifeq ($(SYSTEM_TARGET),1)
-        MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -SystemTargetType
-    endif
-
-    ifneq ($(FIXED_EXPORT),)
-      # Fixed export TARGETTYPE, but with possibility of a .def file if explicitly specified and available
-      ifeq ($(DEFFILEKEYWORD),1)
-        ifneq ($(DEFFILE),)
-          MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -Frzfile $(call dblquote,$(DEFFILE))
-        endif
-      endif
-      MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -1 $(FIXED_EXPORT)
-    else
-      # Variable export TARGETTYPE with either deduced or explicitly specified .def file (if available)
-      ifneq ($(DEFFILE),)
-        MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -Frzfile $(call dblquote,$(DEFFILE))
-      endif
-    endif
-
-
-    ifneq ($(EXPORTSUNFROZEN),)
-    	LIBRARY: $(TMP_IMPLIB)
-    endif
-
-    define win32stageonelink
-      # Stage One
-      # Link by name, generating temporary main binary and import library.
-      $(TMP_IMPLIB): $(TMP_TARGET)
-
-      $(TMP_TARGET): $(OBJECTFILES) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(STATICLIBFILES) $(LINKLIBFILES)
-	    @echo "" > $(OBJECTFILES_LRF);
-		$(call groupin10,$(notdir $(OBJECTFILES))) ;
-	    $(call startrule,win32stageonelink) \
-	    $(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(STATICLIBFILES),$(CHECKLIB) $(CHECKLIB_TYPE) $(OPT.CHECKLIB.WIN32) $(STATICLIBFILES) &&,),) \
-	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" $(LD) $(LFLAGS) $(OPT.MENTRYPOINT)$(ENTRYSYMBOL) $(OPT.EXPORT)$(EXPORT_TYPE) $(OPT.NOCOMPACTIMPORTLIB) $(OPT.ADDCOMMAND) "out:$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))" $(OPT.WARNINGS) off $(OPT.IMPLIB)"$(TMP_IMPLIB)" $(OPT.OUT)"$(TMP_TARGET)" $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
-	    $(call endrule,win32stageonelink)
-    endef
-    $(eval $(win32stageonelink))
-
-    define win32processexports
-      # Process exports
-      # Generate a descriptive info file from the import library.
-      # Push info file through MAKEDEF to generated a valid .def file for link by ordinal.
-      $(TMP_DEFFILE): $(TMP_IMPLIB)
-	    $(call startrule,win32processexports) \
-	    $(LD) $(LFLAGS_INFGEN) $(OPT.OUT)"$(TMP_INFFILE)" "$(TMP_IMPLIB)" && \
-	    $(MAKEDEF) $(MAKEDEF_ARGS) "$$@" \
-	    $(call endrule,win32processexports)
-    endef
-    $(eval $(win32processexports))
-
-    ifeq ($(OPEN_ENVIRONMENT),1)
-      define win32processoeexports
-   	    # Process additional exports for Open Environment
-        # Generate a symbol file from the temporary DLL.
-        # Generate a C++ source file from the symbol file
-
-        $(TMP_SYMFILE): $(TMP_TARGET)
-	      $(call startrule,win32generatesymfile) \
-	      $(LD) $(LFLAGS_SYMGEN) $(OPT.OUT)"$(TMP_SYMFILE)" "$(TMP_TARGET)" \
-	      $(call endrule,win32generatesymfile)
-
-        $(SYMSOURCE): $(TMP_SYMFILE)
-	      $(call startrule,win32generatesymcpp) \
-	      $(SYMLOOKUPUTIL) $(OPT.OUT)"$(SYMSOURCE)" $(OPT.SYM)"$(TMP_SYMFILE)" $(SYMLOOKUPARGS) \
-	      $(call endrule,win32generatesymcpp)
-      endef
-      $(eval $(win32processoeexports))
-    endif
-
-    define win32stagetwolink
-      # Stage Two
-      # Link by ordinal, based on a previously MAKEDEF-generated temporary .def file
-      # Optionally create an import library if EXPORTUNFROZEN is specified
-      #
-      $(BINTARGET).map: $(BINTARGET)
-
-      $(BINTARGET): $(OBJECTFILES) $(OBJECTFILES_OE) $(LINKER_FIRSTSTATLIBFILE) $(STATICLIBFILES) $(NEWLIBFILE) $(LINKLIBFILES) $(TMP_DEFFILE)
-	    @echo "" > $(OBJECTFILES_LRF);
-		$(call groupin10,$(notdir $(OBJECTFILES) $(OBJECTFILES_OE))) ;
-	    $(call startrule,win32stagetwolink) \
-	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" \
-	    $(LD) $(LFLAGS) $(OPT.DEFFILE)$(TMP_DEFFILE) $(MAP) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) \
-	    $(OPT.OUT)"$$@" \
-	    $(if $(EXPORTUNFROZEN),$(OPT.IMPLIB)$(IMPORTLIBTARGET),$(OPT.NOIMPLIB)) \
-	    $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
-	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
-	    $(call endrule,win32stagetwolink)
-    endef
-    $(eval $(win32stagetwolink))
-
-    define win32copyforstaticlink
-      # Copy additonal binary to "traditional" output location (if required)
-      $(BINTARGETSTATICLINK): $(BINTARGET)
-	    $(call startrule,win32copyforstaticlink) \
-	    $(GNUCP) $$< $$@ \
-	    $(call endrule,win32copyforstaticlink)
-    endef
-    ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
-      $(eval $(win32copyforstaticlink))
-    endif
-
-    define e32freeze
-      # DLL-type targets that support import library generation support freezing of exports using EFREEZE
-      FREEZE:: $(1)
-	    $(call startrule,freeze,,$(RESOLVED_DEFFILE)) \
-	    $(EFREEZE) $(EFREEZE_REMOVE_OPTION) "$(RESOLVED_DEFFILE)" $(FIVESPACES) "$(2)" \
-	    $(call endrule,freeze)
-    endef
-    # Create only one freeze target per urel/udeb variant as the interface won't differ between them
-    # Only create a freeze target if the component supports import library generation
-    ifneq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))_FREEZE),1)
-      ifeq ($(SUPPORTS_IMPORT_LIBRARY),1)
-        $(eval $(call e32freeze,$(BINTARGET),$(TMP_DEFFILE)))
-        $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET))_FREEZE:=1)
-      endif
-    endif
-  endif
-endif # neq $(BASE_TYPE),importlib
-
-
-# Global targets
-.PHONY:: $(ALLTARGET)
-$(ALLTARGET):: $(RELEASABLES)
-TARGET:: $(RELEASABLES)
-
-ifeq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))),1)
-  LIBRARY:: $(IMPORTLIBTARGET)
-else
-  ifeq ($(BASE_TYPE),staticlib)
-    LIBRARY:: $(BINTARGET)
-  endif
-endif
-
-
-# Deal with test code batch files generation.
-ifneq ($(TESTPATH),)
-  EPOC_ROOT:=$(patsubst %/,%,$(EPOCROOT))
-  TOBLDINF:=$(dir $(subst :,,$(subst $(EPOC_ROOT)/,,$(COMPONENT_META))))
-
-
-  BATCHDIR:=$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/
-  $(eval $(call MakeTestBatchFiles,$(TARGET),$(BATCHDIR)$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)))
-  BATCHFILE_CREATED_$(BATCHDIR)$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH):=1
-  TARGET_CREATED_$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)_$(TARGET):=1
-  RELEASABLES:=$(RELEASABLES) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
-  CLEANTARGETS:=$(CLEANTARGETS) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
-endif
-
-# clean up
-$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
-# make the output directories while reading makefile - some build engines prefer this
-$(call makepath,$(CREATABLEPATHS))
-# for the abld -what target
-$(eval $(call whatmacro,$(RELEASABLES),WHATWINSCW))
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW EXE/DLL/IMPLIB/LIB Function Like Makefile (FLM)
+# Knows how to build all possible executables for the WINSCW emulator build
+#
+#
+
+# passed in values, stripped of whitespace
+COPY_FOR_STATIC_LINKAGE:=$(strip $(COPY_FOR_STATIC_LINKAGE))
+DEFFILE:=$(strip $(DEFFILE))
+DEFFILEKEYWORD:=$(strip $(DEFFILEKEYWORD))
+EPOCALLOWDLLDATA:=$(strip $(EPOCALLOWDLLDATA))
+EXPORTLIBRARY:=$(strip $(EXPORTLIBRARY))
+BASEADDRESS:=$(strip $(BASEADDRESS))
+LINKAS:=$(strip $(LINKAS))
+NOEXPORTLIBRARY:=$(strip $(NOEXPORTLIBRARY))
+SECUREID:=$(strip $(SECUREID))
+UID2:=$(strip $(UID2))
+UID3:=$(strip $(UID3))
+VENDORID:=$(strip $(VENDORID))
+VID:=$(strip $(VID))
+WIN32_HEADERS:=$(strip $(WIN32_HEADERS))
+
+# local variables
+BINDIR:=
+BINDIRSTATICLINK:=
+BINTARGET:=
+BINTARGETSTATICLINK:=
+BLDDIR:=
+CHECKLIB_TYPE:=
+CREATABLEPATHS:=
+CLEANTARGETS:=
+CW_RUNTIME:=
+ENTRYSYMBOL:=
+IMPORTLIBLINKAS:=
+IMPORTLIBTARGET:=
+LIBDIR:=
+LINKER_FIRSTSTATLIB:=
+MAINLINKAS:=
+NEWLIBFILE:=
+RELEASABLES:=
+STATLIBDIR:=
+STDCPP_BUILD:=
+STDCPPTAGFILE:=
+UID1:=
+WIN32_LIBRARIES:=
+
+# FIVESPACES variable created to ensure that a suitable gap of space characters can
+# be placed between the separate arguments in the call to a tool (if required).
+# This is a workaround for a problem in Cygwin, where separate arguments are interpreted
+# as a single argument when passed to bash.
+FIVESPACES=$(BLANK)     $(BLANK)
+
+# CW runtime varies based on TARGETTYPE requirements, with wrapper FLMs dictating the choice
+# We override a CW-specific environment variable to do this, in common with ABLD
+ifeq ($(CW_STATIC_RUNTIME),1)
+  CW_RUNTIME:=$(CW_RUNTIME_STATIC)
+  CFLAGS:=$(CFLAGS) $(OPT.RUNTIME)staticmulti
+else
+  CW_RUNTIME:=$(CW_RUNTIME_NONSTATIC)
+  CFLAGS:=$(CFLAGS) $(OPT.RUNTIME)dllmulti
+endif
+MWSym2LibraryFiles:=$(subst $(CHAR_SPACE),$(DIRSEP),$(CW_RUNTIME) $(CW_DEFAULT_LIBS))
+ifneq ($(WIN32_LIBRARY),)
+  WIN32_HEADERS:=1
+  WIN32_LIBRARIES:=$(addprefix $(OPT.LIBFILE),$(WIN32_LIBRARY))
+endif
+
+# top-level definitions
+BINDIR:=$(RELEASEPATH)/$(FULLVARIANTPATH)
+
+# TARGETPATH and COPY_FOR_STATIC_LINKAGE only apply when TARGETPATH is a sub-directory of /sys/bin
+TARGETPATH_APPEND:=$(subst \,/,$(TARGETPATH))
+ifneq ($(findstring /sys/bin/,$(TARGETPATH_APPEND)),)
+  ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
+    BINDIRSTATICLINK:=$(BINDIR)
+  endif
+  BINDIR:=$(BINDIR)/z$(TARGETPATH_APPEND)
+else
+  COPY_FOR_STATIC_LINKAGE:=0
+endif
+
+BLDDIR:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
+LIBDIR:=$(RELEASEPATH)/$(LINKPATH)
+STATLIBDIR:=$(RELEASEPATH)/$(FULLVARIANTPATH)
+CREATABLEPATHS:=$(BLDDIR) $(BINDIR) $(BINDIRSTATICLINK)
+
+# Deduce whether we should be performing a build with standard CPP characteristics
+# This operates differently per-OS release, although OE TARGETTYPEs always build with standard CPP traits
+ifeq ($(OPEN_ENVIRONMENT),1)
+  STDCPP_BUILD:=1
+endif
+
+ifeq ($(SUPPORTS_STDCPP_NEWLIB),1)
+  ifeq ($(NOSTDCPP),1)
+    STDCPP_BUILD:=
+  else
+    ifeq ($(STDCPP),1)
+      STDCPP_BUILD:=1
+    endif
+  endif
+
+  ifneq ($(NEWLIB),)
+    NEWLIBFILE:=$(STATLIBDIR)/$(NEWLIB)
+  else
+    ifeq ($(SYSTEM_TARGET),1)
+      NEWLIBFILE:=$(STATLIBDIR)/$(DEFAULT_SYSTEM_NEWLIB)
+    else
+      NEWLIBFILE:=$(STATLIBDIR)/$(DEFAULT_NORMAL_NEWLIB)
+    endif
+  endif
+endif
+
+ifeq ($(STDCPP_BUILD),1)
+  CDEFS:=$(CDEFS) $(STDCPP_DEF)
+  SYSTEMINCLUDE:=$(SYSTEMINCLUDE) $(STDCPP_INCLUDE)
+  CFLAGS:=$(CFLAGS) $(OPT.WCHAR) on
+  CHECKLIB_TYPE:=$(OPT.CHECKLIB.STDCPP)
+  STDCPPTAGFILE:=$(OPT.LIBPATH)$(EPOCROOT)/epoc32/tools/tag $(OPT.SEARCH) tag_coff
+else
+  CFLAGS:=$(CFLAGS) $(OPT.WCHAR) off
+  CHECKLIB_TYPE:=$(OPT.CHECKLIB.SYMCPP)
+endif
+
+ifeq ($(WIN32_HEADERS),1)
+  CDEFS:=$(CDEFS) WIN32
+  CDEFS:=$(CDEFS) _WINDOWS
+  CFLAGS:=$(CFLAGS) $(OPT.STDINC)
+else
+  CFLAGS:=$(CFLAGS) $(OPT.NOSTDINC)
+endif
+
+# get the compiler to generate dependencies for us?
+ifeq ($(DEPEND_SKIP),)
+  CFLAGS:=$(CFLAGS) $(OPT.DEPEND)
+endif
+
+# specifics relating to the base type of the target being processed
+ifeq ($(BASE_TYPE),dll)
+  # Special case, although this should be dealt with in the wrapper FLM in a better way
+  ifeq ($(TARGETTYPE),exexp)
+    CDEFS:=$(CDEFS) __EXE__
+    ENTRYSYMBOL:=__E32Startup
+    LFLAGS:=$(LFLAGS) $(OPT.NOENTRY)
+    UID1:=1000007a
+  else
+    CDEFS:=$(CDEFS) __DLL__
+    ENTRYSYMBOL:=__E32Dll
+    LFLAGS:=$(LFLAGS) $(OPT.MAINENTRYPOINT)__Win32DllMain@12
+    UID1:=10000079
+  endif
+  LFLAGS:=$(LFLAGS) $(OPT.SHARED)
+
+  ifneq ($(BASEADDRESS),)
+    LFLAGS:=$(LFLAGS) $(OPT.IMAGEBASE)$(BASEADDRESS)
+  endif
+
+  ifeq ($(FIRST_STATLIB),)
+    BASE_TYPE_STATLIB:=edll.lib
+  else
+    BASE_TYPE_STATLIB:=$(FIRST_STATLIB)
+  endif
+endif
+ifeq ($(BASE_TYPE),exe)
+  CDEFS:=$(CDEFS) __EXE__
+  ENTRYSYMBOL:=?_E32Bootstrap@@YGXXZ
+  UID1:=1000007a
+
+  ifeq ($(FIRST_STATLIB),)
+    BASE_TYPE_STATLIB:=eexe.lib
+  else
+    BASE_TYPE_STATLIB:=$(FIRST_STATLIB)
+  endif
+endif
+
+ifeq ($(FIRSTLIB),)
+  LINKER_FIRSTSTATLIB:=$(BASE_TYPE_STATLIB)
+else
+  LINKER_FIRSTSTATLIB:=$(FIRSTLIB)
+endif
+
+
+BINTARGET:=$(BINDIR)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+
+
+# Run trace compiler #####################################
+TRACE_MARKER_PATH:=$(OUTPUTPATH)
+
+ifeq ($(UID3),)
+  ifeq ($(UID2),)
+    USE_TRACE_COMPILER:=
+  else
+    UID_TC:=$(UID2)
+  endif
+else
+  UID_TC:=$(UID3)
+endif
+
+# USE_TRACE_COMPILER defaults to blank in Raptor config.
+# Users can turn TC on by setting it to 1 in user config.
+ifneq ($(USE_TRACE_COMPILER),) 
+  include $(FLMHOME)/tracecompiler.mk
+endif
+
+
+####################
+## IMPORT LIBRARY ##
+####################
+
+IMPORTLIBLINKAS:=$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+# LINKAS, if supplied, only applies to IMPLIB TARGETTYPEs
+ifeq ($(BASE_TYPE),importlib)
+  ifneq ($(LINKAS),)
+    IMPORTLIBLINKAS:=$(LINKAS)
+  else
+    IMPORTLIBLINKAS:=$(TARGET).dll
+  endif
+endif
+
+ifneq ($(EXPORTLIBRARY),)
+  IMPORTLIBTARGET:=$(LIBDIR)/$(EXPORTLIBRARY).lib
+else
+  IMPORTLIBTARGET:=$(LIBDIR)/$(TARGET).lib
+endif
+
+# Regardless of whether a TARGETTYPE normally supports an import library, always attempt
+# to generate one if an explicit DEFFILE keyword was listed
+ifeq ($(DEFFILEKEYWORD),1)
+  SUPPORTS_IMPORT_LIBRARY:=1
+endif
+
+ifeq ($(SUPPORTS_IMPORT_LIBRARY),1)
+  ifneq ($(NOEXPORTLIBRARY),1)
+    ifneq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))),1)
+      CLEANTARGETS:=$(CLEANTARGETS) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
+      RELEASABLES:=$(RELEASABLES) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(IMPORTLIBTARGET))
+
+      # import libraries are generated to the UDEB release directory
+      ifneq ($(VARIANTTYPE),udeb)
+        CREATABLEPATHS:=$(CREATABLEPATHS) $(if $(or $(EXPORTUNFROZEN),$(DEFFILE)),$(LIBDIR))
+      endif
+
+      ifneq ($(EXPORTUNFROZEN),)
+        # EXPORTUNFROZEN amounts to doing the stage-two link with the makedef generated temporary .def file but creating a .lib
+        # file as a side-effect of linking.  The import library is therefore dependent on the final binary in this instance.
+        $(info <warning project='$(PROJECT_META)' component='$(COMPONENT_META)'>EXPORTUNFROZEN present in $(PROJECT_META) - unfrozen exports will be represented in import library.</warning> )
+        $(IMPORTLIBTARGET): $(BINTARGET)
+        $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET)):=1)
+      else
+        ifneq ($(DEFFILE),)
+          # If a .def file physically exists (either explicitly via DEFFILE or implicitly in the correct place) then we
+          # generate an import library with reference to it
+          PREPPEDDEFFILE:=$(BLDDIR)/$(TARGET).prep.def
+          CLEANTARGETS:=$(CLEANTARGETS) $(PREPPEDDEFFILE)
+
+          define win32def2lib
+            $(IMPORTLIBTARGET): $(DEFFILE)
+	          $(call startrule,win32def2lib) \
+	          $(PREPDEF) "$(DEFFILE)" "$(PREPPEDDEFFILE)" && \
+	          $(LD) $(PREPPEDDEFFILE) $(OPT.IMPORTLIB) -o "$$@" $(OPT.ADDCOMMAND) "out:$(IMPORTLIBLINKAS)" $(OPT.WARNINGS) off \
+	          $(call endrule,win32def2lib)
+          endef
+          $(eval $(win32def2lib))
+          $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET)):=1)
+        endif
+      endif
+    endif
+  endif
+endif
+
+
+ifneq ($(BASE_TYPE),importlib)
+
+  #############
+  ## COMPILE ##
+  #############
+
+  ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
+    BINTARGETSTATICLINK:=$(BINDIRSTATICLINK)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+  endif
+
+  CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET) $(BINTARGETSTATICLINK)
+  RELEASABLES:=$(RELEASABLES) $(BINTARGET) $(BINTARGETSTATICLINK)
+
+  # work on a local source files list
+  SRCFILES:=$(SOURCE)
+  # and there may be more source for stage 2 in OE builds
+  SRCFILES_OE:=
+
+  ifneq ($(BASE_TYPE),staticlib)
+    # add the generated UID source file
+    GENSOURCE:=$(BLDDIR)/$(TARGET).UID.CPP
+    SRCFILES:=$(SRCFILES) $(GENSOURCE)
+
+    # the generated symbol lookup source file for Open Environment.
+    # this only gets linked in at stage 2
+    SYMSOURCE:=$(if $(OPEN_ENVIRONMENT),$(BLDDIR)/$(TARGET)_SYM_.cpp,)
+    SRCFILES_OE:=$(SYMSOURCE)
+
+    CLEANTARGETS:=$(CLEANTARGETS) $(GENSOURCE) $(SYMSOURCE)
+
+    ifeq ($(UID2),00000000)
+      ifneq ($(UID2_DEFAULT),)
+        UID2:=$(UID2_DEFAULT)
+      endif
+    endif
+
+    ifeq ($(SECUREID),)
+      SECUREID:=$(UID3)
+    endif
+
+    define win32generateUIDcpp
+      $(GENSOURCE): $(PROJECT_META)
+	    $(call startrule,win32generateUIDcpp,,) \
+	    echo "// SBS-generated uid source file" > $$@ && \
+	    echo "#include <e32cmn.h>" >> $$@ && \
+	    echo "#pragma data_seg(\".SYMBIAN\")" >> $$@ && \
+	    echo "__EMULATOR_IMAGE_HEADER2(0x$(UID1),0x$(UID2),0x$(UID3),EPriority$(EPOCPROCESSPRIORITY),0x$(CAPABILITYFLAG1),0x$(CAPABILITYFLAG2),0x$(SECUREID),0x$(VENDORID),0x$(VERSIONHEX),$(EPOCALLOWDLLDATA))" >> $$@ && \
+	    echo "#pragma data_seg()" >> $$@ \
+	    $(call endrule,win32generateUIDcpp)
+    endef
+    $(eval $(win32generateUIDcpp))
+  endif # neq $(BASE_TYPE),staticlib
+
+  # object files
+  OBJECTFILES:=$(patsubst %,$(BLDDIR)/%,$(addsuffix .o,$(basename $(notdir $(call allsuffixsubst,.cia .CIA .Cia,_.cia,$(SRCFILES))))))
+  OBJECTFILES:=$(patsubst %.UID.o,%_UID_.o,$(OBJECTFILES))
+
+  # object file extras for stage 2
+  OBJECTFILES_OE:=$(patsubst %,$(BLDDIR)/%,$(addsuffix .o,$(basename $(notdir $(SRCFILES_OE)))))
+
+  CLEANTARGETS:=$(CLEANTARGETS) $(OBJECTFILES) $(OBJECTFILES_OE)
+
+  # include paths and preinclude file
+  UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
+  SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
+  PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
+
+  #INCLUDES:=$(UINCLUDE) $(OPT.SPLITINCLUDE) $(SINCLUDE) $(PINCLUDE)
+  INCLUDES:=$(OPT.SPLITINCLUDE) $(UINCLUDE) $(SINCLUDE) $(PINCLUDE)
+
+  # macro definitions
+  DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(TARGET_MACRO))
+
+
+  # $(1) is the name of the source file, $(2) is the extension to map it to e.g. .o
+  # no space in front of function body
+  define mapwin32file
+    $(patsubst %.UID$(2),%_UID_$(2),$(BLDDIR)/$(addsuffix $2,$(basename $(notdir $(call allsuffixsubst,.cia .CIA .Cia,_.cia,$(1))))))
+  endef
+
+  # compile all source files, creating and including compiler generated dependency files along the way
+  # SED is used to (a) remove relatively pathed "object_file: source_file" references that can appear
+  # with some versions of mwccsym2 and (b) convert slashes
+  define win32compile2object
+
+    $(eval DEPENDFILENAME:=$(call mapwin32file,$(1),.o.d))
+    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+    $(call mapwin32file,$(1),.o): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT) $(if $(USE_TRACE_COMPILER),$(TRACE_MARKER))
+	  $(call startrule,win32compile2object,,$(1)) \
+	  $(CC) $$(if $$(filter %.C,$(1)),-lang c) $(CFLAGS) $(OPTION_CW) \
+	  $(if $(STDCPP_BUILD),$$(if $$(filter %.c %.C,$(1)),,$$(call makemacrodef,$(OPT.DEFINE),$(STDCPP_WCHAR_DEF))),) \
+	  $(DEFINES) $(INCLUDES) $(OPT.OUT)"$$@" "$(1)" && \
+	  $(GNUSED) 's#\\\\\(.\)#/\1#g;s#/ #\\\ #g;s#\([A-Za-z]:\)\\\\#\1/#g;1,1s#.*: .* \(.\)\?$$$$#$(call mapwin32file,$(1),.o): $1 \1#' $(call mapwin32file,$(1),.dep) > $(call mapwin32file,$(1),.o.d) \
+	  $(call endrule,win32compile2object)
+
+    CLEANTARGETS:=$$(CLEANTARGETS) $(call mapwin32file,$(1),.dep)
+
+    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+    ifneq "$(DEPENDFILE)" ""
+    ifeq ($(NO_DEPEND_INCLUDE),)
+      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+        -include $(DEPENDFILE)
+      endif
+    endif
+    endif
+
+    # individual source file compilation
+    SOURCETARGET_$(call sanitise,$(1)): $(call mapwin32file,$(1),.o)
+
+  endef
+
+  # List target, depends on object file
+  define win32list
+  LISTING:: $(OBJECTFILES) $(OBJECTFILES_OE)
+	$(call startrule,win32listing) \
+	$(CC) $(OPT.LISTING) $(patsubst %.UID.o,%_UID_.o,$(BLDDIR)/$(addsuffix .o,$(basename $(notdir $(1))))) -o $(basename $1).WINSCW.lst \
+	$(call endrule,win32listing)
+  endef
+
+  $(foreach SRCFILE,$(SRCFILES) $(SRCFILES_OE),$(eval $(call win32compile2object,$(SRCFILE))))
+  $(foreach SRCFILE,$(SRCFILES) $(SRCFILES_OE),$(eval $(call win32list,$(SRCFILE))))
+
+  ######################
+  ## RESOURCE COMPILE ##
+  ######################
+
+  # If Python has been used to construct the environment on Windows then the standard MW include path environment
+  # variable will have been munged to UPPERCASE.
+  STDMWCINCLUDEPATHS:=$(if $(MWCSym2Includes),$(MWCSym2Includes),$(MWCSYM2INCLUDES))
+
+  define win32resourcecompile
+    # Note that two calls are made to the resource compiler here.  There seems to be no means to override the
+    # default behaviour of dumping dependency files into the CWD when using -MD.  So - we compile once for real,
+    # and then pipe dependency output through SED afterwards to create the dependency file where we want it
+
+    $(eval DEPENDFILENAME:=$(call mapwin32file,$(1),.res.d))
+    $(eval DEPENDFILE:=$(wildcard $(DEPENDFILENAME)))
+
+    $(call mapwin32file,$(1),.res): $(1) $(PROJECT_META) $(if $(DEPENDFILE),,RESOURCE BITMAP EXPORT)
+	  $(call startrule,win32resourcecompile,,$(1)) \
+	  MWCIncludes='$(STDMWCINCLUDEPATHS)' $(RC) $(OPT.OUT)"$$@" "$(1)" && \
+	  MWCIncludes='$(STDMWCINCLUDEPATHS)' $(RC) -make $(OPT.OUT)"$$@" "$(1)" | \
+	  $(GNUSED) 's#\\\\\(.\)#/\1#g;s#/ #\\\ #g;s#\([A-Za-z]:\)\\\\#\1/#g;1,1s#.*: .* \(.\)\?$$$$#$(call mapwin32file,$(1),.res): $1 \1#' > $(call mapwin32file,$(1),.res.d) \
+	  $(call endrule,win32resourcecompile)
+
+    CLEANTARGETS:=$$(CLEANTARGETS) $(DEPENDFILENAME)
+    ifneq "$(DEPENDFILE)" ""
+    ifeq ($(NO_DEPEND_INCLUDE),)
+      ifeq "$(filter %CLEAN,$(call uppercase,$(MAKECMDGOALS)))" ""
+        -include $(DEPENDFILE)
+      endif
+    endif
+    endif
+
+  endef
+
+  $(foreach WIN32RESOURCEFILE,$(WIN32_RESOURCE),$(eval $(call win32resourcecompile,$(WIN32RESOURCEFILE))))
+  OBJECTFILES:=$(OBJECTFILES) $(patsubst %,$(BLDDIR)/%,$(addsuffix .res,$(basename $(notdir $(WIN32_RESOURCE)))))
+
+  ##################
+  ## LINK/ARCHIVE ##
+  ##################
+
+  # libraries
+  STATICLIBS:=$(patsubst %,%.lib,$(STATICLIBRARY))
+  STATICLIBFILES:=$(patsubst %,$(STATLIBDIR)/%,$(STATICLIBS))
+  LINKER_FIRSTSTATLIBFILE:=$(STATLIBDIR)/$(LINKER_FIRSTSTATLIB)
+
+  ifeq ($(VARIANTTYPE),urel)
+    LINKLIBS:=$(patsubst %.dso,%.lib,$(LIBRARY))
+  else
+    LINKLIBS:=$(patsubst %.dso,%.lib,$(LIBRARY_DEBUG))
+  endif
+
+  LINKLIBFILES:=$(patsubst %,$(LIBDIR)/%,$(LINKLIBS))
+
+  MAP:=
+  ifneq ($(BASE_TYPE),staticlib)
+    ifneq ($(BASE_TYPE),importlib)
+      # link map file (urel only)
+      ifeq ($(VARIANTTYPE),urel)
+        MAP:=$(OPT.MAP)$(BINTARGET).map
+        CLEANTARGETS:=$(CLEANTARGETS) $(BINTARGET).map
+        RELEASABLES:=$(RELEASABLES) $(BINTARGET).map
+      endif
+    endif
+  endif
+
+  # all object files are listed in a response file to minimise the length of linker calls
+  OBJECTFILES_LRF:=$(BLDDIR)/$(TARGET)_$(VARIANTTYPE)_objects.lrf
+  CLEANTARGET:=$(CLEANTARGETS) $(OBJECTFILES_LRF)
+
+  define groupin10
+	$(if $1,@echo -e $(foreach L,$(wordlist 1,10,$1),"$(L)\\n") >> $(OBJECTFILES_LRF),)
+	$(if $1,$(call groupin10,$(wordlist 11,$(words $1),$1)),@true)
+  endef
+
+  #
+  # Archive
+  #
+  ifeq ($(BASE_TYPE),staticlib)
+    define win32archive
+      $(BINTARGET): $(OBJECTFILES)
+	    @echo "" > $(OBJECTFILES_LRF);
+		$(call groupin10,$(notdir $(OBJECTFILES))) ;
+	    $(call startrule,win32archive) \
+	    $(LD) $(OPT.STATICLIBRARY) $(LFLAGS) $(OPT.NOIMPLIB) $(WIN32_LIBRARIES) $(OPT.OUT)"$$@" $(STDCPPTAGFILE) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
+	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
+	    $(call endrule,win32archive)
+    endef
+    $(eval $(win32archive))
+  endif
+
+  ifneq ($(EPOCHEAPSIZEMIN_DEC_KB),)
+    LFLAGS:=$(LFLAGS) $(OPT.HEAPRESERVE)$(EPOCHEAPSIZEMAX_DEC_KB) $(OPT.HEAPCOMMIT)$(EPOCHEAPSIZEMIN_DEC_KB)
+  endif
+
+  #
+  # Simple link
+  #
+  ifeq ($(BASE_TYPE),exe)
+    define win32simplelink
+      $(BINTARGET).map: $(BINTARGET)
+
+      $(BINTARGET): $(OBJECTFILES) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(STATICLIBFILES) $(LINKLIBFILES)
+	    @echo "" > $(OBJECTFILES_LRF);
+		$(call groupin10,$(notdir $(OBJECTFILES))) ;
+	    $(call startrule,win32simplelink) \
+	    $(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(STATICLIBFILES),$(CHECKLIB) $(CHECKLIB_TYPE) $(OPT.CHECKLIB.WIN32) $(STATICLIBFILES) &&,),) \
+	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" $(LD) $(LFLAGS) $(OPT.MENTRYPOINT)$(ENTRYSYMBOL) $(MAP) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) $(OPT.OUT)"$$@" $(OPT.NOIMPLIB) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
+	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
+	    $(call endrule,win32simplelink)
+    endef
+    $(eval $(win32simplelink))
+  endif
+
+  #
+  # Two stage link
+  #
+  ifeq ($(BASE_TYPE),dll)
+    TMP_IMPLIB:=$(BLDDIR)/$(TARGET).lib
+    TMP_INFFILE:=$(BLDDIR)/$(TARGET).inf
+    TMP_SYMFILE:=$(if $(OPEN_ENVIRONMENT),$(BLDDIR)/$(TARGET).sym,)
+    TMP_TARGET:=$(BLDDIR)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+    TMP_DEFFILE:=$(BLDDIR)/$(TARGET).def
+
+    CLEANTARGETS:=$(CLEANTARGETS) $(TMP_IMPLIB) $(TMP_INFFILE) $(TMP_TARGET) $(TMP_DEFFILE) $(TMP_SYMFILE)
+
+    MAKEDEF_ARGS:=-absent $(ENTRYSYMBOL) -Inffile  $(call dblquote,$(TMP_INFFILE)) $(NAME_LOOKUP)
+
+    ifeq ($(SYSTEM_TARGET),1)
+        MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -SystemTargetType
+    endif
+
+    ifneq ($(FIXED_EXPORT),)
+      # Fixed export TARGETTYPE, but with possibility of a .def file if explicitly specified and available
+      ifeq ($(DEFFILEKEYWORD),1)
+        ifneq ($(DEFFILE),)
+          MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -Frzfile $(call dblquote,$(DEFFILE))
+        endif
+      endif
+      MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -1 $(FIXED_EXPORT)
+    else
+      # Variable export TARGETTYPE with either deduced or explicitly specified .def file (if available)
+      ifneq ($(DEFFILE),)
+        MAKEDEF_ARGS:=$(MAKEDEF_ARGS) -Frzfile $(call dblquote,$(DEFFILE))
+      endif
+    endif
+
+
+    ifneq ($(EXPORTSUNFROZEN),)
+    	LIBRARY: $(TMP_IMPLIB)
+    endif
+
+    define win32stageonelink
+      # Stage One
+      # Link by name, generating temporary main binary and import library.
+      $(TMP_IMPLIB): $(TMP_TARGET)
+
+      $(TMP_TARGET): $(OBJECTFILES) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(STATICLIBFILES) $(LINKLIBFILES)
+	    @echo "" > $(OBJECTFILES_LRF);
+		$(call groupin10,$(notdir $(OBJECTFILES))) ;
+	    $(call startrule,win32stageonelink) \
+	    $(if $(SUPPORTS_STDCPP_NEWLIB),$(if $(STATICLIBFILES),$(CHECKLIB) $(CHECKLIB_TYPE) $(OPT.CHECKLIB.WIN32) $(STATICLIBFILES) &&,),) \
+	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" $(LD) $(LFLAGS) $(OPT.MENTRYPOINT)$(ENTRYSYMBOL) $(OPT.EXPORT)$(EXPORT_TYPE) $(OPT.NOCOMPACTIMPORTLIB) $(OPT.ADDCOMMAND) "out:$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))" $(OPT.WARNINGS) off $(OPT.IMPLIB)"$(TMP_IMPLIB)" $(OPT.OUT)"$(TMP_TARGET)" $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
+	    $(call endrule,win32stageonelink)
+    endef
+    $(eval $(win32stageonelink))
+
+    define win32processexports
+      # Process exports
+      # Generate a descriptive info file from the import library.
+      # Push info file through MAKEDEF to generated a valid .def file for link by ordinal.
+      $(TMP_DEFFILE): $(TMP_IMPLIB)
+	    $(call startrule,win32processexports) \
+	    $(LD) $(LFLAGS_INFGEN) $(OPT.OUT)"$(TMP_INFFILE)" "$(TMP_IMPLIB)" && \
+	    $(MAKEDEF) $(MAKEDEF_ARGS) "$$@" \
+	    $(call endrule,win32processexports)
+    endef
+    $(eval $(win32processexports))
+
+    ifeq ($(OPEN_ENVIRONMENT),1)
+      define win32processoeexports
+   	    # Process additional exports for Open Environment
+        # Generate a symbol file from the temporary DLL.
+        # Generate a C++ source file from the symbol file
+
+        $(TMP_SYMFILE): $(TMP_TARGET)
+	      $(call startrule,win32generatesymfile) \
+	      $(LD) $(LFLAGS_SYMGEN) $(OPT.OUT)"$(TMP_SYMFILE)" "$(TMP_TARGET)" \
+	      $(call endrule,win32generatesymfile)
+
+        $(SYMSOURCE): $(TMP_SYMFILE)
+	      $(call startrule,win32generatesymcpp) \
+	      $(SYMLOOKUPUTIL) $(OPT.OUT)"$(SYMSOURCE)" $(OPT.SYM)"$(TMP_SYMFILE)" $(SYMLOOKUPARGS) \
+	      $(call endrule,win32generatesymcpp)
+      endef
+      $(eval $(win32processoeexports))
+    endif
+
+    define win32stagetwolink
+      # Stage Two
+      # Link by ordinal, based on a previously MAKEDEF-generated temporary .def file
+      # Optionally create an import library if EXPORTUNFROZEN is specified
+      #
+      $(BINTARGET).map: $(BINTARGET)
+
+      $(BINTARGET): $(OBJECTFILES) $(OBJECTFILES_OE) $(LINKER_FIRSTSTATLIBFILE) $(STATICLIBFILES) $(NEWLIBFILE) $(LINKLIBFILES) $(TMP_DEFFILE)
+	    @echo "" > $(OBJECTFILES_LRF);
+		$(call groupin10,$(notdir $(OBJECTFILES) $(OBJECTFILES_OE))) ;
+	    $(call startrule,win32stagetwolink) \
+	    MWSym2LibraryFiles="$(MWSym2LibraryFiles)" \
+	    $(LD) $(LFLAGS) $(OPT.DEFFILE)$(TMP_DEFFILE) $(MAP) $(LINKER_FIRSTSTATLIBFILE) $(NEWLIBFILE) $(WIN32_LIBRARIES) $(STATICLIBFILES) $(LINKLIBFILES) \
+	    $(OPT.OUT)"$$@" \
+	    $(if $(EXPORTUNFROZEN),$(OPT.IMPLIB)$(IMPORTLIBTARGET),$(OPT.NOIMPLIB)) \
+	    $(OPT.LIBPATH)$(BLDDIR) $(OPT.SEARCH) @$(OBJECTFILES_LRF) \
+	    $(if $(SAVESPACE),; $(GNURM) -rf $(BLDDIR); true,) \
+	    $(call endrule,win32stagetwolink)
+    endef
+    $(eval $(win32stagetwolink))
+
+    define win32copyforstaticlink
+      # Copy additonal binary to "traditional" output location (if required)
+      $(BINTARGETSTATICLINK): $(BINTARGET)
+	    $(call startrule,win32copyforstaticlink) \
+	    $(GNUCP) $$< $$@ \
+	    $(call endrule,win32copyforstaticlink)
+    endef
+    ifeq ($(COPY_FOR_STATIC_LINKAGE),1)
+      $(eval $(win32copyforstaticlink))
+    endif
+
+    define e32freeze
+      # DLL-type targets that support import library generation support freezing of exports using EFREEZE
+      FREEZE:: $(1)
+	    $(call startrule,freeze,,$(RESOLVED_DEFFILE)) \
+	    $(EFREEZE) $(EFREEZE_REMOVE_OPTION) "$(RESOLVED_DEFFILE)" $(FIVESPACES) "$(2)" \
+	    $(call endrule,freeze)
+    endef
+    # Create only one freeze target per urel/udeb variant as the interface won't differ between them
+    # Only create a freeze target if the component supports import library generation
+    ifneq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))_FREEZE),1)
+      ifeq ($(SUPPORTS_IMPORT_LIBRARY),1)
+        $(eval $(call e32freeze,$(BINTARGET),$(TMP_DEFFILE)))
+        $(eval TARGET_$(call sanitise,$(IMPORTLIBTARGET))_FREEZE:=1)
+      endif
+    endif
+  endif
+endif # neq $(BASE_TYPE),importlib
+
+
+# Global targets
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(RELEASABLES)
+TARGET:: $(RELEASABLES)
+
+ifeq ($(TARGET_$(call sanitise,$(IMPORTLIBTARGET))),1)
+  LIBRARY:: $(IMPORTLIBTARGET)
+else
+  ifeq ($(BASE_TYPE),staticlib)
+    LIBRARY:: $(BINTARGET)
+  endif
+endif
+
+
+# Deal with test code batch files generation.
+ifneq ($(TESTPATH),)
+  EPOC_ROOT:=$(patsubst %/,%,$(EPOCROOT))
+  TOBLDINF:=$(dir $(subst :,,$(subst $(EPOC_ROOT)/,,$(COMPONENT_META))))
+
+
+  BATCHDIR:=$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/
+  $(eval $(call MakeTestBatchFiles,$(TARGET),$(BATCHDIR)$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)))
+  BATCHFILE_CREATED_$(BATCHDIR)$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH):=1
+  TARGET_CREATED_$(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)_$(TARGET):=1
+  RELEASABLES:=$(RELEASABLES) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
+  CLEANTARGETS:=$(CLEANTARGETS) $(EPOCROOT)/epoc32/release/$(VARIANTPLATFORM)/$(VARIANTTYPE)/z/test/$(MODULE)/$(VARIANTPLATFORM).$(TESTPATH)
+endif
+
+# clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),$(CREATABLEPATHS),))
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(CREATABLEPATHS))
+# for the abld -what target
+$(eval $(call whatmacro,$(RELEASABLES),WHATWINSCW))
--- a/sbsv2/raptor/lib/flm/win32ani.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32ani.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW ANI Function Like Makefile (FLM)
-# Build an emulator ANI
-# 
-#
-
-ifeq ($(TARGETTYPE),ani)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=?CreateCAnimDllL@@YAPAVCAnimDll@@XZ
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=10003b22
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32ani.flm called with wrong TARGETTYPE (should be 'ani' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW ANI Function Like Makefile (FLM)
+# Build an emulator ANI
+# 
+#
+
+ifeq ($(TARGETTYPE),ani)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=?CreateCAnimDllL@@YAPAVCAnimDll@@XZ
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=10003b22
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32ani.flm called with wrong TARGETTYPE (should be 'ani' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32bitmap.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32bitmap.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,22 +1,22 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
-# for win32 builds.
-# 
-#
-
-BINCOPYDIRS:=$(EPOCROOT)/epoc32/release/winscw/udeb $(EPOCROOT)/epoc32/release/winscw/urel
-
-# Main (and mostly generic) resource building FLM
-include $(FLMHOME)/bitmap.flm
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
+# for win32 builds.
+# 
+#
+
+BINCOPYDIRS:=$(EPOCROOT)/epoc32/release/winscw/udeb $(EPOCROOT)/epoc32/release/winscw/urel
+
+# Main (and mostly generic) resource building FLM
+include $(FLMHOME)/bitmap.flm
--- a/sbsv2/raptor/lib/flm/win32dll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32dll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW DLL Function Like Makefile (FLM)
-# Build an emulator DLL
-# 
-#
-
-ifeq ($(TARGETTYPE),dll)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW DLL Function Like Makefile (FLM)
+# Build an emulator DLL
+# 
+#
+
+ifeq ($(TARGETTYPE),dll)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32exe.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32exe.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW EXE Function Like Makefile (FLM)
-# Build an emulator EXE
-# 
-#
-
-ifeq ($(TARGETTYPE),exe)
-
-BASE_TYPE:=exe
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32exe.flm called with wrong TARGETTYPE (should be 'exe' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW EXE Function Like Makefile (FLM)
+# Build an emulator EXE
+# 
+#
+
+ifeq ($(TARGETTYPE),exe)
+
+BASE_TYPE:=exe
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32exe.flm called with wrong TARGETTYPE (should be 'exe' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32exexp.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32exexp.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW EXEXP Function Like Makefile (FLM)
-# Build an emulator EXEXP
-# 
-#
-
-ifeq ($(TARGETTYPE),exexp)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=eexe.lib
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32exexp.flm called with wrong TARGETTYPE (should be 'exexp' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW EXEXP Function Like Makefile (FLM)
+# Build an emulator EXEXP
+# 
+#
+
+ifeq ($(TARGETTYPE),exexp)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=eexe.lib
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32exexp.flm called with wrong TARGETTYPE (should be 'exexp' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32fsy.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32fsy.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW FSY Function Like Makefile (FLM)
-# Build an emulator FSY
-# 
-#
-
-ifeq ($(TARGETTYPE),fsy)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=CreateFileSystem
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=100039df
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32fsy.flm called with wrong TARGETTYPE (should be 'fsy' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW FSY Function Like Makefile (FLM)
+# Build an emulator FSY
+# 
+#
+
+ifeq ($(TARGETTYPE),fsy)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=CreateFileSystem
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=100039df
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32fsy.flm called with wrong TARGETTYPE (should be 'fsy' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32implib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32implib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,31 +1,31 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW IMPLIB Function Like Makefile (FLM)
-# Build an emulator IMPLIB
-# 
-#
-
-ifeq ($(TARGETTYPE),implib)
-
-BASE_TYPE:=importlib
-CW_STATIC_RUNTIME:=0
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32implib.flm called with wrong TARGETTYPE (should be 'implib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW IMPLIB Function Like Makefile (FLM)
+# Build an emulator IMPLIB
+# 
+#
+
+ifeq ($(TARGETTYPE),implib)
+
+BASE_TYPE:=importlib
+CW_STATIC_RUNTIME:=0
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32implib.flm called with wrong TARGETTYPE (should be 'implib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32kdll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32kdll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW KDLL Function Like Makefile (FLM)
-# Build an emulator KDLL
-# 
-#
-
-ifeq ($(TARGETTYPE),kdll)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=ekll.lib
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=1
-UID2_DEFAULT:=
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32kdll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW KDLL Function Like Makefile (FLM)
+# Build an emulator KDLL
+# 
+#
+
+ifeq ($(TARGETTYPE),kdll)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=ekll.lib
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=1
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32kdll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32kext.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32kext.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW KEXT Function Like Makefile (FLM)
-# Build an emulator KEXT
-# 
-#
-
-ifeq ($(TARGETTYPE),kext)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=eext.lib
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=1
-UID2_DEFAULT:=
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32kext.flm called with wrong TARGETTYPE (should be 'kext' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW KEXT Function Like Makefile (FLM)
+# Build an emulator KEXT
+# 
+#
+
+ifeq ($(TARGETTYPE),kext)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=eext.lib
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=1
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32kext.flm called with wrong TARGETTYPE (should be 'kext' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32klib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32klib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW KLIB Function Like Makefile (FLM)
-# Build an emulator KLIB
-# 
-#
-
-ifeq ($(TARGETTYPE),klib)
-
-BASE_TYPE:=staticlib
-CW_STATIC_RUNTIME:=1
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=1
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32klib.flm called with wrong TARGETTYPE (should be 'klib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW KLIB Function Like Makefile (FLM)
+# Build an emulator KLIB
+# 
+#
+
+ifeq ($(TARGETTYPE),klib)
+
+BASE_TYPE:=staticlib
+CW_STATIC_RUNTIME:=1
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=1
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32klib.flm called with wrong TARGETTYPE (should be 'klib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32ldd.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32ldd.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW LDD Function Like Makefile (FLM)
-# Build an emulator LDD
-# 
-#
-
-ifeq ($(TARGETTYPE),ldd)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=edev.lib
-FIXED_EXPORT:=?CreateLogicalDevice@@YAPAVDLogicalDevice@@XZ
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=1
-UID2_DEFAULT:=100000af
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32ldd.flm called with wrong TARGETTYPE (should be 'ldd' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW LDD Function Like Makefile (FLM)
+# Build an emulator LDD
+# 
+#
+
+ifeq ($(TARGETTYPE),ldd)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=edev.lib
+FIXED_EXPORT:=?CreateLogicalDevice@@YAPAVDLogicalDevice@@XZ
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=1
+UID2_DEFAULT:=100000af
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32ldd.flm called with wrong TARGETTYPE (should be 'ldd' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32lib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32lib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,31 +1,31 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW Static Library Function Like Makefile (FLM)
-# Build an emulator LIB
-# 
-#
-
-ifeq ($(TARGETTYPE),lib)
-
-BASE_TYPE:=staticlib
-CW_STATIC_RUNTIME:=1
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=0
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32lib.flm called with wrong TARGETTYPE (should be 'lib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW Static Library Function Like Makefile (FLM)
+# Build an emulator LIB
+# 
+#
+
+ifeq ($(TARGETTYPE),lib)
+
+BASE_TYPE:=staticlib
+CW_STATIC_RUNTIME:=1
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=0
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32lib.flm called with wrong TARGETTYPE (should be 'lib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32pdd.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32pdd.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW PDD Function Like Makefile (FLM)
-# Build an emulator PDD
-# 
-#
-
-ifeq ($(TARGETTYPE),pdd)
-
-BASE_TYPE=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=edev.lib
-FIXED_EXPORT:=?CreatePhysicalDevice@@YAPAVDPhysicalDevice@@XZ
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=1
-UID2_DEFAULT:=100039d0
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32pdd.flm called with wrong TARGETTYPE (should be 'pdd' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW PDD Function Like Makefile (FLM)
+# Build an emulator PDD
+# 
+#
+
+ifeq ($(TARGETTYPE),pdd)
+
+BASE_TYPE=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=edev.lib
+FIXED_EXPORT:=?CreatePhysicalDevice@@YAPAVDPhysicalDevice@@XZ
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=1
+UID2_DEFAULT:=100039d0
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32pdd.flm called with wrong TARGETTYPE (should be 'pdd' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32pdl.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32pdl.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW PDL Function Like Makefile (FLM)
-# Build an emulator PDL
-# 
-#
-
-ifeq ($(TARGETTYPE),pdl)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=?NewPrinterDeviceL@@YAPAVCPrinterDevice@@XZ
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=10003b1c
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32pdl.flm called with wrong TARGETTYPE (should be 'pdl' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW PDL Function Like Makefile (FLM)
+# Build an emulator PDL
+# 
+#
+
+ifeq ($(TARGETTYPE),pdl)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=?NewPrinterDeviceL@@YAPAVCPrinterDevice@@XZ
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=10003b1c
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32pdl.flm called with wrong TARGETTYPE (should be 'pdl' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32plugin.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32plugin.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW PLUGIN Function Like Makefile (FLM)
-# Build an emulator PLUGIN
-# 
-#
-
-ifeq ($(TARGETTYPE),plugin)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-FIXED_EXPORT:=?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=10009D8D
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32plugin.flm called with wrong TARGETTYPE (should be 'plugin' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW PLUGIN Function Like Makefile (FLM)
+# Build an emulator PLUGIN
+# 
+#
+
+ifeq ($(TARGETTYPE),plugin)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=10009D8D
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32plugin.flm called with wrong TARGETTYPE (should be 'plugin' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32resource.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32resource.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,25 +1,25 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
-# for win32 builds.
-# 
-#
-
-BINCOPYDIRS:=$(EPOCROOT)/epoc32/release/winscw/udeb $(EPOCROOT)/epoc32/release/winscw/urel
-
-# Main (and mostly generic) resource building FLM
-include $(FLMHOME)/resource.flm
-
-# Reset so there it's impossible for it to influence subsequent calls:
-BINCOPYDIRS:=
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Thin Function Like Makefile (FLM) wrapper to general resource building FLM
+# for win32 builds.
+# 
+#
+
+BINCOPYDIRS:=$(EPOCROOT)/epoc32/release/winscw/udeb $(EPOCROOT)/epoc32/release/winscw/urel
+
+# Main (and mostly generic) resource building FLM
+include $(FLMHOME)/resource.flm
+
+# Reset so there it's impossible for it to influence subsequent calls:
+BINCOPYDIRS:=
--- a/sbsv2/raptor/lib/flm/win32stddll.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32stddll.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,40 +1,40 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW Standard DLL Function Like Makefile (FLM)
-# Build an emulator STDDLL
-# 
-#
-
-ifeq ($(TARGETTYPE),stddll)
-
-BASE_TYPE:=dll
-CFLAGS:=$(subst -inline off,,$(CFLAGS))
-CW_STATIC_RUNTIME:=0
-EXPORT_TYPE:=all
-FIRST_STATLIB:=
-FIXED_EXPORT:=
-LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
-LIBRARY:=$(LIBRARY) euser.lib backend.lib
-NAME_LOOKUP:=-sym_name_lkup -export_entrypoint_E32Dll
-OPEN_ENVIRONMENT:=1
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=20004C45
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32stddll.flm called with wrong TARGETTYPE (should be 'stddll' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW Standard DLL Function Like Makefile (FLM)
+# Build an emulator STDDLL
+# 
+#
+
+ifeq ($(TARGETTYPE),stddll)
+
+BASE_TYPE:=dll
+CFLAGS:=$(subst -inline off,,$(CFLAGS))
+CW_STATIC_RUNTIME:=0
+EXPORT_TYPE:=all
+FIRST_STATLIB:=
+FIXED_EXPORT:=
+LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
+LIBRARY:=$(LIBRARY) euser.lib backend.lib
+NAME_LOOKUP:=-sym_name_lkup -export_entrypoint_E32Dll
+OPEN_ENVIRONMENT:=1
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=20004C45
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32stddll.flm called with wrong TARGETTYPE (should be 'stddll' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32stdexe.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32stdexe.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,46 +1,46 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW Standard EXE Function Like Makefile (FLM)
-# Build an emulator STDEXE
-# 
-#
-
-ifeq ($(TARGETTYPE),stdexe)
-
-BASE_TYPE:=exe
-CFLAGS:=$(subst -inline off,,$(CFLAGS))
-CW_STATIC_RUNTIME:=0
-EXPORT_TYPE:=all
-FIRST_STATLIB:=
-FIXED_EXPORT:=
-LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
-LIBRARY:=$(LIBRARY) euser.lib backend.lib
-  
-ifeq ($(WCHARENTRYPOINT),)
-  LIBRARY:=$(LIBRARY) libcrt0.lib
-else
-  LIBRARY:=$(LIBRARY) libwcrt0.lib
-endif
-  
-OPEN_ENVIRONMENT:=1
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=20004C45
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32stdexe.flm called with wrong TARGETTYPE (should be 'stdexe' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW Standard EXE Function Like Makefile (FLM)
+# Build an emulator STDEXE
+# 
+#
+
+ifeq ($(TARGETTYPE),stdexe)
+
+BASE_TYPE:=exe
+CFLAGS:=$(subst -inline off,,$(CFLAGS))
+CW_STATIC_RUNTIME:=0
+EXPORT_TYPE:=all
+FIRST_STATLIB:=
+FIXED_EXPORT:=
+LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
+LIBRARY:=$(LIBRARY) euser.lib backend.lib
+  
+ifeq ($(WCHARENTRYPOINT),)
+  LIBRARY:=$(LIBRARY) libcrt0.lib
+else
+  LIBRARY:=$(LIBRARY) libwcrt0.lib
+endif
+  
+OPEN_ENVIRONMENT:=1
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=20004C45
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32stdexe.flm called with wrong TARGETTYPE (should be 'stdexe' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32stdlib.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32stdlib.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,35 +1,35 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# win32lib.flm
-# WINSCW Standard Static Library Function Like Makefile (FLM)
-# Build an emulator STDLIB
-# 
-#
-
-ifeq ($(TARGETTYPE),stdlib)
-
-BASE_TYPE:=staticlib
-CW_STATIC_RUNTIME:=0
-FIXED_EXPORT:=
-LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
-OPEN_ENVIRONMENT:=1
-
-SUPPORTS_IMPORT_LIBRARY:=0
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32stdlib.flm called with wrong TARGETTYPE (should be 'stdlib' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# win32lib.flm
+# WINSCW Standard Static Library Function Like Makefile (FLM)
+# Build an emulator STDLIB
+# 
+#
+
+ifeq ($(TARGETTYPE),stdlib)
+
+BASE_TYPE:=staticlib
+CW_STATIC_RUNTIME:=0
+FIXED_EXPORT:=
+LFLAGS:=$(subst -nostdlib,-stdlib,$(LFLAGS))
+OPEN_ENVIRONMENT:=1
+
+SUPPORTS_IMPORT_LIBRARY:=0
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32stdlib.flm called with wrong TARGETTYPE (should be 'stdlib' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32textnotifier2.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32textnotifier2.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,35 +1,35 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW TEXTNOTIFIER2 Function Like Makefile (FLM)
-# Build an emulator TEXTNOTIFIER2
-# 
-#
-
-ifeq ($(TARGETTYPE),textnotifier2)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=
-# Actual export is ?NotifierArray@@YAPAV?$CArrayPtr@VMNotifierBase2@@@@XZ
-FIXED_EXPORT:=?NotifierArray@@YAPAV?\$$$$CArrayPtr@VMNotifierBase2@@@@XZ
-SUPPORTS_IMPORT_LIBRARY:=0
-SYSTEM_TARGET:=0
-UID2_DEFAULT:=101fe38b
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32textnotifier2.flm called with wrong TARGETTYPE (should be 'textnotifier2' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW TEXTNOTIFIER2 Function Like Makefile (FLM)
+# Build an emulator TEXTNOTIFIER2
+# 
+#
+
+ifeq ($(TARGETTYPE),textnotifier2)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+# Actual export is ?NotifierArray@@YAPAV?$CArrayPtr@VMNotifierBase2@@@@XZ
+FIXED_EXPORT:=?NotifierArray@@YAPAV?\$$$$CArrayPtr@VMNotifierBase2@@@@XZ
+SUPPORTS_IMPORT_LIBRARY:=0
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=101fe38b
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32textnotifier2.flm called with wrong TARGETTYPE (should be 'textnotifier2' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32var.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32var.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,33 +1,33 @@
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW VAR Function Like Makefile (FLM)
-# Build an emulator VAR
-# 
-#
-
-ifeq ($(TARGETTYPE),var)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=evar.lib
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=1
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32var.flm called with wrong TARGETTYPE (should be 'var' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW VAR Function Like Makefile (FLM)
+# Build an emulator VAR
+# 
+#
+
+ifeq ($(TARGETTYPE),var)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=evar.lib
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=1
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32var.flm called with wrong TARGETTYPE (should be 'var' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/lib/flm/win32var2.flm	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/lib/flm/win32var2.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -1,33 +1,33 @@
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# WINSCW VAR Function Like Makefile (FLM)
-# Build an emulator VAR (version 2)
-# 
-#
-
-ifeq ($(TARGETTYPE),var2)
-
-BASE_TYPE:=dll
-CW_STATIC_RUNTIME:=1
-FIRST_STATLIB:=evar.lib
-FIXED_EXPORT:=
-SUPPORTS_IMPORT_LIBRARY:=1
-SYSTEM_TARGET:=1
-
-# Use the general win32 FLM 
-include $(FLMHOME)/win32.flm
-
-else
-$(error $win32var2.flm called with wrong TARGETTYPE (should be 'var2' but is '$(TARGETTYPE)'))
-endif
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW VAR Function Like Makefile (FLM)
+# Build an emulator VAR (version 2)
+# 
+#
+
+ifeq ($(TARGETTYPE),var2)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=evar.lib
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=1
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $win32var2.flm called with wrong TARGETTYPE (should be 'var2' but is '$(TARGETTYPE)'))
+endif
--- a/sbsv2/raptor/linux-i386/bin/bashbug	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/linux-i386/bin/bashbug	Mon Nov 16 09:46:46 2009 +0000
@@ -1,272 +1,272 @@
-#!/bin/sh -
-#
-# bashbug - create a bug report and mail it to the bug address
-#
-# The bug address depends on the release status of the shell.  Versions
-# with status `devel', `alpha', `beta', or `rc' mail bug reports to
-# chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
-# Other versions send mail to bug-bash@gnu.org.
-#
-# Copyright (C) 1996-2004 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
-
-#
-# configuration section:
-#	these variables are filled in by the make target in Makefile
-#
-MACHINE="i686"
-OS="linux-gnu"
-CC="gcc"
-CFLAGS=" -DPROGRAM='bash' -DCONF_HOSTTYPE='i686' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i686-pc-linux-gnu' -DCONF_VENDOR='pc' -DLOCALEDIR='/opt/symbian/linux-i386/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -O2 -mtune=i686 -s"
-RELEASE="3.2"
-PATCHLEVEL="39"
-RELSTATUS="release"
-MACHTYPE="i686-pc-linux-gnu"
-
-PATH=/bin:/usr/bin:/usr/local/bin:$PATH
-export PATH
-
-# Check if TMPDIR is set, default to /tmp
-: ${TMPDIR:=/tmp}
-
-#Securely create a temporary directory for the temporary files
-TEMPDIR=$TMPDIR/bbug.$$
-(umask 077 && mkdir $TEMPDIR) || {
-	echo "$0: could not create temporary directory" >&2
-	exit 1
-}
-
-TEMPFILE1=$TEMPDIR/bbug1
-TEMPFILE2=$TEMPDIR/bbug2
-        
-USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
-VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
-
-do_help= do_version=
-
-while [ $# -gt 0 ]; do
-	case "$1" in
-	--help)		shift ; do_help=y ;;
-	--version)	shift ; do_version=y ;;
-	--)		shift ; break ;;
-	-*)		echo "bashbug: ${1}: invalid option" >&2
-			echo "$USAGE" >& 2
-			exit 2 ;;
-	*)		break ;;
-	esac
-done
-
-if [ -n "$do_version" ]; then
-	echo "${VERSTR}"
-	exit 0
-fi
-
-if [ -n "$do_help" ]; then
-	echo "${VERSTR}"
-	echo "${USAGE}"
-	echo
-	cat << HERE_EOF
-Bashbug is used to send mail to the Bash maintainers
-for when Bash doesn't behave like you'd like, or expect.
-
-Bashbug will start up your editor (as defined by the shell's
-EDITOR environment variable) with a preformatted bug report
-template for you to fill in. The report will be mailed to the
-bash maintainers by default. See the manual for details.
-
-If you invoke bashbug by accident, just quit your editor without
-saving any changes to the template, and no bug report will be sent.
-HERE_EOF
-	exit 0
-fi
-
-# Figure out how to echo a string without a trailing newline
-N=`echo 'hi there\c'`
-case "$N" in
-*c)	n=-n c= ;;
-*)	n= c='\c' ;;
-esac
-
-BASHTESTERS="bash-testers@cwru.edu"
-
-case "$RELSTATUS" in
-alpha*|beta*|devel*|rc*)	BUGBASH=chet@cwru.edu ;;
-*)				BUGBASH=bug-bash@gnu.org ;;
-esac
-
-case "$RELSTATUS" in
-alpha*|beta*|devel*|rc*)
-		echo "$0: This is a testing release.  Would you like your bug report"
-		echo "$0: to be sent to the bash-testers mailing list?"
-		echo $n "$0: Send to bash-testers? $c"
-		read ans
-		case "$ans" in
-		y*|Y*)	BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
-		esac ;;
-esac
-
-BUGADDR="${1-$BUGBASH}"
-
-if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
-	if [ -x /usr/bin/editor ]; then
-		DEFEDITOR=editor
-	elif [ -x /usr/local/bin/ce ]; then
-		DEFEDITOR=ce
-	elif [ -x /usr/local/bin/emacs ]; then
-		DEFEDITOR=emacs
-	elif [ -x /usr/contrib/bin/emacs ]; then
-		DEFEDITOR=emacs
-	elif [ -x /usr/bin/emacs ]; then
-		DEFEDITOR=emacs
-	elif [ -x /usr/bin/xemacs ]; then
-		DEFEDITOR=xemacs
-	elif [ -x /usr/contrib/bin/jove ]; then
-		DEFEDITOR=jove
-	elif [ -x /usr/local/bin/jove ]; then
-		DEFEDITOR=jove
-	elif [ -x /usr/bin/vi ]; then
-		DEFEDITOR=vi
-	else
-		echo "$0: No default editor found: attempting to use vi" >&2
-		DEFEDITOR=vi
-	fi
-fi
-
-
-: ${EDITOR=$DEFEDITOR}
-
-: ${USER=${LOGNAME-`whoami`}}
-
-trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
-trap 'rm -rf "$TEMPDIR"' 0
-
-UN=
-if (uname) >/dev/null 2>&1; then
-	UN=`uname -a`
-fi
-
-if [ -f /usr/lib/sendmail ] ; then
-	RMAIL="/usr/lib/sendmail"
-	SMARGS="-i -t"
-elif [ -f /usr/sbin/sendmail ] ; then
-	RMAIL="/usr/sbin/sendmail"
-	SMARGS="-i -t"
-else
-	RMAIL=rmail
-	SMARGS="$BUGADDR"
-fi
-
-INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]'
-
-cat > "$TEMPFILE1" <<EOF
-From: ${USER}
-To: ${BUGADDR}
-Subject: ${INITIAL_SUBJECT}
-
-Configuration Information [Automatically generated, do not change]:
-Machine: $MACHINE
-OS: $OS
-Compiler: $CC
-Compilation CFLAGS: $CFLAGS
-uname output: $UN
-Machine Type: $MACHTYPE
-
-Bash Version: $RELEASE
-Patch Level: $PATCHLEVEL
-Release Status: $RELSTATUS
-
-Description:
-	[Detailed description of the problem, suggestion, or complaint.]
-
-Repeat-By:
-	[Describe the sequence of events that causes the problem
-	to occur.]
-
-Fix:
-	[Description of how to fix the problem.  If you don't know a
-	fix for the problem, don't include this section.]
-EOF
-
-cp "$TEMPFILE1" "$TEMPFILE2"
-chmod u+w "$TEMPFILE1"
-
-trap '' 2		# ignore interrupts while in editor
-
-edstat=1
-while [ $edstat -ne 0 ]; do
-	$EDITOR "$TEMPFILE1"
-	edstat=$?
-
-	if [ $edstat -ne 0 ]; then
-		echo "$0: editor \`$EDITOR' exited with nonzero status."
-		echo "$0: Perhaps it was interrupted."
-		echo "$0: Type \`y' to give up, and lose your bug report;"
-		echo "$0: type \`n' to re-enter the editor."
-		echo $n "$0: Do you want to give up? $c"
-
-		read ans
-		case "$ans" in
-		[Yy]*) exit 1 ;;
-		esac
-
-		continue
-	fi
-
-	# find the subject from the temp file and see if it's been changed
-	CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ 	]*||' | sed 1q`
-
-	case "$CURR_SUB" in
-	"${INITIAL_SUBJECT}")
-		echo
-		echo "$0: You have not changed the subject from the default."
-		echo "$0: Please use a more descriptive subject header."
-		echo "$0: Type \`y' to give up, and lose your bug report;"
-		echo "$0: type \`n' to re-enter the editor."
-		echo $n "$0: Do you want to give up? $c"
-
-		read ans
-		case "$ans" in
-		[Yy]*) exit 1 ;;
-		esac
-
-		echo "$0:  The editor will be restarted in five seconds."
-		sleep 5
-		edstat=1
-		;;
-	esac
-
-done
-
-trap 'rm -rf "$TEMPDIR"; exit 1' 2	# restore trap on SIGINT
-
-if cmp -s "$TEMPFILE1" "$TEMPFILE2"
-then
-	echo "File not changed, no bug report submitted."
-	exit
-fi
-
-echo $n "Send bug report? [y/n] $c"
-read ans
-case "$ans" in
-[Nn]*)	exit 0 ;;
-esac
-
-${RMAIL} $SMARGS < "$TEMPFILE1" || {
-	cat "$TEMPFILE1" >> $HOME/dead.bashbug
-	echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2
-}
-
-exit 0
+#!/bin/sh -
+#
+# bashbug - create a bug report and mail it to the bug address
+#
+# The bug address depends on the release status of the shell.  Versions
+# with status `devel', `alpha', `beta', or `rc' mail bug reports to
+# chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
+# Other versions send mail to bug-bash@gnu.org.
+#
+# Copyright (C) 1996-2004 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+#
+# configuration section:
+#	these variables are filled in by the make target in Makefile
+#
+MACHINE="i686"
+OS="linux-gnu"
+CC="gcc"
+CFLAGS=" -DPROGRAM='bash' -DCONF_HOSTTYPE='i686' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i686-pc-linux-gnu' -DCONF_VENDOR='pc' -DLOCALEDIR='/opt/symbian/linux-i386/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -O2 -mtune=i686 -s"
+RELEASE="3.2"
+PATCHLEVEL="39"
+RELSTATUS="release"
+MACHTYPE="i686-pc-linux-gnu"
+
+PATH=/bin:/usr/bin:/usr/local/bin:$PATH
+export PATH
+
+# Check if TMPDIR is set, default to /tmp
+: ${TMPDIR:=/tmp}
+
+#Securely create a temporary directory for the temporary files
+TEMPDIR=$TMPDIR/bbug.$$
+(umask 077 && mkdir $TEMPDIR) || {
+	echo "$0: could not create temporary directory" >&2
+	exit 1
+}
+
+TEMPFILE1=$TEMPDIR/bbug1
+TEMPFILE2=$TEMPDIR/bbug2
+        
+USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
+VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
+
+do_help= do_version=
+
+while [ $# -gt 0 ]; do
+	case "$1" in
+	--help)		shift ; do_help=y ;;
+	--version)	shift ; do_version=y ;;
+	--)		shift ; break ;;
+	-*)		echo "bashbug: ${1}: invalid option" >&2
+			echo "$USAGE" >& 2
+			exit 2 ;;
+	*)		break ;;
+	esac
+done
+
+if [ -n "$do_version" ]; then
+	echo "${VERSTR}"
+	exit 0
+fi
+
+if [ -n "$do_help" ]; then
+	echo "${VERSTR}"
+	echo "${USAGE}"
+	echo
+	cat << HERE_EOF
+Bashbug is used to send mail to the Bash maintainers
+for when Bash doesn't behave like you'd like, or expect.
+
+Bashbug will start up your editor (as defined by the shell's
+EDITOR environment variable) with a preformatted bug report
+template for you to fill in. The report will be mailed to the
+bash maintainers by default. See the manual for details.
+
+If you invoke bashbug by accident, just quit your editor without
+saving any changes to the template, and no bug report will be sent.
+HERE_EOF
+	exit 0
+fi
+
+# Figure out how to echo a string without a trailing newline
+N=`echo 'hi there\c'`
+case "$N" in
+*c)	n=-n c= ;;
+*)	n= c='\c' ;;
+esac
+
+BASHTESTERS="bash-testers@cwru.edu"
+
+case "$RELSTATUS" in
+alpha*|beta*|devel*|rc*)	BUGBASH=chet@cwru.edu ;;
+*)				BUGBASH=bug-bash@gnu.org ;;
+esac
+
+case "$RELSTATUS" in
+alpha*|beta*|devel*|rc*)
+		echo "$0: This is a testing release.  Would you like your bug report"
+		echo "$0: to be sent to the bash-testers mailing list?"
+		echo $n "$0: Send to bash-testers? $c"
+		read ans
+		case "$ans" in
+		y*|Y*)	BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
+		esac ;;
+esac
+
+BUGADDR="${1-$BUGBASH}"
+
+if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
+	if [ -x /usr/bin/editor ]; then
+		DEFEDITOR=editor
+	elif [ -x /usr/local/bin/ce ]; then
+		DEFEDITOR=ce
+	elif [ -x /usr/local/bin/emacs ]; then
+		DEFEDITOR=emacs
+	elif [ -x /usr/contrib/bin/emacs ]; then
+		DEFEDITOR=emacs
+	elif [ -x /usr/bin/emacs ]; then
+		DEFEDITOR=emacs
+	elif [ -x /usr/bin/xemacs ]; then
+		DEFEDITOR=xemacs
+	elif [ -x /usr/contrib/bin/jove ]; then
+		DEFEDITOR=jove
+	elif [ -x /usr/local/bin/jove ]; then
+		DEFEDITOR=jove
+	elif [ -x /usr/bin/vi ]; then
+		DEFEDITOR=vi
+	else
+		echo "$0: No default editor found: attempting to use vi" >&2
+		DEFEDITOR=vi
+	fi
+fi
+
+
+: ${EDITOR=$DEFEDITOR}
+
+: ${USER=${LOGNAME-`whoami`}}
+
+trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
+trap 'rm -rf "$TEMPDIR"' 0
+
+UN=
+if (uname) >/dev/null 2>&1; then
+	UN=`uname -a`
+fi
+
+if [ -f /usr/lib/sendmail ] ; then
+	RMAIL="/usr/lib/sendmail"
+	SMARGS="-i -t"
+elif [ -f /usr/sbin/sendmail ] ; then
+	RMAIL="/usr/sbin/sendmail"
+	SMARGS="-i -t"
+else
+	RMAIL=rmail
+	SMARGS="$BUGADDR"
+fi
+
+INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]'
+
+cat > "$TEMPFILE1" <<EOF
+From: ${USER}
+To: ${BUGADDR}
+Subject: ${INITIAL_SUBJECT}
+
+Configuration Information [Automatically generated, do not change]:
+Machine: $MACHINE
+OS: $OS
+Compiler: $CC
+Compilation CFLAGS: $CFLAGS
+uname output: $UN
+Machine Type: $MACHTYPE
+
+Bash Version: $RELEASE
+Patch Level: $PATCHLEVEL
+Release Status: $RELSTATUS
+
+Description:
+	[Detailed description of the problem, suggestion, or complaint.]
+
+Repeat-By:
+	[Describe the sequence of events that causes the problem
+	to occur.]
+
+Fix:
+	[Description of how to fix the problem.  If you don't know a
+	fix for the problem, don't include this section.]
+EOF
+
+cp "$TEMPFILE1" "$TEMPFILE2"
+chmod u+w "$TEMPFILE1"
+
+trap '' 2		# ignore interrupts while in editor
+
+edstat=1
+while [ $edstat -ne 0 ]; do
+	$EDITOR "$TEMPFILE1"
+	edstat=$?
+
+	if [ $edstat -ne 0 ]; then
+		echo "$0: editor \`$EDITOR' exited with nonzero status."
+		echo "$0: Perhaps it was interrupted."
+		echo "$0: Type \`y' to give up, and lose your bug report;"
+		echo "$0: type \`n' to re-enter the editor."
+		echo $n "$0: Do you want to give up? $c"
+
+		read ans
+		case "$ans" in
+		[Yy]*) exit 1 ;;
+		esac
+
+		continue
+	fi
+
+	# find the subject from the temp file and see if it's been changed
+	CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ 	]*||' | sed 1q`
+
+	case "$CURR_SUB" in
+	"${INITIAL_SUBJECT}")
+		echo
+		echo "$0: You have not changed the subject from the default."
+		echo "$0: Please use a more descriptive subject header."
+		echo "$0: Type \`y' to give up, and lose your bug report;"
+		echo "$0: type \`n' to re-enter the editor."
+		echo $n "$0: Do you want to give up? $c"
+
+		read ans
+		case "$ans" in
+		[Yy]*) exit 1 ;;
+		esac
+
+		echo "$0:  The editor will be restarted in five seconds."
+		sleep 5
+		edstat=1
+		;;
+	esac
+
+done
+
+trap 'rm -rf "$TEMPDIR"; exit 1' 2	# restore trap on SIGINT
+
+if cmp -s "$TEMPFILE1" "$TEMPFILE2"
+then
+	echo "File not changed, no bug report submitted."
+	exit
+fi
+
+echo $n "Send bug report? [y/n] $c"
+read ans
+case "$ans" in
+[Nn]*)	exit 0 ;;
+esac
+
+${RMAIL} $SMARGS < "$TEMPFILE1" || {
+	cat "$TEMPFILE1" >> $HOME/dead.bashbug
+	echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2
+}
+
+exit 0
--- a/sbsv2/raptor/python/dos2unix.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/dos2unix.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,68 +1,68 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# dos2unix - python version
-# This module converts file from dos to unix i.e. replaces Dos/Windows EOL (CRLF) with Unix EOL (LF).
-# example usage:
-# dos2unix.py windowsFile.txt
-#
-
-import os
-import re
-import sys
-import stat
-#------------------------------------------------------------------------------
-# Converts string from dos to unix i.e. replaces CRLF with LF as a line terminator (EOL)
-#------------------------------------------------------------------------------
-def convertDos2Unix(inputString):
-    regExp = re.compile("\r\n|\n|\r")
-    return regExp.sub("\n",inputString)
-
-#------------------------------------------------------------------------------
-# Validates input
-#------------------------------------------------------------------------------
-def validateInput(argv):
-    if not(len(argv) > 1):
-       print "Error No parameter given: fileName to convert."
-       sys.exit();
-
-#------------------------------------------------------------------------------
-# Reads input file
-#------------------------------------------------------------------------------
-def readInputFile(fileName):
-    inputFile = open(fileName, 'r')
-    # read file content
-    originalFileContent = inputFile.read()
-    inputFile.close()
-    return originalFileContent
-
-#------------------------------------------------------------------------------
-# Writes string to given file (in binary mode)
-#------------------------------------------------------------------------------
-def writeToBinaryFile(string,fileName):
-    os.chmod(fileName, stat.S_IRWXU)
-    outputFile = open(fileName, 'wb')
-    outputFile.write(string)
-    outputFile.close()
-
-# Main script
-
-#------------------------------------------------------------------------------
-# Coverts dos/windows EOL to UNIX EOL (CRLF->LF) in given file
-#------------------------------------------------------------------------------
-def dos2unix(fileName):
-    originalFileContent = readInputFile(fileName)
-    convertedFileContent = convertDos2Unix(originalFileContent)
-    writeToBinaryFile(convertedFileContent,fileName)
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# dos2unix - python version
+# This module converts file from dos to unix i.e. replaces Dos/Windows EOL (CRLF) with Unix EOL (LF).
+# example usage:
+# dos2unix.py windowsFile.txt
+#
+
+import os
+import re
+import sys
+import stat
+#------------------------------------------------------------------------------
+# Converts string from dos to unix i.e. replaces CRLF with LF as a line terminator (EOL)
+#------------------------------------------------------------------------------
+def convertDos2Unix(inputString):
+    regExp = re.compile("\r\n|\n|\r")
+    return regExp.sub("\n",inputString)
+
+#------------------------------------------------------------------------------
+# Validates input
+#------------------------------------------------------------------------------
+def validateInput(argv):
+    if not(len(argv) > 1):
+       print "Error No parameter given: fileName to convert."
+       sys.exit();
+
+#------------------------------------------------------------------------------
+# Reads input file
+#------------------------------------------------------------------------------
+def readInputFile(fileName):
+    inputFile = open(fileName, 'r')
+    # read file content
+    originalFileContent = inputFile.read()
+    inputFile.close()
+    return originalFileContent
+
+#------------------------------------------------------------------------------
+# Writes string to given file (in binary mode)
+#------------------------------------------------------------------------------
+def writeToBinaryFile(string,fileName):
+    os.chmod(fileName, stat.S_IRWXU)
+    outputFile = open(fileName, 'wb')
+    outputFile.write(string)
+    outputFile.close()
+
+# Main script
+
+#------------------------------------------------------------------------------
+# Coverts dos/windows EOL to UNIX EOL (CRLF->LF) in given file
+#------------------------------------------------------------------------------
+def dos2unix(fileName):
+    originalFileContent = readInputFile(fileName)
+    convertedFileContent = convertDos2Unix(originalFileContent)
+    writeToBinaryFile(convertedFileContent,fileName)
+
--- a/sbsv2/raptor/python/filter_interface.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/filter_interface.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Base Class for defining filter classes
-# All filter classes that get defined should derive from this base class
-#
-
-class Filter(object):
-	
-	def open(self, raptor):
-		return False
-	
-	def write(self, text):
-		return False
-
-	def summary(self):
-		return False
-	
-	def close(self):
-		return False
-	
-	def formatError(self, message):
-		return "sbs: error: " + message + "\n"
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Base Class for defining filter classes
+# All filter classes that get defined should derive from this base class
+#
+
+class Filter(object):
+	
+	def open(self, raptor):
+		return False
+	
+	def write(self, text):
+		return False
+
+	def summary(self):
+		return False
+	
+	def close(self):
+		return False
+	
+	def formatError(self, message):
+		return "sbs: error: " + message + "\n"
--- a/sbsv2/raptor/python/filter_list.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/filter_list.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,170 +1,170 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Class to control array of defined logging filters
-# This class will act as a switch, controlling the list of filters iteratively
-#
-
-import os
-import sys
-import raptor
-import filter_interface
-import pluginbox
-import traceback
-
-class FilterWriteException(Exception):
-	def __init__(self, value):
-		self.parameter = value
-	def __str__(self):
-		return repr(self.parameter)
-
-class BootstrapFilter(filter_interface.Filter):
-	def __init__(self):
-		self.out = sys.stdout
-
-	"""Use this until the CLI has supplied some real filters"""
-	def open(self, raptor_instance):
-		"""Set output to stdout for the various I/O methods to write to."""
-		self.raptor = raptor_instance
-		return True
-		
-	def write(self, text):
-		"""Write errors and warnings to stdout"""
-		
-		if text.startswith("<error>"):
-			start = text.find(">")
-			end = text.rfind("<")
-			self.out.write(str(raptor.name) + ": error: %s\n" \
-					% text[(start + 1):end])
-		elif text.startswith("<warning"):
-			start = text.find(">")
-			end = text.rfind("<")
-			self.out.write(str(raptor.name) + ": warning: %s\n" \
-					% text[(start + 1):end])
-		elif "error" in text or "warning" in text:
-			self.out.write(text)
-		return True
-
-	def summary(self):
-		"""Write Summary"""
-		return False
-	
-	def close(self):
-		"""Nothing to do for stdout"""
-		return True
-
-
-
-class FilterList(filter_interface.Filter):
-
-	def __init__(self):
-		self.out = [BootstrapFilter()]
-		self.filters = []
-		self.pbox = None
-
-	def open(self, raptor_instance, filternames, pbox):
-		"""
-			Call open function on each filter using raptor parameters provided
-			Returns: Boolean: Have the functions succeeded in opening the files?
-		"""
-		# Find all the filter plugins
-		self.pbox = pbox
-		possiblefilters = self.pbox.classesof(filter_interface.Filter)
-		unfound = []
-		self.filters = []
-		for f in filternames:
-			unfound.append(f) # unfound unless we find it
-			for pl in possiblefilters:
-				if pl.__name__.upper() == f.upper():
-					self.filters.append(pl())
-					unfound = unfound[:-1]
-		if unfound != []:
-			raise ValueError("requested filters not found: %s \
-			\nAvailable filters are: %s" % (str(unfound), self.format_output_list(possiblefilters)))
-
-		if self.filters == []:
-			self.out = [BootstrapFilter()]
-		else:
-			self.out=[]
-			for filter in self.filters:
-				if filter.open(raptor_instance):
-					self.out.append(filter)
-				else:
-					sys.stderr.write(str(raptor.name) + \
-							": error: Cannot open filter: %s\n" % str(filter))
-					ok = False
-					
-			if self.out == []:
-				sys.stderr.write(str(raptor.name) + \
-						": warning: All filters failed to open. " + \
-						"Defaulting to 'stdout'\n")
-				self.out = [BootstrapFilter()]
-
-	def write(self, text):
-		"""
-			Iterate through each filter, calling their write function
-		"""
-
-		if text is None:
-			return
-
-		badfilters = []
-		for filter in self.out:
-			try:
-				filter.write(text)
-			except Exception,e:
-				traceback.print_exc(file=sys.stdout)
-				sys.stdout.write("Called from: \n")
-				traceback.print_stack(file=sys.stdout)
-				sys.stdout.write("\n")
-				badfilters.append(filter)
-
-		if len(badfilters) > 0:
-			for f in badfilters:
-				self.out.remove(f) # dump the filter in case it causes repeated exceptions
-				sys.stdout.write("Removed filter %s because it generated an exception\n" % type(f))
-
-			if len(self.out) == 0:
-				sys.stdout.write("Falling back to bootstrap filter\n")
-				self.out = [BootstrapFilter()] # Try to fall back to something in the worst case
-
-	def summary(self):
-		"""
-			Run the summaries of all filters (prior to log end)
-		"""
-		for filter in self.out:
-			filter.summary()
-
-	def close(self):
-		"""
-			Iterate through each filter, calling their close function
-			Returns True if all the filters close properly
-		"""
-		returnVal = True
-		
-		for filter in self.out:
-			if (filter != sys.stdout) and (filter != sys.stderr):
-				returnVal = returnVal and filter.close()
-		
-		return returnVal
-
-	def format_output_list(self, possiblefilters):
-		"""
-			formats available filters
-		"""
-		filters_formatted = ""
-		for pl in possiblefilters:
-			filters_formatted += "\n  " + pl.__name__
-		return filters_formatted
-		
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Class to control array of defined logging filters
+# This class will act as a switch, controlling the list of filters iteratively
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+import pluginbox
+import traceback
+
+class FilterWriteException(Exception):
+	def __init__(self, value):
+		self.parameter = value
+	def __str__(self):
+		return repr(self.parameter)
+
+class BootstrapFilter(filter_interface.Filter):
+	def __init__(self):
+		self.out = sys.stdout
+
+	"""Use this until the CLI has supplied some real filters"""
+	def open(self, raptor_instance):
+		"""Set output to stdout for the various I/O methods to write to."""
+		self.raptor = raptor_instance
+		return True
+		
+	def write(self, text):
+		"""Write errors and warnings to stdout"""
+		
+		if text.startswith("<error>"):
+			start = text.find(">")
+			end = text.rfind("<")
+			self.out.write(str(raptor.name) + ": error: %s\n" \
+					% text[(start + 1):end])
+		elif text.startswith("<warning"):
+			start = text.find(">")
+			end = text.rfind("<")
+			self.out.write(str(raptor.name) + ": warning: %s\n" \
+					% text[(start + 1):end])
+		elif "error" in text or "warning" in text:
+			self.out.write(text)
+		return True
+
+	def summary(self):
+		"""Write Summary"""
+		return False
+	
+	def close(self):
+		"""Nothing to do for stdout"""
+		return True
+
+
+
+class FilterList(filter_interface.Filter):
+
+	def __init__(self):
+		self.out = [BootstrapFilter()]
+		self.filters = []
+		self.pbox = None
+
+	def open(self, raptor_instance, filternames, pbox):
+		"""
+			Call open function on each filter using raptor parameters provided
+			Returns: Boolean: Have the functions succeeded in opening the files?
+		"""
+		# Find all the filter plugins
+		self.pbox = pbox
+		possiblefilters = self.pbox.classesof(filter_interface.Filter)
+		unfound = []
+		self.filters = []
+		for f in filternames:
+			unfound.append(f) # unfound unless we find it
+			for pl in possiblefilters:
+				if pl.__name__.upper() == f.upper():
+					self.filters.append(pl())
+					unfound = unfound[:-1]
+		if unfound != []:
+			raise ValueError("requested filters not found: %s \
+			\nAvailable filters are: %s" % (str(unfound), self.format_output_list(possiblefilters)))
+
+		if self.filters == []:
+			self.out = [BootstrapFilter()]
+		else:
+			self.out=[]
+			for filter in self.filters:
+				if filter.open(raptor_instance):
+					self.out.append(filter)
+				else:
+					sys.stderr.write(str(raptor.name) + \
+							": error: Cannot open filter: %s\n" % str(filter))
+					ok = False
+					
+			if self.out == []:
+				sys.stderr.write(str(raptor.name) + \
+						": warning: All filters failed to open. " + \
+						"Defaulting to 'stdout'\n")
+				self.out = [BootstrapFilter()]
+
+	def write(self, text):
+		"""
+			Iterate through each filter, calling their write function
+		"""
+
+		if text is None:
+			return
+
+		badfilters = []
+		for filter in self.out:
+			try:
+				filter.write(text)
+			except Exception,e:
+				traceback.print_exc(file=sys.stdout)
+				sys.stdout.write("Called from: \n")
+				traceback.print_stack(file=sys.stdout)
+				sys.stdout.write("\n")
+				badfilters.append(filter)
+
+		if len(badfilters) > 0:
+			for f in badfilters:
+				self.out.remove(f) # dump the filter in case it causes repeated exceptions
+				sys.stdout.write("Removed filter %s because it generated an exception\n" % type(f))
+
+			if len(self.out) == 0:
+				sys.stdout.write("Falling back to bootstrap filter\n")
+				self.out = [BootstrapFilter()] # Try to fall back to something in the worst case
+
+	def summary(self):
+		"""
+			Run the summaries of all filters (prior to log end)
+		"""
+		for filter in self.out:
+			filter.summary()
+
+	def close(self):
+		"""
+			Iterate through each filter, calling their close function
+			Returns True if all the filters close properly
+		"""
+		returnVal = True
+		
+		for filter in self.out:
+			if (filter != sys.stdout) and (filter != sys.stderr):
+				returnVal = returnVal and filter.close()
+		
+		return returnVal
+
+	def format_output_list(self, possiblefilters):
+		"""
+			formats available filters
+		"""
+		filters_formatted = ""
+		for pl in possiblefilters:
+			filters_formatted += "\n  " + pl.__name__
+		return filters_formatted
+		
--- a/sbsv2/raptor/python/filter_utils.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/filter_utils.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,249 +1,249 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Classes, methods and regex available for use in log filters
-#
-
-
-import re
-
-
-# General log structure
-logTag = re.compile('</?(?P<name>\?xml|buildlog|info|warning|error|recipe|whatlog|build|export|archive|member|bitmap|resource|stringtable|bmconvcmdfile)[>| ]')
-logHeader = re.compile('<buildlog sbs_version=[\'|\"](?P<version>.+)[\'|\"] xmlns=[\'|\"](?P<xmlns>.+)[\'|\"] xmlns:xsi=[\'|\"](?P<xsdi>.+)[\'|\"] xsi:schemaLocation=[\'|\"](?P<schemaLocation>.+)[\'|\"]>')
-clean = re.compile('.*<rm(dir)? (files|dirs)=[\'|\"](?P<removals>.+)[\'|\"] />')
-exports = re.compile('<info>(Copied|Unzipped (?P<unpacked>\d+) files from) (?P<source>.+) to (?P<destination>.+)</info>')
-
-# Tool errors and warnings
-mwError = re.compile('(.+:\d+:(?! (note|warning):) .+|mw(ld|cc)sym2(.exe)?:(?! (note|warning):) .+ \'.+\' .+)')
-mwWarning = re.compile('.+:\d+: warning: .+|mw(ld|cc)sym2(.exe)?: warning: .+')
-
-
-class AutoFlushedStream(file):
-	""" Wrapper for STDOUT/STDERR streams to ensure that a flush is performed
-	after write methods.
-	Use to avoid buffering when log output in real time is required."""
-	
-	def __init__(self, aStream):
-		self.__stream = aStream
-    
-	def write(self, aText):
-		self.__stream.write(aText)
-		self.__stream.flush()
-
-	def writelines(self, aTextList):
-		self.__stream.writelines(aTextList)
-		self.__stream.flush()
-
-
-class RecipeFactory(object):
-	"Factory class to ease creation of appropriately specialised Recipe objects."
-	
-	def newRecipe(self, aLine=None, aCustomIgnore=None):
-		""" Creates objects of base type Recipe depending on the name
-		of the recipe being processed."""
-		
-		name = ""
-		header = None
-		if aLine:
-			header = Recipe.header.match(aLine)
-		if header:
-			name = header.group("name")	
-		
-		if name.startswith("win32"):
-			return Win32Recipe(aLine, aCustomIgnore)
-		else:
-			return Recipe(aLine, aCustomIgnore)
-	
-
-class Recipe(object):
-	""" Recipe base class.
-	Provides a means to get hold of recipe content in a generic way.
-	Includes a basic understanding of errors and warnings - sub-classes can
-	override output, error and warning methods to specialise."""
-	
-	# Flags to normalise client access, mapping directly to regex groups
-	name		= "name"
-	target		= "target"
-	host		= "host"
-	layer		= "layer"
-	component	= "component"
-	bldinf		= "bldinf"
-	mmp			= "mmp"
-	config		= "config"
-	platform	= "platform"
-	phase		= "phase"
-	source		= "source"
-	start		= "start"
-	elapsed		= "elapsed"
-	exit		= "exit"
-	code		= "code"
-	attempts	= "attempts"
-	
-	# Basic errors/warnings
-	error = re.compile('Error: ')
-	warning = re.compile('Warning: ')
-	
-	# Recipe metadata
-	header  = re.compile('<recipe\s+name=[\'|\"](?P<name>.+)[\'|\"]\s+target=[\'|\"](?P<target>.+)[\'|\"]\s+host=[\'|\"](?P<host>.+)[\'|\"]\s+layer=[\'|\"](?P<layer>.*)[\'|\"]\s+component=[\'|\"](?P<component>.*)[\'|\"]\s+bldinf=[\'|\"](?P<bldinf>.+)[\'|\"]\s+mmp=[\'|\"](?P<mmp>.*)[\'|\"]\s+config=[\'|\"](?P<config>.+)[\'|\"]\s+platform=[\'|\"](?P<platform>.*)[\'|\"]\s+phase=[\'|\"](?P<phase>.+)[\'|\"]\s+source=[\'|\"](?P<source>.*)[\'|\"]\s*>')
-	call    = re.compile('^\+ (?P<call>.+)$')
-	status  = re.compile('\<status\s+exit=[\'|\"](?P<exit>(ok|failed|retry))[\'|\"](\s+code=[\'|\"](?P<code>\d+)[\'|\"])?\s+attempt=[\'|\"](?P<attempts>\d+)[\'|\"]\s*\/>')
-	ignore  = re.compile('<!\[CDATA\[')
-	time    = re.compile(']]><time\s+start=[\'|\"](?P<start>\d+\.\d+)[\'|\"]\s+elapsed=[\'|\"](?P<elapsed>\d+.\d+)[\'|\"]\s*/>$')
-	footer  = re.compile('</recipe>$')
-	
-	
-	def __init__(self, aLine=None, aCustomIgnore=None):
-		"""
-		@param aLine			Optional first line of a recipe (typically the recipe header)
-		@param aCustomIgnore	Optional compiled regular expression object listing additional
-								lines to be ignored in this recipe's output.
-		"""				
-		self.__customIgnore = aCustomIgnore	
-		
-		self.__detail = {
-						Recipe.name		:"",
-						Recipe.target	:"",
-						Recipe.host		:"",
-						Recipe.layer	:"",
-						Recipe.component:"",
-						Recipe.bldinf	:"",
-						Recipe.mmp		:"",
-						Recipe.config	:"",
-						Recipe.platform	:"",
-						Recipe.phase	:"",
-						Recipe.source	:"",
-						Recipe.start	:"",
-						Recipe.elapsed	:0.0,
-						Recipe.exit		:"",
-						Recipe.code		:0,
-						Recipe.attempts	:0
-						}
-		
-		self.__calls = []
-		self.__lines = []
-		self.__complete = False
-		
-		if aLine:
-			self.addLine(aLine)
-	
-	def isComplete(self):
-		"""Signifies that the recipe footer has been reached, the
-		recipe is complete and so is in a fit state to be queried."""
-		return self.__complete
-
-	def __storeDetail(self, aMatchObject):
-		for key in aMatchObject.groupdict().keys():
-			value = aMatchObject.group(key)
-			if value:
-				if (key in [Recipe.code,Recipe.attempts]):
-					value = int(value)
-				elif key == Recipe.elapsed:
-					value = float(value)
-				self.__detail[key] = value
-	
-	def addLine(self, aLine):
-		"""Add a log line to an existing recipe object, processing anything
-		that can be examined at this point in time directly."""
-		if Recipe.ignore.match(aLine) or (self.__customIgnore and self.__customIgnore.match(aLine)):
-			return
-
-		header = Recipe.header.match(aLine)
-		if header:
-			self.__storeDetail(header)
-			return
-		
-		call = Recipe.call.match(aLine)
-		if call:
-			self.__calls.append(call.group("call"))
-			return
-		
-		time = Recipe.time.match(aLine)
-		if time:
-			self.__storeDetail(time)
-			return
-		
-		status = Recipe.status.match(aLine)
-		if status:
-			self.__storeDetail(status)
-			return
-		
-		if Recipe.footer.match(aLine):
-			self.__complete = True
-			return
-
-		self.__lines.append(aLine)
-	
-	def getDetail(self, aItem):
-		"""Retrieve attribute detail from recipe tags.
-		Class data flags provide known items e.g. getDetail(Recipe.source)"""
-		if self.__detail.has_key(aItem):
-			return self.__detail[aItem]
-		
-	def getCalls(self):
-		"Return a list of all '+' prefixed tool calls from this recipe."
-		return self.__calls
-	
-	def isError(self, aLine):
-		"""Convenience matcher for basic errors.
-		Override in sub-classes to specialise."""
-		return True if Recipe.error.match(aLine) else False
-	
-	def isWarning(self, aLine):
-		"""Convenience matcher for basic warnings.
-		Override in sub-classes to specialise."""
-		return True if Recipe.warning.match(aLine) else False
-	
-	def getOutput(self):
-		""""Return a list of all output that isn't an error or a warning.
-		Override in sub-classes to specialise."""
-		output = []
-		for line in self.__lines:
-			if not self.isError(line) and not self.isWarning(line):
-				output.append(line)
-		return output
-	
-	def getErrors(self):
-		""""Return a list of all output identified as an error.
-		Override in sub-classes to specialise."""
-		errors = []
-		for line in self.__lines:
-			if self.isError(line):
-				errors.append(line)
-		return errors
-	
-	def getWarnings(self):
-		""""Return a list of all output identified as a warning.
-		Override in sub-classes to specialise."""
-		warnings = []
-		for line in self.__lines:
-			if self.isWarning(line):
-				warnings.append(line)
-		return warnings
-	
-	def isSuccess(self):
-		"Convenience method to get overall recipe status."
-		return True if self.getDetail(Recipe.exit) == "ok" else False
-	
-	
-class Win32Recipe(Recipe):
-	"Win32 tailored recipe class."
-	def isError(self, aLine):
-		return True if mwError.match(aLine) else False
-	
-	def isWarning(self, aLine):
-		return True if mwWarning.match(aLine) else False
-
-
-	
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Classes, methods and regex available for use in log filters
+#
+
+
+import re
+
+
+# General log structure
+logTag = re.compile('</?(?P<name>\?xml|buildlog|info|warning|error|recipe|whatlog|build|export|archive|member|bitmap|resource|stringtable|bmconvcmdfile)[>| ]')
+logHeader = re.compile('<buildlog sbs_version=[\'|\"](?P<version>.+)[\'|\"] xmlns=[\'|\"](?P<xmlns>.+)[\'|\"] xmlns:xsi=[\'|\"](?P<xsdi>.+)[\'|\"] xsi:schemaLocation=[\'|\"](?P<schemaLocation>.+)[\'|\"]>')
+clean = re.compile('.*<rm(dir)? (files|dirs)=[\'|\"](?P<removals>.+)[\'|\"] />')
+exports = re.compile('<info>(Copied|Unzipped (?P<unpacked>\d+) files from) (?P<source>.+) to (?P<destination>.+)</info>')
+
+# Tool errors and warnings
+mwError = re.compile('(.+:\d+:(?! (note|warning):) .+|mw(ld|cc)sym2(.exe)?:(?! (note|warning):) .+ \'.+\' .+)')
+mwWarning = re.compile('.+:\d+: warning: .+|mw(ld|cc)sym2(.exe)?: warning: .+')
+
+
+class AutoFlushedStream(file):
+	""" Wrapper for STDOUT/STDERR streams to ensure that a flush is performed
+	after write methods.
+	Use to avoid buffering when log output in real time is required."""
+	
+	def __init__(self, aStream):
+		self.__stream = aStream
+    
+	def write(self, aText):
+		self.__stream.write(aText)
+		self.__stream.flush()
+
+	def writelines(self, aTextList):
+		self.__stream.writelines(aTextList)
+		self.__stream.flush()
+
+
+class RecipeFactory(object):
+	"Factory class to ease creation of appropriately specialised Recipe objects."
+	
+	def newRecipe(self, aLine=None, aCustomIgnore=None):
+		""" Creates objects of base type Recipe depending on the name
+		of the recipe being processed."""
+		
+		name = ""
+		header = None
+		if aLine:
+			header = Recipe.header.match(aLine)
+		if header:
+			name = header.group("name")	
+		
+		if name.startswith("win32"):
+			return Win32Recipe(aLine, aCustomIgnore)
+		else:
+			return Recipe(aLine, aCustomIgnore)
+	
+
+class Recipe(object):
+	""" Recipe base class.
+	Provides a means to get hold of recipe content in a generic way.
+	Includes a basic understanding of errors and warnings - sub-classes can
+	override output, error and warning methods to specialise."""
+	
+	# Flags to normalise client access, mapping directly to regex groups
+	name		= "name"
+	target		= "target"
+	host		= "host"
+	layer		= "layer"
+	component	= "component"
+	bldinf		= "bldinf"
+	mmp			= "mmp"
+	config		= "config"
+	platform	= "platform"
+	phase		= "phase"
+	source		= "source"
+	start		= "start"
+	elapsed		= "elapsed"
+	exit		= "exit"
+	code		= "code"
+	attempts	= "attempts"
+	
+	# Basic errors/warnings
+	error = re.compile('Error: ')
+	warning = re.compile('Warning: ')
+	
+	# Recipe metadata
+	header  = re.compile('<recipe\s+name=[\'|\"](?P<name>.+)[\'|\"]\s+target=[\'|\"](?P<target>.+)[\'|\"]\s+host=[\'|\"](?P<host>.+)[\'|\"]\s+layer=[\'|\"](?P<layer>.*)[\'|\"]\s+component=[\'|\"](?P<component>.*)[\'|\"]\s+bldinf=[\'|\"](?P<bldinf>.+)[\'|\"]\s+mmp=[\'|\"](?P<mmp>.*)[\'|\"]\s+config=[\'|\"](?P<config>.+)[\'|\"]\s+platform=[\'|\"](?P<platform>.*)[\'|\"]\s+phase=[\'|\"](?P<phase>.+)[\'|\"]\s+source=[\'|\"](?P<source>.*)[\'|\"]\s*>')
+	call    = re.compile('^\+ (?P<call>.+)$')
+	status  = re.compile('\<status\s+exit=[\'|\"](?P<exit>(ok|failed|retry))[\'|\"](\s+code=[\'|\"](?P<code>\d+)[\'|\"])?\s+attempt=[\'|\"](?P<attempts>\d+)[\'|\"]\s*\/>')
+	ignore  = re.compile('<!\[CDATA\[')
+	time    = re.compile(']]><time\s+start=[\'|\"](?P<start>\d+\.\d+)[\'|\"]\s+elapsed=[\'|\"](?P<elapsed>\d+.\d+)[\'|\"]\s*/>$')
+	footer  = re.compile('</recipe>$')
+	
+	
+	def __init__(self, aLine=None, aCustomIgnore=None):
+		"""
+		@param aLine			Optional first line of a recipe (typically the recipe header)
+		@param aCustomIgnore	Optional compiled regular expression object listing additional
+								lines to be ignored in this recipe's output.
+		"""				
+		self.__customIgnore = aCustomIgnore	
+		
+		self.__detail = {
+						Recipe.name		:"",
+						Recipe.target	:"",
+						Recipe.host		:"",
+						Recipe.layer	:"",
+						Recipe.component:"",
+						Recipe.bldinf	:"",
+						Recipe.mmp		:"",
+						Recipe.config	:"",
+						Recipe.platform	:"",
+						Recipe.phase	:"",
+						Recipe.source	:"",
+						Recipe.start	:"",
+						Recipe.elapsed	:0.0,
+						Recipe.exit		:"",
+						Recipe.code		:0,
+						Recipe.attempts	:0
+						}
+		
+		self.__calls = []
+		self.__lines = []
+		self.__complete = False
+		
+		if aLine:
+			self.addLine(aLine)
+	
+	def isComplete(self):
+		"""Signifies that the recipe footer has been reached, the
+		recipe is complete and so is in a fit state to be queried."""
+		return self.__complete
+
+	def __storeDetail(self, aMatchObject):
+		for key in aMatchObject.groupdict().keys():
+			value = aMatchObject.group(key)
+			if value:
+				if (key in [Recipe.code,Recipe.attempts]):
+					value = int(value)
+				elif key == Recipe.elapsed:
+					value = float(value)
+				self.__detail[key] = value
+	
+	def addLine(self, aLine):
+		"""Add a log line to an existing recipe object, processing anything
+		that can be examined at this point in time directly."""
+		if Recipe.ignore.match(aLine) or (self.__customIgnore and self.__customIgnore.match(aLine)):
+			return
+
+		header = Recipe.header.match(aLine)
+		if header:
+			self.__storeDetail(header)
+			return
+		
+		call = Recipe.call.match(aLine)
+		if call:
+			self.__calls.append(call.group("call"))
+			return
+		
+		time = Recipe.time.match(aLine)
+		if time:
+			self.__storeDetail(time)
+			return
+		
+		status = Recipe.status.match(aLine)
+		if status:
+			self.__storeDetail(status)
+			return
+		
+		if Recipe.footer.match(aLine):
+			self.__complete = True
+			return
+
+		self.__lines.append(aLine)
+	
+	def getDetail(self, aItem):
+		"""Retrieve attribute detail from recipe tags.
+		Class data flags provide known items e.g. getDetail(Recipe.source)"""
+		if self.__detail.has_key(aItem):
+			return self.__detail[aItem]
+		
+	def getCalls(self):
+		"Return a list of all '+' prefixed tool calls from this recipe."
+		return self.__calls
+	
+	def isError(self, aLine):
+		"""Convenience matcher for basic errors.
+		Override in sub-classes to specialise."""
+		return True if Recipe.error.match(aLine) else False
+	
+	def isWarning(self, aLine):
+		"""Convenience matcher for basic warnings.
+		Override in sub-classes to specialise."""
+		return True if Recipe.warning.match(aLine) else False
+	
+	def getOutput(self):
+		""""Return a list of all output that isn't an error or a warning.
+		Override in sub-classes to specialise."""
+		output = []
+		for line in self.__lines:
+			if not self.isError(line) and not self.isWarning(line):
+				output.append(line)
+		return output
+	
+	def getErrors(self):
+		""""Return a list of all output identified as an error.
+		Override in sub-classes to specialise."""
+		errors = []
+		for line in self.__lines:
+			if self.isError(line):
+				errors.append(line)
+		return errors
+	
+	def getWarnings(self):
+		""""Return a list of all output identified as a warning.
+		Override in sub-classes to specialise."""
+		warnings = []
+		for line in self.__lines:
+			if self.isWarning(line):
+				warnings.append(line)
+		return warnings
+	
+	def isSuccess(self):
+		"Convenience method to get overall recipe status."
+		return True if self.getDetail(Recipe.exit) == "ok" else False
+	
+	
+class Win32Recipe(Recipe):
+	"Win32 tailored recipe class."
+	def isError(self, aLine):
+		return True if mwError.match(aLine) else False
+	
+	def isWarning(self, aLine):
+		return True if mwWarning.match(aLine) else False
+
+
+	
--- a/sbsv2/raptor/python/generic_path.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/generic_path.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,315 +1,315 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# generic_path module
-#
-
-import os
-import sys
-import re
-import types
-
-# are we on windows, and if so what is the current drive letter
-isWin = sys.platform.lower().startswith("win")
-if isWin:
-	drive = re.match('^([A-Za-z]:)',os.getcwd()).group(0)
-
-# regex for "bare" drive letters	
-driveRE = re.compile('^[A-Za-z]:$')
-
-# Base class
-
-class Path:
-	"""This class represents a file path.
-	
-	A generic path object supports operations without needing to know
-	about Windows and Linux differences. The standard str() function can
-	obtain a string version of the path in Local format for use by
-	platform-specific functions (file opening for example).
-	
-	We use forward slashes as path separators (even on Windows).
-	
-	For example,
-	
-		path1 = generic_path.Path("/foo")
-		path2 = generic_path.Path("bar", "bing.bang")
-		
-		print str(path1.Append(path2))
-		
-	Prints /foo/bar/bing.bang		on Linux
-	Prints c:/foo/bar/bing.bang		on Windows (if c is the current drive)
-	""" 
-		
-	def __init__(self, *arguments):
-		"""construct a path from a list of path elements"""
-		
-		if len(arguments) == 0:
-			self.path = ""
-			return
-		
-		list = []
-		for i,arg in enumerate(arguments):
-			if isWin:
-				if i == 0:
-					# If the first element starts with \ or / then we will
-					# add the current drive letter to make a fully absolute path
-					if arg.startswith("\\\\"):
-						list.append(arg) # A UNC path - don't mess with it
-					elif arg.startswith("\\") or arg.startswith("/"):
-						list.append(drive + arg)
-					# If the first element is a bare drive then dress it with a \
-					# temporarily otherwise "join" will not work properly.
-					elif driveRE.match(arg):
-						list.append(arg + "\\")
-					# nothing special about the first element
-					else:
-						list.append(arg)
-				else:
-					if arg.startswith("\\\\"):
-						raise ValueError("non-initial path components must not start with \\\\ : %s" % arg)
-					else:
-						list.append(arg)
-				if ";" in arg:
-					raise ValueError("An individual windows Path may not contain ';' : %s" % arg)
-			else:
-				list.append(arg)
-	
-		self.path = os.path.join(*list)
-		
-		# normalise to avoid nastiness with dots and multiple separators
-		# but do not normalise "" as it will become "."
-		if self.path != "":
-			self.path = os.path.normpath(self.path)
-		
-		# always use forward slashes as separators
-		self.path = self.path.replace("\\", "/")
-		
-		# remove trailing slashes unless we are just /
-		if self.path != "/":
-			self.path = self.path.rstrip("/")
-		
-	def __str__(self):
-		return self.path
-	
-	def GetNeutralStr(self):
-		"""return the path as a string that could be included in other paths."""
-		return self.path.replace(":","").replace("/","")
-
-	def GetLocalString(self):
-		"""return a string in the local file-system format.
-		
-		e.g. C:/tmp on Windows or /C/tmp on Linux"""
-		return self.path
-	
-	def isAbsolute(self):
-		"test whether this path is absolute or relative"
-		# C: is an absolute directory
-		return (os.path.isabs(self.path) or driveRE.match(self.path))
-	
-	def Absolute(self):
-		"""return an object for the absolute version of this path.
-		
-		Prepends the current working directory to relative paths and
-		the current drive (on Windows) to /something type paths."""
-		# leave C: alone as abspath will stick the cwd on
-		if driveRE.match(self.path):
-			return Path(self.path)
-		else:
-			return Path(os.path.abspath(self.path))
-	
-	def Append(self, *arguments):
-		"return an object with path elements added at the end of this path"
-		return Join(*((self,) + arguments))
-	
-	def Prepend(self, *arguments):
-		"return an object with path elements added at the start of this path"
-		return Join(*(arguments + (self,)))
-	
-	def isDir(self):
-		"test whether this path points to an existing directory"
-		# C: is a directory
-		return (os.path.isdir(self.path) or driveRE.match(self.path))
-	
-	def isFile(self):
-		"test whether this path points to an existing file"
-		return os.path.isfile(self.path)
-
-	def Exists(self):
-		"test whether this path exists in the filesystem"
-		if driveRE.match(self.path):
-			return os.path.exists(self.path + "/")
-		else:
-			return os.path.exists(self.path)
-		
-	def Dir(self):
-		"return an object for the directory part of this path"
-		if driveRE.match(self.path):
-			return Path(self.path)
-		else:
-			return Path(os.path.dirname(self.path))
-
-	def File(self):
-		"return a string for the file part of this path"
-		return os.path.basename(self.path)
-
-	def Components(self):
-		"""return a list of the components of this path."""
-		return self.path.split('/')
-
-	def FindCaseless(self):
-		"""Given a path which may not be not correct in terms of case,
-		search the filesystem to find the corresponding, correct path.
-		paths are assumed to be absolute and normalised (which they
-		should be in this class).
-
-		Assumes that the path is more right than wrong, i.e. starts
-		with the full path and tests for existence - then takes the
-		last component off and check for that.
-
-		This will be inefficient if used in cases where the file 
-		has a high probability of not existing.
-		"""
-
-		if os.path.exists(self.path):
-			return Path(self.path)
-
-		unknown_elements = []
-		tail = self.path
-		head = None
-		while tail != '': 
-			if os.path.exists(tail):
-				break
-			else:
-				(tail,head) = os.path.split(tail)
-				#print "(head,tail) = (%s,%s)\n" % (head,tail)
-				unknown_elements.append(head)
-
-		if tail == None:
-			result = ""
-		else:
-			result = tail
-
-		# Now we know the bits that may be wrong so we can search for them
-		unknown_elements.reverse()
-		for item in unknown_elements:
-			possible = os.path.join(result, item) 
-			if os.path.exists(possible):
-				result = possible
-				continue # not finished yet - only this element is ok
-
-			# Nope, we really do have to search for this component of the path
-			possible = None
-			if result:
-				for file in os.listdir(result):
-					if file.lower() == item.lower():
-						possible = os.path.join(result,file)
-						break # find first matching name (might not be right)
-				if possible is None:
-					result = "" 
-					break # really couldn't find the file
-				result = possible
-
-		if result == "":
-			return None
-
-		return Path(result)
-
-	def From(self,source):
-		"""Returns the relative path from 'source' to here."""
-		list1 = source.Absolute().Components()
-		list2 = self.Absolute().Components()
-
-		# on windows if the drives are different
-		# then the relative path is the absolute one.
-		if isWin and list1[0] != list2[0]:
-			return self.Absolute()
-
-		final_list = []
-		for item in list1:
-			if list2 != []:
-				for widget in list2:
-					if item == widget:
-						list2.pop(0)
-						break
-					else:
-						final_list.insert(0, "..")
-						final_list.append(widget)
-						list2.pop(0)
-						break
-			else:
-				final_list.insert(0, "..")
-
-		final_list.extend(list2)
-
-		return Join(*final_list)
-
-	def GetShellPath(self):
-		"""Returns correct slashes according to os type as a string
-		"""
-		if isWin:
-			if  "OSTYPE" in os.environ and os.environ['OSTYPE'] == "cygwin" :
-				return self.path
-
-			return self.path.replace("/", "\\")
-
-		return self.path
-
-
-# Module functions
-
-def Join(*arguments):
-	"""Concatenate the given list to make a generic path object. 
-	
-	This can accept both strings and Path objects, and join
-	them "intelligently" to make a complete path."""
-	list = []
-	for arg in arguments:
-		if isinstance(arg, Path):
-			list.append(arg.path)
-		else:
-			list.append(arg)
-		
-	return Path(*list)
-
-def CurrentDir():
-	"return a Path object for the current working directory"
-	return Path(os.getcwd())
-
-def NormalisePathList(aList):
-	"""Convert a list of strings into a list of Path objects"""
-	return map(lambda x: Path(x), aList)
-
-def Where(afile):
-	"""Return the location of a file 'afile' in the system path.
-	
-	On windows, adds .exe onto the filename if it's not there. Returns the first location it found or None if it wasn't found.
-	
-	>>> Where("python")
-	"/usr/bin/python"
-	>>> Where("nonexistentfile")
-	None
-	"""
-	location = None
-	if sys.platform.startswith("win"):
-		if not afile.lower().endswith(".exe"):
-			afile += ".exe"
-			
-	for current_file in [os.path.join(loop_number,afile) for loop_number in
-			     os.environ["PATH"].split(os.path.pathsep)]:
-		if os.path.isfile(current_file):
-			location = current_file
-			break
-	return location
-
-# end of generic_path module
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# generic_path module
+#
+
+import os
+import sys
+import re
+import types
+
+# are we on windows, and if so what is the current drive letter
+isWin = sys.platform.lower().startswith("win")
+if isWin:
+	drive = re.match('^([A-Za-z]:)',os.getcwd()).group(0)
+
+# regex for "bare" drive letters	
+driveRE = re.compile('^[A-Za-z]:$')
+
+# Base class
+
+class Path:
+	"""This class represents a file path.
+	
+	A generic path object supports operations without needing to know
+	about Windows and Linux differences. The standard str() function can
+	obtain a string version of the path in Local format for use by
+	platform-specific functions (file opening for example).
+	
+	We use forward slashes as path separators (even on Windows).
+	
+	For example,
+	
+		path1 = generic_path.Path("/foo")
+		path2 = generic_path.Path("bar", "bing.bang")
+		
+		print str(path1.Append(path2))
+		
+	Prints /foo/bar/bing.bang		on Linux
+	Prints c:/foo/bar/bing.bang		on Windows (if c is the current drive)
+	""" 
+		
+	def __init__(self, *arguments):
+		"""construct a path from a list of path elements"""
+		
+		if len(arguments) == 0:
+			self.path = ""
+			return
+		
+		list = []
+		for i,arg in enumerate(arguments):
+			if isWin:
+				if i == 0:
+					# If the first element starts with \ or / then we will
+					# add the current drive letter to make a fully absolute path
+					if arg.startswith("\\\\"):
+						list.append(arg) # A UNC path - don't mess with it
+					elif arg.startswith("\\") or arg.startswith("/"):
+						list.append(drive + arg)
+					# If the first element is a bare drive then dress it with a \
+					# temporarily otherwise "join" will not work properly.
+					elif driveRE.match(arg):
+						list.append(arg + "\\")
+					# nothing special about the first element
+					else:
+						list.append(arg)
+				else:
+					if arg.startswith("\\\\"):
+						raise ValueError("non-initial path components must not start with \\\\ : %s" % arg)
+					else:
+						list.append(arg)
+				if ";" in arg:
+					raise ValueError("An individual windows Path may not contain ';' : %s" % arg)
+			else:
+				list.append(arg)
+	
+		self.path = os.path.join(*list)
+		
+		# normalise to avoid nastiness with dots and multiple separators
+		# but do not normalise "" as it will become "."
+		if self.path != "":
+			self.path = os.path.normpath(self.path)
+		
+		# always use forward slashes as separators
+		self.path = self.path.replace("\\", "/")
+		
+		# remove trailing slashes unless we are just /
+		if self.path != "/":
+			self.path = self.path.rstrip("/")
+		
+	def __str__(self):
+		return self.path
+	
+	def GetNeutralStr(self):
+		"""return the path as a string that could be included in other paths."""
+		return self.path.replace(":","").replace("/","")
+
+	def GetLocalString(self):
+		"""return a string in the local file-system format.
+		
+		e.g. C:/tmp on Windows or /C/tmp on Linux"""
+		return self.path
+	
+	def isAbsolute(self):
+		"test whether this path is absolute or relative"
+		# C: is an absolute directory
+		return (os.path.isabs(self.path) or driveRE.match(self.path))
+	
+	def Absolute(self):
+		"""return an object for the absolute version of this path.
+		
+		Prepends the current working directory to relative paths and
+		the current drive (on Windows) to /something type paths."""
+		# leave C: alone as abspath will stick the cwd on
+		if driveRE.match(self.path):
+			return Path(self.path)
+		else:
+			return Path(os.path.abspath(self.path))
+	
+	def Append(self, *arguments):
+		"return an object with path elements added at the end of this path"
+		return Join(*((self,) + arguments))
+	
+	def Prepend(self, *arguments):
+		"return an object with path elements added at the start of this path"
+		return Join(*(arguments + (self,)))
+	
+	def isDir(self):
+		"test whether this path points to an existing directory"
+		# C: is a directory
+		return (os.path.isdir(self.path) or driveRE.match(self.path))
+	
+	def isFile(self):
+		"test whether this path points to an existing file"
+		return os.path.isfile(self.path)
+
+	def Exists(self):
+		"test whether this path exists in the filesystem"
+		if driveRE.match(self.path):
+			return os.path.exists(self.path + "/")
+		else:
+			return os.path.exists(self.path)
+		
+	def Dir(self):
+		"return an object for the directory part of this path"
+		if driveRE.match(self.path):
+			return Path(self.path)
+		else:
+			return Path(os.path.dirname(self.path))
+
+	def File(self):
+		"return a string for the file part of this path"
+		return os.path.basename(self.path)
+
+	def Components(self):
+		"""return a list of the components of this path."""
+		return self.path.split('/')
+
+	def FindCaseless(self):
+		"""Given a path which may not be not correct in terms of case,
+		search the filesystem to find the corresponding, correct path.
+		paths are assumed to be absolute and normalised (which they
+		should be in this class).
+
+		Assumes that the path is more right than wrong, i.e. starts
+		with the full path and tests for existence - then takes the
+		last component off and check for that.
+
+		This will be inefficient if used in cases where the file 
+		has a high probability of not existing.
+		"""
+
+		if os.path.exists(self.path):
+			return Path(self.path)
+
+		unknown_elements = []
+		tail = self.path
+		head = None
+		while tail != '': 
+			if os.path.exists(tail):
+				break
+			else:
+				(tail,head) = os.path.split(tail)
+				#print "(head,tail) = (%s,%s)\n" % (head,tail)
+				unknown_elements.append(head)
+
+		if tail == None:
+			result = ""
+		else:
+			result = tail
+
+		# Now we know the bits that may be wrong so we can search for them
+		unknown_elements.reverse()
+		for item in unknown_elements:
+			possible = os.path.join(result, item) 
+			if os.path.exists(possible):
+				result = possible
+				continue # not finished yet - only this element is ok
+
+			# Nope, we really do have to search for this component of the path
+			possible = None
+			if result:
+				for file in os.listdir(result):
+					if file.lower() == item.lower():
+						possible = os.path.join(result,file)
+						break # find first matching name (might not be right)
+				if possible is None:
+					result = "" 
+					break # really couldn't find the file
+				result = possible
+
+		if result == "":
+			return None
+
+		return Path(result)
+
+	def From(self,source):
+		"""Returns the relative path from 'source' to here."""
+		list1 = source.Absolute().Components()
+		list2 = self.Absolute().Components()
+
+		# on windows if the drives are different
+		# then the relative path is the absolute one.
+		if isWin and list1[0] != list2[0]:
+			return self.Absolute()
+
+		final_list = []
+		for item in list1:
+			if list2 != []:
+				for widget in list2:
+					if item == widget:
+						list2.pop(0)
+						break
+					else:
+						final_list.insert(0, "..")
+						final_list.append(widget)
+						list2.pop(0)
+						break
+			else:
+				final_list.insert(0, "..")
+
+		final_list.extend(list2)
+
+		return Join(*final_list)
+
+	def GetShellPath(self):
+		"""Returns correct slashes according to os type as a string
+		"""
+		if isWin:
+			if  "OSTYPE" in os.environ and os.environ['OSTYPE'] == "cygwin" :
+				return self.path
+
+			return self.path.replace("/", "\\")
+
+		return self.path
+
+
+# Module functions
+
+def Join(*arguments):
+	"""Concatenate the given list to make a generic path object. 
+	
+	This can accept both strings and Path objects, and join
+	them "intelligently" to make a complete path."""
+	list = []
+	for arg in arguments:
+		if isinstance(arg, Path):
+			list.append(arg.path)
+		else:
+			list.append(arg)
+		
+	return Path(*list)
+
+def CurrentDir():
+	"return a Path object for the current working directory"
+	return Path(os.getcwd())
+
+def NormalisePathList(aList):
+	"""Convert a list of strings into a list of Path objects"""
+	return map(lambda x: Path(x), aList)
+
+def Where(afile):
+	"""Return the location of a file 'afile' in the system path.
+	
+	On windows, adds .exe onto the filename if it's not there. Returns the first location it found or None if it wasn't found.
+	
+	>>> Where("python")
+	"/usr/bin/python"
+	>>> Where("nonexistentfile")
+	None
+	"""
+	location = None
+	if sys.platform.startswith("win"):
+		if not afile.lower().endswith(".exe"):
+			afile += ".exe"
+			
+	for current_file in [os.path.join(loop_number,afile) for loop_number in
+			     os.environ["PATH"].split(os.path.pathsep)]:
+		if os.path.isfile(current_file):
+			location = current_file
+			break
+	return location
+
+# end of generic_path module
--- a/sbsv2/raptor/python/mmpparser.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/mmpparser.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,388 +1,388 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# MMPParser module
-# This module provides a parser for MMP files which can work
-# with any supplied MMPBackend
-#
-
-
-# We have to define the grammar in the following order:
-# Actions - because the rules reference them
-# Terminals - because the rules use them
-# Rules
-# Root rule - e.g. "an MMP is a list of statements"
-#
-# This seems inverted but it's just the price of
-# being able to use python to define the grammar.
-
-
-from pyparsing import *
-import sys
-
-# For multiline matching we must exclude \n from the list of whitespace
-# characters.  If we don't then Parse Elements like OneOrMore won't stop
-# at line boundaries.
-# \r doesn't matter as it is always followed by \n anyhow it is
-# redundant and may be thrown away without any loss of information.
-ParserElement.setDefaultWhitespaceChars('\t\r ')
-
-
-
-
-## Useful Parse Elements #########################################
-def String():
-	return Regex('[^ \n]+')
-
-def StringList():
-	return Group(OneOrMore(Regex('[^ \n]+')))
-
-def HexOrDecNumber():
-	return Regex('(0[xX][0-9a-fA-Z]+)|([0-9]+)')
-
-def Line(pattern):
-	return pattern.copy() + LineEnd().suppress()
-
-
-
-class MMPParser(object):
-	# Tools for whom options may be specified
-	tools = [ 'ARMCC', 'CW', 'GCC', 'MSVC', 'GCCXML', 'ARMASM', 'GCCE' ]
-
-
-	def __init__(self,statemachine):
-		self.backend = statemachine
-		# Create Tokens for the tools we support
-		self.toolName = CaselessKeyword(MMPParser.tools[0])
-		for thisTool in MMPParser.tools[1:]:
-			self.toolName ^= CaselessKeyword(thisTool)
-
-		self.assignment = \
-			( \
-			Line(CaselessKeyword('ARMFPU') + String()) ^ \
-			Line(CaselessKeyword('ASSPLIBRARY') + StringList()) ^ \
-			Line(CaselessKeyword('CAPABILITY') + StringList()) ^ \
-			Line(CaselessKeyword('DOCUMENT') + StringList()) ^ \
-			Line(CaselessKeyword('EPOCHEAPSIZE') + HexOrDecNumber() + HexOrDecNumber()) ^ \
-			Line(CaselessKeyword('EPOCPROCESSPRIORITY') + String()) ^ \
-			Line(CaselessKeyword('FIRSTLIB') + String()) ^ \
-			Line(CaselessKeyword('TARGET') + String()) ^ \
-			Line(CaselessKeyword('ROMTARGET') + Optional(StringList())) ^ \
-			Line(CaselessKeyword('RAMTARGET') + String()) ^ \
-			Line(CaselessKeyword('TARGETTYPE') + String()) ^ \
-			Line(CaselessKeyword('TARGETPATH') + String()) ^ \
-			Line(CaselessKeyword('SYSTEMINCLUDE') + StringList()) ^ \
-			Line(CaselessKeyword('USERINCLUDE') + StringList()) ^ \
-			Line(CaselessKeyword('DEFFILE') + String()) ^ \
-			Line(CaselessKeyword('EXPORTLIBRARY') + String()) ^ \
-			Line(CaselessKeyword('LINKAS') + String()) ^ \
-			Line(CaselessKeyword('VENDORID') + HexOrDecNumber()) ^ \
-			Line(CaselessKeyword('OPTION') + self.toolName + StringList()) ^ \
-			Line(CaselessKeyword('LINKEROPTION') + self.toolName + StringList()) ^\
-			Line(CaselessKeyword('OPTION_REPLACE') + self.toolName + StringList()) ^ \
-			Line(CaselessKeyword('SECUREID') + HexOrDecNumber()) ^ \
-			Line(CaselessKeyword('EPOCSTACKSIZE') + HexOrDecNumber()) ^ \
-			Line(CaselessKeyword('VERSION') + String() + Optional(CaselessKeyword('EXPLICIT'))) ^ \
-			Line(CaselessKeyword('EPOCPROCESSPRIORITY') + String()) ^ \
-			Line(CaselessKeyword('NEWLIB') + String()) \
-			).setParseAction(self.backend.doAssignment) ^ \
-			( \
-			Line(CaselessKeyword('SOURCE') + StringList()).setParseAction(self.backend.doSourceAssignment) \
-			).setParseAction(self.backend.doSourceAssignment) ^ \
-			( \
-			Line(CaselessKeyword('RESOURCE') + StringList()).setParseAction(self.backend.doOldResourceAssignment) \
-			).setParseAction(self.backend.doOldResourceAssignment) ^ \
-			( \
-			Line(CaselessKeyword('SYSTEMRESOURCE') + StringList()).setParseAction(self.backend.doResourceAssignment) \
-			).setParseAction(self.backend.doOldResourceAssignment) ^ \
-			( \
-			Line(CaselessKeyword('SOURCEPATH') + String()).setParseAction(self.backend.doSourceAssignment) \
-			).setParseAction(self.backend.doSourcePathAssignment) ^ \
-			( \
-			Line((CaselessKeyword('UID') + Group(HexOrDecNumber() + Optional(HexOrDecNumber())))).setParseAction(self.backend.doUIDAssignment) \
-			).setParseAction(self.backend.doUIDAssignment)  ^ \
-			( \
-			Line(CaselessKeyword('LANG') + StringList()) \
-			).setParseAction(self.backend.doAppend) ^ \
-			( \
-			Line(CaselessKeyword('LIBRARY') + StringList()) \
-			).setParseAction(self.backend.doAppend) ^ \
-			( \
-			Line(CaselessKeyword('DEBUGLIBRARY') + StringList()) \
-			).setParseAction(self.backend.doAppend) ^ \
-			( \
-			Line(CaselessKeyword('MACRO') + Optional(StringList())) \
-			).setParseAction(self.backend.doAppend) ^ \
-			( \
-			Line(CaselessKeyword('AIF') + StringList()) \
-			).setParseAction(self.backend.doDeprecated) ^ \
-			( \
-			Line(CaselessKeyword('STATICLIBRARY') + StringList()) \
-			).setParseAction(self.backend.doAppend)
-
-		self.switch = \
-			(Line( \
-			CaselessKeyword('ALWAYS_BUILD_AS_ARM') ^ \
-			CaselessKeyword('ASSPEXPORTS') ^ \
-			CaselessKeyword('ASSPABI') ^ \
-			CaselessKeyword('ASSPEXPORTS') ^ \
-			CaselessKeyword('DEBUGGABLE') ^ \
-			CaselessKeyword('DEBUGGABLE_UDEBONLY') ^ \
-			CaselessKeyword('EPOCALLOWDLLDATA') ^ \
-			CaselessKeyword('EPOCCALLDLLENTRYPOINTS') ^ \
-			CaselessKeyword('EPOCFIXEDPROCESS') ^ \
-			CaselessKeyword('EXPORTUNFROZEN') ^ \
-			CaselessKeyword('FEATUREVARIANT') ^ \
-			CaselessKeyword('BYTEPAIRCOMPRESSTARGET') ^ \
-			CaselessKeyword('INFLATECOMPRESSTARGET') ^ \
-			CaselessKeyword('NOCOMPRESSTARGET') ^ \
-			CaselessKeyword('NOLINKTIMECODEGENERATION') ^ \
-			CaselessKeyword('NOMULTIFILECOMPILATION') ^ \
-			CaselessKeyword('COMPRESSTARGET') ^ \
-			CaselessKeyword('NOEXPORTLIBRARY') ^ \
-			CaselessKeyword('NOSTRICTDEF') ^ \
-			CaselessKeyword('SRCDBG') ^ \
-			CaselessKeyword('STRICTDEPEND') ^ \
-			CaselessKeyword('STDCPP') ^ \
-			CaselessKeyword('NOSTDCPP') ^ \
-			CaselessKeyword('SMPSAFE') ^ \
-			CaselessKeyword('PAGED') ^ \
-			CaselessKeyword('PAGEDCODE') ^ \
-			CaselessKeyword('PAGEDDATA') ^ \
-			CaselessKeyword('UNPAGED') ^ \
-			CaselessKeyword('UNPAGEDCODE') ^ \
-			CaselessKeyword('UNPAGEDDATA') ^ \
-			CaselessKeyword('WCHARENTRYPOINT') \
-			)).setParseAction(self.backend.doSetSwitch)
-
-		# General
-
-		self.blankline = (LineStart() + Regex('[\t\r ]*') + LineEnd().suppress() \
-			).setParseAction(self.backend.doBlankLine)
-
-		self.preProcessorComment = (LineStart() + Regex('# .*') + LineEnd().suppress() 
-			).setParseAction(self.backend.doPreProcessorComment)
-
-		self.unknownstatement = (LineStart() + Regex('.*\S+') + LineEnd().suppress() \
-			).setParseAction(self.backend.doUnknownStatement)
-			
-		self.unknownBlockBody = (\
-			(Regex("[^\n]+?\s*") + LineEnd().suppress()).setParseAction(self.backend.doStartUnknown) + \
-			ZeroOrMore(self.unknownstatement) \
-			).setParseAction(self.backend.doEndUnknown) 
-
-		# Platform
-
-		self.ARMCCBlockStatement = \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			CaselessKeyword('ARMRT') ^ \
-			CaselessKeyword('ARMINC') \
-			).setParseAction(self.backend.doSetSwitch) ^ \
-			Line( \
-			(CaselessKeyword('ARMLIBS') + StringList()) \
-			).setParseAction(self.backend.doAppend)
-
-		self.WINSBlockStatement = \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			(CaselessKeyword('BASEADDRESS') + HexOrDecNumber()) \
-			).setParseAction(self.backend.doAssignment) ^ \
-			Line( \
-			(CaselessKeyword('WIN32_LIBRARY') + StringList()) \
-			).setParseAction(self.backend.doAppend) ^ \
-			Line( \
-			(CaselessKeyword('WIN32_RESOURCE') + StringList()) \
-			).setParseAction(self.backend.doAppend) ^ \
-			Line( \
-			CaselessKeyword('WIN32_HEADERS') ^ \
-			CaselessKeyword('COPY_FOR_STATIC_LINKAGE')			
-			).setParseAction(self.backend.doSetSwitch)
-
-		self.TOOLSBlockStatement = \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			(CaselessKeyword('WIN32_LIBRARY') + StringList()) \
-			).setParseAction(self.backend.doAppend)
-
-		self.platformBlock = ( \
-			((CaselessKeyword('ARMCC') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.ARMCCBlockStatement)) ^ \
-			((CaselessKeyword('WINS') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement)) ^ \
-			((CaselessKeyword('WINSCW') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement)) ^ \
-			(CaselessKeyword('MARM') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) ^ \
-			((CaselessKeyword('TOOLS') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.TOOLSBlockStatement)) ^ \
-			(CaselessKeyword('WINC') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement) \
-			).setParseAction(self.backend.doEndPlatform)
-
-		# Resource
-			
-		self.resourceSetting= \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			(CaselessKeyword('TARGET') + String()) ^ \
-			(CaselessKeyword('TARGETPATH') + String()) ^ \
-			(CaselessKeyword('UID') + HexOrDecNumber()) \
-			).setParseAction(self.backend.doResourceAssignment) ^ \
-			Line( \
-			(CaselessKeyword('DEPENDS') + StringList()) ^ \
-			(CaselessKeyword('LANG') + StringList()) \
-			).setParseAction(self.backend.doResourceAppend) ^ \
-			Line( \
-			CaselessKeyword('HEADER') ^ \
-			CaselessKeyword('HEADERONLY')
-			).setParseAction(self.backend.doResourceSetSwitch)
-
-		self.resourceBlockBody = (\
-			(CaselessKeyword('RESOURCE') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartResource) \
-			 + ZeroOrMore(self.resourceSetting) \
-			).setParseAction(self.backend.doEndResource)
-
-		# Bitmap
-
-		self.bitmapSetting = \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			(CaselessKeyword('TARGETPATH') + String()) \
-			).setParseAction(self.backend.doBitmapAssignment) ^\
-			Line( \
-			(CaselessKeyword('SOURCE') + StringList()) 
-			).setParseAction(self.backend.doBitmapSourceAssignment) ^\
-			Line( \
-			(CaselessKeyword('SOURCEPATH') + String()) 
-			).setParseAction(self.backend.doBitmapSourcePathAssignment) ^\
-			Line( \
-			CaselessKeyword('HEADER')
-			).setParseAction(self.backend.doBitmapSetSwitch)
-			
-		self.bitmapBlockBody = (\
-			(CaselessKeyword('BITMAP') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartBitmap) + \
-			ZeroOrMore(self.bitmapSetting) \
-			).setParseAction(self.backend.doEndBitmap)
-			
-		# Stringtable
-		
-		self.stringTableSetting = \
-			self.blankline ^ self.preProcessorComment ^ \
-			Line( \
-			(CaselessKeyword('EXPORTPATH') + String())		
-			).setParseAction(self.backend.doStringTableAssignment) ^\
-			Line( \
-			CaselessKeyword('HEADERONLY') \
-			).setParseAction(self.backend.doStringTableSetSwitch)
-			
-		self.stringTableBlockBody = (\
-			(CaselessKeyword('STRINGTABLE') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartStringTable) + \
-			ZeroOrMore(self.stringTableSetting) \
-			).setParseAction(self.backend.doEndStringTable)		
-
-		# Top-level
-		self.block = \
-			LineStart() + CaselessLiteral("START") + White().suppress() + \
-			(self.platformBlock ^ self.resourceBlockBody ^ self.bitmapBlockBody ^ self.stringTableBlockBody ^self.unknownBlockBody) +  \
-			LineStart() + CaselessLiteral("END") + LineEnd().suppress()
-					
-
-		self.command = \
-			 self.assignment ^ self.switch
-	
-		# Unknown blocks and statements are ordered i.e. if there's a failure to match something before,
-		# then they're "caught" appropriately
-		
-		self.mmp = (ZeroOrMore(self.preProcessorComment ^ self.blankline ^ self.block ^ self.command ^ self.unknownstatement)).setParseAction(self.backend.doMMP) 
-
-
-## MMP Parsing Backends #########################################
-class MMPBackend(object):
-	"""A "backend" for the MMP language
-	This may be used to implement a build system,
-	source analysis tool or anything else"""
-	def __init__(self):
-		super(MMPBackend,self).__init__()
-	def doPreProcessorComment(self,s,loc,toks):
-		return "OK"
-	
-	def doStartPlatform(self,s,loc,toks):
-		return "OK"
-	def doEndPlatform(self,s,loc,toks):
-		return "OK"
-
-	def doStartResource(self,s,loc,toks):
-		return "OK"
-	def doResourceAssignment(self,s,loc,toks):
-		return "OK"
-	def doResourceAppend(self,s,loc,toks):
-		return "OK"
-	def doResourceSetSwitch(self,s,loc,toks):
-		return "OK"	
-	def doEndResource(self,s,loc,toks):
-		return "OK"
-
-	def doStartBitmap(self,s,loc,toks):
-		return "OK" 
-	def doBitmapAssignment(self,s,loc,toks):
-		return "OK" 
-	def doBitmapSourceAssignment(self,s,loc,toks):
-		return "OK" 
-	def doBitmapSourcePathAssignment(self,s,loc,toks):
-		return "OK" 
-	def doBitmapSetSwitch(self,s,loc,toks):
-		return "OK" 
-	def doEndBitmap(self,s,loc,toks):
-		return "OK"
-
-	def doStartStringtable(self,s,loc,toks):
-		return "OK" 
-	def doStringTableAssignment(self,s,loc,toks):
-		return "OK" 
-	def doStringTableSetSwitch(self,s,loc,toks):
-		return "OK" 	
-	def doEndStringtable(self,s,loc,toks):
-		return "OK"
-
-	def doSetSwitch(self,s,loc,toks):
-		return "OK"
-	def doAppend(self,s,loc,toks):
-		return "OK"
-	def doAssignment(self,s,loc,toks):
-		return "OK"
-	def doUIDAssignment(self,s,loc,toks):
-		return "OK"
-	def doSourcePathAssignment(self,s,loc,toks):
-		return "OK"
-	def doSourceAssignment(self,s,loc,toks):
-		return "OK"
-	
-	def doOldResourceAssignment(self,s,loc,toks):
-		return "OK"
-	
-	def doUnknownStatement(self,s,loc,toks):
-		return "OK"
-	def doStartUnknown(self,s,loc,toks):
-		return "OK"
-	def doEndUnknown(self,s,loc,toks):
-		return "OK"
-	
-	def doBlankLine(self,s,loc,toks):
-		return "OK"
-	
-	def doDeprecated(self,s,loc,toks):
-		return "OK"
-		
-	def doNothing(self):
-		return "OK"
-	
-	def doMMP(self,s,loc,toks):
-		return "MMP"
-
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# MMPParser module
+# This module provides a parser for MMP files which can work
+# with any supplied MMPBackend
+#
+
+
+# We have to define the grammar in the following order:
+# Actions - because the rules reference them
+# Terminals - because the rules use them
+# Rules
+# Root rule - e.g. "an MMP is a list of statements"
+#
+# This seems inverted but it's just the price of
+# being able to use python to define the grammar.
+
+
+from pyparsing import *
+import sys
+
+# For multiline matching we must exclude \n from the list of whitespace
+# characters.  If we don't then Parse Elements like OneOrMore won't stop
+# at line boundaries.
+# \r doesn't matter as it is always followed by \n anyhow it is
+# redundant and may be thrown away without any loss of information.
+ParserElement.setDefaultWhitespaceChars('\t\r ')
+
+
+
+
+## Useful Parse Elements #########################################
+def String():
+	return Regex('[^ \n]+')
+
+def StringList():
+	return Group(OneOrMore(Regex('[^ \n]+')))
+
+def HexOrDecNumber():
+	return Regex('(0[xX][0-9a-fA-Z]+)|([0-9]+)')
+
+def Line(pattern):
+	return pattern.copy() + LineEnd().suppress()
+
+
+
+class MMPParser(object):
+	# Tools for whom options may be specified
+	tools = [ 'ARMCC', 'CW', 'GCC', 'MSVC', 'GCCXML', 'ARMASM', 'GCCE' ]
+
+
+	def __init__(self,statemachine):
+		self.backend = statemachine
+		# Create Tokens for the tools we support
+		self.toolName = CaselessKeyword(MMPParser.tools[0])
+		for thisTool in MMPParser.tools[1:]:
+			self.toolName ^= CaselessKeyword(thisTool)
+
+		self.assignment = \
+			( \
+			Line(CaselessKeyword('ARMFPU') + String()) ^ \
+			Line(CaselessKeyword('ASSPLIBRARY') + StringList()) ^ \
+			Line(CaselessKeyword('CAPABILITY') + StringList()) ^ \
+			Line(CaselessKeyword('DOCUMENT') + StringList()) ^ \
+			Line(CaselessKeyword('EPOCHEAPSIZE') + HexOrDecNumber() + HexOrDecNumber()) ^ \
+			Line(CaselessKeyword('EPOCPROCESSPRIORITY') + String()) ^ \
+			Line(CaselessKeyword('FIRSTLIB') + String()) ^ \
+			Line(CaselessKeyword('TARGET') + String()) ^ \
+			Line(CaselessKeyword('ROMTARGET') + Optional(StringList())) ^ \
+			Line(CaselessKeyword('RAMTARGET') + String()) ^ \
+			Line(CaselessKeyword('TARGETTYPE') + String()) ^ \
+			Line(CaselessKeyword('TARGETPATH') + String()) ^ \
+			Line(CaselessKeyword('SYSTEMINCLUDE') + StringList()) ^ \
+			Line(CaselessKeyword('USERINCLUDE') + StringList()) ^ \
+			Line(CaselessKeyword('DEFFILE') + String()) ^ \
+			Line(CaselessKeyword('EXPORTLIBRARY') + String()) ^ \
+			Line(CaselessKeyword('LINKAS') + String()) ^ \
+			Line(CaselessKeyword('VENDORID') + HexOrDecNumber()) ^ \
+			Line(CaselessKeyword('OPTION') + self.toolName + StringList()) ^ \
+			Line(CaselessKeyword('LINKEROPTION') + self.toolName + StringList()) ^\
+			Line(CaselessKeyword('OPTION_REPLACE') + self.toolName + StringList()) ^ \
+			Line(CaselessKeyword('SECUREID') + HexOrDecNumber()) ^ \
+			Line(CaselessKeyword('EPOCSTACKSIZE') + HexOrDecNumber()) ^ \
+			Line(CaselessKeyword('VERSION') + String() + Optional(CaselessKeyword('EXPLICIT'))) ^ \
+			Line(CaselessKeyword('EPOCPROCESSPRIORITY') + String()) ^ \
+			Line(CaselessKeyword('NEWLIB') + String()) \
+			).setParseAction(self.backend.doAssignment) ^ \
+			( \
+			Line(CaselessKeyword('SOURCE') + StringList()).setParseAction(self.backend.doSourceAssignment) \
+			).setParseAction(self.backend.doSourceAssignment) ^ \
+			( \
+			Line(CaselessKeyword('RESOURCE') + StringList()).setParseAction(self.backend.doOldResourceAssignment) \
+			).setParseAction(self.backend.doOldResourceAssignment) ^ \
+			( \
+			Line(CaselessKeyword('SYSTEMRESOURCE') + StringList()).setParseAction(self.backend.doResourceAssignment) \
+			).setParseAction(self.backend.doOldResourceAssignment) ^ \
+			( \
+			Line(CaselessKeyword('SOURCEPATH') + String()).setParseAction(self.backend.doSourceAssignment) \
+			).setParseAction(self.backend.doSourcePathAssignment) ^ \
+			( \
+			Line((CaselessKeyword('UID') + Group(HexOrDecNumber() + Optional(HexOrDecNumber())))).setParseAction(self.backend.doUIDAssignment) \
+			).setParseAction(self.backend.doUIDAssignment)  ^ \
+			( \
+			Line(CaselessKeyword('LANG') + StringList()) \
+			).setParseAction(self.backend.doAppend) ^ \
+			( \
+			Line(CaselessKeyword('LIBRARY') + StringList()) \
+			).setParseAction(self.backend.doAppend) ^ \
+			( \
+			Line(CaselessKeyword('DEBUGLIBRARY') + StringList()) \
+			).setParseAction(self.backend.doAppend) ^ \
+			( \
+			Line(CaselessKeyword('MACRO') + Optional(StringList())) \
+			).setParseAction(self.backend.doAppend) ^ \
+			( \
+			Line(CaselessKeyword('AIF') + StringList()) \
+			).setParseAction(self.backend.doDeprecated) ^ \
+			( \
+			Line(CaselessKeyword('STATICLIBRARY') + StringList()) \
+			).setParseAction(self.backend.doAppend)
+
+		self.switch = \
+			(Line( \
+			CaselessKeyword('ALWAYS_BUILD_AS_ARM') ^ \
+			CaselessKeyword('ASSPEXPORTS') ^ \
+			CaselessKeyword('ASSPABI') ^ \
+			CaselessKeyword('ASSPEXPORTS') ^ \
+			CaselessKeyword('DEBUGGABLE') ^ \
+			CaselessKeyword('DEBUGGABLE_UDEBONLY') ^ \
+			CaselessKeyword('EPOCALLOWDLLDATA') ^ \
+			CaselessKeyword('EPOCCALLDLLENTRYPOINTS') ^ \
+			CaselessKeyword('EPOCFIXEDPROCESS') ^ \
+			CaselessKeyword('EXPORTUNFROZEN') ^ \
+			CaselessKeyword('FEATUREVARIANT') ^ \
+			CaselessKeyword('BYTEPAIRCOMPRESSTARGET') ^ \
+			CaselessKeyword('INFLATECOMPRESSTARGET') ^ \
+			CaselessKeyword('NOCOMPRESSTARGET') ^ \
+			CaselessKeyword('NOLINKTIMECODEGENERATION') ^ \
+			CaselessKeyword('NOMULTIFILECOMPILATION') ^ \
+			CaselessKeyword('COMPRESSTARGET') ^ \
+			CaselessKeyword('NOEXPORTLIBRARY') ^ \
+			CaselessKeyword('NOSTRICTDEF') ^ \
+			CaselessKeyword('SRCDBG') ^ \
+			CaselessKeyword('STRICTDEPEND') ^ \
+			CaselessKeyword('STDCPP') ^ \
+			CaselessKeyword('NOSTDCPP') ^ \
+			CaselessKeyword('SMPSAFE') ^ \
+			CaselessKeyword('PAGED') ^ \
+			CaselessKeyword('PAGEDCODE') ^ \
+			CaselessKeyword('PAGEDDATA') ^ \
+			CaselessKeyword('UNPAGED') ^ \
+			CaselessKeyword('UNPAGEDCODE') ^ \
+			CaselessKeyword('UNPAGEDDATA') ^ \
+			CaselessKeyword('WCHARENTRYPOINT') \
+			)).setParseAction(self.backend.doSetSwitch)
+
+		# General
+
+		self.blankline = (LineStart() + Regex('[\t\r ]*') + LineEnd().suppress() \
+			).setParseAction(self.backend.doBlankLine)
+
+		self.preProcessorComment = (LineStart() + Regex('# .*') + LineEnd().suppress() 
+			).setParseAction(self.backend.doPreProcessorComment)
+
+		self.unknownstatement = (LineStart() + Regex('.*\S+') + LineEnd().suppress() \
+			).setParseAction(self.backend.doUnknownStatement)
+			
+		self.unknownBlockBody = (\
+			(Regex("[^\n]+?\s*") + LineEnd().suppress()).setParseAction(self.backend.doStartUnknown) + \
+			ZeroOrMore(self.unknownstatement) \
+			).setParseAction(self.backend.doEndUnknown) 
+
+		# Platform
+
+		self.ARMCCBlockStatement = \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			CaselessKeyword('ARMRT') ^ \
+			CaselessKeyword('ARMINC') \
+			).setParseAction(self.backend.doSetSwitch) ^ \
+			Line( \
+			(CaselessKeyword('ARMLIBS') + StringList()) \
+			).setParseAction(self.backend.doAppend)
+
+		self.WINSBlockStatement = \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			(CaselessKeyword('BASEADDRESS') + HexOrDecNumber()) \
+			).setParseAction(self.backend.doAssignment) ^ \
+			Line( \
+			(CaselessKeyword('WIN32_LIBRARY') + StringList()) \
+			).setParseAction(self.backend.doAppend) ^ \
+			Line( \
+			(CaselessKeyword('WIN32_RESOURCE') + StringList()) \
+			).setParseAction(self.backend.doAppend) ^ \
+			Line( \
+			CaselessKeyword('WIN32_HEADERS') ^ \
+			CaselessKeyword('COPY_FOR_STATIC_LINKAGE')			
+			).setParseAction(self.backend.doSetSwitch)
+
+		self.TOOLSBlockStatement = \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			(CaselessKeyword('WIN32_LIBRARY') + StringList()) \
+			).setParseAction(self.backend.doAppend)
+
+		self.platformBlock = ( \
+			((CaselessKeyword('ARMCC') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.ARMCCBlockStatement)) ^ \
+			((CaselessKeyword('WINS') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement)) ^ \
+			((CaselessKeyword('WINSCW') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement)) ^ \
+			(CaselessKeyword('MARM') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) ^ \
+			((CaselessKeyword('TOOLS') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.TOOLSBlockStatement)) ^ \
+			(CaselessKeyword('WINC') + LineEnd().suppress()).setParseAction(self.backend.doStartPlatform) + ZeroOrMore(self.WINSBlockStatement) \
+			).setParseAction(self.backend.doEndPlatform)
+
+		# Resource
+			
+		self.resourceSetting= \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			(CaselessKeyword('TARGET') + String()) ^ \
+			(CaselessKeyword('TARGETPATH') + String()) ^ \
+			(CaselessKeyword('UID') + HexOrDecNumber()) \
+			).setParseAction(self.backend.doResourceAssignment) ^ \
+			Line( \
+			(CaselessKeyword('DEPENDS') + StringList()) ^ \
+			(CaselessKeyword('LANG') + StringList()) \
+			).setParseAction(self.backend.doResourceAppend) ^ \
+			Line( \
+			CaselessKeyword('HEADER') ^ \
+			CaselessKeyword('HEADERONLY')
+			).setParseAction(self.backend.doResourceSetSwitch)
+
+		self.resourceBlockBody = (\
+			(CaselessKeyword('RESOURCE') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartResource) \
+			 + ZeroOrMore(self.resourceSetting) \
+			).setParseAction(self.backend.doEndResource)
+
+		# Bitmap
+
+		self.bitmapSetting = \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			(CaselessKeyword('TARGETPATH') + String()) \
+			).setParseAction(self.backend.doBitmapAssignment) ^\
+			Line( \
+			(CaselessKeyword('SOURCE') + StringList()) 
+			).setParseAction(self.backend.doBitmapSourceAssignment) ^\
+			Line( \
+			(CaselessKeyword('SOURCEPATH') + String()) 
+			).setParseAction(self.backend.doBitmapSourcePathAssignment) ^\
+			Line( \
+			CaselessKeyword('HEADER')
+			).setParseAction(self.backend.doBitmapSetSwitch)
+			
+		self.bitmapBlockBody = (\
+			(CaselessKeyword('BITMAP') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartBitmap) + \
+			ZeroOrMore(self.bitmapSetting) \
+			).setParseAction(self.backend.doEndBitmap)
+			
+		# Stringtable
+		
+		self.stringTableSetting = \
+			self.blankline ^ self.preProcessorComment ^ \
+			Line( \
+			(CaselessKeyword('EXPORTPATH') + String())		
+			).setParseAction(self.backend.doStringTableAssignment) ^\
+			Line( \
+			CaselessKeyword('HEADERONLY') \
+			).setParseAction(self.backend.doStringTableSetSwitch)
+			
+		self.stringTableBlockBody = (\
+			(CaselessKeyword('STRINGTABLE') + String() + LineEnd().suppress()).setParseAction(self.backend.doStartStringTable) + \
+			ZeroOrMore(self.stringTableSetting) \
+			).setParseAction(self.backend.doEndStringTable)		
+
+		# Top-level
+		self.block = \
+			LineStart() + CaselessLiteral("START") + White().suppress() + \
+			(self.platformBlock ^ self.resourceBlockBody ^ self.bitmapBlockBody ^ self.stringTableBlockBody ^self.unknownBlockBody) +  \
+			LineStart() + CaselessLiteral("END") + LineEnd().suppress()
+					
+
+		self.command = \
+			 self.assignment ^ self.switch
+	
+		# Unknown blocks and statements are ordered i.e. if there's a failure to match something before,
+		# then they're "caught" appropriately
+		
+		self.mmp = (ZeroOrMore(self.preProcessorComment ^ self.blankline ^ self.block ^ self.command ^ self.unknownstatement)).setParseAction(self.backend.doMMP) 
+
+
+## MMP Parsing Backends #########################################
+class MMPBackend(object):
+	"""A "backend" for the MMP language
+	This may be used to implement a build system,
+	source analysis tool or anything else"""
+	def __init__(self):
+		super(MMPBackend,self).__init__()
+	def doPreProcessorComment(self,s,loc,toks):
+		return "OK"
+	
+	def doStartPlatform(self,s,loc,toks):
+		return "OK"
+	def doEndPlatform(self,s,loc,toks):
+		return "OK"
+
+	def doStartResource(self,s,loc,toks):
+		return "OK"
+	def doResourceAssignment(self,s,loc,toks):
+		return "OK"
+	def doResourceAppend(self,s,loc,toks):
+		return "OK"
+	def doResourceSetSwitch(self,s,loc,toks):
+		return "OK"	
+	def doEndResource(self,s,loc,toks):
+		return "OK"
+
+	def doStartBitmap(self,s,loc,toks):
+		return "OK" 
+	def doBitmapAssignment(self,s,loc,toks):
+		return "OK" 
+	def doBitmapSourceAssignment(self,s,loc,toks):
+		return "OK" 
+	def doBitmapSourcePathAssignment(self,s,loc,toks):
+		return "OK" 
+	def doBitmapSetSwitch(self,s,loc,toks):
+		return "OK" 
+	def doEndBitmap(self,s,loc,toks):
+		return "OK"
+
+	def doStartStringtable(self,s,loc,toks):
+		return "OK" 
+	def doStringTableAssignment(self,s,loc,toks):
+		return "OK" 
+	def doStringTableSetSwitch(self,s,loc,toks):
+		return "OK" 	
+	def doEndStringtable(self,s,loc,toks):
+		return "OK"
+
+	def doSetSwitch(self,s,loc,toks):
+		return "OK"
+	def doAppend(self,s,loc,toks):
+		return "OK"
+	def doAssignment(self,s,loc,toks):
+		return "OK"
+	def doUIDAssignment(self,s,loc,toks):
+		return "OK"
+	def doSourcePathAssignment(self,s,loc,toks):
+		return "OK"
+	def doSourceAssignment(self,s,loc,toks):
+		return "OK"
+	
+	def doOldResourceAssignment(self,s,loc,toks):
+		return "OK"
+	
+	def doUnknownStatement(self,s,loc,toks):
+		return "OK"
+	def doStartUnknown(self,s,loc,toks):
+		return "OK"
+	def doEndUnknown(self,s,loc,toks):
+		return "OK"
+	
+	def doBlankLine(self,s,loc,toks):
+		return "OK"
+	
+	def doDeprecated(self,s,loc,toks):
+		return "OK"
+		
+	def doNothing(self):
+		return "OK"
+	
+	def doMMP(self,s,loc,toks):
+		return "MMP"
+
+
--- a/sbsv2/raptor/python/pluginbox.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/pluginbox.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,68 +1,68 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# PluginBox module - finds classes 
-#
-
-from os import listdir
-import re
-from types import TypeType, ModuleType
-import sys
-
-class PluginModule(object):
-	"""Represents a module containing plugin classes """
-	def __init__(self, file):
-		self.module = __import__(file)
-		self.classes = []
-		self.__findclasses(self.module)
-
-	def __findclasses(self,module):
-		for c in module.__dict__:
-			mbr = module.__dict__[c]
-			if type(mbr) == TypeType:
-				self.classes.append(mbr)
-
-class PluginBox(object):
-	"""
-	A container that locates all the classes in a directory.
-	Example usage:
-
-		from person import Person
-		ps = PluginBox("plugins")
-		people = []
-		for i in ps.classesof(Person):
-			people.append(i())
-
-	"""
-	plugfilenamere=re.compile('^(.*)\.py$',re.I)
-	def __init__(self, plugindirectory):
-		self.pluginlist = []
-		self.plugindir = plugindirectory
-		sys.path.append(str(self.plugindir))
-		for f in listdir(plugindirectory):
-			m = PluginBox.plugfilenamere.match(f)
-			if m is not None:
-				self.pluginlist.append(PluginModule(m.groups()[0]))
-		sys.path = sys.path[:-1]
-
-	def classesof(self, classtype):
-		"""return a list of all classes that are subclasses of <classtype>"""
-		classes = []
-		for p in self.pluginlist:
-			for c in p.classes:
-				if issubclass(c, classtype):
-					if c.__name__ != classtype.__name__:
-						classes.append(c)
-		return classes
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# PluginBox module - finds classes 
+#
+
+from os import listdir
+import re
+from types import TypeType, ModuleType
+import sys
+
+class PluginModule(object):
+	"""Represents a module containing plugin classes """
+	def __init__(self, file):
+		self.module = __import__(file)
+		self.classes = []
+		self.__findclasses(self.module)
+
+	def __findclasses(self,module):
+		for c in module.__dict__:
+			mbr = module.__dict__[c]
+			if type(mbr) == TypeType:
+				self.classes.append(mbr)
+
+class PluginBox(object):
+	"""
+	A container that locates all the classes in a directory.
+	Example usage:
+
+		from person import Person
+		ps = PluginBox("plugins")
+		people = []
+		for i in ps.classesof(Person):
+			people.append(i())
+
+	"""
+	plugfilenamere=re.compile('^(.*)\.py$',re.I)
+	def __init__(self, plugindirectory):
+		self.pluginlist = []
+		self.plugindir = plugindirectory
+		sys.path.append(str(self.plugindir))
+		for f in listdir(plugindirectory):
+			m = PluginBox.plugfilenamere.match(f)
+			if m is not None:
+				self.pluginlist.append(PluginModule(m.groups()[0]))
+		sys.path = sys.path[:-1]
+
+	def classesof(self, classtype):
+		"""return a list of all classes that are subclasses of <classtype>"""
+		classes = []
+		for p in self.pluginlist:
+			for c in p.classes:
+				if issubclass(c, classtype):
+					if c.__name__ != classtype.__name__:
+						classes.append(c)
+		return classes
+
--- a/sbsv2/raptor/python/plugins/dummyplugin.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/dummyplugin.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,22 +1,22 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Test plugin
-#
-
-
-class DummyPlugin(object):
-	def __init__(self):
-		print "DummyPlugin Init"
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Test plugin
+#
+
+
+class DummyPlugin(object):
+	def __init__(self):
+		print "DummyPlugin Init"
+
--- a/sbsv2/raptor/python/plugins/filter_carbide.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_carbide.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,133 +1,133 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Format Raptor verbose log output for the Carbide IDE
-#
-
-
-import os
-import re
-import sys
-import raptor
-import filter_interface
-import filter_utils
-
-
-class FilterCarbide(filter_interface.Filter):
-	"""Carbide IDE filter
-	Strips most verbose output leaving tools calls, tool output and formatted errors/warnings."""
-	
-	# ignore all general, benign, make output
-	ignore = re.compile('(make(\.exe)?: Nothing to be done for \`.+\'|make(\.exe)?: \[.+\] Error \d+ \(ignored\)|.*make(.exe)?\[\d\]: (Entering|Leaving) directory \`.+\')')
-	
-	stdout = filter_utils.AutoFlushedStream(sys.stdout)
-	stderr = filter_utils.AutoFlushedStream(sys.stderr)
-	
-	recipeFactory = filter_utils.RecipeFactory()
-	
-	def __init__(self):
-		self.__errors = 0
-		self.__warnings = 0
-		self.__recipe = None
-
-	def open(self, aRaptorInstance):
-		return True
-		
-	def write(self, aLine):
-		"""Process output on the fly and format appropriately for the Carbide IDE.
-		Most verbose output is discarded leaving tools calls, tool output and formatted errors
-		and warnings.
-		Identified errors go to stderr so that they will be highlighted in the IDE console."""
-		
-		if FilterCarbide.ignore.match(aLine):
-			return
-		
-		logHeader = filter_utils.logHeader.match(aLine)
-		if logHeader:
-			FilterCarbide.stdout.write("sbs version: " + logHeader.group("version")+"\n\n")
-			return
-		
-		clean = filter_utils.clean.match(aLine)
-		if clean:
-			for file in clean.group("removals").split():
-				FilterCarbide.stdout.write("clean: " + file + "\n")
-			return
-		
-		exports = filter_utils.exports.match(aLine)
-		if exports:
-			FilterCarbide.stdout.write("export: " + exports.group("source") + " to " + exports.group("destination") + "\n")
-			return
-		
-		
-		if self.__recipe:
-			self.__recipe.addLine(aLine)
-			
-			if self.__recipe.isComplete():
-				for call in self.__recipe.getCalls():
-					FilterCarbide.stdout.write(call + "\n")				
-		else:		
-			logTag = filter_utils.logTag.match(aLine)
-			if logTag:
-				tagName = logTag.group("name")			
-				if tagName == "recipe":
-					if self.__recipe:
-						self.__recipe.addLine(aLine)
-					else:
-						self.__recipe = FilterCarbide.recipeFactory.newRecipe(aLine)						
-				elif tagName == "error":
-					self.__errors += 1
-					FilterCarbide.stderr.write("Error: " + filter_utils.logTag.sub("", aLine) + "\n")
-				elif tagName == "warning":
-					self.__warnings += 1
-					FilterCarbide.stdout.write("Warning: " + filter_utils.logTag.sub("", aLine) + "\n")
-				# we're not interested in any other tagged output
-				return
-			else:
-				# Not a recipe, and not tagged output that we know about.
-				# Output this anyway, just in case it's something important
-				FilterCarbide.stdout.write(aLine)
-		
-		
-		if self.__recipe and self.__recipe.isComplete():
-			errors = 0
-			warnings = 0			
-
-			recipeOutput = self.__recipe.getOutput()
-			recipeWarnings = self.__recipe.getWarnings()
-			recipeErrors = self.__recipe.getErrors()
-
-			if len(recipeOutput):
-				FilterCarbide.stdout.writelines(recipeOutput)		
-			if len(recipeWarnings):
-				FilterCarbide.stdout.writelines(recipeWarnings)
-				warnings += len(recipeWarnings)
-			if len(recipeErrors):
-				FilterCarbide.stderr.writelines(recipeErrors)
-				errors += len(recipeErrors)
-
-			# Per-recipe summary
-			self.__errors += errors
-			self.__warnings += warnings
-			FilterCarbide.stdout.write("Errors: %d, (Total for build: %d)\n" % (errors, self.__errors))
-			FilterCarbide.stdout.write("Warnings: %d, (Total for build: %d)\n\n" % (warnings, self.__warnings))
-			self.__recipe = None
-
-		return True
-	
-	def close(self):
-		FilterCarbide.stdout.write("Overall Errors: %d\n" % self.__errors)
-		FilterCarbide.stdout.write("Overall Warnings: %d\n\n" % self.__warnings)
-
-		return True if self.__errors == 0 else False
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Format Raptor verbose log output for the Carbide IDE
+#
+
+
+import os
+import re
+import sys
+import raptor
+import filter_interface
+import filter_utils
+
+
+class FilterCarbide(filter_interface.Filter):
+	"""Carbide IDE filter
+	Strips most verbose output leaving tools calls, tool output and formatted errors/warnings."""
+	
+	# ignore all general, benign, make output
+	ignore = re.compile('(make(\.exe)?: Nothing to be done for \`.+\'|make(\.exe)?: \[.+\] Error \d+ \(ignored\)|.*make(.exe)?\[\d\]: (Entering|Leaving) directory \`.+\')')
+	
+	stdout = filter_utils.AutoFlushedStream(sys.stdout)
+	stderr = filter_utils.AutoFlushedStream(sys.stderr)
+	
+	recipeFactory = filter_utils.RecipeFactory()
+	
+	def __init__(self):
+		self.__errors = 0
+		self.__warnings = 0
+		self.__recipe = None
+
+	def open(self, aRaptorInstance):
+		return True
+		
+	def write(self, aLine):
+		"""Process output on the fly and format appropriately for the Carbide IDE.
+		Most verbose output is discarded leaving tools calls, tool output and formatted errors
+		and warnings.
+		Identified errors go to stderr so that they will be highlighted in the IDE console."""
+		
+		if FilterCarbide.ignore.match(aLine):
+			return
+		
+		logHeader = filter_utils.logHeader.match(aLine)
+		if logHeader:
+			FilterCarbide.stdout.write("sbs version: " + logHeader.group("version")+"\n\n")
+			return
+		
+		clean = filter_utils.clean.match(aLine)
+		if clean:
+			for file in clean.group("removals").split():
+				FilterCarbide.stdout.write("clean: " + file + "\n")
+			return
+		
+		exports = filter_utils.exports.match(aLine)
+		if exports:
+			FilterCarbide.stdout.write("export: " + exports.group("source") + " to " + exports.group("destination") + "\n")
+			return
+		
+		
+		if self.__recipe:
+			self.__recipe.addLine(aLine)
+			
+			if self.__recipe.isComplete():
+				for call in self.__recipe.getCalls():
+					FilterCarbide.stdout.write(call + "\n")				
+		else:		
+			logTag = filter_utils.logTag.match(aLine)
+			if logTag:
+				tagName = logTag.group("name")			
+				if tagName == "recipe":
+					if self.__recipe:
+						self.__recipe.addLine(aLine)
+					else:
+						self.__recipe = FilterCarbide.recipeFactory.newRecipe(aLine)						
+				elif tagName == "error":
+					self.__errors += 1
+					FilterCarbide.stderr.write("Error: " + filter_utils.logTag.sub("", aLine) + "\n")
+				elif tagName == "warning":
+					self.__warnings += 1
+					FilterCarbide.stdout.write("Warning: " + filter_utils.logTag.sub("", aLine) + "\n")
+				# we're not interested in any other tagged output
+				return
+			else:
+				# Not a recipe, and not tagged output that we know about.
+				# Output this anyway, just in case it's something important
+				FilterCarbide.stdout.write(aLine)
+		
+		
+		if self.__recipe and self.__recipe.isComplete():
+			errors = 0
+			warnings = 0			
+
+			recipeOutput = self.__recipe.getOutput()
+			recipeWarnings = self.__recipe.getWarnings()
+			recipeErrors = self.__recipe.getErrors()
+
+			if len(recipeOutput):
+				FilterCarbide.stdout.writelines(recipeOutput)		
+			if len(recipeWarnings):
+				FilterCarbide.stdout.writelines(recipeWarnings)
+				warnings += len(recipeWarnings)
+			if len(recipeErrors):
+				FilterCarbide.stderr.writelines(recipeErrors)
+				errors += len(recipeErrors)
+
+			# Per-recipe summary
+			self.__errors += errors
+			self.__warnings += warnings
+			FilterCarbide.stdout.write("Errors: %d, (Total for build: %d)\n" % (errors, self.__errors))
+			FilterCarbide.stdout.write("Warnings: %d, (Total for build: %d)\n\n" % (warnings, self.__warnings))
+			self.__recipe = None
+
+		return True
+	
+	def close(self):
+		FilterCarbide.stdout.write("Overall Errors: %d\n" % self.__errors)
+		FilterCarbide.stdout.write("Overall Warnings: %d\n\n" % self.__warnings)
+
+		return True if self.__errors == 0 else False
+
--- a/sbsv2/raptor/python/plugins/filter_checksource.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_checksource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,376 +1,376 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-import raptor_utilities
-import os
-import re
-import sys
-import filter_interface
-import xml.parsers.expat
-import raptor
-import generic_path
-import tempfile
-
-# This filter has not been tested on linux
-if not raptor_utilities.getOSPlatform().startswith("linux"):
-	
-	# Compares the two paths, and reports the differences highlighted by a "^" character
-	# Output Generated will be like this:
-	# Reference in metadata -> C:/foo/bar/cat.cpp
-	# 			               -------^-------^-- 
-	# Reference in metadata -> C:/foo/Bar/cat.Cpp
-	def reportcsdifference(path1, path2):
-		
-		same = "-"
-		different = "^"
-		space = ' '
-		metadataString = 'Reference in metadata -> '
-		ondiskString   = 'Actual case on disk   -> '
-		
-		sys.stderr.write(metadataString + path2 +"\n")
-		separator = ""
-		for i, e in enumerate(path1):
-			try:
-				if e != path2[i]:
-					separator += different
-				else:
-					separator += same
-			except IndexError:
-				separator += '*'
-
-		separator += different * (len(path1)-len(path2))
-		
-		sys.stderr.write(space*len(metadataString) + separator +"\n") # Print the separator in alignment with the metadataString
-		sys.stderr.write(ondiskString + path1 + "\n")
-
-	class FilterCheckSource(filter_interface.Filter):
-
-		def open(self, raptor_instance):
-			self.raptor = raptor_instance
-			self.ok = True
-			self.errors = 0
-			self.checked = []
-			self.check = raptor_instance.doCheck
-			self.casechecker = CheckCase()
-			
-			# Expat Parser initialisation
-			self.p = xml.parsers.expat.ParserCreate()
-			self.p.StartElementHandler = self.startelement # Handles opening XML tags
-			self.p.EndElementHandler = self.endelement # Handles closing XML tags
-			self.p.CharacterDataHandler = self.chardata # Handles data between opening/closing tags
-			
-			# Regex initialisation
-			self.rvctdependfinder = re.compile("--depend\s+(.*?d)(?:\s+|$)", re.IGNORECASE|re.DOTALL)
-			self.cwdependfinder = re.compile("#'\s+(.*?\.dep)", re.IGNORECASE|re.DOTALL)
-			
-			# Data to be passed to case checkers
-			self.currentmmp = ""
-			self.currentbldinf = ""
-			self.currentconfig = ""
-			
-			self.filestocheck = []
-			
-			# Need this flag for the chardata method that does not have the name of the
-			# current XML element passed to it as a parameter.
-			self.infiletag = False
-			
-			# Create a temporary file to record all dependency files. We can only parse those after 
-			# make has finished running all the compile commands and by definition these
-			# files should therefore exist.
-			try:
-				self.tmp = tempfile.TemporaryFile()
-			except:
-				sys.stderr.write("sbs: could not create temporary file for FilterClean\n")
-				self.ok = False
-			
-			return self.ok
-
-		def write(self, text):
-			# Slightly nasty that we have to "ignore" exceptions, but the xml parser 
-			# generates this when it encounters non-xml lines (like make: nothing to be done for 'export')
-			try:
-				self.p.Parse(text.rstrip())	
-			except xml.parsers.expat.ExpatError:
-				pass
-
-			return self.ok
-
-		def saveitem(self, path):
-			"put path into a temporary file."
-			try:
-				self.tmp.write(path + "\n")
-			except:
-				sys.stderr.write("sbs: could not write temporary file in FilterCheckSource\n")
-				self.ok = False
-
-		def startelement(self, name, attrs):
-			# Check the source code cpp files - obtained from the "source" 
-			# attribute of compile and other tags 
-			if 'source' in attrs.keys():
-				if attrs['source'] != "":
-					self.filestocheck.append(attrs['source'])
-			
-			# Record the current metadata files and config
-			if name == "clean":
-				self.currentmmp = attrs["mmp"]
-				self.currentbldinf = attrs["bldinf"]
-				self.currentconfig = attrs["config"]
-			
-			# Indicates we are in a <file> element
-			if name == "file":
-				# Need to use a flag to indicate that we are processing a file tag
-				self.infiletag = True
-		
-		def chardata(self, data):
-			# Strip quotes from data
-			unquoteddata = data.strip("\"\'")
-			
-			# Use a flag to determine that we are processing a file tag since this method
-			# doesn't receive the "name" argument that startelement/endelement
-			if self.infiletag:
-				self.filestocheck.append(unquoteddata)
-				
-				# Also write dependency file names to temp file to parse the 
-				# contents of these at the end
-				if unquoteddata.endswith(".d") or unquoteddata.endswith(".dep"):
-					self.saveitem(unquoteddata)
-			
-			# RVCT depends files
-			# Outside of file tags, chardata will be called on CDATA which contains
-			# compiler calls, hence we parse these for the "--depend" option to extract
-			# the .d file.
-			if "--depend" in data:
-				result =  self.rvctdependfinder.findall(data)
-				for res in result:
-					self.saveitem(res)
-			
-			# CW toolchain depends files
-			# As for RVCT, chardata will be called on CDATA which contains compiler calls, 
-			# hence we parse these for file names ending in .dep after the sequence #, ' and 
-			# a space. The win32.flm munges the contents of these files around so we are really
-			# interested in the .o.d files - these have the same path as the .dep files but 
-			# with the extension changed to .o.d from .dep.
-			if ".dep" in data:
-				result = self.cwdependfinder.findall(data)
-				for res in result:
-					self.saveitem(res.replace(".dep", ".o.d"))
-			
-		def endelement(self, name):
-			# Blank out the mmp, bldinf and config for next clean tag (in case it has any blanks)
-			if name == "clean":
-				self.currentmmp = ""
-				self.currentbldinf = ""
-				self.currentconfig = ""
-			
-			if name == "file":
-				self.infiletag = False
-			
-			if len(self.filestocheck) > 0:
-				# Check the found file(s)
-				for filename in self.filestocheck:
-					self.checksource(filename)
-				
-				# Reset list so as not to re-check already checked files
-				self.filestocheck = []
-				
-		def close(self):			
-			return self.ok
-
-		def summary(self):
-			
-			depparser = DependenciesParser()
-			dependenciesfileset = set() # Stores the files listed inside depdendency files
-			deps = [] # Stores dependency (.d and .dep) files
-			
-			try:
-				self.tmp.flush()	# write what is left in the buffer
-				self.tmp.seek(0)	# rewind to the beginning
-				
-				for line in self.tmp.readlines():
-					path = line.strip()
-					
-					# Only try to parse the file if it exists as a file, and if we haven't done so 
-					# already (store the list of parsed files in the set "dependenciesfileset"
-					if os.path.isfile(path) and not path in dependenciesfileset:
-						dependenciesfileset.add(path)
-						
-						# Here we parse each dependency file and form a list of the prerequisites contained therein
-						dependencyfilelines = depparser.readdepfilelines(path) # Read the lines
-						dependencyfilestr = depparser.removelinecontinuation(dependencyfilelines) # Join them up
-						dependencyfiles = depparser.getdependencies(dependencyfilestr) # Get prerequisites
-						deps.extend(dependencyfiles) # Add to list
-					else:
-						sys.stdout.write("\t"  + path + " does not exist\n")
-						
-				self.tmp.close()	# This also deletes the temporary file
-				
-				# Make a set of the prerequisites listed in the dependency files
-				# so we only check each one once
-				depset = set(deps)
-				deplistnodups = list(depset)
-				
-				# Do the check for each file 	
-				for dep in deplistnodups:
-					dep = os.path.normpath(dep).replace('\\', '/')
-					self.checksource(dep)
-					
-			except Exception, e:
-				sys.stderr.write("sbs: could not access temporary file for FilterClean\n")
-				
-			if self.errors == 0:
-				sys.stdout.write("No checksource errors found\n")
-			else:
-				sys.stdout.write("\n %d checksource errors found in the build\n" % self.errors)
-			
-		
-		def checksource(self, path):
-			normedpath = path.replace("\"", "") # Remove quoting
-			
-			if normedpath not in self.checked:
-				self.checked.append(normedpath)
-				try:
-					realpath = self.casechecker.checkcase(normedpath)
-				except IOError, e:
-					# file does not exist so just return
-					return
-										
-				if not realpath == normedpath and realpath != "":
-					self.ok = False
-					self.errors += 1
-					sys.stderr.write("\nChecksource Failure:\n")
-					reportcsdifference(realpath, normedpath)
-
-	class CheckCase(object):
-		"""Used to check the case of a given path matches the file system.  
-		Caches previous lookups to reduce disk IO and improve performance"""
-		
-		def __init__(self):
-			self.__dirsCache = {} # a hash containing the directory structure, in the same case as the file system
-		
-		def checkcase(self, path):
-			"""Checks the path matches the file system"""
-			
-			path = os.path.normpath(path)
-			path = path.replace('\\', '/')
-			
-			if not os.path.exists(path):
-				raise IOError, path + " does not exist"
-				
-			parts = path.split('/')
-			
-			dirBeingChecked = parts.pop(0) + "/"
-			
-			cacheItem = self.__dirsCache
-			
-			for part in parts:
-				if not self.checkkeyignorecase(cacheItem, part):
-				
-					dirItems = os.listdir(dirBeingChecked)
-					
-					found = False
-					
-					for dirItem in dirItems:
-						if os.path.isdir(os.path.join(dirBeingChecked, dirItem)):
-							if not cacheItem.has_key(dirItem):
-								cacheItem[dirItem] = {}
-							
-							if not found:
-								# Check if there is a dir match
-								if re.search("^" + part + "$", dirItem, re.IGNORECASE):
-									found = True
-									
-									cacheItem = cacheItem[dirItem]
-									
-									dirBeingChecked = os.path.join(dirBeingChecked, dirItem).replace('\\', '/')
-						else:
-							cacheItem[dirItem] = 1
-					
-							if not found:
-								# Check if there is a dir match
-								if re.search("^" + part + "$", dirItem, re.IGNORECASE):
-									found = True
-									
-									return os.path.join(dirBeingChecked, dirItem).replace('\\', '/')                         
-				
-				else:
-					if os.path.isdir(os.path.join(dirBeingChecked, part)):
-						cacheItem = cacheItem[part]
-				
-					dirBeingChecked = os.path.join(dirBeingChecked, part).replace('\\', '/')
-	
-			return dirBeingChecked
-	
-		def checkkeyignorecase(self, dictionary, keyToFind):
-			for key in dictionary.keys():
-				if re.search("^" + keyToFind + "$", key, re.IGNORECASE):
-					
-					if not keyToFind == key:
-						return False
-					
-					return True
-			
-			return False
-
-	class DependenciesParser(object):
-		
-		def __init__(self):
-			pass # Nop - nothing to do for init
-		
-		def readdepfilelines(self, dotdfile):
-			""" Read the lines from a Make dependency file and return them as a list """
-			lines = []
-			try:
-				fh = open(dotdfile, "r")
-			except IOError, e:
-				print "Error: Failed to open file \"%s\": %s" % (dotdfile, e.strerror)
-			except Exception, e:
-				print "Error: Unknown error: %s" % str(e)
-			else:
-				lines = fh.readlines()
-				fh.close()
-				
-			return lines
-		
-		def removelinecontinuation(self, lineslist):
-			""" Remove line continuation chararacters '\\' from the end of any lines in  
-			the list that have them and return a string with lines joined together """
-			str = " ".join(lineslist).replace('\\\n','')
-			return str
-		
-		def getdependencies(self, dotdfilestring):
-			""" Splits the multi-lined string dotdfilestring and performs a regexp
-			match on files to the right of a : on each line """
-			
-			# Strip whitespace at the start of the string	
-			lines = dotdfilestring.lstrip().split("\n")
-			
-			dependencyset = set() # Create a set to skip duplicates
-			for line in lines:
-				# Split on whitespace that is *not* preceeded by a \ - i.e. 
-				# don't split on escaped spaces.
-				lineparts = re.split("(?<!\\\\)\s+", line)
-				
-				# Drop element 0 as this will be the target of each rule
-				lineparts = lineparts[1:]
-				
-				for linepart in lineparts:
-					# Some of the line parts are empty, so skip those
-					if linepart != "":
-						dependencyset.add(linepart)
-			
-			# Create list to return from the initial set
-			files = list(dependencyset)
-			return files  
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import raptor_utilities
+import os
+import re
+import sys
+import filter_interface
+import xml.parsers.expat
+import raptor
+import generic_path
+import tempfile
+
+# This filter has not been tested on linux
+if not raptor_utilities.getOSPlatform().startswith("linux"):
+	
+	# Compares the two paths, and reports the differences highlighted by a "^" character
+	# Output Generated will be like this:
+	# Reference in metadata -> C:/foo/bar/cat.cpp
+	# 			               -------^-------^-- 
+	# Reference in metadata -> C:/foo/Bar/cat.Cpp
+	def reportcsdifference(path1, path2):
+		
+		same = "-"
+		different = "^"
+		space = ' '
+		metadataString = 'Reference in metadata -> '
+		ondiskString   = 'Actual case on disk   -> '
+		
+		sys.stderr.write(metadataString + path2 +"\n")
+		separator = ""
+		for i, e in enumerate(path1):
+			try:
+				if e != path2[i]:
+					separator += different
+				else:
+					separator += same
+			except IndexError:
+				separator += '*'
+
+		separator += different * (len(path1)-len(path2))
+		
+		sys.stderr.write(space*len(metadataString) + separator +"\n") # Print the separator in alignment with the metadataString
+		sys.stderr.write(ondiskString + path1 + "\n")
+
+	class FilterCheckSource(filter_interface.Filter):
+
+		def open(self, raptor_instance):
+			self.raptor = raptor_instance
+			self.ok = True
+			self.errors = 0
+			self.checked = []
+			self.check = raptor_instance.doCheck
+			self.casechecker = CheckCase()
+			
+			# Expat Parser initialisation
+			self.p = xml.parsers.expat.ParserCreate()
+			self.p.StartElementHandler = self.startelement # Handles opening XML tags
+			self.p.EndElementHandler = self.endelement # Handles closing XML tags
+			self.p.CharacterDataHandler = self.chardata # Handles data between opening/closing tags
+			
+			# Regex initialisation
+			self.rvctdependfinder = re.compile("--depend\s+(.*?d)(?:\s+|$)", re.IGNORECASE|re.DOTALL)
+			self.cwdependfinder = re.compile("#'\s+(.*?\.dep)", re.IGNORECASE|re.DOTALL)
+			
+			# Data to be passed to case checkers
+			self.currentmmp = ""
+			self.currentbldinf = ""
+			self.currentconfig = ""
+			
+			self.filestocheck = []
+			
+			# Need this flag for the chardata method that does not have the name of the
+			# current XML element passed to it as a parameter.
+			self.infiletag = False
+			
+			# Create a temporary file to record all dependency files. We can only parse those after 
+			# make has finished running all the compile commands and by definition these
+			# files should therefore exist.
+			try:
+				self.tmp = tempfile.TemporaryFile()
+			except:
+				sys.stderr.write("sbs: could not create temporary file for FilterClean\n")
+				self.ok = False
+			
+			return self.ok
+
+		def write(self, text):
+			# Slightly nasty that we have to "ignore" exceptions, but the xml parser 
+			# generates this when it encounters non-xml lines (like make: nothing to be done for 'export')
+			try:
+				self.p.Parse(text.rstrip())	
+			except xml.parsers.expat.ExpatError:
+				pass
+
+			return self.ok
+
+		def saveitem(self, path):
+			"put path into a temporary file."
+			try:
+				self.tmp.write(path + "\n")
+			except:
+				sys.stderr.write("sbs: could not write temporary file in FilterCheckSource\n")
+				self.ok = False
+
+		def startelement(self, name, attrs):
+			# Check the source code cpp files - obtained from the "source" 
+			# attribute of compile and other tags 
+			if 'source' in attrs.keys():
+				if attrs['source'] != "":
+					self.filestocheck.append(attrs['source'])
+			
+			# Record the current metadata files and config
+			if name == "clean":
+				self.currentmmp = attrs["mmp"]
+				self.currentbldinf = attrs["bldinf"]
+				self.currentconfig = attrs["config"]
+			
+			# Indicates we are in a <file> element
+			if name == "file":
+				# Need to use a flag to indicate that we are processing a file tag
+				self.infiletag = True
+		
+		def chardata(self, data):
+			# Strip quotes from data
+			unquoteddata = data.strip("\"\'")
+			
+			# Use a flag to determine that we are processing a file tag since this method
+			# doesn't receive the "name" argument that startelement/endelement
+			if self.infiletag:
+				self.filestocheck.append(unquoteddata)
+				
+				# Also write dependency file names to temp file to parse the 
+				# contents of these at the end
+				if unquoteddata.endswith(".d") or unquoteddata.endswith(".dep"):
+					self.saveitem(unquoteddata)
+			
+			# RVCT depends files
+			# Outside of file tags, chardata will be called on CDATA which contains
+			# compiler calls, hence we parse these for the "--depend" option to extract
+			# the .d file.
+			if "--depend" in data:
+				result =  self.rvctdependfinder.findall(data)
+				for res in result:
+					self.saveitem(res)
+			
+			# CW toolchain depends files
+			# As for RVCT, chardata will be called on CDATA which contains compiler calls, 
+			# hence we parse these for file names ending in .dep after the sequence #, ' and 
+			# a space. The win32.flm munges the contents of these files around so we are really
+			# interested in the .o.d files - these have the same path as the .dep files but 
+			# with the extension changed to .o.d from .dep.
+			if ".dep" in data:
+				result = self.cwdependfinder.findall(data)
+				for res in result:
+					self.saveitem(res.replace(".dep", ".o.d"))
+			
+		def endelement(self, name):
+			# Blank out the mmp, bldinf and config for next clean tag (in case it has any blanks)
+			if name == "clean":
+				self.currentmmp = ""
+				self.currentbldinf = ""
+				self.currentconfig = ""
+			
+			if name == "file":
+				self.infiletag = False
+			
+			if len(self.filestocheck) > 0:
+				# Check the found file(s)
+				for filename in self.filestocheck:
+					self.checksource(filename)
+				
+				# Reset list so as not to re-check already checked files
+				self.filestocheck = []
+				
+		def close(self):			
+			return self.ok
+
+		def summary(self):
+			
+			depparser = DependenciesParser()
+			dependenciesfileset = set() # Stores the files listed inside depdendency files
+			deps = [] # Stores dependency (.d and .dep) files
+			
+			try:
+				self.tmp.flush()	# write what is left in the buffer
+				self.tmp.seek(0)	# rewind to the beginning
+				
+				for line in self.tmp.readlines():
+					path = line.strip()
+					
+					# Only try to parse the file if it exists as a file, and if we haven't done so 
+					# already (store the list of parsed files in the set "dependenciesfileset"
+					if os.path.isfile(path) and not path in dependenciesfileset:
+						dependenciesfileset.add(path)
+						
+						# Here we parse each dependency file and form a list of the prerequisites contained therein
+						dependencyfilelines = depparser.readdepfilelines(path) # Read the lines
+						dependencyfilestr = depparser.removelinecontinuation(dependencyfilelines) # Join them up
+						dependencyfiles = depparser.getdependencies(dependencyfilestr) # Get prerequisites
+						deps.extend(dependencyfiles) # Add to list
+					else:
+						sys.stdout.write("\t"  + path + " does not exist\n")
+						
+				self.tmp.close()	# This also deletes the temporary file
+				
+				# Make a set of the prerequisites listed in the dependency files
+				# so we only check each one once
+				depset = set(deps)
+				deplistnodups = list(depset)
+				
+				# Do the check for each file 	
+				for dep in deplistnodups:
+					dep = os.path.normpath(dep).replace('\\', '/')
+					self.checksource(dep)
+					
+			except Exception, e:
+				sys.stderr.write("sbs: could not access temporary file for FilterClean\n")
+				
+			if self.errors == 0:
+				sys.stdout.write("No checksource errors found\n")
+			else:
+				sys.stdout.write("\n %d checksource errors found in the build\n" % self.errors)
+			
+		
+		def checksource(self, path):
+			normedpath = path.replace("\"", "") # Remove quoting
+			
+			if normedpath not in self.checked:
+				self.checked.append(normedpath)
+				try:
+					realpath = self.casechecker.checkcase(normedpath)
+				except IOError, e:
+					# file does not exist so just return
+					return
+										
+				if not realpath == normedpath and realpath != "":
+					self.ok = False
+					self.errors += 1
+					sys.stderr.write("\nChecksource Failure:\n")
+					reportcsdifference(realpath, normedpath)
+
+	class CheckCase(object):
+		"""Used to check the case of a given path matches the file system.  
+		Caches previous lookups to reduce disk IO and improve performance"""
+		
+		def __init__(self):
+			self.__dirsCache = {} # a hash containing the directory structure, in the same case as the file system
+		
+		def checkcase(self, path):
+			"""Checks the path matches the file system"""
+			
+			path = os.path.normpath(path)
+			path = path.replace('\\', '/')
+			
+			if not os.path.exists(path):
+				raise IOError, path + " does not exist"
+				
+			parts = path.split('/')
+			
+			dirBeingChecked = parts.pop(0) + "/"
+			
+			cacheItem = self.__dirsCache
+			
+			for part in parts:
+				if not self.checkkeyignorecase(cacheItem, part):
+				
+					dirItems = os.listdir(dirBeingChecked)
+					
+					found = False
+					
+					for dirItem in dirItems:
+						if os.path.isdir(os.path.join(dirBeingChecked, dirItem)):
+							if not cacheItem.has_key(dirItem):
+								cacheItem[dirItem] = {}
+							
+							if not found:
+								# Check if there is a dir match
+								if re.search("^" + part + "$", dirItem, re.IGNORECASE):
+									found = True
+									
+									cacheItem = cacheItem[dirItem]
+									
+									dirBeingChecked = os.path.join(dirBeingChecked, dirItem).replace('\\', '/')
+						else:
+							cacheItem[dirItem] = 1
+					
+							if not found:
+								# Check if there is a dir match
+								if re.search("^" + part + "$", dirItem, re.IGNORECASE):
+									found = True
+									
+									return os.path.join(dirBeingChecked, dirItem).replace('\\', '/')                         
+				
+				else:
+					if os.path.isdir(os.path.join(dirBeingChecked, part)):
+						cacheItem = cacheItem[part]
+				
+					dirBeingChecked = os.path.join(dirBeingChecked, part).replace('\\', '/')
+	
+			return dirBeingChecked
+	
+		def checkkeyignorecase(self, dictionary, keyToFind):
+			for key in dictionary.keys():
+				if re.search("^" + keyToFind + "$", key, re.IGNORECASE):
+					
+					if not keyToFind == key:
+						return False
+					
+					return True
+			
+			return False
+
+	class DependenciesParser(object):
+		
+		def __init__(self):
+			pass # Nop - nothing to do for init
+		
+		def readdepfilelines(self, dotdfile):
+			""" Read the lines from a Make dependency file and return them as a list """
+			lines = []
+			try:
+				fh = open(dotdfile, "r")
+			except IOError, e:
+				print "Error: Failed to open file \"%s\": %s" % (dotdfile, e.strerror)
+			except Exception, e:
+				print "Error: Unknown error: %s" % str(e)
+			else:
+				lines = fh.readlines()
+				fh.close()
+				
+			return lines
+		
+		def removelinecontinuation(self, lineslist):
+			""" Remove line continuation chararacters '\\' from the end of any lines in  
+			the list that have them and return a string with lines joined together """
+			str = " ".join(lineslist).replace('\\\n','')
+			return str
+		
+		def getdependencies(self, dotdfilestring):
+			""" Splits the multi-lined string dotdfilestring and performs a regexp
+			match on files to the right of a : on each line """
+			
+			# Strip whitespace at the start of the string	
+			lines = dotdfilestring.lstrip().split("\n")
+			
+			dependencyset = set() # Create a set to skip duplicates
+			for line in lines:
+				# Split on whitespace that is *not* preceeded by a \ - i.e. 
+				# don't split on escaped spaces.
+				lineparts = re.split("(?<!\\\\)\s+", line)
+				
+				# Drop element 0 as this will be the target of each rule
+				lineparts = lineparts[1:]
+				
+				for linepart in lineparts:
+					# Some of the line parts are empty, so skip those
+					if linepart != "":
+						dependencyset.add(linepart)
+			
+			# Create list to return from the initial set
+			files = list(dependencyset)
+			return files  
--- a/sbsv2/raptor/python/plugins/filter_clean.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_clean.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,170 +1,170 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Filter class for doing CLEAN, CLEANEXPORT and REALLYCLEAN efficiently.
-#
-
-import os
-import sys
-import tempfile
-import filter_interface
-
-class FilterClean(filter_interface.Filter):
-	
-	def open(self, params):
-		"initialise"
-		
-		targets = [x.lower() for x in params.targets]
-		
-		self.removeExports = ("cleanexport" in targets or "reallyclean" in targets)
-		self.removeTargets = ("clean" in targets or "reallyclean" in targets)
-		
-		self.ok = True
-		
-		# create a temporary file to record all the exports and directories
-		# in. We can only remove those after "make" has finished running all
-		# the CLEAN targets.
-		try:
-			self.tmp = tempfile.TemporaryFile()
-		except:
-			sys.stderr.write("sbs: could not create temporary file for FilterClean\n")
-			self.ok = False
-		
-		return self.ok
-	
-	
-	def write(self, text):
-		"process some log text"
-		
-		for line in text.splitlines():
-		
-			if self.removeTargets:
-				if line.startswith("<file>"):
-					self.doFile(line)
-				elif line.startswith("<dir>"):
-					self.doDirectory(line)
-						
-			if self.removeExports:
-				if line.startswith("<export "):
-					self.doExport(line)
-				elif line.startswith("<member>"):
-					self.doMember(line)
-				elif line.startswith("<zipmarker>"):
-					self.doZipMarker(line)
-				
-		return self.ok
-	
-	
-	def summary(self):
-		"finish off"
-		
-		# remove files, remembering directories
-		dirs = set()
-		
-		try:
-			self.tmp.flush()	# write what is left in the buffer
-			self.tmp.seek(0)	# rewind to the beginning
-			
-			for line in self.tmp.readlines():
-				path = line.strip()
-				
-				if os.path.isfile(path):
-					self.removeFile(path)
-					
-				elif os.path.isdir(path):
-					dirs.add(path)
-					
-			self.tmp.close()	# this also deletes the temporary file
-		except:
-			sys.stderr.write("sbs: could not access temporary file for FilterClean\n")
-			self.ok = False
-		
-		# finally remove (empty) directories
-		for dir in dirs:
-			try:
-				os.removedirs(dir)	# may fail if the directory has files in
-			except:
-				pass				# silently ignore all errors
-				
-		return self.ok
-
-
-	def close(self):
-		"nop"
-		
-		return self.ok
-	
-	
-	def removeFile(self, path):
-		try:
-			os.unlink(path)
-		except Exception, e:
-			sys.stderr.write("sbs: could not remove " + path + "\n")
-			sys.stderr.write(str(e) + "\n")
-		
-				
-	def saveItem(self, path):
-		"put path into a temporary file."
-		try:
-			self.tmp.write(path + "\n")
-		except:
-			sys.stderr.write("sbs: could not write temporary file in FilterClean\n")
-			self.ok = False
-	
-			
-	def doFile(self, line):
-		"remove filenames in <file> tags immediately (not .d or .dep)."
-		filename = line[6:-7]                # line is "<file>filename</file>
-		filename = filename.strip("\"\'")    # some names are quoted
-		
-		# dependency files must be deleted at the end,
-		# everything else can be deleted straight away.
-		if filename.endswith(".d") or filename.endswith(".dep"):
-			self.saveItem(filename)
-		else:
-			if os.path.isfile(filename):
-				self.removeFile(filename)
-
-
-	def doDirectory(self, line):
-		"save directories in <dir> tags for the end."
-		# assuming <dir>X</dir>
-		dirname = line[5:-6]
-		self.saveItem(dirname.strip("\"\'"))
-		
-		
-	def doExport(self, line):
-		"save exported files in <export> tags for the end."
-		# assuming <export destination='X' source='Y' />
-		filename = line[21:line.find("'", 21)]
-		self.saveItem(filename)
-		
-		
-	def doMember(self, line):
-		"save zip exports in <member> tags for the end."
-		# assuming <member>X</member>
-		filename = line[8:-9]
-		self.saveItem(filename)
-		
-		
-	def doZipMarker(self, line):
-		"Remove file in <zipmarker> tags"
-		# assuming <zipmarker>X</zipmarker>
-		filename = line[11:-12]
-		if os.path.isfile(filename):
-			self.removeFile(filename)
-
-
-# the end				
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for doing CLEAN, CLEANEXPORT and REALLYCLEAN efficiently.
+#
+
+import os
+import sys
+import tempfile
+import filter_interface
+
+class FilterClean(filter_interface.Filter):
+	
+	def open(self, params):
+		"initialise"
+		
+		targets = [x.lower() for x in params.targets]
+		
+		self.removeExports = ("cleanexport" in targets or "reallyclean" in targets)
+		self.removeTargets = ("clean" in targets or "reallyclean" in targets)
+		
+		self.ok = True
+		
+		# create a temporary file to record all the exports and directories
+		# in. We can only remove those after "make" has finished running all
+		# the CLEAN targets.
+		try:
+			self.tmp = tempfile.TemporaryFile()
+		except:
+			sys.stderr.write("sbs: could not create temporary file for FilterClean\n")
+			self.ok = False
+		
+		return self.ok
+	
+	
+	def write(self, text):
+		"process some log text"
+		
+		for line in text.splitlines():
+		
+			if self.removeTargets:
+				if line.startswith("<file>"):
+					self.doFile(line)
+				elif line.startswith("<dir>"):
+					self.doDirectory(line)
+						
+			if self.removeExports:
+				if line.startswith("<export "):
+					self.doExport(line)
+				elif line.startswith("<member>"):
+					self.doMember(line)
+				elif line.startswith("<zipmarker>"):
+					self.doZipMarker(line)
+				
+		return self.ok
+	
+	
+	def summary(self):
+		"finish off"
+		
+		# remove files, remembering directories
+		dirs = set()
+		
+		try:
+			self.tmp.flush()	# write what is left in the buffer
+			self.tmp.seek(0)	# rewind to the beginning
+			
+			for line in self.tmp.readlines():
+				path = line.strip()
+				
+				if os.path.isfile(path):
+					self.removeFile(path)
+					
+				elif os.path.isdir(path):
+					dirs.add(path)
+					
+			self.tmp.close()	# this also deletes the temporary file
+		except:
+			sys.stderr.write("sbs: could not access temporary file for FilterClean\n")
+			self.ok = False
+		
+		# finally remove (empty) directories
+		for dir in dirs:
+			try:
+				os.removedirs(dir)	# may fail if the directory has files in
+			except:
+				pass				# silently ignore all errors
+				
+		return self.ok
+
+
+	def close(self):
+		"nop"
+		
+		return self.ok
+	
+	
+	def removeFile(self, path):
+		try:
+			os.unlink(path)
+		except Exception, e:
+			sys.stderr.write("sbs: could not remove " + path + "\n")
+			sys.stderr.write(str(e) + "\n")
+		
+				
+	def saveItem(self, path):
+		"put path into a temporary file."
+		try:
+			self.tmp.write(path + "\n")
+		except:
+			sys.stderr.write("sbs: could not write temporary file in FilterClean\n")
+			self.ok = False
+	
+			
+	def doFile(self, line):
+		"remove filenames in <file> tags immediately (not .d or .dep)."
+		filename = line[6:-7]                # line is "<file>filename</file>
+		filename = filename.strip("\"\'")    # some names are quoted
+		
+		# dependency files must be deleted at the end,
+		# everything else can be deleted straight away.
+		if filename.endswith(".d") or filename.endswith(".dep"):
+			self.saveItem(filename)
+		else:
+			if os.path.isfile(filename):
+				self.removeFile(filename)
+
+
+	def doDirectory(self, line):
+		"save directories in <dir> tags for the end."
+		# assuming <dir>X</dir>
+		dirname = line[5:-6]
+		self.saveItem(dirname.strip("\"\'"))
+		
+		
+	def doExport(self, line):
+		"save exported files in <export> tags for the end."
+		# assuming <export destination='X' source='Y' />
+		filename = line[21:line.find("'", 21)]
+		self.saveItem(filename)
+		
+		
+	def doMember(self, line):
+		"save zip exports in <member> tags for the end."
+		# assuming <member>X</member>
+		filename = line[8:-9]
+		self.saveItem(filename)
+		
+		
+	def doZipMarker(self, line):
+		"Remove file in <zipmarker> tags"
+		# assuming <zipmarker>X</zipmarker>
+		filename = line[11:-12]
+		if os.path.isfile(filename):
+			self.removeFile(filename)
+
+
+# the end				
+
--- a/sbsv2/raptor/python/plugins/filter_logfile.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_logfile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,77 +1,77 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Filter class for filtering XML logs and generate reports
-# Will ultimately do everything that scanlog does
-#
-
-import os
-import sys
-import raptor
-import filter_interface
-
-class FilterLogfile(filter_interface.Filter):
-
-	def open(self, raptor_instance):
-		"""Open a log file for the various I/O methods to write to."""
-
-		self.raptor = raptor_instance
-		self.logFileName = self.raptor.logFileName
-		# insert the time into the log file name
-		if self.logFileName:
-			self.logFileName.path = self.logFileName.path.replace("%TIME",
-					self.raptor.timestring)
-	
-			try:
-				dirname = str(self.raptor.logFileName.Dir())
-				if dirname and not os.path.isdir(dirname):
-					os.makedirs(dirname)
-			except os.error, e:
-				if e.errno != os.errno.EEXIST:
-					sys.stderr.write("%s : error: cannot create directory %s\n" % \
-						(str(raptor.name), dirname))
-					return False
-			try:
-				self.out = open(str(self.logFileName), "w")
-			except:
-				self.out = None
-				sys.stderr.write("%s : error: cannot write log %s\n" %\
-					(str(raptor.name), self.logFileName.GetShellPath()))
-				return False
-		else:
-			self.out = sys.stdout
-
-		return True
-
-	def write(self, text):
-		"""Write text into the log file"""
-
-		self.out.write(text)
-		return True
-
-	def summary(self):
-		"""Write Summary"""
-		if self.logFileName and not self.raptor.quiet:
-			sys.stdout.write("sbs: build log in %s\n" % str(self.logFileName))
-		return False
-
-	def close(self):
-		"""Close the log file"""
-
-		try:
-			self.out.close()
-			return True
-		except:
-			self.out = None
-		return False
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for filtering XML logs and generate reports
+# Will ultimately do everything that scanlog does
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+
+class FilterLogfile(filter_interface.Filter):
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+
+		self.raptor = raptor_instance
+		self.logFileName = self.raptor.logFileName
+		# insert the time into the log file name
+		if self.logFileName:
+			self.logFileName.path = self.logFileName.path.replace("%TIME",
+					self.raptor.timestring)
+	
+			try:
+				dirname = str(self.raptor.logFileName.Dir())
+				if dirname and not os.path.isdir(dirname):
+					os.makedirs(dirname)
+			except os.error, e:
+				if e.errno != os.errno.EEXIST:
+					sys.stderr.write("%s : error: cannot create directory %s\n" % \
+						(str(raptor.name), dirname))
+					return False
+			try:
+				self.out = open(str(self.logFileName), "w")
+			except:
+				self.out = None
+				sys.stderr.write("%s : error: cannot write log %s\n" %\
+					(str(raptor.name), self.logFileName.GetShellPath()))
+				return False
+		else:
+			self.out = sys.stdout
+
+		return True
+
+	def write(self, text):
+		"""Write text into the log file"""
+
+		self.out.write(text)
+		return True
+
+	def summary(self):
+		"""Write Summary"""
+		if self.logFileName and not self.raptor.quiet:
+			sys.stdout.write("sbs: build log in %s\n" % str(self.logFileName))
+		return False
+
+	def close(self):
+		"""Close the log file"""
+
+		try:
+			self.out.close()
+			return True
+		except:
+			self.out = None
+		return False
--- a/sbsv2/raptor/python/plugins/filter_splitlog.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_splitlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,157 +1,157 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Filter class for filtering XML logs and generate reports
-# Will ultimately do everything that scanlog does
-#
-
-import os
-import sys
-import raptor
-import filter_interface
-
-class FilterSplitlog(filter_interface.Filter):
-
-	def open(self, raptor_instance):
-		"""Open a log file for the various I/O methods to write to."""
-
-		self.raptor = raptor_instance
-		self.logFileName = self.raptor.logFileName
-		# insert the time into the log file name
-		if self.logFileName:
-			self.logFileName.path = self.logFileName.path.replace("%TIME",
-					self.raptor.timestring)
-	
-			try:
-				dirname = str(self.raptor.logFileName.Dir())
-				if dirname and not os.path.isdir(dirname):
-					os.makedirs(dirname)
-			except os.error, e:
-				if e.errno != os.errno.EEXIST:
-					sys.stderr.write("%s : error: cannot create directory " +
-							"%s\n" % (raptor.name, dirname))
-					return False
-			try:
-				self.out = open(str(self.logFileName), "w")
-			except:
-				self.out = None
-				sys.stderr.write("%s : error: cannot write log %s\n" %\
-					(raptor.name, self.logFileName.GetShellPath()))
-				return False
-			
-			# Add extra streams for splitting logfile
-			self.log = str(self.logFileName)
-			self.index = self.log.rfind(".")
-			# If there is no dot, append to the end
-			if self.index < 0:
-				self.index = len(self.log)
-			self.streams = [self.out]
-			
-			# Append this list for extra files
-			stream_list = ["clean", "whatlog", "recipe"]
-				
-			for stream in stream_list:
-				
-				path = self.log[:self.index] + "." + stream + \
-						self.log[self.index:]
-				try:
-					handle = open(path, "w")
-					self.streams.append(handle)
-				except:
-					self.streams.append(self.out)
-					sys.stderr.write("%s : error: cannot write log %s\n" %\
-							(str(raptor.name), path))
-			# self.out = self.streams[0]
-			self.clean = self.streams[1]
-			self.whatlog = self.streams[2]
-			self.recipe = self.streams[3]
-			self.block = self.out
-			
-		else:
-			# Change output stream to stdout and override 'write' function
-			self.out = sys.stdout
-			def stdout_write(text):
-				self.out.write(text)
-				return True
-			self.write = stdout_write
-			
-		return True
-
-
-	def write(self, text):
-		"""Write text into relevant log file"""
-		
-		for textLine in text.splitlines():
-			textLine = textLine + '\n'
-			if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
-					or textLine.startswith("</buildlog"):
-				for stream in self.streams:
-					stream.write(textLine)
-			# Split 'CLEAN' output into clean file
-			elif textLine.startswith("<clean"):
-				if self.block != self.out:
-					sys.stderr.write("%s : error: invalid xml. <clean> tag found " \
-							+ "before previous block closed %s\n" %\
-							(raptor.name, self.logFileName))
-				self.block = self.clean
-				self.block.write(textLine)
-				
-			# Split 'WHATLOG' output into whatlog file
-			elif textLine.startswith("<whatlog"):
-				if self.block != self.out:
-					sys.stderr.write("%s : error: invalid xml. <whatlog> tag " + \
-							"found before previous block closed\n" %\
-							(raptor.name, self.logFileName.GetShellPath()))
-				self.block = self.whatlog
-				self.block.write(textLine)
-				
-			# Split 'RECIPE' output into recipe file
-			elif textLine.startswith("<recipe"):
-				if self.block != self.out:
-					sys.stderr.write("%s : error: invalid xml. <recipe> tag " + \
-							"found before previous block closed %s\n" %\
-							(raptor.name, self.logFileName.GetShellPath()))
-				self.block = self.recipe
-				self.block.write(textLine)
-				
-			# End of block found. Reset block to standard logfile
-			elif textLine.startswith("</clean>") or textLine.startswith("</whatlog>") \
-				or textLine.startswith("</recipe>"):
-				self.block.write(textLine)
-				self.block = self.out
-			
-		# Everything else goes to logfile associated with current block
-			else:
-				self.block.write(textLine)
-		return True
-
-
-	def summary(self):
-		"""Write Summary"""
-		if self.logFileName and not self.raptor.quiet:
-			sys.stdout.write("sbs: build log in %s\n" % self.logFileName)
-		return True
-
-
-	def close(self):
-		"""Close the log file(s)"""
-
-		try:
-			self.out.close
-			for stream in self.streams:
-				stream.close()
-			return True
-		except:
-			self.out = None
-		return False
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for filtering XML logs and generate reports
+# Will ultimately do everything that scanlog does
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+
+class FilterSplitlog(filter_interface.Filter):
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+
+		self.raptor = raptor_instance
+		self.logFileName = self.raptor.logFileName
+		# insert the time into the log file name
+		if self.logFileName:
+			self.logFileName.path = self.logFileName.path.replace("%TIME",
+					self.raptor.timestring)
+	
+			try:
+				dirname = str(self.raptor.logFileName.Dir())
+				if dirname and not os.path.isdir(dirname):
+					os.makedirs(dirname)
+			except os.error, e:
+				if e.errno != os.errno.EEXIST:
+					sys.stderr.write("%s : error: cannot create directory " +
+							"%s\n" % (raptor.name, dirname))
+					return False
+			try:
+				self.out = open(str(self.logFileName), "w")
+			except:
+				self.out = None
+				sys.stderr.write("%s : error: cannot write log %s\n" %\
+					(raptor.name, self.logFileName.GetShellPath()))
+				return False
+			
+			# Add extra streams for splitting logfile
+			self.log = str(self.logFileName)
+			self.index = self.log.rfind(".")
+			# If there is no dot, append to the end
+			if self.index < 0:
+				self.index = len(self.log)
+			self.streams = [self.out]
+			
+			# Append this list for extra files
+			stream_list = ["clean", "whatlog", "recipe"]
+				
+			for stream in stream_list:
+				
+				path = self.log[:self.index] + "." + stream + \
+						self.log[self.index:]
+				try:
+					handle = open(path, "w")
+					self.streams.append(handle)
+				except:
+					self.streams.append(self.out)
+					sys.stderr.write("%s : error: cannot write log %s\n" %\
+							(str(raptor.name), path))
+			# self.out = self.streams[0]
+			self.clean = self.streams[1]
+			self.whatlog = self.streams[2]
+			self.recipe = self.streams[3]
+			self.block = self.out
+			
+		else:
+			# Change output stream to stdout and override 'write' function
+			self.out = sys.stdout
+			def stdout_write(text):
+				self.out.write(text)
+				return True
+			self.write = stdout_write
+			
+		return True
+
+
+	def write(self, text):
+		"""Write text into relevant log file"""
+		
+		for textLine in text.splitlines():
+			textLine = textLine + '\n'
+			if textLine.startswith("<?xml ") or textLine.startswith("<buildlog ") \
+					or textLine.startswith("</buildlog"):
+				for stream in self.streams:
+					stream.write(textLine)
+			# Split 'CLEAN' output into clean file
+			elif textLine.startswith("<clean"):
+				if self.block != self.out:
+					sys.stderr.write("%s : error: invalid xml. <clean> tag found " \
+							+ "before previous block closed %s\n" %\
+							(raptor.name, self.logFileName))
+				self.block = self.clean
+				self.block.write(textLine)
+				
+			# Split 'WHATLOG' output into whatlog file
+			elif textLine.startswith("<whatlog"):
+				if self.block != self.out:
+					sys.stderr.write("%s : error: invalid xml. <whatlog> tag " + \
+							"found before previous block closed\n" %\
+							(raptor.name, self.logFileName.GetShellPath()))
+				self.block = self.whatlog
+				self.block.write(textLine)
+				
+			# Split 'RECIPE' output into recipe file
+			elif textLine.startswith("<recipe"):
+				if self.block != self.out:
+					sys.stderr.write("%s : error: invalid xml. <recipe> tag " + \
+							"found before previous block closed %s\n" %\
+							(raptor.name, self.logFileName.GetShellPath()))
+				self.block = self.recipe
+				self.block.write(textLine)
+				
+			# End of block found. Reset block to standard logfile
+			elif textLine.startswith("</clean>") or textLine.startswith("</whatlog>") \
+				or textLine.startswith("</recipe>"):
+				self.block.write(textLine)
+				self.block = self.out
+			
+		# Everything else goes to logfile associated with current block
+			else:
+				self.block.write(textLine)
+		return True
+
+
+	def summary(self):
+		"""Write Summary"""
+		if self.logFileName and not self.raptor.quiet:
+			sys.stdout.write("sbs: build log in %s\n" % self.logFileName)
+		return True
+
+
+	def close(self):
+		"""Close the log file(s)"""
+
+		try:
+			self.out.close
+			for stream in self.streams:
+				stream.close()
+			return True
+		except:
+			self.out = None
+		return False
--- a/sbsv2/raptor/python/plugins/filter_squashlog.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_squashlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,108 +1,108 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Squash a raptor log file by removing commands from successful recipes
-#
-
-import os
-import sys
-import raptor
-import filter_interface
-
-class FilterSquashlog(filter_interface.Filter):
-	
-	def __init__(self):
-		self.__inRecipe = False
-
-	def open(self, raptor_instance):
-		"""Open a log file for the various I/O methods to write to."""
-		
-		if raptor_instance.logFileName == None:
-			self.out = sys.stdout
-		else:	
-			try:
-				dirname = str(raptor_instance.logFileName.Dir())
-				if dirname and not os.path.isdir(dirname):
-					os.makedirs(dirname)
-			except:
-				sys.stderr.write(str(raptor.name) + \
-						": error: cannot create directory %s\n", dirname)
-				return False
-			
-			try:
-				logname = str(raptor_instance.logFileName)
-				self.out = open(logname, "w")
-			except:
-				self.out = None
-				sys.stderr.write(str(raptor.name) + \
-						": error: cannot write log %s\n", \
-						str(raptor_instance.logFileName))
-				return False
-		
-		return True
-		
-	def write(self, line):
-		"""Write text into a squashed log file by removing commands from successful recipes"""
-		
-		# escape % characters otherwise print will fail
-		line = line.replace("%", "%%")
-		
-		# detect the start of a recipe
-		if line.startswith("<recipe "):
-			self.__inRecipe = True
-			self.__recipeLines = [line]
-			self.__squashRecipe = True
-			return
-		
-		# detect the status report from a recipe
-		if line.startswith("<status "):
-			if not "exit='ok'" in line:
-				# only squash ok recipes
-				self.__squashRecipe = False
-			self.__recipeLines.append(line)
-			return
-		
-		# detect the end of a recipe
-		if line.startswith("</recipe>"):
-			# print the recipe
-			if self.__squashRecipe:
-				for text in self.__recipeLines:
-					if not text.startswith("+"):
-						self.out.write(text)
-			else:
-				for text in self.__recipeLines:
-					self.out.write(text)
-			
-			self.out.write(line)
-			self.__inRecipe = False
-			return
-
-		# remember the lines during a recipe
-		if self.__inRecipe:
-			self.__recipeLines.append(line)	
-		else:
-			# print all lines outside a recipe 
-			self.out.write(line)
-			
-		return True
-	
-	def close(self):
-		"""Close the log file"""
-		
-		try:
-			self.out.close()
-			return True
-		except:
-			self.out = None
-		return False
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Squash a raptor log file by removing commands from successful recipes
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+
+class FilterSquashlog(filter_interface.Filter):
+	
+	def __init__(self):
+		self.__inRecipe = False
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+		
+		if raptor_instance.logFileName == None:
+			self.out = sys.stdout
+		else:	
+			try:
+				dirname = str(raptor_instance.logFileName.Dir())
+				if dirname and not os.path.isdir(dirname):
+					os.makedirs(dirname)
+			except:
+				sys.stderr.write(str(raptor.name) + \
+						": error: cannot create directory %s\n", dirname)
+				return False
+			
+			try:
+				logname = str(raptor_instance.logFileName)
+				self.out = open(logname, "w")
+			except:
+				self.out = None
+				sys.stderr.write(str(raptor.name) + \
+						": error: cannot write log %s\n", \
+						str(raptor_instance.logFileName))
+				return False
+		
+		return True
+		
+	def write(self, line):
+		"""Write text into a squashed log file by removing commands from successful recipes"""
+		
+		# escape % characters otherwise print will fail
+		line = line.replace("%", "%%")
+		
+		# detect the start of a recipe
+		if line.startswith("<recipe "):
+			self.__inRecipe = True
+			self.__recipeLines = [line]
+			self.__squashRecipe = True
+			return
+		
+		# detect the status report from a recipe
+		if line.startswith("<status "):
+			if not "exit='ok'" in line:
+				# only squash ok recipes
+				self.__squashRecipe = False
+			self.__recipeLines.append(line)
+			return
+		
+		# detect the end of a recipe
+		if line.startswith("</recipe>"):
+			# print the recipe
+			if self.__squashRecipe:
+				for text in self.__recipeLines:
+					if not text.startswith("+"):
+						self.out.write(text)
+			else:
+				for text in self.__recipeLines:
+					self.out.write(text)
+			
+			self.out.write(line)
+			self.__inRecipe = False
+			return
+
+		# remember the lines during a recipe
+		if self.__inRecipe:
+			self.__recipeLines.append(line)	
+		else:
+			# print all lines outside a recipe 
+			self.out.write(line)
+			
+		return True
+	
+	def close(self):
+		"""Close the log file"""
+		
+		try:
+			self.out.close()
+			return True
+		except:
+			self.out = None
+		return False
--- a/sbsv2/raptor/python/plugins/filter_terminal.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_terminal.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,422 +1,422 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Filter class for filtering XML logs and generating reports
-# Prints errors and warnings to stdout
-#
-
-import sys
-import raptor
-import filter_interface
-import generic_path
-import os
-import os.path
-import re
-
-class Recipe(object):
-	"""State machine that parses a recipe
-	"""
-
-	suppress = []
-	warningRE = re.compile("^.*((Warning:)|(MAKEDEF WARNING:)) .*$", re.DOTALL | re.M | re.I)
-	infoRE = None
-	name = [ "default" ]
-	recipes = []
-
-	def __init__(self, text):
-		self.suppress = self.__class__.suppress
-		self.text = text
-		self.warningRE = Recipe.warningRE
-	
-	def warnings(self):
-		return self.warningRE.findall(self.text)
-
-	def info(self):
-		if self.infoRE:
-			return self.infoRE.findall(self.text)
-		else:
-			return []
-
-	@classmethod			
-	def factory(cls, name, text):
-		for r in Recipe.recipes:
-			if name in r.name:
-				return r(text)
-		return Recipe(text)
-	
-
-class MwLinkerRecipe(Recipe):
-	suppress = [ 
-		re.compile(
-r"^mwldsym2: warning: Cannot locate library \"MSL_All_Static_MSE_Symbian\" specified in #pragma comment\(lib,...\)$"
-r"[\n\r]*mwldsym2: warning: referenced from.*$"
-r"[\n\r]*mwldsym2: warning: Option 'Use default libraries' is enabled but linker used.*$"
-r"[\n\r]*mwldsym2: warning: runtime library from MW\[...\]LibraryFiles \(msl_all_static_mse_symbian_d.lib\);$"
-r"[\n\r]*mwldsym2: warning: this indicates a potential settings/libraries mismatch.*$"
-		, re.M)
-		, re.compile(
-r"^mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in.*$"
-r"[\n\r]*mwldsym2.exe: warning: files uc_cwhelp.obj \(.*\), startup.win32.c.obj \(msl_all_static_mse_symbian_d.lib\),.*$"
-r"[\n\r]*mwldsym2.exe: warning: keeping definition in startup.win32.c.obj.*$"
-		, re.M )
-		, re.compile(
-r"^mwldsym2.exe: warning: Option 'Use default libraries' is enabled but linker used.*$"
-r"[\n\r]*mwldsym2.exe: warning: runtime library from MW\[...\]LibraryFiles \(msl_all_static_mse_symbian_d.lib\);.*$"
-r"[\n\r]*mwldsym2.exe: warning: this indicates a potential settings/libraries mismatch.*$"
-	, re.M)
-	]
-	name = [ "win32stagetwolink", "win32simplelink" ]
-
-	def warnings(self):
-		edited = self.text
-		for s in MwLinkerRecipe.suppress:
-			edited = s.sub("", edited)
-		return Recipe.warningRE.findall(edited)
-
-Recipe.recipes.append(MwLinkerRecipe)
-
-
-class FreezeRecipe(Recipe):
-	name = [ "freeze" ]
-	warningRE = re.compile("^(WARNING:) .*$", re.DOTALL | re.M | re.I)
-	infoRE = re.compile("^(EFREEZE:) .*$", re.DOTALL | re.M | re.I)
-
-	def __init__(self, text):
-		Recipe.__init__(self, text)
-		self.warningRE = FreezeRecipe.warningRE
-		self.infoRE = FreezeRecipe.infoRE
-
-Recipe.recipes.append(FreezeRecipe)
-
-
-
-class FilterTerminal(filter_interface.Filter):
-
-	attribute_re = re.compile("([a-z][a-z0-9]*)='([^']*)'",re.I)
-	maxdots = 40 # if one prints dots then don't print masses
-	recipelinelimit = 200 # don't scan ultra-long recipes in case we run out of memory
-
-	# recipes that we think most users are interested in
-	# and the mapping that we will use to output them as
-	docare = {
-		"asmcompile" : "asmcompile" ,
-		"compile" : "compile" ,
-		"postlink" : "target",
-		"resourcecompile" : "resource",
-		"genstringtable" : "strtable",
-		"tem" : "tem",
-		"bitmapcompile" : "bitmap",
-		"bitmapcopy" : "bitmapcopy",
-		"win32compile2object" : "compile",
-		"win32stagetwolink" : "target",
-		"win32simplelink" : "target",
-		"tools2install" : "target",
-		"compile2object" : "compile",
-		"msvctoolsinstall" : "target",
-		"msvctoolscompile" : "compile",
-		"freeze" : "freeze",
-		"win32archive" : "target"
-	}
-
-	# Determine the width of the largest mapped recipe name
-	recipewidth = 0
-	for i in docare:
-		l = len(docare[i])
-		if l > recipewidth:
-			recipewidth = l # justification for printing out recipes.
-	recipewidth+=1
-
-	def __init__(self):
-		self.analyseonly = False
-		self.quiet = False
-		# defaults can use EPOCROOT
-		if "EPOCROOT" in os.environ:
-			self.epocroot = str(generic_path.Path(os.environ["EPOCROOT"]))
-		else:
-			self.epocroot = str(generic_path.Path('/'))
-		self.current_recipe_logged = False
-		self.cleaned = 0  # cleaned files
-		self.dotcount = 0 # progress dots printed so far
-		# list of strings to catch make errors (must be lowercase)
-		self.make_error_expr = set([
-				"error:",
-				": ***",
-				"make: interrupt/exception caught (code =",
-				"make.exe: interrupt/exception caught (code ="
-				])
-		# list of strings to catch make warnings (must be lowercase)
-		self.make_warning_expr = ["warning:"]
-
-		# list of strings to catch recipe warnings (must be lowercase)
-		self.recipe_warning_expr = ["warning:"]
-
-	def isMakeWarning(self, text):
-                """A simple test for warnings.
-                Can be extended do to more comprehensive checking."""
-		# generic warnings checked
-		# array of make_warning_expr holds all the possible values
-		for warn in self.make_warning_expr:
-			if warn in text.lower():
-				return True
-	
-		return False
-
-
-	def isMakeError(self, text):
-		"""A simple test for errors.	
-		Can be extended to do more comprehensive checking."""
-
-		# make, emake and pvmgmake spit out things like
-		# make: *** No rule to make target X, needed by Y. Stop.
-		#
-		# array of make_error_expr holds all the possible values
-		for err in self.make_error_expr:
-			if err in text.lower():
-				return True
-		
-		return False
-
-
-	def open(self, raptor_instance):
-		"""Set output to stdout for the various I/O methods to write to."""
-		self.raptor = raptor_instance
-
-		# Be totally silent?
-		if self.raptor.logFileName is None:
-			self.analyseonly = True
-
-		# Only print errors and warnings?
-		if self.raptor.quiet:
-			self.quiet = True
-		
-		# keep count of errors and warnings
-		self.err_count = 0
-		self.warn_count = 0
-		self.suppressed_warn_count = 0
-		self.inBody = False
-		self.inRecipe = False
-		return True
-		
-	def write(self, text):
-		"""Write errors and warnings to stdout"""
-		
-		if text.startswith("<error"):
-			start = text.find(">")
-			end = text.rfind("<")
-			self.err_count += 1
-			if not self.analyseonly:
-				sys.stderr.write(str(raptor.name) + ": error: %s\n" \
-						% text[(start + 1):end])
-		elif text.startswith("<warning"):
-			start = text.find(">")
-			end = text.rfind("<")
-			self.warn_count += 1
-			if not self.analyseonly:
-				sys.stdout.write(str(raptor.name) + ": warning: %s\n" \
-					% text[(start + 1):end])
-		elif text.startswith("<status "):
-			# detect the status report from a recipe
-			if text.find('failed') != -1:
-				self.failed = True
-			else:
-				self.failed = False
-			return
-		elif text.startswith("<recipe "):
-			# detect the start of a recipe
-			if self.inRecipe:
-				sys.stdout.flush()
-				sys.stderr.write(self.formatError("Opening recipe tag found " \
-						+ "before closing recipe tag for previous recipe:\n" \
-						+ "Discarding previous recipe (Possible logfile " \
-						+ "corruption)"))
-				sys.stderr.flush()
-			self.inRecipe = True
-			self.current_recipe_logged = False
-			m = FilterTerminal.attribute_re.findall(text)
-			self.recipe_dict = dict ()
-			for i in m:
-				self.recipe_dict[i[0]] = i[1]
-
-			# Decide what to tell the user about this recipe
-			# The target file or the source file?  
-			name = None
-			if 'source' in self.recipe_dict:
-				name = self.recipe_dict['source']
-
-			name_to_user = ""
-			# Make source files relative to the current directory if they are 
-		 	# not generated files in epocroot.  Also make sure path is in 
-			# the appropriate format for the user's shell.
-			if name and (name.find("epoc32") == -1 or name.endswith('.UID.CPP')):
-				for i in name.rsplit():
-					name_to_user += " " + generic_path.Path(i).From(generic_path.CurrentDir()).GetShellPath()
-			else:
-				# using the target.  Shorten it if it's in epocroot by just chopping off
-				# epocroot
-				name_to_user = self.recipe_dict['target']
-				if name_to_user.find(self.epocroot) != -1:
-					name_to_user = name_to_user.replace(self.epocroot,"")
-					if name_to_user.startswith('/') or name_to_user.startswith('\\'):
-						name_to_user = name_to_user[1:]
-				name_to_user = generic_path.Path(name_to_user).GetShellPath()	
-			self.recipe_dict['name_to_user'] = name_to_user
-			self.recipe_dict['mappedname'] = self.recipe_dict['name'] 
-
-			# Status message to indicate that we are building
-			recipename = self.recipe_dict['name']
-			if recipename in FilterTerminal.docare:
-				self.recipe_dict['mappedname'] = FilterTerminal.docare[recipename]
-				self.logit_if()
-
-			# This variable holds all recipe information
-			self.failed = False # Recipe status
-			self.recipeBody = []
-			return		
-		elif text.startswith("</recipe>"):
-			# detect the end of a recipe
-			if not self.inRecipe:
-				sys.stdout.flush()
-				sys.stderr.write(self.formatError("Closing recipe tag found " \
-						+ "before opening recipe tag:\nUnable to print " \
-						+ "recipe data (Possible logfile corruption)"))
-				sys.stderr.flush()
-			else:
-				self.inRecipe = False
-				
-				if self.failed == True:
-					if not self.analyseonly:
-						sys.stderr.write("\n FAILED %s for %s: %s\n" % \
-								(self.recipe_dict['name'],
-								self.recipe_dict['config'],
-								self.recipe_dict['name_to_user']))
-	
-						mmppath = generic_path.Path(self.recipe_dict['mmp']).From(generic_path.CurrentDir()).GetShellPath()
-						sys.stderr.write("  mmp: %s\n" % mmppath)
-						for L in self.recipeBody:
-							if not L.startswith('+'):
-								sys.stdout.write("   %s\n" % L.rstrip())
-					self.err_count += 1
-				else:
-					r = Recipe.factory(self.recipe_dict['name'], "".join(self.recipeBody))
-					warnings = r.warnings()
-					info = r.info()
-					if len(warnings) > 0:
-						if not self.analyseonly:
-							for L in self.recipeBody:
-								if not L.startswith('+'):
-									sys.stdout.write("   %s\n" % L.rstrip())
-						self.warn_count += len(warnings)
-	
-				self.recipeBody = []
-			return
-		elif not self.inRecipe and self.isMakeError(text):
-			# these two statements pick up errors coming from make
-			self.err_count += 1
-			sys.stderr.write("    %s\n" % text.rstrip())
-			return
-		elif not self.inRecipe and self.isMakeWarning(text):
-			self.warn_count += 1
-			sys.stdout.write("    %s\n" % text.rstrip())
-			return
-		elif text.startswith("<![CDATA["):
-                	# save CDATA body during a recipe
-			if self.inRecipe:
-				self.inBody = True
-		elif text.startswith("]]>"):
-			if self.inRecipe:
-				self.inBody = False
-		elif text.startswith("<info>Copied"):
-			if not self.analyseonly and not self.quiet:
-				start = text.find(" to ") + 4
-				end = text.find("</info>",start)
-				short_target = text[start:end]
-				if short_target.startswith(self.epocroot):
-					short_target = short_target.replace(self.epocroot,"")[1:]
-				short_target = generic_path.Path(short_target).GetShellPath()
-				sys.stdout.write(" %s: %s\n" % ("export".ljust(FilterTerminal.recipewidth), short_target))
-			return
-		elif text.find("<rm files") != -1 or text.find("<rmdir ") != -1:
-			# search for cleaning output but only if we 
-			# are not in some recipe (that would be pointless)
-			if not self.analyseonly and not self.quiet:
-				if  self.cleaned == 0:
-					sys.stdout.write("\ncleaning ")
-					self.cleaned+=1
-				elif self.dotcount < FilterTerminal.maxdots:
-					if self.cleaned % 5 == 0:
-						self.dotcount+=1
-						sys.stdout.write(".")
-					self.cleaned+=1
-			
-				return
-		elif self.inBody:
-			# We are parsing the output from a recipe
-			# we have to keep the output until we find out
-			# if the recipe failed. But not all of it if it turns
-			# out to be very long
-			if len(self.recipeBody) < FilterTerminal.recipelinelimit:
-				self.recipeBody.append(text)
-
-	def logit(self):
-		""" log a message """
-		info = self.recipe_dict['mappedname'].ljust(FilterTerminal.recipewidth)
-		config = self.recipe_dict['config']
-		name = self.recipe_dict['name_to_user'].lstrip()
-		# If its a multifile config, we print source files one below the other in a single
-		# 'compile:' statement
-		if config.endswith('multifile'):
-			files =  self.recipe_dict['name_to_user'].split()
-			name = ""
-			for i in files:
-				if i == files[0]:
-					name +=  i
-				else:
-					name +=  '\n\t      ' + i
-		sys.stdout.write(" %s: %s  \t[%s]\n" % (info, name, config))
-
-	def logit_if(self):
-		""" Tell the user about the recipe that we are processing """
-		if not self.analyseonly and not self.quiet:
-			if self.inRecipe and not self.current_recipe_logged:
-				self.logit()
-				self.current_recipe_logged = True
-	
-	def summary(self):
-		"""Errors and warnings summary"""
-		
-		if self.raptor.skipAll or self.analyseonly:
-			return
-
-
-		if self.cleaned != 0:
-			sys.stdout.write("\n\n")
-
-		if self.warn_count > 0 or self.err_count > 0:
-			sys.stdout.write("\n%s : warnings: %s\n" % (raptor.name,
-					self.warn_count))
-			sys.stdout.write("%s : errors: %s\n" % (raptor.name,
-					self.err_count))
-		else:
-			sys.stdout.write("\nno warnings or errors\n")
-
-		sys.stdout.write("\nRun time %d seconds\n" % self.raptor.runtime);
-		sys.stdout.write("\n")
-		return True
-	
-	def close(self):
-		"""Tell raptor that there were errors."""
-		if self.err_count > 0:
-			return False
-		return True
-
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for filtering XML logs and generating reports
+# Prints errors and warnings to stdout
+#
+
+import sys
+import raptor
+import filter_interface
+import generic_path
+import os
+import os.path
+import re
+
+class Recipe(object):
+	"""State machine that parses a recipe
+	"""
+
+	suppress = []
+	warningRE = re.compile("^.*((Warning:)|(MAKEDEF WARNING:)) .*$", re.DOTALL | re.M | re.I)
+	infoRE = None
+	name = [ "default" ]
+	recipes = []
+
+	def __init__(self, text):
+		self.suppress = self.__class__.suppress
+		self.text = text
+		self.warningRE = Recipe.warningRE
+	
+	def warnings(self):
+		return self.warningRE.findall(self.text)
+
+	def info(self):
+		if self.infoRE:
+			return self.infoRE.findall(self.text)
+		else:
+			return []
+
+	@classmethod			
+	def factory(cls, name, text):
+		for r in Recipe.recipes:
+			if name in r.name:
+				return r(text)
+		return Recipe(text)
+	
+
+class MwLinkerRecipe(Recipe):
+	suppress = [ 
+		re.compile(
+r"^mwldsym2: warning: Cannot locate library \"MSL_All_Static_MSE_Symbian\" specified in #pragma comment\(lib,...\)$"
+r"[\n\r]*mwldsym2: warning: referenced from.*$"
+r"[\n\r]*mwldsym2: warning: Option 'Use default libraries' is enabled but linker used.*$"
+r"[\n\r]*mwldsym2: warning: runtime library from MW\[...\]LibraryFiles \(msl_all_static_mse_symbian_d.lib\);$"
+r"[\n\r]*mwldsym2: warning: this indicates a potential settings/libraries mismatch.*$"
+		, re.M)
+		, re.compile(
+r"^mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in.*$"
+r"[\n\r]*mwldsym2.exe: warning: files uc_cwhelp.obj \(.*\), startup.win32.c.obj \(msl_all_static_mse_symbian_d.lib\),.*$"
+r"[\n\r]*mwldsym2.exe: warning: keeping definition in startup.win32.c.obj.*$"
+		, re.M )
+		, re.compile(
+r"^mwldsym2.exe: warning: Option 'Use default libraries' is enabled but linker used.*$"
+r"[\n\r]*mwldsym2.exe: warning: runtime library from MW\[...\]LibraryFiles \(msl_all_static_mse_symbian_d.lib\);.*$"
+r"[\n\r]*mwldsym2.exe: warning: this indicates a potential settings/libraries mismatch.*$"
+	, re.M)
+	]
+	name = [ "win32stagetwolink", "win32simplelink" ]
+
+	def warnings(self):
+		edited = self.text
+		for s in MwLinkerRecipe.suppress:
+			edited = s.sub("", edited)
+		return Recipe.warningRE.findall(edited)
+
+Recipe.recipes.append(MwLinkerRecipe)
+
+
+class FreezeRecipe(Recipe):
+	name = [ "freeze" ]
+	warningRE = re.compile("^(WARNING:) .*$", re.DOTALL | re.M | re.I)
+	infoRE = re.compile("^(EFREEZE:) .*$", re.DOTALL | re.M | re.I)
+
+	def __init__(self, text):
+		Recipe.__init__(self, text)
+		self.warningRE = FreezeRecipe.warningRE
+		self.infoRE = FreezeRecipe.infoRE
+
+Recipe.recipes.append(FreezeRecipe)
+
+
+
+class FilterTerminal(filter_interface.Filter):
+
+	attribute_re = re.compile("([a-z][a-z0-9]*)='([^']*)'",re.I)
+	maxdots = 40 # if one prints dots then don't print masses
+	recipelinelimit = 200 # don't scan ultra-long recipes in case we run out of memory
+
+	# recipes that we think most users are interested in
+	# and the mapping that we will use to output them as
+	docare = {
+		"asmcompile" : "asmcompile" ,
+		"compile" : "compile" ,
+		"postlink" : "target",
+		"resourcecompile" : "resource",
+		"genstringtable" : "strtable",
+		"tem" : "tem",
+		"bitmapcompile" : "bitmap",
+		"bitmapcopy" : "bitmapcopy",
+		"win32compile2object" : "compile",
+		"win32stagetwolink" : "target",
+		"win32simplelink" : "target",
+		"tools2install" : "target",
+		"compile2object" : "compile",
+		"msvctoolsinstall" : "target",
+		"msvctoolscompile" : "compile",
+		"freeze" : "freeze",
+		"win32archive" : "target"
+	}
+
+	# Determine the width of the largest mapped recipe name
+	recipewidth = 0
+	for i in docare:
+		l = len(docare[i])
+		if l > recipewidth:
+			recipewidth = l # justification for printing out recipes.
+	recipewidth+=1
+
+	def __init__(self):
+		self.analyseonly = False
+		self.quiet = False
+		# defaults can use EPOCROOT
+		if "EPOCROOT" in os.environ:
+			self.epocroot = str(generic_path.Path(os.environ["EPOCROOT"]))
+		else:
+			self.epocroot = str(generic_path.Path('/'))
+		self.current_recipe_logged = False
+		self.cleaned = 0  # cleaned files
+		self.dotcount = 0 # progress dots printed so far
+		# list of strings to catch make errors (must be lowercase)
+		self.make_error_expr = set([
+				"error:",
+				": ***",
+				"make: interrupt/exception caught (code =",
+				"make.exe: interrupt/exception caught (code ="
+				])
+		# list of strings to catch make warnings (must be lowercase)
+		self.make_warning_expr = ["warning:"]
+
+		# list of strings to catch recipe warnings (must be lowercase)
+		self.recipe_warning_expr = ["warning:"]
+
+	def isMakeWarning(self, text):
+                """A simple test for warnings.
+                Can be extended do to more comprehensive checking."""
+		# generic warnings checked
+		# array of make_warning_expr holds all the possible values
+		for warn in self.make_warning_expr:
+			if warn in text.lower():
+				return True
+	
+		return False
+
+
+	def isMakeError(self, text):
+		"""A simple test for errors.	
+		Can be extended to do more comprehensive checking."""
+
+		# make, emake and pvmgmake spit out things like
+		# make: *** No rule to make target X, needed by Y. Stop.
+		#
+		# array of make_error_expr holds all the possible values
+		for err in self.make_error_expr:
+			if err in text.lower():
+				return True
+		
+		return False
+
+
+	def open(self, raptor_instance):
+		"""Set output to stdout for the various I/O methods to write to."""
+		self.raptor = raptor_instance
+
+		# Be totally silent?
+		if self.raptor.logFileName is None:
+			self.analyseonly = True
+
+		# Only print errors and warnings?
+		if self.raptor.quiet:
+			self.quiet = True
+		
+		# keep count of errors and warnings
+		self.err_count = 0
+		self.warn_count = 0
+		self.suppressed_warn_count = 0
+		self.inBody = False
+		self.inRecipe = False
+		return True
+		
+	def write(self, text):
+		"""Write errors and warnings to stdout"""
+		
+		if text.startswith("<error"):
+			start = text.find(">")
+			end = text.rfind("<")
+			self.err_count += 1
+			if not self.analyseonly:
+				sys.stderr.write(str(raptor.name) + ": error: %s\n" \
+						% text[(start + 1):end])
+		elif text.startswith("<warning"):
+			start = text.find(">")
+			end = text.rfind("<")
+			self.warn_count += 1
+			if not self.analyseonly:
+				sys.stdout.write(str(raptor.name) + ": warning: %s\n" \
+					% text[(start + 1):end])
+		elif text.startswith("<status "):
+			# detect the status report from a recipe
+			if text.find('failed') != -1:
+				self.failed = True
+			else:
+				self.failed = False
+			return
+		elif text.startswith("<recipe "):
+			# detect the start of a recipe
+			if self.inRecipe:
+				sys.stdout.flush()
+				sys.stderr.write(self.formatError("Opening recipe tag found " \
+						+ "before closing recipe tag for previous recipe:\n" \
+						+ "Discarding previous recipe (Possible logfile " \
+						+ "corruption)"))
+				sys.stderr.flush()
+			self.inRecipe = True
+			self.current_recipe_logged = False
+			m = FilterTerminal.attribute_re.findall(text)
+			self.recipe_dict = dict ()
+			for i in m:
+				self.recipe_dict[i[0]] = i[1]
+
+			# Decide what to tell the user about this recipe
+			# The target file or the source file?  
+			name = None
+			if 'source' in self.recipe_dict:
+				name = self.recipe_dict['source']
+
+			name_to_user = ""
+			# Make source files relative to the current directory if they are 
+		 	# not generated files in epocroot.  Also make sure path is in 
+			# the appropriate format for the user's shell.
+			if name and (name.find("epoc32") == -1 or name.endswith('.UID.CPP')):
+				for i in name.rsplit():
+					name_to_user += " " + generic_path.Path(i).From(generic_path.CurrentDir()).GetShellPath()
+			else:
+				# using the target.  Shorten it if it's in epocroot by just chopping off
+				# epocroot
+				name_to_user = self.recipe_dict['target']
+				if name_to_user.find(self.epocroot) != -1:
+					name_to_user = name_to_user.replace(self.epocroot,"")
+					if name_to_user.startswith('/') or name_to_user.startswith('\\'):
+						name_to_user = name_to_user[1:]
+				name_to_user = generic_path.Path(name_to_user).GetShellPath()	
+			self.recipe_dict['name_to_user'] = name_to_user
+			self.recipe_dict['mappedname'] = self.recipe_dict['name'] 
+
+			# Status message to indicate that we are building
+			recipename = self.recipe_dict['name']
+			if recipename in FilterTerminal.docare:
+				self.recipe_dict['mappedname'] = FilterTerminal.docare[recipename]
+				self.logit_if()
+
+			# This variable holds all recipe information
+			self.failed = False # Recipe status
+			self.recipeBody = []
+			return		
+		elif text.startswith("</recipe>"):
+			# detect the end of a recipe
+			if not self.inRecipe:
+				sys.stdout.flush()
+				sys.stderr.write(self.formatError("Closing recipe tag found " \
+						+ "before opening recipe tag:\nUnable to print " \
+						+ "recipe data (Possible logfile corruption)"))
+				sys.stderr.flush()
+			else:
+				self.inRecipe = False
+				
+				if self.failed == True:
+					if not self.analyseonly:
+						sys.stderr.write("\n FAILED %s for %s: %s\n" % \
+								(self.recipe_dict['name'],
+								self.recipe_dict['config'],
+								self.recipe_dict['name_to_user']))
+	
+						mmppath = generic_path.Path(self.recipe_dict['mmp']).From(generic_path.CurrentDir()).GetShellPath()
+						sys.stderr.write("  mmp: %s\n" % mmppath)
+						for L in self.recipeBody:
+							if not L.startswith('+'):
+								sys.stdout.write("   %s\n" % L.rstrip())
+					self.err_count += 1
+				else:
+					r = Recipe.factory(self.recipe_dict['name'], "".join(self.recipeBody))
+					warnings = r.warnings()
+					info = r.info()
+					if len(warnings) > 0:
+						if not self.analyseonly:
+							for L in self.recipeBody:
+								if not L.startswith('+'):
+									sys.stdout.write("   %s\n" % L.rstrip())
+						self.warn_count += len(warnings)
+	
+				self.recipeBody = []
+			return
+		elif not self.inRecipe and self.isMakeError(text):
+			# these two statements pick up errors coming from make
+			self.err_count += 1
+			sys.stderr.write("    %s\n" % text.rstrip())
+			return
+		elif not self.inRecipe and self.isMakeWarning(text):
+			self.warn_count += 1
+			sys.stdout.write("    %s\n" % text.rstrip())
+			return
+		elif text.startswith("<![CDATA["):
+                	# save CDATA body during a recipe
+			if self.inRecipe:
+				self.inBody = True
+		elif text.startswith("]]>"):
+			if self.inRecipe:
+				self.inBody = False
+		elif text.startswith("<info>Copied"):
+			if not self.analyseonly and not self.quiet:
+				start = text.find(" to ") + 4
+				end = text.find("</info>",start)
+				short_target = text[start:end]
+				if short_target.startswith(self.epocroot):
+					short_target = short_target.replace(self.epocroot,"")[1:]
+				short_target = generic_path.Path(short_target).GetShellPath()
+				sys.stdout.write(" %s: %s\n" % ("export".ljust(FilterTerminal.recipewidth), short_target))
+			return
+		elif text.find("<rm files") != -1 or text.find("<rmdir ") != -1:
+			# search for cleaning output but only if we 
+			# are not in some recipe (that would be pointless)
+			if not self.analyseonly and not self.quiet:
+				if  self.cleaned == 0:
+					sys.stdout.write("\ncleaning ")
+					self.cleaned+=1
+				elif self.dotcount < FilterTerminal.maxdots:
+					if self.cleaned % 5 == 0:
+						self.dotcount+=1
+						sys.stdout.write(".")
+					self.cleaned+=1
+			
+				return
+		elif self.inBody:
+			# We are parsing the output from a recipe
+			# we have to keep the output until we find out
+			# if the recipe failed. But not all of it if it turns
+			# out to be very long
+			if len(self.recipeBody) < FilterTerminal.recipelinelimit:
+				self.recipeBody.append(text)
+
+	def logit(self):
+		""" log a message """
+		info = self.recipe_dict['mappedname'].ljust(FilterTerminal.recipewidth)
+		config = self.recipe_dict['config']
+		name = self.recipe_dict['name_to_user'].lstrip()
+		# If its a multifile config, we print source files one below the other in a single
+		# 'compile:' statement
+		if config.endswith('multifile'):
+			files =  self.recipe_dict['name_to_user'].split()
+			name = ""
+			for i in files:
+				if i == files[0]:
+					name +=  i
+				else:
+					name +=  '\n\t      ' + i
+		sys.stdout.write(" %s: %s  \t[%s]\n" % (info, name, config))
+
+	def logit_if(self):
+		""" Tell the user about the recipe that we are processing """
+		if not self.analyseonly and not self.quiet:
+			if self.inRecipe and not self.current_recipe_logged:
+				self.logit()
+				self.current_recipe_logged = True
+	
+	def summary(self):
+		"""Errors and warnings summary"""
+		
+		if self.raptor.skipAll or self.analyseonly:
+			return
+
+
+		if self.cleaned != 0:
+			sys.stdout.write("\n\n")
+
+		if self.warn_count > 0 or self.err_count > 0:
+			sys.stdout.write("\n%s : warnings: %s\n" % (raptor.name,
+					self.warn_count))
+			sys.stdout.write("%s : errors: %s\n" % (raptor.name,
+					self.err_count))
+		else:
+			sys.stdout.write("\nno warnings or errors\n")
+
+		sys.stdout.write("\nRun time %d seconds\n" % self.raptor.runtime);
+		sys.stdout.write("\n")
+		return True
+	
+	def close(self):
+		"""Tell raptor that there were errors."""
+		if self.err_count > 0:
+			return False
+		return True
+
--- a/sbsv2/raptor/python/plugins/filter_what.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/plugins/filter_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,128 +1,128 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Filter class for doing --what and --check operations
-#
-
-import os
-import sys
-import re
-import filter_interface
-
-class FilterWhat(filter_interface.Filter):
-
-	
-	def print_file(self, line, start, end):
-		"Ensure DOS slashes on Windows"
-		
-		"""Use chars between enclosing tags ("<>", "''", etc)
-				start = opening tag, so the line we need
-				actually starts at 'start + 1' """
-		if "win" in self.buildparameters.platform:
-			filename = line[(start + 1):end].replace("/","\\")
-		else:
-			filename = line[(start + 1):end]
-			
-		if self.check:
-			if not os.path.isfile(filename):
-				print "MISSING:", filename
-				self.ok = False
-		else:
-			self.outfile.write(filename+"\n")
-
-
-	def open(self, build_parameters):
-		"initialise"
-		
-		self.buildparameters = build_parameters
-		self.check = build_parameters.doCheck
-		self.what = build_parameters.doWhat
-
-		self.outfile = sys.stdout
-		self.outfile_close = False
-
-		if "FILTERWHAT_FILE" in os.environ:
-			try:
-				self.outfile = open(os.environ['FILTERWHAT_FILE'],"w+")
-				self.outfile_close = True
-			except Exception,e:
-				raise Exception("The 'What Filter' could not open the output file specified in the FILTER_WHAT environment variable: " + os.environ['FILTERWHAT_FILE'])
-		
-		# repetitions is for tracking repeated lines in the output log
-		# when --check and --what are called
-		self.repetitions = {}
-		
-		"Regex for old what output"
-		if "win" in self.buildparameters.platform:
-			self.regex = re.compile("^[a-zA-Z]:\S+$")
-		else:
-			self.regex = re.compile("^/\S+$")
-		
-		"Regex for targets"
-		self.target_regex = re.compile("^<(build|stringtable|resource|bitmap)>.*")
-			
-		"Regex for exports"
-		self.export_regex = re.compile("^<export destination.*")
-		
-		"Regex for zip exports"
-		self.zip_export_regex = re.compile("^<member>.*")
-		
-		self.ok = True		
-		return self.ok
-	
-	def write(self, text):
-		"process some log text"
-		
-		for line in text.splitlines():
-			line = line.rstrip()
-			
-			if not line in self.repetitions:
-				self.repetitions[line] = 0
-				
-			if self.repetitions[line] == 0:
-				if self.regex.match(line) and (self.what or self.check):
-					"Print the whole line"
-					self.print_file(line, (-1), len(line))
-					
-				if self.target_regex.match(line):
-					"Grab the filename between <build> and </build>" 
-					start = line.find(">")
-					end = line.rfind("<")
-					
-					self.print_file(line, start, end)
-					
-				elif self.export_regex.match(line):
-					"Grab the filename between the first set of '' chars" 
-					start = line.find("'")
-					end = line.find("'", (start + 1))
-					
-					self.print_file(line, start, end)
-						
-				elif self.zip_export_regex.match(line):
-					"Grab the filename between <member> and </member>" 
-					start = line.find(">")
-					end = line.rfind("<")
-					
-					self.print_file(line, start, end)
-						
-			self.repetitions[line] += 1
-				
-		return self.ok
-	
-	def close(self):
-		if self.outfile_close:
-			self.outfile.close()
-		return self.ok
-						
-	
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for doing --what and --check operations
+#
+
+import os
+import sys
+import re
+import filter_interface
+
+class FilterWhat(filter_interface.Filter):
+
+	
+	def print_file(self, line, start, end):
+		"Ensure DOS slashes on Windows"
+		
+		"""Use chars between enclosing tags ("<>", "''", etc)
+				start = opening tag, so the line we need
+				actually starts at 'start + 1' """
+		if "win" in self.buildparameters.platform:
+			filename = line[(start + 1):end].replace("/","\\")
+		else:
+			filename = line[(start + 1):end]
+			
+		if self.check:
+			if not os.path.isfile(filename):
+				print "MISSING:", filename
+				self.ok = False
+		else:
+			self.outfile.write(filename+"\n")
+
+
+	def open(self, build_parameters):
+		"initialise"
+		
+		self.buildparameters = build_parameters
+		self.check = build_parameters.doCheck
+		self.what = build_parameters.doWhat
+
+		self.outfile = sys.stdout
+		self.outfile_close = False
+
+		if "FILTERWHAT_FILE" in os.environ:
+			try:
+				self.outfile = open(os.environ['FILTERWHAT_FILE'],"w+")
+				self.outfile_close = True
+			except Exception,e:
+				raise Exception("The 'What Filter' could not open the output file specified in the FILTER_WHAT environment variable: " + os.environ['FILTERWHAT_FILE'])
+		
+		# repetitions is for tracking repeated lines in the output log
+		# when --check and --what are called
+		self.repetitions = {}
+		
+		"Regex for old what output"
+		if "win" in self.buildparameters.platform:
+			self.regex = re.compile("^[a-zA-Z]:\S+$")
+		else:
+			self.regex = re.compile("^/\S+$")
+		
+		"Regex for targets"
+		self.target_regex = re.compile("^<(build|stringtable|resource|bitmap)>.*")
+			
+		"Regex for exports"
+		self.export_regex = re.compile("^<export destination.*")
+		
+		"Regex for zip exports"
+		self.zip_export_regex = re.compile("^<member>.*")
+		
+		self.ok = True		
+		return self.ok
+	
+	def write(self, text):
+		"process some log text"
+		
+		for line in text.splitlines():
+			line = line.rstrip()
+			
+			if not line in self.repetitions:
+				self.repetitions[line] = 0
+				
+			if self.repetitions[line] == 0:
+				if self.regex.match(line) and (self.what or self.check):
+					"Print the whole line"
+					self.print_file(line, (-1), len(line))
+					
+				if self.target_regex.match(line):
+					"Grab the filename between <build> and </build>" 
+					start = line.find(">")
+					end = line.rfind("<")
+					
+					self.print_file(line, start, end)
+					
+				elif self.export_regex.match(line):
+					"Grab the filename between the first set of '' chars" 
+					start = line.find("'")
+					end = line.find("'", (start + 1))
+					
+					self.print_file(line, start, end)
+						
+				elif self.zip_export_regex.match(line):
+					"Grab the filename between <member> and </member>" 
+					start = line.find(">")
+					end = line.rfind("<")
+					
+					self.print_file(line, start, end)
+						
+			self.repetitions[line] += 1
+				
+		return self.ok
+	
+	def close(self):
+		if self.outfile_close:
+			self.outfile.close()
+		return self.ok
+						
+	
--- a/sbsv2/raptor/python/pyparsing.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/pyparsing.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,2961 +1,2961 @@
-# module pyparsing.py
-#
-# Copyright (c) 2003-2006  Paul T. McGuire
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-#from __future__ import generators
-
-__doc__ = \
-"""
-pyparsing module - Classes and methods to define and execute parsing grammars
-
-The pyparsing module is an alternative approach to creating and executing simple grammars, 
-vs. the traditional lex/yacc approach, or the use of regular expressions.  With pyparsing, you
-don't need to learn a new syntax for defining grammars or matching expressions - the parsing module 
-provides a library of classes that you use to construct the grammar directly in Python.
-
-Here is a program to parse "Hello, World!" (or any greeting of the form "<salutation>, <addressee>!")::
-
-    from pyparsing import Word, alphas
-    
-    # define grammar of a greeting
-    greet = Word( alphas ) + "," + Word( alphas ) + "!" 
-    
-    hello = "Hello, World!"
-    print hello, "->", greet.parseString( hello )
-
-The program outputs the following::
-
-    Hello, World! -> ['Hello', ',', 'World', '!']
-
-The Python representation of the grammar is quite readable, owing to the self-explanatory 
-class names, and the use of '+', '|' and '^' operators.
-
-The parsed results returned from parseString() can be accessed as a nested list, a dictionary, or an 
-object with named attributes.
-
-The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
- - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello  ,  World  !", etc.)
- - quoted strings
- - embedded comments
-"""
-__version__ = "1.4.5"
-__versionTime__ = "16 December 2006 07:20"
-__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
-
-import string
-import copy,sys
-import warnings
-import re
-import sre_constants
-import xml.sax.saxutils
-#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
-
-def _ustr(obj):
-    """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
-       str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
-       then < returns the unicode object | encodes it with the default encoding | ... >.
-    """
-    try:
-        # If this works, then _ustr(obj) has the same behaviour as str(obj), so
-        # it won't break any existing code.
-        return str(obj)
-        
-    except UnicodeEncodeError, e:
-        # The Python docs (http://docs.python.org/ref/customization.html#l2h-182)
-        # state that "The return value must be a string object". However, does a
-        # unicode object (being a subclass of basestring) count as a "string
-        # object"?
-        # If so, then return a unicode object:
-        return unicode(obj)
-        # Else encode it... but how? There are many choices... :)
-        # Replace unprintables with escape codes?
-        #return unicode(obj).encode(sys.getdefaultencoding(), 'backslashreplace_errors')
-        # Replace unprintables with question marks?
-        #return unicode(obj).encode(sys.getdefaultencoding(), 'replace')
-        # ...
-
-def _str2dict(strg):
-    return dict( [(c,0) for c in strg] )
-    #~ return set( [c for c in strg] )
-
-class _Constants(object):
-    pass
-    
-alphas     = string.lowercase + string.uppercase
-nums       = string.digits
-hexnums    = nums + "ABCDEFabcdef"
-alphanums  = alphas + nums    
-
-class ParseBaseException(Exception):
-    """base exception class for all parsing runtime exceptions"""
-    __slots__ = ( "loc","msg","pstr","parserElement" )
-    # Performance tuning: we construct a *lot* of these, so keep this
-    # constructor as small and fast as possible        
-    def __init__( self, pstr, loc, msg, elem=None ):
-        self.loc = loc
-        self.msg = msg
-        self.pstr = pstr
-        self.parserElement = elem
-
-    def __getattr__( self, aname ):
-        """supported attributes by name are:
-            - lineno - returns the line number of the exception text
-            - col - returns the column number of the exception text
-            - line - returns the line containing the exception text
-        """
-        if( aname == "lineno" ):
-            return lineno( self.loc, self.pstr )
-        elif( aname in ("col", "column") ):
-            return col( self.loc, self.pstr )
-        elif( aname == "line" ):
-            return line( self.loc, self.pstr )
-        else:
-            raise AttributeError, aname
-
-    def __str__( self ):
-        return "%s (at char %d), (line:%d, col:%d)" % ( self.msg, self.loc, self.lineno, self.column )
-    def __repr__( self ):
-        return _ustr(self)
-    def markInputline( self, markerString = ">!<" ):
-        """Extracts the exception line from the input string, and marks 
-           the location of the exception with a special symbol.
-        """
-        line_str = self.line
-        line_column = self.column - 1
-        if markerString:
-            line_str = "".join( [line_str[:line_column], markerString, line_str[line_column:]])
-        return line_str.strip()
-
-class ParseException(ParseBaseException):
-    """exception thrown when parse expressions don't match class"""
-    """supported attributes by name are:
-        - lineno - returns the line number of the exception text
-        - col - returns the column number of the exception text
-        - line - returns the line containing the exception text
-    """
-    pass
-    
-class ParseFatalException(ParseBaseException):
-    """user-throwable exception thrown when inconsistent parse content
-       is found; stops all parsing immediately"""
-    pass
-
-class ReparseException(ParseBaseException):
-    def __init_( self, newstring, restartLoc ):
-        self.newParseText = newstring
-        self.reparseLoc = restartLoc
-
-
-class RecursiveGrammarException(Exception):
-    """exception thrown by validate() if the grammar could be improperly recursive"""
-    def __init__( self, parseElementList ):
-        self.parseElementTrace = parseElementList
-    
-    def __str__( self ):
-        return "RecursiveGrammarException: %s" % self.parseElementTrace
-
-class ParseResults(object):
-    """Structured parse results, to provide multiple means of access to the parsed data:
-       - as a list (len(results))
-       - by list index (results[0], results[1], etc.)
-       - by attribute (results.<resultsName>)
-       """
-    __slots__ = ( "__toklist", "__tokdict", "__doinit", "__name", "__parent", "__accumNames" )
-    def __new__(cls, toklist, name=None, asList=True, modal=True ):
-        if isinstance(toklist, cls):
-            return toklist
-        retobj = object.__new__(cls)
-        retobj.__doinit = True
-        return retobj
-        
-    # Performance tuning: we construct a *lot* of these, so keep this
-    # constructor as small and fast as possible
-    def __init__( self, toklist, name=None, asList=True, modal=True ):
-        if self.__doinit:
-            self.__doinit = False
-            self.__name = None
-            self.__parent = None
-            self.__accumNames = {}
-            if isinstance(toklist, list):
-                self.__toklist = toklist[:]
-            else:
-                self.__toklist = [toklist]
-            self.__tokdict = dict()
-
-        # this line is related to debugging the asXML bug
-        #~ asList = False
-        
-        if name:
-            if not modal:
-                self.__accumNames[name] = 0
-            if isinstance(name,int):
-                name = _ustr(name) # will always return a str, but use _ustr for consistency
-            self.__name = name
-            if not toklist in (None,'',[]):
-                if isinstance(toklist,basestring): 
-                    toklist = [ toklist ]
-                if asList:
-                    if isinstance(toklist,ParseResults):
-                        self[name] = (toklist.copy(),-1)
-                    else:
-                        self[name] = (ParseResults(toklist[0]),-1)
-                    self[name].__name = name
-                else:
-                    try:
-                        self[name] = toklist[0]
-                    except (KeyError,TypeError):
-                        self[name] = toklist
-
-    def __getitem__( self, i ):
-        if isinstance( i, (int,slice) ):
-            return self.__toklist[i]
-        else:
-            if i not in self.__accumNames:
-                return self.__tokdict[i][-1][0]
-            else:
-                return ParseResults([ v[0] for v in self.__tokdict[i] ])
-
-    def __setitem__( self, k, v ):
-        if isinstance(v,tuple):
-            self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
-            sub = v[0]
-        elif isinstance(k,int):
-            self.__toklist[k] = v
-            sub = v
-        else:
-            self.__tokdict[k] = self.__tokdict.get(k,list()) + [(v,0)]
-            sub = v
-        if isinstance(sub,ParseResults):
-            sub.__parent = self
-        
-    def __delitem__( self, i ):
-        if isinstance(i,(int,slice)):
-            del self.__toklist[i]
-        else:
-            del self._tokdict[i]
-
-    def __contains__( self, k ):
-        return self.__tokdict.has_key(k)
-        
-    def __len__( self ): return len( self.__toklist )
-    def __nonzero__( self ): return len( self.__toklist ) > 0
-    def __iter__( self ): return iter( self.__toklist )
-    def keys( self ): 
-        """Returns all named result keys."""
-        return self.__tokdict.keys()
-    
-    def items( self ): 
-        """Returns all named result keys and values as a list of tuples."""
-        return [(k,self[k]) for k in self.__tokdict.keys()]
-    
-    def values( self ): 
-        """Returns all named result values."""
-        return [ v[-1][0] for v in self.__tokdict.values() ]
-
-    def __getattr__( self, name ):
-        if name not in self.__slots__:
-            if self.__tokdict.has_key( name ):
-                if name not in self.__accumNames:
-                    return self.__tokdict[name][-1][0]
-                else:
-                    return ParseResults([ v[0] for v in self.__tokdict[name] ])
-            else:
-                return ""
-        return None
-
-    def __add__( self, other ):
-        ret = self.copy()
-        ret += other
-        return ret
-        
-    def __iadd__( self, other ):
-        if other.__tokdict:
-            offset = len(self.__toklist)
-            addoffset = ( lambda a: (a<0 and offset) or (a+offset) )
-            otheritems = other.__tokdict.items()
-            otherdictitems = [(k,(v[0],addoffset(v[1])) ) for (k,vlist) in otheritems for v in vlist]
-            for k,v in otherdictitems:
-                self[k] = v
-                if isinstance(v[0],ParseResults):
-                    v[0].__parent = self
-        self.__toklist += other.__toklist
-        self.__accumNames.update( other.__accumNames )
-        del other
-        return self
-       
-    def __repr__( self ):
-        return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
-
-    def __str__( self ):
-        out = "["
-        sep = ""
-        for i in self.__toklist:
-            if isinstance(i, ParseResults):
-                out += sep + _ustr(i)
-            else:
-                out += sep + repr(i)
-            sep = ", "
-        out += "]"
-        return out
-
-    def _asStringList( self, sep='' ):
-        out = []
-        for item in self.__toklist:
-            if out and sep:
-                out.append(sep)
-            if isinstance( item, ParseResults ):
-                out += item._asStringList()
-            else:
-                out.append( _ustr(item) )
-        return out
-
-    def asList( self ):
-        """Returns the parse results as a nested list of matching tokens, all converted to strings."""
-        out = []
-        for res in self.__toklist:
-            if isinstance(res,ParseResults):
-                out.append( res.asList() )
-            else:
-                out.append( res )
-        return out
-
-    def asDict( self ):
-        """Returns the named parse results as dictionary."""
-        return dict( self.items() )
-
-    def copy( self ):
-        """Returns a new copy of a ParseResults object."""
-        ret = ParseResults( self.__toklist )
-        ret.__tokdict = self.__tokdict.copy()
-        ret.__parent = self.__parent
-        ret.__accumNames.update( self.__accumNames )
-        ret.__name = self.__name
-        return ret
-        
-    def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
-        """Returns the parse results as XML. Tags are created for tokens and lists that have defined results names."""
-        nl = "\n"
-        out = []
-        namedItems = dict( [ (v[1],k) for (k,vlist) in self.__tokdict.items() for v in vlist ] )
-        nextLevelIndent = indent + "  "
-        
-        # collapse out indents if formatting is not desired
-        if not formatted:
-            indent = ""
-            nextLevelIndent = ""
-            nl = ""
-            
-        selfTag = None
-        if doctag is not None:
-            selfTag = doctag
-        else:
-            if self.__name:
-                selfTag = self.__name
-        
-        if not selfTag:
-            if namedItemsOnly:
-                return ""
-            else:
-                selfTag = "ITEM"
-        
-        out += [ nl, indent, "<", selfTag, ">" ]
-        
-        worklist = self.__toklist
-        for i,res in enumerate(worklist):
-            if isinstance(res,ParseResults):
-                if i in namedItems:
-                    out += [ res.asXML(namedItems[i], namedItemsOnly and doctag is None, nextLevelIndent,formatted)]
-                else:
-                    out += [ res.asXML(None, namedItemsOnly and doctag is None, nextLevelIndent,formatted)]
-            else:
-                # individual token, see if there is a name for it
-                resTag = None
-                if i in namedItems:
-                    resTag = namedItems[i]
-                if not resTag:
-                    if namedItemsOnly:
-                        continue
-                    else:
-                        resTag = "ITEM"
-                xmlBodyText = xml.sax.saxutils.escape(_ustr(res))
-                out += [ nl, nextLevelIndent, "<", resTag, ">", xmlBodyText, "</", resTag, ">" ]
-        
-        out += [ nl, indent, "</", selfTag, ">" ]
-        return "".join(out)
-
-    def __lookup(self,sub):
-        for k,vlist in self.__tokdict.items():
-            for v,loc in vlist:
-                if sub is v:
-                    return k
-        return None
-            
-    def getName(self):
-        """Returns the results name for this token expression."""
-        if self.__name:
-            return self.__name
-        elif self.__parent:
-            par = self.__parent
-            if par:
-                return par.__lookup(self)
-            else:
-                return None
-        elif (len(self) == 1 and 
-               len(self.__tokdict) == 1 and
-               self.__tokdict.values()[0][0][1] in (0,-1)):
-            return self.__tokdict.keys()[0]
-        else:
-            return None
-            
-    def dump(self,indent='',depth=0):
-        """Diagnostic method for listing out the contents of a ParseResults.
-           Accepts an optional indent argument so that this string can be embedded
-           in a nested display of other data."""
-        out = []
-        out.append( indent+str(self.asList()) )
-        keys = self.items()
-        keys.sort()
-        for k,v in keys:
-            if out:
-                out.append('\n')
-            out.append( "%s%s- %s: " % (indent,('  '*depth), k) )
-            if isinstance(v,ParseResults):
-                if v.keys():
-                    #~ out.append('\n')
-                    out.append( v.dump(indent,depth+1) )
-                    #~ out.append('\n')
-                else:
-                    out.append(str(v))
-            else:
-                out.append(str(v))
-        #~ out.append('\n')
-        return "".join(out)
-
-    # add support for pickle protocol
-    def __getstate__(self):
-        return ( self.__toklist,
-                 ( self.__tokdict.copy(),
-                   self.__parent,
-                   self.__accumNames,
-                   self.__name ) )
-    
-    def __setstate__(self,state):
-        self.__toklist = state[0]
-        self.__tokdict, \
-        self.__parent, \
-        inAccumNames, \
-        self.__name = state[1]
-        self.__accumNames = {}
-        self.__accumNames.update(inAccumNames)
-
-
-def col (loc,strg):
-    """Returns current column within a string, counting newlines as line separators.
-   The first column is number 1.
-   """
-    return (loc<len(strg) and strg[loc] == '\n') and 1 or loc - strg.rfind("\n", 0, loc)
-
-def lineno(loc,strg):
-    """Returns current line number within a string, counting newlines as line separators.
-   The first line is number 1.
-   """
-    return strg.count("\n",0,loc) + 1
-
-def line( loc, strg ):
-    """Returns the line of text containing loc within a string, counting newlines as line separators.
-       """
-    lastCR = strg.rfind("\n", 0, loc)
-    nextCR = strg.find("\n", loc)
-    if nextCR > 0:
-        return strg[lastCR+1:nextCR]
-    else:
-        return strg[lastCR+1:]
-
-def _defaultStartDebugAction( instring, loc, expr ):
-    print "Match",expr,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )
-
-def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
-    print "Matched",expr,"->",toks.asList()
-    
-def _defaultExceptionDebugAction( instring, loc, expr, exc ):
-    print "Exception raised:", exc
-
-def nullDebugAction(*args):
-    """'Do-nothing' debug action, to suppress debugging output during parsing."""
-    pass
-
-class ParserElement(object):
-    """Abstract base level parser element class."""
-    DEFAULT_WHITE_CHARS = " \n\t\r"
-    
-    def setDefaultWhitespaceChars( chars ):
-        """Overrides the default whitespace chars
-        """
-        ParserElement.DEFAULT_WHITE_CHARS = chars
-    setDefaultWhitespaceChars = staticmethod(setDefaultWhitespaceChars)
-    
-    def __init__( self, savelist=False ):
-        self.parseAction = list()
-        self.failAction = None
-        #~ self.name = "<unknown>"  # don't define self.name, let subclasses try/except upcall
-        self.strRepr = None
-        self.resultsName = None
-        self.saveAsList = savelist
-        self.skipWhitespace = True
-        self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
-        self.copyDefaultWhiteChars = True
-        self.mayReturnEmpty = False
-        self.keepTabs = False
-        self.ignoreExprs = list()
-        self.debug = False
-        self.streamlined = False
-        self.mayIndexError = True
-        self.errmsg = ""
-        self.modalResults = True
-        self.debugActions = ( None, None, None )
-        self.re = None
-
-    def copy( self ):
-        """Make a copy of this ParserElement.  Useful for defining different parse actions
-           for the same parsing pattern, using copies of the original parse element."""
-        cpy = copy.copy( self )
-        cpy.parseAction = self.parseAction[:]
-        cpy.ignoreExprs = self.ignoreExprs[:]
-        if self.copyDefaultWhiteChars:
-            cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
-        return cpy
-
-    def setName( self, name ):
-        """Define name for this expression, for use in debugging."""
-        self.name = name
-        self.errmsg = "Expected " + self.name
-        return self
-
-    def setResultsName( self, name, listAllMatches=False ):
-        """Define name for referencing matching tokens as a nested attribute 
-           of the returned parse results.
-           NOTE: this returns a *copy* of the original ParserElement object;
-           this is so that the client can define a basic element, such as an
-           integer, and reference it in multiple places with different names.
-        """
-        newself = self.copy()
-        newself.resultsName = name
-        newself.modalResults = not listAllMatches
-        return newself
-
-    def normalizeParseActionArgs( f ):
-        """Internal method used to decorate parse actions that take fewer than 3 arguments,
-           so that all parse actions can be called as f(s,l,t)."""
-        STAR_ARGS = 4
-
-        try:
-            restore = None
-            if isinstance(f,type):
-                restore = f
-                f = f.__init__
-            if f.func_code.co_flags & STAR_ARGS:
-                return f
-            numargs = f.func_code.co_argcount
-            if hasattr(f,"im_self"):
-                numargs -= 1
-            if restore:
-                f = restore
-        except AttributeError:
-            try:
-                # not a function, must be a callable object, get info from the
-                # im_func binding of its bound __call__ method
-                if f.__call__.im_func.func_code.co_flags & STAR_ARGS:
-                    return f
-                numargs = f.__call__.im_func.func_code.co_argcount
-                if hasattr(f.__call__,"im_self"):
-                    numargs -= 1
-            except AttributeError:
-                # not a bound method, get info directly from __call__ method
-                if f.__call__.func_code.co_flags & STAR_ARGS:
-                    return f
-                numargs = f.__call__.func_code.co_argcount
-                if hasattr(f.__call__,"im_self"):
-                    numargs -= 1
-
-        #~ print "adding function %s with %d args" % (f.func_name,numargs)
-        if numargs == 3:
-            return f
-        else:
-            if numargs == 2:
-                def tmp(s,l,t):
-                    return f(l,t)
-            elif numargs == 1:
-                def tmp(s,l,t):
-                    return f(t)
-            else: #~ numargs == 0:
-                def tmp(s,l,t):
-                    return f()
-            return tmp
-    normalizeParseActionArgs = staticmethod(normalizeParseActionArgs)
-            
-    def setParseAction( self, *fns ):
-        """Define action to perform when successfully matching parse element definition.
-           Parse action fn is a callable method with 0-3 arguments, called as fn(s,loc,toks),
-           fn(loc,toks), fn(toks), or just fn(), where:
-            - s   = the original string being parsed
-            - loc = the location of the matching substring
-            - toks = a list of the matched tokens, packaged as a ParseResults object
-           If the functions in fns modify the tokens, they can return them as the return
-           value from fn, and the modified list of tokens will replace the original.
-           Otherwise, fn does not need to return any value."""
-        self.parseAction = map(self.normalizeParseActionArgs, list(fns))
-        return self
-
-    def addParseAction( self, *fns ):
-        """Add parse action to expression's list of parse actions. See setParseAction_."""
-        self.parseAction += map(self.normalizeParseActionArgs, list(fns))
-        return self
-
-    def setFailAction( self, fn ):
-        """Define action to perform if parsing fails at this expression. 
-           Fail acton fn is a callable function that takes the arguments 
-           fn(s,loc,expr,err) where:
-            - s = string being parsed
-            - loc = location where expression match was attempted and failed
-            - expr = the parse expression that failed
-            - err = the exception thrown
-           The function returns no value.  It may throw ParseFatalException
-           if it is desired to stop parsing immediately."""
-        self.failAction = fn
-        return self
-        
-    def skipIgnorables( self, instring, loc ):
-        exprsFound = True
-        while exprsFound:
-            exprsFound = False
-            for e in self.ignoreExprs:
-                try:
-                    while 1:
-                        loc,dummy = e._parse( instring, loc )
-                        exprsFound = True
-                except ParseException:
-                    pass
-        return loc
-
-    def preParse( self, instring, loc ):
-        if self.ignoreExprs:
-            loc = self.skipIgnorables( instring, loc )
-        
-        if self.skipWhitespace:
-            wt = self.whiteChars
-            instrlen = len(instring)
-            while loc < instrlen and instring[loc] in wt:
-                loc += 1
-                
-        return loc
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        return loc, []
-
-    def postParse( self, instring, loc, tokenlist ):
-        return tokenlist
-
-    #~ @profile
-    def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
-        debugging = ( self.debug ) #and doActions )
-
-        if debugging or self.failAction:
-            #~ print "Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )
-            if (self.debugActions[0] ):
-                self.debugActions[0]( instring, loc, self )
-            if callPreParse:
-                preloc = self.preParse( instring, loc )
-            else:
-                preloc = loc
-            tokensStart = loc
-            try:
-                try:
-                    loc,tokens = self.parseImpl( instring, preloc, doActions )
-                except IndexError:
-                    raise ParseException( instring, len(instring), self.errmsg, self )
-            #~ except ReparseException, retryEx:
-                #~ pass
-            except ParseException, err:
-                #~ print "Exception raised:", err
-                if self.debugActions[2]:
-                    self.debugActions[2]( instring, tokensStart, self, err )
-                if self.failAction:
-                    self.failAction( instring, tokensStart, self, err )
-                raise
-        else:
-            if callPreParse:
-                preloc = self.preParse( instring, loc )
-            else:
-                preloc = loc
-            tokensStart = loc
-            if self.mayIndexError or loc >= len(instring):
-                try:
-                    loc,tokens = self.parseImpl( instring, preloc, doActions )
-                except IndexError:
-                    raise ParseException( instring, len(instring), self.errmsg, self )
-            else:
-                loc,tokens = self.parseImpl( instring, preloc, doActions )
-        
-        tokens = self.postParse( instring, loc, tokens )
-
-        retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
-        if self.parseAction and doActions:
-            if debugging:
-                try:
-                    for fn in self.parseAction:
-                        tokens = fn( instring, tokensStart, retTokens )
-                        if tokens is not None:
-                            retTokens = ParseResults( tokens, 
-                                                      self.resultsName, 
-                                                      asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), 
-                                                      modal=self.modalResults )
-                except ParseException, err:
-                    #~ print "Exception raised in user parse action:", err
-                    if (self.debugActions[2] ):
-                        self.debugActions[2]( instring, tokensStart, self, err )
-                    raise
-            else:
-                for fn in self.parseAction:
-                    tokens = fn( instring, tokensStart, retTokens )
-                    if tokens is not None:
-                        retTokens = ParseResults( tokens, 
-                                                  self.resultsName, 
-                                                  asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), 
-                                                  modal=self.modalResults )
-
-        if debugging:
-            #~ print "Matched",self,"->",retTokens.asList()
-            if (self.debugActions[1] ):
-                self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
-
-        return loc, retTokens
-
-    def tryParse( self, instring, loc ):
-        return self._parse( instring, loc, doActions=False )[0]
-    
-    # this method gets repeatedly called during backtracking with the same arguments -
-    # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
-    def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
-        if doActions and self.parseAction:
-            return self._parseNoCache( instring, loc, doActions, callPreParse )
-        lookup = (self,instring,loc,callPreParse)
-        if lookup in ParserElement._exprArgCache:
-            value = ParserElement._exprArgCache[ lookup ]
-            if isinstance(value,Exception):
-                if isinstance(value,ParseBaseException):
-                    value.loc = loc
-                raise value
-            return value
-        else:
-            try:
-                ParserElement._exprArgCache[ lookup ] = \
-                    value = self._parseNoCache( instring, loc, doActions, callPreParse )
-                return value
-            except ParseBaseException, pe:
-                ParserElement._exprArgCache[ lookup ] = pe
-                raise
-
-    _parse = _parseNoCache
-
-    # argument cache for optimizing repeated calls when backtracking through recursive expressions
-    _exprArgCache = {}
-    def resetCache():
-        ParserElement._exprArgCache.clear()
-    resetCache = staticmethod(resetCache)
-    
-    _packratEnabled = False
-    def enablePackrat():
-        """Enables "packrat" parsing, which adds memoizing to the parsing logic.
-           Repeated parse attempts at the same string location (which happens 
-           often in many complex grammars) can immediately return a cached value, 
-           instead of re-executing parsing/validating code.  Memoizing is done of
-           both valid results and parsing exceptions.
-            
-           This speedup may break existing programs that use parse actions that 
-           have side-effects.  For this reason, packrat parsing is disabled when
-           you first import pyparsing.  To activate the packrat feature, your
-           program must call the class method ParserElement.enablePackrat().  If
-           your program uses psyco to "compile as you go", you must call 
-           enablePackrat before calling psyco.full().  If you do not do this,
-           Python will crash.  For best results, call enablePackrat() immediately
-           after importing pyparsing.
-        """
-        if not ParserElement._packratEnabled:
-            ParserElement._packratEnabled = True
-            ParserElement._parse = ParserElement._parseCache
-    enablePackrat = staticmethod(enablePackrat)
-
-    def parseString( self, instring ):
-        """Execute the parse expression with the given string.
-           This is the main interface to the client code, once the complete 
-           expression has been built.
-        """
-        ParserElement.resetCache()
-        if not self.streamlined:
-            self.streamline()
-            #~ self.saveAsList = True
-        for e in self.ignoreExprs:
-            e.streamline()
-        if self.keepTabs:
-            loc, tokens = self._parse( instring, 0 )
-        else:
-            loc, tokens = self._parse( instring.expandtabs(), 0 )
-        return tokens
-
-    def scanString( self, instring, maxMatches=sys.maxint ):
-        """Scan the input string for expression matches.  Each match will return the 
-           matching tokens, start location, and end location.  May be called with optional
-           maxMatches argument, to clip scanning after 'n' matches are found."""
-        if not self.streamlined:
-            self.streamline()
-        for e in self.ignoreExprs:
-            e.streamline()
-        
-        if not self.keepTabs:
-            instring = instring.expandtabs()
-        instrlen = len(instring)
-        loc = 0
-        preparseFn = self.preParse
-        parseFn = self._parse
-        ParserElement.resetCache()
-        matches = 0
-        while loc <= instrlen and matches < maxMatches:
-            try:
-                preloc = preparseFn( instring, loc )
-                nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
-            except ParseException:
-                loc = preloc+1
-            else:
-                matches += 1
-                yield tokens, preloc, nextLoc
-                loc = nextLoc
-        
-    def transformString( self, instring ):
-        """Extension to scanString, to modify matching text with modified tokens that may
-           be returned from a parse action.  To use transformString, define a grammar and 
-           attach a parse action to it that modifies the returned token list.  
-           Invoking transformString() on a target string will then scan for matches, 
-           and replace the matched text patterns according to the logic in the parse 
-           action.  transformString() returns the resulting transformed string."""
-        out = []
-        lastE = 0
-        # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
-        # keep string locs straight between transformString and scanString
-        self.keepTabs = True
-        for t,s,e in self.scanString( instring ):
-            out.append( instring[lastE:s] )
-            if t:
-                if isinstance(t,ParseResults):
-                    out += t.asList()
-                elif isinstance(t,list):
-                    out += t
-                else:
-                    out.append(t)
-            lastE = e
-        out.append(instring[lastE:])
-        return "".join(out)
-
-    def searchString( self, instring, maxMatches=sys.maxint ):
-        """Another extension to scanString, simplifying the access to the tokens found
-           to match the given parse expression.  May be called with optional
-           maxMatches argument, to clip searching after 'n' matches are found.
-        """
-        return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
-            
-    def __add__(self, other ):
-        """Implementation of + operator - returns And"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return And( [ self, other ] )
-
-    def __radd__(self, other ):
-        """Implementation of += operator"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return other + self
-
-    def __or__(self, other ):
-        """Implementation of | operator - returns MatchFirst"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return MatchFirst( [ self, other ] )
-
-    def __ror__(self, other ):
-        """Implementation of |= operator"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return other | self
-
-    def __xor__(self, other ):
-        """Implementation of ^ operator - returns Or"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return Or( [ self, other ] )
-
-    def __rxor__(self, other ):
-        """Implementation of ^= operator"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return other ^ self
-
-    def __and__(self, other ):
-        """Implementation of & operator - returns Each"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return Each( [ self, other ] )
-
-    def __rand__(self, other ):
-        """Implementation of right-& operator"""
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        if not isinstance( other, ParserElement ):
-            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
-                    SyntaxWarning, stacklevel=2)
-        return other & self
-
-    def __invert__( self ):
-        """Implementation of ~ operator - returns NotAny"""
-        return NotAny( self )
-
-    def suppress( self ):
-        """Suppresses the output of this ParserElement; useful to keep punctuation from
-           cluttering up returned output.
-        """
-        return Suppress( self )
-
-    def leaveWhitespace( self ):
-        """Disables the skipping of whitespace before matching the characters in the 
-           ParserElement's defined pattern.  This is normally only used internally by
-           the pyparsing module, but may be needed in some whitespace-sensitive grammars.
-        """
-        self.skipWhitespace = False
-        return self
-
-    def setWhitespaceChars( self, chars ):
-        """Overrides the default whitespace chars
-        """
-        self.skipWhitespace = True
-        self.whiteChars = chars
-        self.copyDefaultWhiteChars = False
-        return self
-        
-    def parseWithTabs( self ):
-        """Overrides default behavior to expand <TAB>s to spaces before parsing the input string.
-           Must be called before parseString when the input grammar contains elements that 
-           match <TAB> characters."""
-        self.keepTabs = True
-        return self
-        
-    def ignore( self, other ):
-        """Define expression to be ignored (e.g., comments) while doing pattern 
-           matching; may be called repeatedly, to define multiple comment or other
-           ignorable patterns.
-        """
-        if isinstance( other, Suppress ):
-            if other not in self.ignoreExprs:
-                self.ignoreExprs.append( other )
-        else:
-            self.ignoreExprs.append( Suppress( other ) )
-        return self
-
-    def setDebugActions( self, startAction, successAction, exceptionAction ):
-        """Enable display of debugging messages while doing pattern matching."""
-        self.debugActions = (startAction or _defaultStartDebugAction, 
-                             successAction or _defaultSuccessDebugAction, 
-                             exceptionAction or _defaultExceptionDebugAction)
-        self.debug = True
-        return self
-
-    def setDebug( self, flag=True ):
-        """Enable display of debugging messages while doing pattern matching."""
-        if flag:
-            self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
-        else:
-            self.debug = False
-        return self
-
-    def __str__( self ):
-        return self.name
-
-    def __repr__( self ):
-        return _ustr(self)
-        
-    def streamline( self ):
-        self.streamlined = True
-        self.strRepr = None
-        return self
-        
-    def checkRecursion( self, parseElementList ):
-        pass
-        
-    def validate( self, validateTrace=[] ):
-        """Check defined expressions for valid structure, check for infinite recursive definitions."""
-        self.checkRecursion( [] )
-
-    def parseFile( self, file_or_filename ):
-        """Execute the parse expression on the given file or filename.
-           If a filename is specified (instead of a file object),
-           the entire file is opened, read, and closed before parsing.
-        """
-        try:
-            file_contents = file_or_filename.read()
-        except AttributeError:
-            f = open(file_or_filename, "rb")
-            file_contents = f.read()
-            f.close()
-        return self.parseString(file_contents)
-
-
-class Token(ParserElement):
-    """Abstract ParserElement subclass, for defining atomic matching patterns."""
-    def __init__( self ):
-        super(Token,self).__init__( savelist=False )
-        self.myException = ParseException("",0,"",self)
-
-    def setName(self, name):
-        s = super(Token,self).setName(name)
-        self.errmsg = "Expected " + self.name
-        s.myException.msg = self.errmsg
-        return s
-
-
-class Empty(Token):
-    """An empty token, will always match."""
-    def __init__( self ):
-        super(Empty,self).__init__()
-        self.name = "Empty"
-        self.mayReturnEmpty = True
-        self.mayIndexError = False
-
-
-class NoMatch(Token):
-    """A token that will never match."""
-    def __init__( self ):
-        super(NoMatch,self).__init__()
-        self.name = "NoMatch"
-        self.mayReturnEmpty = True
-        self.mayIndexError = False
-        self.errmsg = "Unmatchable token"
-        self.myException.msg = self.errmsg
-        
-    def parseImpl( self, instring, loc, doActions=True ):
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-
-
-class Literal(Token):
-    """Token to exactly match a specified string."""
-    def __init__( self, matchString ):
-        super(Literal,self).__init__()
-        self.match = matchString
-        self.matchLen = len(matchString)
-        try:
-            self.firstMatchChar = matchString[0]
-        except IndexError:
-            warnings.warn("null string passed to Literal; use Empty() instead", 
-                            SyntaxWarning, stacklevel=2)
-            self.__class__ = Empty
-        self.name = '"%s"' % self.match
-        self.errmsg = "Expected " + self.name
-        self.mayReturnEmpty = False
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-
-    # Performance tuning: this routine gets called a *lot*
-    # if this is a single character match string  and the first character matches,
-    # short-circuit as quickly as possible, and avoid calling startswith
-    #~ @profile
-    def parseImpl( self, instring, loc, doActions=True ):
-        if (instring[loc] == self.firstMatchChar and
-            (self.matchLen==1 or instring.startswith(self.match,loc)) ):
-            return loc+self.matchLen, self.match
-        #~ raise ParseException( instring, loc, self.errmsg )
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-
-class Keyword(Token):
-    """Token to exactly match a specified string as a keyword, that is, it must be 
-       immediately followed by a non-keyword character.  Compare with Literal::
-         Literal("if") will match the leading 'if' in 'ifAndOnlyIf'.
-         Keyword("if") will not; it will only match the leading 'if in 'if x=1', or 'if(y==2)'
-       Accepts two optional constructor arguments in addition to the keyword string:
-       identChars is a string of characters that would be valid identifier characters,
-       defaulting to all alphanumerics + "_" and "$"; caseless allows case-insensitive
-       matching, default is False.
-    """
-    DEFAULT_KEYWORD_CHARS = alphanums+"_$"
-    
-    def __init__( self, matchString, identChars=DEFAULT_KEYWORD_CHARS, caseless=False ):
-        super(Keyword,self).__init__()
-        self.match = matchString
-        self.matchLen = len(matchString)
-        try:
-            self.firstMatchChar = matchString[0]
-        except IndexError:
-            warnings.warn("null string passed to Keyword; use Empty() instead", 
-                            SyntaxWarning, stacklevel=2)
-        self.name = '"%s"' % self.match
-        self.errmsg = "Expected " + self.name
-        self.mayReturnEmpty = False
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-        self.caseless = caseless
-        if caseless:
-            self.caselessmatch = matchString.upper()
-            identChars = identChars.upper()
-        self.identChars = _str2dict(identChars)
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        if self.caseless:
-            if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
-                 (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
-                 (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
-                return loc+self.matchLen, self.match
-        else:
-            if (instring[loc] == self.firstMatchChar and
-                (self.matchLen==1 or instring.startswith(self.match,loc)) and
-                (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
-                (loc == 0 or instring[loc-1] not in self.identChars) ):
-                return loc+self.matchLen, self.match
-        #~ raise ParseException( instring, loc, self.errmsg )
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-        
-    def copy(self):
-        c = super(Keyword,self).copy()
-        c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
-        return c
-        
-    def setDefaultKeywordChars( chars ):
-        """Overrides the default Keyword chars
-        """
-        Keyword.DEFAULT_KEYWORD_CHARS = chars
-    setDefaultKeywordChars = staticmethod(setDefaultKeywordChars)        
-
-
-class CaselessLiteral(Literal):
-    """Token to match a specified string, ignoring case of letters.
-       Note: the matched results will always be in the case of the given
-       match string, NOT the case of the input text.
-    """
-    def __init__( self, matchString ):
-        super(CaselessLiteral,self).__init__( matchString.upper() )
-        # Preserve the defining literal.
-        self.returnString = matchString
-        self.name = "'%s'" % self.returnString
-        self.errmsg = "Expected " + self.name
-        self.myException.msg = self.errmsg
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        if instring[ loc:loc+self.matchLen ].upper() == self.match:
-            return loc+self.matchLen, self.returnString
-        #~ raise ParseException( instring, loc, self.errmsg )
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-
-class CaselessKeyword(Keyword):
-    def __init__( self, matchString, identChars=Keyword.DEFAULT_KEYWORD_CHARS ):
-        super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
-             (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
-            return loc+self.matchLen, self.match
-        #~ raise ParseException( instring, loc, self.errmsg )
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-
-class Word(Token):
-    """Token for matching words composed of allowed character sets.
-       Defined with string containing all allowed initial characters,
-       an optional string containing allowed body characters (if omitted,
-       defaults to the initial character set), and an optional minimum,
-       maximum, and/or exact length.
-    """
-    def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0 ):
-        super(Word,self).__init__()
-        self.initCharsOrig = initChars
-        self.initChars = _str2dict(initChars)
-        if bodyChars :
-            self.bodyCharsOrig = bodyChars
-            self.bodyChars = _str2dict(bodyChars)
-        else:
-            self.bodyCharsOrig = initChars
-            self.bodyChars = _str2dict(initChars)
-            
-        self.maxSpecified = max > 0
-
-        self.minLen = min
-
-        if max > 0:
-            self.maxLen = max
-        else:
-            self.maxLen = sys.maxint
-
-        if exact > 0:
-            self.maxLen = exact
-            self.minLen = exact
-
-        self.name = _ustr(self)
-        self.errmsg = "Expected " + self.name
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-        
-        if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
-            if self.bodyCharsOrig == self.initCharsOrig:
-                self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
-            elif len(self.bodyCharsOrig) == 1:
-                self.reString = "%s[%s]*" % \
-                                      (re.escape(self.initCharsOrig),
-                                      _escapeRegexRangeChars(self.bodyCharsOrig),)
-            else:
-                self.reString = "[%s][%s]*" % \
-                                      (_escapeRegexRangeChars(self.initCharsOrig),
-                                      _escapeRegexRangeChars(self.bodyCharsOrig),)
-            try:
-                self.re = re.compile( self.reString )
-            except:
-                self.re = None
-        
-    def parseImpl( self, instring, loc, doActions=True ):
-        if self.re:
-            result = self.re.match(instring,loc)
-            if not result:
-                exc = self.myException
-                exc.loc = loc
-                exc.pstr = instring
-                raise exc
-            
-            loc = result.end()
-            return loc,result.group()
-        
-        if not(instring[ loc ] in self.initChars):
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        start = loc
-        loc += 1
-        instrlen = len(instring)
-        bodychars = self.bodyChars
-        maxloc = start + self.maxLen
-        maxloc = min( maxloc, instrlen )
-        while loc < maxloc and instring[loc] in bodychars:
-            loc += 1
-            
-        throwException = False
-        if loc - start < self.minLen:
-            throwException = True
-        if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
-            throwException = True
-
-        if throwException:
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-
-        return loc, instring[start:loc]
-
-    def __str__( self ):
-        try:
-            return super(Word,self).__str__()
-        except:
-            pass
-
-            
-        if self.strRepr is None:
-            
-            def charsAsStr(s):
-                if len(s)>4:
-                    return s[:4]+"..."
-                else:
-                    return s
-            
-            if ( self.initCharsOrig != self.bodyCharsOrig ):
-                self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
-            else:
-                self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
-
-        return self.strRepr
-
-
-class Regex(Token):
-    """Token for matching strings that match a given regular expression.
-       Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
-    """
-    def __init__( self, pattern, flags=0):
-        """The parameters pattern and flags are passed to the re.compile() function as-is. See the Python re module for an explanation of the acceptable patterns and flags."""
-        super(Regex,self).__init__()
-        
-        if len(pattern) == 0:
-            warnings.warn("null string passed to Regex; use Empty() instead", 
-                    SyntaxWarning, stacklevel=2)
-    
-        self.pattern = pattern
-        self.flags = flags
-        
-        try:
-            self.re = re.compile(self.pattern, self.flags)
-            self.reString = self.pattern
-        except sre_constants.error,e:
-            warnings.warn("invalid pattern (%s) passed to Regex" % pattern, 
-                SyntaxWarning, stacklevel=2)
-            raise
-
-        self.name = _ustr(self)
-        self.errmsg = "Expected " + self.name
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-        self.mayReturnEmpty = True
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        result = self.re.match(instring,loc)
-        if not result:
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        
-        loc = result.end()
-        d = result.groupdict()
-        ret = ParseResults(result.group())
-        if d:
-            for k in d.keys():
-                ret[k] = d[k]
-        return loc,ret
-    
-    def __str__( self ):
-        try:
-            return super(Regex,self).__str__()
-        except:
-            pass
-        
-        if self.strRepr is None:
-            self.strRepr = "Re:(%s)" % repr(self.pattern)
-        
-        return self.strRepr
-
-
-class QuotedString(Token):
-    """Token for matching strings that are delimited by quoting characters.
-    """
-    def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None):
-        """
-           Defined with the following parameters:
-           - quoteChar - string of one or more characters defining the quote delimiting string
-           - escChar - character to escape quotes, typically backslash (default=None)
-           - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=None)
-           - multiline - boolean indicating whether quotes can span multiple lines (default=False)
-           - unquoteResults - boolean indicating whether the matched text should be unquoted (default=True)
-           - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=None => same as quoteChar)
-        """
-        super(QuotedString,self).__init__()
-        
-        # remove white space from quote chars - wont work anyway
-        quoteChar = quoteChar.strip()
-        if len(quoteChar) == 0:
-            warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
-            raise SyntaxError()
-        
-        if endQuoteChar is None:
-            endQuoteChar = quoteChar
-        else:
-            endQuoteChar = endQuoteChar.strip()
-            if len(endQuoteChar) == 0:
-                warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
-                raise SyntaxError()
-        
-        self.quoteChar = quoteChar
-        self.quoteCharLen = len(quoteChar)
-        self.firstQuoteChar = quoteChar[0]
-        self.endQuoteChar = endQuoteChar
-        self.endQuoteCharLen = len(endQuoteChar)
-        self.escChar = escChar
-        self.escQuote = escQuote
-        self.unquoteResults = unquoteResults
-        
-        if multiline:
-            self.flags = re.MULTILINE | re.DOTALL
-            self.pattern = r'%s(?:[^%s%s]' % \
-                ( re.escape(self.quoteChar),
-                  _escapeRegexRangeChars(self.endQuoteChar[0]),
-                  (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
-        else:
-            self.flags = 0
-            self.pattern = r'%s(?:[^%s\n\r%s]' % \
-                ( re.escape(self.quoteChar),
-                  _escapeRegexRangeChars(self.endQuoteChar[0]),
-                  (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
-        if len(self.endQuoteChar) > 1:
-            self.pattern += (
-                '|(?:' + ')|(?:'.join(["%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
-                                               _escapeRegexRangeChars(self.endQuoteChar[i])) 
-                                    for i in range(len(self.endQuoteChar)-1,0,-1)]) + ')'
-                )
-        if escQuote:
-            self.pattern += (r'|(?:%s)' % re.escape(escQuote))
-        if escChar:
-            self.pattern += (r'|(?:%s.)' % re.escape(escChar))
-            self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
-        self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
-        
-        try:
-            self.re = re.compile(self.pattern, self.flags)
-            self.reString = self.pattern
-        except sre_constants.error,e:
-            warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, 
-                SyntaxWarning, stacklevel=2)
-            raise
-
-        self.name = _ustr(self)
-        self.errmsg = "Expected " + self.name
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-        self.mayReturnEmpty = True
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
-        if not result:
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        
-        loc = result.end()
-        ret = result.group()
-        
-        if self.unquoteResults:
-            
-            # strip off quotes
-            ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
-                
-            if isinstance(ret,basestring):
-                # replace escaped characters
-                if self.escChar:
-                    ret = re.sub(self.escCharReplacePattern,"\g<1>",ret)
-
-                # replace escaped quotes
-                if self.escQuote:
-                    ret = ret.replace(self.escQuote, self.endQuoteChar)
-
-        return loc, ret
-    
-    def __str__( self ):
-        try:
-            return super(QuotedString,self).__str__()
-        except:
-            pass
-        
-        if self.strRepr is None:
-            self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
-        
-        return self.strRepr
-
-
-class CharsNotIn(Token):
-    """Token for matching words composed of characters *not* in a given set.
-       Defined with string containing all disallowed characters, and an optional 
-       minimum, maximum, and/or exact length.
-    """
-    def __init__( self, notChars, min=1, max=0, exact=0 ):
-        super(CharsNotIn,self).__init__()
-        self.skipWhitespace = False
-        self.notChars = notChars
-        
-        self.minLen = min
-
-        if max > 0:
-            self.maxLen = max
-        else:
-            self.maxLen = sys.maxint
-
-        if exact > 0:
-            self.maxLen = exact
-            self.minLen = exact
-        
-        self.name = _ustr(self)
-        self.errmsg = "Expected " + self.name
-        self.mayReturnEmpty = ( self.minLen == 0 )
-        self.myException.msg = self.errmsg
-        self.mayIndexError = False
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        if instring[loc] in self.notChars:
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-            
-        start = loc
-        loc += 1
-        notchars = self.notChars
-        maxlen = min( start+self.maxLen, len(instring) )
-        while loc < maxlen and (instring[loc] not in notchars):
-            loc += 1
-
-        if loc - start < self.minLen:
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-
-        return loc, instring[start:loc]
-
-    def __str__( self ):
-        try:
-            return super(CharsNotIn, self).__str__()
-        except:
-            pass
-
-        if self.strRepr is None:
-            if len(self.notChars) > 4:
-                self.strRepr = "!W:(%s...)" % self.notChars[:4]
-            else:
-                self.strRepr = "!W:(%s)" % self.notChars
-        
-        return self.strRepr
-
-class White(Token):
-    """Special matching class for matching whitespace.  Normally, whitespace is ignored
-       by pyparsing grammars.  This class is included when some whitespace structures
-       are significant.  Define with a string containing the whitespace characters to be
-       matched; default is " \\t\\n".  Also takes optional min, max, and exact arguments,
-       as defined for the Word class."""
-    whiteStrs = {
-        " " : "<SPC>",
-        "\t": "<TAB>",
-        "\n": "<LF>",
-        "\r": "<CR>",
-        "\f": "<FF>",
-        }
-    def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
-        super(White,self).__init__()
-        self.matchWhite = ws
-        self.setWhitespaceChars( "".join([c for c in self.whiteChars if c not in self.matchWhite]) )
-        #~ self.leaveWhitespace()
-        self.name = ("".join([White.whiteStrs[c] for c in self.matchWhite]))
-        self.mayReturnEmpty = True
-        self.errmsg = "Expected " + self.name
-        self.myException.msg = self.errmsg
-
-        self.minLen = min
-
-        if max > 0:
-            self.maxLen = max
-        else:
-            self.maxLen = sys.maxint
-
-        if exact > 0:
-            self.maxLen = exact
-            self.minLen = exact
-            
-    def parseImpl( self, instring, loc, doActions=True ):
-        if not(instring[ loc ] in self.matchWhite):
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        start = loc
-        loc += 1
-        maxloc = start + self.maxLen
-        maxloc = min( maxloc, len(instring) )
-        while loc < maxloc and instring[loc] in self.matchWhite:
-            loc += 1
-
-        if loc - start < self.minLen:
-            #~ raise ParseException( instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-
-        return loc, instring[start:loc]
-
-
-class PositionToken(Token):
-    def __init__( self ):
-        super(PositionToken,self).__init__()
-        self.name=self.__class__.__name__
-        self.mayReturnEmpty = True
-        self.mayIndexError = False
-
-class GoToColumn(PositionToken):
-    """Token to advance to a specific column of input text; useful for tabular report scraping."""
-    def __init__( self, colno ):
-        super(GoToColumn,self).__init__()
-        self.col = colno
-
-    def preParse( self, instring, loc ):
-        if col(loc,instring) != self.col:
-            instrlen = len(instring)
-            if self.ignoreExprs:
-                loc = self.skipIgnorables( instring, loc )
-            while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
-                loc += 1
-        return loc
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        thiscol = col( loc, instring )
-        if thiscol > self.col:
-            raise ParseException( instring, loc, "Text not in expected column", self )
-        newloc = loc + self.col - thiscol
-        ret = instring[ loc: newloc ]
-        return newloc, ret
-
-class LineStart(PositionToken):
-    """Matches if current position is at the beginning of a line within the parse string"""
-    def __init__( self ):
-        super(LineStart,self).__init__()
-        self.setWhitespaceChars( " \t" )
-        self.errmsg = "Expected start of line"
-        self.myException.msg = self.errmsg
-
-    def preParse( self, instring, loc ):
-        preloc = super(LineStart,self).preParse(instring,loc)
-        if instring[preloc] == "\n":
-            loc += 1
-        return loc
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        if not( loc==0 or
-            (loc == self.preParse( instring, 0 )) or
-            (instring[loc-1] == "\n") ): #col(loc, instring) != 1:
-            #~ raise ParseException( instring, loc, "Expected start of line" )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        return loc, []
-
-class LineEnd(PositionToken):
-    """Matches if current position is at the end of a line within the parse string"""
-    def __init__( self ):
-        super(LineEnd,self).__init__()
-        self.setWhitespaceChars( " \t" )
-        self.errmsg = "Expected end of line"
-        self.myException.msg = self.errmsg
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        if loc<len(instring):
-            if instring[loc] == "\n":
-                return loc+1, "\n"
-            else:
-                #~ raise ParseException( instring, loc, "Expected end of line" )
-                exc = self.myException
-                exc.loc = loc
-                exc.pstr = instring
-                raise exc
-        elif loc == len(instring):
-            return loc+1, []
-        else:
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-
-class StringStart(PositionToken):
-    """Matches if current position is at the beginning of the parse string"""
-    def __init__( self ):
-        super(StringStart,self).__init__()
-        self.errmsg = "Expected start of text"
-        self.myException.msg = self.errmsg
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        if loc != 0:
-            # see if entire string up to here is just whitespace and ignoreables
-            if loc != self.preParse( instring, 0 ):
-                #~ raise ParseException( instring, loc, "Expected start of text" )
-                exc = self.myException
-                exc.loc = loc
-                exc.pstr = instring
-                raise exc
-        return loc, []
-
-class StringEnd(PositionToken):
-    """Matches if current position is at the end of the parse string"""
-    def __init__( self ):
-        super(StringEnd,self).__init__()
-        self.errmsg = "Expected end of text"
-        self.myException.msg = self.errmsg
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        if loc < len(instring):
-            #~ raise ParseException( instring, loc, "Expected end of text" )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        elif loc == len(instring):
-            return loc+1, []
-        else:
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-
-
-class ParseExpression(ParserElement):
-    """Abstract subclass of ParserElement, for combining and post-processing parsed tokens."""
-    def __init__( self, exprs, savelist = False ):
-        super(ParseExpression,self).__init__(savelist)
-        if isinstance( exprs, list ):
-            self.exprs = exprs
-        elif isinstance( exprs, basestring ):
-            self.exprs = [ Literal( exprs ) ]
-        else:
-            self.exprs = [ exprs ]
-
-    def __getitem__( self, i ):
-        return self.exprs[i]
-
-    def append( self, other ):
-        self.exprs.append( other )
-        self.strRepr = None
-        return self
-
-    def leaveWhitespace( self ):
-        """Extends leaveWhitespace defined in base class, and also invokes leaveWhitespace on
-           all contained expressions."""
-        self.skipWhitespace = False
-        self.exprs = [ e.copy() for e in self.exprs ]
-        for e in self.exprs:
-            e.leaveWhitespace()
-        return self
-
-    def ignore( self, other ):
-        if isinstance( other, Suppress ):
-            if other not in self.ignoreExprs:
-                super( ParseExpression, self).ignore( other )
-                for e in self.exprs:
-                    e.ignore( self.ignoreExprs[-1] )
-        else:
-            super( ParseExpression, self).ignore( other )
-            for e in self.exprs:
-                e.ignore( self.ignoreExprs[-1] )
-        return self
-
-    def __str__( self ):
-        try:
-            return super(ParseExpression,self).__str__()
-        except:
-            pass
-            
-        if self.strRepr is None:
-            self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
-        return self.strRepr
-
-    def streamline( self ):
-        super(ParseExpression,self).streamline()
-
-        for e in self.exprs:
-            e.streamline()
-
-        # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
-        # but only if there are no parse actions or resultsNames on the nested And's
-        # (likewise for Or's and MatchFirst's)
-        if ( len(self.exprs) == 2 ):
-            other = self.exprs[0]
-            if ( isinstance( other, self.__class__ ) and
-                  not(other.parseAction) and
-                  other.resultsName is None and
-                  not other.debug ):
-                self.exprs = other.exprs[:] + [ self.exprs[1] ]
-                self.strRepr = None
-                self.mayReturnEmpty |= other.mayReturnEmpty
-                self.mayIndexError  |= other.mayIndexError
-
-            other = self.exprs[-1]
-            if ( isinstance( other, self.__class__ ) and
-                  not(other.parseAction) and
-                  other.resultsName is None and
-                  not other.debug ):
-                self.exprs = self.exprs[:-1] + other.exprs[:]
-                self.strRepr = None
-                self.mayReturnEmpty |= other.mayReturnEmpty
-                self.mayIndexError  |= other.mayIndexError
-
-        return self
-
-    def setResultsName( self, name, listAllMatches=False ):
-        ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
-        return ret
-    
-    def validate( self, validateTrace=[] ):
-        tmp = validateTrace[:]+[self]
-        for e in self.exprs:
-            e.validate(tmp)
-        self.checkRecursion( [] )
-
-class And(ParseExpression):
-    """Requires all given ParseExpressions to be found in the given order.
-       Expressions may be separated by whitespace.
-       May be constructed using the '+' operator.
-    """
-    def __init__( self, exprs, savelist = True ):
-        super(And,self).__init__(exprs, savelist)
-        self.mayReturnEmpty = True
-        for e in self.exprs:
-            if not e.mayReturnEmpty:
-                self.mayReturnEmpty = False
-                break
-        self.setWhitespaceChars( exprs[0].whiteChars )
-        self.skipWhitespace = exprs[0].skipWhitespace
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        # pass False as last arg to _parse for first element, since we already
-        # pre-parsed the string as part of our And pre-parsing
-        loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
-        for e in self.exprs[1:]:
-            loc, exprtokens = e._parse( instring, loc, doActions )
-            if exprtokens or exprtokens.keys():
-                resultlist += exprtokens
-        return loc, resultlist
-
-    def __iadd__(self, other ):
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        return self.append( other ) #And( [ self, other ] )
-        
-    def checkRecursion( self, parseElementList ):
-        subRecCheckList = parseElementList[:] + [ self ]
-        for e in self.exprs:
-            e.checkRecursion( subRecCheckList )
-            if not e.mayReturnEmpty:
-                break
-                
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "{" + " ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
-        
-        return self.strRepr
-    
-
-class Or(ParseExpression):
-    """Requires that at least one ParseExpression is found.
-       If two expressions match, the expression that matches the longest string will be used.
-       May be constructed using the '^' operator.
-    """
-    def __init__( self, exprs, savelist = False ):
-        super(Or,self).__init__(exprs, savelist)
-        self.mayReturnEmpty = False
-        for e in self.exprs:
-            if e.mayReturnEmpty:
-                self.mayReturnEmpty = True
-                break
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        maxExcLoc = -1
-        maxMatchLoc = -1
-        for e in self.exprs:
-            try:
-                loc2 = e.tryParse( instring, loc )
-            except ParseException, err:
-                if err.loc > maxExcLoc:
-                    maxException = err
-                    maxExcLoc = err.loc
-            except IndexError, err:
-                if len(instring) > maxExcLoc:
-                    maxException = ParseException(instring,len(instring),e.errmsg,self)
-                    maxExcLoc = len(instring)
-            else:
-                if loc2 > maxMatchLoc:
-                    maxMatchLoc = loc2
-                    maxMatchExp = e
-        
-        if maxMatchLoc < 0:
-            if self.exprs:
-                raise maxException
-            else:
-                raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-        return maxMatchExp._parse( instring, loc, doActions )
-
-    def __ixor__(self, other ):
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        return self.append( other ) #Or( [ self, other ] )
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "{" + " ^ ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
-        
-        return self.strRepr
-    
-    def checkRecursion( self, parseElementList ):
-        subRecCheckList = parseElementList[:] + [ self ]
-        for e in self.exprs:
-            e.checkRecursion( subRecCheckList )
-
-
-class MatchFirst(ParseExpression):
-    """Requires that at least one ParseExpression is found.
-       If two expressions match, the first one listed is the one that will match.
-       May be constructed using the '|' operator.
-    """
-    def __init__( self, exprs, savelist = False ):
-        super(MatchFirst,self).__init__(exprs, savelist)
-        if exprs:
-            self.mayReturnEmpty = False
-            for e in self.exprs:
-                if e.mayReturnEmpty:
-                    self.mayReturnEmpty = True
-                    break
-        else:
-            self.mayReturnEmpty = True
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        maxExcLoc = -1
-        for e in self.exprs:
-            try:
-                ret = e._parse( instring, loc, doActions )
-                return ret
-            except ParseException, err:
-                if err.loc > maxExcLoc:
-                    maxException = err
-                    maxExcLoc = err.loc
-            except IndexError, err:
-                if len(instring) > maxExcLoc:
-                    maxException = ParseException(instring,len(instring),e.errmsg,self)
-                    maxExcLoc = len(instring)
-
-        # only got here if no expression matched, raise exception for match that made it the furthest
-        else:
-            if self.exprs:
-                raise maxException
-            else:
-                raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-    def __ior__(self, other ):
-        if isinstance( other, basestring ):
-            other = Literal( other )
-        return self.append( other ) #MatchFirst( [ self, other ] )
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "{" + " | ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
-        
-        return self.strRepr
-    
-    def checkRecursion( self, parseElementList ):
-        subRecCheckList = parseElementList[:] + [ self ]
-        for e in self.exprs:
-            e.checkRecursion( subRecCheckList )
-
-class Each(ParseExpression):
-    """Requires all given ParseExpressions to be found, but in any order.
-       Expressions may be separated by whitespace.
-       May be constructed using the '&' operator.
-    """
-    def __init__( self, exprs, savelist = True ):
-        super(Each,self).__init__(exprs, savelist)
-        self.mayReturnEmpty = True
-        for e in self.exprs:
-            if not e.mayReturnEmpty:
-                self.mayReturnEmpty = False
-                break
-        self.skipWhitespace = True
-        self.optionals = [ e.expr for e in exprs if isinstance(e,Optional) ]
-        self.multioptionals = [ e.expr for e in exprs if isinstance(e,ZeroOrMore) ]
-        self.multirequired = [ e.expr for e in exprs if isinstance(e,OneOrMore) ]
-        self.required = [ e for e in exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
-        self.required += self.multirequired
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        tmpLoc = loc
-        tmpReqd = self.required[:]
-        tmpOpt  = self.optionals[:]
-        matchOrder = []
-
-        keepMatching = True
-        while keepMatching:
-            tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
-            failed = []
-            for e in tmpExprs:
-                try:
-                    tmpLoc = e.tryParse( instring, tmpLoc )
-                except ParseException:
-                    failed.append(e)
-                else:
-                    matchOrder.append(e)
-                    if e in tmpReqd:
-                        tmpReqd.remove(e)
-                    elif e in tmpOpt:
-                        tmpOpt.remove(e)
-            if len(failed) == len(tmpExprs):
-                keepMatching = False
-        
-        if tmpReqd:
-            missing = ", ".join( [ _ustr(e) for e in tmpReqd ] )
-            raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
-
-        resultlist = []
-        for e in matchOrder:
-            loc,results = e._parse(instring,loc,doActions)
-            resultlist.append(results)
-            
-        finalResults = ParseResults([])
-        for r in resultlist:
-            dups = {}
-            for k in r.keys():
-                if k in finalResults.keys():
-                    tmp = ParseResults(finalResults[k])
-                    tmp += ParseResults(r[k])
-                    dups[k] = tmp
-            finalResults += ParseResults(r)
-            for k,v in dups.items():
-                finalResults[k] = v
-        return loc, finalResults
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "{" + " & ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
-        
-        return self.strRepr
-    
-    def checkRecursion( self, parseElementList ):
-        subRecCheckList = parseElementList[:] + [ self ]
-        for e in self.exprs:
-            e.checkRecursion( subRecCheckList )
-
-
-class ParseElementEnhance(ParserElement):
-    """Abstract subclass of ParserElement, for combining and post-processing parsed tokens."""
-    def __init__( self, expr, savelist=False ):
-        super(ParseElementEnhance,self).__init__(savelist)
-        if isinstance( expr, basestring ):
-            expr = Literal(expr)
-        self.expr = expr
-        self.strRepr = None
-        if expr is not None:
-            self.mayIndexError = expr.mayIndexError
-            self.setWhitespaceChars( expr.whiteChars )
-            self.skipWhitespace = expr.skipWhitespace
-            self.saveAsList = expr.saveAsList
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        if self.expr is not None:
-            return self.expr._parse( instring, loc, doActions, callPreParse=False )
-        else:
-            raise ParseException("",loc,self.errmsg,self)
-            
-    def leaveWhitespace( self ):
-        self.skipWhitespace = False
-        self.expr = self.expr.copy()
-        if self.expr is not None:
-            self.expr.leaveWhitespace()
-        return self
-
-    def ignore( self, other ):
-        if isinstance( other, Suppress ):
-            if other not in self.ignoreExprs:
-                super( ParseElementEnhance, self).ignore( other )
-                if self.expr is not None:
-                    self.expr.ignore( self.ignoreExprs[-1] )
-        else:
-            super( ParseElementEnhance, self).ignore( other )
-            if self.expr is not None:
-                self.expr.ignore( self.ignoreExprs[-1] )
-        return self
-
-    def streamline( self ):
-        super(ParseElementEnhance,self).streamline()
-        if self.expr is not None:
-            self.expr.streamline()
-        return self
-
-    def checkRecursion( self, parseElementList ):
-        if self in parseElementList:
-            raise RecursiveGrammarException( parseElementList+[self] )
-        subRecCheckList = parseElementList[:] + [ self ]
-        if self.expr is not None:
-            self.expr.checkRecursion( subRecCheckList )
-        
-    def validate( self, validateTrace=[] ):
-        tmp = validateTrace[:]+[self]
-        if self.expr is not None:
-            self.expr.validate(tmp)
-        self.checkRecursion( [] )
-    
-    def __str__( self ):
-        try:
-            return super(ParseElementEnhance,self).__str__()
-        except:
-            pass
-            
-        if self.strRepr is None and self.expr is not None:
-            self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
-        return self.strRepr
-
-
-class FollowedBy(ParseElementEnhance):
-    """Lookahead matching of the given parse expression.  FollowedBy
-    does *not* advance the parsing position within the input string, it only 
-    verifies that the specified parse expression matches at the current 
-    position.  FollowedBy always returns a null token list."""
-    def __init__( self, expr ):
-        super(FollowedBy,self).__init__(expr)
-        self.mayReturnEmpty = True
-        
-    def parseImpl( self, instring, loc, doActions=True ):
-        self.expr.tryParse( instring, loc )
-        return loc, []
-
-
-class NotAny(ParseElementEnhance):
-    """Lookahead to disallow matching with the given parse expression.  NotAny
-    does *not* advance the parsing position within the input string, it only 
-    verifies that the specified parse expression does *not* match at the current 
-    position.  Also, NotAny does *not* skip over leading whitespace. NotAny 
-    always returns a null token list.  May be constructed using the '~' operator."""
-    def __init__( self, expr ):
-        super(NotAny,self).__init__(expr)
-        #~ self.leaveWhitespace()
-        self.skipWhitespace = False  # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
-        self.mayReturnEmpty = True
-        self.errmsg = "Found unwanted token, "+_ustr(self.expr)
-        self.myException = ParseException("",0,self.errmsg,self)
-        
-    def parseImpl( self, instring, loc, doActions=True ):
-        try:
-            self.expr.tryParse( instring, loc )
-        except (ParseException,IndexError):
-            pass
-        else:
-            #~ raise ParseException(instring, loc, self.errmsg )
-            exc = self.myException
-            exc.loc = loc
-            exc.pstr = instring
-            raise exc
-        return loc, []
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "~{" + _ustr(self.expr) + "}"
-        
-        return self.strRepr
-
-
-class ZeroOrMore(ParseElementEnhance):
-    """Optional repetition of zero or more of the given expression."""
-    def __init__( self, expr ):
-        super(ZeroOrMore,self).__init__(expr)
-        self.mayReturnEmpty = True
-    
-    def parseImpl( self, instring, loc, doActions=True ):
-        tokens = []
-        try:
-            loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
-            hasIgnoreExprs = ( len(self.ignoreExprs) > 0 )
-            while 1:
-                if hasIgnoreExprs:
-                    preloc = self.skipIgnorables( instring, loc )
-                else:
-                    preloc = loc
-                loc, tmptokens = self.expr._parse( instring, preloc, doActions )
-                if tmptokens or tmptokens.keys():
-                    tokens += tmptokens
-        except (ParseException,IndexError):
-            pass
-
-        return loc, tokens
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "[" + _ustr(self.expr) + "]..."
-        
-        return self.strRepr
-    
-    def setResultsName( self, name, listAllMatches=False ):
-        ret = super(ZeroOrMore,self).setResultsName(name,listAllMatches)
-        ret.saveAsList = True
-        return ret
-    
-
-class OneOrMore(ParseElementEnhance):
-    """Repetition of one or more of the given expression."""
-    def parseImpl( self, instring, loc, doActions=True ):
-        # must be at least one
-        loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
-        try:
-            hasIgnoreExprs = ( len(self.ignoreExprs) > 0 )
-            while 1:
-                if hasIgnoreExprs:
-                    preloc = self.skipIgnorables( instring, loc )
-                else:
-                    preloc = loc
-                loc, tmptokens = self.expr._parse( instring, preloc, doActions )
-                if tmptokens or tmptokens.keys():
-                    tokens += tmptokens
-        except (ParseException,IndexError):
-            pass
-
-        return loc, tokens
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "{" + _ustr(self.expr) + "}..."
-        
-        return self.strRepr
-    
-    def setResultsName( self, name, listAllMatches=False ):
-        ret = super(OneOrMore,self).setResultsName(name,listAllMatches)
-        ret.saveAsList = True
-        return ret
-
-class _NullToken(object):
-    def __bool__(self):
-        return False
-    def __str__(self):
-        return ""
-
-_optionalNotMatched = _NullToken()
-class Optional(ParseElementEnhance):
-    """Optional matching of the given expression.
-       A default return string can also be specified, if the optional expression
-       is not found.
-    """
-    def __init__( self, exprs, default=_optionalNotMatched ):
-        super(Optional,self).__init__( exprs, savelist=False )
-        self.defaultValue = default
-        self.mayReturnEmpty = True
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        try:
-            loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
-        except (ParseException,IndexError):
-            if self.defaultValue is not _optionalNotMatched:
-                tokens = [ self.defaultValue ]
-            else:
-                tokens = []
-        return loc, tokens
-
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-            
-        if self.strRepr is None:
-            self.strRepr = "[" + _ustr(self.expr) + "]"
-        
-        return self.strRepr
-
-
-class SkipTo(ParseElementEnhance):
-    """Token for skipping over all undefined text until the matched expression is found.
-       If include is set to true, the matched expression is also consumed.  The ignore
-       argument is used to define grammars (typically quoted strings and comments) that 
-       might contain false matches.
-    """
-    def __init__( self, other, include=False, ignore=None ):
-        super( SkipTo, self ).__init__( other )
-        if ignore is not None:
-            self.expr = self.expr.copy()
-            self.expr.ignore(ignore)
-        self.mayReturnEmpty = True
-        self.mayIndexError = False
-        self.includeMatch = include
-        self.asList = False
-        self.errmsg = "No match found for "+_ustr(self.expr)
-        self.myException = ParseException("",0,self.errmsg,self)
-
-    def parseImpl( self, instring, loc, doActions=True ):
-        startLoc = loc
-        instrlen = len(instring)
-        expr = self.expr
-        while loc <= instrlen:
-            try:
-                loc = expr.skipIgnorables( instring, loc )
-                expr._parse( instring, loc, doActions=False, callPreParse=False )
-                if self.includeMatch:
-                    skipText = instring[startLoc:loc]
-                    loc,mat = expr._parse(instring,loc)
-                    if mat:
-                        return loc, [ skipText, mat ]
-                    else:
-                        return loc, [ skipText ]
-                else:
-                    return loc, [ instring[startLoc:loc] ]
-            except (ParseException,IndexError):
-                loc += 1
-        exc = self.myException
-        exc.loc = loc
-        exc.pstr = instring
-        raise exc
-
-class Forward(ParseElementEnhance):
-    """Forward declaration of an expression to be defined later -
-       used for recursive grammars, such as algebraic infix notation.
-       When the expression is known, it is assigned to the Forward variable using the '<<' operator.
-       
-       Note: take care when assigning to Forward not to overlook precedence of operators.
-       Specifically, '|' has a lower precedence than '<<', so that::
-          fwdExpr << a | b | c
-       will actually be evaluated as::
-          (fwdExpr << a) | b | c
-       thereby leaving b and c out as parseable alternatives.  It is recommended that you
-       explicitly group the values inserted into the Forward::
-          fwdExpr << (a | b | c)
-    """
-    def __init__( self, other=None ):
-        super(Forward,self).__init__( other, savelist=False )
-
-    def __lshift__( self, other ):
-        if isinstance( other, basestring ):
-            other = Literal(other)
-        self.expr = other
-        self.mayReturnEmpty = other.mayReturnEmpty
-        self.strRepr = None
-        return self
-
-    def leaveWhitespace( self ):
-        self.skipWhitespace = False
-        return self
-
-    def streamline( self ):
-        if not self.streamlined:
-            self.streamlined = True
-            if self.expr is not None: 
-                self.expr.streamline()
-        return self
-
-    def validate( self, validateTrace=[] ):
-        if self not in validateTrace:
-            tmp = validateTrace[:]+[self]
-            if self.expr is not None: 
-                self.expr.validate(tmp)
-        self.checkRecursion([])        
-        
-    def __str__( self ):
-        if hasattr(self,"name"):
-            return self.name
-
-        self.__class__ = _ForwardNoRecurse
-        try:
-            if self.expr is not None: 
-                retString = _ustr(self.expr)
-            else:
-                retString = "None"
-        finally:
-            self.__class__ = Forward
-        return "Forward: "+retString
-        
-    def copy(self):
-        if self.expr is not None:
-            return super(Forward,self).copy()
-        else:
-            ret = Forward()
-            ret << self
-            return ret
-
-class _ForwardNoRecurse(Forward):
-    def __str__( self ):
-        return "..."
-        
-class TokenConverter(ParseElementEnhance):
-    """Abstract subclass of ParseExpression, for converting parsed results."""
-    def __init__( self, expr, savelist=False ):
-        super(TokenConverter,self).__init__( expr )#, savelist )
-        self.saveAsList = False
-
-
-class Upcase(TokenConverter):
-    """Converter to upper case all matching tokens."""
-    def __init__(self, *args):
-        super(Upcase,self).__init__(*args)
-        warnings.warn("Upcase class is deprecated, use upcaseTokens parse action instead", 
-                       DeprecationWarning,stacklevel=2)
-    
-    def postParse( self, instring, loc, tokenlist ):
-        return map( string.upper, tokenlist )
-
-
-class Combine(TokenConverter):
-    """Converter to concatenate all matching tokens to a single string.
-       By default, the matching patterns must also be contiguous in the input string;
-       this can be disabled by specifying 'adjacent=False' in the constructor.
-    """
-    def __init__( self, expr, joinString="", adjacent=True ):
-        super(Combine,self).__init__( expr )
-        # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
-        if adjacent:
-            self.leaveWhitespace()
-        self.adjacent = adjacent
-        self.skipWhitespace = True
-        self.joinString = joinString
-
-    def ignore( self, other ):
-        if self.adjacent:
-            ParserElement.ignore(self, other)
-        else:
-            super( Combine, self).ignore( other )
-        return self
-
-    def postParse( self, instring, loc, tokenlist ):
-        retToks = tokenlist.copy()
-        del retToks[:]
-        retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
-
-        if self.resultsName and len(retToks.keys())>0:
-            return [ retToks ]
-        else:
-            return retToks
-
-class Group(TokenConverter):
-    """Converter to return the matched tokens as a list - useful for returning tokens of ZeroOrMore and OneOrMore expressions."""
-    def __init__( self, expr ):
-        super(Group,self).__init__( expr )
-        self.saveAsList = True
-
-    def postParse( self, instring, loc, tokenlist ):
-        return [ tokenlist ]
-        
-class Dict(TokenConverter):
-    """Converter to return a repetitive expression as a list, but also as a dictionary.
-       Each element can also be referenced using the first token in the expression as its key.
-       Useful for tabular report scraping when the first column can be used as a item key.
-    """
-    def __init__( self, exprs ):
-        super(Dict,self).__init__( exprs )
-        self.saveAsList = True
-
-    def postParse( self, instring, loc, tokenlist ):
-        for i,tok in enumerate(tokenlist):
-            ikey = _ustr(tok[0]).strip()
-            if len(tok)==1:
-                tokenlist[ikey] = ("",i)
-            elif len(tok)==2 and not isinstance(tok[1],ParseResults):
-                tokenlist[ikey] = (tok[1],i)
-            else:
-                dictvalue = tok.copy() #ParseResults(i)
-                del dictvalue[0]
-                if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.keys()):
-                    tokenlist[ikey] = (dictvalue,i)
-                else:
-                    tokenlist[ikey] = (dictvalue[0],i)
-
-        if self.resultsName:
-            return [ tokenlist ]
-        else:
-            return tokenlist
-
-
-class Suppress(TokenConverter):
-    """Converter for ignoring the results of a parsed expression."""
-    def postParse( self, instring, loc, tokenlist ):
-        return []
-    
-    def suppress( self ):
-        return self
-
-
-class OnlyOnce(object):
-    """Wrapper for parse actions, to ensure they are only called once."""
-    def __init__(self, methodCall):
-        self.callable = ParserElement.normalizeParseActionArgs(methodCall)
-        self.called = False
-    def __call__(self,s,l,t):
-        if not self.called:
-            results = self.callable(s,l,t)
-            self.called = True
-            return results
-        raise ParseException(s,l,"")
-    def reset():
-        self.called = False
-
-def traceParseAction(f):
-    """Decorator for debugging parse actions."""
-    f = ParserElement.normalizeParseActionArgs(f)
-    def z(*paArgs):
-        thisFunc = f.func_name
-        s,l,t = paArgs[-3:]
-        if len(paArgs)>3:
-            thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
-        sys.stderr.write( ">>entering %s(line: '%s', %d, %s)\n" % (thisFunc,line(l,s),l,t) )
-        try:
-            ret = f(*paArgs)
-        except Exception, exc:
-            sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
-            raise
-        sys.stderr.write( "<<leaving %s (ret: %s)\n" % (thisFunc,ret) )
-        return ret
-    return z
-        
-#
-# global helpers
-#
-def delimitedList( expr, delim=",", combine=False ):
-    """Helper to define a delimited list of expressions - the delimiter defaults to ','.
-       By default, the list elements and delimiters can have intervening whitespace, and 
-       comments, but this can be overridden by passing 'combine=True' in the constructor.
-       If combine is set to True, the matching tokens are returned as a single token
-       string, with the delimiters included; otherwise, the matching tokens are returned
-       as a list of tokens, with the delimiters suppressed.
-    """
-    dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
-    if combine:
-        return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
-    else:
-        return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
-
-def countedArray( expr ):
-    """Helper to define a counted list of expressions.
-       This helper defines a pattern of the form::
-           integer expr expr expr...
-       where the leading integer tells how many expr expressions follow.
-       The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
-    """
-    arrayExpr = Forward()
-    def countFieldParseAction(s,l,t):
-        n = int(t[0])
-        arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
-        return []
-    return ( Word(nums).setParseAction(countFieldParseAction) + arrayExpr )
-
-def _flatten(L):
-    if type(L) is not list: return [L]
-    if L == []: return L
-    return _flatten(L[0]) + _flatten(L[1:])
-
-def matchPreviousLiteral(expr):
-    """Helper to define an expression that is indirectly defined from
-       the tokens matched in a previous expression, that is, it looks
-       for a 'repeat' of a previous expression.  For example::
-           first = Word(nums)
-           second = matchPreviousLiteral(first)
-           matchExpr = first + ":" + second
-       will match "1:1", but not "1:2".  Because this matches a 
-       previous literal, will also match the leading "1:1" in "1:10".  
-       If this is not desired, use matchPreviousExpr.
-       Do *not* use with packrat parsing enabled.
-    """
-    rep = Forward()
-    def copyTokenToRepeater(s,l,t):
-        if t:
-            if len(t) == 1:
-                rep << t[0]
-            else:
-                # flatten t tokens
-                tflat = _flatten(t.asList())
-                rep << And( [ Literal(tt) for tt in tflat ] )
-        else:
-            rep << Empty()
-    expr.addParseAction(copyTokenToRepeater)
-    return rep
-    
-def matchPreviousExpr(expr):
-    """Helper to define an expression that is indirectly defined from
-       the tokens matched in a previous expression, that is, it looks
-       for a 'repeat' of a previous expression.  For example::
-           first = Word(nums)
-           second = matchPreviousExpr(first)
-           matchExpr = first + ":" + second
-       will match "1:1", but not "1:2".  Because this matches by
-       expressions, will *not* match the leading "1:1" in "1:10";
-       the expressions are evaluated first, and then compared, so
-       "1" is compared with "10".
-       Do *not* use with packrat parsing enabled.
-    """
-    rep = Forward()
-    e2 = expr.copy()
-    rep << e2
-    def copyTokenToRepeater(s,l,t):
-        matchTokens = _flatten(t.asList())
-        def mustMatchTheseTokens(s,l,t):
-            theseTokens = _flatten(t.asList())
-            if  theseTokens != matchTokens:
-                raise ParseException("",0,"")
-        rep.setParseAction( mustMatchTheseTokens )
-    expr.addParseAction(copyTokenToRepeater)
-    return rep
-    
-def _escapeRegexRangeChars(s):
-    #~  escape these chars: ^-]
-    for c in r"\^-]":
-        s = s.replace(c,"\\"+c)
-    s = s.replace("\n",r"\n")
-    s = s.replace("\t",r"\t")
-    return _ustr(s)
-    
-def oneOf( strs, caseless=False, useRegex=True ):
-    """Helper to quickly define a set of alternative Literals, and makes sure to do 
-       longest-first testing when there is a conflict, regardless of the input order, 
-       but returns a MatchFirst for best performance.  
-       
-       Parameters:
-        - strs - a string of space-delimited literals, or a list of string literals
-        - caseless - (default=False) - treat all literals as caseless
-        - useRegex - (default=True) - as an optimization, will generate a Regex
-          object; otherwise, will generate a MatchFirst object (if caseless=True, or
-          if creating a Regex raises an exception)
-    """
-    if caseless:
-        isequal = ( lambda a,b: a.upper() == b.upper() )
-        masks = ( lambda a,b: b.upper().startswith(a.upper()) )
-        parseElementClass = CaselessLiteral
-    else:
-        isequal = ( lambda a,b: a == b )
-        masks = ( lambda a,b: b.startswith(a) )
-        parseElementClass = Literal
-    
-    if isinstance(strs,(list,tuple)):
-        symbols = strs[:]
-    elif isinstance(strs,basestring):
-        symbols = strs.split()
-    else:
-        warnings.warn("Invalid argument to oneOf, expected string or list",
-                SyntaxWarning, stacklevel=2)
-        
-    i = 0
-    while i < len(symbols)-1:
-        cur = symbols[i]
-        for j,other in enumerate(symbols[i+1:]):
-            if ( isequal(other, cur) ):
-                del symbols[i+j+1]
-                break
-            elif ( masks(cur, other) ):
-                del symbols[i+j+1]
-                symbols.insert(i,other)
-                cur = other
-                break
-        else:
-            i += 1
-
-    if not caseless and useRegex:
-        #~ print strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )
-        try:
-            if len(symbols)==len("".join(symbols)):
-                return Regex( "[%s]" % "".join( [ _escapeRegexRangeChars(sym) for sym in symbols] ) )
-            else:
-                return Regex( "|".join( [ re.escape(sym) for sym in symbols] ) )
-        except:
-            warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
-                    SyntaxWarning, stacklevel=2)
-
-
-    # last resort, just use MatchFirst
-    return MatchFirst( [ parseElementClass(sym) for sym in symbols ] )
-
-def dictOf( key, value ):
-    """Helper to easily and clearly define a dictionary by specifying the respective patterns
-       for the key and value.  Takes care of defining the Dict, ZeroOrMore, and Group tokens
-       in the proper order.  The key pattern can include delimiting markers or punctuation,
-       as long as they are suppressed, thereby leaving the significant key text.  The value
-       pattern can include named results, so that the Dict results can include named token 
-       fields.
-    """
-    return Dict( ZeroOrMore( Group ( key + value ) ) )
-
-_bslash = "\\"
-printables = "".join( [ c for c in string.printable if c not in string.whitespace ] )
-
-# convenience constants for positional expressions
-empty       = Empty().setName("empty")
-lineStart   = LineStart().setName("lineStart")
-lineEnd     = LineEnd().setName("lineEnd")
-stringStart = StringStart().setName("stringStart")
-stringEnd   = StringEnd().setName("stringEnd")
-
-_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
-_printables_less_backslash = "".join([ c for c in printables if c not in  r"\]" ])
-_escapedHexChar = Combine( Suppress(_bslash + "0x") + Word(hexnums) ).setParseAction(lambda s,l,t:unichr(int(t[0],16)))
-_escapedOctChar = Combine( Suppress(_bslash) + Word("0","01234567") ).setParseAction(lambda s,l,t:unichr(int(t[0],8)))
-_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(_printables_less_backslash,exact=1)
-_charRange = Group(_singleChar + Suppress("-") + _singleChar)
-_reBracketExpr = "[" + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
-
-_expanded = lambda p: (isinstance(p,ParseResults) and ''.join([ unichr(c) for c in range(ord(p[0]),ord(p[1])+1) ]) or p)
-        
-def srange(s):
-    r"""Helper to easily define string ranges for use in Word construction.  Borrows
-       syntax from regexp '[]' string range definitions::
-          srange("[0-9]")   -> "0123456789"
-          srange("[a-z]")   -> "abcdefghijklmnopqrstuvwxyz"
-          srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
-       The input string must be enclosed in []'s, and the returned string is the expanded 
-       character set joined into a single string.
-       The values enclosed in the []'s may be::
-          a single character
-          an escaped character with a leading backslash (such as \- or \])
-          an escaped hex character with a leading '\0x' (\0x21, which is a '!' character)
-          an escaped octal character with a leading '\0' (\041, which is a '!' character)
-          a range of any of the above, separated by a dash ('a-z', etc.)
-          any combination of the above ('aeiouy', 'a-zA-Z0-9_$', etc.)
-    """
-    try:
-        return "".join([_expanded(part) for part in _reBracketExpr.parseString(s).body])
-    except:
-        return ""
-
-def replaceWith(replStr):
-    """Helper method for common parse actions that simply return a literal value.  Especially 
-       useful when used with transformString().
-    """
-    def _replFunc(*args):
-        return [replStr]
-    return _replFunc
-
-def removeQuotes(s,l,t):
-    """Helper parse action for removing quotation marks from parsed quoted strings.
-       To use, add this parse action to quoted string using::
-         quotedString.setParseAction( removeQuotes )
-    """
-    return t[0][1:-1]
-
-def upcaseTokens(s,l,t):
-    """Helper parse action to convert tokens to upper case."""
-    return [ str(tt).upper() for tt in t ]
-
-def downcaseTokens(s,l,t):
-    """Helper parse action to convert tokens to lower case."""
-    return [ str(tt).lower() for tt in t ]
-
-def keepOriginalText(s,startLoc,t):
-    import inspect
-    """Helper parse action to preserve original parsed text,
-       overriding any nested parse actions."""
-    f = inspect.stack()[1][0]
-    try:
-        endloc = f.f_locals["loc"]
-    finally:
-        del f
-    return s[startLoc:endloc]
-        
-def _makeTags(tagStr, xml):
-    """Internal helper to construct opening and closing tag expressions, given a tag name"""
-    if isinstance(tagStr,basestring):
-        resname = tagStr
-        tagStr = Keyword(tagStr, caseless=not xml)
-    else:
-        resname = tagStr.name
-        
-    tagAttrName = Word(alphas,alphanums+"_-")
-    if (xml):
-        tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
-        openTag = Suppress("<") + tagStr + \
-                Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
-                Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
-    else:
-        printablesLessRAbrack = "".join( [ c for c in printables if c not in ">" ] )
-        tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
-        openTag = Suppress("<") + tagStr + \
-                Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
-                Suppress("=") + tagAttrValue ))) + \
-                Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
-    closeTag = Combine("</" + tagStr + ">")
-    
-    openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % tagStr)
-    closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % tagStr)
-    
-    return openTag, closeTag
-
-def makeHTMLTags(tagStr):
-    """Helper to construct opening and closing tag expressions for HTML, given a tag name"""
-    return _makeTags( tagStr, False )
-
-def makeXMLTags(tagStr):
-    """Helper to construct opening and closing tag expressions for XML, given a tag name"""
-    return _makeTags( tagStr, True )
-
-opAssoc = _Constants()
-opAssoc.LEFT = object()
-opAssoc.RIGHT = object()
-
-def operatorPrecedence( baseExpr, opList ):
-    """Helper method for constructing grammars of expressions made up of 
-       operators working in a precedence hierarchy.  Operators may be unary or
-       binary, left- or right-associative.  Parse actions can also be attached
-       to operator expressions.
-        
-       Parameters:
-        - baseExpr - expression representing the most basic element for the nested 
-        - opList - list of tuples, one for each operator precedence level in the expression grammar; each tuple is of the form
-          (opExpr, numTerms, rightLeftAssoc, parseAction), where:
-           - opExpr is the pyparsing expression for the operator;
-              may also be a string, which will be converted to a Literal
-           - numTerms is the number of terms for this operator (must
-              be 1 or 2)
-           - rightLeftAssoc is the indicator whether the operator is
-              right or left associative, using the pyparsing-defined
-              constants opAssoc.RIGHT and opAssoc.LEFT.
-           - parseAction is the parse action to be associated with 
-              expressions matching this operator expression (the
-              parse action tuple member may be omitted)
-    """
-    ret = Forward()
-    lastExpr = baseExpr | ( Suppress('(') + ret + Suppress(')') )
-    for i,operDef in enumerate(opList):
-        opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
-        thisExpr = Forward().setName("expr%d" % i)
-        if rightLeftAssoc == opAssoc.LEFT:
-            if arity == 1:
-                matchExpr = Group( lastExpr + opExpr )
-            elif arity == 2:
-                matchExpr = Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
-            else:
-                raise ValueError, "operator must be unary (1) or binary (2)"
-        elif rightLeftAssoc == opAssoc.RIGHT:
-            if arity == 1:
-                # try to avoid LR with this extra test
-                if not isinstance(opExpr, Optional):
-                    opExpr = Optional(opExpr)
-                matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) 
-            elif arity == 2:
-                matchExpr = Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
-            else:
-                raise ValueError, "operator must be unary (1) or binary (2)"
-        else:
-            raise ValueError, "operator must indicate right or left associativity"
-        if pa:
-            matchExpr.setParseAction( pa )
-        thisExpr << ( matchExpr | lastExpr )
-        lastExpr = thisExpr
-    ret << lastExpr
-    return ret
-
-alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
-punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
-
-dblQuotedString = Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\.))*"').setName("string enclosed in double quotes")
-sglQuotedString = Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\.))*'").setName("string enclosed in single quotes")
-quotedString = Regex(r'''(?:"(?:[^"\n\r\\]|(?:"")|(?:\\.))*")|(?:'(?:[^'\n\r\\]|(?:'')|(?:\\.))*')''').setName("quotedString using single or double quotes")
-
-anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_"))
-commonHTMLEntity = Combine("&" + oneOf("gt lt amp nbsp quot").setResultsName("entity") +";")
-_htmlEntityMap = dict(zip("gt lt amp nbsp quot".split(),"><& '"))
-replaceHTMLEntity = lambda t : t.entity in _htmlEntityMap and _htmlEntityMap[t.entity] or None
-    
-# it's easy to get these comment structures wrong - they're very common, so may as well make them available
-cStyleComment = Regex(r"/\*(?:[^*]*\*+)+?/").setName("C style comment")
-
-htmlComment = Regex(r"<!--[\s\S]*?-->")
-restOfLine = Regex(r".*").leaveWhitespace()
-dblSlashComment = Regex(r"\/\/(\\\n|.)*").setName("// comment")
-cppStyleComment = Regex(r"/(?:\*(?:[^*]*\*+)+?/|/[^\n]*(?:\n[^\n]*)*?(?:(?<!\\)|\Z))").setName("C++ style comment")
-
-javaStyleComment = cppStyleComment
-pythonStyleComment = Regex(r"#.*").setName("Python style comment")
-_noncomma = "".join( [ c for c in printables if c != "," ] )
-_commasepitem = Combine(OneOrMore(Word(_noncomma) + 
-                                  Optional( Word(" \t") + 
-                                            ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
-commaSeparatedList = delimitedList( Optional( quotedString | _commasepitem, default="") ).setName("commaSeparatedList")
-
-
-if __name__ == "__main__":
-
-    def test( teststring ):
-        print teststring,"->",
-        try:
-            tokens = simpleSQL.parseString( teststring )
-            tokenlist = tokens.asList()
-            print tokenlist
-            print "tokens = ",        tokens
-            print "tokens.columns =", tokens.columns
-            print "tokens.tables =",  tokens.tables
-            print tokens.asXML("SQL",True)
-        except ParseException, err:
-            print err.line
-            print " "*(err.column-1) + "^"
-            print err
-        print
-
-    selectToken    = CaselessLiteral( "select" )
-    fromToken      = CaselessLiteral( "from" )
-
-    ident          = Word( alphas, alphanums + "_$" )
-    columnName     = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens )
-    columnNameList = Group( delimitedList( columnName ) )#.setName("columns")
-    tableName      = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens )
-    tableNameList  = Group( delimitedList( tableName ) )#.setName("tables")
-    simpleSQL      = ( selectToken + \
-                     ( '*' | columnNameList ).setResultsName( "columns" ) + \
-                     fromToken + \
-                     tableNameList.setResultsName( "tables" ) )
-    
-    test( "SELECT * from XYZZY, ABC" )
-    test( "select * from SYS.XYZZY" )
-    test( "Select A from Sys.dual" )
-    test( "Select AA,BB,CC from Sys.dual" )
-    test( "Select A, B, C from Sys.dual" )
-    test( "Select A, B, C from Sys.dual" )
-    test( "Xelect A, B, C from Sys.dual" )
-    test( "Select A, B, C frox Sys.dual" )
-    test( "Select" )
-    test( "Select ^^^ frox Sys.dual" )
-    test( "Select A, B, C from Sys.dual, Table2   " )
+# module pyparsing.py
+#
+# Copyright (c) 2003-2006  Paul T. McGuire
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+#from __future__ import generators
+
+__doc__ = \
+"""
+pyparsing module - Classes and methods to define and execute parsing grammars
+
+The pyparsing module is an alternative approach to creating and executing simple grammars, 
+vs. the traditional lex/yacc approach, or the use of regular expressions.  With pyparsing, you
+don't need to learn a new syntax for defining grammars or matching expressions - the parsing module 
+provides a library of classes that you use to construct the grammar directly in Python.
+
+Here is a program to parse "Hello, World!" (or any greeting of the form "<salutation>, <addressee>!")::
+
+    from pyparsing import Word, alphas
+    
+    # define grammar of a greeting
+    greet = Word( alphas ) + "," + Word( alphas ) + "!" 
+    
+    hello = "Hello, World!"
+    print hello, "->", greet.parseString( hello )
+
+The program outputs the following::
+
+    Hello, World! -> ['Hello', ',', 'World', '!']
+
+The Python representation of the grammar is quite readable, owing to the self-explanatory 
+class names, and the use of '+', '|' and '^' operators.
+
+The parsed results returned from parseString() can be accessed as a nested list, a dictionary, or an 
+object with named attributes.
+
+The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
+ - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello  ,  World  !", etc.)
+ - quoted strings
+ - embedded comments
+"""
+__version__ = "1.4.5"
+__versionTime__ = "16 December 2006 07:20"
+__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
+
+import string
+import copy,sys
+import warnings
+import re
+import sre_constants
+import xml.sax.saxutils
+#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
+
+def _ustr(obj):
+    """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
+       str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
+       then < returns the unicode object | encodes it with the default encoding | ... >.
+    """
+    try:
+        # If this works, then _ustr(obj) has the same behaviour as str(obj), so
+        # it won't break any existing code.
+        return str(obj)
+        
+    except UnicodeEncodeError, e:
+        # The Python docs (http://docs.python.org/ref/customization.html#l2h-182)
+        # state that "The return value must be a string object". However, does a
+        # unicode object (being a subclass of basestring) count as a "string
+        # object"?
+        # If so, then return a unicode object:
+        return unicode(obj)
+        # Else encode it... but how? There are many choices... :)
+        # Replace unprintables with escape codes?
+        #return unicode(obj).encode(sys.getdefaultencoding(), 'backslashreplace_errors')
+        # Replace unprintables with question marks?
+        #return unicode(obj).encode(sys.getdefaultencoding(), 'replace')
+        # ...
+
+def _str2dict(strg):
+    return dict( [(c,0) for c in strg] )
+    #~ return set( [c for c in strg] )
+
+class _Constants(object):
+    pass
+    
+alphas     = string.lowercase + string.uppercase
+nums       = string.digits
+hexnums    = nums + "ABCDEFabcdef"
+alphanums  = alphas + nums    
+
+class ParseBaseException(Exception):
+    """base exception class for all parsing runtime exceptions"""
+    __slots__ = ( "loc","msg","pstr","parserElement" )
+    # Performance tuning: we construct a *lot* of these, so keep this
+    # constructor as small and fast as possible        
+    def __init__( self, pstr, loc, msg, elem=None ):
+        self.loc = loc
+        self.msg = msg
+        self.pstr = pstr
+        self.parserElement = elem
+
+    def __getattr__( self, aname ):
+        """supported attributes by name are:
+            - lineno - returns the line number of the exception text
+            - col - returns the column number of the exception text
+            - line - returns the line containing the exception text
+        """
+        if( aname == "lineno" ):
+            return lineno( self.loc, self.pstr )
+        elif( aname in ("col", "column") ):
+            return col( self.loc, self.pstr )
+        elif( aname == "line" ):
+            return line( self.loc, self.pstr )
+        else:
+            raise AttributeError, aname
+
+    def __str__( self ):
+        return "%s (at char %d), (line:%d, col:%d)" % ( self.msg, self.loc, self.lineno, self.column )
+    def __repr__( self ):
+        return _ustr(self)
+    def markInputline( self, markerString = ">!<" ):
+        """Extracts the exception line from the input string, and marks 
+           the location of the exception with a special symbol.
+        """
+        line_str = self.line
+        line_column = self.column - 1
+        if markerString:
+            line_str = "".join( [line_str[:line_column], markerString, line_str[line_column:]])
+        return line_str.strip()
+
+class ParseException(ParseBaseException):
+    """exception thrown when parse expressions don't match class"""
+    """supported attributes by name are:
+        - lineno - returns the line number of the exception text
+        - col - returns the column number of the exception text
+        - line - returns the line containing the exception text
+    """
+    pass
+    
+class ParseFatalException(ParseBaseException):
+    """user-throwable exception thrown when inconsistent parse content
+       is found; stops all parsing immediately"""
+    pass
+
+class ReparseException(ParseBaseException):
+    def __init_( self, newstring, restartLoc ):
+        self.newParseText = newstring
+        self.reparseLoc = restartLoc
+
+
+class RecursiveGrammarException(Exception):
+    """exception thrown by validate() if the grammar could be improperly recursive"""
+    def __init__( self, parseElementList ):
+        self.parseElementTrace = parseElementList
+    
+    def __str__( self ):
+        return "RecursiveGrammarException: %s" % self.parseElementTrace
+
+class ParseResults(object):
+    """Structured parse results, to provide multiple means of access to the parsed data:
+       - as a list (len(results))
+       - by list index (results[0], results[1], etc.)
+       - by attribute (results.<resultsName>)
+       """
+    __slots__ = ( "__toklist", "__tokdict", "__doinit", "__name", "__parent", "__accumNames" )
+    def __new__(cls, toklist, name=None, asList=True, modal=True ):
+        if isinstance(toklist, cls):
+            return toklist
+        retobj = object.__new__(cls)
+        retobj.__doinit = True
+        return retobj
+        
+    # Performance tuning: we construct a *lot* of these, so keep this
+    # constructor as small and fast as possible
+    def __init__( self, toklist, name=None, asList=True, modal=True ):
+        if self.__doinit:
+            self.__doinit = False
+            self.__name = None
+            self.__parent = None
+            self.__accumNames = {}
+            if isinstance(toklist, list):
+                self.__toklist = toklist[:]
+            else:
+                self.__toklist = [toklist]
+            self.__tokdict = dict()
+
+        # this line is related to debugging the asXML bug
+        #~ asList = False
+        
+        if name:
+            if not modal:
+                self.__accumNames[name] = 0
+            if isinstance(name,int):
+                name = _ustr(name) # will always return a str, but use _ustr for consistency
+            self.__name = name
+            if not toklist in (None,'',[]):
+                if isinstance(toklist,basestring): 
+                    toklist = [ toklist ]
+                if asList:
+                    if isinstance(toklist,ParseResults):
+                        self[name] = (toklist.copy(),-1)
+                    else:
+                        self[name] = (ParseResults(toklist[0]),-1)
+                    self[name].__name = name
+                else:
+                    try:
+                        self[name] = toklist[0]
+                    except (KeyError,TypeError):
+                        self[name] = toklist
+
+    def __getitem__( self, i ):
+        if isinstance( i, (int,slice) ):
+            return self.__toklist[i]
+        else:
+            if i not in self.__accumNames:
+                return self.__tokdict[i][-1][0]
+            else:
+                return ParseResults([ v[0] for v in self.__tokdict[i] ])
+
+    def __setitem__( self, k, v ):
+        if isinstance(v,tuple):
+            self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
+            sub = v[0]
+        elif isinstance(k,int):
+            self.__toklist[k] = v
+            sub = v
+        else:
+            self.__tokdict[k] = self.__tokdict.get(k,list()) + [(v,0)]
+            sub = v
+        if isinstance(sub,ParseResults):
+            sub.__parent = self
+        
+    def __delitem__( self, i ):
+        if isinstance(i,(int,slice)):
+            del self.__toklist[i]
+        else:
+            del self._tokdict[i]
+
+    def __contains__( self, k ):
+        return self.__tokdict.has_key(k)
+        
+    def __len__( self ): return len( self.__toklist )
+    def __nonzero__( self ): return len( self.__toklist ) > 0
+    def __iter__( self ): return iter( self.__toklist )
+    def keys( self ): 
+        """Returns all named result keys."""
+        return self.__tokdict.keys()
+    
+    def items( self ): 
+        """Returns all named result keys and values as a list of tuples."""
+        return [(k,self[k]) for k in self.__tokdict.keys()]
+    
+    def values( self ): 
+        """Returns all named result values."""
+        return [ v[-1][0] for v in self.__tokdict.values() ]
+
+    def __getattr__( self, name ):
+        if name not in self.__slots__:
+            if self.__tokdict.has_key( name ):
+                if name not in self.__accumNames:
+                    return self.__tokdict[name][-1][0]
+                else:
+                    return ParseResults([ v[0] for v in self.__tokdict[name] ])
+            else:
+                return ""
+        return None
+
+    def __add__( self, other ):
+        ret = self.copy()
+        ret += other
+        return ret
+        
+    def __iadd__( self, other ):
+        if other.__tokdict:
+            offset = len(self.__toklist)
+            addoffset = ( lambda a: (a<0 and offset) or (a+offset) )
+            otheritems = other.__tokdict.items()
+            otherdictitems = [(k,(v[0],addoffset(v[1])) ) for (k,vlist) in otheritems for v in vlist]
+            for k,v in otherdictitems:
+                self[k] = v
+                if isinstance(v[0],ParseResults):
+                    v[0].__parent = self
+        self.__toklist += other.__toklist
+        self.__accumNames.update( other.__accumNames )
+        del other
+        return self
+       
+    def __repr__( self ):
+        return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
+
+    def __str__( self ):
+        out = "["
+        sep = ""
+        for i in self.__toklist:
+            if isinstance(i, ParseResults):
+                out += sep + _ustr(i)
+            else:
+                out += sep + repr(i)
+            sep = ", "
+        out += "]"
+        return out
+
+    def _asStringList( self, sep='' ):
+        out = []
+        for item in self.__toklist:
+            if out and sep:
+                out.append(sep)
+            if isinstance( item, ParseResults ):
+                out += item._asStringList()
+            else:
+                out.append( _ustr(item) )
+        return out
+
+    def asList( self ):
+        """Returns the parse results as a nested list of matching tokens, all converted to strings."""
+        out = []
+        for res in self.__toklist:
+            if isinstance(res,ParseResults):
+                out.append( res.asList() )
+            else:
+                out.append( res )
+        return out
+
+    def asDict( self ):
+        """Returns the named parse results as dictionary."""
+        return dict( self.items() )
+
+    def copy( self ):
+        """Returns a new copy of a ParseResults object."""
+        ret = ParseResults( self.__toklist )
+        ret.__tokdict = self.__tokdict.copy()
+        ret.__parent = self.__parent
+        ret.__accumNames.update( self.__accumNames )
+        ret.__name = self.__name
+        return ret
+        
+    def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
+        """Returns the parse results as XML. Tags are created for tokens and lists that have defined results names."""
+        nl = "\n"
+        out = []
+        namedItems = dict( [ (v[1],k) for (k,vlist) in self.__tokdict.items() for v in vlist ] )
+        nextLevelIndent = indent + "  "
+        
+        # collapse out indents if formatting is not desired
+        if not formatted:
+            indent = ""
+            nextLevelIndent = ""
+            nl = ""
+            
+        selfTag = None
+        if doctag is not None:
+            selfTag = doctag
+        else:
+            if self.__name:
+                selfTag = self.__name
+        
+        if not selfTag:
+            if namedItemsOnly:
+                return ""
+            else:
+                selfTag = "ITEM"
+        
+        out += [ nl, indent, "<", selfTag, ">" ]
+        
+        worklist = self.__toklist
+        for i,res in enumerate(worklist):
+            if isinstance(res,ParseResults):
+                if i in namedItems:
+                    out += [ res.asXML(namedItems[i], namedItemsOnly and doctag is None, nextLevelIndent,formatted)]
+                else:
+                    out += [ res.asXML(None, namedItemsOnly and doctag is None, nextLevelIndent,formatted)]
+            else:
+                # individual token, see if there is a name for it
+                resTag = None
+                if i in namedItems:
+                    resTag = namedItems[i]
+                if not resTag:
+                    if namedItemsOnly:
+                        continue
+                    else:
+                        resTag = "ITEM"
+                xmlBodyText = xml.sax.saxutils.escape(_ustr(res))
+                out += [ nl, nextLevelIndent, "<", resTag, ">", xmlBodyText, "</", resTag, ">" ]
+        
+        out += [ nl, indent, "</", selfTag, ">" ]
+        return "".join(out)
+
+    def __lookup(self,sub):
+        for k,vlist in self.__tokdict.items():
+            for v,loc in vlist:
+                if sub is v:
+                    return k
+        return None
+            
+    def getName(self):
+        """Returns the results name for this token expression."""
+        if self.__name:
+            return self.__name
+        elif self.__parent:
+            par = self.__parent
+            if par:
+                return par.__lookup(self)
+            else:
+                return None
+        elif (len(self) == 1 and 
+               len(self.__tokdict) == 1 and
+               self.__tokdict.values()[0][0][1] in (0,-1)):
+            return self.__tokdict.keys()[0]
+        else:
+            return None
+            
+    def dump(self,indent='',depth=0):
+        """Diagnostic method for listing out the contents of a ParseResults.
+           Accepts an optional indent argument so that this string can be embedded
+           in a nested display of other data."""
+        out = []
+        out.append( indent+str(self.asList()) )
+        keys = self.items()
+        keys.sort()
+        for k,v in keys:
+            if out:
+                out.append('\n')
+            out.append( "%s%s- %s: " % (indent,('  '*depth), k) )
+            if isinstance(v,ParseResults):
+                if v.keys():
+                    #~ out.append('\n')
+                    out.append( v.dump(indent,depth+1) )
+                    #~ out.append('\n')
+                else:
+                    out.append(str(v))
+            else:
+                out.append(str(v))
+        #~ out.append('\n')
+        return "".join(out)
+
+    # add support for pickle protocol
+    def __getstate__(self):
+        return ( self.__toklist,
+                 ( self.__tokdict.copy(),
+                   self.__parent,
+                   self.__accumNames,
+                   self.__name ) )
+    
+    def __setstate__(self,state):
+        self.__toklist = state[0]
+        self.__tokdict, \
+        self.__parent, \
+        inAccumNames, \
+        self.__name = state[1]
+        self.__accumNames = {}
+        self.__accumNames.update(inAccumNames)
+
+
+def col (loc,strg):
+    """Returns current column within a string, counting newlines as line separators.
+   The first column is number 1.
+   """
+    return (loc<len(strg) and strg[loc] == '\n') and 1 or loc - strg.rfind("\n", 0, loc)
+
+def lineno(loc,strg):
+    """Returns current line number within a string, counting newlines as line separators.
+   The first line is number 1.
+   """
+    return strg.count("\n",0,loc) + 1
+
+def line( loc, strg ):
+    """Returns the line of text containing loc within a string, counting newlines as line separators.
+       """
+    lastCR = strg.rfind("\n", 0, loc)
+    nextCR = strg.find("\n", loc)
+    if nextCR > 0:
+        return strg[lastCR+1:nextCR]
+    else:
+        return strg[lastCR+1:]
+
+def _defaultStartDebugAction( instring, loc, expr ):
+    print "Match",expr,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )
+
+def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
+    print "Matched",expr,"->",toks.asList()
+    
+def _defaultExceptionDebugAction( instring, loc, expr, exc ):
+    print "Exception raised:", exc
+
+def nullDebugAction(*args):
+    """'Do-nothing' debug action, to suppress debugging output during parsing."""
+    pass
+
+class ParserElement(object):
+    """Abstract base level parser element class."""
+    DEFAULT_WHITE_CHARS = " \n\t\r"
+    
+    def setDefaultWhitespaceChars( chars ):
+        """Overrides the default whitespace chars
+        """
+        ParserElement.DEFAULT_WHITE_CHARS = chars
+    setDefaultWhitespaceChars = staticmethod(setDefaultWhitespaceChars)
+    
+    def __init__( self, savelist=False ):
+        self.parseAction = list()
+        self.failAction = None
+        #~ self.name = "<unknown>"  # don't define self.name, let subclasses try/except upcall
+        self.strRepr = None
+        self.resultsName = None
+        self.saveAsList = savelist
+        self.skipWhitespace = True
+        self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+        self.copyDefaultWhiteChars = True
+        self.mayReturnEmpty = False
+        self.keepTabs = False
+        self.ignoreExprs = list()
+        self.debug = False
+        self.streamlined = False
+        self.mayIndexError = True
+        self.errmsg = ""
+        self.modalResults = True
+        self.debugActions = ( None, None, None )
+        self.re = None
+
+    def copy( self ):
+        """Make a copy of this ParserElement.  Useful for defining different parse actions
+           for the same parsing pattern, using copies of the original parse element."""
+        cpy = copy.copy( self )
+        cpy.parseAction = self.parseAction[:]
+        cpy.ignoreExprs = self.ignoreExprs[:]
+        if self.copyDefaultWhiteChars:
+            cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+        return cpy
+
+    def setName( self, name ):
+        """Define name for this expression, for use in debugging."""
+        self.name = name
+        self.errmsg = "Expected " + self.name
+        return self
+
+    def setResultsName( self, name, listAllMatches=False ):
+        """Define name for referencing matching tokens as a nested attribute 
+           of the returned parse results.
+           NOTE: this returns a *copy* of the original ParserElement object;
+           this is so that the client can define a basic element, such as an
+           integer, and reference it in multiple places with different names.
+        """
+        newself = self.copy()
+        newself.resultsName = name
+        newself.modalResults = not listAllMatches
+        return newself
+
+    def normalizeParseActionArgs( f ):
+        """Internal method used to decorate parse actions that take fewer than 3 arguments,
+           so that all parse actions can be called as f(s,l,t)."""
+        STAR_ARGS = 4
+
+        try:
+            restore = None
+            if isinstance(f,type):
+                restore = f
+                f = f.__init__
+            if f.func_code.co_flags & STAR_ARGS:
+                return f
+            numargs = f.func_code.co_argcount
+            if hasattr(f,"im_self"):
+                numargs -= 1
+            if restore:
+                f = restore
+        except AttributeError:
+            try:
+                # not a function, must be a callable object, get info from the
+                # im_func binding of its bound __call__ method
+                if f.__call__.im_func.func_code.co_flags & STAR_ARGS:
+                    return f
+                numargs = f.__call__.im_func.func_code.co_argcount
+                if hasattr(f.__call__,"im_self"):
+                    numargs -= 1
+            except AttributeError:
+                # not a bound method, get info directly from __call__ method
+                if f.__call__.func_code.co_flags & STAR_ARGS:
+                    return f
+                numargs = f.__call__.func_code.co_argcount
+                if hasattr(f.__call__,"im_self"):
+                    numargs -= 1
+
+        #~ print "adding function %s with %d args" % (f.func_name,numargs)
+        if numargs == 3:
+            return f
+        else:
+            if numargs == 2:
+                def tmp(s,l,t):
+                    return f(l,t)
+            elif numargs == 1:
+                def tmp(s,l,t):
+                    return f(t)
+            else: #~ numargs == 0:
+                def tmp(s,l,t):
+                    return f()
+            return tmp
+    normalizeParseActionArgs = staticmethod(normalizeParseActionArgs)
+            
+    def setParseAction( self, *fns ):
+        """Define action to perform when successfully matching parse element definition.
+           Parse action fn is a callable method with 0-3 arguments, called as fn(s,loc,toks),
+           fn(loc,toks), fn(toks), or just fn(), where:
+            - s   = the original string being parsed
+            - loc = the location of the matching substring
+            - toks = a list of the matched tokens, packaged as a ParseResults object
+           If the functions in fns modify the tokens, they can return them as the return
+           value from fn, and the modified list of tokens will replace the original.
+           Otherwise, fn does not need to return any value."""
+        self.parseAction = map(self.normalizeParseActionArgs, list(fns))
+        return self
+
+    def addParseAction( self, *fns ):
+        """Add parse action to expression's list of parse actions. See setParseAction_."""
+        self.parseAction += map(self.normalizeParseActionArgs, list(fns))
+        return self
+
+    def setFailAction( self, fn ):
+        """Define action to perform if parsing fails at this expression. 
+           Fail acton fn is a callable function that takes the arguments 
+           fn(s,loc,expr,err) where:
+            - s = string being parsed
+            - loc = location where expression match was attempted and failed
+            - expr = the parse expression that failed
+            - err = the exception thrown
+           The function returns no value.  It may throw ParseFatalException
+           if it is desired to stop parsing immediately."""
+        self.failAction = fn
+        return self
+        
+    def skipIgnorables( self, instring, loc ):
+        exprsFound = True
+        while exprsFound:
+            exprsFound = False
+            for e in self.ignoreExprs:
+                try:
+                    while 1:
+                        loc,dummy = e._parse( instring, loc )
+                        exprsFound = True
+                except ParseException:
+                    pass
+        return loc
+
+    def preParse( self, instring, loc ):
+        if self.ignoreExprs:
+            loc = self.skipIgnorables( instring, loc )
+        
+        if self.skipWhitespace:
+            wt = self.whiteChars
+            instrlen = len(instring)
+            while loc < instrlen and instring[loc] in wt:
+                loc += 1
+                
+        return loc
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        return loc, []
+
+    def postParse( self, instring, loc, tokenlist ):
+        return tokenlist
+
+    #~ @profile
+    def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
+        debugging = ( self.debug ) #and doActions )
+
+        if debugging or self.failAction:
+            #~ print "Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )
+            if (self.debugActions[0] ):
+                self.debugActions[0]( instring, loc, self )
+            if callPreParse:
+                preloc = self.preParse( instring, loc )
+            else:
+                preloc = loc
+            tokensStart = loc
+            try:
+                try:
+                    loc,tokens = self.parseImpl( instring, preloc, doActions )
+                except IndexError:
+                    raise ParseException( instring, len(instring), self.errmsg, self )
+            #~ except ReparseException, retryEx:
+                #~ pass
+            except ParseException, err:
+                #~ print "Exception raised:", err
+                if self.debugActions[2]:
+                    self.debugActions[2]( instring, tokensStart, self, err )
+                if self.failAction:
+                    self.failAction( instring, tokensStart, self, err )
+                raise
+        else:
+            if callPreParse:
+                preloc = self.preParse( instring, loc )
+            else:
+                preloc = loc
+            tokensStart = loc
+            if self.mayIndexError or loc >= len(instring):
+                try:
+                    loc,tokens = self.parseImpl( instring, preloc, doActions )
+                except IndexError:
+                    raise ParseException( instring, len(instring), self.errmsg, self )
+            else:
+                loc,tokens = self.parseImpl( instring, preloc, doActions )
+        
+        tokens = self.postParse( instring, loc, tokens )
+
+        retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
+        if self.parseAction and doActions:
+            if debugging:
+                try:
+                    for fn in self.parseAction:
+                        tokens = fn( instring, tokensStart, retTokens )
+                        if tokens is not None:
+                            retTokens = ParseResults( tokens, 
+                                                      self.resultsName, 
+                                                      asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), 
+                                                      modal=self.modalResults )
+                except ParseException, err:
+                    #~ print "Exception raised in user parse action:", err
+                    if (self.debugActions[2] ):
+                        self.debugActions[2]( instring, tokensStart, self, err )
+                    raise
+            else:
+                for fn in self.parseAction:
+                    tokens = fn( instring, tokensStart, retTokens )
+                    if tokens is not None:
+                        retTokens = ParseResults( tokens, 
+                                                  self.resultsName, 
+                                                  asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), 
+                                                  modal=self.modalResults )
+
+        if debugging:
+            #~ print "Matched",self,"->",retTokens.asList()
+            if (self.debugActions[1] ):
+                self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
+
+        return loc, retTokens
+
+    def tryParse( self, instring, loc ):
+        return self._parse( instring, loc, doActions=False )[0]
+    
+    # this method gets repeatedly called during backtracking with the same arguments -
+    # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
+    def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
+        if doActions and self.parseAction:
+            return self._parseNoCache( instring, loc, doActions, callPreParse )
+        lookup = (self,instring,loc,callPreParse)
+        if lookup in ParserElement._exprArgCache:
+            value = ParserElement._exprArgCache[ lookup ]
+            if isinstance(value,Exception):
+                if isinstance(value,ParseBaseException):
+                    value.loc = loc
+                raise value
+            return value
+        else:
+            try:
+                ParserElement._exprArgCache[ lookup ] = \
+                    value = self._parseNoCache( instring, loc, doActions, callPreParse )
+                return value
+            except ParseBaseException, pe:
+                ParserElement._exprArgCache[ lookup ] = pe
+                raise
+
+    _parse = _parseNoCache
+
+    # argument cache for optimizing repeated calls when backtracking through recursive expressions
+    _exprArgCache = {}
+    def resetCache():
+        ParserElement._exprArgCache.clear()
+    resetCache = staticmethod(resetCache)
+    
+    _packratEnabled = False
+    def enablePackrat():
+        """Enables "packrat" parsing, which adds memoizing to the parsing logic.
+           Repeated parse attempts at the same string location (which happens 
+           often in many complex grammars) can immediately return a cached value, 
+           instead of re-executing parsing/validating code.  Memoizing is done of
+           both valid results and parsing exceptions.
+            
+           This speedup may break existing programs that use parse actions that 
+           have side-effects.  For this reason, packrat parsing is disabled when
+           you first import pyparsing.  To activate the packrat feature, your
+           program must call the class method ParserElement.enablePackrat().  If
+           your program uses psyco to "compile as you go", you must call 
+           enablePackrat before calling psyco.full().  If you do not do this,
+           Python will crash.  For best results, call enablePackrat() immediately
+           after importing pyparsing.
+        """
+        if not ParserElement._packratEnabled:
+            ParserElement._packratEnabled = True
+            ParserElement._parse = ParserElement._parseCache
+    enablePackrat = staticmethod(enablePackrat)
+
+    def parseString( self, instring ):
+        """Execute the parse expression with the given string.
+           This is the main interface to the client code, once the complete 
+           expression has been built.
+        """
+        ParserElement.resetCache()
+        if not self.streamlined:
+            self.streamline()
+            #~ self.saveAsList = True
+        for e in self.ignoreExprs:
+            e.streamline()
+        if self.keepTabs:
+            loc, tokens = self._parse( instring, 0 )
+        else:
+            loc, tokens = self._parse( instring.expandtabs(), 0 )
+        return tokens
+
+    def scanString( self, instring, maxMatches=sys.maxint ):
+        """Scan the input string for expression matches.  Each match will return the 
+           matching tokens, start location, and end location.  May be called with optional
+           maxMatches argument, to clip scanning after 'n' matches are found."""
+        if not self.streamlined:
+            self.streamline()
+        for e in self.ignoreExprs:
+            e.streamline()
+        
+        if not self.keepTabs:
+            instring = instring.expandtabs()
+        instrlen = len(instring)
+        loc = 0
+        preparseFn = self.preParse
+        parseFn = self._parse
+        ParserElement.resetCache()
+        matches = 0
+        while loc <= instrlen and matches < maxMatches:
+            try:
+                preloc = preparseFn( instring, loc )
+                nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
+            except ParseException:
+                loc = preloc+1
+            else:
+                matches += 1
+                yield tokens, preloc, nextLoc
+                loc = nextLoc
+        
+    def transformString( self, instring ):
+        """Extension to scanString, to modify matching text with modified tokens that may
+           be returned from a parse action.  To use transformString, define a grammar and 
+           attach a parse action to it that modifies the returned token list.  
+           Invoking transformString() on a target string will then scan for matches, 
+           and replace the matched text patterns according to the logic in the parse 
+           action.  transformString() returns the resulting transformed string."""
+        out = []
+        lastE = 0
+        # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
+        # keep string locs straight between transformString and scanString
+        self.keepTabs = True
+        for t,s,e in self.scanString( instring ):
+            out.append( instring[lastE:s] )
+            if t:
+                if isinstance(t,ParseResults):
+                    out += t.asList()
+                elif isinstance(t,list):
+                    out += t
+                else:
+                    out.append(t)
+            lastE = e
+        out.append(instring[lastE:])
+        return "".join(out)
+
+    def searchString( self, instring, maxMatches=sys.maxint ):
+        """Another extension to scanString, simplifying the access to the tokens found
+           to match the given parse expression.  May be called with optional
+           maxMatches argument, to clip searching after 'n' matches are found.
+        """
+        return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
+            
+    def __add__(self, other ):
+        """Implementation of + operator - returns And"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return And( [ self, other ] )
+
+    def __radd__(self, other ):
+        """Implementation of += operator"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return other + self
+
+    def __or__(self, other ):
+        """Implementation of | operator - returns MatchFirst"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return MatchFirst( [ self, other ] )
+
+    def __ror__(self, other ):
+        """Implementation of |= operator"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return other | self
+
+    def __xor__(self, other ):
+        """Implementation of ^ operator - returns Or"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return Or( [ self, other ] )
+
+    def __rxor__(self, other ):
+        """Implementation of ^= operator"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return other ^ self
+
+    def __and__(self, other ):
+        """Implementation of & operator - returns Each"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return Each( [ self, other ] )
+
+    def __rand__(self, other ):
+        """Implementation of right-& operator"""
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        if not isinstance( other, ParserElement ):
+            warnings.warn("Cannot add element of type %s to ParserElement" % type(other),
+                    SyntaxWarning, stacklevel=2)
+        return other & self
+
+    def __invert__( self ):
+        """Implementation of ~ operator - returns NotAny"""
+        return NotAny( self )
+
+    def suppress( self ):
+        """Suppresses the output of this ParserElement; useful to keep punctuation from
+           cluttering up returned output.
+        """
+        return Suppress( self )
+
+    def leaveWhitespace( self ):
+        """Disables the skipping of whitespace before matching the characters in the 
+           ParserElement's defined pattern.  This is normally only used internally by
+           the pyparsing module, but may be needed in some whitespace-sensitive grammars.
+        """
+        self.skipWhitespace = False
+        return self
+
+    def setWhitespaceChars( self, chars ):
+        """Overrides the default whitespace chars
+        """
+        self.skipWhitespace = True
+        self.whiteChars = chars
+        self.copyDefaultWhiteChars = False
+        return self
+        
+    def parseWithTabs( self ):
+        """Overrides default behavior to expand <TAB>s to spaces before parsing the input string.
+           Must be called before parseString when the input grammar contains elements that 
+           match <TAB> characters."""
+        self.keepTabs = True
+        return self
+        
+    def ignore( self, other ):
+        """Define expression to be ignored (e.g., comments) while doing pattern 
+           matching; may be called repeatedly, to define multiple comment or other
+           ignorable patterns.
+        """
+        if isinstance( other, Suppress ):
+            if other not in self.ignoreExprs:
+                self.ignoreExprs.append( other )
+        else:
+            self.ignoreExprs.append( Suppress( other ) )
+        return self
+
+    def setDebugActions( self, startAction, successAction, exceptionAction ):
+        """Enable display of debugging messages while doing pattern matching."""
+        self.debugActions = (startAction or _defaultStartDebugAction, 
+                             successAction or _defaultSuccessDebugAction, 
+                             exceptionAction or _defaultExceptionDebugAction)
+        self.debug = True
+        return self
+
+    def setDebug( self, flag=True ):
+        """Enable display of debugging messages while doing pattern matching."""
+        if flag:
+            self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
+        else:
+            self.debug = False
+        return self
+
+    def __str__( self ):
+        return self.name
+
+    def __repr__( self ):
+        return _ustr(self)
+        
+    def streamline( self ):
+        self.streamlined = True
+        self.strRepr = None
+        return self
+        
+    def checkRecursion( self, parseElementList ):
+        pass
+        
+    def validate( self, validateTrace=[] ):
+        """Check defined expressions for valid structure, check for infinite recursive definitions."""
+        self.checkRecursion( [] )
+
+    def parseFile( self, file_or_filename ):
+        """Execute the parse expression on the given file or filename.
+           If a filename is specified (instead of a file object),
+           the entire file is opened, read, and closed before parsing.
+        """
+        try:
+            file_contents = file_or_filename.read()
+        except AttributeError:
+            f = open(file_or_filename, "rb")
+            file_contents = f.read()
+            f.close()
+        return self.parseString(file_contents)
+
+
+class Token(ParserElement):
+    """Abstract ParserElement subclass, for defining atomic matching patterns."""
+    def __init__( self ):
+        super(Token,self).__init__( savelist=False )
+        self.myException = ParseException("",0,"",self)
+
+    def setName(self, name):
+        s = super(Token,self).setName(name)
+        self.errmsg = "Expected " + self.name
+        s.myException.msg = self.errmsg
+        return s
+
+
+class Empty(Token):
+    """An empty token, will always match."""
+    def __init__( self ):
+        super(Empty,self).__init__()
+        self.name = "Empty"
+        self.mayReturnEmpty = True
+        self.mayIndexError = False
+
+
+class NoMatch(Token):
+    """A token that will never match."""
+    def __init__( self ):
+        super(NoMatch,self).__init__()
+        self.name = "NoMatch"
+        self.mayReturnEmpty = True
+        self.mayIndexError = False
+        self.errmsg = "Unmatchable token"
+        self.myException.msg = self.errmsg
+        
+    def parseImpl( self, instring, loc, doActions=True ):
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+
+
+class Literal(Token):
+    """Token to exactly match a specified string."""
+    def __init__( self, matchString ):
+        super(Literal,self).__init__()
+        self.match = matchString
+        self.matchLen = len(matchString)
+        try:
+            self.firstMatchChar = matchString[0]
+        except IndexError:
+            warnings.warn("null string passed to Literal; use Empty() instead", 
+                            SyntaxWarning, stacklevel=2)
+            self.__class__ = Empty
+        self.name = '"%s"' % self.match
+        self.errmsg = "Expected " + self.name
+        self.mayReturnEmpty = False
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+
+    # Performance tuning: this routine gets called a *lot*
+    # if this is a single character match string  and the first character matches,
+    # short-circuit as quickly as possible, and avoid calling startswith
+    #~ @profile
+    def parseImpl( self, instring, loc, doActions=True ):
+        if (instring[loc] == self.firstMatchChar and
+            (self.matchLen==1 or instring.startswith(self.match,loc)) ):
+            return loc+self.matchLen, self.match
+        #~ raise ParseException( instring, loc, self.errmsg )
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+
+class Keyword(Token):
+    """Token to exactly match a specified string as a keyword, that is, it must be 
+       immediately followed by a non-keyword character.  Compare with Literal::
+         Literal("if") will match the leading 'if' in 'ifAndOnlyIf'.
+         Keyword("if") will not; it will only match the leading 'if in 'if x=1', or 'if(y==2)'
+       Accepts two optional constructor arguments in addition to the keyword string:
+       identChars is a string of characters that would be valid identifier characters,
+       defaulting to all alphanumerics + "_" and "$"; caseless allows case-insensitive
+       matching, default is False.
+    """
+    DEFAULT_KEYWORD_CHARS = alphanums+"_$"
+    
+    def __init__( self, matchString, identChars=DEFAULT_KEYWORD_CHARS, caseless=False ):
+        super(Keyword,self).__init__()
+        self.match = matchString
+        self.matchLen = len(matchString)
+        try:
+            self.firstMatchChar = matchString[0]
+        except IndexError:
+            warnings.warn("null string passed to Keyword; use Empty() instead", 
+                            SyntaxWarning, stacklevel=2)
+        self.name = '"%s"' % self.match
+        self.errmsg = "Expected " + self.name
+        self.mayReturnEmpty = False
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+        self.caseless = caseless
+        if caseless:
+            self.caselessmatch = matchString.upper()
+            identChars = identChars.upper()
+        self.identChars = _str2dict(identChars)
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        if self.caseless:
+            if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+                 (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
+                 (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
+                return loc+self.matchLen, self.match
+        else:
+            if (instring[loc] == self.firstMatchChar and
+                (self.matchLen==1 or instring.startswith(self.match,loc)) and
+                (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
+                (loc == 0 or instring[loc-1] not in self.identChars) ):
+                return loc+self.matchLen, self.match
+        #~ raise ParseException( instring, loc, self.errmsg )
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+        
+    def copy(self):
+        c = super(Keyword,self).copy()
+        c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
+        return c
+        
+    def setDefaultKeywordChars( chars ):
+        """Overrides the default Keyword chars
+        """
+        Keyword.DEFAULT_KEYWORD_CHARS = chars
+    setDefaultKeywordChars = staticmethod(setDefaultKeywordChars)        
+
+
+class CaselessLiteral(Literal):
+    """Token to match a specified string, ignoring case of letters.
+       Note: the matched results will always be in the case of the given
+       match string, NOT the case of the input text.
+    """
+    def __init__( self, matchString ):
+        super(CaselessLiteral,self).__init__( matchString.upper() )
+        # Preserve the defining literal.
+        self.returnString = matchString
+        self.name = "'%s'" % self.returnString
+        self.errmsg = "Expected " + self.name
+        self.myException.msg = self.errmsg
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        if instring[ loc:loc+self.matchLen ].upper() == self.match:
+            return loc+self.matchLen, self.returnString
+        #~ raise ParseException( instring, loc, self.errmsg )
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+
+class CaselessKeyword(Keyword):
+    def __init__( self, matchString, identChars=Keyword.DEFAULT_KEYWORD_CHARS ):
+        super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+             (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
+            return loc+self.matchLen, self.match
+        #~ raise ParseException( instring, loc, self.errmsg )
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+
+class Word(Token):
+    """Token for matching words composed of allowed character sets.
+       Defined with string containing all allowed initial characters,
+       an optional string containing allowed body characters (if omitted,
+       defaults to the initial character set), and an optional minimum,
+       maximum, and/or exact length.
+    """
+    def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0 ):
+        super(Word,self).__init__()
+        self.initCharsOrig = initChars
+        self.initChars = _str2dict(initChars)
+        if bodyChars :
+            self.bodyCharsOrig = bodyChars
+            self.bodyChars = _str2dict(bodyChars)
+        else:
+            self.bodyCharsOrig = initChars
+            self.bodyChars = _str2dict(initChars)
+            
+        self.maxSpecified = max > 0
+
+        self.minLen = min
+
+        if max > 0:
+            self.maxLen = max
+        else:
+            self.maxLen = sys.maxint
+
+        if exact > 0:
+            self.maxLen = exact
+            self.minLen = exact
+
+        self.name = _ustr(self)
+        self.errmsg = "Expected " + self.name
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+        
+        if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
+            if self.bodyCharsOrig == self.initCharsOrig:
+                self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
+            elif len(self.bodyCharsOrig) == 1:
+                self.reString = "%s[%s]*" % \
+                                      (re.escape(self.initCharsOrig),
+                                      _escapeRegexRangeChars(self.bodyCharsOrig),)
+            else:
+                self.reString = "[%s][%s]*" % \
+                                      (_escapeRegexRangeChars(self.initCharsOrig),
+                                      _escapeRegexRangeChars(self.bodyCharsOrig),)
+            try:
+                self.re = re.compile( self.reString )
+            except:
+                self.re = None
+        
+    def parseImpl( self, instring, loc, doActions=True ):
+        if self.re:
+            result = self.re.match(instring,loc)
+            if not result:
+                exc = self.myException
+                exc.loc = loc
+                exc.pstr = instring
+                raise exc
+            
+            loc = result.end()
+            return loc,result.group()
+        
+        if not(instring[ loc ] in self.initChars):
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        start = loc
+        loc += 1
+        instrlen = len(instring)
+        bodychars = self.bodyChars
+        maxloc = start + self.maxLen
+        maxloc = min( maxloc, instrlen )
+        while loc < maxloc and instring[loc] in bodychars:
+            loc += 1
+            
+        throwException = False
+        if loc - start < self.minLen:
+            throwException = True
+        if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
+            throwException = True
+
+        if throwException:
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+
+        return loc, instring[start:loc]
+
+    def __str__( self ):
+        try:
+            return super(Word,self).__str__()
+        except:
+            pass
+
+            
+        if self.strRepr is None:
+            
+            def charsAsStr(s):
+                if len(s)>4:
+                    return s[:4]+"..."
+                else:
+                    return s
+            
+            if ( self.initCharsOrig != self.bodyCharsOrig ):
+                self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
+            else:
+                self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
+
+        return self.strRepr
+
+
+class Regex(Token):
+    """Token for matching strings that match a given regular expression.
+       Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
+    """
+    def __init__( self, pattern, flags=0):
+        """The parameters pattern and flags are passed to the re.compile() function as-is. See the Python re module for an explanation of the acceptable patterns and flags."""
+        super(Regex,self).__init__()
+        
+        if len(pattern) == 0:
+            warnings.warn("null string passed to Regex; use Empty() instead", 
+                    SyntaxWarning, stacklevel=2)
+    
+        self.pattern = pattern
+        self.flags = flags
+        
+        try:
+            self.re = re.compile(self.pattern, self.flags)
+            self.reString = self.pattern
+        except sre_constants.error,e:
+            warnings.warn("invalid pattern (%s) passed to Regex" % pattern, 
+                SyntaxWarning, stacklevel=2)
+            raise
+
+        self.name = _ustr(self)
+        self.errmsg = "Expected " + self.name
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+        self.mayReturnEmpty = True
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        result = self.re.match(instring,loc)
+        if not result:
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        
+        loc = result.end()
+        d = result.groupdict()
+        ret = ParseResults(result.group())
+        if d:
+            for k in d.keys():
+                ret[k] = d[k]
+        return loc,ret
+    
+    def __str__( self ):
+        try:
+            return super(Regex,self).__str__()
+        except:
+            pass
+        
+        if self.strRepr is None:
+            self.strRepr = "Re:(%s)" % repr(self.pattern)
+        
+        return self.strRepr
+
+
+class QuotedString(Token):
+    """Token for matching strings that are delimited by quoting characters.
+    """
+    def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None):
+        """
+           Defined with the following parameters:
+           - quoteChar - string of one or more characters defining the quote delimiting string
+           - escChar - character to escape quotes, typically backslash (default=None)
+           - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=None)
+           - multiline - boolean indicating whether quotes can span multiple lines (default=False)
+           - unquoteResults - boolean indicating whether the matched text should be unquoted (default=True)
+           - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=None => same as quoteChar)
+        """
+        super(QuotedString,self).__init__()
+        
+        # remove white space from quote chars - wont work anyway
+        quoteChar = quoteChar.strip()
+        if len(quoteChar) == 0:
+            warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+            raise SyntaxError()
+        
+        if endQuoteChar is None:
+            endQuoteChar = quoteChar
+        else:
+            endQuoteChar = endQuoteChar.strip()
+            if len(endQuoteChar) == 0:
+                warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+                raise SyntaxError()
+        
+        self.quoteChar = quoteChar
+        self.quoteCharLen = len(quoteChar)
+        self.firstQuoteChar = quoteChar[0]
+        self.endQuoteChar = endQuoteChar
+        self.endQuoteCharLen = len(endQuoteChar)
+        self.escChar = escChar
+        self.escQuote = escQuote
+        self.unquoteResults = unquoteResults
+        
+        if multiline:
+            self.flags = re.MULTILINE | re.DOTALL
+            self.pattern = r'%s(?:[^%s%s]' % \
+                ( re.escape(self.quoteChar),
+                  _escapeRegexRangeChars(self.endQuoteChar[0]),
+                  (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+        else:
+            self.flags = 0
+            self.pattern = r'%s(?:[^%s\n\r%s]' % \
+                ( re.escape(self.quoteChar),
+                  _escapeRegexRangeChars(self.endQuoteChar[0]),
+                  (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+        if len(self.endQuoteChar) > 1:
+            self.pattern += (
+                '|(?:' + ')|(?:'.join(["%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
+                                               _escapeRegexRangeChars(self.endQuoteChar[i])) 
+                                    for i in range(len(self.endQuoteChar)-1,0,-1)]) + ')'
+                )
+        if escQuote:
+            self.pattern += (r'|(?:%s)' % re.escape(escQuote))
+        if escChar:
+            self.pattern += (r'|(?:%s.)' % re.escape(escChar))
+            self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
+        self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
+        
+        try:
+            self.re = re.compile(self.pattern, self.flags)
+            self.reString = self.pattern
+        except sre_constants.error,e:
+            warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, 
+                SyntaxWarning, stacklevel=2)
+            raise
+
+        self.name = _ustr(self)
+        self.errmsg = "Expected " + self.name
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+        self.mayReturnEmpty = True
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
+        if not result:
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        
+        loc = result.end()
+        ret = result.group()
+        
+        if self.unquoteResults:
+            
+            # strip off quotes
+            ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
+                
+            if isinstance(ret,basestring):
+                # replace escaped characters
+                if self.escChar:
+                    ret = re.sub(self.escCharReplacePattern,"\g<1>",ret)
+
+                # replace escaped quotes
+                if self.escQuote:
+                    ret = ret.replace(self.escQuote, self.endQuoteChar)
+
+        return loc, ret
+    
+    def __str__( self ):
+        try:
+            return super(QuotedString,self).__str__()
+        except:
+            pass
+        
+        if self.strRepr is None:
+            self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
+        
+        return self.strRepr
+
+
+class CharsNotIn(Token):
+    """Token for matching words composed of characters *not* in a given set.
+       Defined with string containing all disallowed characters, and an optional 
+       minimum, maximum, and/or exact length.
+    """
+    def __init__( self, notChars, min=1, max=0, exact=0 ):
+        super(CharsNotIn,self).__init__()
+        self.skipWhitespace = False
+        self.notChars = notChars
+        
+        self.minLen = min
+
+        if max > 0:
+            self.maxLen = max
+        else:
+            self.maxLen = sys.maxint
+
+        if exact > 0:
+            self.maxLen = exact
+            self.minLen = exact
+        
+        self.name = _ustr(self)
+        self.errmsg = "Expected " + self.name
+        self.mayReturnEmpty = ( self.minLen == 0 )
+        self.myException.msg = self.errmsg
+        self.mayIndexError = False
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        if instring[loc] in self.notChars:
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+            
+        start = loc
+        loc += 1
+        notchars = self.notChars
+        maxlen = min( start+self.maxLen, len(instring) )
+        while loc < maxlen and (instring[loc] not in notchars):
+            loc += 1
+
+        if loc - start < self.minLen:
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+
+        return loc, instring[start:loc]
+
+    def __str__( self ):
+        try:
+            return super(CharsNotIn, self).__str__()
+        except:
+            pass
+
+        if self.strRepr is None:
+            if len(self.notChars) > 4:
+                self.strRepr = "!W:(%s...)" % self.notChars[:4]
+            else:
+                self.strRepr = "!W:(%s)" % self.notChars
+        
+        return self.strRepr
+
+class White(Token):
+    """Special matching class for matching whitespace.  Normally, whitespace is ignored
+       by pyparsing grammars.  This class is included when some whitespace structures
+       are significant.  Define with a string containing the whitespace characters to be
+       matched; default is " \\t\\n".  Also takes optional min, max, and exact arguments,
+       as defined for the Word class."""
+    whiteStrs = {
+        " " : "<SPC>",
+        "\t": "<TAB>",
+        "\n": "<LF>",
+        "\r": "<CR>",
+        "\f": "<FF>",
+        }
+    def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
+        super(White,self).__init__()
+        self.matchWhite = ws
+        self.setWhitespaceChars( "".join([c for c in self.whiteChars if c not in self.matchWhite]) )
+        #~ self.leaveWhitespace()
+        self.name = ("".join([White.whiteStrs[c] for c in self.matchWhite]))
+        self.mayReturnEmpty = True
+        self.errmsg = "Expected " + self.name
+        self.myException.msg = self.errmsg
+
+        self.minLen = min
+
+        if max > 0:
+            self.maxLen = max
+        else:
+            self.maxLen = sys.maxint
+
+        if exact > 0:
+            self.maxLen = exact
+            self.minLen = exact
+            
+    def parseImpl( self, instring, loc, doActions=True ):
+        if not(instring[ loc ] in self.matchWhite):
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        start = loc
+        loc += 1
+        maxloc = start + self.maxLen
+        maxloc = min( maxloc, len(instring) )
+        while loc < maxloc and instring[loc] in self.matchWhite:
+            loc += 1
+
+        if loc - start < self.minLen:
+            #~ raise ParseException( instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+
+        return loc, instring[start:loc]
+
+
+class PositionToken(Token):
+    def __init__( self ):
+        super(PositionToken,self).__init__()
+        self.name=self.__class__.__name__
+        self.mayReturnEmpty = True
+        self.mayIndexError = False
+
+class GoToColumn(PositionToken):
+    """Token to advance to a specific column of input text; useful for tabular report scraping."""
+    def __init__( self, colno ):
+        super(GoToColumn,self).__init__()
+        self.col = colno
+
+    def preParse( self, instring, loc ):
+        if col(loc,instring) != self.col:
+            instrlen = len(instring)
+            if self.ignoreExprs:
+                loc = self.skipIgnorables( instring, loc )
+            while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
+                loc += 1
+        return loc
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        thiscol = col( loc, instring )
+        if thiscol > self.col:
+            raise ParseException( instring, loc, "Text not in expected column", self )
+        newloc = loc + self.col - thiscol
+        ret = instring[ loc: newloc ]
+        return newloc, ret
+
+class LineStart(PositionToken):
+    """Matches if current position is at the beginning of a line within the parse string"""
+    def __init__( self ):
+        super(LineStart,self).__init__()
+        self.setWhitespaceChars( " \t" )
+        self.errmsg = "Expected start of line"
+        self.myException.msg = self.errmsg
+
+    def preParse( self, instring, loc ):
+        preloc = super(LineStart,self).preParse(instring,loc)
+        if instring[preloc] == "\n":
+            loc += 1
+        return loc
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        if not( loc==0 or
+            (loc == self.preParse( instring, 0 )) or
+            (instring[loc-1] == "\n") ): #col(loc, instring) != 1:
+            #~ raise ParseException( instring, loc, "Expected start of line" )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        return loc, []
+
+class LineEnd(PositionToken):
+    """Matches if current position is at the end of a line within the parse string"""
+    def __init__( self ):
+        super(LineEnd,self).__init__()
+        self.setWhitespaceChars( " \t" )
+        self.errmsg = "Expected end of line"
+        self.myException.msg = self.errmsg
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        if loc<len(instring):
+            if instring[loc] == "\n":
+                return loc+1, "\n"
+            else:
+                #~ raise ParseException( instring, loc, "Expected end of line" )
+                exc = self.myException
+                exc.loc = loc
+                exc.pstr = instring
+                raise exc
+        elif loc == len(instring):
+            return loc+1, []
+        else:
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+
+class StringStart(PositionToken):
+    """Matches if current position is at the beginning of the parse string"""
+    def __init__( self ):
+        super(StringStart,self).__init__()
+        self.errmsg = "Expected start of text"
+        self.myException.msg = self.errmsg
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        if loc != 0:
+            # see if entire string up to here is just whitespace and ignoreables
+            if loc != self.preParse( instring, 0 ):
+                #~ raise ParseException( instring, loc, "Expected start of text" )
+                exc = self.myException
+                exc.loc = loc
+                exc.pstr = instring
+                raise exc
+        return loc, []
+
+class StringEnd(PositionToken):
+    """Matches if current position is at the end of the parse string"""
+    def __init__( self ):
+        super(StringEnd,self).__init__()
+        self.errmsg = "Expected end of text"
+        self.myException.msg = self.errmsg
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        if loc < len(instring):
+            #~ raise ParseException( instring, loc, "Expected end of text" )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        elif loc == len(instring):
+            return loc+1, []
+        else:
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+
+
+class ParseExpression(ParserElement):
+    """Abstract subclass of ParserElement, for combining and post-processing parsed tokens."""
+    def __init__( self, exprs, savelist = False ):
+        super(ParseExpression,self).__init__(savelist)
+        if isinstance( exprs, list ):
+            self.exprs = exprs
+        elif isinstance( exprs, basestring ):
+            self.exprs = [ Literal( exprs ) ]
+        else:
+            self.exprs = [ exprs ]
+
+    def __getitem__( self, i ):
+        return self.exprs[i]
+
+    def append( self, other ):
+        self.exprs.append( other )
+        self.strRepr = None
+        return self
+
+    def leaveWhitespace( self ):
+        """Extends leaveWhitespace defined in base class, and also invokes leaveWhitespace on
+           all contained expressions."""
+        self.skipWhitespace = False
+        self.exprs = [ e.copy() for e in self.exprs ]
+        for e in self.exprs:
+            e.leaveWhitespace()
+        return self
+
+    def ignore( self, other ):
+        if isinstance( other, Suppress ):
+            if other not in self.ignoreExprs:
+                super( ParseExpression, self).ignore( other )
+                for e in self.exprs:
+                    e.ignore( self.ignoreExprs[-1] )
+        else:
+            super( ParseExpression, self).ignore( other )
+            for e in self.exprs:
+                e.ignore( self.ignoreExprs[-1] )
+        return self
+
+    def __str__( self ):
+        try:
+            return super(ParseExpression,self).__str__()
+        except:
+            pass
+            
+        if self.strRepr is None:
+            self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
+        return self.strRepr
+
+    def streamline( self ):
+        super(ParseExpression,self).streamline()
+
+        for e in self.exprs:
+            e.streamline()
+
+        # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
+        # but only if there are no parse actions or resultsNames on the nested And's
+        # (likewise for Or's and MatchFirst's)
+        if ( len(self.exprs) == 2 ):
+            other = self.exprs[0]
+            if ( isinstance( other, self.__class__ ) and
+                  not(other.parseAction) and
+                  other.resultsName is None and
+                  not other.debug ):
+                self.exprs = other.exprs[:] + [ self.exprs[1] ]
+                self.strRepr = None
+                self.mayReturnEmpty |= other.mayReturnEmpty
+                self.mayIndexError  |= other.mayIndexError
+
+            other = self.exprs[-1]
+            if ( isinstance( other, self.__class__ ) and
+                  not(other.parseAction) and
+                  other.resultsName is None and
+                  not other.debug ):
+                self.exprs = self.exprs[:-1] + other.exprs[:]
+                self.strRepr = None
+                self.mayReturnEmpty |= other.mayReturnEmpty
+                self.mayIndexError  |= other.mayIndexError
+
+        return self
+
+    def setResultsName( self, name, listAllMatches=False ):
+        ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
+        return ret
+    
+    def validate( self, validateTrace=[] ):
+        tmp = validateTrace[:]+[self]
+        for e in self.exprs:
+            e.validate(tmp)
+        self.checkRecursion( [] )
+
+class And(ParseExpression):
+    """Requires all given ParseExpressions to be found in the given order.
+       Expressions may be separated by whitespace.
+       May be constructed using the '+' operator.
+    """
+    def __init__( self, exprs, savelist = True ):
+        super(And,self).__init__(exprs, savelist)
+        self.mayReturnEmpty = True
+        for e in self.exprs:
+            if not e.mayReturnEmpty:
+                self.mayReturnEmpty = False
+                break
+        self.setWhitespaceChars( exprs[0].whiteChars )
+        self.skipWhitespace = exprs[0].skipWhitespace
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        # pass False as last arg to _parse for first element, since we already
+        # pre-parsed the string as part of our And pre-parsing
+        loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
+        for e in self.exprs[1:]:
+            loc, exprtokens = e._parse( instring, loc, doActions )
+            if exprtokens or exprtokens.keys():
+                resultlist += exprtokens
+        return loc, resultlist
+
+    def __iadd__(self, other ):
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        return self.append( other ) #And( [ self, other ] )
+        
+    def checkRecursion( self, parseElementList ):
+        subRecCheckList = parseElementList[:] + [ self ]
+        for e in self.exprs:
+            e.checkRecursion( subRecCheckList )
+            if not e.mayReturnEmpty:
+                break
+                
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "{" + " ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
+        
+        return self.strRepr
+    
+
+class Or(ParseExpression):
+    """Requires that at least one ParseExpression is found.
+       If two expressions match, the expression that matches the longest string will be used.
+       May be constructed using the '^' operator.
+    """
+    def __init__( self, exprs, savelist = False ):
+        super(Or,self).__init__(exprs, savelist)
+        self.mayReturnEmpty = False
+        for e in self.exprs:
+            if e.mayReturnEmpty:
+                self.mayReturnEmpty = True
+                break
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        maxExcLoc = -1
+        maxMatchLoc = -1
+        for e in self.exprs:
+            try:
+                loc2 = e.tryParse( instring, loc )
+            except ParseException, err:
+                if err.loc > maxExcLoc:
+                    maxException = err
+                    maxExcLoc = err.loc
+            except IndexError, err:
+                if len(instring) > maxExcLoc:
+                    maxException = ParseException(instring,len(instring),e.errmsg,self)
+                    maxExcLoc = len(instring)
+            else:
+                if loc2 > maxMatchLoc:
+                    maxMatchLoc = loc2
+                    maxMatchExp = e
+        
+        if maxMatchLoc < 0:
+            if self.exprs:
+                raise maxException
+            else:
+                raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+        return maxMatchExp._parse( instring, loc, doActions )
+
+    def __ixor__(self, other ):
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        return self.append( other ) #Or( [ self, other ] )
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "{" + " ^ ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
+        
+        return self.strRepr
+    
+    def checkRecursion( self, parseElementList ):
+        subRecCheckList = parseElementList[:] + [ self ]
+        for e in self.exprs:
+            e.checkRecursion( subRecCheckList )
+
+
+class MatchFirst(ParseExpression):
+    """Requires that at least one ParseExpression is found.
+       If two expressions match, the first one listed is the one that will match.
+       May be constructed using the '|' operator.
+    """
+    def __init__( self, exprs, savelist = False ):
+        super(MatchFirst,self).__init__(exprs, savelist)
+        if exprs:
+            self.mayReturnEmpty = False
+            for e in self.exprs:
+                if e.mayReturnEmpty:
+                    self.mayReturnEmpty = True
+                    break
+        else:
+            self.mayReturnEmpty = True
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        maxExcLoc = -1
+        for e in self.exprs:
+            try:
+                ret = e._parse( instring, loc, doActions )
+                return ret
+            except ParseException, err:
+                if err.loc > maxExcLoc:
+                    maxException = err
+                    maxExcLoc = err.loc
+            except IndexError, err:
+                if len(instring) > maxExcLoc:
+                    maxException = ParseException(instring,len(instring),e.errmsg,self)
+                    maxExcLoc = len(instring)
+
+        # only got here if no expression matched, raise exception for match that made it the furthest
+        else:
+            if self.exprs:
+                raise maxException
+            else:
+                raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+    def __ior__(self, other ):
+        if isinstance( other, basestring ):
+            other = Literal( other )
+        return self.append( other ) #MatchFirst( [ self, other ] )
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "{" + " | ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
+        
+        return self.strRepr
+    
+    def checkRecursion( self, parseElementList ):
+        subRecCheckList = parseElementList[:] + [ self ]
+        for e in self.exprs:
+            e.checkRecursion( subRecCheckList )
+
+class Each(ParseExpression):
+    """Requires all given ParseExpressions to be found, but in any order.
+       Expressions may be separated by whitespace.
+       May be constructed using the '&' operator.
+    """
+    def __init__( self, exprs, savelist = True ):
+        super(Each,self).__init__(exprs, savelist)
+        self.mayReturnEmpty = True
+        for e in self.exprs:
+            if not e.mayReturnEmpty:
+                self.mayReturnEmpty = False
+                break
+        self.skipWhitespace = True
+        self.optionals = [ e.expr for e in exprs if isinstance(e,Optional) ]
+        self.multioptionals = [ e.expr for e in exprs if isinstance(e,ZeroOrMore) ]
+        self.multirequired = [ e.expr for e in exprs if isinstance(e,OneOrMore) ]
+        self.required = [ e for e in exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
+        self.required += self.multirequired
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        tmpLoc = loc
+        tmpReqd = self.required[:]
+        tmpOpt  = self.optionals[:]
+        matchOrder = []
+
+        keepMatching = True
+        while keepMatching:
+            tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
+            failed = []
+            for e in tmpExprs:
+                try:
+                    tmpLoc = e.tryParse( instring, tmpLoc )
+                except ParseException:
+                    failed.append(e)
+                else:
+                    matchOrder.append(e)
+                    if e in tmpReqd:
+                        tmpReqd.remove(e)
+                    elif e in tmpOpt:
+                        tmpOpt.remove(e)
+            if len(failed) == len(tmpExprs):
+                keepMatching = False
+        
+        if tmpReqd:
+            missing = ", ".join( [ _ustr(e) for e in tmpReqd ] )
+            raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
+
+        resultlist = []
+        for e in matchOrder:
+            loc,results = e._parse(instring,loc,doActions)
+            resultlist.append(results)
+            
+        finalResults = ParseResults([])
+        for r in resultlist:
+            dups = {}
+            for k in r.keys():
+                if k in finalResults.keys():
+                    tmp = ParseResults(finalResults[k])
+                    tmp += ParseResults(r[k])
+                    dups[k] = tmp
+            finalResults += ParseResults(r)
+            for k,v in dups.items():
+                finalResults[k] = v
+        return loc, finalResults
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "{" + " & ".join( [ _ustr(e) for e in self.exprs ] ) + "}"
+        
+        return self.strRepr
+    
+    def checkRecursion( self, parseElementList ):
+        subRecCheckList = parseElementList[:] + [ self ]
+        for e in self.exprs:
+            e.checkRecursion( subRecCheckList )
+
+
+class ParseElementEnhance(ParserElement):
+    """Abstract subclass of ParserElement, for combining and post-processing parsed tokens."""
+    def __init__( self, expr, savelist=False ):
+        super(ParseElementEnhance,self).__init__(savelist)
+        if isinstance( expr, basestring ):
+            expr = Literal(expr)
+        self.expr = expr
+        self.strRepr = None
+        if expr is not None:
+            self.mayIndexError = expr.mayIndexError
+            self.setWhitespaceChars( expr.whiteChars )
+            self.skipWhitespace = expr.skipWhitespace
+            self.saveAsList = expr.saveAsList
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        if self.expr is not None:
+            return self.expr._parse( instring, loc, doActions, callPreParse=False )
+        else:
+            raise ParseException("",loc,self.errmsg,self)
+            
+    def leaveWhitespace( self ):
+        self.skipWhitespace = False
+        self.expr = self.expr.copy()
+        if self.expr is not None:
+            self.expr.leaveWhitespace()
+        return self
+
+    def ignore( self, other ):
+        if isinstance( other, Suppress ):
+            if other not in self.ignoreExprs:
+                super( ParseElementEnhance, self).ignore( other )
+                if self.expr is not None:
+                    self.expr.ignore( self.ignoreExprs[-1] )
+        else:
+            super( ParseElementEnhance, self).ignore( other )
+            if self.expr is not None:
+                self.expr.ignore( self.ignoreExprs[-1] )
+        return self
+
+    def streamline( self ):
+        super(ParseElementEnhance,self).streamline()
+        if self.expr is not None:
+            self.expr.streamline()
+        return self
+
+    def checkRecursion( self, parseElementList ):
+        if self in parseElementList:
+            raise RecursiveGrammarException( parseElementList+[self] )
+        subRecCheckList = parseElementList[:] + [ self ]
+        if self.expr is not None:
+            self.expr.checkRecursion( subRecCheckList )
+        
+    def validate( self, validateTrace=[] ):
+        tmp = validateTrace[:]+[self]
+        if self.expr is not None:
+            self.expr.validate(tmp)
+        self.checkRecursion( [] )
+    
+    def __str__( self ):
+        try:
+            return super(ParseElementEnhance,self).__str__()
+        except:
+            pass
+            
+        if self.strRepr is None and self.expr is not None:
+            self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
+        return self.strRepr
+
+
+class FollowedBy(ParseElementEnhance):
+    """Lookahead matching of the given parse expression.  FollowedBy
+    does *not* advance the parsing position within the input string, it only 
+    verifies that the specified parse expression matches at the current 
+    position.  FollowedBy always returns a null token list."""
+    def __init__( self, expr ):
+        super(FollowedBy,self).__init__(expr)
+        self.mayReturnEmpty = True
+        
+    def parseImpl( self, instring, loc, doActions=True ):
+        self.expr.tryParse( instring, loc )
+        return loc, []
+
+
+class NotAny(ParseElementEnhance):
+    """Lookahead to disallow matching with the given parse expression.  NotAny
+    does *not* advance the parsing position within the input string, it only 
+    verifies that the specified parse expression does *not* match at the current 
+    position.  Also, NotAny does *not* skip over leading whitespace. NotAny 
+    always returns a null token list.  May be constructed using the '~' operator."""
+    def __init__( self, expr ):
+        super(NotAny,self).__init__(expr)
+        #~ self.leaveWhitespace()
+        self.skipWhitespace = False  # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
+        self.mayReturnEmpty = True
+        self.errmsg = "Found unwanted token, "+_ustr(self.expr)
+        self.myException = ParseException("",0,self.errmsg,self)
+        
+    def parseImpl( self, instring, loc, doActions=True ):
+        try:
+            self.expr.tryParse( instring, loc )
+        except (ParseException,IndexError):
+            pass
+        else:
+            #~ raise ParseException(instring, loc, self.errmsg )
+            exc = self.myException
+            exc.loc = loc
+            exc.pstr = instring
+            raise exc
+        return loc, []
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "~{" + _ustr(self.expr) + "}"
+        
+        return self.strRepr
+
+
+class ZeroOrMore(ParseElementEnhance):
+    """Optional repetition of zero or more of the given expression."""
+    def __init__( self, expr ):
+        super(ZeroOrMore,self).__init__(expr)
+        self.mayReturnEmpty = True
+    
+    def parseImpl( self, instring, loc, doActions=True ):
+        tokens = []
+        try:
+            loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+            hasIgnoreExprs = ( len(self.ignoreExprs) > 0 )
+            while 1:
+                if hasIgnoreExprs:
+                    preloc = self.skipIgnorables( instring, loc )
+                else:
+                    preloc = loc
+                loc, tmptokens = self.expr._parse( instring, preloc, doActions )
+                if tmptokens or tmptokens.keys():
+                    tokens += tmptokens
+        except (ParseException,IndexError):
+            pass
+
+        return loc, tokens
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "[" + _ustr(self.expr) + "]..."
+        
+        return self.strRepr
+    
+    def setResultsName( self, name, listAllMatches=False ):
+        ret = super(ZeroOrMore,self).setResultsName(name,listAllMatches)
+        ret.saveAsList = True
+        return ret
+    
+
+class OneOrMore(ParseElementEnhance):
+    """Repetition of one or more of the given expression."""
+    def parseImpl( self, instring, loc, doActions=True ):
+        # must be at least one
+        loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+        try:
+            hasIgnoreExprs = ( len(self.ignoreExprs) > 0 )
+            while 1:
+                if hasIgnoreExprs:
+                    preloc = self.skipIgnorables( instring, loc )
+                else:
+                    preloc = loc
+                loc, tmptokens = self.expr._parse( instring, preloc, doActions )
+                if tmptokens or tmptokens.keys():
+                    tokens += tmptokens
+        except (ParseException,IndexError):
+            pass
+
+        return loc, tokens
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "{" + _ustr(self.expr) + "}..."
+        
+        return self.strRepr
+    
+    def setResultsName( self, name, listAllMatches=False ):
+        ret = super(OneOrMore,self).setResultsName(name,listAllMatches)
+        ret.saveAsList = True
+        return ret
+
+class _NullToken(object):
+    def __bool__(self):
+        return False
+    def __str__(self):
+        return ""
+
+_optionalNotMatched = _NullToken()
+class Optional(ParseElementEnhance):
+    """Optional matching of the given expression.
+       A default return string can also be specified, if the optional expression
+       is not found.
+    """
+    def __init__( self, exprs, default=_optionalNotMatched ):
+        super(Optional,self).__init__( exprs, savelist=False )
+        self.defaultValue = default
+        self.mayReturnEmpty = True
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        try:
+            loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+        except (ParseException,IndexError):
+            if self.defaultValue is not _optionalNotMatched:
+                tokens = [ self.defaultValue ]
+            else:
+                tokens = []
+        return loc, tokens
+
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+            
+        if self.strRepr is None:
+            self.strRepr = "[" + _ustr(self.expr) + "]"
+        
+        return self.strRepr
+
+
+class SkipTo(ParseElementEnhance):
+    """Token for skipping over all undefined text until the matched expression is found.
+       If include is set to true, the matched expression is also consumed.  The ignore
+       argument is used to define grammars (typically quoted strings and comments) that 
+       might contain false matches.
+    """
+    def __init__( self, other, include=False, ignore=None ):
+        super( SkipTo, self ).__init__( other )
+        if ignore is not None:
+            self.expr = self.expr.copy()
+            self.expr.ignore(ignore)
+        self.mayReturnEmpty = True
+        self.mayIndexError = False
+        self.includeMatch = include
+        self.asList = False
+        self.errmsg = "No match found for "+_ustr(self.expr)
+        self.myException = ParseException("",0,self.errmsg,self)
+
+    def parseImpl( self, instring, loc, doActions=True ):
+        startLoc = loc
+        instrlen = len(instring)
+        expr = self.expr
+        while loc <= instrlen:
+            try:
+                loc = expr.skipIgnorables( instring, loc )
+                expr._parse( instring, loc, doActions=False, callPreParse=False )
+                if self.includeMatch:
+                    skipText = instring[startLoc:loc]
+                    loc,mat = expr._parse(instring,loc)
+                    if mat:
+                        return loc, [ skipText, mat ]
+                    else:
+                        return loc, [ skipText ]
+                else:
+                    return loc, [ instring[startLoc:loc] ]
+            except (ParseException,IndexError):
+                loc += 1
+        exc = self.myException
+        exc.loc = loc
+        exc.pstr = instring
+        raise exc
+
+class Forward(ParseElementEnhance):
+    """Forward declaration of an expression to be defined later -
+       used for recursive grammars, such as algebraic infix notation.
+       When the expression is known, it is assigned to the Forward variable using the '<<' operator.
+       
+       Note: take care when assigning to Forward not to overlook precedence of operators.
+       Specifically, '|' has a lower precedence than '<<', so that::
+          fwdExpr << a | b | c
+       will actually be evaluated as::
+          (fwdExpr << a) | b | c
+       thereby leaving b and c out as parseable alternatives.  It is recommended that you
+       explicitly group the values inserted into the Forward::
+          fwdExpr << (a | b | c)
+    """
+    def __init__( self, other=None ):
+        super(Forward,self).__init__( other, savelist=False )
+
+    def __lshift__( self, other ):
+        if isinstance( other, basestring ):
+            other = Literal(other)
+        self.expr = other
+        self.mayReturnEmpty = other.mayReturnEmpty
+        self.strRepr = None
+        return self
+
+    def leaveWhitespace( self ):
+        self.skipWhitespace = False
+        return self
+
+    def streamline( self ):
+        if not self.streamlined:
+            self.streamlined = True
+            if self.expr is not None: 
+                self.expr.streamline()
+        return self
+
+    def validate( self, validateTrace=[] ):
+        if self not in validateTrace:
+            tmp = validateTrace[:]+[self]
+            if self.expr is not None: 
+                self.expr.validate(tmp)
+        self.checkRecursion([])        
+        
+    def __str__( self ):
+        if hasattr(self,"name"):
+            return self.name
+
+        self.__class__ = _ForwardNoRecurse
+        try:
+            if self.expr is not None: 
+                retString = _ustr(self.expr)
+            else:
+                retString = "None"
+        finally:
+            self.__class__ = Forward
+        return "Forward: "+retString
+        
+    def copy(self):
+        if self.expr is not None:
+            return super(Forward,self).copy()
+        else:
+            ret = Forward()
+            ret << self
+            return ret
+
+class _ForwardNoRecurse(Forward):
+    def __str__( self ):
+        return "..."
+        
+class TokenConverter(ParseElementEnhance):
+    """Abstract subclass of ParseExpression, for converting parsed results."""
+    def __init__( self, expr, savelist=False ):
+        super(TokenConverter,self).__init__( expr )#, savelist )
+        self.saveAsList = False
+
+
+class Upcase(TokenConverter):
+    """Converter to upper case all matching tokens."""
+    def __init__(self, *args):
+        super(Upcase,self).__init__(*args)
+        warnings.warn("Upcase class is deprecated, use upcaseTokens parse action instead", 
+                       DeprecationWarning,stacklevel=2)
+    
+    def postParse( self, instring, loc, tokenlist ):
+        return map( string.upper, tokenlist )
+
+
+class Combine(TokenConverter):
+    """Converter to concatenate all matching tokens to a single string.
+       By default, the matching patterns must also be contiguous in the input string;
+       this can be disabled by specifying 'adjacent=False' in the constructor.
+    """
+    def __init__( self, expr, joinString="", adjacent=True ):
+        super(Combine,self).__init__( expr )
+        # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
+        if adjacent:
+            self.leaveWhitespace()
+        self.adjacent = adjacent
+        self.skipWhitespace = True
+        self.joinString = joinString
+
+    def ignore( self, other ):
+        if self.adjacent:
+            ParserElement.ignore(self, other)
+        else:
+            super( Combine, self).ignore( other )
+        return self
+
+    def postParse( self, instring, loc, tokenlist ):
+        retToks = tokenlist.copy()
+        del retToks[:]
+        retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
+
+        if self.resultsName and len(retToks.keys())>0:
+            return [ retToks ]
+        else:
+            return retToks
+
+class Group(TokenConverter):
+    """Converter to return the matched tokens as a list - useful for returning tokens of ZeroOrMore and OneOrMore expressions."""
+    def __init__( self, expr ):
+        super(Group,self).__init__( expr )
+        self.saveAsList = True
+
+    def postParse( self, instring, loc, tokenlist ):
+        return [ tokenlist ]
+        
+class Dict(TokenConverter):
+    """Converter to return a repetitive expression as a list, but also as a dictionary.
+       Each element can also be referenced using the first token in the expression as its key.
+       Useful for tabular report scraping when the first column can be used as a item key.
+    """
+    def __init__( self, exprs ):
+        super(Dict,self).__init__( exprs )
+        self.saveAsList = True
+
+    def postParse( self, instring, loc, tokenlist ):
+        for i,tok in enumerate(tokenlist):
+            ikey = _ustr(tok[0]).strip()
+            if len(tok)==1:
+                tokenlist[ikey] = ("",i)
+            elif len(tok)==2 and not isinstance(tok[1],ParseResults):
+                tokenlist[ikey] = (tok[1],i)
+            else:
+                dictvalue = tok.copy() #ParseResults(i)
+                del dictvalue[0]
+                if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.keys()):
+                    tokenlist[ikey] = (dictvalue,i)
+                else:
+                    tokenlist[ikey] = (dictvalue[0],i)
+
+        if self.resultsName:
+            return [ tokenlist ]
+        else:
+            return tokenlist
+
+
+class Suppress(TokenConverter):
+    """Converter for ignoring the results of a parsed expression."""
+    def postParse( self, instring, loc, tokenlist ):
+        return []
+    
+    def suppress( self ):
+        return self
+
+
+class OnlyOnce(object):
+    """Wrapper for parse actions, to ensure they are only called once."""
+    def __init__(self, methodCall):
+        self.callable = ParserElement.normalizeParseActionArgs(methodCall)
+        self.called = False
+    def __call__(self,s,l,t):
+        if not self.called:
+            results = self.callable(s,l,t)
+            self.called = True
+            return results
+        raise ParseException(s,l,"")
+    def reset():
+        self.called = False
+
+def traceParseAction(f):
+    """Decorator for debugging parse actions."""
+    f = ParserElement.normalizeParseActionArgs(f)
+    def z(*paArgs):
+        thisFunc = f.func_name
+        s,l,t = paArgs[-3:]
+        if len(paArgs)>3:
+            thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
+        sys.stderr.write( ">>entering %s(line: '%s', %d, %s)\n" % (thisFunc,line(l,s),l,t) )
+        try:
+            ret = f(*paArgs)
+        except Exception, exc:
+            sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
+            raise
+        sys.stderr.write( "<<leaving %s (ret: %s)\n" % (thisFunc,ret) )
+        return ret
+    return z
+        
+#
+# global helpers
+#
+def delimitedList( expr, delim=",", combine=False ):
+    """Helper to define a delimited list of expressions - the delimiter defaults to ','.
+       By default, the list elements and delimiters can have intervening whitespace, and 
+       comments, but this can be overridden by passing 'combine=True' in the constructor.
+       If combine is set to True, the matching tokens are returned as a single token
+       string, with the delimiters included; otherwise, the matching tokens are returned
+       as a list of tokens, with the delimiters suppressed.
+    """
+    dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
+    if combine:
+        return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
+    else:
+        return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
+
+def countedArray( expr ):
+    """Helper to define a counted list of expressions.
+       This helper defines a pattern of the form::
+           integer expr expr expr...
+       where the leading integer tells how many expr expressions follow.
+       The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
+    """
+    arrayExpr = Forward()
+    def countFieldParseAction(s,l,t):
+        n = int(t[0])
+        arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
+        return []
+    return ( Word(nums).setParseAction(countFieldParseAction) + arrayExpr )
+
+def _flatten(L):
+    if type(L) is not list: return [L]
+    if L == []: return L
+    return _flatten(L[0]) + _flatten(L[1:])
+
+def matchPreviousLiteral(expr):
+    """Helper to define an expression that is indirectly defined from
+       the tokens matched in a previous expression, that is, it looks
+       for a 'repeat' of a previous expression.  For example::
+           first = Word(nums)
+           second = matchPreviousLiteral(first)
+           matchExpr = first + ":" + second
+       will match "1:1", but not "1:2".  Because this matches a 
+       previous literal, will also match the leading "1:1" in "1:10".  
+       If this is not desired, use matchPreviousExpr.
+       Do *not* use with packrat parsing enabled.
+    """
+    rep = Forward()
+    def copyTokenToRepeater(s,l,t):
+        if t:
+            if len(t) == 1:
+                rep << t[0]
+            else:
+                # flatten t tokens
+                tflat = _flatten(t.asList())
+                rep << And( [ Literal(tt) for tt in tflat ] )
+        else:
+            rep << Empty()
+    expr.addParseAction(copyTokenToRepeater)
+    return rep
+    
+def matchPreviousExpr(expr):
+    """Helper to define an expression that is indirectly defined from
+       the tokens matched in a previous expression, that is, it looks
+       for a 'repeat' of a previous expression.  For example::
+           first = Word(nums)
+           second = matchPreviousExpr(first)
+           matchExpr = first + ":" + second
+       will match "1:1", but not "1:2".  Because this matches by
+       expressions, will *not* match the leading "1:1" in "1:10";
+       the expressions are evaluated first, and then compared, so
+       "1" is compared with "10".
+       Do *not* use with packrat parsing enabled.
+    """
+    rep = Forward()
+    e2 = expr.copy()
+    rep << e2
+    def copyTokenToRepeater(s,l,t):
+        matchTokens = _flatten(t.asList())
+        def mustMatchTheseTokens(s,l,t):
+            theseTokens = _flatten(t.asList())
+            if  theseTokens != matchTokens:
+                raise ParseException("",0,"")
+        rep.setParseAction( mustMatchTheseTokens )
+    expr.addParseAction(copyTokenToRepeater)
+    return rep
+    
+def _escapeRegexRangeChars(s):
+    #~  escape these chars: ^-]
+    for c in r"\^-]":
+        s = s.replace(c,"\\"+c)
+    s = s.replace("\n",r"\n")
+    s = s.replace("\t",r"\t")
+    return _ustr(s)
+    
+def oneOf( strs, caseless=False, useRegex=True ):
+    """Helper to quickly define a set of alternative Literals, and makes sure to do 
+       longest-first testing when there is a conflict, regardless of the input order, 
+       but returns a MatchFirst for best performance.  
+       
+       Parameters:
+        - strs - a string of space-delimited literals, or a list of string literals
+        - caseless - (default=False) - treat all literals as caseless
+        - useRegex - (default=True) - as an optimization, will generate a Regex
+          object; otherwise, will generate a MatchFirst object (if caseless=True, or
+          if creating a Regex raises an exception)
+    """
+    if caseless:
+        isequal = ( lambda a,b: a.upper() == b.upper() )
+        masks = ( lambda a,b: b.upper().startswith(a.upper()) )
+        parseElementClass = CaselessLiteral
+    else:
+        isequal = ( lambda a,b: a == b )
+        masks = ( lambda a,b: b.startswith(a) )
+        parseElementClass = Literal
+    
+    if isinstance(strs,(list,tuple)):
+        symbols = strs[:]
+    elif isinstance(strs,basestring):
+        symbols = strs.split()
+    else:
+        warnings.warn("Invalid argument to oneOf, expected string or list",
+                SyntaxWarning, stacklevel=2)
+        
+    i = 0
+    while i < len(symbols)-1:
+        cur = symbols[i]
+        for j,other in enumerate(symbols[i+1:]):
+            if ( isequal(other, cur) ):
+                del symbols[i+j+1]
+                break
+            elif ( masks(cur, other) ):
+                del symbols[i+j+1]
+                symbols.insert(i,other)
+                cur = other
+                break
+        else:
+            i += 1
+
+    if not caseless and useRegex:
+        #~ print strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )
+        try:
+            if len(symbols)==len("".join(symbols)):
+                return Regex( "[%s]" % "".join( [ _escapeRegexRangeChars(sym) for sym in symbols] ) )
+            else:
+                return Regex( "|".join( [ re.escape(sym) for sym in symbols] ) )
+        except:
+            warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
+                    SyntaxWarning, stacklevel=2)
+
+
+    # last resort, just use MatchFirst
+    return MatchFirst( [ parseElementClass(sym) for sym in symbols ] )
+
+def dictOf( key, value ):
+    """Helper to easily and clearly define a dictionary by specifying the respective patterns
+       for the key and value.  Takes care of defining the Dict, ZeroOrMore, and Group tokens
+       in the proper order.  The key pattern can include delimiting markers or punctuation,
+       as long as they are suppressed, thereby leaving the significant key text.  The value
+       pattern can include named results, so that the Dict results can include named token 
+       fields.
+    """
+    return Dict( ZeroOrMore( Group ( key + value ) ) )
+
+_bslash = "\\"
+printables = "".join( [ c for c in string.printable if c not in string.whitespace ] )
+
+# convenience constants for positional expressions
+empty       = Empty().setName("empty")
+lineStart   = LineStart().setName("lineStart")
+lineEnd     = LineEnd().setName("lineEnd")
+stringStart = StringStart().setName("stringStart")
+stringEnd   = StringEnd().setName("stringEnd")
+
+_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
+_printables_less_backslash = "".join([ c for c in printables if c not in  r"\]" ])
+_escapedHexChar = Combine( Suppress(_bslash + "0x") + Word(hexnums) ).setParseAction(lambda s,l,t:unichr(int(t[0],16)))
+_escapedOctChar = Combine( Suppress(_bslash) + Word("0","01234567") ).setParseAction(lambda s,l,t:unichr(int(t[0],8)))
+_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(_printables_less_backslash,exact=1)
+_charRange = Group(_singleChar + Suppress("-") + _singleChar)
+_reBracketExpr = "[" + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
+
+_expanded = lambda p: (isinstance(p,ParseResults) and ''.join([ unichr(c) for c in range(ord(p[0]),ord(p[1])+1) ]) or p)
+        
+def srange(s):
+    r"""Helper to easily define string ranges for use in Word construction.  Borrows
+       syntax from regexp '[]' string range definitions::
+          srange("[0-9]")   -> "0123456789"
+          srange("[a-z]")   -> "abcdefghijklmnopqrstuvwxyz"
+          srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
+       The input string must be enclosed in []'s, and the returned string is the expanded 
+       character set joined into a single string.
+       The values enclosed in the []'s may be::
+          a single character
+          an escaped character with a leading backslash (such as \- or \])
+          an escaped hex character with a leading '\0x' (\0x21, which is a '!' character)
+          an escaped octal character with a leading '\0' (\041, which is a '!' character)
+          a range of any of the above, separated by a dash ('a-z', etc.)
+          any combination of the above ('aeiouy', 'a-zA-Z0-9_$', etc.)
+    """
+    try:
+        return "".join([_expanded(part) for part in _reBracketExpr.parseString(s).body])
+    except:
+        return ""
+
+def replaceWith(replStr):
+    """Helper method for common parse actions that simply return a literal value.  Especially 
+       useful when used with transformString().
+    """
+    def _replFunc(*args):
+        return [replStr]
+    return _replFunc
+
+def removeQuotes(s,l,t):
+    """Helper parse action for removing quotation marks from parsed quoted strings.
+       To use, add this parse action to quoted string using::
+         quotedString.setParseAction( removeQuotes )
+    """
+    return t[0][1:-1]
+
+def upcaseTokens(s,l,t):
+    """Helper parse action to convert tokens to upper case."""
+    return [ str(tt).upper() for tt in t ]
+
+def downcaseTokens(s,l,t):
+    """Helper parse action to convert tokens to lower case."""
+    return [ str(tt).lower() for tt in t ]
+
+def keepOriginalText(s,startLoc,t):
+    import inspect
+    """Helper parse action to preserve original parsed text,
+       overriding any nested parse actions."""
+    f = inspect.stack()[1][0]
+    try:
+        endloc = f.f_locals["loc"]
+    finally:
+        del f
+    return s[startLoc:endloc]
+        
+def _makeTags(tagStr, xml):
+    """Internal helper to construct opening and closing tag expressions, given a tag name"""
+    if isinstance(tagStr,basestring):
+        resname = tagStr
+        tagStr = Keyword(tagStr, caseless=not xml)
+    else:
+        resname = tagStr.name
+        
+    tagAttrName = Word(alphas,alphanums+"_-")
+    if (xml):
+        tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
+        openTag = Suppress("<") + tagStr + \
+                Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
+                Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+    else:
+        printablesLessRAbrack = "".join( [ c for c in printables if c not in ">" ] )
+        tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
+        openTag = Suppress("<") + tagStr + \
+                Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
+                Suppress("=") + tagAttrValue ))) + \
+                Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+    closeTag = Combine("</" + tagStr + ">")
+    
+    openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % tagStr)
+    closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % tagStr)
+    
+    return openTag, closeTag
+
+def makeHTMLTags(tagStr):
+    """Helper to construct opening and closing tag expressions for HTML, given a tag name"""
+    return _makeTags( tagStr, False )
+
+def makeXMLTags(tagStr):
+    """Helper to construct opening and closing tag expressions for XML, given a tag name"""
+    return _makeTags( tagStr, True )
+
+opAssoc = _Constants()
+opAssoc.LEFT = object()
+opAssoc.RIGHT = object()
+
+def operatorPrecedence( baseExpr, opList ):
+    """Helper method for constructing grammars of expressions made up of 
+       operators working in a precedence hierarchy.  Operators may be unary or
+       binary, left- or right-associative.  Parse actions can also be attached
+       to operator expressions.
+        
+       Parameters:
+        - baseExpr - expression representing the most basic element for the nested 
+        - opList - list of tuples, one for each operator precedence level in the expression grammar; each tuple is of the form
+          (opExpr, numTerms, rightLeftAssoc, parseAction), where:
+           - opExpr is the pyparsing expression for the operator;
+              may also be a string, which will be converted to a Literal
+           - numTerms is the number of terms for this operator (must
+              be 1 or 2)
+           - rightLeftAssoc is the indicator whether the operator is
+              right or left associative, using the pyparsing-defined
+              constants opAssoc.RIGHT and opAssoc.LEFT.
+           - parseAction is the parse action to be associated with 
+              expressions matching this operator expression (the
+              parse action tuple member may be omitted)
+    """
+    ret = Forward()
+    lastExpr = baseExpr | ( Suppress('(') + ret + Suppress(')') )
+    for i,operDef in enumerate(opList):
+        opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
+        thisExpr = Forward().setName("expr%d" % i)
+        if rightLeftAssoc == opAssoc.LEFT:
+            if arity == 1:
+                matchExpr = Group( lastExpr + opExpr )
+            elif arity == 2:
+                matchExpr = Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
+            else:
+                raise ValueError, "operator must be unary (1) or binary (2)"
+        elif rightLeftAssoc == opAssoc.RIGHT:
+            if arity == 1:
+                # try to avoid LR with this extra test
+                if not isinstance(opExpr, Optional):
+                    opExpr = Optional(opExpr)
+                matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) 
+            elif arity == 2:
+                matchExpr = Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
+            else:
+                raise ValueError, "operator must be unary (1) or binary (2)"
+        else:
+            raise ValueError, "operator must indicate right or left associativity"
+        if pa:
+            matchExpr.setParseAction( pa )
+        thisExpr << ( matchExpr | lastExpr )
+        lastExpr = thisExpr
+    ret << lastExpr
+    return ret
+
+alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
+punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
+
+dblQuotedString = Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\.))*"').setName("string enclosed in double quotes")
+sglQuotedString = Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\.))*'").setName("string enclosed in single quotes")
+quotedString = Regex(r'''(?:"(?:[^"\n\r\\]|(?:"")|(?:\\.))*")|(?:'(?:[^'\n\r\\]|(?:'')|(?:\\.))*')''').setName("quotedString using single or double quotes")
+
+anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_"))
+commonHTMLEntity = Combine("&" + oneOf("gt lt amp nbsp quot").setResultsName("entity") +";")
+_htmlEntityMap = dict(zip("gt lt amp nbsp quot".split(),"><& '"))
+replaceHTMLEntity = lambda t : t.entity in _htmlEntityMap and _htmlEntityMap[t.entity] or None
+    
+# it's easy to get these comment structures wrong - they're very common, so may as well make them available
+cStyleComment = Regex(r"/\*(?:[^*]*\*+)+?/").setName("C style comment")
+
+htmlComment = Regex(r"<!--[\s\S]*?-->")
+restOfLine = Regex(r".*").leaveWhitespace()
+dblSlashComment = Regex(r"\/\/(\\\n|.)*").setName("// comment")
+cppStyleComment = Regex(r"/(?:\*(?:[^*]*\*+)+?/|/[^\n]*(?:\n[^\n]*)*?(?:(?<!\\)|\Z))").setName("C++ style comment")
+
+javaStyleComment = cppStyleComment
+pythonStyleComment = Regex(r"#.*").setName("Python style comment")
+_noncomma = "".join( [ c for c in printables if c != "," ] )
+_commasepitem = Combine(OneOrMore(Word(_noncomma) + 
+                                  Optional( Word(" \t") + 
+                                            ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
+commaSeparatedList = delimitedList( Optional( quotedString | _commasepitem, default="") ).setName("commaSeparatedList")
+
+
+if __name__ == "__main__":
+
+    def test( teststring ):
+        print teststring,"->",
+        try:
+            tokens = simpleSQL.parseString( teststring )
+            tokenlist = tokens.asList()
+            print tokenlist
+            print "tokens = ",        tokens
+            print "tokens.columns =", tokens.columns
+            print "tokens.tables =",  tokens.tables
+            print tokens.asXML("SQL",True)
+        except ParseException, err:
+            print err.line
+            print " "*(err.column-1) + "^"
+            print err
+        print
+
+    selectToken    = CaselessLiteral( "select" )
+    fromToken      = CaselessLiteral( "from" )
+
+    ident          = Word( alphas, alphanums + "_$" )
+    columnName     = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens )
+    columnNameList = Group( delimitedList( columnName ) )#.setName("columns")
+    tableName      = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens )
+    tableNameList  = Group( delimitedList( tableName ) )#.setName("tables")
+    simpleSQL      = ( selectToken + \
+                     ( '*' | columnNameList ).setResultsName( "columns" ) + \
+                     fromToken + \
+                     tableNameList.setResultsName( "tables" ) )
+    
+    test( "SELECT * from XYZZY, ABC" )
+    test( "select * from SYS.XYZZY" )
+    test( "Select A from Sys.dual" )
+    test( "Select AA,BB,CC from Sys.dual" )
+    test( "Select A, B, C from Sys.dual" )
+    test( "Select A, B, C from Sys.dual" )
+    test( "Xelect A, B, C from Sys.dual" )
+    test( "Select A, B, C frox Sys.dual" )
+    test( "Select" )
+    test( "Select ^^^ frox Sys.dual" )
+    test( "Select A, B, C from Sys.dual, Table2   " )
--- a/sbsv2/raptor/python/raptor.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,1234 +1,1234 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor module
-# This module represents the running Raptor program. Raptor is started
-# either by calling the Main() function, which creates an instance of
-# the raptor.Raptor class and calls its methods to perform a build based
-# on command-line parameters, or by explicitly creating a raptor.Raptor
-# instance and calling its methods to set-up and perform a build.
-#
-
-name = "sbs"			# the public name for the raptor build tool
-env  = "SBS_HOME"		# the environment variable that locates us
-xml  = "sbs_init.xml"	# the primary initialisation file
-env2 = "HOME"		 	# the environment variable that locates the user
-xml2 = ".sbs_init.xml"	# the override initialisation file
-
-import generic_path
-import os
-import raptor_cache
-import raptor_cli
-import raptor_data
-import raptor_make
-import raptor_meta
-import raptor_utilities
-import raptor_version
-import raptor_xml
-import filter_list
-import sys
-import types
-import time
-import re
-import traceback
-import pluginbox
-from xml.sax.saxutils import escape
-
-
-if not "HOSTPLATFORM" in os.environ or not "HOSTPLATFORM_DIR" in os.environ:
-	print "Error: HOSTPLATFORM and HOSTPLATFORM_DIR must be set in the environment (this is usually done automatically by the startup script)."
-	sys.exit(1)
-
-hostplatform = os.environ["HOSTPLATFORM"].split(" ")
-hostplatform_dir = os.environ["HOSTPLATFORM_DIR"]
-
-# defaults can use EPOCROOT
-if "EPOCROOT" in os.environ:
-	epocroot = os.environ["EPOCROOT"].replace("\\","/")
-else:
-	if 'linux' in hostplatform:
-		epocroot=os.environ['HOME'] + os.sep + "epocroot"
-		os.environ["EPOCROOT"] = epocroot
-	else:
-		epocroot = "/"
-		os.environ["EPOCROOT"] = os.sep
-
-if "SBS_BUILD_DIR" in os.environ:
-	sbs_build_dir = os.environ["SBS_BUILD_DIR"]
-else:
-	sbs_build_dir = (epocroot + "/epoc32/build").replace("//","/")
-
-
-
-# only use default XML from the epoc32 tree if it exists
-defaultSystemConfig = "lib/config"
-epoc32UserConfigDir = generic_path.Join(epocroot, "epoc32/sbs_config")
-if epoc32UserConfigDir.isDir():
-	defaultSystemConfig = str(epoc32UserConfigDir) + os.pathsep + defaultSystemConfig
-
-# parameters that can be overriden by the sbs_init.xml file
-# or by the command-line.
-defaults = {
-		"allowCommandLineOverrides" : True,
-		"CLI" : "raptor_cli",
-		"buildInformation" : generic_path.Path("bld.inf"),
-		"defaultConfig" : "default",
-		"jobs": 4,
-		"keepGoing": False,
-		"logFileName" : generic_path.Join(sbs_build_dir,"Makefile.%TIME.log"),
-		"makeEngine" : "make",
-		"preferBuildInfoToSystemDefinition" : False,
-		"pruneDuplicateMakefiles": True,
-		"quiet" : False,
-		"systemConfig" :  defaultSystemConfig,
-		"systemDefinition" : generic_path.Path("System_Definition.xml"),
-		"systemDefinitionBase" : generic_path.Path("."),
-		"systemFLM" : generic_path.Path("lib/flm"),
-		"systemPlugins" : generic_path.Path("python/plugins"),
-		"topMakefile" : generic_path.Join(sbs_build_dir,"Makefile"),
-		"tries": 1,
-		"writeSingleMakefile": True,
-		"ignoreOsDetection": False,
-		"toolcheck": "on",
-		"filterList": "filterterminal,filterlogfile"
-		}
-
-
-class ComponentGroup(object):
-	""" 	Some components that should be built togther 
-		e.g. a Layer in the system definition. 
-	""" 
-	def __init__(self, name, componentlist=[]):
-		self.components = componentlist
-		self.name = name
-
-	def __iter__(self):
-		return iter(self.components)
-
-	def __getitem__(self,x):
-		if isinstance(x, slice):
-			return self.components[x.start:x.stop]
-		return self.components[x]
-
-	def __setitem__(self,k, v):
-		self.components[k] = v
-
-	def __len__(self):
-		return len(self.components)
-
-	def extend(self, c):
-		self.components.extend(c)
-	
-	def append(self, c):
-		self.components.append(c)
-
-	def GenerateSpecs(self, genericspecs, configs):
-		"""Return a build spec hierarchy for a ComponentGroup. This involves parsing the component MetaData (bld.infs, mmps). 
-		Takes a raptor object as a parameter (build), together with a list of Configurations.
-
-		Returns a tuple consisting of a list of specification objects and a list of dependency files
-		that relate to these specs.
-		"""
-
-		self.specs = []
-		self.specs.extend(genericspecs)
-		self.configs = configs
-		self.dependencies = set()
-
-		metaReader = None
-		if len (self.components):
-			try:
-				# create a MetaReader that is aware of the list of
-				# configurations that we are trying to build.
-				metaReader = raptor_meta.MetaReader(build, configs)
-
-				# convert the list of bld.inf files into a specification
-				# hierarchy suitable for all the configurations we are using.
-				self.specs.extend(metaReader.ReadBldInfFiles(self.components,build.doExportOnly))
-
-			except raptor_meta.MetaDataError, e:
-				log.Error(e.Text)
-
-		log.Info("Buildable specification group '%s'", name)
-		build.AttachSpecs(self.specs)
-
-		# Get a unique list of the dependency files that were created
-		if metaReader:
-			for c in metaReader.BuildPlatforms:
-				self.dependencies.update(c["METADEPS"])
-
-
-	def CreateMakefile(self, makefilename_base, engine, named = False):
-		if len(self.specs) <= 0:
-			return None
-
-		if named:
-			makefile = generic_path.Path(str(makefilename_base) + "_" + raptor_utilities.sanitise(self.name))
-		else:
-			makefile = generic_path.Path(str(makefilename_base))
-
-		# insert the start time into the Makefile name?
-		makefile.path = makefile.path.replace("%TIME", build.timestring)
-
-		engine.Write(makefile, self.specs, self.configs)
-
-		return makefile
-
-
-	def GenerateMetadataSpecs(self, configs):
-		# insert the start time into the Makefile name?
-
-		self.configs = build.GetConfig("build").GenerateBuildUnits()
-
-		# Pass certain CLI flags through to the makefile-generating sbs calls
-		cli_options = ""
-			
-		if build.debugOutput == True:
-			cli_options += " -d"
-				
-		if build.ignoreOsDetection == True:
-			cli_options += " -i"
-			
-		if build.keepGoing == True:
-			cli_options += " -k"
-			
-		if build.quiet == True:
-			cli_options += " -q"
-
-		
-		nc = len(self.components)
-		number_blocks = 16
-		block_size = (nc / number_blocks) + 1
-		component_blocks = []
-		spec_nodes = []
-		
-		b = 0
-		while b < nc:
-			component_blocks.append(self.components[b:b+block_size])
-			b += block_size
-			
-		if len(component_blocks[-1]) <= 0:
-			component_blocks.pop()
-		
-		loop_number = 0
-		for block in component_blocks:
-			loop_number += 1
-			specNode = raptor_data.Specification("metadata_" + self.name)
-
-			componentList = " ".join([str(c) for c in block])
-			configList = " ".join([c.name for c in configs])
-			
-			makefile_path = str(build.topMakefile) + "_" + str(loop_number)
-			try:
-				os.unlink(makefile_path) # until we have dependencies working properly
-			except Exception,e:
-				# print "couldn't unlink %s: %s" %(componentMakefileName, str(e))
-				pass
-			
-			# add some basic data in a component-wide variant
-			var = raptor_data.Variant()
-			var.AddOperation(raptor_data.Set("COMPONENT_PATHS", componentList))
-			var.AddOperation(raptor_data.Set("MAKEFILE_PATH", makefile_path))
-			var.AddOperation(raptor_data.Set("CONFIGS", configList))
-			var.AddOperation(raptor_data.Set("CLI_OPTIONS", cli_options))
-			# Pass on '-n' (if specified) to the makefile-generating sbs calls
-			if build.noBuild:
-				var.AddOperation(raptor_data.Set("NO_BUILD", "1"))
-			specNode.AddVariant(var)
-	
-	
-	
-			try:
-				interface = build.cache.FindNamedInterface("build.makefiles")
-				specNode.SetInterface(interface)
-			except KeyError:
-				build.Error("Can't find flm interface 'build.makefiles' ")
-				
-			spec_nodes.append(specNode)
-			
-			
-
-		## possibly some error handling here?
-
-		self.specs = spec_nodes
-
-
-class BuildCompleteException(Exception):
-	pass
-
-# raptor module classes
-
-class Raptor(object):
-	"""An instance of a running Raptor program.
-
-	When operated from the command-line there is a single Raptor object
-	created by the Main function. When operated by an IDE several Raptor
-	objects may be created and operated at the same time."""
-
-
-	M_BUILD = 1
-	M_VERSION = 2	
-
-	def __init__(self, home = None):
-
-		self.DefaultSetUp(home)
-
-
-	def DefaultSetUp(self, home = None):
-		"revert to the default set-up state"
-		self.errorCode = 0
-		self.skipAll = False
-		self.summary = True
-		self.out = sys.stdout # Just until filters get started.
-
-		# Create a bootstrap output system.
-		self.out = filter_list.FilterList()
-
-		if home == None:
-			try:
-				home = os.environ[env]
-			except KeyError:
-				home = os.getcwd()
-
-		# make sure the home directory exists
-		self.home = generic_path.Path(home).Absolute()
-
-		if not self.home.isDir():
-			self.Error("%s '%s' is not a directory", env, self.home)
-			return
-
-		# the set-up file location.
-		# use the override "env2/xml2" if it exists
-		# else use the primary "env/xml" if it exists
-		# else keep the hard-coded defaults.
-		self.raptorXML = self.home.Append(xml)
-
-		if env2 in os.environ:
-			sbs_init = generic_path.Join(os.environ[env2], xml2)
-			if sbs_init.isFile():
-				self.raptorXML = sbs_init
-
-		# things that can be overridden by the set-up file
-		for key, value in defaults.items():
-			self.__dict__[key] = value
-
-		# things to initialise
-		self.args = []
-
-		self.componentGroups = []
-		self.orderComponentGroups = False
-		self.commandlineComponents = []
-
-		self.systemModel = None
-		self.systemDefinitionFile = None
-		self.systemDefinitionRequestedLayers = []
-		self.systemDefinitionOrderLayers = False
-
-		self.specGroups = {}
-
-		self.configNames = []
-		self.configsToBuild = set()
-		self.makeOptions = []
-		self.maker = None
-		self.debugOutput = False
-		self.doExportOnly = False
-		self.noBuild = False
-		self.noDependInclude = False
-		self.projects = set()
-
-		self.cache = raptor_cache.Cache(self)
-		self.override = {env: str(self.home)}
-		self.targets = []
-		self.defaultTargets = []
-
-		self.doCheck = False
-		self.doWhat = False
-		self.doParallelParsing = False
-		self.mission = Raptor.M_BUILD
-
-		# what platform and filesystem are we running on?
-		self.filesystem = raptor_utilities.getOSFileSystem()
-
-		self.toolset = None
-
-		self.starttime = time.time()
-		self.timestring = time.strftime("%Y-%m-%d-%H-%M-%S")
-
-		self.fatalErrorState = False
-
-	def AddConfigList(self, configPathList):
-		# this function converts cmd line option into a list
-		# and prepends it to default config.
-		self.configPath = generic_path.NormalisePathList(configPathList.split(os.pathsep)) + self.configPath
-		return True
-
-	def AddConfigName(self, name):
-		self.configNames.append(name)
-		return True
-
-	def RunQuietly(self, TrueOrFalse):
-		self.quiet = TrueOrFalse
-		return True
-
-	def SetCheck(self, TrueOrFalse):
-		self.doCheck = TrueOrFalse
-		return True
-
-	def SetWhat(self, TrueOrFalse):
-		self.doWhat = TrueOrFalse
-		return True
-
-	def SetEnv(self, name, value):
-		self.override[name] = value
-
-	def AddTarget(self, target):
-		if self.doCheck or self.doWhat:
-			self.Warn("ignoring target %s because --what or --check is specified.\n", target)
-		else:
-			self.targets.append(target)
-			
-	def AddSourceTarget(self, filename):
-		# source targets are sanitised and then added as if they were a "normal" makefile target
-		# in addition they have a default, empty, top-level target assigned in order that they can
-		# be presented to any generated makefile without error
-		sourceTarget = generic_path.Path(filename).Absolute()
-		sourceTarget = 'SOURCETARGET_' + raptor_utilities.sanitise(str(sourceTarget))
-		self.AddTarget(sourceTarget)
-		self.defaultTargets.append(sourceTarget)
-		return True
-
-	def SetSysDefFile(self, filename):
-		self.systemDefinitionFile = generic_path.Path(filename)
-		return True
-
-	def SetSysDefBase(self, path):
-		self.systemDefinitionBase = generic_path.Path(path)
-		return True
-
-	def AddSysDefLayer(self, layer):
-		self.systemDefinitionRequestedLayers.append(layer)
-		return True
-
-	def SetSysDefOrderLayers(self, TrueOrFalse):
-		self.systemDefinitionOrderLayers = TrueOrFalse
-		return True
-
-	def AddBuildInfoFile(self, filename):
-		bldinf = generic_path.Path(filename).Absolute()
-		self.commandlineComponents.append(bldinf)
-		return True
-
-	def SetTopMakefile(self, filename):
-		self.topMakefile = generic_path.Path(filename)
-		return True
-
-	def SetDebugOutput(self, TrueOrFalse):
-		self.debugOutput = TrueOrFalse
-		return True
-
-	def SetExportOnly(self, TrueOrFalse):
-		self.doExportOnly = TrueOrFalse
-		return True
-
-	def SetNoBuild(self, TrueOrFalse):
-		self.noBuild = TrueOrFalse
-		return True
-
-	def SetNoDependInclude(self, TrueOrFalse):
-		self.noDependInclude = TrueOrFalse
-		return True
-		
-	def SetKeepGoing(self, TrueOrFalse):
-		self.keepGoing = TrueOrFalse
-		return True
-
-	def SetLogFileName(self, logfile):
-		if logfile == "-":
-			self.logFileName = None  # stdout
-		else:
-			self.logFileName = generic_path.Path(logfile)
-		return True
-
-	def SetMakeEngine(self, makeEngine):
-		self.makeEngine = makeEngine
-		return True
-
-	def AddMakeOption(self, makeOption):
-		self.makeOptions.append(makeOption)
-		return True
-
-	def SetJobs(self, numberOfJobs):
-		try:
-			self.jobs = int(numberOfJobs)
-		except ValueError:
-			self.jobs = 0
-
-		if self.jobs < 1:
-			self.Warn("The number of jobs (%s) must be a positive integer\n", numberOfJobs)
-			self.jobs = 1
-			return False
-		return True
-
-	def SetTries(self, numberOfTries):
-		try:
-			self.tries = int(numberOfTries)
-		except ValueError:
-			self.tries = 0
-
-		if self.tries < 1:
-			self.Warn("The number of tries (%s) must be a positive integer\n", numberOfTries)
-			self.tries = 1
-			return False
-		return True
-
-	def SetToolCheck(self, type):
-		type = type.lower()
-		toolcheck_types= [ "forced", "on", "off" ]
-		if type in toolcheck_types:
-			self.toolcheck=type
-		else:
-			self.Warn("toolcheck option must be one of: %s" % toolcheck_types)
-			return False
-
-		return True
-
-	def SetParallelParsing(self, type):
-		type = type.lower()
-		if type == "on":
-			self.doParallelParsing = True
-		elif type == "off":
-			self.doParallelParsing = False
-		else:
-			self.Warn(" parallel parsing option must be either 'on' or 'off' (was %s)"  % type)
-			return False
-
-		return True
-
-	def AddProject(self, projectName):
-		self.projects.add(projectName.lower())
-		return True
-
-	def FilterList(self, value):
-		self.filterList = value
-		return True
-
-	def IgnoreOsDetection(self, value):
-		self.ignoreOsDetection = value
-		return True
-
-	def PrintVersion(self,dummy):
-		global name
-		print name, "version", raptor_version.Version()
-		self.mission = Raptor.M_VERSION
-		return False
-
-	# worker methods
-
-	def Introduction(self):
-		"""Print a header of useful information about Raptor"""
-
-		self.Info("%s: version %s\n", name, raptor_version.Version())
-
-		self.Info("%s %s", env, str(self.home))
-		self.Info("Set-up %s", str(self.raptorXML))
-		self.Info("Command-line-arguments %s", " ".join(self.args))
-		self.Info("Current working directory %s", os.getcwd())
-		
-		# the inherited environment
-		for e, value in os.environ.items():
-			self.Info("Environment %s=%s", e, value)
-
-		# and some general debug stuff
-		self.Debug("Platform %s", "-".join(hostplatform))
-		self.Debug("Filesystem %s", self.filesystem)
-		self.Debug("Python %d.%d.%d", *sys.version_info[:3])
-		self.Debug("Command-line-parser %s", self.CLI)
-
-		for e,value in self.override.items():
-			self.Debug("Override %s = %s", e, value)
-
-		for t in self.targets:
-			self.Debug("Target %s", t)
-
-
-	def ConfigFile(self):
-		if not self.raptorXML.isFile():
-			return
-
-		self.cache.Load(self.raptorXML)
-
-		# find the 'defaults.raptor' variant and extract the values
-		try:
-			var = self.cache.FindNamedVariant("defaults.init")
-			evaluator = self.GetEvaluator( None, raptor_data.BuildUnit(var.name,[var]) )
-
-			for key, value in defaults.items():
-				newValue = evaluator.Resolve(key)
-
-				if newValue != None:
-					# got a string for the value
-					if type(value) == types.BooleanType:
-						newValue = (newValue.lower() != "false")
-					elif type(value) == types.IntType:
-						newValue = int(newValue)
-					elif isinstance(value, generic_path.Path):
-						newValue = generic_path.Path(newValue)
-
-					self.__dict__[key] = newValue
-
-		except KeyError:
-			# it is OK to not have this but useful to say it wasn't there
-			self.Info("No 'defaults.init' configuration found in " + str(self.raptorXML))
-
-
-	def CommandLine(self, args):
-		# remember the arguments for the log
-		self.args = args
-
-		# assuming self.CLI = "raptor_cli"
-		more_to_do = raptor_cli.GetArgs(self, args)
-
-		# resolve inter-argument dependencies.
-		# --what or --check implies the WHAT target and FilterWhat Filter
-		if self.doWhat or self.doCheck:
-			self.targets = ["WHAT"]
-			self.filterList = "filterwhat"
-
-		else:
-			# 1. CLEAN/CLEANEXPORT/REALLYCLEAN needs the FilterClean filter.
-			# 2. Targets that clean should not be combined with other targets.
-
-			targets = [x.lower() for x in self.targets]
-
-			CL = "clean"
-			CE = "cleanexport"
-			RC = "reallyclean"
-
-			is_clean = 0
-			is_suspicious_clean = 0
-
-			if CL in targets and CE in targets:
-				is_clean = 1
-				if len(targets) > 2:
-					is_suspicious_clean = 1
-			elif RC in targets or CL in targets or CE in targets:
-				is_clean = 1
-				if len(targets) > 1:
-					is_suspicious_clean = 1
-
-			if is_clean:
-				self.filterList += ",filterclean"
-				if is_suspicious_clean:
-					self.Warn('CLEAN, CLEANEXPORT and a REALLYCLEAN should not be combined with other targets as the result is unpredictable.')
-
-		if not more_to_do:
-			self.skipAll = True		# nothing else to do
-
-	def ProcessConfig(self):
-		# this function will perform additional processing of config
-
-		# create list of generic paths
-		self.configPath = generic_path.NormalisePathList(self.systemConfig.split(os.pathsep))
-
-	def LoadCache(self):
-		def mkAbsolute(aGenericPath):
-			""" internal function to make a generic_path.Path
-			absolute if required"""
-			if not aGenericPath.isAbsolute():
-				return self.home.Append(aGenericPath)
-			else:
-				return aGenericPath
-		
-		# make generic paths absolute (if required)
-		self.configPath = map(mkAbsolute, self.configPath)
-		self.cache.Load(self.configPath)
-
-		if not self.systemFLM.isAbsolute():
-			self.systemFLM = self.home.Append(self.systemFLM)
-
-		self.cache.Load(self.systemFLM)
-
-	def GetConfig(self, configname):
-		names = configname.split(".")
-
-		cache = self.cache
-
-		base = names[0]
-		mods = names[1:]
-
-		if base in cache.groups:
-			x = cache.FindNamedGroup(base)
-		elif base in cache.aliases:
-			x = cache.FindNamedAlias(base)
-		elif base in cache.variants:
-			x = cache.FindNamedVariant(base)
-		else:
-			raise Exception("Unknown build configuration '%s'" % configname)
-
-		x.ClearModifiers()
-
-
-		try:
-			for m in mods: x.AddModifier( cache.FindNamedVariant(m) )
-		except KeyError:
-			raise Exception("Unknown build configuration '%s'" % configname)
-		return x
-
-	def GetBuildUnitsToBuild(self, configNames):
-		"""Return a list of the configuration objects that correspond to the 
-		   list of configuration names in the configNames parameter.
-
-		raptor.GetBuildUnitsToBuild(["armv5", "winscw"])
-		>>> [ config1, config2, ... , configN ]
-		""" 
-
-		if len(configNames) == 0:
-			# use default config
-			if len(self.defaultConfig) == 0:
-				self.Warn("No default configuration name")
-			else:
-				configNames.append(self.defaultConfig)
-
-		buildUnitsToBuild = set()
-
-
-		for c in set(configNames):
-			try:		
-				x = self.GetConfig(c)
-				buildUnitsToBuild.update( x.GenerateBuildUnits() )
-			except Exception, e:
-				self.FatalError(str(e))
-
-		for b in buildUnitsToBuild:
-			self.Info("Buildable configuration '%s'", b.name)
-
-		if len(buildUnitsToBuild) == 0:
-			self.Error("No build configurations given")
-
-		return buildUnitsToBuild
-
-	def CheckToolset(self, evaluator, configname):
-		"""Check the toolset for a particular config, allow other objects access 
-		to the toolset for this build (e.g. the raptor_make class)."""
-		if self.toolset is None:
-			if self.toolcheck == 'on':
-				self.toolset = raptor_data.ToolSet(log=self)
-			elif self.toolcheck == 'forced' :
-				self.toolset = raptor_data.ToolSet(log=self, forced=True)
-			else:
-				return True
-
-		return self.toolset.check(evaluator, configname)
-
-
-	def CheckConfigs(self, configs):
-		"""	Tool checking for all the buildable configurations
-			NB. We are allowed to use different tool versions for different
-			configurations."""
-
-		tools_ok = True
-		for b in configs:
-			self.Debug("Tool check for %s", b.name)
-			evaluator = self.GetEvaluator(None, b, gathertools=True)
-			tools_ok = tools_ok and self.CheckToolset(evaluator, b.name)
-
-		return tools_ok
-
-
-
-	def GatherSysModelLayers(self, systemModel, systemDefinitionRequestedLayers):
-		"""Return a list of lists of components to be built.
-
-		components = GatherSysModelLayers(self, configurations)
-		>>> set("abc/group/bld.inf","def/group/bld.inf, ....")
-		"""
-		layersToBuild = []
-
-		if systemModel:
-			# We either process all available layers in the system model, or a subset of
-			# layers specified on the command line.  In both cases, the processing is the same,
-			# and can be subject to ordering if explicitly requested.
-			systemModel.DumpInfo()
-
-			if systemDefinitionRequestedLayers:
-				layersToProcess = systemDefinitionRequestedLayers
-			else:
-				layersToProcess = systemModel.GetLayerNames()
-
-			for layer in layersToProcess:
-				systemModel.DumpLayerInfo(layer)
-
-				if systemModel.IsLayerBuildable(layer):
-					layersToBuild.append(ComponentGroup(layer,
-							systemModel.GetLayerComponents(layer)))
-
-		return layersToBuild
-
-
-	# Add bld.inf or system definition xml to command line componentGroups (depending on preference)
-	def FindSysDefIn(self, aDir = None):
-		# Find a system definition file
-
-		if aDir is None:
-			dir = generic_path.CurrentDir()
-		else:
-			dir = generic_path.Path(aDir)
-
-		sysDef = dir.Append(self.systemDefinition)
-		if not sysDef.isFile():
-			return None
-
-		return sysDef
-
-
-	def FindComponentIn(self, aDir = None):
-		# look for a bld.inf 
-
-		if aDir is None:
-			dir = generic_path.CurrentDir()
-		else:
-			dir = generic_path.Path(aDir)
-
-		bldInf = dir.Append(self.buildInformation)
-		componentgroup = []
-
-		if bldInf.isFile():
-			return bldInf
-
-		return None
-
-	def AttachSpecs(self, groups):
-		# tell the specs which Raptor object they work for (so that they can
-		# access the cache and issue warnings and errors)
-		for spec in groups:
-			spec.SetOwner(self)
-			self.Info("Buildable specification '%s'", spec.name)
-			if self.debugOutput:
-				spec.DebugPrint()
-
-	def GenerateGenericSpecs(self, configsToBuild):
-		# if a Configuration has any config-wide interfaces
-		# then add a Specification node to call each of them.
-		configWide = {}
-		genericSpecs = []
-		for c in configsToBuild:
-			evaluator = self.GetEvaluator(None, c)
-			iface = evaluator.Get("INTERFACE.config")
-			if iface:
-				if iface in configWide:
-					# seen it already, so reuse the node
-					filter = configWide[iface]
-					filter.AddConfigCondition(c.name)
-				else:
-					# create a new node
-					filter = raptor_data.Filter("config_wide")
-					filter.AddConfigCondition(c.name)
-					for i in iface.split():
-						spec = raptor_data.Specification(i)
-						spec.SetInterface(i)
-						filter.AddChildSpecification(spec)
-					# remember it, use it
-					configWide[iface] = filter
-					genericSpecs.append(filter)
-
-		self.AttachSpecs(genericSpecs)
-
-		return genericSpecs
-
-
-	def WriteMetadataDepsMakefile(self, component_group):
-		""" Takes a list of (filename, target) tuples that indicate where """
-		# Create a Makefile that includes all the dependency information for this spec group
-		build_metamakefile_name = \
-				os.path.abspath(sbs_build_dir).replace('\\','/').rstrip('/') + \
-				'/metadata_%s.mk' % component_group.name.lower()
-		bmkmf = open(build_metamakefile_name, "w+")
-		bmkmf.write("# Build Metamakefile - Dependencies for metadata during the 'previous' build\n\n")
-		bmkmf.write("PARSETARGET:=%s\n" % build_metamakefile_name)
-		bmkmf.write("%s:  \n" % build_metamakefile_name)
-		bmkmf.write("\t@echo -e \"\\nRE-RUNNING SBS with previous parameters\"\n")
-		bmkmf.write("\t@echo pretend-sbs %s\n" % " ".join(self.args))
-		try:
-			for m in component_group.dependencies:
-				filename, target = m
-				bmkmf.write("-include %s\n\n" % filename)
-		finally:
-			bmkmf.close()
-
-		return build_metamakefile_name
-
-
-	def GetEvaluator(self, specification, configuration, gathertools=False):
-		""" this will perform some caching later """
-		return raptor_data.Evaluator(self, specification, configuration, gathertools=gathertools)
-
-
-	def areMakefilesUptodate(self):
-		return False
-
-
-	def Make(self, makefile):
-
-		if self.maker.Make(makefile):
-			self.Info("The make-engine exited successfully.")
-			return True
-		else:
-			self.Error("The make-engine exited with errors.")
-			return False
-
-
-	def Report(self):
-		if self.quiet:
-			return
-
-		self.endtime = time.time()
-		self.runtime = int(0.5 + self.endtime - self.starttime)
-		self.raptor_params.runtime = self.runtime
-		self.Info("Run time %s seconds" % self.runtime)
-
-	def AssertBuildOK(self):
-		"""Raise a BuildCompleteException if no further processing is required
-		"""
-		if self.Skip():
-			raise BuildCompleteException("")
-
-		return True
-
-	def Skip(self):
-		"""Indicate not to perform operation if:
-		   fatalErrorState is set
-		   an error code is set but we're not in keepgoing mode
-		"""
-		return self.fatalErrorState or ((self.errorCode != 0) and (not self.keepGoing))
-
-
-	# log file open/close
-
-	def OpenLog(self):
-		"""Open a log file for the various I/O methods to write to."""
-
-		try:
-			# Find all the raptor plugins and put them into a pluginbox.
-			if not self.systemPlugins.isAbsolute():
-				self.systemPlugins = self.home.Append(self.systemPlugins)
-
-			self.pbox = pluginbox.PluginBox(str(self.systemPlugins))
-
-			self.raptor_params = BuildStats(self)
-
-			# Open the requested plugins using the pluginbox
-			self.out.open(self.raptor_params, self.filterList.split(','), self.pbox)
-
-			# log header
-			self.out.write("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n")
-
-			namespace = "http://symbian.com/xml/build/log"
-			schema = "http://symbian.com/xml/build/log/1_0.xsd"
-
-			self.out.write("<buildlog sbs_version=\"%s\" xmlns=\"%s\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"%s %s\">\n"
-						   % (raptor_version.Version(), namespace, namespace, schema))
-			self.logOpen = True
-		except Exception,e:
-			self.out = sys.stdout # make sure that we can actually get errors out.
-			self.logOpen = False
-			self.FatalError("Unable to open the output logs: %s" % str(e))
-
-
-	def CloseLog(self):
-		if self.logOpen:
-			self.out.summary()
-			self.out.write("</buildlog>\n")
-
-			if not self.out.close():
-				self.errorCode = 1
-
-
-	def Cleanup(self):
-		# ensure that the toolset cache is flushed.
-		if self.toolset is not None:
-			self.toolset.write()
-
-	# I/O methods
-
-	@staticmethod
-	def attributeString(dictionary):
-		"turn a dictionary into a string of XML attributes"
-		atts = ""
-		for a,v in dictionary.items():
-			atts += " " + a + "='" + v + "'"
-		return atts
-	
-	def Info(self, format, *extras, **attributes):
-		"""Send an information message to the configured channel
-				(XML control characters will be escaped)
-		"""
-		self.out.write("<info" + self.attributeString(attributes) + ">" +
-		               escape(format % extras) + "</info>\n")
-
-	def Debug(self, format, *extras, **attributes):
-		"Send a debugging message to the configured channel"
-
-		# the debug text is out of our control so wrap it in a CDATA
-		# in case it contains characters special to XML... like <>
-		if self.debugOutput:
-			self.out.write("<debug" + self.attributeString(attributes) + ">" +
-			               "><![CDATA[\n" + (format % extras) + "\n]]></debug>\n")
-
-	def Warn(self, format, *extras, **attributes):
-		"""Send a warning message to the configured channel
-				(XML control characters will be escaped)
-		"""
-		self.out.write("<warning" + self.attributeString(attributes) + ">" + 
-		               escape(format % extras) + "</warning>\n")
-
-	def FatalError(self, format, *extras, **attributes):
-		"""Send an error message to the configured channel. This implies such a serious
-		   error that the entire build must be shut down asap whilst still finishing off
-		   correctly whatever housekeeping is possible e.g. producing error reports.
-		   Remains quiet if the raptor object is already in a fatal state since there
-		   further errors are probably triggered by the first.
-		"""
-		if not self.fatalErrorState:
-			self.out.write("<error" + self.attributeString(attributes) + ">" + 
-			               (format % extras) + "</error>\n")
-			self.errorCode = 1
-			self.fatalErrorState = True
-
-	def Error(self, format, *extras, **attributes):
-		"""Send an error message to the configured channel
-				(XML control characters will be escaped)
-		"""
-		self.out.write("<error" + self.attributeString(attributes) + ">" + 
-		               escape(format % extras) + "</error>\n")
-		self.errorCode = 1
-
-
-	def PrintXML(self, format, *extras):
-		"Print to configured channel (no newline is added) (assumes valid xml)"
-		if format:
-			self.out.write(format % extras)
-
-
-	def MakeComponentGroup(self, cg):
-		if not self.maker:
-			self.maker = raptor_make.MakeEngine(self)
-
-		if self.maker == None:
-			self.Error("No make engine present")
-			return None
-
-		makefile = cg.CreateMakefile(self.topMakefile, self.maker, self.systemDefinitionOrderLayers)
-		if (not self.noBuild and makefile is not None) \
-				or self.doParallelParsing:
-			# run the build for a single group of specs
-			self.Make(makefile)
-		else:
-			self.Info("No build performed for %s" % cg.name)
-
-	def GetComponentGroupsFromCLI(self):
-		"""Returns the list of componentGroups as specified by the
-		   commandline interface to Raptor e.g. parameters
-		   or the current directory"""
-		componentGroups=[]
-		# Look for bld.infs or sysdefs in the current dir if none were specified
-		if self.systemDefinitionFile == None and len(self.commandlineComponents) == 0:
-			if not self.preferBuildInfoToSystemDefinition:
-				cwd = os.getcwd()
-				self.systemDefinitionFile = self.FindSysDefIn(cwd)
-				if self.systemDefinitionFile == None:
-					aComponent = self.FindComponentIn(cwd)
-					if aComponent:
-						componentGroups.append(ComponentGroup('default',[aComponent]))
-			else:
-				aComponent = self.FindComponentIn(cwd)
-				if aComponent is None:
-					self.systemDefinitionFile = self.FindSysDefIn(cwd)
-				else:
-					componentGroups.append(ComponentGroup('default',[aComponent]))
-
-			if len(componentGroups) <= 0 and  self.systemDefinitionFile == None:
-				self.Warn("No default bld.inf or system definition file found in current directory (%s)", cwd)
-
-		# If we now have a System Definition to parse then get the layers of components
-		if self.systemDefinitionFile != None:
-			systemModel = raptor_xml.SystemModel(self, self.systemDefinitionFile, self.systemDefinitionBase)
-			componentGroups = self.GatherSysModelLayers(systemModel, self.systemDefinitionRequestedLayers)
-			
-		# Now get components specified on a commandline - build them after any
-		# layers in the system definition.
-		if len(self.commandlineComponents) > 0:
-			componentGroups.append(ComponentGroup('commandline',self.commandlineComponents))
-
-		# If we aren't building components in order then flatten down
-		# the groups
-		if not self.systemDefinitionOrderLayers:
-			# Flatten the layers into one group of components if
-			# we are not required to build them in order.
-			newcg = ComponentGroup("all")
-			for cg in componentGroups:
-				newcg.extend(cg)
-			componentGroups = [newcg]
-
-		return componentGroups
-
-	def Build(self):
-
-		if self.mission != Raptor.M_BUILD: # help or version requested instead.
-			return 0
-
-		# open the log file
-		self.OpenLog()
-
-
-		try:
-			# show the command and platform info
-			self.AssertBuildOK()
-			self.Introduction()
-			# establish an object cache
-			self.AssertBuildOK()
-			
-			self.LoadCache()
-
-			# find out what configurations to build
-			self.AssertBuildOK()
-			buildUnitsToBuild = set()
-			buildUnitsToBuild = self.GetBuildUnitsToBuild(self.configNames)
-
-			# find out what components to build, and in what way
-			componentGroups = []
-
-			self.AssertBuildOK()
-			if len(buildUnitsToBuild) >= 0:
-				componentGroups = self.GetComponentGroupsFromCLI()
-
-			componentCount = reduce(lambda x,y : x + y, [len(cg) for cg in componentGroups])
-
-			if not componentCount > 0:
-				raise BuildCompleteException("No components to build.")
-
-			# check the configurations (tools versions)
-			self.AssertBuildOK()
-
-			if self.toolcheck != 'off':
-				self.CheckConfigs(buildUnitsToBuild)
-			else:
-				self.Info(" Not Checking Tool Versions")
-
-			self.AssertBuildOK()
-
-
-			# if self.doParallelParsing and not (len(componentGroups) == 1 and len(componentGroups[0]) == 1):
-			if self.doParallelParsing:
-				# Create a Makefile to parse components in parallel and build them
-				for cg in componentGroups:
-					cg.GenerateMetadataSpecs(buildUnitsToBuild)
-					self.MakeComponentGroup(cg)
-				if self.noBuild:
-					self.Info("No build performed")
-			else:
-				# Parse components serially, creating one set of makefiles
-				# create non-component specs
-				self.AssertBuildOK()
-				generic_specs = self.GenerateGenericSpecs(buildUnitsToBuild)
-
-				self.AssertBuildOK()
-				for cg in componentGroups:
-					# create specs for a specific group of components
-					cg.GenerateSpecs(generic_specs, buildUnitsToBuild)
-					self.WriteMetadataDepsMakefile(cg)	
-					
-					# generate the makefiles for one group of specs
-					self.MakeComponentGroup(cg)
-
-		except BuildCompleteException,b:
-			if str(b) != "":
-				self.Info(str(b))
-
-		# final report
-		if not self.fatalErrorState:
-			self.Report()
-
-		self.Cleanup()
-
-		# close the log file
-		self.CloseLog()
-
-		return self.errorCode
-
-	@classmethod
-	def CreateCommandlineBuild(cls, argv):
-		""" Perform a 'typical' build. """
-		# configure the framework
-
-		build = Raptor()
-		build.AssertBuildOK()
-		build.ConfigFile()
-		build.ProcessConfig()
-		build.CommandLine(argv)
-
-		return build 
-
-
-
-# Class for passing constricted parameters to filters
-class BuildStats(object):
-
-	def __init__(self, raptor_instance):
-		self.logFileName = raptor_instance.logFileName
-		self.quiet = raptor_instance.quiet
-		self.doCheck = raptor_instance.doCheck
-		self.doWhat = raptor_instance.doWhat
-		self.platform = hostplatform
-		self.skipAll = raptor_instance.fatalErrorState
-		self.timestring = raptor_instance.timestring
-		self.targets = raptor_instance.targets
-		self.runtime = 0
-		self.name = name
-
-
-# raptor module functions
-
-def Main(argv):
-	"""The main entry point for Raptor.
-
-	argv is a list of command-line parameters,
-	NOT including the name of the calling script.
-
-	The return value is zero for success and non-zero for failure."""
-
-	DisplayBanner()
-
-	# object which represents a build
-	b = Raptor.CreateCommandlineBuild(argv)
-
-	# allow all objects to log to the
-	# build they're being used in
-	global build
-	global log
-	build = b
-	log = b
-
-
-	result = b.Build()
-
-	return result
-
-
-def DisplayBanner():
-	"""Stuff that needs printing out for every command."""
-	pass
-
-
-
-# end of the raptor module
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor module
+# This module represents the running Raptor program. Raptor is started
+# either by calling the Main() function, which creates an instance of
+# the raptor.Raptor class and calls its methods to perform a build based
+# on command-line parameters, or by explicitly creating a raptor.Raptor
+# instance and calling its methods to set-up and perform a build.
+#
+
+name = "sbs"			# the public name for the raptor build tool
+env  = "SBS_HOME"		# the environment variable that locates us
+xml  = "sbs_init.xml"	# the primary initialisation file
+env2 = "HOME"		 	# the environment variable that locates the user
+xml2 = ".sbs_init.xml"	# the override initialisation file
+
+import generic_path
+import os
+import raptor_cache
+import raptor_cli
+import raptor_data
+import raptor_make
+import raptor_meta
+import raptor_utilities
+import raptor_version
+import raptor_xml
+import filter_list
+import sys
+import types
+import time
+import re
+import traceback
+import pluginbox
+from xml.sax.saxutils import escape
+
+
+if not "HOSTPLATFORM" in os.environ or not "HOSTPLATFORM_DIR" in os.environ:
+	print "Error: HOSTPLATFORM and HOSTPLATFORM_DIR must be set in the environment (this is usually done automatically by the startup script)."
+	sys.exit(1)
+
+hostplatform = os.environ["HOSTPLATFORM"].split(" ")
+hostplatform_dir = os.environ["HOSTPLATFORM_DIR"]
+
+# defaults can use EPOCROOT
+if "EPOCROOT" in os.environ:
+	epocroot = os.environ["EPOCROOT"].replace("\\","/")
+else:
+	if 'linux' in hostplatform:
+		epocroot=os.environ['HOME'] + os.sep + "epocroot"
+		os.environ["EPOCROOT"] = epocroot
+	else:
+		epocroot = "/"
+		os.environ["EPOCROOT"] = os.sep
+
+if "SBS_BUILD_DIR" in os.environ:
+	sbs_build_dir = os.environ["SBS_BUILD_DIR"]
+else:
+	sbs_build_dir = (epocroot + "/epoc32/build").replace("//","/")
+
+
+
+# only use default XML from the epoc32 tree if it exists
+defaultSystemConfig = "lib/config"
+epoc32UserConfigDir = generic_path.Join(epocroot, "epoc32/sbs_config")
+if epoc32UserConfigDir.isDir():
+	defaultSystemConfig = str(epoc32UserConfigDir) + os.pathsep + defaultSystemConfig
+
+# parameters that can be overriden by the sbs_init.xml file
+# or by the command-line.
+defaults = {
+		"allowCommandLineOverrides" : True,
+		"CLI" : "raptor_cli",
+		"buildInformation" : generic_path.Path("bld.inf"),
+		"defaultConfig" : "default",
+		"jobs": 4,
+		"keepGoing": False,
+		"logFileName" : generic_path.Join(sbs_build_dir,"Makefile.%TIME.log"),
+		"makeEngine" : "make",
+		"preferBuildInfoToSystemDefinition" : False,
+		"pruneDuplicateMakefiles": True,
+		"quiet" : False,
+		"systemConfig" :  defaultSystemConfig,
+		"systemDefinition" : generic_path.Path("System_Definition.xml"),
+		"systemDefinitionBase" : generic_path.Path("."),
+		"systemFLM" : generic_path.Path("lib/flm"),
+		"systemPlugins" : generic_path.Path("python/plugins"),
+		"topMakefile" : generic_path.Join(sbs_build_dir,"Makefile"),
+		"tries": 1,
+		"writeSingleMakefile": True,
+		"ignoreOsDetection": False,
+		"toolcheck": "on",
+		"filterList": "filterterminal,filterlogfile"
+		}
+
+
+class ComponentGroup(object):
+	""" 	Some components that should be built togther 
+		e.g. a Layer in the system definition. 
+	""" 
+	def __init__(self, name, componentlist=[]):
+		self.components = componentlist
+		self.name = name
+
+	def __iter__(self):
+		return iter(self.components)
+
+	def __getitem__(self,x):
+		if isinstance(x, slice):
+			return self.components[x.start:x.stop]
+		return self.components[x]
+
+	def __setitem__(self,k, v):
+		self.components[k] = v
+
+	def __len__(self):
+		return len(self.components)
+
+	def extend(self, c):
+		self.components.extend(c)
+	
+	def append(self, c):
+		self.components.append(c)
+
+	def GenerateSpecs(self, genericspecs, configs):
+		"""Return a build spec hierarchy for a ComponentGroup. This involves parsing the component MetaData (bld.infs, mmps). 
+		Takes a raptor object as a parameter (build), together with a list of Configurations.
+
+		Returns a tuple consisting of a list of specification objects and a list of dependency files
+		that relate to these specs.
+		"""
+
+		self.specs = []
+		self.specs.extend(genericspecs)
+		self.configs = configs
+		self.dependencies = set()
+
+		metaReader = None
+		if len (self.components):
+			try:
+				# create a MetaReader that is aware of the list of
+				# configurations that we are trying to build.
+				metaReader = raptor_meta.MetaReader(build, configs)
+
+				# convert the list of bld.inf files into a specification
+				# hierarchy suitable for all the configurations we are using.
+				self.specs.extend(metaReader.ReadBldInfFiles(self.components,build.doExportOnly))
+
+			except raptor_meta.MetaDataError, e:
+				log.Error(e.Text)
+
+		log.Info("Buildable specification group '%s'", name)
+		build.AttachSpecs(self.specs)
+
+		# Get a unique list of the dependency files that were created
+		if metaReader:
+			for c in metaReader.BuildPlatforms:
+				self.dependencies.update(c["METADEPS"])
+
+
+	def CreateMakefile(self, makefilename_base, engine, named = False):
+		if len(self.specs) <= 0:
+			return None
+
+		if named:
+			makefile = generic_path.Path(str(makefilename_base) + "_" + raptor_utilities.sanitise(self.name))
+		else:
+			makefile = generic_path.Path(str(makefilename_base))
+
+		# insert the start time into the Makefile name?
+		makefile.path = makefile.path.replace("%TIME", build.timestring)
+
+		engine.Write(makefile, self.specs, self.configs)
+
+		return makefile
+
+
+	def GenerateMetadataSpecs(self, configs):
+		# insert the start time into the Makefile name?
+
+		self.configs = build.GetConfig("build").GenerateBuildUnits()
+
+		# Pass certain CLI flags through to the makefile-generating sbs calls
+		cli_options = ""
+			
+		if build.debugOutput == True:
+			cli_options += " -d"
+				
+		if build.ignoreOsDetection == True:
+			cli_options += " -i"
+			
+		if build.keepGoing == True:
+			cli_options += " -k"
+			
+		if build.quiet == True:
+			cli_options += " -q"
+
+		
+		nc = len(self.components)
+		number_blocks = 16
+		block_size = (nc / number_blocks) + 1
+		component_blocks = []
+		spec_nodes = []
+		
+		b = 0
+		while b < nc:
+			component_blocks.append(self.components[b:b+block_size])
+			b += block_size
+			
+		if len(component_blocks[-1]) <= 0:
+			component_blocks.pop()
+		
+		loop_number = 0
+		for block in component_blocks:
+			loop_number += 1
+			specNode = raptor_data.Specification("metadata_" + self.name)
+
+			componentList = " ".join([str(c) for c in block])
+			configList = " ".join([c.name for c in configs])
+			
+			makefile_path = str(build.topMakefile) + "_" + str(loop_number)
+			try:
+				os.unlink(makefile_path) # until we have dependencies working properly
+			except Exception,e:
+				# print "couldn't unlink %s: %s" %(componentMakefileName, str(e))
+				pass
+			
+			# add some basic data in a component-wide variant
+			var = raptor_data.Variant()
+			var.AddOperation(raptor_data.Set("COMPONENT_PATHS", componentList))
+			var.AddOperation(raptor_data.Set("MAKEFILE_PATH", makefile_path))
+			var.AddOperation(raptor_data.Set("CONFIGS", configList))
+			var.AddOperation(raptor_data.Set("CLI_OPTIONS", cli_options))
+			# Pass on '-n' (if specified) to the makefile-generating sbs calls
+			if build.noBuild:
+				var.AddOperation(raptor_data.Set("NO_BUILD", "1"))
+			specNode.AddVariant(var)
+	
+	
+	
+			try:
+				interface = build.cache.FindNamedInterface("build.makefiles")
+				specNode.SetInterface(interface)
+			except KeyError:
+				build.Error("Can't find flm interface 'build.makefiles' ")
+				
+			spec_nodes.append(specNode)
+			
+			
+
+		## possibly some error handling here?
+
+		self.specs = spec_nodes
+
+
+class BuildCompleteException(Exception):
+	pass
+
+# raptor module classes
+
+class Raptor(object):
+	"""An instance of a running Raptor program.
+
+	When operated from the command-line there is a single Raptor object
+	created by the Main function. When operated by an IDE several Raptor
+	objects may be created and operated at the same time."""
+
+
+	M_BUILD = 1
+	M_VERSION = 2	
+
+	def __init__(self, home = None):
+
+		self.DefaultSetUp(home)
+
+
+	def DefaultSetUp(self, home = None):
+		"revert to the default set-up state"
+		self.errorCode = 0
+		self.skipAll = False
+		self.summary = True
+		self.out = sys.stdout # Just until filters get started.
+
+		# Create a bootstrap output system.
+		self.out = filter_list.FilterList()
+
+		if home == None:
+			try:
+				home = os.environ[env]
+			except KeyError:
+				home = os.getcwd()
+
+		# make sure the home directory exists
+		self.home = generic_path.Path(home).Absolute()
+
+		if not self.home.isDir():
+			self.Error("%s '%s' is not a directory", env, self.home)
+			return
+
+		# the set-up file location.
+		# use the override "env2/xml2" if it exists
+		# else use the primary "env/xml" if it exists
+		# else keep the hard-coded defaults.
+		self.raptorXML = self.home.Append(xml)
+
+		if env2 in os.environ:
+			sbs_init = generic_path.Join(os.environ[env2], xml2)
+			if sbs_init.isFile():
+				self.raptorXML = sbs_init
+
+		# things that can be overridden by the set-up file
+		for key, value in defaults.items():
+			self.__dict__[key] = value
+
+		# things to initialise
+		self.args = []
+
+		self.componentGroups = []
+		self.orderComponentGroups = False
+		self.commandlineComponents = []
+
+		self.systemModel = None
+		self.systemDefinitionFile = None
+		self.systemDefinitionRequestedLayers = []
+		self.systemDefinitionOrderLayers = False
+
+		self.specGroups = {}
+
+		self.configNames = []
+		self.configsToBuild = set()
+		self.makeOptions = []
+		self.maker = None
+		self.debugOutput = False
+		self.doExportOnly = False
+		self.noBuild = False
+		self.noDependInclude = False
+		self.projects = set()
+
+		self.cache = raptor_cache.Cache(self)
+		self.override = {env: str(self.home)}
+		self.targets = []
+		self.defaultTargets = []
+
+		self.doCheck = False
+		self.doWhat = False
+		self.doParallelParsing = False
+		self.mission = Raptor.M_BUILD
+
+		# what platform and filesystem are we running on?
+		self.filesystem = raptor_utilities.getOSFileSystem()
+
+		self.toolset = None
+
+		self.starttime = time.time()
+		self.timestring = time.strftime("%Y-%m-%d-%H-%M-%S")
+
+		self.fatalErrorState = False
+
+	def AddConfigList(self, configPathList):
+		# this function converts cmd line option into a list
+		# and prepends it to default config.
+		self.configPath = generic_path.NormalisePathList(configPathList.split(os.pathsep)) + self.configPath
+		return True
+
+	def AddConfigName(self, name):
+		self.configNames.append(name)
+		return True
+
+	def RunQuietly(self, TrueOrFalse):
+		self.quiet = TrueOrFalse
+		return True
+
+	def SetCheck(self, TrueOrFalse):
+		self.doCheck = TrueOrFalse
+		return True
+
+	def SetWhat(self, TrueOrFalse):
+		self.doWhat = TrueOrFalse
+		return True
+
+	def SetEnv(self, name, value):
+		self.override[name] = value
+
+	def AddTarget(self, target):
+		if self.doCheck or self.doWhat:
+			self.Warn("ignoring target %s because --what or --check is specified.\n", target)
+		else:
+			self.targets.append(target)
+			
+	def AddSourceTarget(self, filename):
+		# source targets are sanitised and then added as if they were a "normal" makefile target
+		# in addition they have a default, empty, top-level target assigned in order that they can
+		# be presented to any generated makefile without error
+		sourceTarget = generic_path.Path(filename).Absolute()
+		sourceTarget = 'SOURCETARGET_' + raptor_utilities.sanitise(str(sourceTarget))
+		self.AddTarget(sourceTarget)
+		self.defaultTargets.append(sourceTarget)
+		return True
+
+	def SetSysDefFile(self, filename):
+		self.systemDefinitionFile = generic_path.Path(filename)
+		return True
+
+	def SetSysDefBase(self, path):
+		self.systemDefinitionBase = generic_path.Path(path)
+		return True
+
+	def AddSysDefLayer(self, layer):
+		self.systemDefinitionRequestedLayers.append(layer)
+		return True
+
+	def SetSysDefOrderLayers(self, TrueOrFalse):
+		self.systemDefinitionOrderLayers = TrueOrFalse
+		return True
+
+	def AddBuildInfoFile(self, filename):
+		bldinf = generic_path.Path(filename).Absolute()
+		self.commandlineComponents.append(bldinf)
+		return True
+
+	def SetTopMakefile(self, filename):
+		self.topMakefile = generic_path.Path(filename)
+		return True
+
+	def SetDebugOutput(self, TrueOrFalse):
+		self.debugOutput = TrueOrFalse
+		return True
+
+	def SetExportOnly(self, TrueOrFalse):
+		self.doExportOnly = TrueOrFalse
+		return True
+
+	def SetNoBuild(self, TrueOrFalse):
+		self.noBuild = TrueOrFalse
+		return True
+
+	def SetNoDependInclude(self, TrueOrFalse):
+		self.noDependInclude = TrueOrFalse
+		return True
+		
+	def SetKeepGoing(self, TrueOrFalse):
+		self.keepGoing = TrueOrFalse
+		return True
+
+	def SetLogFileName(self, logfile):
+		if logfile == "-":
+			self.logFileName = None  # stdout
+		else:
+			self.logFileName = generic_path.Path(logfile)
+		return True
+
+	def SetMakeEngine(self, makeEngine):
+		self.makeEngine = makeEngine
+		return True
+
+	def AddMakeOption(self, makeOption):
+		self.makeOptions.append(makeOption)
+		return True
+
+	def SetJobs(self, numberOfJobs):
+		try:
+			self.jobs = int(numberOfJobs)
+		except ValueError:
+			self.jobs = 0
+
+		if self.jobs < 1:
+			self.Warn("The number of jobs (%s) must be a positive integer\n", numberOfJobs)
+			self.jobs = 1
+			return False
+		return True
+
+	def SetTries(self, numberOfTries):
+		try:
+			self.tries = int(numberOfTries)
+		except ValueError:
+			self.tries = 0
+
+		if self.tries < 1:
+			self.Warn("The number of tries (%s) must be a positive integer\n", numberOfTries)
+			self.tries = 1
+			return False
+		return True
+
+	def SetToolCheck(self, type):
+		type = type.lower()
+		toolcheck_types= [ "forced", "on", "off" ]
+		if type in toolcheck_types:
+			self.toolcheck=type
+		else:
+			self.Warn("toolcheck option must be one of: %s" % toolcheck_types)
+			return False
+
+		return True
+
+	def SetParallelParsing(self, type):
+		type = type.lower()
+		if type == "on":
+			self.doParallelParsing = True
+		elif type == "off":
+			self.doParallelParsing = False
+		else:
+			self.Warn(" parallel parsing option must be either 'on' or 'off' (was %s)"  % type)
+			return False
+
+		return True
+
+	def AddProject(self, projectName):
+		self.projects.add(projectName.lower())
+		return True
+
+	def FilterList(self, value):
+		self.filterList = value
+		return True
+
+	def IgnoreOsDetection(self, value):
+		self.ignoreOsDetection = value
+		return True
+
+	def PrintVersion(self,dummy):
+		global name
+		print name, "version", raptor_version.Version()
+		self.mission = Raptor.M_VERSION
+		return False
+
+	# worker methods
+
+	def Introduction(self):
+		"""Print a header of useful information about Raptor"""
+
+		self.Info("%s: version %s\n", name, raptor_version.Version())
+
+		self.Info("%s %s", env, str(self.home))
+		self.Info("Set-up %s", str(self.raptorXML))
+		self.Info("Command-line-arguments %s", " ".join(self.args))
+		self.Info("Current working directory %s", os.getcwd())
+		
+		# the inherited environment
+		for e, value in os.environ.items():
+			self.Info("Environment %s=%s", e, value)
+
+		# and some general debug stuff
+		self.Debug("Platform %s", "-".join(hostplatform))
+		self.Debug("Filesystem %s", self.filesystem)
+		self.Debug("Python %d.%d.%d", *sys.version_info[:3])
+		self.Debug("Command-line-parser %s", self.CLI)
+
+		for e,value in self.override.items():
+			self.Debug("Override %s = %s", e, value)
+
+		for t in self.targets:
+			self.Debug("Target %s", t)
+
+
+	def ConfigFile(self):
+		if not self.raptorXML.isFile():
+			return
+
+		self.cache.Load(self.raptorXML)
+
+		# find the 'defaults.raptor' variant and extract the values
+		try:
+			var = self.cache.FindNamedVariant("defaults.init")
+			evaluator = self.GetEvaluator( None, raptor_data.BuildUnit(var.name,[var]) )
+
+			for key, value in defaults.items():
+				newValue = evaluator.Resolve(key)
+
+				if newValue != None:
+					# got a string for the value
+					if type(value) == types.BooleanType:
+						newValue = (newValue.lower() != "false")
+					elif type(value) == types.IntType:
+						newValue = int(newValue)
+					elif isinstance(value, generic_path.Path):
+						newValue = generic_path.Path(newValue)
+
+					self.__dict__[key] = newValue
+
+		except KeyError:
+			# it is OK to not have this but useful to say it wasn't there
+			self.Info("No 'defaults.init' configuration found in " + str(self.raptorXML))
+
+
+	def CommandLine(self, args):
+		# remember the arguments for the log
+		self.args = args
+
+		# assuming self.CLI = "raptor_cli"
+		more_to_do = raptor_cli.GetArgs(self, args)
+
+		# resolve inter-argument dependencies.
+		# --what or --check implies the WHAT target and FilterWhat Filter
+		if self.doWhat or self.doCheck:
+			self.targets = ["WHAT"]
+			self.filterList = "filterwhat"
+
+		else:
+			# 1. CLEAN/CLEANEXPORT/REALLYCLEAN needs the FilterClean filter.
+			# 2. Targets that clean should not be combined with other targets.
+
+			targets = [x.lower() for x in self.targets]
+
+			CL = "clean"
+			CE = "cleanexport"
+			RC = "reallyclean"
+
+			is_clean = 0
+			is_suspicious_clean = 0
+
+			if CL in targets and CE in targets:
+				is_clean = 1
+				if len(targets) > 2:
+					is_suspicious_clean = 1
+			elif RC in targets or CL in targets or CE in targets:
+				is_clean = 1
+				if len(targets) > 1:
+					is_suspicious_clean = 1
+
+			if is_clean:
+				self.filterList += ",filterclean"
+				if is_suspicious_clean:
+					self.Warn('CLEAN, CLEANEXPORT and a REALLYCLEAN should not be combined with other targets as the result is unpredictable.')
+
+		if not more_to_do:
+			self.skipAll = True		# nothing else to do
+
+	def ProcessConfig(self):
+		# this function will perform additional processing of config
+
+		# create list of generic paths
+		self.configPath = generic_path.NormalisePathList(self.systemConfig.split(os.pathsep))
+
+	def LoadCache(self):
+		def mkAbsolute(aGenericPath):
+			""" internal function to make a generic_path.Path
+			absolute if required"""
+			if not aGenericPath.isAbsolute():
+				return self.home.Append(aGenericPath)
+			else:
+				return aGenericPath
+		
+		# make generic paths absolute (if required)
+		self.configPath = map(mkAbsolute, self.configPath)
+		self.cache.Load(self.configPath)
+
+		if not self.systemFLM.isAbsolute():
+			self.systemFLM = self.home.Append(self.systemFLM)
+
+		self.cache.Load(self.systemFLM)
+
+	def GetConfig(self, configname):
+		names = configname.split(".")
+
+		cache = self.cache
+
+		base = names[0]
+		mods = names[1:]
+
+		if base in cache.groups:
+			x = cache.FindNamedGroup(base)
+		elif base in cache.aliases:
+			x = cache.FindNamedAlias(base)
+		elif base in cache.variants:
+			x = cache.FindNamedVariant(base)
+		else:
+			raise Exception("Unknown build configuration '%s'" % configname)
+
+		x.ClearModifiers()
+
+
+		try:
+			for m in mods: x.AddModifier( cache.FindNamedVariant(m) )
+		except KeyError:
+			raise Exception("Unknown build configuration '%s'" % configname)
+		return x
+
+	def GetBuildUnitsToBuild(self, configNames):
+		"""Return a list of the configuration objects that correspond to the 
+		   list of configuration names in the configNames parameter.
+
+		raptor.GetBuildUnitsToBuild(["armv5", "winscw"])
+		>>> [ config1, config2, ... , configN ]
+		""" 
+
+		if len(configNames) == 0:
+			# use default config
+			if len(self.defaultConfig) == 0:
+				self.Warn("No default configuration name")
+			else:
+				configNames.append(self.defaultConfig)
+
+		buildUnitsToBuild = set()
+
+
+		for c in set(configNames):
+			try:		
+				x = self.GetConfig(c)
+				buildUnitsToBuild.update( x.GenerateBuildUnits() )
+			except Exception, e:
+				self.FatalError(str(e))
+
+		for b in buildUnitsToBuild:
+			self.Info("Buildable configuration '%s'", b.name)
+
+		if len(buildUnitsToBuild) == 0:
+			self.Error("No build configurations given")
+
+		return buildUnitsToBuild
+
+	def CheckToolset(self, evaluator, configname):
+		"""Check the toolset for a particular config, allow other objects access 
+		to the toolset for this build (e.g. the raptor_make class)."""
+		if self.toolset is None:
+			if self.toolcheck == 'on':
+				self.toolset = raptor_data.ToolSet(log=self)
+			elif self.toolcheck == 'forced' :
+				self.toolset = raptor_data.ToolSet(log=self, forced=True)
+			else:
+				return True
+
+		return self.toolset.check(evaluator, configname)
+
+
+	def CheckConfigs(self, configs):
+		"""	Tool checking for all the buildable configurations
+			NB. We are allowed to use different tool versions for different
+			configurations."""
+
+		tools_ok = True
+		for b in configs:
+			self.Debug("Tool check for %s", b.name)
+			evaluator = self.GetEvaluator(None, b, gathertools=True)
+			tools_ok = tools_ok and self.CheckToolset(evaluator, b.name)
+
+		return tools_ok
+
+
+
+	def GatherSysModelLayers(self, systemModel, systemDefinitionRequestedLayers):
+		"""Return a list of lists of components to be built.
+
+		components = GatherSysModelLayers(self, configurations)
+		>>> set("abc/group/bld.inf","def/group/bld.inf, ....")
+		"""
+		layersToBuild = []
+
+		if systemModel:
+			# We either process all available layers in the system model, or a subset of
+			# layers specified on the command line.  In both cases, the processing is the same,
+			# and can be subject to ordering if explicitly requested.
+			systemModel.DumpInfo()
+
+			if systemDefinitionRequestedLayers:
+				layersToProcess = systemDefinitionRequestedLayers
+			else:
+				layersToProcess = systemModel.GetLayerNames()
+
+			for layer in layersToProcess:
+				systemModel.DumpLayerInfo(layer)
+
+				if systemModel.IsLayerBuildable(layer):
+					layersToBuild.append(ComponentGroup(layer,
+							systemModel.GetLayerComponents(layer)))
+
+		return layersToBuild
+
+
+	# Add bld.inf or system definition xml to command line componentGroups (depending on preference)
+	def FindSysDefIn(self, aDir = None):
+		# Find a system definition file
+
+		if aDir is None:
+			dir = generic_path.CurrentDir()
+		else:
+			dir = generic_path.Path(aDir)
+
+		sysDef = dir.Append(self.systemDefinition)
+		if not sysDef.isFile():
+			return None
+
+		return sysDef
+
+
+	def FindComponentIn(self, aDir = None):
+		# look for a bld.inf 
+
+		if aDir is None:
+			dir = generic_path.CurrentDir()
+		else:
+			dir = generic_path.Path(aDir)
+
+		bldInf = dir.Append(self.buildInformation)
+		componentgroup = []
+
+		if bldInf.isFile():
+			return bldInf
+
+		return None
+
+	def AttachSpecs(self, groups):
+		# tell the specs which Raptor object they work for (so that they can
+		# access the cache and issue warnings and errors)
+		for spec in groups:
+			spec.SetOwner(self)
+			self.Info("Buildable specification '%s'", spec.name)
+			if self.debugOutput:
+				spec.DebugPrint()
+
+	def GenerateGenericSpecs(self, configsToBuild):
+		# if a Configuration has any config-wide interfaces
+		# then add a Specification node to call each of them.
+		configWide = {}
+		genericSpecs = []
+		for c in configsToBuild:
+			evaluator = self.GetEvaluator(None, c)
+			iface = evaluator.Get("INTERFACE.config")
+			if iface:
+				if iface in configWide:
+					# seen it already, so reuse the node
+					filter = configWide[iface]
+					filter.AddConfigCondition(c.name)
+				else:
+					# create a new node
+					filter = raptor_data.Filter("config_wide")
+					filter.AddConfigCondition(c.name)
+					for i in iface.split():
+						spec = raptor_data.Specification(i)
+						spec.SetInterface(i)
+						filter.AddChildSpecification(spec)
+					# remember it, use it
+					configWide[iface] = filter
+					genericSpecs.append(filter)
+
+		self.AttachSpecs(genericSpecs)
+
+		return genericSpecs
+
+
+	def WriteMetadataDepsMakefile(self, component_group):
+		""" Takes a list of (filename, target) tuples that indicate where """
+		# Create a Makefile that includes all the dependency information for this spec group
+		build_metamakefile_name = \
+				os.path.abspath(sbs_build_dir).replace('\\','/').rstrip('/') + \
+				'/metadata_%s.mk' % component_group.name.lower()
+		bmkmf = open(build_metamakefile_name, "w+")
+		bmkmf.write("# Build Metamakefile - Dependencies for metadata during the 'previous' build\n\n")
+		bmkmf.write("PARSETARGET:=%s\n" % build_metamakefile_name)
+		bmkmf.write("%s:  \n" % build_metamakefile_name)
+		bmkmf.write("\t@echo -e \"\\nRE-RUNNING SBS with previous parameters\"\n")
+		bmkmf.write("\t@echo pretend-sbs %s\n" % " ".join(self.args))
+		try:
+			for m in component_group.dependencies:
+				filename, target = m
+				bmkmf.write("-include %s\n\n" % filename)
+		finally:
+			bmkmf.close()
+
+		return build_metamakefile_name
+
+
+	def GetEvaluator(self, specification, configuration, gathertools=False):
+		""" this will perform some caching later """
+		return raptor_data.Evaluator(self, specification, configuration, gathertools=gathertools)
+
+
+	def areMakefilesUptodate(self):
+		return False
+
+
+	def Make(self, makefile):
+
+		if self.maker.Make(makefile):
+			self.Info("The make-engine exited successfully.")
+			return True
+		else:
+			self.Error("The make-engine exited with errors.")
+			return False
+
+
+	def Report(self):
+		if self.quiet:
+			return
+
+		self.endtime = time.time()
+		self.runtime = int(0.5 + self.endtime - self.starttime)
+		self.raptor_params.runtime = self.runtime
+		self.Info("Run time %s seconds" % self.runtime)
+
+	def AssertBuildOK(self):
+		"""Raise a BuildCompleteException if no further processing is required
+		"""
+		if self.Skip():
+			raise BuildCompleteException("")
+
+		return True
+
+	def Skip(self):
+		"""Indicate not to perform operation if:
+		   fatalErrorState is set
+		   an error code is set but we're not in keepgoing mode
+		"""
+		return self.fatalErrorState or ((self.errorCode != 0) and (not self.keepGoing))
+
+
+	# log file open/close
+
+	def OpenLog(self):
+		"""Open a log file for the various I/O methods to write to."""
+
+		try:
+			# Find all the raptor plugins and put them into a pluginbox.
+			if not self.systemPlugins.isAbsolute():
+				self.systemPlugins = self.home.Append(self.systemPlugins)
+
+			self.pbox = pluginbox.PluginBox(str(self.systemPlugins))
+
+			self.raptor_params = BuildStats(self)
+
+			# Open the requested plugins using the pluginbox
+			self.out.open(self.raptor_params, self.filterList.split(','), self.pbox)
+
+			# log header
+			self.out.write("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n")
+
+			namespace = "http://symbian.com/xml/build/log"
+			schema = "http://symbian.com/xml/build/log/1_0.xsd"
+
+			self.out.write("<buildlog sbs_version=\"%s\" xmlns=\"%s\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"%s %s\">\n"
+						   % (raptor_version.Version(), namespace, namespace, schema))
+			self.logOpen = True
+		except Exception,e:
+			self.out = sys.stdout # make sure that we can actually get errors out.
+			self.logOpen = False
+			self.FatalError("Unable to open the output logs: %s" % str(e))
+
+
+	def CloseLog(self):
+		if self.logOpen:
+			self.out.summary()
+			self.out.write("</buildlog>\n")
+
+			if not self.out.close():
+				self.errorCode = 1
+
+
+	def Cleanup(self):
+		# ensure that the toolset cache is flushed.
+		if self.toolset is not None:
+			self.toolset.write()
+
+	# I/O methods
+
+	@staticmethod
+	def attributeString(dictionary):
+		"turn a dictionary into a string of XML attributes"
+		atts = ""
+		for a,v in dictionary.items():
+			atts += " " + a + "='" + v + "'"
+		return atts
+	
+	def Info(self, format, *extras, **attributes):
+		"""Send an information message to the configured channel
+				(XML control characters will be escaped)
+		"""
+		self.out.write("<info" + self.attributeString(attributes) + ">" +
+		               escape(format % extras) + "</info>\n")
+
+	def Debug(self, format, *extras, **attributes):
+		"Send a debugging message to the configured channel"
+
+		# the debug text is out of our control so wrap it in a CDATA
+		# in case it contains characters special to XML... like <>
+		if self.debugOutput:
+			self.out.write("<debug" + self.attributeString(attributes) + ">" +
+			               "><![CDATA[\n" + (format % extras) + "\n]]></debug>\n")
+
+	def Warn(self, format, *extras, **attributes):
+		"""Send a warning message to the configured channel
+				(XML control characters will be escaped)
+		"""
+		self.out.write("<warning" + self.attributeString(attributes) + ">" + 
+		               escape(format % extras) + "</warning>\n")
+
+	def FatalError(self, format, *extras, **attributes):
+		"""Send an error message to the configured channel. This implies such a serious
+		   error that the entire build must be shut down asap whilst still finishing off
+		   correctly whatever housekeeping is possible e.g. producing error reports.
+		   Remains quiet if the raptor object is already in a fatal state since there
+		   further errors are probably triggered by the first.
+		"""
+		if not self.fatalErrorState:
+			self.out.write("<error" + self.attributeString(attributes) + ">" + 
+			               (format % extras) + "</error>\n")
+			self.errorCode = 1
+			self.fatalErrorState = True
+
+	def Error(self, format, *extras, **attributes):
+		"""Send an error message to the configured channel
+				(XML control characters will be escaped)
+		"""
+		self.out.write("<error" + self.attributeString(attributes) + ">" + 
+		               escape(format % extras) + "</error>\n")
+		self.errorCode = 1
+
+
+	def PrintXML(self, format, *extras):
+		"Print to configured channel (no newline is added) (assumes valid xml)"
+		if format:
+			self.out.write(format % extras)
+
+
+	def MakeComponentGroup(self, cg):
+		if not self.maker:
+			self.maker = raptor_make.MakeEngine(self)
+
+		if self.maker == None:
+			self.Error("No make engine present")
+			return None
+
+		makefile = cg.CreateMakefile(self.topMakefile, self.maker, self.systemDefinitionOrderLayers)
+		if (not self.noBuild and makefile is not None) \
+				or self.doParallelParsing:
+			# run the build for a single group of specs
+			self.Make(makefile)
+		else:
+			self.Info("No build performed for %s" % cg.name)
+
+	def GetComponentGroupsFromCLI(self):
+		"""Returns the list of componentGroups as specified by the
+		   commandline interface to Raptor e.g. parameters
+		   or the current directory"""
+		componentGroups=[]
+		# Look for bld.infs or sysdefs in the current dir if none were specified
+		if self.systemDefinitionFile == None and len(self.commandlineComponents) == 0:
+			if not self.preferBuildInfoToSystemDefinition:
+				cwd = os.getcwd()
+				self.systemDefinitionFile = self.FindSysDefIn(cwd)
+				if self.systemDefinitionFile == None:
+					aComponent = self.FindComponentIn(cwd)
+					if aComponent:
+						componentGroups.append(ComponentGroup('default',[aComponent]))
+			else:
+				aComponent = self.FindComponentIn(cwd)
+				if aComponent is None:
+					self.systemDefinitionFile = self.FindSysDefIn(cwd)
+				else:
+					componentGroups.append(ComponentGroup('default',[aComponent]))
+
+			if len(componentGroups) <= 0 and  self.systemDefinitionFile == None:
+				self.Warn("No default bld.inf or system definition file found in current directory (%s)", cwd)
+
+		# If we now have a System Definition to parse then get the layers of components
+		if self.systemDefinitionFile != None:
+			systemModel = raptor_xml.SystemModel(self, self.systemDefinitionFile, self.systemDefinitionBase)
+			componentGroups = self.GatherSysModelLayers(systemModel, self.systemDefinitionRequestedLayers)
+			
+		# Now get components specified on a commandline - build them after any
+		# layers in the system definition.
+		if len(self.commandlineComponents) > 0:
+			componentGroups.append(ComponentGroup('commandline',self.commandlineComponents))
+
+		# If we aren't building components in order then flatten down
+		# the groups
+		if not self.systemDefinitionOrderLayers:
+			# Flatten the layers into one group of components if
+			# we are not required to build them in order.
+			newcg = ComponentGroup("all")
+			for cg in componentGroups:
+				newcg.extend(cg)
+			componentGroups = [newcg]
+
+		return componentGroups
+
+	def Build(self):
+
+		if self.mission != Raptor.M_BUILD: # help or version requested instead.
+			return 0
+
+		# open the log file
+		self.OpenLog()
+
+
+		try:
+			# show the command and platform info
+			self.AssertBuildOK()
+			self.Introduction()
+			# establish an object cache
+			self.AssertBuildOK()
+			
+			self.LoadCache()
+
+			# find out what configurations to build
+			self.AssertBuildOK()
+			buildUnitsToBuild = set()
+			buildUnitsToBuild = self.GetBuildUnitsToBuild(self.configNames)
+
+			# find out what components to build, and in what way
+			componentGroups = []
+
+			self.AssertBuildOK()
+			if len(buildUnitsToBuild) >= 0:
+				componentGroups = self.GetComponentGroupsFromCLI()
+
+			componentCount = reduce(lambda x,y : x + y, [len(cg) for cg in componentGroups])
+
+			if not componentCount > 0:
+				raise BuildCompleteException("No components to build.")
+
+			# check the configurations (tools versions)
+			self.AssertBuildOK()
+
+			if self.toolcheck != 'off':
+				self.CheckConfigs(buildUnitsToBuild)
+			else:
+				self.Info(" Not Checking Tool Versions")
+
+			self.AssertBuildOK()
+
+
+			# if self.doParallelParsing and not (len(componentGroups) == 1 and len(componentGroups[0]) == 1):
+			if self.doParallelParsing:
+				# Create a Makefile to parse components in parallel and build them
+				for cg in componentGroups:
+					cg.GenerateMetadataSpecs(buildUnitsToBuild)
+					self.MakeComponentGroup(cg)
+				if self.noBuild:
+					self.Info("No build performed")
+			else:
+				# Parse components serially, creating one set of makefiles
+				# create non-component specs
+				self.AssertBuildOK()
+				generic_specs = self.GenerateGenericSpecs(buildUnitsToBuild)
+
+				self.AssertBuildOK()
+				for cg in componentGroups:
+					# create specs for a specific group of components
+					cg.GenerateSpecs(generic_specs, buildUnitsToBuild)
+					self.WriteMetadataDepsMakefile(cg)	
+					
+					# generate the makefiles for one group of specs
+					self.MakeComponentGroup(cg)
+
+		except BuildCompleteException,b:
+			if str(b) != "":
+				self.Info(str(b))
+
+		# final report
+		if not self.fatalErrorState:
+			self.Report()
+
+		self.Cleanup()
+
+		# close the log file
+		self.CloseLog()
+
+		return self.errorCode
+
+	@classmethod
+	def CreateCommandlineBuild(cls, argv):
+		""" Perform a 'typical' build. """
+		# configure the framework
+
+		build = Raptor()
+		build.AssertBuildOK()
+		build.ConfigFile()
+		build.ProcessConfig()
+		build.CommandLine(argv)
+
+		return build 
+
+
+
+# Class for passing constricted parameters to filters
+class BuildStats(object):
+
+	def __init__(self, raptor_instance):
+		self.logFileName = raptor_instance.logFileName
+		self.quiet = raptor_instance.quiet
+		self.doCheck = raptor_instance.doCheck
+		self.doWhat = raptor_instance.doWhat
+		self.platform = hostplatform
+		self.skipAll = raptor_instance.fatalErrorState
+		self.timestring = raptor_instance.timestring
+		self.targets = raptor_instance.targets
+		self.runtime = 0
+		self.name = name
+
+
+# raptor module functions
+
+def Main(argv):
+	"""The main entry point for Raptor.
+
+	argv is a list of command-line parameters,
+	NOT including the name of the calling script.
+
+	The return value is zero for success and non-zero for failure."""
+
+	DisplayBanner()
+
+	# object which represents a build
+	b = Raptor.CreateCommandlineBuild(argv)
+
+	# allow all objects to log to the
+	# build they're being used in
+	global build
+	global log
+	build = b
+	log = b
+
+
+	result = b.Build()
+
+	return result
+
+
+def DisplayBanner():
+	"""Stuff that needs printing out for every command."""
+	pass
+
+
+
+# end of the raptor module
--- a/sbsv2/raptor/python/raptor_cache.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_cache.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,223 +1,223 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_cache module
-# This module represents a cache of objects for a Raptor program.
-#
-
-import raptor_data
-import raptor_xml
-import generic_path
-import os
-
-# raptor_cache module attributes
-
-
-# raptor_cache module classes
-
-class Cache:
-
-	def __init__(self, Raptor):
-		self.raptor = Raptor
-		self.aliases = {}
-		self.groups = {}
-		self.interfaces = {}
-		self.variants = {}
-
-	def Load(self, gPathOrGPathList, cacheID = ""):
-		"""scan directory for xml files containing Raptor objects.
-		Input is either a generic path object or a list of
-		generic path objects.
-
-		If a cacheID is supplied then the loaded objects are
-		placed into containers which are marked with that ID.
-		This is useful for Interfaces which may be loaded from
-		several locations (different epoc32 trees for example)
-		but need to be kept separate.
-		"""
-
-		pathlist = []
-		filenames = []
-
-		# Create pathlist - this will be of length one if gPathOrGPathList is a
-		# generic path object; otherwise it's a list so just make all supplied paths generic
-		if isinstance(gPathOrGPathList, list):
-			pathlist = map(lambda x: x.GetLocalString(), gPathOrGPathList)
-		elif isinstance(gPathOrGPathList, generic_path.Path):
-			pathlist = [gPathOrGPathList.GetLocalString()]
-		else:
-			self.raptor.Warn("Empty list or blank path supplied.")
-
-		# Only when debugging, print the list. The for loop will be
-		# skipped if not in debug mode
-		if self.raptor.debugOutput:
-			for path in pathlist:
-				self.raptor.Debug("Loading XML cache from %s", path)
-
-		# Internal function to get the list of XML
-		# files recursively
-		def getXmlFiles(aDir, aFileList):
-			dirList = []
-			for fname in os.listdir(aDir):
-				path = os.path.join(aDir, fname)
-				if os.path.isdir(path):
-					dirList.append(path)
-				else: # It's a file
-					if path.endswith(".xml"): # Only files ending in .xml get added
-						aFileList.append(path)
-			# Now iterate over directory list; this way, the files in the top level of
-			# aDir will be added before all files in any subdirectory of aDir
-			for dir in dirList:
-				getXmlFiles(dir, aFileList)
-
-		# This will add all files in all top level directories and all XML files
-		for path in pathlist:
-			# gPathOrGPathList passed to Load() can be a file or a
-			# directory, or a list of files or directories or both
-			if os.path.isfile(path):
-				if path.endswith(".xml"): # Only files whose names end in .xml get added
-					filenames.append(path)
-			elif os.path.isdir(path):
-				getXmlFiles(path, filenames)
-			else: # it isn't a file or directory
-				self.raptor.Warn("No file or directory found for '%s'", path)
-
-		if not filenames:
-			# No XML files found in any of the paths
-			return
-
-		# Parse XML files, and add the objects to our
-		# configuration/interface/variant dictionaries
-		for fullpath in filenames:
-			try:
-				objects = raptor_xml.Read(self.raptor, fullpath)
-
-			except raptor_xml.XMLError:
-				self.raptor.Warn("Failed to read XML file %s", fullpath)
-				continue
-
-			self.raptor.Debug("%d objects found in XML file %s", len(objects), fullpath)
-
-			for obj in objects:
-				# top-level objects need to know which XML file they came from.
-				obj.SetSourceFile(fullpath)
-				try:
-					self.AddObject(obj, cacheID)
-				except UnexpectedObjectError:
-					self.raptor.Warn("Unexpected object %s", str(obj))
-
-	def AddObject(self, obj, cacheID):
-		"""add a Group, Alias, Interface or Variant.
-
-		The cacheID is only used to separate Interfaces.
-		"""
-
-		if isinstance(obj, raptor_data.Group):
-			self.AddGroup(obj)
-		elif isinstance(obj, raptor_data.Alias):
-			self.AddAlias(obj)
-		elif isinstance(obj, raptor_data.Interface):
-			self.AddInterface(obj, cacheID)
-		elif isinstance(obj, raptor_data.Variant):
-			self.AddVariant(obj)
-		else:
-			raise UnexpectedObjectError
-
-
-	def FindNamedGroup(self, name):
-		return self.groups[name]
-
-	def AddGroup(self, obj):
-		if obj.name in self.groups:
-			self.WarnDuplicate("group", self.groups[obj.name], obj)
-			return
-
-		obj.SetOwner(self.raptor)
-		self.groups[obj.name] = obj
-
-	def FindNamedAlias(self, name):
-		return self.aliases[name]
-
-	def AddAlias(self, obj):
-		if obj.name in self.aliases:
-			self.WarnDuplicate("alias", self.aliases[obj.name], obj)
-			return
-
-		obj.SetOwner(self.raptor)
-		self.aliases[obj.name] = obj
-
-
-	def FindNamedInterface(self, name, cacheID = ""):
-		try:
-			return self.interfaces[cacheID][name]
-		except KeyError, e:
-			if cacheID == "":
-				raise e
-			else:
-				return self.interfaces[""][name]
-
-
-	def AddInterface(self, obj, cacheID):
-		if not cacheID in self.interfaces:
-			self.interfaces[cacheID] = {}
-
-		if obj.name in self.interfaces[cacheID]:
-			self.WarnDuplicate("interface", self.interfaces[cacheID][obj.name], obj)
-			return
-
-		obj.SetOwner(self.raptor)
-		obj.cacheID = cacheID
-		self.interfaces[cacheID][obj.name] = obj
-
-
-	def FindNamedVariant(self, name):
-		return self.variants[name]
-
-
-	def AddVariant(self, obj):
-		# anonymous variants can never be referenced, so ignore them
-		if obj.name:
-			if self.variants.has_key(obj.name):
-				self.WarnDuplicate("variant", self.variants[obj.name], obj)
-				return
-
-			obj.SetOwner(self.raptor)
-			self.variants[obj.name] = obj
-
-
-	def WarnDuplicate(self, type, objOld, objNew):
-		"""tell us where duplicate objects came from."""
-		oldSource = objOld.source
-		if oldSource == None:
-			oldSource = "unknown"
-
-		newSource = objNew.source
-		if newSource == None:
-			newSource = "unknown"
-
-		# don't warn if we are reloading the object from the same
-		# file as before: since that is quite ligitimate.
-		if oldSource == newSource and oldSource != "unknown":
-			return
-
-		# actually this is just for information not a warning
-		self.raptor.Info("Duplicate %s '%s' (the one from '%s' will override the one in '%s')",
-						 type, objOld.name, oldSource, newSource)
-
-
-class UnexpectedObjectError(Exception):
-	pass
-
-
-# end of the raptor_cache module
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_cache module
+# This module represents a cache of objects for a Raptor program.
+#
+
+import raptor_data
+import raptor_xml
+import generic_path
+import os
+
+# raptor_cache module attributes
+
+
+# raptor_cache module classes
+
+class Cache:
+
+	def __init__(self, Raptor):
+		self.raptor = Raptor
+		self.aliases = {}
+		self.groups = {}
+		self.interfaces = {}
+		self.variants = {}
+
+	def Load(self, gPathOrGPathList, cacheID = ""):
+		"""scan directory for xml files containing Raptor objects.
+		Input is either a generic path object or a list of
+		generic path objects.
+
+		If a cacheID is supplied then the loaded objects are
+		placed into containers which are marked with that ID.
+		This is useful for Interfaces which may be loaded from
+		several locations (different epoc32 trees for example)
+		but need to be kept separate.
+		"""
+
+		pathlist = []
+		filenames = []
+
+		# Create pathlist - this will be of length one if gPathOrGPathList is a
+		# generic path object; otherwise it's a list so just make all supplied paths generic
+		if isinstance(gPathOrGPathList, list):
+			pathlist = map(lambda x: x.GetLocalString(), gPathOrGPathList)
+		elif isinstance(gPathOrGPathList, generic_path.Path):
+			pathlist = [gPathOrGPathList.GetLocalString()]
+		else:
+			self.raptor.Warn("Empty list or blank path supplied.")
+
+		# Only when debugging, print the list. The for loop will be
+		# skipped if not in debug mode
+		if self.raptor.debugOutput:
+			for path in pathlist:
+				self.raptor.Debug("Loading XML cache from %s", path)
+
+		# Internal function to get the list of XML
+		# files recursively
+		def getXmlFiles(aDir, aFileList):
+			dirList = []
+			for fname in os.listdir(aDir):
+				path = os.path.join(aDir, fname)
+				if os.path.isdir(path):
+					dirList.append(path)
+				else: # It's a file
+					if path.endswith(".xml"): # Only files ending in .xml get added
+						aFileList.append(path)
+			# Now iterate over directory list; this way, the files in the top level of
+			# aDir will be added before all files in any subdirectory of aDir
+			for dir in dirList:
+				getXmlFiles(dir, aFileList)
+
+		# This will add all files in all top level directories and all XML files
+		for path in pathlist:
+			# gPathOrGPathList passed to Load() can be a file or a
+			# directory, or a list of files or directories or both
+			if os.path.isfile(path):
+				if path.endswith(".xml"): # Only files whose names end in .xml get added
+					filenames.append(path)
+			elif os.path.isdir(path):
+				getXmlFiles(path, filenames)
+			else: # it isn't a file or directory
+				self.raptor.Warn("No file or directory found for '%s'", path)
+
+		if not filenames:
+			# No XML files found in any of the paths
+			return
+
+		# Parse XML files, and add the objects to our
+		# configuration/interface/variant dictionaries
+		for fullpath in filenames:
+			try:
+				objects = raptor_xml.Read(self.raptor, fullpath)
+
+			except raptor_xml.XMLError:
+				self.raptor.Warn("Failed to read XML file %s", fullpath)
+				continue
+
+			self.raptor.Debug("%d objects found in XML file %s", len(objects), fullpath)
+
+			for obj in objects:
+				# top-level objects need to know which XML file they came from.
+				obj.SetSourceFile(fullpath)
+				try:
+					self.AddObject(obj, cacheID)
+				except UnexpectedObjectError:
+					self.raptor.Warn("Unexpected object %s", str(obj))
+
+	def AddObject(self, obj, cacheID):
+		"""add a Group, Alias, Interface or Variant.
+
+		The cacheID is only used to separate Interfaces.
+		"""
+
+		if isinstance(obj, raptor_data.Group):
+			self.AddGroup(obj)
+		elif isinstance(obj, raptor_data.Alias):
+			self.AddAlias(obj)
+		elif isinstance(obj, raptor_data.Interface):
+			self.AddInterface(obj, cacheID)
+		elif isinstance(obj, raptor_data.Variant):
+			self.AddVariant(obj)
+		else:
+			raise UnexpectedObjectError
+
+
+	def FindNamedGroup(self, name):
+		return self.groups[name]
+
+	def AddGroup(self, obj):
+		if obj.name in self.groups:
+			self.WarnDuplicate("group", self.groups[obj.name], obj)
+			return
+
+		obj.SetOwner(self.raptor)
+		self.groups[obj.name] = obj
+
+	def FindNamedAlias(self, name):
+		return self.aliases[name]
+
+	def AddAlias(self, obj):
+		if obj.name in self.aliases:
+			self.WarnDuplicate("alias", self.aliases[obj.name], obj)
+			return
+
+		obj.SetOwner(self.raptor)
+		self.aliases[obj.name] = obj
+
+
+	def FindNamedInterface(self, name, cacheID = ""):
+		try:
+			return self.interfaces[cacheID][name]
+		except KeyError, e:
+			if cacheID == "":
+				raise e
+			else:
+				return self.interfaces[""][name]
+
+
+	def AddInterface(self, obj, cacheID):
+		if not cacheID in self.interfaces:
+			self.interfaces[cacheID] = {}
+
+		if obj.name in self.interfaces[cacheID]:
+			self.WarnDuplicate("interface", self.interfaces[cacheID][obj.name], obj)
+			return
+
+		obj.SetOwner(self.raptor)
+		obj.cacheID = cacheID
+		self.interfaces[cacheID][obj.name] = obj
+
+
+	def FindNamedVariant(self, name):
+		return self.variants[name]
+
+
+	def AddVariant(self, obj):
+		# anonymous variants can never be referenced, so ignore them
+		if obj.name:
+			if self.variants.has_key(obj.name):
+				self.WarnDuplicate("variant", self.variants[obj.name], obj)
+				return
+
+			obj.SetOwner(self.raptor)
+			self.variants[obj.name] = obj
+
+
+	def WarnDuplicate(self, type, objOld, objNew):
+		"""tell us where duplicate objects came from."""
+		oldSource = objOld.source
+		if oldSource == None:
+			oldSource = "unknown"
+
+		newSource = objNew.source
+		if newSource == None:
+			newSource = "unknown"
+
+		# don't warn if we are reloading the object from the same
+		# file as before: since that is quite ligitimate.
+		if oldSource == newSource and oldSource != "unknown":
+			return
+
+		# actually this is just for information not a warning
+		self.raptor.Info("Duplicate %s '%s' (the one from '%s' will override the one in '%s')",
+						 type, objOld.name, oldSource, newSource)
+
+
+class UnexpectedObjectError(Exception):
+	pass
+
+
+# end of the raptor_cache module
--- a/sbsv2/raptor/python/raptor_cli.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_cli.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,320 +1,320 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_cli module
-# This module represents a Command Line Interpreter (CLI) for Raptor.
-# The interface with Raptor is the GetArgs() function, which is called
-# by a raptor.Raptor object.
-#
-
-import re
-import types
-import raptor
-import os
-import sys
-import tempfile
-from raptor_utilities import getOSPlatform
-
-from optparse import OptionParser # for parsing command line parameters
-
-fullCommandOption = "--command"
-miniCommandOption = "--co"  # update this if another "co" option is added
-
-# raptor_cli module attributes
-
-parser = OptionParser(prog = raptor.name,
-					  usage = """%prog [--help] [options] [variable=value] [target] ...
-
-Targets:
-
-BITMAP         Create bitmap files
-CLEAN          Remove built files and intermediates, but not exported files
-CLEANEXPORT    Remove exported files
-EXPORT         Copy exported files to destinations
-FINAL          Allow extension makefiles to execute final commands
-FREEZE         Freeze exported functions in a .DEF file
-LIBRARY        Create import libraries from frozen .DEF files
-LISTING        Create assembler listing files for source files
-REALLYCLEAN    Same as CLEAN but also remove exported files
-RESOURCE       Create resource files and AIFs
-ROMFILE        Create an IBY file to be included in a ROM
-TARGET         Create main executables
-WHAT           List all releaseable targets
-
-Examples:
-
-sbs -b my/group/bld.inf -c armv5        # build my component for target ARMV5
-sbs -b my/group/bld.inf -c armv5.test   # build my tests for target ARMV5
-
-sbs -c winscw CLEAN                     # clean emulator files
-sbs REALLYCLEAN                         # delete everything""")
-
-parser.add_option("-a","--sysdefbase",action="store",dest="sys_def_base",
-				help="Root directory for relative paths in the System Definition XML file.")
-
-parser.add_option("-b","--bldinf",action="append",dest="bld_inf_file",
-				help="Build information filename. Multiple -b options can be given.")
-
-parser.add_option("-c","--config",action="append",dest="config_name",
-				help="Configuration name to build. Multiple -c options can be given. The standard configs are all, armv5, armv7, default, tools, tools2 and winscw.")
-
-parser.add_option("--configpath", action="append",dest="config_list",
-				help="Append a list of paths to the default list of XML configuration folders. Use ';' as the separator on Windows, and ':' on Linux. Multiple --configpath options can be given.")
-
-parser.add_option("--check",action="store_true",dest="check",
-				help="Test for the existence of files created by the build, printing the ones which are missing. Do not build anything.")
-
-parser.add_option("--command",action="append",dest="command_file",
-				help="Provide a set of command-line options in a file.")
-
-parser.add_option("-d","--debug",action="store_true",dest="debugoutput",
-				help="Display information useful for debugging.")
-
-parser.add_option("-e","--engine",action="store",dest="make_engine",
-				help="Name of the make engine which runs the build.")
-
-parser.add_option("--export-only",action="store_true",dest="doExportOnly",
-				help="Generate exports only and do not create any make files.")
-
-parser.add_option("-f","--logfile",action="store",dest="logfile",
-				help="Name of the log file, or '-' for stdout.")
-
-parser.add_option("--filters",action="store",dest="filter_list",
-				help="Comma-separated list of names of the filters to use (case sensitive).")
-
-parser.add_option("-i","--ignore-os-detection",action="store_true",dest="ignore_os_detection",
-				help="Disables automatic application of OS variant based upon the OS version detected from each epoc32 tree.")
-
-parser.add_option("-j","--jobs",action="store",dest="number_of_jobs",
-                help="The maximum number of jobs that make should try and run in parallel (on a single machine).")
-
-parser.add_option("-k","--keepgoing",action="store_true",dest="keepgoing",
-				help="Continue building, even if some build commands fail.")
-
-parser.add_option("-l","--layer",action="append",dest="sys_def_layer",
-                help="Build a specific layer in the System Definition XML File. Multiple -l options can be given.")
-
-parser.add_option("-m","--makefile",action="store",dest="makefile",
-				help="Top-level makefile to be created.")
-
-parser.add_option("--mo",action="append",dest="make_option",
-				help="Option that must be passed through to the make engine. Multiple --mo options can be given.")
-
-parser.add_option("-n","--nobuild",action="store_true",dest="nobuild",
-				help="Just create makefiles, do not build anything.")
-
-parser.add_option("--no-depend-include",action="store_true",dest="noDependInclude",
-				help="Do not include generated dependency files. This is only useful for extremely large non-incremental builds.")
-				
-parser.add_option("-o","--orderlayers",action="store_true",dest="sys_def_order_layers",
-				help="Build layers in the System Definition XML file in the order listed or, if given, in the order of -l options.")
-
-parser.add_option("-p","--project",action="append",dest="project_name",
-                help="Build a specific project (mmp or extension) in the given bld.inf file. Multiple -p options can be given.")
-
-parser.add_option("-q","--quiet",action="store_true",dest="quiet",
-				help="Run quietly, not generating output messages.")
-
-parser.add_option("-s","--sysdef",action="store",dest="sys_def_file",
-				help="System Definition XML filename.")
-
-parser.add_option("--source-target",action="append",dest="source_target",
-				help="Build the listed source or resource file in isolation - do not perform any dependent processing. Multiple --source-target options can be given.")
-
-parser.add_option("-t","--tries",action="store",dest="tries",
-				help="How many times to run a command before recording an error. The default is 1. This is useful for builds where transient failures can occur.")
-
-parser.add_option("--toolcheck",action="store",dest="toolcheck",
-			help= \
-				"""Possible values are:
-				  "on"     -  Check the versions of tools that will be used in the build. Use cached results from previous builds to save time. This is the default.
-
-  				  "off"    -  Do not check tool versions whatsoever.
-
-				  "forced" -  Check all tool versions. Don't use cached results.
-			""")
-parser.add_option("--pp",action="store",dest="parallel_parsing",
-				help="""Controls how metadata (e.g. bld.infs) are parsed in Parallel.
-					Possible values are:
-					"on"  - Parse bld.infs in parallel (should be faster on clusters/multicore machines)
-					"off" - Parse bld.infs serially 
-				     """)
-
-parser.add_option("-v","--version",action="store_true",dest="version",
-				help="Print the version number and exit.")
-
-parser.add_option("--what",action="store_true",dest="what",
-				help="Print out the names of the files created by the build. Do not build anything.")
-
-def GetArgs(Raptor, args):
-	"Process command line arguments for a Raptor object"
-	return DoRaptor(Raptor,args)
-
-def ReadCommandFile(filename, used):
-	if filename in used:
-		raise IOError("command file '%s' refers to itself" % filename)
-
-	args = []
-	try:
-		file = open(filename, "r")
-		for line in file.readlines():
-			args.extend(line.split())
-		file.close()
-	except:
-		raise IOError("couldn't read command file '%s'" % filename)
-
-	# expand any command files in the options we just read.
-	# making sure we don't get stuck in a loop.
-	usedPlusThis = used[:]
-	usedPlusThis.append(filename)
-	return ExpandCommandOptions(args, usedPlusThis)
-
-def ExpandCommandOptions(args, files = []):
-	"""recursively expand --command options."""
-	expanded = []
-	previousWasOpt = False
-
-	for a in args:
-		if previousWasOpt: # then this one is the filename
-			expanded.extend(ReadCommandFile(a, files))
-			previousWasOpt = False
-			continue
-
-		if a.startswith(miniCommandOption):
-			if "=" in a: # then this is opt=filename
-				opt = a.split("=")
-				if fullCommandOption.startswith(opt[0]):
-					expanded.extend(ReadCommandFile(opt[1], files))
-					continue
-			else: # the next one is the filename
-				if fullCommandOption.startswith(a):
-					previousWasOpt = True
-					continue
-
-		expanded.append(a) # an ordinary arg, nothing to do with command files
-
-	return expanded
-
-def DoRaptor(Raptor, args):
-	"Process raptor arguments"
-	#
-	# This should parse the args list and call methods on
-	# the Raptor object to store the appropriate data.
-
-	# Expand --command=file options, replacing them with the contents of the
-	# command file.
-
-	non_ascii_error = "Non-ASCII character in argument or command file"
-
-	try:
-		expanded_args = ExpandCommandOptions(args)
-		for arg in expanded_args:
-			for c in arg:
-				if ord(c) > 127:
-					Raptor.Error(non_ascii_error)
-					return False
-	except IOError, e:
-		Raptor.Error(str(e))
-		return False
-	except UnicodeDecodeError:
-		Raptor.Error(non_ascii_error)
-		return False
-
-	# parse the full set of arguments
-	(options, leftover_args) = parser.parse_args(expanded_args)
-
-	# the leftover_args are either variable assignments of the form a=b
-	# or target names.
-	regex = re.compile("^(.+)=(.*)$")
-	for leftover in leftover_args:
-		assignment = regex.findall(leftover)
-		if len(assignment) > 0:
-			Raptor.SetEnv(assignment[0][0],assignment[0][1])
-		else:
-			Raptor.AddTarget(leftover)
-
-	# Define the dictionary of functions to be used.
-	# Attributes and function names can be added easily.
-	# The calling attribute should be the same
-	# as specified when creating the add_option
-	functions = {'config_name': Raptor.AddConfigName,
-				 'config_list':Raptor.AddConfigList,
-				 'sys_def_file' : Raptor.SetSysDefFile,
-				 'sys_def_base' : Raptor.SetSysDefBase,
-				 'sys_def_layer' : Raptor.AddSysDefLayer,
-				 'sys_def_order_layers' : Raptor.SetSysDefOrderLayers,
-				 'bld_inf_file' : Raptor.AddBuildInfoFile,
-				 'logfile' : Raptor.SetLogFileName,
-				 'makefile' : Raptor.SetTopMakefile,
-				 'quiet' : Raptor.RunQuietly,
-				 'debugoutput' : Raptor.SetDebugOutput,
-				 'doExportOnly' : Raptor.SetExportOnly,
-				 'keepgoing': Raptor.SetKeepGoing,
-				 'nobuild' : Raptor.SetNoBuild,
-				 'make_engine': Raptor.SetMakeEngine,
-				 'make_option': Raptor.AddMakeOption,
-				 'noDependInclude': Raptor.SetNoDependInclude,
-				 'number_of_jobs': Raptor.SetJobs,
-				 'project_name' :  Raptor.AddProject,
-				 'filter_list' : Raptor.FilterList,
-				 'ignore_os_detection': Raptor.IgnoreOsDetection,
-				 'check' :  Raptor.SetCheck,
-				 'what' :  Raptor.SetWhat,
-				 'tries' : Raptor.SetTries,
-				 'toolcheck' : Raptor.SetToolCheck,
-				 'source_target' : Raptor.AddSourceTarget,
-				 'command_file' : CommandFile,
-				'parallel_parsing' : Raptor.SetParallelParsing,
-			 	'version' : Raptor.PrintVersion
-				}
-
-	# Check if Quiet mode has been specified (otherwise we will make noise)
-	if parser.values.quiet:
-		Raptor.RunQuietly(True)
-
-	# some options imply that Raptor should exit immediately (e.g. --version)
-	keepGoing = True
-
-	if parser.values.version:
-		keepGoing = False
-
-	# Parse through the command line arguments passed, and call the
-	# corresponding function with the correct parameter.
-	# Since options is a OptParse.Value instance, it can be iterated over.
-	# This implementation helps avoid lengthy if-else statements
-	for opt in options.__dict__.items():
-		call_function = functions[str(opt[0])]
-		values = opt[1]
-		if not values:
-			pass
-		else:
-			if type(values) == types.ListType: # Check if the argument type is a list or a string. If list, then iterate through it and call the functions
-				for val in values:
-					keepGoing = (call_function(val) and keepGoing)
-			else:
-					keepGoing = (call_function(values) and keepGoing)
-
-	return keepGoing
-
-def CommandFile(file):
-	"this should never be called because we expand --command in this module."
-	print raptor.name + ": error: command file '%s' was not expanded" % file
-	return False
-
-
-
-
-# end of the raptor_cli module
-
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_cli module
+# This module represents a Command Line Interpreter (CLI) for Raptor.
+# The interface with Raptor is the GetArgs() function, which is called
+# by a raptor.Raptor object.
+#
+
+import re
+import types
+import raptor
+import os
+import sys
+import tempfile
+from raptor_utilities import getOSPlatform
+
+from optparse import OptionParser # for parsing command line parameters
+
+fullCommandOption = "--command"
+miniCommandOption = "--co"  # update this if another "co" option is added
+
+# raptor_cli module attributes
+
+parser = OptionParser(prog = raptor.name,
+					  usage = """%prog [--help] [options] [variable=value] [target] ...
+
+Targets:
+
+BITMAP         Create bitmap files
+CLEAN          Remove built files and intermediates, but not exported files
+CLEANEXPORT    Remove exported files
+EXPORT         Copy exported files to destinations
+FINAL          Allow extension makefiles to execute final commands
+FREEZE         Freeze exported functions in a .DEF file
+LIBRARY        Create import libraries from frozen .DEF files
+LISTING        Create assembler listing files for source files
+REALLYCLEAN    Same as CLEAN but also remove exported files
+RESOURCE       Create resource files and AIFs
+ROMFILE        Create an IBY file to be included in a ROM
+TARGET         Create main executables
+WHAT           List all releaseable targets
+
+Examples:
+
+sbs -b my/group/bld.inf -c armv5        # build my component for target ARMV5
+sbs -b my/group/bld.inf -c armv5.test   # build my tests for target ARMV5
+
+sbs -c winscw CLEAN                     # clean emulator files
+sbs REALLYCLEAN                         # delete everything""")
+
+parser.add_option("-a","--sysdefbase",action="store",dest="sys_def_base",
+				help="Root directory for relative paths in the System Definition XML file.")
+
+parser.add_option("-b","--bldinf",action="append",dest="bld_inf_file",
+				help="Build information filename. Multiple -b options can be given.")
+
+parser.add_option("-c","--config",action="append",dest="config_name",
+				help="Configuration name to build. Multiple -c options can be given. The standard configs are all, armv5, armv7, default, tools, tools2 and winscw.")
+
+parser.add_option("--configpath", action="append",dest="config_list",
+				help="Append a list of paths to the default list of XML configuration folders. Use ';' as the separator on Windows, and ':' on Linux. Multiple --configpath options can be given.")
+
+parser.add_option("--check",action="store_true",dest="check",
+				help="Test for the existence of files created by the build, printing the ones which are missing. Do not build anything.")
+
+parser.add_option("--command",action="append",dest="command_file",
+				help="Provide a set of command-line options in a file.")
+
+parser.add_option("-d","--debug",action="store_true",dest="debugoutput",
+				help="Display information useful for debugging.")
+
+parser.add_option("-e","--engine",action="store",dest="make_engine",
+				help="Name of the make engine which runs the build.")
+
+parser.add_option("--export-only",action="store_true",dest="doExportOnly",
+				help="Generate exports only and do not create any make files.")
+
+parser.add_option("-f","--logfile",action="store",dest="logfile",
+				help="Name of the log file, or '-' for stdout.")
+
+parser.add_option("--filters",action="store",dest="filter_list",
+				help="Comma-separated list of names of the filters to use (case sensitive).")
+
+parser.add_option("-i","--ignore-os-detection",action="store_true",dest="ignore_os_detection",
+				help="Disables automatic application of OS variant based upon the OS version detected from each epoc32 tree.")
+
+parser.add_option("-j","--jobs",action="store",dest="number_of_jobs",
+                help="The maximum number of jobs that make should try and run in parallel (on a single machine).")
+
+parser.add_option("-k","--keepgoing",action="store_true",dest="keepgoing",
+				help="Continue building, even if some build commands fail.")
+
+parser.add_option("-l","--layer",action="append",dest="sys_def_layer",
+                help="Build a specific layer in the System Definition XML File. Multiple -l options can be given.")
+
+parser.add_option("-m","--makefile",action="store",dest="makefile",
+				help="Top-level makefile to be created.")
+
+parser.add_option("--mo",action="append",dest="make_option",
+				help="Option that must be passed through to the make engine. Multiple --mo options can be given.")
+
+parser.add_option("-n","--nobuild",action="store_true",dest="nobuild",
+				help="Just create makefiles, do not build anything.")
+
+parser.add_option("--no-depend-include",action="store_true",dest="noDependInclude",
+				help="Do not include generated dependency files. This is only useful for extremely large non-incremental builds.")
+				
+parser.add_option("-o","--orderlayers",action="store_true",dest="sys_def_order_layers",
+				help="Build layers in the System Definition XML file in the order listed or, if given, in the order of -l options.")
+
+parser.add_option("-p","--project",action="append",dest="project_name",
+                help="Build a specific project (mmp or extension) in the given bld.inf file. Multiple -p options can be given.")
+
+parser.add_option("-q","--quiet",action="store_true",dest="quiet",
+				help="Run quietly, not generating output messages.")
+
+parser.add_option("-s","--sysdef",action="store",dest="sys_def_file",
+				help="System Definition XML filename.")
+
+parser.add_option("--source-target",action="append",dest="source_target",
+				help="Build the listed source or resource file in isolation - do not perform any dependent processing. Multiple --source-target options can be given.")
+
+parser.add_option("-t","--tries",action="store",dest="tries",
+				help="How many times to run a command before recording an error. The default is 1. This is useful for builds where transient failures can occur.")
+
+parser.add_option("--toolcheck",action="store",dest="toolcheck",
+			help= \
+				"""Possible values are:
+				  "on"     -  Check the versions of tools that will be used in the build. Use cached results from previous builds to save time. This is the default.
+
+  				  "off"    -  Do not check tool versions whatsoever.
+
+				  "forced" -  Check all tool versions. Don't use cached results.
+			""")
+parser.add_option("--pp",action="store",dest="parallel_parsing",
+				help="""Controls how metadata (e.g. bld.infs) are parsed in Parallel.
+					Possible values are:
+					"on"  - Parse bld.infs in parallel (should be faster on clusters/multicore machines)
+					"off" - Parse bld.infs serially 
+				     """)
+
+parser.add_option("-v","--version",action="store_true",dest="version",
+				help="Print the version number and exit.")
+
+parser.add_option("--what",action="store_true",dest="what",
+				help="Print out the names of the files created by the build. Do not build anything.")
+
+def GetArgs(Raptor, args):
+	"Process command line arguments for a Raptor object"
+	return DoRaptor(Raptor,args)
+
+def ReadCommandFile(filename, used):
+	if filename in used:
+		raise IOError("command file '%s' refers to itself" % filename)
+
+	args = []
+	try:
+		file = open(filename, "r")
+		for line in file.readlines():
+			args.extend(line.split())
+		file.close()
+	except:
+		raise IOError("couldn't read command file '%s'" % filename)
+
+	# expand any command files in the options we just read.
+	# making sure we don't get stuck in a loop.
+	usedPlusThis = used[:]
+	usedPlusThis.append(filename)
+	return ExpandCommandOptions(args, usedPlusThis)
+
+def ExpandCommandOptions(args, files = []):
+	"""recursively expand --command options."""
+	expanded = []
+	previousWasOpt = False
+
+	for a in args:
+		if previousWasOpt: # then this one is the filename
+			expanded.extend(ReadCommandFile(a, files))
+			previousWasOpt = False
+			continue
+
+		if a.startswith(miniCommandOption):
+			if "=" in a: # then this is opt=filename
+				opt = a.split("=")
+				if fullCommandOption.startswith(opt[0]):
+					expanded.extend(ReadCommandFile(opt[1], files))
+					continue
+			else: # the next one is the filename
+				if fullCommandOption.startswith(a):
+					previousWasOpt = True
+					continue
+
+		expanded.append(a) # an ordinary arg, nothing to do with command files
+
+	return expanded
+
+def DoRaptor(Raptor, args):
+	"Process raptor arguments"
+	#
+	# This should parse the args list and call methods on
+	# the Raptor object to store the appropriate data.
+
+	# Expand --command=file options, replacing them with the contents of the
+	# command file.
+
+	non_ascii_error = "Non-ASCII character in argument or command file"
+
+	try:
+		expanded_args = ExpandCommandOptions(args)
+		for arg in expanded_args:
+			for c in arg:
+				if ord(c) > 127:
+					Raptor.Error(non_ascii_error)
+					return False
+	except IOError, e:
+		Raptor.Error(str(e))
+		return False
+	except UnicodeDecodeError:
+		Raptor.Error(non_ascii_error)
+		return False
+
+	# parse the full set of arguments
+	(options, leftover_args) = parser.parse_args(expanded_args)
+
+	# the leftover_args are either variable assignments of the form a=b
+	# or target names.
+	regex = re.compile("^(.+)=(.*)$")
+	for leftover in leftover_args:
+		assignment = regex.findall(leftover)
+		if len(assignment) > 0:
+			Raptor.SetEnv(assignment[0][0],assignment[0][1])
+		else:
+			Raptor.AddTarget(leftover)
+
+	# Define the dictionary of functions to be used.
+	# Attributes and function names can be added easily.
+	# The calling attribute should be the same
+	# as specified when creating the add_option
+	functions = {'config_name': Raptor.AddConfigName,
+				 'config_list':Raptor.AddConfigList,
+				 'sys_def_file' : Raptor.SetSysDefFile,
+				 'sys_def_base' : Raptor.SetSysDefBase,
+				 'sys_def_layer' : Raptor.AddSysDefLayer,
+				 'sys_def_order_layers' : Raptor.SetSysDefOrderLayers,
+				 'bld_inf_file' : Raptor.AddBuildInfoFile,
+				 'logfile' : Raptor.SetLogFileName,
+				 'makefile' : Raptor.SetTopMakefile,
+				 'quiet' : Raptor.RunQuietly,
+				 'debugoutput' : Raptor.SetDebugOutput,
+				 'doExportOnly' : Raptor.SetExportOnly,
+				 'keepgoing': Raptor.SetKeepGoing,
+				 'nobuild' : Raptor.SetNoBuild,
+				 'make_engine': Raptor.SetMakeEngine,
+				 'make_option': Raptor.AddMakeOption,
+				 'noDependInclude': Raptor.SetNoDependInclude,
+				 'number_of_jobs': Raptor.SetJobs,
+				 'project_name' :  Raptor.AddProject,
+				 'filter_list' : Raptor.FilterList,
+				 'ignore_os_detection': Raptor.IgnoreOsDetection,
+				 'check' :  Raptor.SetCheck,
+				 'what' :  Raptor.SetWhat,
+				 'tries' : Raptor.SetTries,
+				 'toolcheck' : Raptor.SetToolCheck,
+				 'source_target' : Raptor.AddSourceTarget,
+				 'command_file' : CommandFile,
+				'parallel_parsing' : Raptor.SetParallelParsing,
+			 	'version' : Raptor.PrintVersion
+				}
+
+	# Check if Quiet mode has been specified (otherwise we will make noise)
+	if parser.values.quiet:
+		Raptor.RunQuietly(True)
+
+	# some options imply that Raptor should exit immediately (e.g. --version)
+	keepGoing = True
+
+	if parser.values.version:
+		keepGoing = False
+
+	# Parse through the command line arguments passed, and call the
+	# corresponding function with the correct parameter.
+	# Since options is a OptParse.Value instance, it can be iterated over.
+	# This implementation helps avoid lengthy if-else statements
+	for opt in options.__dict__.items():
+		call_function = functions[str(opt[0])]
+		values = opt[1]
+		if not values:
+			pass
+		else:
+			if type(values) == types.ListType: # Check if the argument type is a list or a string. If list, then iterate through it and call the functions
+				for val in values:
+					keepGoing = (call_function(val) and keepGoing)
+			else:
+					keepGoing = (call_function(values) and keepGoing)
+
+	return keepGoing
+
+def CommandFile(file):
+	"this should never be called because we expand --command in this module."
+	print raptor.name + ": error: command file '%s' was not expanded" % file
+	return False
+
+
+
+
+# end of the raptor_cli module
+
+
--- a/sbsv2/raptor/python/raptor_data.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_data.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,1489 +1,1489 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_data module
-# This module contains the classes that make up the Raptor Data Model.
-#
-
-import copy
-import generic_path
-import os
-import hashlib
-import raptor_utilities
-import re
-import types
-import sys
-import subprocess
-from tempfile import gettempdir
-from time import time, clock
-
-
-
-# What host platforms we recognise
-# This allows us to tie some variants to one host platform and some to another
-class HostPlatform(object):
-	""" List the host platforms on which we can build.  Allow configuration
- 	    files to specify different information based on that.
-	"""
-	hostplatforms = ["win32", "win64", "linux2"]
-	hostplatform = sys.platform
-
-	@classmethod
-	def IsKnown(cls, platformpattern):
-		"Does the parameter match the name of a known platform "
-		hpnre = re.compile(platformpattern, re.I)
-		for hp in cls.hostplatforms:
-			if hpnre.match(hp):
-				return True
-		return False
-
-	@classmethod
-	def IsHost(cls, platformpattern):
-		""" Does the parameter match the name of the
-		    platform that we're executing on? """
-		ppre = re.compile(platformpattern, re.I)
-		if ppre.match(cls.hostplatform):
-			return True
-		return False
-
-
-# Make sure not to start up on an unsupported platform
-if not HostPlatform.IsKnown(HostPlatform.hostplatform):
-	raise Exception("raptor_data module loaded on an unrecognised platform '%s'. Expected one of %s" % (hostplatform, str(hostplatforms)))
-
-
-# raptor_data module classes
-
-class Model(object):
-	"Base class for data-model objects"
-
-	def __init__(self):
-		self.owner = None	# Raptor object
-		self.source = None	# XML file
-		self.indent = " "	# for DebugPrint
-		self.host = None
-		self.cacheID = ""	# default set of cached objects
-
-
-	def SetOwner(self, aRaptor):
-		self.owner = aRaptor
-
-
-	def SetSourceFile(self, filename):
-		self.source = filename
-
-
-	def SetProperty(self, name, value):
-		raise InvalidPropertyError()
-
-
-	def AddChild(self, child):
-		raise InvalidChildError()
-
-
-	def DebugPrint(self, prefix = ""):
-		if self.owner:
-			self.owner.Debug("%s", prefix)
-
-	def Valid(self):
-		return False
-
-	def IsApplicable(self):
-		"This variant may be caused to only apply when used on a particular host build platform"
-		if self.host is None:
-			return True
-
-		if HostPlatform.IsHost(self.host):
-			return True
-
-		return False
-
-
-class InvalidPropertyError(Exception):
-	pass
-
-class InvalidChildError(Exception):
-	pass
-
-class BadReferenceError(Exception):
-	pass
-
-
-class Reference(Model):
-	"Base class for data-model reference objects"
-
-	def __init__(self, ref = None):
-		Model.__init__(self)
-		self.ref = ref
-		self.modifiers = []
-
-	def SetProperty(self, name, value):
-		if name == "ref":
-			self.ref = value
-		elif name == "mod":
-			self.modifiers = value.split(".")
-		else:
-			raise InvalidPropertyError()
-
-	def Resolve(self):
-		raise BadReferenceError()
-
-	def GetModifiers(self):
-		cache = self.owner.cache
-		return [ cache.FindNamedVariant(m) for m in self.modifiers ]
-
-	def Valid(self):
-		return self.ref
-
-
-class VariantContainer(Model):
-
-	def __init__(self):
-		Model.__init__(self)	# base class constructor
-		self.variants = []
-
-
-	def SetOwner(self, aRaptor):
-		Model.SetOwner(self, aRaptor)
-		for v in self.variants:
-			v.SetOwner(aRaptor)
-
-
-	def DebugPrint(self, prefix = ""):
-		for v in self.variants:
-			v.DebugPrint(prefix)
-
-
-	def AddVariant(self, variant):
-		if type(variant) is types.StringTypes:
-			variant = VariantRef(variant)
-
-
-		# Only add the variant if it's not in the list
-		# already
-		if not variant in self.variants:
-			self.variants.append(variant)
-
-	def GetVariants(self):
-		# resolve any VariantRef objects into Variant objects
-		for i,var in enumerate(self.variants):
-			if isinstance(var, Reference):
-				try:
-					self.variants[i] = var.Resolve()
-
-				except BadReferenceError:
-					self.owner.Error("Missing variant '%s'", var.ref)
-
-		return self.variants
-
-
-class Interface(Model):
-
-	def __init__(self, name = None):
-		Model.__init__(self)	# base class constructor
-		self.name = name
-		self.flm = None
-		self.abstract = False
-		self.extends = None
-		self.params = []
-		self.paramgroups = []
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<interface name='%s'>", prefix, self.name)
-		self.owner.Debug("%s...", prefix)
-		self.owner.Debug("%s</interface>", prefix)
-
-	def FindParent(self):
-		try:
-			return self.owner.cache.FindNamedInterface(self.extends, self.cacheID)
-		except KeyError:
-			raise BadReferenceError("Cannot extend interface because it cannot be found: "+str(self.extends))
-
-	def GetParams(self):
-		if self.extends != None:
-			parent = self.FindParent()
-
-			# what parameter names do we have already?
-			names = set([x.name for x in self.params])
-
-			# pick up ones we don't have that are in our parent
-			pp = []
-			for p in parent.GetParams():
-				if not p.name in names:
-					pp.append(p)
-
-			# list parent parameters first then ours
-			pp.extend(self.params)
-			return pp
-
-		return self.params
-
-	def GetParamGroups(self):
-		if self.extends != None:
-			parent = self.FindParent()
-
-			# what parameter names do we have already?
-			patterns = set([x.pattern for x in self.paramgroups])
-
-			# pick up ones we don't have that are in our parent
-			for g in parent.GetParamGroups():
-				if not g.pattern in patterns:
-					self.paramgroups.append(g)
-
-		return self.paramgroups
-
-
-	def GetFLMIncludePath(self):
-		"absolute path to the FLM"
-
-		if self.flm == None:
-			if self.extends != None:
-				parent = self.FindParent()
-
-				return parent.GetFLMIncludePath()
-			else:
-				raise InvalidPropertyError()
-
-		if not os.path.isabs(self.flm):
-			self.flm = os.path.join(os.path.dirname(self.source), self.flm)
-
-		return generic_path.Path(self.flm)
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "flm":
-			self.flm = value
-		elif name == "abstract":
-			self.abstract = (value == "true")
-		elif name == "extends":
-			self.extends = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def AddChild(self, child):
-		if isinstance(child, Parameter):
-			self.AddParameter(child)
-		elif isinstance(child, ParameterGroup):
-			self.AddParameterGroup(child)
-		else:
-			raise InvalidChildError()
-
-
-	def AddParameter(self, parameter):
-		self.params.append(parameter)
-
-	def AddParameterGroup(self, parametergroup):
-		self.paramgroups.append(parametergroup)
-
-	def Valid(self):
-		return (self.name != None)
-
-
-class InterfaceRef(Reference):
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<interfaceRef ref='%s'/>", prefix, self.ref)
-
-	def Resolve(self):
-		try:
-			return self.owner.cache.FindNamedInterface(self.ref, self.cacheID)
-		except KeyError:
-			raise BadReferenceError()
-
-
-class Specification(VariantContainer):
-
-	def __init__(self, name = "", type = ""):
-		VariantContainer.__init__(self)	# base class constructor
-		self.name = name
-		self.type = type
-		self.interface = None
-		self.childSpecs = []
-		self.parentSpec = None
-
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<spec name='%s'>", prefix, self.name)
-		if self.interface:
-			self.interface.DebugPrint(prefix + self.indent)
-		VariantContainer.DebugPrint(self, prefix + self.indent)
-		for c in self.childSpecs:
-			c.DebugPrint(prefix + self.indent)
-		self.owner.Debug("%s</spec>", prefix)
-
-
-	def SetOwner(self, aRaptor):
-		VariantContainer.SetOwner(self, aRaptor)
-
-		if self.interface != None:
-			self.interface.SetOwner(aRaptor)
-
-		for s in self.childSpecs:
-			s.SetOwner(aRaptor)
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Configure(self, config):
-		# configure all the children (some may be Filters or parents of)
-		for spec in self.GetChildSpecs():
-			spec.Configure(config)
-
-
-	def HasInterface(self):
-		return self.interface != None
-
-
-	def SetInterface(self, interface):
-		if isinstance(interface, Interface) \
-		or isinstance(interface, InterfaceRef):
-			self.interface = interface
-		else:
-			self.interface = InterfaceRef(interface)
-
-
-	def GetInterface(self):
-		"""return the Interface (fetching from the cache if it was a ref)
-		may return None"""
-
-		if self.interface == None \
-		or isinstance(self.interface, Interface):
-			return self.interface
-
-		if isinstance(self.interface, InterfaceRef):
-			try:
-				self.interface = self.interface.Resolve()
-				return self.interface
-
-			except BadReferenceError:
-				self.owner.Error("Missing interface %s", self.interface.ref)
-				return None
-
-
-	def AddChild(self, child):
-		if isinstance(child, Specification):
-			self.AddChildSpecification(child)
-		elif isinstance(child, Interface) \
-		  or isinstance(child, InterfaceRef):
-			self.SetInterface(child)
-		elif isinstance(child, Variant) \
-		  or isinstance(child, VariantRef):
-			self.AddVariant(child)
-		else:
-			raise InvalidChildError()
-
-
-	def AddChildSpecification(self, child):
-		child.SetParentSpec(self)
-		self.childSpecs.append(child)
-
-
-	def SetParentSpec(self, parent):
-		self.parentSpec = parent
-
-
-	def GetChildSpecs(self):
-		return self.childSpecs
-
-
-	def Valid(self):
-		return True
-
-
-	def GetAllVariantsRecursively(self):
-		"""Returns all variants contained in this node and in its ancestors.
-
-		The returned value is a list, the structure of which is [variants-in-parent,
-		variants-in-self].
-
-		Note that the function recurses through parent *Specifications*, not through
-		the variants themselves.
-		"""
-		if self.parentSpec:
-			variants = self.parentSpec.GetAllVariantsRecursively()
-		else:
-			variants = []
-
-		variants.extend( self.GetVariants() )
-
-		return variants
-
-
-class Filter(Specification):
-	"""A Filter is two Specification nodes and a True/False switch.
-
-	Filter extends Specification to have two nodes, only one of
-	which can be active at any time. Which node is active is determined
-	when the Configure method is called after setting up a Condition.
-
-	If several Conditions are set, the test is an OR of all of them."""
-
-	def __init__(self, name = ""):
-		Specification.__init__(self, name)	# base class constructor
-		self.Else = Specification(name)     # same for Else part
-		self.isTrue = True
-		self.configNames = set()            #
-		self.variableNames = set()          # TO DO: Condition class
-		self.variableValues = {}            #
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<filter name='%s'>", prefix, self.name)
-		self.owner.Debug("%s <if config='%s'>", prefix, " | ".join(self.configNames))
-		Specification.DebugPrint(self, prefix + self.indent)
-		self.owner.Debug("%s </if>", prefix)
-		self.owner.Debug("%s <else>", prefix)
-		self.Else.DebugPrint(prefix + self.indent)
-		self.owner.Debug("%s </else>", prefix)
-		self.owner.Debug("%s</filter>", prefix)
-
-
-	def SetConfigCondition(self, configName):
-		self.configNames = set([configName])
-
-	def AddConfigCondition(self, configName):
-		self.configNames.add(configName)
-
-
-	def SetVariableCondition(self, variableName, variableValues):
-		self.variableNames = set([variableName])
-		if type(variableValues) == types.ListType:
-			self.variableValues[variableName] = set(variableValues)
-		else:
-			self.variableValues[variableName] = set([variableValues])
-
-	def AddVariableCondition(self, variableName, variableValues):
-		self.variableNames.add(variableName)
-		if type(variableValues) == types.ListType:
-			self.variableValues[variableName] = set(variableValues)
-		else:
-			self.variableValues[variableName] = set([variableValues])
-
-
-	def Configure(self, buildUnit):
-		self.isTrue = False
-
-		if buildUnit.name in self.configNames:
-			self.isTrue = True
-		elif self.variableNames:
-			evaluator = self.owner.GetEvaluator(self.parentSpec, buildUnit)
-
-			for variableName in self.variableNames:
-				variableValue = evaluator.Get(variableName)
-
-				if variableValue in self.variableValues[variableName]:
-					self.isTrue = True
-					break
-
-		# configure all the children too
-		for spec in self.GetChildSpecs():
-			spec.Configure(buildUnit)
-
-
-	def SetOwner(self, aRaptor):
-		# base class method
-		Specification.SetOwner(self, aRaptor)
-		# same for Else part
-		self.Else.SetOwner(aRaptor)
-
-
-	def HasInterface(self):
-		if self.isTrue:
-			return Specification.HasInterface(self)
-		else:
-			return self.Else.HasInterface()
-
-
-	def GetInterface(self):
-		if self.isTrue:
-			return Specification.GetInterface(self)
-		else:
-			return self.Else.GetInterface()
-
-
-	def GetVariants(self):
-		if self.isTrue:
-			return Specification.GetVariants(self)
-		else:
-			return self.Else.GetVariants()
-
-
-	def SetParentSpec(self, parent):
-		# base class method
-		Specification.SetParentSpec(self, parent)
-		# same for Else part
-		self.Else.SetParentSpec(parent)
-
-
-	def GetChildSpecs(self):
-		if self.isTrue:
-			return Specification.GetChildSpecs(self)
-		else:
-			return self.Else.GetChildSpecs()
-
-
-class Parameter(Model):
-
-	def __init__(self, name = None, default = None):
-		Model.__init__(self)	# base class constructor
-		self.name = name
-		self.default = default
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "default":
-			self.default = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Valid(self):
-		return (self.name != None)
-
-class ParameterGroup(Model):
-	"""A group of Parameters specified in an interface by a regexp"""
-	def __init__(self, pattern = None, default = None):
-		Model.__init__(self)	# base class constructor
-		self.pattern = pattern
-
-		self.patternre = None
-		if pattern:
-			try:
-				self.patternre = re.compile(pattern)
-			except TypeError:
-				pass
-		self.default = default
-
-
-	def SetProperty(self, pattern, value):
-		if pattern == "pattern":
-			self.pattern = value
-			self.patternre = re.compile(value)
-		elif pattern == "default":
-			self.default = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Valid(self):
-		return (self.pattern != None and self.patternre != None)
-
-
-class Operation(Model):
-	"Base class for variant operations"
-	def __init__(self):
-		Model.__init__(self)	# base class constructor
-		self.type = None
-
-
-	def Apply(self, oldValue):
-		pass
-
-
-class Append(Operation):
-	__slots__ = ('name','value','separator','owner')
-
-	def __init__(self, name = None, value = None, separator = " "):
-		Operation.__init__(self)	# base class constructor
-		self.name = name
-		self.value = value
-		self.separator = separator
-
-
-	def DebugPrint(self, prefix = ""):
-		attributes = "name='" + self.name + "' value='" + self.value + "' separator='" + self.separator + "'"
-		self.owner.Debug("%s<append %s/>", prefix, attributes)
-
-
-	def Apply(self, oldValue):
-		if len(oldValue) > 0:
-			if len(self.value) > 0:
-				return oldValue + self.separator + self.value
-			else:
-				return oldValue
-		else:
-			return self.value
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "value":
-			self.value = value
-		elif name == "separator":
-			self.separator = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Valid(self):
-		return (self.name != None and self.value != None)
-
-
-class Prepend(Operation):
-	def __init__(self, name = None, value = None, separator = " "):
-		Operation.__init__(self)	# base class constructor
-		self.name = name
-		self.value = value
-		self.separator = separator
-
-
-	def DebugPrint(self, prefix = ""):
-		attributes = "name='" + self.name + "' value='" + self.value + "' separator='" + self.separator + "'"
-		self.owner.Debug("%s<prepend %s/>", prefix, attributes)
-
-
-	def Apply(self, oldValue):
-		if len(oldValue) > 0:
-			if len(self.value) > 0:
-				return self.value + self.separator + oldValue
-			else:
-				return oldValue
-		else:
-			return self.value
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "value":
-			self.value = value
-		elif name == "separator":
-			self.separator = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Valid(self):
-		return (self.name != None and self.value != None)
-
-
-class Set(Operation):
-	"""implementation of <set> operation"""
-	__slots__ = ('name','value', 'type', 'versionCommand', 'versionResult', 'owner')
-
-	def __init__(self, name = None, value = "", type = ""):
-		Operation.__init__(self)	# base class constructor
-		self.name = name
-		self.value = value
-		self.type = type
-		self.versionCommand = ""
-		self.versionResult = ""
-
-
-	def DebugPrint(self, prefix = ""):
-		attributes = "name='" + self.name + "' value='" + self.value + "' type='" + self.type + "'"
-		if type == "tool":
-			attributes += " versionCommand='" + self.versionCommand + "' versionResult='" + self.versionResult
-
-		self.owner.Debug("%s<set %s/>", prefix, attributes)
-
-
-	def Apply(self, oldValue):
-		return self.value
-
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "value":
-			self.value = value
-		elif name == "type":
-			self.type = value
-		elif name == "versionCommand":
-			self.versionCommand = value
-		elif name == "versionResult":
-			self.versionResult = value
-		elif name == "host":
-			if HostPlatform.IsKnown(value):
-				self.host = value
-		else:
-			raise InvalidPropertyError()
-
-
-	def Valid(self):
-		return (self.name != None and self.value != None)
-
-
-class Env(Set):
-	"""implementation of <env> operator"""
-
-	def __init__(self, name = None, default = None, type = ""):
-		Set.__init__(self, name, "", type)	# base class constructor
-		self.default = default
-
-
-	def DebugPrint(self, prefix = ""):
-		attributes = "name='" + self.name + "' type='" + self.type + "'"
-		if default != None:
-			attributes += " default='" + self.default + "'"
-
-		if type == "tool":
-			attributes += " versionCommand='" + self.versionCommand + "' versionResult='" + self.versionResult + "'"
-
-		self.owner.Debug("%s<env %s/>", prefix, attributes)
-
-
-	def Apply(self, oldValue):
-		try:
-			value = os.environ[self.name]
-
-			# if this value is a "path" or a "tool" then we need to make sure
-			# it is a proper absolute path in our preferred format.
-			if value and (self.type == "path" or self.type == "tool"):
-				try:
-					path = generic_path.Path(value)
-					value = str(path.Absolute())
-				except ValueError,e:
-					self.owner.Error("the environment variable %s is incorrect: %s" % (self.name, str(e)))
-					return "NO_VALUE_FOR_" + self.name
-		except KeyError:
-			if self.default != None:
-				value = self.default
-			else:
-				self.owner.Error("%s is not set in the environment and has no default", self.name)
-				return "NO_VALUE_FOR_" + self.name
-
-		return value
-
-
-	def SetProperty(self, name, value):
-		if name == "default":
-			self.default = value
-		else:
-			Set.SetProperty(self, name, value)
-
-
-	def Valid(self):
-		return (self.name != None)
-
-
-class BuildUnit(object):
-	"Represents an individual buildable unit."
-
-	def __init__(self, name, variants):
-		self.name = name
-		
-		# A list of Variant objects.
-		self.variants = variants
-
-		# Cache for the variant operations implied by this BuildUnit.
-		self.operations = []
-		self.variantKey = ""
-
-	def GetOperations(self):
-		"""Return all operations related to this BuildUnit.
-		
-		The result is cached, and so will only be computed once per BuildUnit.
-		"""
-		key = '.'.join([x.name for x in self.variants])
-		if self.variantKey != key:
-			self.variantKey = key
-			for v in self.variants:
-				self.operations.extend( v.GetAllOperationsRecursively() )
-
-		return self.operations
-
-class Config(object):
-	"""Abstract type representing an argument to the '-c' option.
-
-	The fundamental property of a Config is that it can generate one or more
-	BuildUnits.
-	"""
-
-	def __init__(self):
-		self.modifiers = []
-
-	def AddModifier(self, variant):
-		self.modifiers.append(variant)
-
-	def ClearModifiers(self):
-		self.modifiers = []
-
-	def GenerateBuildUnits(self):
-		"""Returns a list of BuildUnits.
-
-		This function must be overridden by derived classes.
-		"""
-		raise NotImplementedError()
-
-
-class Variant(Model, Config):
-
-	def __init__(self, name = ""):
-		Model.__init__(self)
-		Config.__init__(self)
-		self.name = name
-
-		# Operations defined inside this variant.
-		self.ops = []
-
-		# The name of our parent variant, if any.
-		self.extends = ""
-
-		# Any variant references used inside this variant.
-		self.variantRefs = []
-
-		self.allOperations = []
-
-	def SetProperty(self, name, value):
-		if name == "name":
-			self.name = value
-		elif name == "host":
-			if HostPlatform.IsKnown(value):
-				self.host = value
-		elif name == "extends":
-			self.extends = value
-		else:
-			raise InvalidPropertyError()
-
-	def AddChild(self, child):
-		if isinstance(child, Operation):
-			self.ops.append(child)
-		elif isinstance(child, VariantRef):
-			self.variantRefs.append(child)
-		else:
-			raise InvalidChildError()
-
-	def Valid(self):
-		return self.name
-
-	def SetOwner(self, aRaptor):
-
-		Model.SetOwner(self, aRaptor)
-
-		for r in self.variantRefs:
-			r.SetOwner(aRaptor)
-
-		for op in self.ops:
-			op.SetOwner(aRaptor)
-
-	def AddOperation(self, op):
-		self.ops.append(op)
-
-	def GetAllOperationsRecursively(self):
-		"""Returns a list of all operations in this variant.
-
-		The list elements are themselves lists; the overall structure of the
-		returned value is:
-
-		[ [ops-from-parent],[ops-from-varRefs], [ops-in-self] ]
-		"""
-
-		if not self.allOperations:
-			if self.extends:
-				parent = self.owner.cache.FindNamedVariant(self.extends)
-				self.allOperations.extend( parent.GetAllOperationsRecursively() )
-			for r in self.variantRefs:
-				for v in [ r.Resolve() ] + r.GetModifiers():
-					self.allOperations.extend( v.GetAllOperationsRecursively() )
-			self.allOperations.append(self.ops)
-
-		return self.allOperations
-
-	def GenerateBuildUnits(self):
-
-		name = self.name
-		vars = [self]
-
-		for m in self.modifiers:
-			name = name + "." + m.name
-			vars.append(m)
-
-		return [ BuildUnit(name, vars) ]
-
-	def DebugPrint(self, prefix = ""):
-
-		self.owner.Debug("%s<var name='%s' extends='%s'>", prefix, self.name, self.extends)
-		for op in self.ops:
-			op.DebugPrint(prefix + self.indent)
-
-		self.owner.Debug("%s</var>", prefix)
-
-
-class VariantRef(Reference):
-
-	def __init__(self, ref=None):
-		Reference.__init__(self, ref)
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<varRef ref='%s'/>", prefix, self.ref)
-
-	def Resolve(self):
-		try:
-			return self.owner.cache.FindNamedVariant(self.ref)
-		except KeyError:
-			raise BadReferenceError(self.ref)
-
-
-class Alias(Model, Config):
-
-	def __init__(self, name=""):
-		Model.__init__(self)
-		Config.__init__(self)
-		self.name = name
-		self.meaning = ""
-		self.varRefs = []
-		self.variants = []
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<alias name='%s' meaning='%s'/>", prefix, self.name, self.meaning)
-
-	def SetProperty(self, key, val):
-		if key == "name":
-			self.name = val
-		elif key == "meaning":
-			self.meaning = val
-
-			for u in val.split("."):
-				self.varRefs.append( VariantRef(u) )
-		else:
-			raise InvalidPropertyError()
-
-	def SetOwner(self, raptor):
-		Model.SetOwner(self, raptor)
-		for r in self.varRefs:
-			r.SetOwner(raptor)
-
-	def Valid(self):
-		return self.name and self.meaning
-
-	def GenerateBuildUnits(self):
-		if not self.variants:
-			for r in self.varRefs:
-				try:
-					self.variants.append( r.Resolve() )
-				except BadReferenceError:
-					self.owner.Error("Missing variant '%s'", r.ref)
-
-		name = self.name
-
-		for v in self.modifiers:
-			name = name + "." + v.name
-
-		return [ BuildUnit(name, self.variants + self.modifiers) ]
-
-
-class AliasRef(Reference):
-
-	def __init__(self, ref=None):
-		Reference.__init__(self, ref)
-
-	def DebugPrint(self, prefix = ""):
-		self.owner.Debug("%s<aliasRef ref='%s'/>", prefix, self.ref)
-
-	def Resolve(self):
-		try:
-			return self.owner.cache.FindNamedAlias(self.ref)
-		except KeyError:
-			raise BadReferenceError(self.ref)
-
-
-class Group(Model, Config):
-	def __init__(self, name=""):
-		Model.__init__(self)
-		Config.__init__(self)
-		self.name = name
-		self.childRefs = []
-
-	def SetProperty(self, key, val):
-		if key == "name":
-			self.name = val
-		else:
-			raise InvalidPropertyError()
-
-	def AddChild(self, child):
-		if isinstance( child, (VariantRef,AliasRef,GroupRef) ):
-			self.childRefs.append(child)
-		else:
-			raise InvalidChildError()
-
-	def SetOwner(self, raptor):
-		Model.SetOwner(self, raptor)
-		for r in self.childRefs:
-			r.SetOwner(raptor)
-
-	def Valid(self):
-		return self.name and self.childRefs
-
-	def DebugPrint(self, prefix = ""):
-
-		self.owner.Debug("<group name='%s'>", prefix, self.name)
-
-		for r in self.childRefs:
-			r.DebugPrint(prefix + self.indent)
-
-		self.owner.Debug("%s</group>", prefix)
-
-	def GenerateBuildUnits(self):
-
-		units = []
-
-		for r in self.childRefs:
-			refMods = r.GetModifiers()
-
-			try:
-				obj = r.Resolve()
-			except BadReferenceError:
-				self.owner.Error("Missing variant '%s'", r.ref)
-			else:
-				obj.ClearModifiers()
-
-				for m in refMods + self.modifiers:
-					obj.AddModifier(m)
-
-				units.extend( obj.GenerateBuildUnits() )
-
-		return units
-
-
-class GroupRef(Reference):
-
-	def __init__(self, ref=None):
-		Reference.__init__(self, ref)
-
-	def DebugPrint(self, prefix = ""):
-		mod = ".".join(self.modifiers)
-		self.owner.Debug("%s<groupRef ref='%s' mod='%s'/>", prefix, self.ref, mod)
-
-	def Resolve(self):
-		try:
-			return self.owner.cache.FindNamedGroup(self.ref)
-		except KeyError:
-			raise BadReferenceError(self.ref)
-
-class Tool(object):
-	"""Represents a tool that might be used by raptor e.g. a compiler"""
-
-	# For use in dealing with tools that return non-ascii version strings.
-	nonascii = ""
-	identity_chartable = chr(0)
-	for c in xrange(1,128):
-		identity_chartable += chr(c)
-	for c in xrange(128,256):
-		nonascii += chr(c)
-		identity_chartable += " "
-
-	def __init__(self, name, command, versioncommand, versionresult, id="", log = raptor_utilities.nulllog):
-		self.name = name
-		self.command = command
-		self.versioncommand = versioncommand
-		self.versionresult = versionresult
-		self.id = id # what config this is from - used in debug messages
-		self.date = None
-
-
-		# Assume the tool is unavailable or the wrong
-		# version until someone proves that it's OK
-		self.valid = False
-
-		self.log=log
-
-	def expand(self, toolset):
-		self.versioncommand = toolset.ExpandAll(self.versioncommand)
-		self.versionresult  = toolset.ExpandAll(self.versionresult)
-		self.command = toolset.ExpandAll(self.command)
-		self.key = hashlib.md5(self.versioncommand + self.versionresult).hexdigest()
-		
-		# We need the tool's date to find out if we should check it.
-		try:
-			if '/' in self.command:
-				testfile = os.path.abspath(self.command.strip("\"'"))
-			else:
-				# The tool isn't a relative or absolute path so the could be relying on the 
-				# $PATH variable to make it available.  We must find the tool if it's a simple 
-				# executable file (e.g. "armcc" rather than "python myscript.py") then get it's date. 
-				# We can use the date later to see if our cache is valid. 
-				# If it really is not a simple command then we won't be able to get a date and
-				# we won't be able to tell if it is altered or updated - too bad!
-				testfile = generic_path.Where(self.command)
-				self.log.Debug("toolcheck: tool '%s' was found on the path at '%s' ", self.command, testfile)
-				if testfile is None:
-					raise Exception("Can't be found in path")
-
-			if not os.path.isfile(testfile):
-				raise Exception("tool %s appears to not be a file %s", self.command, testfile)
-				
-			testfile_stat = os.stat(testfile)
-			self.date = testfile_stat.st_mtime
-		except Exception,e:
-			self.log.Debug("toolcheck: '%s=%s' cannot be dated - this is ok, but the toolcheck won't be able to tell when a new  of the tool is installed. (%s)", self.name, self.command, str(e))
-	
-			
-	def check(self, shell, evaluator):
-
-		self.vre = re.compile(self.versionresult)
-
-		try:
-			self.log.Debug("Pre toolcheck: '%s' for version '%s'", self.name, self.versionresult)
-			p = subprocess.Popen(args=[shell, "-c", self.versioncommand], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-			versionoutput,err = p.communicate()
-			self.log.Debug("Checking tool '%s' for version '%s'", self.name, self.versionresult)
-		except Exception,e:
-			versionoutput=None
-
-		# Some tools return version strings with unicode characters! 
-		# There is no good response other than a lot of decoding and encoding.
-		# Simpler to ignore it:
-		versionoutput_a = versionoutput.translate(Tool.identity_chartable,"")
-
-		if versionoutput_a and self.vre.search(versionoutput_a) != None:
-			self.log.Debug("tool '%s' returned an acceptable version '%s' at %s", self.name, versionoutput_a, str(self.date))
-			self.valid = True
-		else:
-			self.log.Error("tool '%s' from config '%s' did not return version '%s' as required.\nCommand '%s' returned:\n%s\nCheck your environment and configuration.\n", self.name, self.id, self.versionresult, self.versioncommand, versionoutput_a)
-			self.valid = False
-		return self.valid
-
-def envhash(irrelevant_vars):
-	"""Determine something unique about this environment to identify it.
-	must ignore variables that change without mattering to the caller
-	e.g. perhaps PATH matters but PWD and PPID don't"""
-	envid = hashlib.md5()
-	for k in os.environ:
-		if k not in irrelevant_vars:
-			envid.update(os.environ[k])
-	return envid.hexdigest()[:16]
-
-
-class ToolSet(object):
-	""" 
-	This class manages a bunch of tools and keeps a cache of
-	all tools that it ever sees (across all configurations).
-	toolset.check() is called for each config but the cache is kept across calls to
-	catch the use of one tool in many configs.
-	write() is used to flush the cache to disc.
-	"""
-	# The raptor shell - this is not mutable.
-	hostbinaries = os.path.join(os.environ['SBS_HOME'], 
-	                            os.environ['HOSTPLATFORM_DIR'])
-	                            
-	if HostPlatform.IsHost('lin*'):
-		shell=os.path.join(hostbinaries, 'bin/bash')
-	else:
-		if 'SBS_CYGWIN' in os.environ:
-			shell=os.path.join(os.environ['SBS_CYGWIN'], 'bin\\bash.exe')
-		else:
-			shell=os.path.join(hostbinaries, 'cygwin\\bin\\bash.exe')
-
-
-	irrelevant_vars = ['PWD','OLDPWD','PID','PPID', 'SHLVL' ]
-
-
-	shell_version=".*GNU bash, version [34].*"
-	shell_re = re.compile(shell_version)
-	if 'SBS_BUILD_DIR' in os.environ:
-		cachefile_basename = str(generic_path.Join(os.environ['SBS_BUILD_DIR'],"toolcheck_cache_"))
-	elif 'EPOCROOT' in os.environ:
-		cachefile_basename = str(generic_path.Join(os.environ['EPOCROOT'],"epoc32/build/toolcheck_cache_"))
-	else:
-		cachefile_basename = None
-
-	tool_env_id = envhash(irrelevant_vars)
-	filemarker = "sbs_toolcache_2.8.2"
-
-	def __init__(self, log = raptor_utilities.nulllog, forced=False):
-		self.__toolcheckcache = {}
-
-		self.valid = True
-		self.checked = False
-		self.shellok = False
-		self.configname=""
-		self.cache_loaded = False
-		self.forced = forced
-
-		self.log=log
-
-		# Read in the tool cache
-		#
-		# The cache format is a hash key which identifies the
-		# command and the version that we're checking for. Then
-		# there are name,value pairs that record, e.g. the date
-		# of the command file or the name of the variable that
-		# the config uses for the tool (GNUCP or MWCC or whatever)
-
-		if ToolSet.cachefile_basename:
-			self.cachefilename = ToolSet.cachefile_basename+".tmp"
-			if not self.forced:
-				try:
-					f = open(self.cachefilename, "r+")
-					# if this tool cache was recorded in
-					# a different environment then ignore it.
-					marker = f.readline().rstrip("\r\n")
-					if marker == ToolSet.filemarker:
-						env_id_tmp = f.readline().rstrip("\r\n")
-						if env_id_tmp == ToolSet.tool_env_id:
-							try:
-								for l in f.readlines():
-									toolhistory  = l.rstrip(",\n\r").split(",")
-									ce = {}
-									for i in toolhistory[1:]:
-										(name,val) = i.split("=")
-										if name == "valid":
-											val = bool(val)
-										elif name == "age":
-											val = int(val)
-										elif name == "date":
-											if val != "None":
-												val = float(val)
-											else:
-												val= None
-
-										ce[name] = val
-									self.__toolcheckcache[toolhistory[0]] = ce
-								log.Info("Loaded toolcheck cache: %s\n", self.cachefilename)
-							except Exception, e:
-								log.Info("Ignoring garbled toolcheck cache: %s (%s)\n", self.cachefilename, str(e))
-								self.__toolcheckcache = {}
-								
-									
-						else:
-							log.Info("Toolcheck cache %s ignored - environment changed\n", self.cachefilename)
-					else:
-						log.Info("Toolcheck cache not loaded = marker missing: %s %s\n", self.cachefilename, ToolSet.filemarker)
-					f.close()
-				except IOError, e:
-					log.Info("Failed to load toolcheck cache: %s\n", self.cachefilename)
-		else:
-			log.Debug("Toolcheck cachefile not created because EPOCROOT not set in environment.\n")
-
-	def check_shell(self):
-		# The command shell is a critical tool because all the other tools run
-		# within it so we must check for it first. It has to be in the path.
-		# bash 4 is preferred, 3 is accepted
-		try:
-			p = subprocess.Popen(args=[ToolSet.shell, '--version'], bufsize=1024, shell = False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
-			shellversion_out, errtxt = p.communicate()
-			if ToolSet.shell_re.search(shellversion_out) == None:
-				self.log.Error("A critical tool, '%s', did not return the required version '%s':\n%s\nPlease check that '%s' is in the path.", ToolSet.shell, ToolSet.shell_version, shellversion_out, ToolSet.shell)
-				self.valid = False
-		except Exception,e:
-			self.log.Error("A critical tool could not be found.\nPlease check that '%s' is in the path. (%s)", ToolSet.shell,  str(e))
-			self.valid = False
-
-		return self.valid
-
-	def check(self, evaluator, configname):
-		"""Check the toolset for a particular config"""
-
-		self.checked = True # remember that we did check something
-
-		if not self.shellok:
-			self.shellok = self.check_shell()
-		self.shellok = True
-
-		self.valid = self.valid and self.shellok
-
-		cache = self.__toolcheckcache 
-		for tool in evaluator.tools:
-			if not self.forced:
-				try:
-					t = cache[tool.key]
-						
-				except KeyError,e:
-					pass
-				else:
-					# if the cache has an entry for the tool then see if the date on
-					# the tool has changed (assuming the tool is a simple executable file)
-					if t.has_key('date') and (tool.date is None or (tool.date - t['date'] > 0.1))  :
-						self.log.Debug("toolcheck forced: '%s'  changed since the last check: %s < %s", tool.command, str(t['date']), str(tool.date))
-					else:
-						t['age'] = 0 # we used it so it's obviously needed
-						self.valid = self.valid and t['valid']
-						self.log.Debug("toolcheck saved on: '%s'", tool.name)
-						continue
-
-
-			self.log.Debug("toolcheck done: %s -key: %s" % (tool.name, tool.key))
-
-			if not tool.check(ToolSet.shell, evaluator):
-				self.valid = False
-
-			# Tool failures are cached just like successes - don't want to repeat them
-			cache[tool.key] =  { "name" : tool.name, "valid" : tool.valid, "age" : 0 , "date" : tool.date }
-
-
-	def write(self):
-		"""Writes the tool check cache to disc.
-
-		   toolset.write()
-		"""
-		cache = self.__toolcheckcache 
-
-		# Write out the cache.
-		if self.checked and ToolSet.cachefile_basename:
-			self.log.Debug("Saving toolcache: %s", self.cachefilename)
-			try:
-				f = open(self.cachefilename, "w+")
-				f.write(ToolSet.filemarker+"\n")
-				f.write(ToolSet.tool_env_id+"\n")
-				for k,ce in cache.iteritems():
-
-					# If a tool has not been used for an extraordinarily long time
-					# then forget it - to prevent the cache from clogging up with old tools.
-					# Only write entries for tools that were found to be ok - so that the 
-					# next time the ones that weren't will be re-tested
-
-					if ce['valid'] and ce['age'] < 100:
-						ce['age'] += 1
-						f.write("%s," % k)
-						for n,v in ce.iteritems():
-							f.write("%s=%s," % (n,str(v)))
-					f.write("\n")
-				f.close()
-				self.log.Info("Created/Updated toolcheck cache: %s\n", self.cachefilename)
-			except Exception, e:
-				self.log.Info("Could not write toolcheck cache: %s", str(e))
-		return self.valid
-
-
-class Evaluator(object):
-	"""Determine the values of variables under different Configurations.
-	Either of specification and buildUnit may be None."""
-
-
-	refRegex = re.compile("\$\((.+?)\)")
-
-	def __init__(self, Raptor, specification, buildUnit, gathertools = False):
-		self.raptor = Raptor
-		self.dict = {}
-		self.tools = []
-		self.gathertools = gathertools
-
-		specName = "none"
-		configName = "none"
-
-		# A list of lists of operations.
-		opsLists = []
-
-		if buildUnit:
-			opsLists.extend( buildUnit.GetOperations() )
-
-		if specification:
-			for v in specification.GetAllVariantsRecursively():
-				opsLists.extend( v.GetAllOperationsRecursively() )
-
-		tools = {}
-
-		for opsList in opsLists:
-			for op in opsList:
-				# applying an Operation to a non-existent variable
-				# is OK. We assume that it is just an empty string.
-				try:
-					oldValue = self.dict[op.name]
-				except KeyError:
-					oldValue = ""
-
-				newValue = op.Apply(oldValue)
-				self.dict[op.name] = newValue
-			
-				if self.gathertools:
-					if op.type == "tool" and op.versionCommand and op.versionResult:
-						tools[op.name] = Tool(op.name, newValue, op.versionCommand, op.versionResult, configName, log = self.raptor)
-
-
-		if self.gathertools:
-			self.tools = tools.values()
-		else:
-			self.tools=[]
-
-		# resolve inter-variable references in the dictionary
-		unresolved = True
-
-		for k, v in self.dict.items():
-			self.dict[k] = v.replace("$$","__RAPTOR_ESCAPED_DOLLAR__")
-
-		while unresolved:
-			unresolved = False
-			for k, v in self.dict.items():
-				if v.find('$(' + k + ')') != -1:
-					self.raptor.Error("Recursion Detected in variable '%s' in configuration '%s' ",k,configName)
-					expanded = "RECURSIVE_INVALID_STRING"
-				else:
-					expanded = self.ExpandAll(v, specName, configName)
-
-				if expanded != v:				# something changed?
-					self.dict[k] = expanded
-					unresolved = True			# maybe more to do
-
-		# unquote double-dollar references
-		for k, v in self.dict.items():
-			self.dict[k] = v.replace("__RAPTOR_ESCAPED_DOLLAR__","$")
-
-		for t in self.tools:
-			t.expand(self)
-
-
-
-	def Get(self, name):
-		"""return the value of variable 'name' or None if not found."""
-
-		if name in self.dict:
-			return self.dict[name]
-		else:
-			return None
-
-
-	def Resolve(self, name):
-		"""same as Get except that env variables are expanded.
-
-		raises BadReferenceError if the variable 'name' exists but a
-		contained environment variable does not exist."""
-		return self.Get(name) # all variables are now expanded anyway
-
-
-	def ResolveMatching(self, pattern):
-		""" Return a dictionary of all variables that match the pattern """
-		for k,v in self.dict.iteritems():
-			if pattern.match(k):
-				yield (k,v)
-
-
-	def ExpandAll(self, value, spec = "none", config = "none"):
-		"""replace all $(SOMETHING) in the string value.
-
-		returns the newly expanded string."""
-
-		refs = Evaluator.refRegex.findall(value)
-
-		for r in set(refs):
-			expansion = None
-
-			if r in self.raptor.override:
-				expansion = self.raptor.override[r]
-			elif r in self.dict:
-				expansion = self.dict[r]
-			else:
-				# no expansion for $(r)
-				self.raptor.Error("Unset variable '%s' used in spec '%s' with config '%s'",
-							  	  r, spec, config)
-			if expansion != None:
-				value = value.replace("$(" + r + ")", expansion)
-
-		return value
-
-
-# raptor_data module functions
-
-
-# end of the raptor_data module
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_data module
+# This module contains the classes that make up the Raptor Data Model.
+#
+
+import copy
+import generic_path
+import os
+import hashlib
+import raptor_utilities
+import re
+import types
+import sys
+import subprocess
+from tempfile import gettempdir
+from time import time, clock
+
+
+
+# What host platforms we recognise
+# This allows us to tie some variants to one host platform and some to another
+class HostPlatform(object):
+	""" List the host platforms on which we can build.  Allow configuration
+ 	    files to specify different information based on that.
+	"""
+	hostplatforms = ["win32", "win64", "linux2"]
+	hostplatform = sys.platform
+
+	@classmethod
+	def IsKnown(cls, platformpattern):
+		"Does the parameter match the name of a known platform "
+		hpnre = re.compile(platformpattern, re.I)
+		for hp in cls.hostplatforms:
+			if hpnre.match(hp):
+				return True
+		return False
+
+	@classmethod
+	def IsHost(cls, platformpattern):
+		""" Does the parameter match the name of the
+		    platform that we're executing on? """
+		ppre = re.compile(platformpattern, re.I)
+		if ppre.match(cls.hostplatform):
+			return True
+		return False
+
+
+# Make sure not to start up on an unsupported platform
+if not HostPlatform.IsKnown(HostPlatform.hostplatform):
+	raise Exception("raptor_data module loaded on an unrecognised platform '%s'. Expected one of %s" % (hostplatform, str(hostplatforms)))
+
+
+# raptor_data module classes
+
+class Model(object):
+	"Base class for data-model objects"
+
+	def __init__(self):
+		self.owner = None	# Raptor object
+		self.source = None	# XML file
+		self.indent = " "	# for DebugPrint
+		self.host = None
+		self.cacheID = ""	# default set of cached objects
+
+
+	def SetOwner(self, aRaptor):
+		self.owner = aRaptor
+
+
+	def SetSourceFile(self, filename):
+		self.source = filename
+
+
+	def SetProperty(self, name, value):
+		raise InvalidPropertyError()
+
+
+	def AddChild(self, child):
+		raise InvalidChildError()
+
+
+	def DebugPrint(self, prefix = ""):
+		if self.owner:
+			self.owner.Debug("%s", prefix)
+
+	def Valid(self):
+		return False
+
+	def IsApplicable(self):
+		"This variant may be caused to only apply when used on a particular host build platform"
+		if self.host is None:
+			return True
+
+		if HostPlatform.IsHost(self.host):
+			return True
+
+		return False
+
+
+class InvalidPropertyError(Exception):
+	pass
+
+class InvalidChildError(Exception):
+	pass
+
+class BadReferenceError(Exception):
+	pass
+
+
+class Reference(Model):
+	"Base class for data-model reference objects"
+
+	def __init__(self, ref = None):
+		Model.__init__(self)
+		self.ref = ref
+		self.modifiers = []
+
+	def SetProperty(self, name, value):
+		if name == "ref":
+			self.ref = value
+		elif name == "mod":
+			self.modifiers = value.split(".")
+		else:
+			raise InvalidPropertyError()
+
+	def Resolve(self):
+		raise BadReferenceError()
+
+	def GetModifiers(self):
+		cache = self.owner.cache
+		return [ cache.FindNamedVariant(m) for m in self.modifiers ]
+
+	def Valid(self):
+		return self.ref
+
+
+class VariantContainer(Model):
+
+	def __init__(self):
+		Model.__init__(self)	# base class constructor
+		self.variants = []
+
+
+	def SetOwner(self, aRaptor):
+		Model.SetOwner(self, aRaptor)
+		for v in self.variants:
+			v.SetOwner(aRaptor)
+
+
+	def DebugPrint(self, prefix = ""):
+		for v in self.variants:
+			v.DebugPrint(prefix)
+
+
+	def AddVariant(self, variant):
+		if type(variant) is types.StringTypes:
+			variant = VariantRef(variant)
+
+
+		# Only add the variant if it's not in the list
+		# already
+		if not variant in self.variants:
+			self.variants.append(variant)
+
+	def GetVariants(self):
+		# resolve any VariantRef objects into Variant objects
+		for i,var in enumerate(self.variants):
+			if isinstance(var, Reference):
+				try:
+					self.variants[i] = var.Resolve()
+
+				except BadReferenceError:
+					self.owner.Error("Missing variant '%s'", var.ref)
+
+		return self.variants
+
+
+class Interface(Model):
+
+	def __init__(self, name = None):
+		Model.__init__(self)	# base class constructor
+		self.name = name
+		self.flm = None
+		self.abstract = False
+		self.extends = None
+		self.params = []
+		self.paramgroups = []
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<interface name='%s'>", prefix, self.name)
+		self.owner.Debug("%s...", prefix)
+		self.owner.Debug("%s</interface>", prefix)
+
+	def FindParent(self):
+		try:
+			return self.owner.cache.FindNamedInterface(self.extends, self.cacheID)
+		except KeyError:
+			raise BadReferenceError("Cannot extend interface because it cannot be found: "+str(self.extends))
+
+	def GetParams(self):
+		if self.extends != None:
+			parent = self.FindParent()
+
+			# what parameter names do we have already?
+			names = set([x.name for x in self.params])
+
+			# pick up ones we don't have that are in our parent
+			pp = []
+			for p in parent.GetParams():
+				if not p.name in names:
+					pp.append(p)
+
+			# list parent parameters first then ours
+			pp.extend(self.params)
+			return pp
+
+		return self.params
+
+	def GetParamGroups(self):
+		if self.extends != None:
+			parent = self.FindParent()
+
+			# what parameter names do we have already?
+			patterns = set([x.pattern for x in self.paramgroups])
+
+			# pick up ones we don't have that are in our parent
+			for g in parent.GetParamGroups():
+				if not g.pattern in patterns:
+					self.paramgroups.append(g)
+
+		return self.paramgroups
+
+
+	def GetFLMIncludePath(self):
+		"absolute path to the FLM"
+
+		if self.flm == None:
+			if self.extends != None:
+				parent = self.FindParent()
+
+				return parent.GetFLMIncludePath()
+			else:
+				raise InvalidPropertyError()
+
+		if not os.path.isabs(self.flm):
+			self.flm = os.path.join(os.path.dirname(self.source), self.flm)
+
+		return generic_path.Path(self.flm)
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "flm":
+			self.flm = value
+		elif name == "abstract":
+			self.abstract = (value == "true")
+		elif name == "extends":
+			self.extends = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def AddChild(self, child):
+		if isinstance(child, Parameter):
+			self.AddParameter(child)
+		elif isinstance(child, ParameterGroup):
+			self.AddParameterGroup(child)
+		else:
+			raise InvalidChildError()
+
+
+	def AddParameter(self, parameter):
+		self.params.append(parameter)
+
+	def AddParameterGroup(self, parametergroup):
+		self.paramgroups.append(parametergroup)
+
+	def Valid(self):
+		return (self.name != None)
+
+
+class InterfaceRef(Reference):
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<interfaceRef ref='%s'/>", prefix, self.ref)
+
+	def Resolve(self):
+		try:
+			return self.owner.cache.FindNamedInterface(self.ref, self.cacheID)
+		except KeyError:
+			raise BadReferenceError()
+
+
+class Specification(VariantContainer):
+
+	def __init__(self, name = "", type = ""):
+		VariantContainer.__init__(self)	# base class constructor
+		self.name = name
+		self.type = type
+		self.interface = None
+		self.childSpecs = []
+		self.parentSpec = None
+
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<spec name='%s'>", prefix, self.name)
+		if self.interface:
+			self.interface.DebugPrint(prefix + self.indent)
+		VariantContainer.DebugPrint(self, prefix + self.indent)
+		for c in self.childSpecs:
+			c.DebugPrint(prefix + self.indent)
+		self.owner.Debug("%s</spec>", prefix)
+
+
+	def SetOwner(self, aRaptor):
+		VariantContainer.SetOwner(self, aRaptor)
+
+		if self.interface != None:
+			self.interface.SetOwner(aRaptor)
+
+		for s in self.childSpecs:
+			s.SetOwner(aRaptor)
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Configure(self, config):
+		# configure all the children (some may be Filters or parents of)
+		for spec in self.GetChildSpecs():
+			spec.Configure(config)
+
+
+	def HasInterface(self):
+		return self.interface != None
+
+
+	def SetInterface(self, interface):
+		if isinstance(interface, Interface) \
+		or isinstance(interface, InterfaceRef):
+			self.interface = interface
+		else:
+			self.interface = InterfaceRef(interface)
+
+
+	def GetInterface(self):
+		"""return the Interface (fetching from the cache if it was a ref)
+		may return None"""
+
+		if self.interface == None \
+		or isinstance(self.interface, Interface):
+			return self.interface
+
+		if isinstance(self.interface, InterfaceRef):
+			try:
+				self.interface = self.interface.Resolve()
+				return self.interface
+
+			except BadReferenceError:
+				self.owner.Error("Missing interface %s", self.interface.ref)
+				return None
+
+
+	def AddChild(self, child):
+		if isinstance(child, Specification):
+			self.AddChildSpecification(child)
+		elif isinstance(child, Interface) \
+		  or isinstance(child, InterfaceRef):
+			self.SetInterface(child)
+		elif isinstance(child, Variant) \
+		  or isinstance(child, VariantRef):
+			self.AddVariant(child)
+		else:
+			raise InvalidChildError()
+
+
+	def AddChildSpecification(self, child):
+		child.SetParentSpec(self)
+		self.childSpecs.append(child)
+
+
+	def SetParentSpec(self, parent):
+		self.parentSpec = parent
+
+
+	def GetChildSpecs(self):
+		return self.childSpecs
+
+
+	def Valid(self):
+		return True
+
+
+	def GetAllVariantsRecursively(self):
+		"""Returns all variants contained in this node and in its ancestors.
+
+		The returned value is a list, the structure of which is [variants-in-parent,
+		variants-in-self].
+
+		Note that the function recurses through parent *Specifications*, not through
+		the variants themselves.
+		"""
+		if self.parentSpec:
+			variants = self.parentSpec.GetAllVariantsRecursively()
+		else:
+			variants = []
+
+		variants.extend( self.GetVariants() )
+
+		return variants
+
+
+class Filter(Specification):
+	"""A Filter is two Specification nodes and a True/False switch.
+
+	Filter extends Specification to have two nodes, only one of
+	which can be active at any time. Which node is active is determined
+	when the Configure method is called after setting up a Condition.
+
+	If several Conditions are set, the test is an OR of all of them."""
+
+	def __init__(self, name = ""):
+		Specification.__init__(self, name)	# base class constructor
+		self.Else = Specification(name)     # same for Else part
+		self.isTrue = True
+		self.configNames = set()            #
+		self.variableNames = set()          # TO DO: Condition class
+		self.variableValues = {}            #
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<filter name='%s'>", prefix, self.name)
+		self.owner.Debug("%s <if config='%s'>", prefix, " | ".join(self.configNames))
+		Specification.DebugPrint(self, prefix + self.indent)
+		self.owner.Debug("%s </if>", prefix)
+		self.owner.Debug("%s <else>", prefix)
+		self.Else.DebugPrint(prefix + self.indent)
+		self.owner.Debug("%s </else>", prefix)
+		self.owner.Debug("%s</filter>", prefix)
+
+
+	def SetConfigCondition(self, configName):
+		self.configNames = set([configName])
+
+	def AddConfigCondition(self, configName):
+		self.configNames.add(configName)
+
+
+	def SetVariableCondition(self, variableName, variableValues):
+		self.variableNames = set([variableName])
+		if type(variableValues) == types.ListType:
+			self.variableValues[variableName] = set(variableValues)
+		else:
+			self.variableValues[variableName] = set([variableValues])
+
+	def AddVariableCondition(self, variableName, variableValues):
+		self.variableNames.add(variableName)
+		if type(variableValues) == types.ListType:
+			self.variableValues[variableName] = set(variableValues)
+		else:
+			self.variableValues[variableName] = set([variableValues])
+
+
+	def Configure(self, buildUnit):
+		self.isTrue = False
+
+		if buildUnit.name in self.configNames:
+			self.isTrue = True
+		elif self.variableNames:
+			evaluator = self.owner.GetEvaluator(self.parentSpec, buildUnit)
+
+			for variableName in self.variableNames:
+				variableValue = evaluator.Get(variableName)
+
+				if variableValue in self.variableValues[variableName]:
+					self.isTrue = True
+					break
+
+		# configure all the children too
+		for spec in self.GetChildSpecs():
+			spec.Configure(buildUnit)
+
+
+	def SetOwner(self, aRaptor):
+		# base class method
+		Specification.SetOwner(self, aRaptor)
+		# same for Else part
+		self.Else.SetOwner(aRaptor)
+
+
+	def HasInterface(self):
+		if self.isTrue:
+			return Specification.HasInterface(self)
+		else:
+			return self.Else.HasInterface()
+
+
+	def GetInterface(self):
+		if self.isTrue:
+			return Specification.GetInterface(self)
+		else:
+			return self.Else.GetInterface()
+
+
+	def GetVariants(self):
+		if self.isTrue:
+			return Specification.GetVariants(self)
+		else:
+			return self.Else.GetVariants()
+
+
+	def SetParentSpec(self, parent):
+		# base class method
+		Specification.SetParentSpec(self, parent)
+		# same for Else part
+		self.Else.SetParentSpec(parent)
+
+
+	def GetChildSpecs(self):
+		if self.isTrue:
+			return Specification.GetChildSpecs(self)
+		else:
+			return self.Else.GetChildSpecs()
+
+
+class Parameter(Model):
+
+	def __init__(self, name = None, default = None):
+		Model.__init__(self)	# base class constructor
+		self.name = name
+		self.default = default
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "default":
+			self.default = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Valid(self):
+		return (self.name != None)
+
+class ParameterGroup(Model):
+	"""A group of Parameters specified in an interface by a regexp"""
+	def __init__(self, pattern = None, default = None):
+		Model.__init__(self)	# base class constructor
+		self.pattern = pattern
+
+		self.patternre = None
+		if pattern:
+			try:
+				self.patternre = re.compile(pattern)
+			except TypeError:
+				pass
+		self.default = default
+
+
+	def SetProperty(self, pattern, value):
+		if pattern == "pattern":
+			self.pattern = value
+			self.patternre = re.compile(value)
+		elif pattern == "default":
+			self.default = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Valid(self):
+		return (self.pattern != None and self.patternre != None)
+
+
+class Operation(Model):
+	"Base class for variant operations"
+	def __init__(self):
+		Model.__init__(self)	# base class constructor
+		self.type = None
+
+
+	def Apply(self, oldValue):
+		pass
+
+
+class Append(Operation):
+	__slots__ = ('name','value','separator','owner')
+
+	def __init__(self, name = None, value = None, separator = " "):
+		Operation.__init__(self)	# base class constructor
+		self.name = name
+		self.value = value
+		self.separator = separator
+
+
+	def DebugPrint(self, prefix = ""):
+		attributes = "name='" + self.name + "' value='" + self.value + "' separator='" + self.separator + "'"
+		self.owner.Debug("%s<append %s/>", prefix, attributes)
+
+
+	def Apply(self, oldValue):
+		if len(oldValue) > 0:
+			if len(self.value) > 0:
+				return oldValue + self.separator + self.value
+			else:
+				return oldValue
+		else:
+			return self.value
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "value":
+			self.value = value
+		elif name == "separator":
+			self.separator = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Valid(self):
+		return (self.name != None and self.value != None)
+
+
+class Prepend(Operation):
+	def __init__(self, name = None, value = None, separator = " "):
+		Operation.__init__(self)	# base class constructor
+		self.name = name
+		self.value = value
+		self.separator = separator
+
+
+	def DebugPrint(self, prefix = ""):
+		attributes = "name='" + self.name + "' value='" + self.value + "' separator='" + self.separator + "'"
+		self.owner.Debug("%s<prepend %s/>", prefix, attributes)
+
+
+	def Apply(self, oldValue):
+		if len(oldValue) > 0:
+			if len(self.value) > 0:
+				return self.value + self.separator + oldValue
+			else:
+				return oldValue
+		else:
+			return self.value
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "value":
+			self.value = value
+		elif name == "separator":
+			self.separator = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Valid(self):
+		return (self.name != None and self.value != None)
+
+
+class Set(Operation):
+	"""implementation of <set> operation"""
+	__slots__ = ('name','value', 'type', 'versionCommand', 'versionResult', 'owner')
+
+	def __init__(self, name = None, value = "", type = ""):
+		Operation.__init__(self)	# base class constructor
+		self.name = name
+		self.value = value
+		self.type = type
+		self.versionCommand = ""
+		self.versionResult = ""
+
+
+	def DebugPrint(self, prefix = ""):
+		attributes = "name='" + self.name + "' value='" + self.value + "' type='" + self.type + "'"
+		if type == "tool":
+			attributes += " versionCommand='" + self.versionCommand + "' versionResult='" + self.versionResult
+
+		self.owner.Debug("%s<set %s/>", prefix, attributes)
+
+
+	def Apply(self, oldValue):
+		return self.value
+
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "value":
+			self.value = value
+		elif name == "type":
+			self.type = value
+		elif name == "versionCommand":
+			self.versionCommand = value
+		elif name == "versionResult":
+			self.versionResult = value
+		elif name == "host":
+			if HostPlatform.IsKnown(value):
+				self.host = value
+		else:
+			raise InvalidPropertyError()
+
+
+	def Valid(self):
+		return (self.name != None and self.value != None)
+
+
+class Env(Set):
+	"""implementation of <env> operator"""
+
+	def __init__(self, name = None, default = None, type = ""):
+		Set.__init__(self, name, "", type)	# base class constructor
+		self.default = default
+
+
+	def DebugPrint(self, prefix = ""):
+		attributes = "name='" + self.name + "' type='" + self.type + "'"
+		if default != None:
+			attributes += " default='" + self.default + "'"
+
+		if type == "tool":
+			attributes += " versionCommand='" + self.versionCommand + "' versionResult='" + self.versionResult + "'"
+
+		self.owner.Debug("%s<env %s/>", prefix, attributes)
+
+
+	def Apply(self, oldValue):
+		try:
+			value = os.environ[self.name]
+
+			# if this value is a "path" or a "tool" then we need to make sure
+			# it is a proper absolute path in our preferred format.
+			if value and (self.type == "path" or self.type == "tool"):
+				try:
+					path = generic_path.Path(value)
+					value = str(path.Absolute())
+				except ValueError,e:
+					self.owner.Error("the environment variable %s is incorrect: %s" % (self.name, str(e)))
+					return "NO_VALUE_FOR_" + self.name
+		except KeyError:
+			if self.default != None:
+				value = self.default
+			else:
+				self.owner.Error("%s is not set in the environment and has no default", self.name)
+				return "NO_VALUE_FOR_" + self.name
+
+		return value
+
+
+	def SetProperty(self, name, value):
+		if name == "default":
+			self.default = value
+		else:
+			Set.SetProperty(self, name, value)
+
+
+	def Valid(self):
+		return (self.name != None)
+
+
+class BuildUnit(object):
+	"Represents an individual buildable unit."
+
+	def __init__(self, name, variants):
+		self.name = name
+		
+		# A list of Variant objects.
+		self.variants = variants
+
+		# Cache for the variant operations implied by this BuildUnit.
+		self.operations = []
+		self.variantKey = ""
+
+	def GetOperations(self):
+		"""Return all operations related to this BuildUnit.
+		
+		The result is cached, and so will only be computed once per BuildUnit.
+		"""
+		key = '.'.join([x.name for x in self.variants])
+		if self.variantKey != key:
+			self.variantKey = key
+			for v in self.variants:
+				self.operations.extend( v.GetAllOperationsRecursively() )
+
+		return self.operations
+
+class Config(object):
+	"""Abstract type representing an argument to the '-c' option.
+
+	The fundamental property of a Config is that it can generate one or more
+	BuildUnits.
+	"""
+
+	def __init__(self):
+		self.modifiers = []
+
+	def AddModifier(self, variant):
+		self.modifiers.append(variant)
+
+	def ClearModifiers(self):
+		self.modifiers = []
+
+	def GenerateBuildUnits(self):
+		"""Returns a list of BuildUnits.
+
+		This function must be overridden by derived classes.
+		"""
+		raise NotImplementedError()
+
+
+class Variant(Model, Config):
+
+	def __init__(self, name = ""):
+		Model.__init__(self)
+		Config.__init__(self)
+		self.name = name
+
+		# Operations defined inside this variant.
+		self.ops = []
+
+		# The name of our parent variant, if any.
+		self.extends = ""
+
+		# Any variant references used inside this variant.
+		self.variantRefs = []
+
+		self.allOperations = []
+
+	def SetProperty(self, name, value):
+		if name == "name":
+			self.name = value
+		elif name == "host":
+			if HostPlatform.IsKnown(value):
+				self.host = value
+		elif name == "extends":
+			self.extends = value
+		else:
+			raise InvalidPropertyError()
+
+	def AddChild(self, child):
+		if isinstance(child, Operation):
+			self.ops.append(child)
+		elif isinstance(child, VariantRef):
+			self.variantRefs.append(child)
+		else:
+			raise InvalidChildError()
+
+	def Valid(self):
+		return self.name
+
+	def SetOwner(self, aRaptor):
+
+		Model.SetOwner(self, aRaptor)
+
+		for r in self.variantRefs:
+			r.SetOwner(aRaptor)
+
+		for op in self.ops:
+			op.SetOwner(aRaptor)
+
+	def AddOperation(self, op):
+		self.ops.append(op)
+
+	def GetAllOperationsRecursively(self):
+		"""Returns a list of all operations in this variant.
+
+		The list elements are themselves lists; the overall structure of the
+		returned value is:
+
+		[ [ops-from-parent],[ops-from-varRefs], [ops-in-self] ]
+		"""
+
+		if not self.allOperations:
+			if self.extends:
+				parent = self.owner.cache.FindNamedVariant(self.extends)
+				self.allOperations.extend( parent.GetAllOperationsRecursively() )
+			for r in self.variantRefs:
+				for v in [ r.Resolve() ] + r.GetModifiers():
+					self.allOperations.extend( v.GetAllOperationsRecursively() )
+			self.allOperations.append(self.ops)
+
+		return self.allOperations
+
+	def GenerateBuildUnits(self):
+
+		name = self.name
+		vars = [self]
+
+		for m in self.modifiers:
+			name = name + "." + m.name
+			vars.append(m)
+
+		return [ BuildUnit(name, vars) ]
+
+	def DebugPrint(self, prefix = ""):
+
+		self.owner.Debug("%s<var name='%s' extends='%s'>", prefix, self.name, self.extends)
+		for op in self.ops:
+			op.DebugPrint(prefix + self.indent)
+
+		self.owner.Debug("%s</var>", prefix)
+
+
+class VariantRef(Reference):
+
+	def __init__(self, ref=None):
+		Reference.__init__(self, ref)
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<varRef ref='%s'/>", prefix, self.ref)
+
+	def Resolve(self):
+		try:
+			return self.owner.cache.FindNamedVariant(self.ref)
+		except KeyError:
+			raise BadReferenceError(self.ref)
+
+
+class Alias(Model, Config):
+
+	def __init__(self, name=""):
+		Model.__init__(self)
+		Config.__init__(self)
+		self.name = name
+		self.meaning = ""
+		self.varRefs = []
+		self.variants = []
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<alias name='%s' meaning='%s'/>", prefix, self.name, self.meaning)
+
+	def SetProperty(self, key, val):
+		if key == "name":
+			self.name = val
+		elif key == "meaning":
+			self.meaning = val
+
+			for u in val.split("."):
+				self.varRefs.append( VariantRef(u) )
+		else:
+			raise InvalidPropertyError()
+
+	def SetOwner(self, raptor):
+		Model.SetOwner(self, raptor)
+		for r in self.varRefs:
+			r.SetOwner(raptor)
+
+	def Valid(self):
+		return self.name and self.meaning
+
+	def GenerateBuildUnits(self):
+		if not self.variants:
+			for r in self.varRefs:
+				try:
+					self.variants.append( r.Resolve() )
+				except BadReferenceError:
+					self.owner.Error("Missing variant '%s'", r.ref)
+
+		name = self.name
+
+		for v in self.modifiers:
+			name = name + "." + v.name
+
+		return [ BuildUnit(name, self.variants + self.modifiers) ]
+
+
+class AliasRef(Reference):
+
+	def __init__(self, ref=None):
+		Reference.__init__(self, ref)
+
+	def DebugPrint(self, prefix = ""):
+		self.owner.Debug("%s<aliasRef ref='%s'/>", prefix, self.ref)
+
+	def Resolve(self):
+		try:
+			return self.owner.cache.FindNamedAlias(self.ref)
+		except KeyError:
+			raise BadReferenceError(self.ref)
+
+
+class Group(Model, Config):
+	def __init__(self, name=""):
+		Model.__init__(self)
+		Config.__init__(self)
+		self.name = name
+		self.childRefs = []
+
+	def SetProperty(self, key, val):
+		if key == "name":
+			self.name = val
+		else:
+			raise InvalidPropertyError()
+
+	def AddChild(self, child):
+		if isinstance( child, (VariantRef,AliasRef,GroupRef) ):
+			self.childRefs.append(child)
+		else:
+			raise InvalidChildError()
+
+	def SetOwner(self, raptor):
+		Model.SetOwner(self, raptor)
+		for r in self.childRefs:
+			r.SetOwner(raptor)
+
+	def Valid(self):
+		return self.name and self.childRefs
+
+	def DebugPrint(self, prefix = ""):
+
+		self.owner.Debug("<group name='%s'>", prefix, self.name)
+
+		for r in self.childRefs:
+			r.DebugPrint(prefix + self.indent)
+
+		self.owner.Debug("%s</group>", prefix)
+
+	def GenerateBuildUnits(self):
+
+		units = []
+
+		for r in self.childRefs:
+			refMods = r.GetModifiers()
+
+			try:
+				obj = r.Resolve()
+			except BadReferenceError:
+				self.owner.Error("Missing variant '%s'", r.ref)
+			else:
+				obj.ClearModifiers()
+
+				for m in refMods + self.modifiers:
+					obj.AddModifier(m)
+
+				units.extend( obj.GenerateBuildUnits() )
+
+		return units
+
+
+class GroupRef(Reference):
+
+	def __init__(self, ref=None):
+		Reference.__init__(self, ref)
+
+	def DebugPrint(self, prefix = ""):
+		mod = ".".join(self.modifiers)
+		self.owner.Debug("%s<groupRef ref='%s' mod='%s'/>", prefix, self.ref, mod)
+
+	def Resolve(self):
+		try:
+			return self.owner.cache.FindNamedGroup(self.ref)
+		except KeyError:
+			raise BadReferenceError(self.ref)
+
+class Tool(object):
+	"""Represents a tool that might be used by raptor e.g. a compiler"""
+
+	# For use in dealing with tools that return non-ascii version strings.
+	nonascii = ""
+	identity_chartable = chr(0)
+	for c in xrange(1,128):
+		identity_chartable += chr(c)
+	for c in xrange(128,256):
+		nonascii += chr(c)
+		identity_chartable += " "
+
+	def __init__(self, name, command, versioncommand, versionresult, id="", log = raptor_utilities.nulllog):
+		self.name = name
+		self.command = command
+		self.versioncommand = versioncommand
+		self.versionresult = versionresult
+		self.id = id # what config this is from - used in debug messages
+		self.date = None
+
+
+		# Assume the tool is unavailable or the wrong
+		# version until someone proves that it's OK
+		self.valid = False
+
+		self.log=log
+
+	def expand(self, toolset):
+		self.versioncommand = toolset.ExpandAll(self.versioncommand)
+		self.versionresult  = toolset.ExpandAll(self.versionresult)
+		self.command = toolset.ExpandAll(self.command)
+		self.key = hashlib.md5(self.versioncommand + self.versionresult).hexdigest()
+		
+		# We need the tool's date to find out if we should check it.
+		try:
+			if '/' in self.command:
+				testfile = os.path.abspath(self.command.strip("\"'"))
+			else:
+				# The tool isn't a relative or absolute path so the could be relying on the 
+				# $PATH variable to make it available.  We must find the tool if it's a simple 
+				# executable file (e.g. "armcc" rather than "python myscript.py") then get it's date. 
+				# We can use the date later to see if our cache is valid. 
+				# If it really is not a simple command then we won't be able to get a date and
+				# we won't be able to tell if it is altered or updated - too bad!
+				testfile = generic_path.Where(self.command)
+				self.log.Debug("toolcheck: tool '%s' was found on the path at '%s' ", self.command, testfile)
+				if testfile is None:
+					raise Exception("Can't be found in path")
+
+			if not os.path.isfile(testfile):
+				raise Exception("tool %s appears to not be a file %s", self.command, testfile)
+				
+			testfile_stat = os.stat(testfile)
+			self.date = testfile_stat.st_mtime
+		except Exception,e:
+			self.log.Debug("toolcheck: '%s=%s' cannot be dated - this is ok, but the toolcheck won't be able to tell when a new  of the tool is installed. (%s)", self.name, self.command, str(e))
+	
+			
+	def check(self, shell, evaluator):
+
+		self.vre = re.compile(self.versionresult)
+
+		try:
+			self.log.Debug("Pre toolcheck: '%s' for version '%s'", self.name, self.versionresult)
+			p = subprocess.Popen(args=[shell, "-c", self.versioncommand], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+			versionoutput,err = p.communicate()
+			self.log.Debug("Checking tool '%s' for version '%s'", self.name, self.versionresult)
+		except Exception,e:
+			versionoutput=None
+
+		# Some tools return version strings with unicode characters! 
+		# There is no good response other than a lot of decoding and encoding.
+		# Simpler to ignore it:
+		versionoutput_a = versionoutput.translate(Tool.identity_chartable,"")
+
+		if versionoutput_a and self.vre.search(versionoutput_a) != None:
+			self.log.Debug("tool '%s' returned an acceptable version '%s' at %s", self.name, versionoutput_a, str(self.date))
+			self.valid = True
+		else:
+			self.log.Error("tool '%s' from config '%s' did not return version '%s' as required.\nCommand '%s' returned:\n%s\nCheck your environment and configuration.\n", self.name, self.id, self.versionresult, self.versioncommand, versionoutput_a)
+			self.valid = False
+		return self.valid
+
+def envhash(irrelevant_vars):
+	"""Determine something unique about this environment to identify it.
+	must ignore variables that change without mattering to the caller
+	e.g. perhaps PATH matters but PWD and PPID don't"""
+	envid = hashlib.md5()
+	for k in os.environ:
+		if k not in irrelevant_vars:
+			envid.update(os.environ[k])
+	return envid.hexdigest()[:16]
+
+
+class ToolSet(object):
+	""" 
+	This class manages a bunch of tools and keeps a cache of
+	all tools that it ever sees (across all configurations).
+	toolset.check() is called for each config but the cache is kept across calls to
+	catch the use of one tool in many configs.
+	write() is used to flush the cache to disc.
+	"""
+	# The raptor shell - this is not mutable.
+	hostbinaries = os.path.join(os.environ['SBS_HOME'], 
+	                            os.environ['HOSTPLATFORM_DIR'])
+	                            
+	if HostPlatform.IsHost('lin*'):
+		shell=os.path.join(hostbinaries, 'bin/bash')
+	else:
+		if 'SBS_CYGWIN' in os.environ:
+			shell=os.path.join(os.environ['SBS_CYGWIN'], 'bin\\bash.exe')
+		else:
+			shell=os.path.join(hostbinaries, 'cygwin\\bin\\bash.exe')
+
+
+	irrelevant_vars = ['PWD','OLDPWD','PID','PPID', 'SHLVL' ]
+
+
+	shell_version=".*GNU bash, version [34].*"
+	shell_re = re.compile(shell_version)
+	if 'SBS_BUILD_DIR' in os.environ:
+		cachefile_basename = str(generic_path.Join(os.environ['SBS_BUILD_DIR'],"toolcheck_cache_"))
+	elif 'EPOCROOT' in os.environ:
+		cachefile_basename = str(generic_path.Join(os.environ['EPOCROOT'],"epoc32/build/toolcheck_cache_"))
+	else:
+		cachefile_basename = None
+
+	tool_env_id = envhash(irrelevant_vars)
+	filemarker = "sbs_toolcache_2.8.2"
+
+	def __init__(self, log = raptor_utilities.nulllog, forced=False):
+		self.__toolcheckcache = {}
+
+		self.valid = True
+		self.checked = False
+		self.shellok = False
+		self.configname=""
+		self.cache_loaded = False
+		self.forced = forced
+
+		self.log=log
+
+		# Read in the tool cache
+		#
+		# The cache format is a hash key which identifies the
+		# command and the version that we're checking for. Then
+		# there are name,value pairs that record, e.g. the date
+		# of the command file or the name of the variable that
+		# the config uses for the tool (GNUCP or MWCC or whatever)
+
+		if ToolSet.cachefile_basename:
+			self.cachefilename = ToolSet.cachefile_basename+".tmp"
+			if not self.forced:
+				try:
+					f = open(self.cachefilename, "r+")
+					# if this tool cache was recorded in
+					# a different environment then ignore it.
+					marker = f.readline().rstrip("\r\n")
+					if marker == ToolSet.filemarker:
+						env_id_tmp = f.readline().rstrip("\r\n")
+						if env_id_tmp == ToolSet.tool_env_id:
+							try:
+								for l in f.readlines():
+									toolhistory  = l.rstrip(",\n\r").split(",")
+									ce = {}
+									for i in toolhistory[1:]:
+										(name,val) = i.split("=")
+										if name == "valid":
+											val = bool(val)
+										elif name == "age":
+											val = int(val)
+										elif name == "date":
+											if val != "None":
+												val = float(val)
+											else:
+												val= None
+
+										ce[name] = val
+									self.__toolcheckcache[toolhistory[0]] = ce
+								log.Info("Loaded toolcheck cache: %s\n", self.cachefilename)
+							except Exception, e:
+								log.Info("Ignoring garbled toolcheck cache: %s (%s)\n", self.cachefilename, str(e))
+								self.__toolcheckcache = {}
+								
+									
+						else:
+							log.Info("Toolcheck cache %s ignored - environment changed\n", self.cachefilename)
+					else:
+						log.Info("Toolcheck cache not loaded = marker missing: %s %s\n", self.cachefilename, ToolSet.filemarker)
+					f.close()
+				except IOError, e:
+					log.Info("Failed to load toolcheck cache: %s\n", self.cachefilename)
+		else:
+			log.Debug("Toolcheck cachefile not created because EPOCROOT not set in environment.\n")
+
+	def check_shell(self):
+		# The command shell is a critical tool because all the other tools run
+		# within it so we must check for it first. It has to be in the path.
+		# bash 4 is preferred, 3 is accepted
+		try:
+			p = subprocess.Popen(args=[ToolSet.shell, '--version'], bufsize=1024, shell = False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
+			shellversion_out, errtxt = p.communicate()
+			if ToolSet.shell_re.search(shellversion_out) == None:
+				self.log.Error("A critical tool, '%s', did not return the required version '%s':\n%s\nPlease check that '%s' is in the path.", ToolSet.shell, ToolSet.shell_version, shellversion_out, ToolSet.shell)
+				self.valid = False
+		except Exception,e:
+			self.log.Error("A critical tool could not be found.\nPlease check that '%s' is in the path. (%s)", ToolSet.shell,  str(e))
+			self.valid = False
+
+		return self.valid
+
+	def check(self, evaluator, configname):
+		"""Check the toolset for a particular config"""
+
+		self.checked = True # remember that we did check something
+
+		if not self.shellok:
+			self.shellok = self.check_shell()
+		self.shellok = True
+
+		self.valid = self.valid and self.shellok
+
+		cache = self.__toolcheckcache 
+		for tool in evaluator.tools:
+			if not self.forced:
+				try:
+					t = cache[tool.key]
+						
+				except KeyError,e:
+					pass
+				else:
+					# if the cache has an entry for the tool then see if the date on
+					# the tool has changed (assuming the tool is a simple executable file)
+					if t.has_key('date') and (tool.date is None or (tool.date - t['date'] > 0.1))  :
+						self.log.Debug("toolcheck forced: '%s'  changed since the last check: %s < %s", tool.command, str(t['date']), str(tool.date))
+					else:
+						t['age'] = 0 # we used it so it's obviously needed
+						self.valid = self.valid and t['valid']
+						self.log.Debug("toolcheck saved on: '%s'", tool.name)
+						continue
+
+
+			self.log.Debug("toolcheck done: %s -key: %s" % (tool.name, tool.key))
+
+			if not tool.check(ToolSet.shell, evaluator):
+				self.valid = False
+
+			# Tool failures are cached just like successes - don't want to repeat them
+			cache[tool.key] =  { "name" : tool.name, "valid" : tool.valid, "age" : 0 , "date" : tool.date }
+
+
+	def write(self):
+		"""Writes the tool check cache to disc.
+
+		   toolset.write()
+		"""
+		cache = self.__toolcheckcache 
+
+		# Write out the cache.
+		if self.checked and ToolSet.cachefile_basename:
+			self.log.Debug("Saving toolcache: %s", self.cachefilename)
+			try:
+				f = open(self.cachefilename, "w+")
+				f.write(ToolSet.filemarker+"\n")
+				f.write(ToolSet.tool_env_id+"\n")
+				for k,ce in cache.iteritems():
+
+					# If a tool has not been used for an extraordinarily long time
+					# then forget it - to prevent the cache from clogging up with old tools.
+					# Only write entries for tools that were found to be ok - so that the 
+					# next time the ones that weren't will be re-tested
+
+					if ce['valid'] and ce['age'] < 100:
+						ce['age'] += 1
+						f.write("%s," % k)
+						for n,v in ce.iteritems():
+							f.write("%s=%s," % (n,str(v)))
+					f.write("\n")
+				f.close()
+				self.log.Info("Created/Updated toolcheck cache: %s\n", self.cachefilename)
+			except Exception, e:
+				self.log.Info("Could not write toolcheck cache: %s", str(e))
+		return self.valid
+
+
+class Evaluator(object):
+	"""Determine the values of variables under different Configurations.
+	Either of specification and buildUnit may be None."""
+
+
+	refRegex = re.compile("\$\((.+?)\)")
+
+	def __init__(self, Raptor, specification, buildUnit, gathertools = False):
+		self.raptor = Raptor
+		self.dict = {}
+		self.tools = []
+		self.gathertools = gathertools
+
+		specName = "none"
+		configName = "none"
+
+		# A list of lists of operations.
+		opsLists = []
+
+		if buildUnit:
+			opsLists.extend( buildUnit.GetOperations() )
+
+		if specification:
+			for v in specification.GetAllVariantsRecursively():
+				opsLists.extend( v.GetAllOperationsRecursively() )
+
+		tools = {}
+
+		for opsList in opsLists:
+			for op in opsList:
+				# applying an Operation to a non-existent variable
+				# is OK. We assume that it is just an empty string.
+				try:
+					oldValue = self.dict[op.name]
+				except KeyError:
+					oldValue = ""
+
+				newValue = op.Apply(oldValue)
+				self.dict[op.name] = newValue
+			
+				if self.gathertools:
+					if op.type == "tool" and op.versionCommand and op.versionResult:
+						tools[op.name] = Tool(op.name, newValue, op.versionCommand, op.versionResult, configName, log = self.raptor)
+
+
+		if self.gathertools:
+			self.tools = tools.values()
+		else:
+			self.tools=[]
+
+		# resolve inter-variable references in the dictionary
+		unresolved = True
+
+		for k, v in self.dict.items():
+			self.dict[k] = v.replace("$$","__RAPTOR_ESCAPED_DOLLAR__")
+
+		while unresolved:
+			unresolved = False
+			for k, v in self.dict.items():
+				if v.find('$(' + k + ')') != -1:
+					self.raptor.Error("Recursion Detected in variable '%s' in configuration '%s' ",k,configName)
+					expanded = "RECURSIVE_INVALID_STRING"
+				else:
+					expanded = self.ExpandAll(v, specName, configName)
+
+				if expanded != v:				# something changed?
+					self.dict[k] = expanded
+					unresolved = True			# maybe more to do
+
+		# unquote double-dollar references
+		for k, v in self.dict.items():
+			self.dict[k] = v.replace("__RAPTOR_ESCAPED_DOLLAR__","$")
+
+		for t in self.tools:
+			t.expand(self)
+
+
+
+	def Get(self, name):
+		"""return the value of variable 'name' or None if not found."""
+
+		if name in self.dict:
+			return self.dict[name]
+		else:
+			return None
+
+
+	def Resolve(self, name):
+		"""same as Get except that env variables are expanded.
+
+		raises BadReferenceError if the variable 'name' exists but a
+		contained environment variable does not exist."""
+		return self.Get(name) # all variables are now expanded anyway
+
+
+	def ResolveMatching(self, pattern):
+		""" Return a dictionary of all variables that match the pattern """
+		for k,v in self.dict.iteritems():
+			if pattern.match(k):
+				yield (k,v)
+
+
+	def ExpandAll(self, value, spec = "none", config = "none"):
+		"""replace all $(SOMETHING) in the string value.
+
+		returns the newly expanded string."""
+
+		refs = Evaluator.refRegex.findall(value)
+
+		for r in set(refs):
+			expansion = None
+
+			if r in self.raptor.override:
+				expansion = self.raptor.override[r]
+			elif r in self.dict:
+				expansion = self.dict[r]
+			else:
+				# no expansion for $(r)
+				self.raptor.Error("Unset variable '%s' used in spec '%s' with config '%s'",
+							  	  r, spec, config)
+			if expansion != None:
+				value = value.replace("$(" + r + ")", expansion)
+
+		return value
+
+
+# raptor_data module functions
+
+
+# end of the raptor_data module
--- a/sbsv2/raptor/python/raptor_make.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_make.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,563 +1,563 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_make module
-# This module contains the classes that write and call Makefile wrappers.
-#
-
-import hashlib
-import os
-import random
-import raptor
-import raptor_data
-import raptor_utilities
-import raptor_version
-import re
-import subprocess
-import time
-from raptor_makefile import *
-
-# raptor_make module classes
-
-class MakeEngine(object):
-
-	def __init__(self, Raptor):
-		self.raptor = Raptor
-		self.valid = True
-		self.makefileset = None
-		self.descrambler = None
-		self.descrambler_started = False
-
-		engine = Raptor.makeEngine
-		
-		# look for an alias first as this gives end-users a chance to modify
-		# the shipped variant rather than completely replacing it.
-		if engine in Raptor.cache.aliases:
-			avar = Raptor.cache.FindNamedAlias(engine)
-		elif engine in Raptor.cache.variants:
-			avar = Raptor.cache.FindNamedVariant(engine)
-		else:
-			Raptor.Error("No settings found for build engine '%s'", engine)
-			return
-					
-		# find the variant and extract the values
-		try:
-			units = avar.GenerateBuildUnits()
-			evaluator = Raptor.GetEvaluator( None, units[0] , gathertools=True)
-
-			# shell
-			self.shellpath = evaluator.Get("DEFAULT_SHELL")
-			usetalon_s = evaluator.Get("USE_TALON") 
-			self.usetalon = usetalon_s is not None and usetalon_s != ""
-			self.talonshell = str(evaluator.Get("TALON_SHELL"))
-			self.talontimeout = str(evaluator.Get("TALON_TIMEOUT"))
-			self.talonretries = str(evaluator.Get("TALON_RETRIES"))
-
-			# commands
-			self.initCommand = evaluator.Get("initialise")
-			self.buildCommand = evaluator.Get("build")
-			self.shutdownCommand = evaluator.Get("shutdown")
-
-			# options
-			self.makefileOption = evaluator.Get("makefile")
-			self.keepGoingOption = evaluator.Get("keep_going")
-			self.jobsOption = evaluator.Get("jobs")
-			self.defaultMakeOptions = evaluator.Get("defaultoptions")
-
-			# buffering
-			self.scrambled = (evaluator.Get("scrambled") == "true")
-
-			# check tool versions
-			Raptor.CheckToolset(evaluator, avar.name)
-			
-			# default targets (can vary per-invocation)
-			self.defaultTargets = Raptor.defaultTargets
-
-			# work out how to split up makefiles
-			try:
-				selectorNames = [ x.strip() for x in evaluator.Get("selectors").split(',') if x.strip() != "" ]
-				self.selectors = []
-
-
-				if len(selectorNames) > 0:
-					for name in selectorNames:
-						pattern = evaluator.Get(name.strip() + ".selector.iface")
-						target = evaluator.Get(name.strip() + ".selector.target")
-						ignoretargets = evaluator.Get(name.strip() + ".selector.ignoretargets")
-						self.selectors.append(MakefileSelector(name,pattern,target,ignoretargets))
-			except KeyError:
-				Raptor.Error("%s.selector.iface, %s.selector.target not found in make engine configuration", name, name)
-				self.selectors = []
-
-		except KeyError:
-			Raptor.Error("Bad '%s' configuration found.", engine)
-			self.valid = False
-			return
-
-		# there must at least be a build command...
-		if not self.buildCommand:
-				Raptor.Error("No build command for '%s'", engine)
-				self.valid = False
-
-
-		if self.usetalon:
-			talon_settings="""
-TALON_SHELL:=%s
-TALON_TIMEOUT:=%s
-TALON_RECIPEATTRIBUTES:=\
- name='$$RECIPE'\
- target='$$TARGET'\
- host='$$HOSTNAME'\
- layer='$$COMPONENT_LAYER'\
- component='$$COMPONENT_NAME'\
- bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
- config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
- phase='$$MAKEFILE_GROUP' source='$$SOURCE
-export TALON_RECIPEATTRIBUTES TALON_SHELL TALON_TIMEOUT
-USE_TALON:=%s
-
-""" % (self.talonshell, self.talontimeout, "1")
-		else:
-			talon_settings="""
-USE_TALON:=
-
-"""
-		
-
-		self.makefile_prologue = """
-# generated by %s %s
-
-HOSTPLATFORM:=%s
-HOSTPLATFORM_DIR:=%s
-OSTYPE:=%s
-FLMHOME:=%s
-SHELL:=%s
-
-%s
-
-include %s
-
-""" 		% (  raptor.name, raptor_version.Version(),
-			 " ".join(raptor.hostplatform),
-			 raptor.hostplatform_dir,
-			 self.raptor.filesystem,
-			 str(self.raptor.systemFLM),
-			 self.shellpath,
-			 talon_settings,
-			 self.raptor.systemFLM.Append('globals.mk') )
-
-
-		self.makefile_epilogue = """
-
-include %s
-
-""" 			% (self.raptor.systemFLM.Append('final.mk') )
-
-	def Write(self, toplevel, specs, configs):
-		"""Generate a set of makefiles, or one big Makefile."""
-
-		if not self.valid:
-			return
-
-		self.toplevel = toplevel
-
-		# create the top-level makefiles
-
-		try:
-			self.makefileset = MakefileSet(directory = str(toplevel.Dir()),
-										   selectors = self.selectors,
-										   filenamebase = str(toplevel.File()),
-										   prologue = self.makefile_prologue,
-										   epilogue = self.makefile_epilogue,
-										   defaulttargets = self.defaultTargets)
-
-			# are we pruning duplicates?
-			self.prune = self.raptor.pruneDuplicateMakefiles
-			self.hashes = set()
-
-			# are we writing one Makefile or lots?
-			self.many = not self.raptor.writeSingleMakefile
-
-			# add a makefile for each spec under each config
-			config_makefileset = self.makefileset
-
-			for c in configs:
-				if self.many:
-					config_makefileset = self.makefileset.createChild(c.name)
-
-				# make sure the config_wide spec item is put out first so that it
-				# can affect everything.
-				ordered_specs=[]
-				config_wide_spec = None
-				for s in specs:
-					if s.name == "config_wide":
-						config_wide_spec = s
-					else:
-						ordered_specs.append(s)
-
-				if config_wide_spec is not None:
-					config_wide_spec.Configure(c)
-					self.WriteConfiguredSpec(config_makefileset, config_wide_spec, c, True)
-
-				for s in ordered_specs:
-					s.Configure(c)
-					self.WriteConfiguredSpec(config_makefileset, s, c, False)
-
-			self.makefileset.close()
-		except Exception,e:
-			self.raptor.Error("Failed to write makefile '%s': %s" % (str(toplevel),str(e)))
-
-
-	def WriteConfiguredSpec(self, parentMakefileSet, spec, config, useAllInterfaces):
-		# ignore this spec if it is empty
-		hasInterface = spec.HasInterface()
-		childSpecs = spec.GetChildSpecs()
-
-		if not hasInterface and not childSpecs:
-			return
-
-		parameters = []
-		dupe = True
-		iface = None
-		guard = None
-		if hasInterface:
-			# find the Interface (it may be a ref)
-			iface = spec.GetInterface()
-
-			if iface == None:
-				self.raptor.Error("No interface for '%s'", spec.name)
-				return
-
-			if iface.abstract:
-				self.raptor.Error("Abstract interface '%s' for '%s'",
-								  iface.name, spec.name)
-				return
-
-			# we need to guard the FLM call with a hash based on all the
-			# parameter values so that duplicate calls cannot be made.
-			# So we need to find all the values before we can write
-			# anything out.
-			md5hash = hashlib.md5()
-			md5hash.update(iface.name)
-
-			# we need an Evaluator to get parameter values for this
-			# Specification in the context of this Configuration
-			evaluator = self.raptor.GetEvaluator(spec, config)
-
-			def addparam(k, value, default):
-				if value == None:
-					if p.default != None:
-						value = p.default
-					else:
-						self.raptor.Error("%s undefined for '%s'",
-										  k, spec.name)
-						value = ""
-
-				parameters.append((k, value))
-				md5hash.update(value)
-
-			# parameters required by the interface
-			for p in iface.GetParams():
-				val = evaluator.Resolve(p.name)
-				addparam(p.name,val,p.default)
-
-			# Use Patterns to fetch a group of parameters
-			for g in iface.GetParamGroups():
-				for k,v in evaluator.ResolveMatching(g.patternre):
-					addparam(k,v,g.default)
-
-			hash = md5hash.hexdigest()
-			dupe = hash in self.hashes
-
-			self.hashes.add(hash)
-
-		# we only create a Makefile if we have a new FLM call to contribute,
-		# OR we are not pruning duplicates (guarding instead)
-		# OR we have some child specs that need something to include them.
-		if dupe and self.prune and not childSpecs:
-			return
-
-		makefileset = parentMakefileSet
-		# Create a new layer of makefiles?
-		if self.many:
-			makefileset = makefileset.createChild(spec.name)
-
-		if not (self.prune and dupe):
-			if self.prune:
-				guard = ""
-			else:
-				guard = "guard_" + hash
-
-		# generate the call to the FLM
-		if iface is not None:
-			makefileset.addCall(spec.name, config.name, iface.name, useAllInterfaces, iface.GetFLMIncludePath(), parameters, guard)
-
-		# recursive includes
-
-		for child in childSpecs:
-			self.WriteConfiguredSpec(makefileset, child, config, useAllInterfaces)
-
-		if self.many:
-			makefileset.close() # close child set of makefiles as we'll never see them again.
-
-	def Make(self, makefileset):
-		"run the make command"
-
-		if not self.valid:
-			return False
-	
-		if self.usetalon:
-			# Always use Talon since it does the XML not
-			# just descrambling
-			if not self.StartTalon() and not self.raptor.keepGoing:
-				self.Tidy()
-				return False
-		else:
-			# use the descrambler if we are doing a parallel build on
-			# a make engine which does not buffer each agent's output
-			if self.raptor.jobs > 1 and self.scrambled:
-				self.StartDescrambler()
-				if  not self.descrambler_started and not self.raptor.keepGoing:
-					self.Tidy()
-					return False
-			
-		# run any initialisation script
-		if self.initCommand:
-			self.raptor.Info("Running %s", self.initCommand)
-			if os.system(self.initCommand) != 0:
-				self.raptor.Error("Failed in %s", self.initCommand)
-				self.Tidy()
-				return False
-
-		# Save file names to a list, to allow the order to be reversed
-		fileName_list = list(self.makefileset.makefileNames())
-
-		# Iterate through args passed to raptor, searching for CLEAN or REALLYCLEAN
-		clean_flag = False
-		for arg in self.raptor.args:
-			clean_flag = ("CLEAN" in self.raptor.args) or \
-			            ("REALLYCLEAN" in self.raptor.args)
-
-		# Files should be deleted in the opposite order to the order
-		# they were built. So reverse file order if cleaning
-		if clean_flag:
-			fileName_list.reverse()
-
-		# Process each file in turn
-		for makefile in fileName_list:
-			if not os.path.exists(makefile):
-				self.raptor.Info("Skipping makefile %s", makefile)
-				continue
-			self.raptor.Info("Making %s", makefile)
-			# assemble the build command line
-			command = self.buildCommand
-
-			if self.makefileOption:
-				command += " " + self.makefileOption + " " + '"' + str(makefile) + '"'
-
-			if self.raptor.keepGoing and self.keepGoingOption:
-				command += " " + self.keepGoingOption
-
-			if self.raptor.jobs > 1 and self.jobsOption:
-				command += " " + self.jobsOption +" "+ str(self.raptor.jobs)
-
-			# Set default options first so that they can be overridden by
-			# ones set by the --mo option on the raptor commandline:
-			command += " " + self.defaultMakeOptions
-			# Can supply options on the commandline to override default settings.
-			if len(self.raptor.makeOptions) > 0:
-				command += " " + " ".join(self.raptor.makeOptions)
-
-			# Switch off dependency file including?
-			if self.raptor.noDependInclude:
-				command += " NO_DEPEND_INCLUDE=1"
-			
-			if self.usetalon:
-				# use the descrambler if we set it up
-				command += ' TALON_DESCRAMBLE=' 
-				if self.scrambled:
-					command += '1 '
-				else:
-					command += '0 '
-			else:
-				if self.descrambler_started:
-					command += ' DESCRAMBLE="' + self.descrambler + '"'
-			
-			# use the retry mechanism if requested
-			if self.raptor.tries > 1:
-				command += ' RECIPETRIES=' + str(self.raptor.tries)
-				command += ' TALON_RETRIES=' + str(self.raptor.tries - 1)
-
-			# targets go at the end, if the makefile supports them
-			addTargets = self.raptor.targets[:]
-			ignoreTargets = self.makefileset.ignoreTargets(makefile)
-			if addTargets and ignoreTargets:
-				for target in self.raptor.targets:
-					if re.match(ignoreTargets, target):
-						addTargets.remove(target)
-
-			if addTargets:
-				command += " " + " ".join(addTargets)
-
-			self.raptor.Info("Executing '%s'", command)
-
-			# execute the build.
-			# the actual call differs between Windows and Unix.
-			# bufsize=1 means "line buffered"
-			#
-			try:
-				makeenv=os.environ.copy()
-				if self.usetalon:
-					makeenv['TALON_RECIPEATTRIBUTES']="none"
-					makeenv['TALON_SHELL']=self.talonshell
-					makeenv['TALON_BUILDID']=str(self.buildID)
-					makeenv['TALON_TIMEOUT']=str(self.talontimeout)
-				if self.raptor.filesystem == "unix":
-					p = subprocess.Popen(command, bufsize=65535,
-									     stdout=subprocess.PIPE,
-									     stderr=subprocess.STDOUT,
-									     close_fds=True, env=makeenv, shell=True)
-				else:
-					p = subprocess.Popen(command, bufsize=65535,
-									     stdout=subprocess.PIPE,
-									     stderr=subprocess.STDOUT,
-									     universal_newlines=True, env=makeenv)
-				stream = p.stdout
-
-
-				line = " "
-				while line:
-					line = stream.readline()
-					self.raptor.out.write(line)
-
-				# should be done now
-				returncode = p.wait()
-
-
-				if returncode != 0  and not self.raptor.keepGoing:
-					self.Tidy()
-					return False
-
-			except Exception,e:
-				self.raptor.Error("Exception '%s' during '%s'", str(e), command)
-				self.Tidy()
-				return False
-
-		# run any shutdown script
-		if self.shutdownCommand != None and self.shutdownCommand != "":
-			self.raptor.Info("Running %s", self.shutdownCommand)
-			if os.system(self.shutdownCommand) != 0:
-				self.raptor.Error("Failed in %s", self.shutdownCommand)
-				self.Tidy()
-				return False
-
-		self.Tidy()
-		return True
-
-	def Tidy(self):
-		if self.usetalon:
-			self.StopTalon() 
-		else:
-			"clean up after the make command"
-			self.StopDescrambler()
-
-	def StartTalon(self):
-		# the talon command
-		beginning = raptor.hostplatform_dir + "/bin"
-		if "win" in raptor.hostplatform:
-			end = ".exe"
-		else:
-			end = ""
-			
-		self.talonctl = str(self.raptor.home.Append(beginning, "talonctl"+end))
-			
-		# generate a unique build number
-		random.seed()
-		looking = True
-		tries = 0
-		while looking and tries < 100:
-			self.buildID = raptor.name + str(random.getrandbits(32))
-			
-			command = self.talonctl + " start"
-
-			os.environ["TALON_BUILDID"] = self.buildID
-			self.raptor.Info("Running %s", command)
-			looking = (os.system(command) != 0)
-			tries += 1
-		if looking:
-			self.raptor.Error("Failed to initilaise the talon shell for this build")
-			self.talonctl = ""
-			return False
-		
-		return True
-	
-	def StopTalon(self):
-		if self.talonctl:
-			command = self.talonctl + " stop"
-			self.talonctl = ""
-			
-			self.raptor.Info("Running %s", command)
-			if os.system(command) != 0:
-				self.raptor.Error("Failed in %s", command)
-				return False
-			
-		return True
-	
-	def StartDescrambler(self):
-		# the descrambler command
-		beginning = raptor.hostplatform_dir + "/bin"
-		if "win" in raptor.hostplatform:
-			end = ".exe"
-		else:
-			end = ""
-
-		self.descrambler = str(self.raptor.home.Append(beginning, "sbs_descramble"+end))
-			
-		# generate a unique build number
-		random.seed()
-		looking = True
-		tries = 0
-		while looking and tries < 100:
-			buildID = raptor.name + str(random.getrandbits(32))
-
-			command = self.descrambler + " " + buildID + " start"
-			self.raptor.Info("Running %s", command)
-			looking = (os.system(command) != 0)
-			tries += 1
-
-		if looking:
-			self.raptor.Error("Failed to start the log descrambler")
-			self.descrambler_started = True
-			return False
-
-		self.descrambler_started = True
-		self.descrambler +=	" " + buildID
-
-		return  True
-
-	def StopDescrambler(self):
-		if self.descrambler_started:
-			command = self.descrambler + " stop"
-			self.descrambler = ""
-
-			self.raptor.Info("Running %s", command)
-			if os.system(command) != 0:
-				self.raptor.Error("Failed in %s", command)
-				return False
-		return True
-
-# raptor_make module functions
-
-
-# end of the raptor_make module
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_make module
+# This module contains the classes that write and call Makefile wrappers.
+#
+
+import hashlib
+import os
+import random
+import raptor
+import raptor_data
+import raptor_utilities
+import raptor_version
+import re
+import subprocess
+import time
+from raptor_makefile import *
+
+# raptor_make module classes
+
+class MakeEngine(object):
+
+	def __init__(self, Raptor):
+		self.raptor = Raptor
+		self.valid = True
+		self.makefileset = None
+		self.descrambler = None
+		self.descrambler_started = False
+
+		engine = Raptor.makeEngine
+		
+		# look for an alias first as this gives end-users a chance to modify
+		# the shipped variant rather than completely replacing it.
+		if engine in Raptor.cache.aliases:
+			avar = Raptor.cache.FindNamedAlias(engine)
+		elif engine in Raptor.cache.variants:
+			avar = Raptor.cache.FindNamedVariant(engine)
+		else:
+			Raptor.Error("No settings found for build engine '%s'", engine)
+			return
+					
+		# find the variant and extract the values
+		try:
+			units = avar.GenerateBuildUnits()
+			evaluator = Raptor.GetEvaluator( None, units[0] , gathertools=True)
+
+			# shell
+			self.shellpath = evaluator.Get("DEFAULT_SHELL")
+			usetalon_s = evaluator.Get("USE_TALON") 
+			self.usetalon = usetalon_s is not None and usetalon_s != ""
+			self.talonshell = str(evaluator.Get("TALON_SHELL"))
+			self.talontimeout = str(evaluator.Get("TALON_TIMEOUT"))
+			self.talonretries = str(evaluator.Get("TALON_RETRIES"))
+
+			# commands
+			self.initCommand = evaluator.Get("initialise")
+			self.buildCommand = evaluator.Get("build")
+			self.shutdownCommand = evaluator.Get("shutdown")
+
+			# options
+			self.makefileOption = evaluator.Get("makefile")
+			self.keepGoingOption = evaluator.Get("keep_going")
+			self.jobsOption = evaluator.Get("jobs")
+			self.defaultMakeOptions = evaluator.Get("defaultoptions")
+
+			# buffering
+			self.scrambled = (evaluator.Get("scrambled") == "true")
+
+			# check tool versions
+			Raptor.CheckToolset(evaluator, avar.name)
+			
+			# default targets (can vary per-invocation)
+			self.defaultTargets = Raptor.defaultTargets
+
+			# work out how to split up makefiles
+			try:
+				selectorNames = [ x.strip() for x in evaluator.Get("selectors").split(',') if x.strip() != "" ]
+				self.selectors = []
+
+
+				if len(selectorNames) > 0:
+					for name in selectorNames:
+						pattern = evaluator.Get(name.strip() + ".selector.iface")
+						target = evaluator.Get(name.strip() + ".selector.target")
+						ignoretargets = evaluator.Get(name.strip() + ".selector.ignoretargets")
+						self.selectors.append(MakefileSelector(name,pattern,target,ignoretargets))
+			except KeyError:
+				Raptor.Error("%s.selector.iface, %s.selector.target not found in make engine configuration", name, name)
+				self.selectors = []
+
+		except KeyError:
+			Raptor.Error("Bad '%s' configuration found.", engine)
+			self.valid = False
+			return
+
+		# there must at least be a build command...
+		if not self.buildCommand:
+				Raptor.Error("No build command for '%s'", engine)
+				self.valid = False
+
+
+		if self.usetalon:
+			talon_settings="""
+TALON_SHELL:=%s
+TALON_TIMEOUT:=%s
+TALON_RECIPEATTRIBUTES:=\
+ name='$$RECIPE'\
+ target='$$TARGET'\
+ host='$$HOSTNAME'\
+ layer='$$COMPONENT_LAYER'\
+ component='$$COMPONENT_NAME'\
+ bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
+ config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
+ phase='$$MAKEFILE_GROUP' source='$$SOURCE
+export TALON_RECIPEATTRIBUTES TALON_SHELL TALON_TIMEOUT
+USE_TALON:=%s
+
+""" % (self.talonshell, self.talontimeout, "1")
+		else:
+			talon_settings="""
+USE_TALON:=
+
+"""
+		
+
+		self.makefile_prologue = """
+# generated by %s %s
+
+HOSTPLATFORM:=%s
+HOSTPLATFORM_DIR:=%s
+OSTYPE:=%s
+FLMHOME:=%s
+SHELL:=%s
+
+%s
+
+include %s
+
+""" 		% (  raptor.name, raptor_version.Version(),
+			 " ".join(raptor.hostplatform),
+			 raptor.hostplatform_dir,
+			 self.raptor.filesystem,
+			 str(self.raptor.systemFLM),
+			 self.shellpath,
+			 talon_settings,
+			 self.raptor.systemFLM.Append('globals.mk') )
+
+
+		self.makefile_epilogue = """
+
+include %s
+
+""" 			% (self.raptor.systemFLM.Append('final.mk') )
+
+	def Write(self, toplevel, specs, configs):
+		"""Generate a set of makefiles, or one big Makefile."""
+
+		if not self.valid:
+			return
+
+		self.toplevel = toplevel
+
+		# create the top-level makefiles
+
+		try:
+			self.makefileset = MakefileSet(directory = str(toplevel.Dir()),
+										   selectors = self.selectors,
+										   filenamebase = str(toplevel.File()),
+										   prologue = self.makefile_prologue,
+										   epilogue = self.makefile_epilogue,
+										   defaulttargets = self.defaultTargets)
+
+			# are we pruning duplicates?
+			self.prune = self.raptor.pruneDuplicateMakefiles
+			self.hashes = set()
+
+			# are we writing one Makefile or lots?
+			self.many = not self.raptor.writeSingleMakefile
+
+			# add a makefile for each spec under each config
+			config_makefileset = self.makefileset
+
+			for c in configs:
+				if self.many:
+					config_makefileset = self.makefileset.createChild(c.name)
+
+				# make sure the config_wide spec item is put out first so that it
+				# can affect everything.
+				ordered_specs=[]
+				config_wide_spec = None
+				for s in specs:
+					if s.name == "config_wide":
+						config_wide_spec = s
+					else:
+						ordered_specs.append(s)
+
+				if config_wide_spec is not None:
+					config_wide_spec.Configure(c)
+					self.WriteConfiguredSpec(config_makefileset, config_wide_spec, c, True)
+
+				for s in ordered_specs:
+					s.Configure(c)
+					self.WriteConfiguredSpec(config_makefileset, s, c, False)
+
+			self.makefileset.close()
+		except Exception,e:
+			self.raptor.Error("Failed to write makefile '%s': %s" % (str(toplevel),str(e)))
+
+
+	def WriteConfiguredSpec(self, parentMakefileSet, spec, config, useAllInterfaces):
+		# ignore this spec if it is empty
+		hasInterface = spec.HasInterface()
+		childSpecs = spec.GetChildSpecs()
+
+		if not hasInterface and not childSpecs:
+			return
+
+		parameters = []
+		dupe = True
+		iface = None
+		guard = None
+		if hasInterface:
+			# find the Interface (it may be a ref)
+			iface = spec.GetInterface()
+
+			if iface == None:
+				self.raptor.Error("No interface for '%s'", spec.name)
+				return
+
+			if iface.abstract:
+				self.raptor.Error("Abstract interface '%s' for '%s'",
+								  iface.name, spec.name)
+				return
+
+			# we need to guard the FLM call with a hash based on all the
+			# parameter values so that duplicate calls cannot be made.
+			# So we need to find all the values before we can write
+			# anything out.
+			md5hash = hashlib.md5()
+			md5hash.update(iface.name)
+
+			# we need an Evaluator to get parameter values for this
+			# Specification in the context of this Configuration
+			evaluator = self.raptor.GetEvaluator(spec, config)
+
+			def addparam(k, value, default):
+				if value == None:
+					if p.default != None:
+						value = p.default
+					else:
+						self.raptor.Error("%s undefined for '%s'",
+										  k, spec.name)
+						value = ""
+
+				parameters.append((k, value))
+				md5hash.update(value)
+
+			# parameters required by the interface
+			for p in iface.GetParams():
+				val = evaluator.Resolve(p.name)
+				addparam(p.name,val,p.default)
+
+			# Use Patterns to fetch a group of parameters
+			for g in iface.GetParamGroups():
+				for k,v in evaluator.ResolveMatching(g.patternre):
+					addparam(k,v,g.default)
+
+			hash = md5hash.hexdigest()
+			dupe = hash in self.hashes
+
+			self.hashes.add(hash)
+
+		# we only create a Makefile if we have a new FLM call to contribute,
+		# OR we are not pruning duplicates (guarding instead)
+		# OR we have some child specs that need something to include them.
+		if dupe and self.prune and not childSpecs:
+			return
+
+		makefileset = parentMakefileSet
+		# Create a new layer of makefiles?
+		if self.many:
+			makefileset = makefileset.createChild(spec.name)
+
+		if not (self.prune and dupe):
+			if self.prune:
+				guard = ""
+			else:
+				guard = "guard_" + hash
+
+		# generate the call to the FLM
+		if iface is not None:
+			makefileset.addCall(spec.name, config.name, iface.name, useAllInterfaces, iface.GetFLMIncludePath(), parameters, guard)
+
+		# recursive includes
+
+		for child in childSpecs:
+			self.WriteConfiguredSpec(makefileset, child, config, useAllInterfaces)
+
+		if self.many:
+			makefileset.close() # close child set of makefiles as we'll never see them again.
+
+	def Make(self, makefileset):
+		"run the make command"
+
+		if not self.valid:
+			return False
+	
+		if self.usetalon:
+			# Always use Talon since it does the XML not
+			# just descrambling
+			if not self.StartTalon() and not self.raptor.keepGoing:
+				self.Tidy()
+				return False
+		else:
+			# use the descrambler if we are doing a parallel build on
+			# a make engine which does not buffer each agent's output
+			if self.raptor.jobs > 1 and self.scrambled:
+				self.StartDescrambler()
+				if  not self.descrambler_started and not self.raptor.keepGoing:
+					self.Tidy()
+					return False
+			
+		# run any initialisation script
+		if self.initCommand:
+			self.raptor.Info("Running %s", self.initCommand)
+			if os.system(self.initCommand) != 0:
+				self.raptor.Error("Failed in %s", self.initCommand)
+				self.Tidy()
+				return False
+
+		# Save file names to a list, to allow the order to be reversed
+		fileName_list = list(self.makefileset.makefileNames())
+
+		# Iterate through args passed to raptor, searching for CLEAN or REALLYCLEAN
+		clean_flag = False
+		for arg in self.raptor.args:
+			clean_flag = ("CLEAN" in self.raptor.args) or \
+			            ("REALLYCLEAN" in self.raptor.args)
+
+		# Files should be deleted in the opposite order to the order
+		# they were built. So reverse file order if cleaning
+		if clean_flag:
+			fileName_list.reverse()
+
+		# Process each file in turn
+		for makefile in fileName_list:
+			if not os.path.exists(makefile):
+				self.raptor.Info("Skipping makefile %s", makefile)
+				continue
+			self.raptor.Info("Making %s", makefile)
+			# assemble the build command line
+			command = self.buildCommand
+
+			if self.makefileOption:
+				command += " " + self.makefileOption + " " + '"' + str(makefile) + '"'
+
+			if self.raptor.keepGoing and self.keepGoingOption:
+				command += " " + self.keepGoingOption
+
+			if self.raptor.jobs > 1 and self.jobsOption:
+				command += " " + self.jobsOption +" "+ str(self.raptor.jobs)
+
+			# Set default options first so that they can be overridden by
+			# ones set by the --mo option on the raptor commandline:
+			command += " " + self.defaultMakeOptions
+			# Can supply options on the commandline to override default settings.
+			if len(self.raptor.makeOptions) > 0:
+				command += " " + " ".join(self.raptor.makeOptions)
+
+			# Switch off dependency file including?
+			if self.raptor.noDependInclude:
+				command += " NO_DEPEND_INCLUDE=1"
+			
+			if self.usetalon:
+				# use the descrambler if we set it up
+				command += ' TALON_DESCRAMBLE=' 
+				if self.scrambled:
+					command += '1 '
+				else:
+					command += '0 '
+			else:
+				if self.descrambler_started:
+					command += ' DESCRAMBLE="' + self.descrambler + '"'
+			
+			# use the retry mechanism if requested
+			if self.raptor.tries > 1:
+				command += ' RECIPETRIES=' + str(self.raptor.tries)
+				command += ' TALON_RETRIES=' + str(self.raptor.tries - 1)
+
+			# targets go at the end, if the makefile supports them
+			addTargets = self.raptor.targets[:]
+			ignoreTargets = self.makefileset.ignoreTargets(makefile)
+			if addTargets and ignoreTargets:
+				for target in self.raptor.targets:
+					if re.match(ignoreTargets, target):
+						addTargets.remove(target)
+
+			if addTargets:
+				command += " " + " ".join(addTargets)
+
+			self.raptor.Info("Executing '%s'", command)
+
+			# execute the build.
+			# the actual call differs between Windows and Unix.
+			# bufsize=1 means "line buffered"
+			#
+			try:
+				makeenv=os.environ.copy()
+				if self.usetalon:
+					makeenv['TALON_RECIPEATTRIBUTES']="none"
+					makeenv['TALON_SHELL']=self.talonshell
+					makeenv['TALON_BUILDID']=str(self.buildID)
+					makeenv['TALON_TIMEOUT']=str(self.talontimeout)
+				if self.raptor.filesystem == "unix":
+					p = subprocess.Popen(command, bufsize=65535,
+									     stdout=subprocess.PIPE,
+									     stderr=subprocess.STDOUT,
+									     close_fds=True, env=makeenv, shell=True)
+				else:
+					p = subprocess.Popen(command, bufsize=65535,
+									     stdout=subprocess.PIPE,
+									     stderr=subprocess.STDOUT,
+									     universal_newlines=True, env=makeenv)
+				stream = p.stdout
+
+
+				line = " "
+				while line:
+					line = stream.readline()
+					self.raptor.out.write(line)
+
+				# should be done now
+				returncode = p.wait()
+
+
+				if returncode != 0  and not self.raptor.keepGoing:
+					self.Tidy()
+					return False
+
+			except Exception,e:
+				self.raptor.Error("Exception '%s' during '%s'", str(e), command)
+				self.Tidy()
+				return False
+
+		# run any shutdown script
+		if self.shutdownCommand != None and self.shutdownCommand != "":
+			self.raptor.Info("Running %s", self.shutdownCommand)
+			if os.system(self.shutdownCommand) != 0:
+				self.raptor.Error("Failed in %s", self.shutdownCommand)
+				self.Tidy()
+				return False
+
+		self.Tidy()
+		return True
+
+	def Tidy(self):
+		if self.usetalon:
+			self.StopTalon() 
+		else:
+			"clean up after the make command"
+			self.StopDescrambler()
+
+	def StartTalon(self):
+		# the talon command
+		beginning = raptor.hostplatform_dir + "/bin"
+		if "win" in raptor.hostplatform:
+			end = ".exe"
+		else:
+			end = ""
+			
+		self.talonctl = str(self.raptor.home.Append(beginning, "talonctl"+end))
+			
+		# generate a unique build number
+		random.seed()
+		looking = True
+		tries = 0
+		while looking and tries < 100:
+			self.buildID = raptor.name + str(random.getrandbits(32))
+			
+			command = self.talonctl + " start"
+
+			os.environ["TALON_BUILDID"] = self.buildID
+			self.raptor.Info("Running %s", command)
+			looking = (os.system(command) != 0)
+			tries += 1
+		if looking:
+			self.raptor.Error("Failed to initilaise the talon shell for this build")
+			self.talonctl = ""
+			return False
+		
+		return True
+	
+	def StopTalon(self):
+		if self.talonctl:
+			command = self.talonctl + " stop"
+			self.talonctl = ""
+			
+			self.raptor.Info("Running %s", command)
+			if os.system(command) != 0:
+				self.raptor.Error("Failed in %s", command)
+				return False
+			
+		return True
+	
+	def StartDescrambler(self):
+		# the descrambler command
+		beginning = raptor.hostplatform_dir + "/bin"
+		if "win" in raptor.hostplatform:
+			end = ".exe"
+		else:
+			end = ""
+
+		self.descrambler = str(self.raptor.home.Append(beginning, "sbs_descramble"+end))
+			
+		# generate a unique build number
+		random.seed()
+		looking = True
+		tries = 0
+		while looking and tries < 100:
+			buildID = raptor.name + str(random.getrandbits(32))
+
+			command = self.descrambler + " " + buildID + " start"
+			self.raptor.Info("Running %s", command)
+			looking = (os.system(command) != 0)
+			tries += 1
+
+		if looking:
+			self.raptor.Error("Failed to start the log descrambler")
+			self.descrambler_started = True
+			return False
+
+		self.descrambler_started = True
+		self.descrambler +=	" " + buildID
+
+		return  True
+
+	def StopDescrambler(self):
+		if self.descrambler_started:
+			command = self.descrambler + " stop"
+			self.descrambler = ""
+
+			self.raptor.Info("Running %s", command)
+			if os.system(command) != 0:
+				self.raptor.Error("Failed in %s", command)
+				return False
+		return True
+
+# raptor_make module functions
+
+
+# end of the raptor_make module
--- a/sbsv2/raptor/python/raptor_makefile.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_makefile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,213 +1,213 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# makefile module
-# This module is for writing calls to Function-Like Makefiles
-#
-
-import re
-import os
-import generic_path
-
-class MakefileSelector(object):
-	"""A "query" which is used to separate some flm interface calls
-	  into separate makefile trees."""
-	def __init__(self, name="default", interfacepattern=None, defaulttarget=None, ignoretargets=None):
-		self.name=name
-		if interfacepattern is not None:
-			self.interfacepattern=re.compile(interfacepattern, re.I)
-		else:
-			self.interfacepattern=None
-		self.defaulttarget=defaulttarget
-		self.ignoretargets=ignoretargets
-
-class Makefile(object):
-	"""Representation of the file that is created from the build specification 
-	   tree.
-	"""
-	def __init__(self, directory, selector, parent=None, filenamebase="Makefile", prologue=None, epilogue=None, defaulttargets=None):
-		self.filenamebase = filenamebase
-		self.directory = directory
-		if selector.name != "":
-			extension = "." + selector.name
-		else:
-			extension = ""
-		self.filename = generic_path.Join(directory,filenamebase + extension)
-		self.selector = selector
-		self.parent = parent
-		self.childlist = []
-		self.file = None
-		self.prologue = prologue
-		self.epilogue = epilogue
-		self.defaulttargets = defaulttargets
-		self.dead = False
-
-	def open(self):
-		if self.dead:
-			raise Exception, "Attempt to reopen completed makefile %s " % (self.filename)
-
-		if self.file is None:
-			directory = self.filename.Dir()
-			if not (str(directory) == "" or directory.Exists()):
-				try:
-					os.makedirs(directory.GetLocalString())
-				except Exception,e:
-					raise Exception, "Cannot make directory '%s' for file '%s' in '%s': %s " % (str(directory),str(self.filename),str(self.directory),str(e))
-
-			self.file = open(str(self.filename),"w+")
-			
-			self.file.write('# GENERATED MAKEFILE : DO NOT EDIT\n\n')
-			if self.selector.defaulttarget:
-				self.file.write('MAKEFILE_GROUP:=%s\n.PHONY:: %s\n%s:: # Default target\n' \
-							% (self.selector.defaulttarget, self.selector.defaulttarget, self.selector.defaulttarget))
-			else:
-				self.file.write('MAKEFILE_GROUP:=DEFAULT\n')
-			if self.prologue != None:
-				self.file.write(self.prologue)
-				
-			if self.defaulttargets != None:
-				self.file.write('# dynamic default targets\n')
-				for defaulttarget in self.defaulttargets:
-					self.file.write('.PHONY:: %s\n' % defaulttarget)
-					self.file.write('%s:\n' % defaulttarget)
-				self.file.write('\n')
-			
-	def addChild(self, child):
-		self.open()
-		self.file.write("include %s\n" % child.filename)
-		child.open()
-
-	def createChild(self, subdir):
-		child = Makefile(str(self.filename.Dir().Append(subdir)), self.selector, self, self.filenamebase, self.prologue, self.epilogue, self.defaulttargets)
-		self.addChild(child)
-		child.open()
-		return child
-
-	def addCall(self, specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard = None):
-		"""Add an FLM call to the makefile.
-			specname is the name of the build specification (e.g. the mmp name)
-			configname is the name of the configuration which this call is made for
-			flmpath is the absolute path to the flm
-			parameters is an array of tuples, (paramname, paramvalue)	
-			guard is a hash value that should be unique to the FLM call
-
-		   This call will return False if the ifname does not match the selector for 
-		   the makefile. e.g. it prevents one from adding a resource FLM call to a
-		   makefile which is selecting export FLM calls. Selection is overridden if
-		   useAllInterfaces is True.
-		"""
-		# create the directory if it does not exist
-
-		if self.selector.interfacepattern is not None:
-			ifmatch = self.selector.interfacepattern.search(ifname)
-			if ifmatch == None and useAllInterfaces == False:
-				return False
-
-		self.open()
-		# now we can write the values into the makefile
-		self.file.write("# call %s\n" % flmpath)
-		self.file.write("SBS_SPECIFICATION:=%s\n" % specname)
-		self.file.write("SBS_CONFIGURATION:=%s\n\n" % configname)
-
-		if guard:
-			self.file.write("ifeq ($(%s),)\n%s:=1\n\n" % (guard, guard))
-		
-		for (p, value) in parameters:
-			self.file.write("%s:=%s\n" % (p, value))
-	
-		self.file.write("include %s\n" % flmpath)
-		self.file.write("MAKEFILE_LIST:= # work around potential gnu make stack overflow\n\n")
-		
-		if guard:
-			self.file.write("endif\n\n")
-
-		return True
-
-	def close(self):
-		if self.file is not None:
-			if self.epilogue != None:
-				self.file.write(self.epilogue)
-			self.file.write('# END OF GENERATED MAKEFILE : DO NOT EDIT\n')
-			self.file.close()
-			self.file = None
-			self.dead = True
-
-	def __del__(self):
-		self.close()
-			
-		
-
-class MakefileSet(object):
-	grouperselector = MakefileSelector(name="")
-	defaultselectors = [ 
-		MakefileSelector("export", '\.export$', "EXPORT"),
-		MakefileSelector("bitmap", '\.bitmap$', "BITMAP"),
-		MakefileSelector("resource", '\.resource$', "RESOURCE"),
-		MakefileSelector("default", '\.(?!export$|bitmap$|resource$).*$', "ALL")
-		]
-
-	def __init__(self, directory, selectors=defaultselectors, makefiles=None, parent=None, filenamebase="Makefile", prologue=None, epilogue=None, defaulttargets=None):
-		self.directory = generic_path.Path(directory)
-		self.filenamebase = filenamebase
-		self.parent = parent
-		if makefiles is not None:
-			self.makefiles = makefiles
-		else:
-			self.makefiles = []
-			for sel in selectors:
-				self.makefiles.append(Makefile(directory, sel, None, filenamebase, prologue, epilogue, defaulttargets))
-		self.groupermakefile = Makefile(directory, MakefileSet.grouperselector, None, filenamebase, "# GROUPER MAKEFILE\n\nALL::\n\n", "\n")
-		
-		for mf in self.makefiles:
-			self.groupermakefile.addChild(mf)
-
-
-	def createChild(self, subdir):
-		"""Create a set of "sub" makefiles that are included by this set."""
-		newmakefiles = []
-		for mf in self.makefiles:
-			newmf = mf.createChild(subdir)
-			newmakefiles.append(newmf)
-
-		newset = MakefileSet(str(self.directory.Append(subdir)), None, newmakefiles, self, self.filenamebase)
-		self.groupermakefile.addChild(newset.groupermakefile)
-
-		return newset
-
-	def addCall(self, specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard = None):
-		"""Find out which makefiles to write this FLM call to 
-		   and write it to those (e.g. the exports makefile) """
-		for f in self.makefiles:
-			f.addCall(specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard)
-
-	def makefileNames(self):
-		for mf in self.makefiles:
-			yield str(mf.filename)
-	
-	def ignoreTargets(self, makefile):
-		"""Get hold of a makefile's selector based on its name and
-		   determine whether it ignores targets based on a regexp."""
-		for mf in self.makefiles:
-			filename = str(mf.filename)			
-			if filename == makefile:
-				return mf.selector.ignoretargets 
-		return None
-
-	def close(self):
-		for mf in self.makefiles:
-			mf.close()
-		self.groupermakefile.close()
-
-	def __del__(self):
-		self.close()
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# makefile module
+# This module is for writing calls to Function-Like Makefiles
+#
+
+import re
+import os
+import generic_path
+
+class MakefileSelector(object):
+	"""A "query" which is used to separate some flm interface calls
+	  into separate makefile trees."""
+	def __init__(self, name="default", interfacepattern=None, defaulttarget=None, ignoretargets=None):
+		self.name=name
+		if interfacepattern is not None:
+			self.interfacepattern=re.compile(interfacepattern, re.I)
+		else:
+			self.interfacepattern=None
+		self.defaulttarget=defaulttarget
+		self.ignoretargets=ignoretargets
+
+class Makefile(object):
+	"""Representation of the file that is created from the build specification 
+	   tree.
+	"""
+	def __init__(self, directory, selector, parent=None, filenamebase="Makefile", prologue=None, epilogue=None, defaulttargets=None):
+		self.filenamebase = filenamebase
+		self.directory = directory
+		if selector.name != "":
+			extension = "." + selector.name
+		else:
+			extension = ""
+		self.filename = generic_path.Join(directory,filenamebase + extension)
+		self.selector = selector
+		self.parent = parent
+		self.childlist = []
+		self.file = None
+		self.prologue = prologue
+		self.epilogue = epilogue
+		self.defaulttargets = defaulttargets
+		self.dead = False
+
+	def open(self):
+		if self.dead:
+			raise Exception, "Attempt to reopen completed makefile %s " % (self.filename)
+
+		if self.file is None:
+			directory = self.filename.Dir()
+			if not (str(directory) == "" or directory.Exists()):
+				try:
+					os.makedirs(directory.GetLocalString())
+				except Exception,e:
+					raise Exception, "Cannot make directory '%s' for file '%s' in '%s': %s " % (str(directory),str(self.filename),str(self.directory),str(e))
+
+			self.file = open(str(self.filename),"w+")
+			
+			self.file.write('# GENERATED MAKEFILE : DO NOT EDIT\n\n')
+			if self.selector.defaulttarget:
+				self.file.write('MAKEFILE_GROUP:=%s\n.PHONY:: %s\n%s:: # Default target\n' \
+							% (self.selector.defaulttarget, self.selector.defaulttarget, self.selector.defaulttarget))
+			else:
+				self.file.write('MAKEFILE_GROUP:=DEFAULT\n')
+			if self.prologue != None:
+				self.file.write(self.prologue)
+				
+			if self.defaulttargets != None:
+				self.file.write('# dynamic default targets\n')
+				for defaulttarget in self.defaulttargets:
+					self.file.write('.PHONY:: %s\n' % defaulttarget)
+					self.file.write('%s:\n' % defaulttarget)
+				self.file.write('\n')
+			
+	def addChild(self, child):
+		self.open()
+		self.file.write("include %s\n" % child.filename)
+		child.open()
+
+	def createChild(self, subdir):
+		child = Makefile(str(self.filename.Dir().Append(subdir)), self.selector, self, self.filenamebase, self.prologue, self.epilogue, self.defaulttargets)
+		self.addChild(child)
+		child.open()
+		return child
+
+	def addCall(self, specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard = None):
+		"""Add an FLM call to the makefile.
+			specname is the name of the build specification (e.g. the mmp name)
+			configname is the name of the configuration which this call is made for
+			flmpath is the absolute path to the flm
+			parameters is an array of tuples, (paramname, paramvalue)	
+			guard is a hash value that should be unique to the FLM call
+
+		   This call will return False if the ifname does not match the selector for 
+		   the makefile. e.g. it prevents one from adding a resource FLM call to a
+		   makefile which is selecting export FLM calls. Selection is overridden if
+		   useAllInterfaces is True.
+		"""
+		# create the directory if it does not exist
+
+		if self.selector.interfacepattern is not None:
+			ifmatch = self.selector.interfacepattern.search(ifname)
+			if ifmatch == None and useAllInterfaces == False:
+				return False
+
+		self.open()
+		# now we can write the values into the makefile
+		self.file.write("# call %s\n" % flmpath)
+		self.file.write("SBS_SPECIFICATION:=%s\n" % specname)
+		self.file.write("SBS_CONFIGURATION:=%s\n\n" % configname)
+
+		if guard:
+			self.file.write("ifeq ($(%s),)\n%s:=1\n\n" % (guard, guard))
+		
+		for (p, value) in parameters:
+			self.file.write("%s:=%s\n" % (p, value))
+	
+		self.file.write("include %s\n" % flmpath)
+		self.file.write("MAKEFILE_LIST:= # work around potential gnu make stack overflow\n\n")
+		
+		if guard:
+			self.file.write("endif\n\n")
+
+		return True
+
+	def close(self):
+		if self.file is not None:
+			if self.epilogue != None:
+				self.file.write(self.epilogue)
+			self.file.write('# END OF GENERATED MAKEFILE : DO NOT EDIT\n')
+			self.file.close()
+			self.file = None
+			self.dead = True
+
+	def __del__(self):
+		self.close()
+			
+		
+
+class MakefileSet(object):
+	grouperselector = MakefileSelector(name="")
+	defaultselectors = [ 
+		MakefileSelector("export", '\.export$', "EXPORT"),
+		MakefileSelector("bitmap", '\.bitmap$', "BITMAP"),
+		MakefileSelector("resource", '\.resource$', "RESOURCE"),
+		MakefileSelector("default", '\.(?!export$|bitmap$|resource$).*$', "ALL")
+		]
+
+	def __init__(self, directory, selectors=defaultselectors, makefiles=None, parent=None, filenamebase="Makefile", prologue=None, epilogue=None, defaulttargets=None):
+		self.directory = generic_path.Path(directory)
+		self.filenamebase = filenamebase
+		self.parent = parent
+		if makefiles is not None:
+			self.makefiles = makefiles
+		else:
+			self.makefiles = []
+			for sel in selectors:
+				self.makefiles.append(Makefile(directory, sel, None, filenamebase, prologue, epilogue, defaulttargets))
+		self.groupermakefile = Makefile(directory, MakefileSet.grouperselector, None, filenamebase, "# GROUPER MAKEFILE\n\nALL::\n\n", "\n")
+		
+		for mf in self.makefiles:
+			self.groupermakefile.addChild(mf)
+
+
+	def createChild(self, subdir):
+		"""Create a set of "sub" makefiles that are included by this set."""
+		newmakefiles = []
+		for mf in self.makefiles:
+			newmf = mf.createChild(subdir)
+			newmakefiles.append(newmf)
+
+		newset = MakefileSet(str(self.directory.Append(subdir)), None, newmakefiles, self, self.filenamebase)
+		self.groupermakefile.addChild(newset.groupermakefile)
+
+		return newset
+
+	def addCall(self, specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard = None):
+		"""Find out which makefiles to write this FLM call to 
+		   and write it to those (e.g. the exports makefile) """
+		for f in self.makefiles:
+			f.addCall(specname, configname, ifname, useAllInterfaces, flmpath, parameters, guard)
+
+	def makefileNames(self):
+		for mf in self.makefiles:
+			yield str(mf.filename)
+	
+	def ignoreTargets(self, makefile):
+		"""Get hold of a makefile's selector based on its name and
+		   determine whether it ignores targets based on a regexp."""
+		for mf in self.makefiles:
+			filename = str(mf.filename)			
+			if filename == makefile:
+				return mf.selector.ignoretargets 
+		return None
+
+	def close(self):
+		for mf in self.makefiles:
+			mf.close()
+		self.groupermakefile.close()
+
+	def __del__(self):
+		self.close()
--- a/sbsv2/raptor/python/raptor_meta.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_meta.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,3245 +1,3247 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# This module includes classes that process bld.inf and .mmp files to
-# generate Raptor build specifications
-#
-
-import copy
-import re
-import os.path
-import shutil
-import stat
-import hashlib
-import base64
-
-import raptor
-import raptor_data
-import raptor_utilities
-import raptor_xml
-import generic_path
-import subprocess
-import zipfile
-from mmpparser import *
-
-import time
-
-
-PiggyBackedBuildPlatforms = {'ARMV5':['GCCXML']}
-
-PlatformDefaultDefFileDir = {'WINSCW':'bwins',
-				  'ARMV5' :'eabi',
-				  'ARMV5SMP' :'eabi',
-				  'GCCXML':'eabi',
-				  'ARMV6':'eabi',
-				  'ARMV7' : 'eabi',
-				  'ARMV7SMP' : 'eabi'}
-
-def getVariantCfgDetail(aEPOCROOT, aVariantCfgFile):
-	"""Obtain pertinent build related detail from the Symbian variant.cfg file.
-
-	This variant.cfg file, usually located relative to $(EPOCROOT), contains:
-	(1) The $(EPOCROOT) relative location of the primary .hrh file used to configure the specific OS variant build
-	(2) A flag determining whether ARMV5 represents an ABIV1 or ABIV2 build (currently unused by Raptor)."""
-
-	variantCfgDetails = {}
-	variantCfgFile = None
-
-	try:
-		variantCfgFile = open(str(aVariantCfgFile))
-	except IOError, (number, message):
-		raise MetaDataError("Could not read variant configuration file "+str(aVariantCfgFile)+" ("+message+")")
-
-	for line in variantCfgFile.readlines():
-		if re.search('^(\s$|\s*#)', line):
-			continue
-		# Note that this detection of the .hrh file matches the command line build i.e. ".hrh" somewhere
-		# in the specified line
-		elif re.search('\.hrh', line, re.I):
-			variantHrh = line.strip()
-			if variantHrh.startswith('\\') or variantHrh.startswith('/'):
-				variantHrh = variantHrh[1:]
-			variantHrh = aEPOCROOT.Append(variantHrh)
-			variantCfgDetails['VARIANT_HRH'] = variantHrh
-		else:
-			lineContent = line.split()
-
-			if len(lineContent) == 1:
-				variantCfgDetails[lineContent.pop(0)] = 1
-			else:
-				variantCfgDetails[lineContent.pop(0)] = lineContent
-
-	variantCfgFile.close()
-
-	if not variantCfgDetails.has_key('VARIANT_HRH'):
-		raise MetaDataError("No variant file specified in "+str(aVariantCfgFile))
-	if not variantHrh.isFile():
-		raise MetaDataError("Variant file "+str(variantHrh)+" does not exist")
-
-	return variantCfgDetails
-
-def getOsVerFromKifXml(aPathToKifXml):
-	"""Obtain the OS version from the kif.xml file located at $EPOCROOT/epoc32/data/kif.xml.
-
-	If successful, the function returns a string such as "v95" to indicate 9.5; None is
-	returned if for any reason the function cannot determine the OS version."""
-
-	releaseTagName = "ki:release"
-	osVersion = None
-
-	import xml.dom.minidom
-
-	try:
-		# Parsed document object
-		kifDom = xml.dom.minidom.parse(str(aPathToKifXml))
-
-		# elements - the elements whose names are releaseTagName
-		elements = kifDom.getElementsByTagName(releaseTagName)
-
-		# There should be exactly one of the elements whose name is releaseTagName
-		# If more than one, osVersion is left as None, since the version should be
-		# unique to the kif.xml file
-		if len(elements) == 1:
-			osVersionTemp = elements[0].getAttribute("version")
-			osVersion = "v" + osVersionTemp.replace(".", "")
-
-		kifDom.unlink() # Clean up
-
-	except:
-		# There's no documentation on which exceptions are raised by these functions.
-		# We catch everything and assume any exception means there was a failure to
-		# determine OS version. None is returned, and the code will fall back
-		# to looking at the buildinfo.txt file.
-		pass
-
-	return osVersion
-
-def getOsVerFromBuildInfoTxt(aPathToBuildInfoTxt):
-	"""Obtain the OS version from the buildinfo.txt file located at $EPOCROOT/epoc32/data/buildinfo.txt.
-
-	If successful, the function returns a string such as "v95" to indicate 9.5; None is
-	returned if for any reason the function cannot determine the OS version.
-
-	The file $EPOCROOT/epoc32/data/buildinfo.txt is presumed to exist. The client code should
-	handle existance/non-existance."""
-
-	pathToBuildInfoTxt = str(aPathToBuildInfoTxt) # String form version of path to buildinfo.txt
-
-	# Open the file for reading; throw an exception if it could not be read - note that
-	# it should exist at this point.
-	try:
-		buildInfoTxt = open(pathToBuildInfoTxt)
-	except IOError, (number, message):
-		raise MetaDataError("Could not read buildinfo.txt file at" + pathToBuildInfoTxt + ": (" + message + ")")
-
-	# Example buildinfo.txt contents:
-	#
-	# DeviceFamily               100
-	# DeviceFamilyRev            0x900
-	# ManufacturerSoftwareBuild  M08765_Symbian_OS_v9.5
-	#
-	# Regexp to match the line containing the OS version
-	# Need to match things like M08765_Symbian_OS_v9.5 and M08765_Symbian_OS_vFuture
-	# So for the version, match everything except whitespace after v. Whitespace
-	# signifies the end of the regexp.
-	osVersionMatcher = re.compile('.*_Symbian_OS_v([^\s]*)', re.I)
-	osVersion = None
-
-	# Search for a regexp match over all the times in the file
-	# Note: if two or more lines match the search pattern then
-	# the latest match will overwrite the osVersion string.
-	for line in buildInfoTxt:
-		matchResult = osVersionMatcher.match(line)
-		if matchResult:
-			result = matchResult.groups()
-			osVersion = "v" +  str(reduce(lambda x, y: x + y, result))
-			osVersion = osVersion.replace(".", "")
-
-	buildInfoTxt.close() # Clean-up
-
-	return osVersion
-
-def getBuildableBldInfBuildPlatforms(aBldInfBuildPlatforms,
-									aDefaultOSBuildPlatforms,
-									aBaseDefaultOSBuildPlatforms,
-									aBaseUserDefaultOSBuildPlatforms):
-	"""Obtain a set of build platform names supported by a bld.inf file
-
-	Build platform deduction is based on both the contents of the PRJ_PLATFORMS section of
-	a bld.inf file together with a hard-coded set of default build platforms supported by
-	the build system itself."""
-
-	expandedBldInfBuildPlatforms = []
-	removePlatforms = set()
-
-	for bldInfBuildPlatform in aBldInfBuildPlatforms:
-		if bldInfBuildPlatform.upper() == "DEFAULT":
-			expandedBldInfBuildPlatforms.extend(aDefaultOSBuildPlatforms.split())
-		elif bldInfBuildPlatform.upper() == "BASEDEFAULT":
-			expandedBldInfBuildPlatforms.extend(aBaseDefaultOSBuildPlatforms.split())
-		elif bldInfBuildPlatform.upper() == "BASEUSERDEFAULT":
-			expandedBldInfBuildPlatforms.extend(aBaseUserDefaultOSBuildPlatforms.split())
-		elif bldInfBuildPlatform.startswith("-"):
-			removePlatforms.add(bldInfBuildPlatform.lstrip("-").upper())
-		else:
-			expandedBldInfBuildPlatforms.append(bldInfBuildPlatform.upper())
-
-	if len(expandedBldInfBuildPlatforms) == 0:
-		expandedBldInfBuildPlatforms.extend(aDefaultOSBuildPlatforms.split())
-
-	# make a set of platforms that can be built
-	buildableBldInfBuildPlatforms = set(expandedBldInfBuildPlatforms)
-
-	# Add platforms that are buildable by virtue of the presence of another
-	for piggyBackedPlatform in PiggyBackedBuildPlatforms:
-		if piggyBackedPlatform in buildableBldInfBuildPlatforms:
-			buildableBldInfBuildPlatforms.update(PiggyBackedBuildPlatforms.get(piggyBackedPlatform))
-
-	# Remove platforms that were negated
-	buildableBldInfBuildPlatforms -= removePlatforms
-
-	return buildableBldInfBuildPlatforms
-
-
-def getPreProcessorCommentDetail (aPreProcessorComment):
-	"""Takes a preprocessor comment and returns an array containing the filename and linenumber detail."""
-
-	commentDetail = []
-	commentMatch = re.search('# (?P<LINENUMBER>\d+) "(?P<FILENAME>.*)"', aPreProcessorComment)
-
-	if commentMatch:
-		filename = commentMatch.group('FILENAME')
-		filename = os.path.abspath(filename)
-		filename = re.sub(r'\\\\', r'\\', filename)
-		filename = re.sub(r'//', r'/', filename)
-		filename = generic_path.Path(filename)
-		linenumber = int (commentMatch.group('LINENUMBER'))
-
-		commentDetail.append(filename)
-		commentDetail.append(linenumber)
-
-	return commentDetail
-
-
-# Classes
-
-class MetaDataError(Exception):
-	"""Fatal error wrapper, to be thrown directly back to whatever is calling."""
-
-	def __init__(self, aText):
-		self.Text = aText
-	def __str__(self):
-		return repr(self.Text)
-
-
-class PreProcessedLine(str):
-	"""Custom string class that accepts filename and line number information from
-	a preprocessed context."""
-
-	def __new__(cls, value, *args, **keywargs):
-		return str.__new__(cls, value)
-
-	def __init__(self, value, aFilename, aLineNumber):
-		self.filename = aFilename
-		self.lineNumber = aLineNumber
-
-	def getFilename (self):
-		return self.filename
-
-	def getLineNumber (self):
-		return self.lineNumber
-
-class PreProcessor(raptor_utilities.ExternalTool):
-	"""Preprocessor wrapper suitable for Symbian metadata file processing."""
-
-	def __init__(self, aPreProcessor,
-				 aStaticOptions,
-				 aIncludeOption,
-				 aMacroOption,
-				 aPreIncludeOption,
-				 aRaptor):
-		raptor_utilities.ExternalTool.__init__(self, aPreProcessor)
-		self.__StaticOptions = aStaticOptions
-		self.__IncludeOption = aIncludeOption
-		self.__MacroOption = aMacroOption
-		self.__PreIncludeOption = aPreIncludeOption
-
-		self.filename = ""
-		self.__Macros = []
-		self.__IncludePaths = []
-		self.__PreIncludeFile = ""
-		self.raptor = aRaptor
-
-	def call(self, aArgs, sourcefilename):
-		""" Override call so that we can do our own error handling."""
-		tool = self._ExternalTool__Tool
-		try:
-			commandline = tool + " " + aArgs + " " + str(sourcefilename)
-
-			# the actual call differs between Windows and Unix
-			if raptor_utilities.getOSFileSystem() == "unix":
-				p = subprocess.Popen(commandline, \
-									 shell=True, bufsize=65535, \
-									 stdin=subprocess.PIPE, \
-									 stdout=subprocess.PIPE, \
-									 stderr=subprocess.PIPE, \
-									 close_fds=True)
-			else:
-				p = subprocess.Popen(commandline, \
-									 bufsize=65535, \
-									 stdin=subprocess.PIPE, \
-									 stdout=subprocess.PIPE, \
-									 stderr=subprocess.PIPE, \
-									 universal_newlines=True)
-
-			# run the command and wait for all the output
-			(self._ExternalTool__Output, errors) = p.communicate()
-
-			if self.raptor.debugOutput:
-				self.raptor.Debug("Preprocessing Start %s", str(sourcefilename))
-				self.raptor.Debug("Output:\n%s", self._ExternalTool__Output)
-				self.raptor.Debug("Errors:\n%s", errors)
-				self.raptor.Debug("Preprocessing End %s", str(sourcefilename))
-
-			incRE = re.compile("In file included from")
-			fromRE = re.compile(r"\s+from")
-			warningRE = re.compile("warning:|pasting.+token|from.+:")
-			remarkRE = re.compile("no newline at end of file|does not give a valid preprocessing token")
-
-			actualErr = False
-			if errors != "":
-				for error in errors.splitlines():
-					if incRE.search(error) or fromRE.search(error):
-						continue
-					if not remarkRE.search(error):
-						if warningRE.search(error):
-							self.raptor.Warn("%s: %s", tool, error)
-						else:
-							self.raptor.Error("%s: %s", tool, error)
-							actualErr = True
-			if actualErr:
-				raise MetaDataError("Errors in %s" % str(sourcefilename))
-
-		except Exception,e:
-			raise MetaDataError("Preprocessor exception: %s" % str(e))
-
-		return 0	# all OK
-
-	def setMacros(self, aMacros):
-		self.__Macros = aMacros
-
-	def addMacro(self, aMacro):
-		self.__Macros.append(aMacro)
-
-	def addMacros(self, aMacros):
-		self.__Macros.extend(aMacros)
-
-	def getMacros(self):
-		return self.__Macros
-
-
-	def addIncludePath(self, aIncludePath):
-		p = str(aIncludePath)
-		if p == "":
-			self.raptor.Warn("attempt to set an empty preprocessor include path for %s" % str(self.filename))
-		else:
-			self.__IncludePaths.append(p)
-
-	def addIncludePaths(self, aIncludePaths):
-		for path in aIncludePaths:
-			self.addIncludePath(path)
-
-	def setIncludePaths(self, aIncludePaths):
-		self.__IncludePaths = []
-		self.addIncludePaths(aIncludePaths)
-
-	def setPreIncludeFile(self, aPreIncludeFile):
-		self.__PreIncludeFile = aPreIncludeFile
-
-	def preprocess(self):
-		preProcessorCall = self.__constructPreProcessorCall()
-		returnValue = self.call(preProcessorCall, self.filename)
-
-		return self.getOutput()
-
-	def __constructPreProcessorCall(self):
-
-		call = self.__StaticOptions
-
-		if self.__PreIncludeFile:
-			call += " " + self.__PreIncludeOption
-			call += " " + str(self.__PreIncludeFile)
-
-		for macro in self.__Macros:
-			call += " " + self.__MacroOption + macro
-
-		for includePath in self.__IncludePaths:
-			call += " " + self.__IncludeOption
-			call += " " + str(includePath)
-
-		return call
-
-
-class MetaDataFile(object):
-	"""A generic representation of a Symbian metadata file
-
-	Symbian metadata files are subject to preprocessing, primarily with macros based
-	on the selected build platform.  This class provides a generic means of wrapping
-	up the preprocessing of such files."""
-
-	def __init__(self, aFilename, gnucpp, aRootLocation=None, log=None):
-		"""
-		@param aFilename	An MMP, bld.inf or other preprocessable build spec file
-		@param aDefaultPlatform  Default preprocessed version of this file
-		@param aCPP 		location of GNU CPP
-		@param log 		A class with Debug(<string>), Info(<string>) and Error(<string>) methods
-		"""
-		self.filename = aFilename
-		self.__RootLocation = aRootLocation
-		# Dictionary with key of build platform and a text string of processed output as values
-		self.__PreProcessedContent = {}
-		self.log = log
-
-		self.__gnucpp = gnucpp
-		if gnucpp is None:
-			raise ValueError('gnucpp must be set')
-
-	def depspath(self, platform):
-	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
-	       Subclasses should redefine this
-	   """
-	   return str(platform['SBS_BUILD_DIR']) + "/" + str(self.__RootLocation) + "." + platform['key_md5'] + ".d"
-
-	def getContent(self, aBuildPlatform):
-
-		key = aBuildPlatform['key']
-
-		config_macros = []
-
-		adepfilename = self.depspath(aBuildPlatform)
-		generateDepsOptions = ""
-		if adepfilename:
-
-			if raptor_utilities.getOSPlatform().startswith("win"):
-				metatarget = "$(PARSETARGET)"
-			else:
-				metatarget = "'$(PARSETARGET)'"
-			generateDepsOptions = "-MD -MF%s -MT%s" % (adepfilename, metatarget)
-			aBuildPlatform['METADEPS'].append((adepfilename, metatarget))
-			try:
-				os.makedirs(os.path.dirname(adepfilename))
-			except Exception, e:
-				self.log.Debug("Couldn't make bldinf outputpath for dependency generation")
-
-		config_macros = (aBuildPlatform['PLATMACROS']).split()
-
-		if not key in self.__PreProcessedContent:
-
-			preProcessor = PreProcessor(self.__gnucpp, '-undef -nostdinc ' + generateDepsOptions + ' ',
-										'-I', '-D', '-include', self.log)
-			preProcessor.filename = self.filename
-
-			# always have the current directory on the include path
-			preProcessor.addIncludePath('.')
-
-			# the SYSTEMINCLUDE directories defined in the build config
-			# should be on the include path. This is added mainly to support
-			# Feature Variation as SYSTEMINCLUDE is usually empty at this point.
-			systemIncludes = aBuildPlatform['SYSTEMINCLUDE']
-			if systemIncludes:
-				preProcessor.addIncludePaths(systemIncludes.split())
-
-			preInclude = aBuildPlatform['VARIANT_HRH']
-
-			# for non-Feature Variant builds, the directory containing the HRH should
-			# be on the include path
-			if not aBuildPlatform['ISFEATUREVARIANT']:
-				preProcessor.addIncludePath(preInclude.Dir())
-
-			# and EPOCROOT/epoc32/include
-			preProcessor.addIncludePath(aBuildPlatform['EPOCROOT'].Append('epoc32/include'))
-
-			# and the directory containing the bld.inf file
-			if self.__RootLocation is not None and str(self.__RootLocation) != "":
-				preProcessor.addIncludePath(self.__RootLocation)
-
-			# and the directory containing the file we are processing
-			preProcessor.addIncludePath(self.filename.Dir())
-
-			# there is always a pre-include file
-			preProcessor.setPreIncludeFile(preInclude)
-
-			macros = ["SBSV2"]
-
-			if config_macros:
-				macros.extend(config_macros)
-
-			if macros:
-				for macro in macros:
-					preProcessor.addMacro(macro + "=_____" +macro)
-
-			# extra "raw" macros that do not need protecting
-			preProcessor.addMacro("__GNUC__=3")
-
-			preProcessorOutput = preProcessor.preprocess()
-
-			# Resurrect preprocessing replacements
-			pattern = r'([\\|/]| |) ?_____(('+macros[0]+')'
-			for macro in macros[1:]:
-				pattern += r'|('+macro+r')'
-
-			pattern += r'\s*)'
-			# Work on all Macros in one substitution.
-			text = re.sub(pattern, r"\1\2", preProcessorOutput)
-			text = re.sub(r"\n[\t ]*", r"\n", text)
-
-			self.__PreProcessedContent[key] = text
-
-		return self.__PreProcessedContent[key]
-
-class MMPFile(MetaDataFile):
-	"""A generic representation of a Symbian metadata file
-
-	Symbian metadata files are subject to preprocessing, primarily with macros based
-	on the selected build platform.  This class provides a generic means of wrapping
-	up the preprocessing of such files."""
-
-	def __init__(self, aFilename, gnucpp, bldinf, log=None):
-		"""
-		@param aFilename	An MMP, bld.inf or other preprocessable build spec file
-		@param gnucpp 		location of GNU CPP
-		@param bldinf   	the bldinf file that this mmp comes from
-		@param log 			A class with Debug(<string>), Info(<string>) and Error(<string>) methods
-		"""
-		super(MMPFile, self).__init__(aFilename, gnucpp, str(bldinf.filename.Dir()), log)
-		self.__bldinf = bldinf
-
-		self.__gnucpp = gnucpp
-		if gnucpp is None:
-			raise ValueError('gnucpp must be set')
-
-	def depspath(self, platform):
-	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
-	       Subclasses should redefine this
-	   """
-	   return self.__bldinf.outputpath(platform) + "/" + self.filename.File() + '.' + platform['key_md5'] + ".d"
-
-class Export(object):
-	"""Single processed PRJ_EXPORTS or PRJ_TESTEXPORTS entry from a bld.inf file"""
-
-	def getPossiblyQuotedStrings(cls,spec):
-		""" 	Split a string based on whitespace
-			but keep double quoted substrings together.
-		"""
-		inquotes=False
-		intokengap=False
-		sourcedest=[]
-		word = 0
-		for c in spec:
-			if c == '"':
-				if inquotes:
-					inquotes = False
-					word += 1
-					intokengap = True
-				else:
-					inquotes = True
-					intokengap = False
-				pass
-			elif c == ' ' or c == '\t':
-				if inquotes:
-					if len(sourcedest) == word:
-						sourcedest.append(c)
-					else:
-						sourcedest[word] += c
-				else:
-					if intokengap:
-						# gobble unquoted spaces
-						pass
-					else:
-						word += 1
-						intokengap=True
-				pass
-			else:
-				intokengap = False
-				if len(sourcedest) == word:
-					sourcedest.append(c)
-				else:
-					sourcedest[word] += c
-
-		return sourcedest
-
-	getPossiblyQuotedStrings = classmethod(getPossiblyQuotedStrings)
-
-
-	def __init__(self, aBldInfFile, aExportsLine, aType):
-		"""
-		Rules from the OS library for convenience:
-
-		For PRJ_TESTEXPORTS
-		source_file_1 [destination_file]
-		source_file_n [destination_file]
-		If the source file is listed with a relative path, the path will
-	 	  be considered relative to the directory containing the bld.inf file.
-		If a destination file is not specified, the source file will be copied
-		  to the directory containing the bld.inf file.
-		If a relative path is specified with the destination file, the path
-		  will be considered relative to directory containing the bld.inf file.
-
-		For PRJ_EXPORTS
-		source_file_1 [destination_file]
-		source_file_n [destination_file]
-		:zip zip_file [destination_path]
-
-		Note that:
-		If a source file is listed with a relative path, the path will be
-		considered relative to the directory containing the bld.inf file.
-
-		If a destination file is not specified, the source file will be copied
-		to epoc32\include\.
-
-		If a destination file is specified with the relative path, the path will
-		be considered relative to directory epoc32\include\.
-
-		If a destination begins with a drive letter, then the file is copied to
-		epoc32\data\<drive_letter>\<path>. For example,
-
-			mydata.dat e:\appdata\mydata.dat
-			copies mydata.dat to epoc32\data\e\appdata\mydata.dat.
-			You can use any driveletter between A and Z.
-
-		A line can start with the preface :zip. This instructs the build tools
-		to unzip the specified zip file to the specified destination path. If a
-		destination path is not specified, the source file will be unzipped in
-		the root directory.
-
-
-		"""
-
-		# Work out what action is required - unzip or copy?
-		action = "copy"
-		typematch = re.match(r'^\s*(?P<type>:zip\s+)?(?P<spec>[^\s].*[^\s])\s*$',aExportsLine, re.I)
-
-		spec = typematch.group('spec')
-		if spec == None:
-			raise ValueError('must specify at least a source file for an export')
-
-		if typematch.group('type') is not None:
-			action = "unzip"
-
-		# Split the spec into source and destination but take care
-		# to allow filenames with quoted strings.
-		exportEntries = Export.getPossiblyQuotedStrings(spec)
-
-		# Get the source path as specified by the bld.inf
-		source_spec = exportEntries.pop(0).replace(' ','%20')
-
-		# Resolve the source file
-		sourcepath = generic_path.Path(raptor_utilities.resolveSymbianPath(str(aBldInfFile), source_spec))
-
-		# Find it if the case of the filename is wrong:
-		# Carry on even if we don't find it
-		foundfile = sourcepath.FindCaseless()
-		if foundfile != None:
-			source = str(foundfile).replace(' ','%20')
-		else:
-			source = str(sourcepath).replace(' ','%20')
-
-
-		# Get the destination path as specified by the bld.inf
-		if len(exportEntries) > 0:
-			dest_spec = exportEntries.pop(0).replace(' ','%20')
-		else:
-			dest_spec = None
-		# Destination list - list of destinations. For the WINSCW resource building stage,
-		# files exported to the emulated drives and there are several locations, for example,
-		# PRJ_[TEST]EXPORTS
-		# 1234ABCD.SPD		z:/private/10009876/policy/1234ABCD.spd
-		# needs to end up copied in
-		# epoc32/data/z/private/10009876/policy/1234ABCD.spd *and* in
-		# epoc32/release/winscw/udeb/z/private/10009876/policy/1234ABCD.spd *and* in
-		# epoc32/release/winscw/urel/z/private/10009876/policy/1234ABCD.spd
-		dest_list = []
-
-		# Resolve the destination if one is specified
-		if dest_spec:
-			# check for troublesome characters
-			if ':' in dest_spec and not re.search('^[a-z]:', dest_spec, re.I):
-				raise ValueError("invalid filename " + dest_spec)
-
-			dest_spec = dest_spec.replace(' ','%20')
-			aSubType=""
-			if action == "unzip":
-				aSubType=":zip"
-				dest_spec = dest_spec.rstrip("\\/")
-
-			# Get the export destination(s) - note this can be a list of strings or just a string.
-			dest_list = raptor_utilities.resolveSymbianPath(str(aBldInfFile), dest_spec, aType, aSubType)
-
-			def process_dest(aDest):
-				if dest_spec.endswith('/') or  dest_spec.endswith('\\'):
-					m = generic_path.Path(source)
-					aDest += '/'+m.File()
-				return aDest
-
-			if isinstance(dest_list, list):
-				# Process each file in the list
-				dest_list = map(process_dest, dest_list)
-			else:
-				# Process the single destination
-				dest_list = process_dest(dest_list)
-
-		else:
-			# No destination was specified so we assume an appropriate one
-
-			dest_filename=generic_path.Path(source).File()
-
-			if aType == "PRJ_EXPORTS":
-				if action == "copy":
-					destination = '$(EPOCROOT)/epoc32/include/'+dest_filename
-				elif action == "unzip":
-					destination = '$(EPOCROOT)'
-			elif aType == "PRJ_TESTEXPORTS":
-				d = aBldInfFile.Dir()
-				if action == "copy":
-					destination = str(d.Append(dest_filename))
-				elif action == "unzip":
-					destination = "$(EPOCROOT)"
-			else:
-				raise ValueError("Export type should be 'PRJ_EXPORTS' or 'PRJ_TESTEXPORTS'. It was: "+str(aType))
-
-
-		self.__Source = source
-		if len(dest_list) > 0: # If the list has length > 0, this means there are several export destinations.
-			self.__Destination = dest_list
-		else: # Otherwise the list has length zero, so there is only a single export destination.
-			self.__Destination = destination
-		self.__Action = action
-
-	def getSource(self):
-		return self.__Source
-
-	def getDestination(self):
-		return self.__Destination # Note that this could be either a list, or a string, depending on the export destination
-
-	def getAction(self):
-		return self.__Action
-
-class ExtensionmakefileEntry(object):
-	def __init__(self, aGnuLine, aBldInfFile, tmp):
-
-		self.__BldInfFile = aBldInfFile
-		bldInfLocation = self.__BldInfFile.Dir()
-		biloc = str(bldInfLocation)
-		extInfLocation = tmp.filename.Dir()
-		eiloc = str(extInfLocation)
-
-		if eiloc is None or eiloc == "":
-			eiloc="." # Someone building with a relative raptor path
-		if biloc is None or biloc == "":
-			biloc="." # Someone building with a relative raptor path
-
-		self.__StandardVariables = {}
-		# Relative step-down to the root - let's try ignoring this for now, as it
-		# should amount to the same thing in a world where absolute paths are king
-		self.__StandardVariables['TO_ROOT'] = ""
-		# Top-level bld.inf location
-		self.__StandardVariables['TO_BLDINF'] = biloc
-		self.__StandardVariables['EXTENSION_ROOT'] = eiloc
-
-		# Get the directory and filename from the full path containing the extension makefile
-		self.__FullPath = generic_path.Join(eiloc,aGnuLine)
-		self.__FullPath = self.__FullPath.GetLocalString()
-		self.__Filename = os.path.split(self.__FullPath)[1]
-		self.__Directory = os.path.split(self.__FullPath)[0]
-
-	def getMakefileName(self):
-		return self.__Filename
-
-	def getMakeDirectory(self):
-		return self.__Directory
-
-	def getStandardVariables(self):
-		return self.__StandardVariables
-
-class Extension(object):
-	"""Single processed PRJ_EXTENSIONS or PRJ_TESTEXTENSIONS START EXTENSIONS...END block
-	from a bld.inf file"""
-
-	def __init__(self, aBldInfFile, aStartLine, aOptionLines, aBuildPlatform, aRaptor):
-		self.__BldInfFile = aBldInfFile
-		self.__Options = {}
-		self.interface = ""
-		self.__Raptor = aRaptor
-
-		makefile = ""
-		makefileMatch = re.search(r'^\s*START EXTENSION\s+(?P<MAKEFILE>\S+)\s*(?P<NAMETAG>\S*)$', aStartLine, re.I)
-
-		self.__RawMakefile = ""
-
-		if (makefileMatch):
-			self.__RawMakefile = makefileMatch.group('MAKEFILE')
-			self.nametag = makefileMatch.group('NAMETAG').lower()
-
-			# Ensure all \'s are translated into /'s if required
-			self.interface = self.__RawMakefile
-			self.interface = self.interface.replace("\\", "/").replace("/", ".")
-
-		# To support standalone testing, '$(' prefixed TEMs  are assumed to  start with
-		# a makefile variable and hence be fully located in FLM operation
-		if self.__RawMakefile.startswith("$("):
-			self.__Makefile = self.__RawMakefile + ".mk"
-		else:
-			self.__Makefile = '$(MAKEFILE_TEMPLATES)/' + self.__RawMakefile + ".mk"
-
-		for optionLine in aOptionLines:
-			optionMatch = re.search(r'^\s*(OPTION\s+)?(?P<VARIABLE>\S+)\s+(?P<VALUE>\S+.*)$',optionLine, re.I)
-			if optionMatch:
-				self.__Options[optionMatch.group('VARIABLE').upper()] = optionMatch.group('VALUE')
-
-		bldInfLocation = self.__BldInfFile.Dir()
-
-		biloc = str(bldInfLocation)
-		if biloc is None or biloc == "":
-			biloc="." # Someone building with a relative raptor path
-
-		extInfLocation = aStartLine.filename.Dir()
-
-		eiloc = str(extInfLocation)
-		if eiloc is None or eiloc == "":
-			eiloc="." # Someone building with a relative raptor path
-
-		self.__StandardVariables = {}
-		# Relative step-down to the root - let's try ignoring this for now, as it
-		# should amount to the same thing in a world where absolute paths are king
-		self.__StandardVariables['TO_ROOT'] = ""
-		# Top-level bld.inf location
-		self.__StandardVariables['TO_BLDINF'] = biloc
-		# Location of bld.inf file containing the current EXTENSION block
-		self.__StandardVariables['EXTENSION_ROOT'] = eiloc
-
-		# If the interface exists, this means it's not a Template Extension Makefile so don't look for a .meta file for it;
-		# so do nothing if it's not a template extension makefile
-		try:
-			self.__Raptor.cache.FindNamedInterface(str(self.interface), aBuildPlatform['CACHEID'])
-		except KeyError: # This means that this Raptor doesn't have the interface self.interface, so we are in a TEM
-			# Read extension meta file and get default options from it.  The use of TEM meta file is compulsory if TEM is used
-			metaFilename = "%s/epoc32/tools/makefile_templates/%s.meta" % (aBuildPlatform['EPOCROOT'], self.__RawMakefile)
-			metaFile = None
-			try:
-				metaFile = open(metaFilename, "r")
-			except IOError, e:
-				self.__warn("Extension: %s - cannot open Meta file: %s" % (self.__RawMakefile, metaFilename))
-
-			if metaFile:
-				for line in metaFile.readlines():
-					defaultOptionMatch = re.search(r'^OPTION\s+(?P<VARIABLE>\S+)\s+(?P<VALUE>\S+.*)$',line, re.I)
-					if defaultOptionMatch and defaultOptionMatch.group('VARIABLE').upper() not in self.__Options.keys():
-						self.__Options[defaultOptionMatch.group('VARIABLE').upper()] = defaultOptionMatch.group('VALUE')
-
-				metaFile.close()
-
-	def __warn(self, format, *extras):
-		if (self.__Raptor):
-			self.__Raptor.Warn(format, *extras)
-
-	def getIdentifier(self):
-		return re.sub (r'\\|\/|\$|\(|\)', '_', self.__RawMakefile)
-
-	def getMakefile(self):
-		return self.__Makefile
-
-	def getOptions(self):
-		return self.__Options
-
-	def getStandardVariables(self):
-		return self.__StandardVariables
-
-class MMPFileEntry(object):
-	def __init__(self, aFilename, aTestOption, aARMOption):
-		self.filename = aFilename
-		self.testoption = aTestOption
-		if aARMOption:
-			self.armoption = True
-		else:
-			self.armoption = False
-
-
-class BldInfFile(MetaDataFile):
-	"""Representation of a Symbian bld.inf file"""
-
-	def __init__(self, aFilename, gnucpp, log=None):
-		MetaDataFile.__init__(self, aFilename, gnucpp, None, log)
-		self.__Raptor = log
-		self.testManual = 0
-		self.testAuto = 0
-	# Generic
-
-	def getBuildPlatforms(self, aBuildPlatform):
-		platformList = []
-
-		for platformLine in self.__getSection(aBuildPlatform, 'PRJ_PLATFORMS'):
-			for platformEntry in platformLine.split():
-				platformList.append(platformEntry)
-
-		return platformList
-
-	# Build Platform Specific
-	def getMMPList(self, aBuildPlatform, aType="PRJ_MMPFILES"):
-		mmpFileList=[]
-		gnuList = []
-		makefileList = []
-		extFound = False
-		m = None
-
-		hashValue = {'mmpFileList': [] , 'gnuList': [], 'makefileList' : []}
-
-		for mmpFileEntry in self.__getSection(aBuildPlatform, aType):
-
-			actualBldInfRoot = mmpFileEntry.getFilename()
-			n = re.match('\s*(?P<makefiletype>(GNUMAKEFILE|N?MAKEFILE))\s+(?P<extmakefile>[^ ]+)\s*(support|manual)?\s*(?P<invalid>\S+.*)?\s*$',mmpFileEntry,re.I)
-			if n:
-
-				if (n.groupdict()['invalid']):
-					self.log.Error("%s (%d) : invalid .mmp file qualifier \"%s\"", mmpFileEntry.filename, mmpFileEntry.getLineNumber(), n.groupdict()['invalid'])
-				if raptor_utilities.getOSFileSystem() == "unix":
-					self.log.Warn("NMAKEFILE/GNUMAKEFILE/MAKEFILE keywords not supported on Linux")
-				else:
-					extmakefilearg = n.groupdict()['extmakefile']
-					bldInfDir = actualBldInfRoot.Dir()
-					extmakefilename = bldInfDir.Append(extmakefilearg)
-					extmakefile = ExtensionmakefileEntry(extmakefilearg, self.filename, mmpFileEntry)
-
-					if (n.groupdict()['makefiletype']).upper() == "GNUMAKEFILE":
-						gnuList.append(extmakefile)
-					else:
-						makefileList.append(extmakefile)
-			else:
-				# Currently there is only one possible option - build as arm.
-				# For TESTMMPFILES, the supported options are support, tidy, ignore, manual and build as arm
-				if aType.upper()=="PRJ_TESTMMPFILES":
-					if re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I):
-						m = re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I)
-				else:
-					if re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I):
-						m = re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I)
-
-			if m:
-				if (m.groupdict()['invalid']):
-					self.log.Error("%s (%d) : invalid .mmp file qualifier \"%s\"", mmpFileEntry.filename, mmpFileEntry.getLineNumber(), m.groupdict()['invalid'])
-
-				mmpFileName = m.groupdict()['name']
-				testmmpoption = "auto" # Setup tests to be automatic by default
-				tokens = m.groupdict()
-				for key,item in tokens.iteritems():
-					if key=="manual" and item=="manual":
-						testmmpoption = "manual"
-					elif key=="support" and item=="support":
-						testmmpoption = "support"
-					elif key=="ignore" and item=="ignore":
-						testmmpoption = "ignore"
-
-				buildasarm = False
-				if  m.groupdict()['baa']:
-					if m.groupdict()['baa'].lower() == 'build_as_arm':
-						buildasarm = True
-
-				if not mmpFileName.lower().endswith('.mmp'):
-					mmpFileName += '.mmp'
-				bldInfDir = actualBldInfRoot.Dir()
-				try:
-					mmpFileName = bldInfDir.Append(mmpFileName)
-					mmpfe = MMPFileEntry(mmpFileName, testmmpoption, buildasarm)
-					mmpFileList.append(mmpfe)
-				except ValueError, e:
-					self.log.Error("invalid .mmp file name: %s" % str(e))
-
-				m = None
-
-
-		hashValue['mmpFileList'] = mmpFileList
-		hashValue['gnuList'] = gnuList
-		hashValue['makefileList'] = makefileList
-
-		return hashValue
-
-	# Return a list of gnumakefiles used in the bld.inf
-	def getExtensionmakefileList(self, aBuildPlatform, aType="PRJ_MMPFILES",aString = ""):
-		extMakefileList=[]
-		m = None
-		for extmakeFileEntry in self.__getSection(aBuildPlatform, aType):
-
-			actualBldInfRoot = extmakeFileEntry.filename
-			if aType.upper()=="PRJ_TESTMMPFILES":
-				m = re.match('\s*GNUMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
-			else:
-				if aString == "gnumakefile":
-					m = re.match('\s*GNUMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
-				elif aString == "nmakefile":
-					m = re.match('\s*NMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
-				elif aString == "makefile":
-					m = re.match('\s*MAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
-			if m:
-				if (m.groupdict()['invalid']):
-					self.log.Error("%s (%d) : invalid extension makefile qualifier \"%s\"", extmakeFileEntry.filename, extmakeFileEntry.getLineNumber(), m.groupdict()['invalid'])
-
-				extmakefilearg = m.groupdict()['extmakefile']
-				bldInfDir = actualBldInfRoot.Dir()
-				extmakefilename = bldInfDir.Append(extmakefilearg)
-				extmakefile = ExtensionmakefileEntry(extmakefilearg, self.filename, extmakeFileEntry)
-				extMakefileList.append(extmakefile)
-				m = None
-
-		return extMakefileList
-
-	def getTestExtensionmakefileList(self,aBuildPlatform,aString=""):
-		return self.getExtensionmakefileList(aBuildPlatform,"PRJ_TESTMMPFILES",aString)
-
-	def getTestMMPList(self, aBuildPlatform):
-		return self.getMMPList(aBuildPlatform, "PRJ_TESTMMPFILES")
-
-	def getRomTestType(self, aBuildPlatform):
-		testMMPList = self.getTestMMPList(aBuildPlatform)
-		for testMMPFileEntry in testMMPList['mmpFileList']:
-			if aBuildPlatform["TESTCODE"]:
-				# Calculate test type (manual or auto)
-				if testMMPFileEntry.testoption == "manual":
-					self.testManual += 1
-				if not (testMMPFileEntry.testoption == "support" or testMMPFileEntry.testoption == "manual" or testMMPFileEntry.testoption == "ignore"):
-					self.testAuto += 1
-		if self.testManual and self.testAuto:
-			return 'BOTH'
-		elif self.testAuto:
-			return 'AUTO'
-		elif self.testManual:
-			return 'MANUAL'
-		else:
-			return 'NONE'
-
-	def getExports(self, aBuildPlatform, aType="PRJ_EXPORTS"):
-		exportList = []
-
-		for exportLine in self.__getSection(aBuildPlatform, aType):
-
-			if not re.match(r'\S+', exportLine):
-				continue
-
-			try:
-				exportList.append(Export(exportLine.getFilename(), exportLine, aType))
-			except ValueError,e:
-				self.log.Error(str(e))
-
-		return exportList
-
-	def getTestExports(self, aBuildPlatform):
-		return self.getExports(aBuildPlatform, "PRJ_TESTEXPORTS")
-
-	def getExtensions(self, aBuildPlatform, aType="PRJ_EXTENSIONS"):
-		extensionObjects = []
-		start = ""
-		options = []
-
-		for extensionLine in self.__getSection(aBuildPlatform, aType):
-			if (re.search(r'^\s*START ',extensionLine, re.I)):
-				start = extensionLine
-			elif re.search(r'^\s*END\s*$',extensionLine, re.I):
-				extensionObjects.append(Extension(self.filename, start, options, aBuildPlatform, self.__Raptor))
-				start = ""
-				options = []
-			elif re.search(r'^\s*$',extensionLine, re.I):
-				continue
-			elif start:
-				options.append(extensionLine)
-
-		return extensionObjects
-
-	def getTestExtensions(self, aBuildPlatform):
-		return self.getExtensions(aBuildPlatform, "PRJ_TESTEXTENSIONS")
-
-	def __getSection(self, aBuildPlatform, aSection):
-
-		activeSection = False
-		sectionContent = []
-		lineContent = re.split(r'\n', self.getContent(aBuildPlatform));
-
-		currentBldInfFile = self.filename
-		currentLineNumber = 0
-
-		for line in lineContent:
-			if line.startswith("#"):
-				commentDetail = getPreProcessorCommentDetail(line)
-				currentBldInfFile = commentDetail[0]
-				currentLineNumber = commentDetail[1]-1
-				continue
-
-			currentLineNumber += 1
-
-			if not re.match(r'.*\S+', line):
-				continue
-			elif re.match(r'\s*' + aSection + r'\s*$', line, re.I):
-				activeSection = True
-			elif re.match(r'\s*PRJ_\w+\s*$', line, re.I):
-				activeSection = False
-			elif activeSection:
-				sectionContent.append(PreProcessedLine(line, currentBldInfFile, currentLineNumber))
-
-		return sectionContent
-
-	@staticmethod
-	def outputPathFragment(bldinfpath):
-		"""Return a relative path that uniquely identifies this bldinf file
-		   whilst being short so that it can be appended to epoc32/build.
-		   The  build product of a particular bld.inf may be placed in here.
-		   This affects its TEMs and its MMPs"""
-
-		absroot_str = os.path.abspath(str(bldinfpath)).lower().replace("\\","/")
-
-		uniqueid = hashlib.md5()
-		uniqueid.update(absroot_str)
-
-		specnamecomponents = (re.sub("^[A-Za-z]:", "", absroot_str)).split('/') # split, removing any drive identifier (if present)
-
-		pathlist=[]
-		while len(specnamecomponents) > 0:
-			top = specnamecomponents.pop()
-			if top.endswith('.inf'):
-				continue
-			elif top == 'group':
-				continue
-			else:
-				pathlist = [top]
-				break
-
-		pathlist.append("c_"+uniqueid.hexdigest()[:16])
-		return "/".join(pathlist)
-
-	def outputpath(self, platform):
-		""" The full path where product from this bldinf is created."""
-		return str(platform['SBS_BUILD_DIR']) + "/" + BldInfFile.outputPathFragment(self.filename)
-
-	def depspath(self, platform):
-	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
-	       Subclasses should redefine this
-	   """
-	   return self.outputpath(platform) + "/bldinf." + platform['key_md5'] + ".d"
-
-
-
-class MMPRaptorBackend(MMPBackend):
-	"""A parser "backend" for the MMP language
-
-	This is used to map recognised MMP syntax onto a buildspec """
-
-	# Support priorities, with case-fixed mappings for use
-	epoc32priorities = {
-		'low':'Low',
-		'background':'Background',
-		'foreground':'Foreground',
-		'high':'High',
-		'windowserver':'WindowServer',
-		'fileserver':'FileServer',
-		'realtimeserver':'RealTimeServer',
-		'supervisor':'SuperVisor'
-		}
-
-	# Known capability flags with associated bitwise operations
-	supportedCapabilities = {
-		'tcb':(1<<0),
-		'commdd':(1<<1),
-		'powermgmt':(1<<2),
-		'multimediadd':(1<<3),
-		'readdevicedata':(1<<4),
-		'writedevicedata':(1<<5),
-		'drm':(1<<6),
-		'trustedui':(1<<7),
-		'protserv':(1<<8),
-		'diskadmin':(1<<9),
-		'networkcontrol':(1<<10),
-		'allfiles':(1<<11),
-		'swevent':(1<<12),
-		'networkservices':(1<<13),
-		'localservices':(1<<14),
-		'readuserdata':(1<<15),
-		'writeuserdata':(1<<16),
-		'location':(1<<17),
-		'surroundingsdd':(1<<18),
-		'userenvironment':(1<<19),
-	# Old capability names have zero value
-		'root':0,
-		'mediadd':0,
-		'readsystemdata':0,
-		'writesystemdata':0,
-		'sounddd':0,
-		'uidd':0,
-		'killanyprocess':0,
-		'devman':0,
-		'phonenetwork':0,
-		'localnetwork':0
-	  	}
-
-	library_re = re.compile(r"^(?P<name>[^{]+?)(?P<version>{(?P<major>[0-9]+)\.(?P<minor>[0-9]+)})?(\.(lib|dso))?$",re.I)
-
-
-	def __init__(self, aRaptor, aMmpfilename, aBldInfFilename):
-		super(MMPRaptorBackend,self).__init__()
-		self.platformblock = None
-		self.__Raptor = aRaptor
-		self.BuildVariant = raptor_data.Variant()
-		self.ResourceVariants = []
-		self.BitmapVariants = []
-		self.StringTableVariants = []
-		self.__bldInfFilename = aBldInfFilename
-		self.__targettype = "UNKNOWN"
-		self.__currentMmpFile = aMmpfilename
-		self.__defFileRoot = self.__currentMmpFile
-		self.__currentLineNumber = 0
-		self.__sourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, "")
-		self.__userinclude = ""
-		self.__systeminclude = ""
-		self.__bitmapSourcepath = self.__sourcepath
-		self.__current_resource = ""
-		self.__capabilities = []
-		self.__resourceFiles = []
-		self.__pageConflict = []
-		self.__debuggable = ""
-		self.sources = []
-
-		self.__TARGET = ""
-		self.__TARGETEXT = ""
-		self.deffile = ""
-		self.__LINKAS = ""
-		self.nostrictdef = False
-		self.featureVariant = False
-
-		self.__currentResourceVariant = None
-		self.__currentStringTableVariant = None
-		self.__explicitversion = False
-		self.__versionhex = ""
-
-		# "ALL" capability calculated based on the total capabilities currently supported
-		allCapabilities = 0
-		for supportedCapability in MMPRaptorBackend.supportedCapabilities.keys():
-			allCapabilities = allCapabilities | MMPRaptorBackend.supportedCapabilities[supportedCapability]
-		MMPRaptorBackend.supportedCapabilities['all'] = allCapabilities
-
-	# Permit unit-testing output without a Raptor context
-	def __debug(self, format, *extras):
-		if (self.__Raptor):
-			self.__Raptor.Debug(format, *extras)
-
-	def __warn(self, format, *extras):
-		if (self.__Raptor):
-			self.__Raptor.Warn(format, *extras)
-
-	def doPreProcessorComment(self,s,loc,toks):
-		commentDetail = getPreProcessorCommentDetail(toks[0])
-		self.__currentMmpFile = commentDetail[0].GetLocalString()
-		self.__currentLineNumber = commentDetail[1]
-		self.__debug("Current file %s, line number %s\n"  % (self.__currentMmpFile,str(self.__currentLineNumber)))
-		return "OK"
-
-	def doBlankLine(self,s,loc,toks):
-		self.__currentLineNumber += 1
-
-	def doStartPlatform(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Start Platform block "+toks[0])
-		self.platformblock = toks[0]
-		return "OK"
-
-	def doEndPlatform(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Finalise platform " + self.platformblock)
-		return "OK"
-
-	def doSetSwitch(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		prefix=""
-		varname = toks[0].upper()
-
-		# A bright spark made the optionname the same as
-		# the env variable. One will override the other if we pass this
-		# on to make.  Add a prefix to prevent the clash.
-		if varname=='ARMINC':
-			prefix="SET_"
-			self.__debug( "Set switch "+toks[0]+" ON")
-			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
-
-		elif varname=='NOSTRICTDEF':
-			self.nostrictdef = True
-			self.__debug( "Set switch "+toks[0]+" ON")
-			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
-
-		elif varname == 'PAGED':
-			self.BuildVariant.AddOperation(raptor_data.Set(varname, "1"))
-			self.__debug( "Set switch PAGE ON")
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "paged"))
-			self.__debug( "Set switch PAGEDCODE ON")
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "paged"))
-			self.__debug( "Set data PAGEDDATA ON")
-			self.__pageConflict.append("PAGEDCODE")
-			self.__pageConflict.append("PAGEDDATA")
-
-		elif varname == 'UNPAGED':
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGED", "0"))
-			self.__debug( "Set switch PAGED OFF")
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
-			self.__debug( "Set switch PAGEDCODE OFF")
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
-			self.__debug( "Set data PAGEDDATA OFF")
-			self.__pageConflict.append("UNPAGEDCODE")
-			self.__pageConflict.append("UNPAGEDDATA")
-
-		elif varname == 'PAGEDCODE':
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "paged"))
-			self.__debug( "Set switch " + varname + " ON")
-			self.__pageConflict.append(varname)
-
-		elif varname == 'PAGEDDATA':
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "paged"))
-			self.__debug( "Set switch " + varname + " ON")
-			self.__pageConflict.append(varname)
-
-		elif varname == 'UNPAGEDCODE':
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
-			self.__debug( "Set switch " + varname + " ON")
-			self.__pageConflict.append(varname)
-		elif varname == 'UNPAGEDDATA':
-			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
-			self.__debug( "Set switch " + varname + " ON")
-			self.__pageConflict.append(varname)
-
-		elif varname == 'NOLINKTIMECODEGENERATION':
-			self.BuildVariant.AddOperation(raptor_data.Set("LTCG",""))
-			self.__debug( "Set switch " + varname + " OFF")
-		elif varname == 'NOMULTIFILECOMPILATION':
-			self.BuildVariant.AddOperation(raptor_data.Set("MULTIFILE_ENABLED",""))
-			self.__debug( "Set switch " + varname + " OFF")
-
-		elif varname == 'DEBUGGABLE':
-			if self.__debuggable != "udeb":
-				self.__debuggable = "udeb urel"
-			else:
-				self.__Raptor.Warn("DEBUGGABLE keyword ignored as DEBUGGABLE_UDEBONLY is already specified")
-		elif varname == 'DEBUGGABLE_UDEBONLY':
-			if self.__debuggable != "":
-				self.__Raptor.Warn("DEBUGGABLE keyword has no effect as DEBUGGABLE or DEBUGGABLE_UDEBONLY is already set")
-			self.__debuggable = "udeb"
-		elif varname == 'FEATUREVARIANT':
-			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
-			self.featureVariant = True
-		else:
-			self.__debug( "Set switch "+toks[0]+" ON")
-			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
-
-		return "OK"
-
-	def doAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		varname = toks[0].upper()
-		if varname=='TARGET':
-			(self.__TARGET, self.__TARGETEXT) = os.path.splitext(toks[1])
-			self.__TARGETEXT = self.__TARGETEXT.lstrip('.')
-
-			self.BuildVariant.AddOperation(raptor_data.Set("REQUESTEDTARGETEXT", self.__TARGETEXT.lower()))
-
-			lowercase_TARGET = self.__TARGET.lower()
-			self.__debug("Set "+toks[0]+" to " + lowercase_TARGET)
-			self.__debug("Set REQUESTEDTARGETEXT to " + self.__TARGETEXT.lower())
-
-			self.BuildVariant.AddOperation(raptor_data.Set("TARGET", self.__TARGET))
-			self.BuildVariant.AddOperation(raptor_data.Set("TARGET_lower", lowercase_TARGET))
-			if  lowercase_TARGET !=  self.__TARGET:
-				self.__debug("TARGET is not lowercase: '%s' - might cause BC problems." % self.__TARGET)
-		elif varname=='TARGETTYPE':
-			self.__debug("Set "+toks[0]+" to " + str(toks[1]))
-			self.__targettype=toks[1]
-			if  self.__targettype.lower() == "none":
-				self.BuildVariant.AddOperation(raptor_data.Set("TARGET", ""))
-				self.BuildVariant.AddOperation(raptor_data.Set("TARGET_lower",""))
-				self.BuildVariant.AddOperation(raptor_data.Set("REQUESTEDTARGETEXT", ""))
-			self.BuildVariant.AddOperation(raptor_data.Set(varname,toks[1].lower()))
-
-		elif varname=='TARGETPATH':
-			value = toks[1].lower().replace('\\','/')
-			self.__debug("Set "+varname+" to " + value)
-			self.BuildVariant.AddOperation(raptor_data.Set(varname, value))
-
-		elif varname=='OPTION' or varname=='LINKEROPTION':
-			self.__debug("Set "+toks[1]+varname+" to " + str(toks[2]))
-			self.BuildVariant.AddOperation(raptor_data.Append(varname+"_"+toks[1].upper()," ".join(toks[2])))
-
-			# Warn about OPTION ARMASM
-			if "armasm" in toks[1].lower():
-				self.__Raptor.Warn(varname+" ARMASM has no effect (use OPTION ARMCC).")
-
-		elif varname=='OPTION_REPLACE':
-			# Warn about OPTION_REPLACE ARMASM
-			if "armasm" in toks[1].lower():
-				self.__Raptor.Warn("OPTION_REPLACE ARMASM has no effect (use OPTION_REPLACE ARMCC).")
-			else:
-				args = " ".join(toks[2])
-
-				searchReplacePairs = self.resolveOptionReplace(args)
-
-				for searchReplacePair in searchReplacePairs:
-					self.__debug("Append %s to OPTION_REPLACE_%s", searchReplacePair, toks[1].upper())
-					self.BuildVariant.AddOperation(raptor_data.Append(varname+"_"+toks[1].upper(),searchReplacePair))
-
-		elif varname=='SYSTEMINCLUDE' or varname=='USERINCLUDE':
-			for path in toks[1]:
-				resolved = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, path)
-				self.BuildVariant.AddOperation(raptor_data.Append(varname,resolved))
-
-				if varname=='SYSTEMINCLUDE':
-					self.__systeminclude += ' ' + resolved
-					self.__debug("  %s = %s",varname, self.__systeminclude)
-				else:
-					self.__userinclude += ' ' + resolved
-					self.__debug("  %s = %s",varname, self.__userinclude)
-
-				self.__debug("Appending %s to %s",resolved, varname)
-
-			self.__systeminclude = self.__systeminclude.strip()
-			self.__systeminclude = self.__systeminclude.rstrip('\/')
-			self.__userinclude = self.__userinclude.strip()
-			self.__userinclude = self.__userinclude.rstrip('\/')
-
-		elif varname=='EXPORTLIBRARY':
-			# Remove extension from the EXPORTLIBRARY name
-			libName = toks[1].rsplit(".", 1)[0]
-			self.__debug("Set "+varname+" to " + libName)
-			self.BuildVariant.AddOperation(raptor_data.Set(varname,"".join(libName)))
-
-		elif varname=='CAPABILITY':
-			for cap in toks[1]:
-				self.BuildVariant.AddOperation(raptor_data.Append(varname,cap," "))
-				self.__debug("Setting  "+toks[0]+": " + cap)
-				self.__capabilities.append(cap.lower())
-		elif varname=='DEFFILE':
-			self.__defFileRoot = self.__currentMmpFile
-			self.deffile = toks[1]
-		elif varname=='LINKAS':
-			self.__debug("Set "+toks[0]+"  OPTION to " + str(toks[1]))
-			self.__LINKAS = toks[1]
-			self.BuildVariant.AddOperation(raptor_data.Set(varname, toks[1]))
-		elif varname=='SECUREID' or varname=='VENDORID':
-			hexoutput = MMPRaptorBackend.canonicalUID(toks[1])
-			self.__debug("Set "+toks[0]+"  OPTION to " + hexoutput)
-			self.BuildVariant.AddOperation(raptor_data.Set(varname, hexoutput))
-		elif varname=='VERSION':
-			if toks[-1] == "EXPLICIT":
-				self.__explicitversion = True
-				self.BuildVariant.AddOperation(raptor_data.Set("EXPLICITVERSION", "1"))
-
-			vm = re.match(r'^(\d+)(\.(\d+))?$', toks[1])
-			if vm is not None:
-				version = vm.groups()
-				# the major version number
-				major = int(version[0],10)
-
-				# add in the minor number
-				minor = 0
-				if len(version) >  1:
-					minor = int(version[2],10)
-
-				self.__versionhex = "%04x%04x" % (major, minor)
-				self.BuildVariant.AddOperation(raptor_data.Set(varname, "%d.%d" %(major, minor)))
-				self.BuildVariant.AddOperation(raptor_data.Set(varname+"HEX", self.__versionhex))
-				self.__debug("Set "+toks[0]+"  OPTION to " + toks[1])
-				self.__debug("Set "+toks[0]+"HEX OPTION to " + "%04x%04x" % (major,minor))
-
-			else:
-				self.__Raptor.Warn("Invalid version supplied to VERSION (%s), using default value" % toks[1])
-
-		elif varname=='EPOCHEAPSIZE':
-			# Standardise on sending hex numbers to the FLMS.
-
-			if toks[1].lower().startswith('0x'):
-				min = long(toks[1],16)
-			else:
-				min = long(toks[1],10)
-
-			if toks[2].lower().startswith('0x'):
-				max = long(toks[2],16)
-			else:
-				max = long(toks[2],10)
-
-			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MIN", "%x" % min))
-			self.__debug("Set "+varname+"MIN  OPTION to '%x' (hex)" % min )
-			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MAX", "%x" % max))
-			self.__debug("Set "+varname+"MAX  OPTION to '%x' (hex)" % max )
-
-			# Some toolchains require decimal versions of the min/max values, converted to KB and
-			# rounded up to the next 1KB boundary
-			min_dec_kb = (int(min) + 1023) / 1024
-			max_dec_kb = (int(max) + 1023) / 1024
-			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MIN_DEC_KB", "%d" % min_dec_kb))
-			self.__debug("Set "+varname+"MIN  OPTION KB to '%d' (dec)" % min_dec_kb )
-			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MAX_DEC_KB", "%d" % max_dec_kb))
-			self.__debug("Set "+varname+"MAX  OPTION KB to '%d' (dec)" % max_dec_kb )
-
-		elif varname=='EPOCSTACKSIZE':
-			if toks[1].lower().startswith('0x'):
-				stack = long(toks[1],16)
-			else:
-				stack = long(toks[1],10)
-			self.BuildVariant.AddOperation(raptor_data.Set(varname, "%x" % stack))
-			self.__debug("Set "+varname+"  OPTION to '%x' (hex)" % stack  )
-		elif varname=='EPOCPROCESSPRIORITY':
-			# low, background, foreground, high, windowserver, fileserver, realtimeserver or supervisor
-			# These are case insensitive in metadata entries, but must be mapped to a static case pattern for use
-			prio = toks[1].lower()
-
-			# NOTE: Original validation here didn't actually work.  This has been corrected to provide an error, but probably needs re-examination.
-			if not MMPRaptorBackend.epoc32priorities.has_key(prio):
-				self.__Raptor.Error("Priority setting '%s' is not a valid priority - should be one of %s.", prio, MMPRaptorBackend.epoc32priorities.values())
-			else:
-				self.__debug("Set "+toks[0]+" to " +  MMPRaptorBackend.epoc32priorities[prio])
-				self.BuildVariant.AddOperation(raptor_data.Set(varname,MMPRaptorBackend.epoc32priorities[prio]))
-		elif varname=='ROMTARGET' or varname=='RAMTARGET':
-			if len(toks) == 1:
-				self.__debug("Set "+toks[0]+" to <none>" )
-				self.BuildVariant.AddOperation(raptor_data.Set(varname,"<none>"))
-			else:
-				toks1 = str(toks[1]).replace("\\","/")
-				if toks1.find(","):
-					toks1 = re.sub("[,'\[\]]", "", toks1).replace("//","/")
-				self.__debug("Set "+toks[0]+" to " + toks1)
-				self.BuildVariant.AddOperation(raptor_data.Set(varname,toks1))
-
-		else:
-			self.__debug("Set "+toks[0]+" to " + str(toks[1]))
-			self.BuildVariant.AddOperation(raptor_data.Set(varname,"".join(toks[1])))
-
-			if varname=='LINKAS':
-				self.__LINKAS = toks[1]
-
-		return "OK"
-
-	def doAppend(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		"""MMP command
-		"""
-		name=toks[0].upper()
-		if len(toks) == 1:
-			# list can be empty e.g. MACRO _FRED_ when fred it defined in the HRH
-			# causes us to see just "MACRO" in the input - it is valid to ignore this
-			self.__debug("Empty append list for " + name)
-			return "OK"
-		self.__debug("Append to "+name+" the values: " +str(toks[1]))
-
-		if name=='MACRO':
-			name='MMPDEFS'
-		elif name=='LANG':
-			# don't break the environment variable
-			name='LANGUAGES'
-
-		for item in toks[1]:
-			if name=='MMPDEFS':
-				# Unquote any macros since the FLM does it anyhow
-				if item.startswith('"') and item.endswith('"') \
-				or item.startswith("'") and item.endswith("'"):
-					item = item.strip("'\"")
-			if name=='LIBRARY' or name=='DEBUGLIBRARY':
-				im = MMPRaptorBackend.library_re.match(item)
-				if not im:
-					self.__error("LIBRARY: %s Seems to have an invalid name.\nExpected xxxx.lib or xxxx.dso\n where xxxx might be\n\tname or \n\tname(n,m) where n is a major version number and m is a minor version number\n" %item)
-				d = im.groupdict()
-
-				item = d['name']
-				if d['version'] is not None:
-					item += "{%04x%04x}" % (int(d['major']), int(d['minor']))
-				item += ".dso"
-			elif name=='STATICLIBRARY':
-				# the FLM will decide on the ending appropriate to the platform
-				item = re.sub(r"^(.*)\.[Ll][Ii][Bb]$",r"\1", item)
-			elif name=="LANGUAGES":
-				item = item.lower()
-			elif (name=="WIN32_LIBRARY" and (item.startswith(".") or re.search(r'[\\|/]',item))) \
-				or (name=="WIN32_RESOURCE"):
-				# Relatively pathed win32 libraries, and all win32 resources, are resolved in relation
-				# to the wrapper bld.inf file in which their .mmp file is specified.  This equates to
-				# the current working directory in ABLD operation.
-				item = raptor_utilities.resolveSymbianPath(self.__bldInfFilename, item)
-				
-			self.BuildVariant.AddOperation(raptor_data.Append(name,item," "))
-			
-			# maintain a debug library list, the same as LIBRARY but with DEBUGLIBRARY values
-			# appended as they are encountered
-			if name=='LIBRARY' or name=='DEBUGLIBRARY':
-				self.BuildVariant.AddOperation(raptor_data.Append("LIBRARY_DEBUG",item," "))			
-
-		return "OK"
-
-	def canonicalUID(number):
-		""" convert a UID string into an 8 digit hexadecimal string without leading 0x """
-		if number.lower().startswith("0x"):
-			n = int(number,16)
-		else:
-			n = int(number,10)
-
-		return "%08x" % n
-
-	canonicalUID = staticmethod(canonicalUID)
-
-	def doUIDAssignment(self,s,loc,toks):
-		"""A single UID command results in a number of spec variables"""
-		self.__currentLineNumber += 1
-
-		hexoutput = MMPRaptorBackend.canonicalUID(toks[1][0])
-		self.__debug( "Set UID2 to %s" % hexoutput )
-		self.BuildVariant.AddOperation(raptor_data.Set("UID2", hexoutput))
-
-		if len(toks[1]) > 1:
-			hexoutput = MMPRaptorBackend.canonicalUID(toks[1][1])
-			self.__debug( "Set UID3 to %s" % hexoutput)
-			self.BuildVariant.AddOperation(raptor_data.Set("UID3", hexoutput))
-
-		self.__debug( "done set UID")
-		return "OK"
-
-	def doSourcePathAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__sourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, toks[1])
-		self.__debug( "Remembering self.sourcepath state:  "+str(toks[0])+" is now " + self.__sourcepath)
-		self.__debug("selfcurrentMmpFile: " + self.__currentMmpFile)
-		return "OK"
-
-
-	def doSourceAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Setting "+toks[0]+" to " + str(toks[1]))
-		for file in toks[1]:
-			# file is always relative to sourcepath but some MMP files
-			# have items that begin with a slash...
-			file = file.lstrip("/")
-			source = generic_path.Join(self.__sourcepath, file)
-
-			# If the SOURCEPATH itself begins with a '/', then dont look up the caseless version, since
-			# we don't know at this time what $(EPOCROOT) will evaluate to.
-			if source.GetLocalString().startswith('$(EPOCROOT)'):
-				self.sources.append(str(source))	
-				self.__debug("Append SOURCE " + str(source))
-
-			else:
-				foundsource = source.FindCaseless()
-				if foundsource == None:
-					# Hope that the file will be generated later
-					self.__debug("Sourcefile not found: %s" % source)
-					foundsource = source
-
-				self.sources.append(str(foundsource))	
-				self.__debug("Append SOURCE " + str(foundsource))
-
-
-		self.__debug("		sourcepath: " + self.__sourcepath)
-		return "OK"
-
-	# Resource
-
-	def doOldResourceAssignment(self,s,loc,toks):
-		# Technically deprecated, but still used, so...
-		self.__currentLineNumber += 1
-		self.__debug("Processing old-style "+toks[0]+" "+str(toks[1]))
-
-		sysRes = (toks[0].lower() == "systemresource")
-
-		for rss in toks[1]:
-			variant = raptor_data.Variant()
-
-			source = generic_path.Join(self.__sourcepath, rss)
-			variant.AddOperation(raptor_data.Set("SOURCE", str(source)))
-			self.__resourceFiles.append(str(source))
-
-			target = source.File().rsplit(".", 1)[0]	# remove the extension
-			variant.AddOperation(raptor_data.Set("TARGET", target))
-			variant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
-
-			header = target.lower() + ".rsg"			# filename policy
-			variant.AddOperation(raptor_data.Set("HEADER", header))
-
-			if sysRes:
-				dsrtp = self.getDefaultSystemResourceTargetPath()
-				variant.AddOperation(raptor_data.Set("TARGETPATH", dsrtp))
-
-			self.ResourceVariants.append(variant)
-
-		return "OK"
-
-	def getDefaultSystemResourceTargetPath(self):
-		# the default systemresource TARGETPATH value should come from the
-		# configuration rather than being hard-coded here. Then again, this
-		# should really be deprecated away into oblivion...
-		return "system/data"
-
-
-	def getDefaultResourceTargetPath(self, targettype):
-		# the different default TARGETPATH values should come from the
-		# configuration rather than being hard-coded here.
-		if targettype == "plugin":
-			return "resource/plugins"
-		if targettype == "pdl":
-			return "resource/printers"
-		return ""
-
-	def resolveOptionReplace(self, content):
-		"""
-		Constructs search/replace pairs based on .mmp OPTION_REPLACE entries for use on tool command lines
-		within FLMS.
-
-		Depending on what's supplied to OPTION_REPLACE <TOOL>, the core part of the <TOOL> command line
-		in the relevant FLM will have search and replace actions performed on it post-expansion (but pre-
-		any OPTION <TOOL> additions).
-
-		In terms of logic, we try to follow what ABLD does, as the current behaviour is undocumented.
-		What happens is a little inconsistent, and best described by some generic examples:
-
-			OPTION_REPLACE TOOL existing_option replacement_value
-
-				Replace all instances of "option existing_value" with "option replacement_value"
-
-			OPTION_REPLACE TOOL existing_option replacement_option
-
-				Replace all instances of "existing_option" with "replacement_option".
-
-			If "existing_option" is present in isolation then a removal is performed.
-
-		Any values encountered that don't follow an option are ignored.
-		Options are identified as being prefixed with either '-' or '--'.
-
-		The front-end processes each OPTION_REPLACE entry and then appends one or more search/replace pairs
-		to an OPTION_REPLACE_<TOOL> variable in the following format:
-
-		     search<->replace
-		"""
-		# Note that, for compatibility reasons, the following is mostly a port to Python of the corresponding
-		# ABLD Perl, and hence maintains ABLD's idiosyncrasies in what it achieves
-
-		searchReplacePairs = []
-		matches = re.findall("-{1,2}\S+\s*(?!-)\S*",content)
-
-		if matches:
-			# reverse so we can process as a stack whilst retaining original order
-			matches.reverse()
-
-			while (len(matches)):
-				match = matches.pop()
-
-				standaloneMatch = re.match('^(?P<option>\S+)\s+(?P<value>\S+)$', match)
-
-				if (standaloneMatch):
-					# Option listed standalone with a replacement value
-					# Example:
-					# 	OPTION_REPLACE ARMCC --cpu 6
-					# Intention:
-					# 	Replace instances of  "--cpu <something>" with "--cpu 6"
-
-					# Substitute any existing "option <existing_value>" instances with a single word
-					# "@@<existing_value>" for later replacement
-					searchReplacePairs.append('%s <->@@' % standaloneMatch.group('option'))
-
-					# Replace "@@<existing_value>" entries from above with "option <new_value>" entries
-					# A pattern substitution is used to cover pre-existing values
-					searchReplacePairs.append('@@%%<->%s %s' % (standaloneMatch.group('option'), standaloneMatch.group('value')))
-				else:
-					# Options specified in search/replace pairs with optional values
-					# Example:
-					#	OPTION_REPLACE ARMCC --O2 --O3
-					# Intention:
-					#	Replace instances of "--O2" with "--O3"
-
-					# At this point we will be looking at just the search option - there may or may not
-					# be a replacement to consider
-					search = match
-					replace = ""
-					if len(matches):
-						replace = matches.pop()
-					
-					searchReplacePairs.append('%s<->%s' % (search, replace))
-
-			# Replace spaces to maintain word-based grouping in downstream makefile lists
-			for i in range(0,len(searchReplacePairs)):
-				searchReplacePairs[i] = searchReplacePairs[i].replace(' ','%20')
-
-		return searchReplacePairs
-
-	def doStartResource(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug("Start RESOURCE "+toks[1])
-
-		self.__current_resource = generic_path.Path(self.__sourcepath, toks[1])
-		self.__current_resource = str(self.__current_resource)
-
-		self.__debug("sourcepath: " + self.__sourcepath)
-		self.__debug("self.__current_resource source: " + toks[1])
-		self.__debug("adjusted self.__current_resource source=" + self.__current_resource)
-
-		self.__currentResourceVariant = raptor_data.Variant()
-		self.__currentResourceVariant.AddOperation(raptor_data.Set("SOURCE", self.__current_resource))
-		self.__resourceFiles.append(self.__current_resource)
-
-		# The target name is the basename of the resource without the extension
-		# e.g. "/fred/129ab34f.rss" would have a target name of "129ab34f"
-		target = self.__current_resource.rsplit("/",1)[-1]
-		target = target.rsplit(".",1)[0]
-		self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET", target))
-		self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
-		self.__headerspecified = False
-		self.__headeronlyspecified = False
-		self.__current_resource_header = target.lower() + ".rsg"
-
-		return "OK"
-
-	def doResourceAssignment(self,s,loc,toks):
-		""" Assign variables for resource files """
-		self.__currentLineNumber += 1
-		varname = toks[0].upper() # the mmp keyword
-		varvalue = "".join(toks[1])
-
-		# Get rid of any .rsc extension because the build system
-		# needs to have it stripped off to calculate other names
-		# for other purposes and # we aren't going to make it
-		# optional anyhow.
-		if varname == "TARGET":
-			target_withext = varvalue.rsplit("/\\",1)[-1]
-			target = target_withext.rsplit(".",1)[0]
-			self.__current_resource_header = target.lower() + ".rsg"
-			self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
-			self.__debug("Set resource "+varname+" to " + target)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,target))
-		if varname == "TARGETPATH":
-			varvalue=varvalue.replace('\\','/')
-			self.__debug("Set resource "+varname+" to " + varvalue)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,varvalue))
-		else:
-			self.__debug("Set resource "+varname+" to " + varvalue)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,varvalue))
-		return "OK"
-
-	def doResourceAppend(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug("Append resource to "+toks[0]+" the values: " +str(toks[1]))
-		varname = toks[0].upper()
-
-		# we cannot use LANG as it interferes with the environment
-		if varname == "LANG":
-			varname = "LANGUAGES"
-
-		for item in toks[1]:
-			if varname == "LANGUAGES":
-				item = item.lower()
-			self.__currentResourceVariant.AddOperation(raptor_data.Append(varname,item))
-		return "OK"
-
-	def doResourceSetSwitch(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		name = toks[0].upper()
-
-		if name == "HEADER":
-			self.__headerspecified = True
-
-		elif name == "HEADERONLY":
-			self.__headeronlyspecified = True
-
-		else:
-			value = "1"
-			self.__debug( "Set resource switch " + name + " " + value)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set(name, value))
-
-		return "OK"
-
-	def doEndResource(self,s,loc,toks):
-		self.__currentLineNumber += 1
-
-		# Header name can change, depening if there was a TARGET defined or not, so it must be appended at the end
-		if self.__headerspecified:
-			self.__debug("Set resource switch HEADER " + self.__current_resource_header)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADER", self.__current_resource_header))
-
-		if self.__headeronlyspecified:
-			self.__debug("Set resource switch HEADERONLY " + self.__current_resource_header)
-			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADER", self.__current_resource_header))
-			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADERONLY", "True"))
-
-		self.__debug("End RESOURCE")
-		self.ResourceVariants.append(self.__currentResourceVariant)
-		self.__currentResourceVariant = None
-		self.__current_resource = ""
-		return "OK"
-
-	# Bitmap
-
-	def doStartBitmap(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug("Start BITMAP "+toks[1])
-
-		self.__currentBitmapVariant = raptor_data.Variant(toks[1].replace('.','_'))
-		# Use BMTARGET and BMTARGET_lower because that prevents
-		# confusion with the TARGET and TARGET_lower of our parent MMP
-		# when setting the OUTPUTPATH.  This in turn allows us to
-		# not get tripped up by multiple mbms being generated with
-		# the same name to the same directory.
-		self.__currentBitmapVariant.AddOperation(raptor_data.Set("BMTARGET", toks[1]))
-		self.__currentBitmapVariant.AddOperation(raptor_data.Set("BMTARGET_lower", toks[1].lower()))
-		self.__currentBitmapVariant.AddOperation(raptor_data.Set("SOURCE", ""))
-		return "OK"
-
-	def doBitmapAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug("Set bitmap "+toks[0]+" to " + str(toks[1]))
-		name = toks[0].upper()
-		value = "".join(toks[1])
-		if name == "TARGETPATH":
-			value = value.replace('\\','/')
-
-		self.__currentBitmapVariant.AddOperation(raptor_data.Set(name,value))
-		return "OK"
-
-	def doBitmapSourcePathAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug("Previous bitmap sourcepath:" + self.__bitmapSourcepath)
-		self.__bitmapSourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, toks[1])
-		self.__debug("New bitmap sourcepath: " + self.__bitmapSourcepath)
-
-	def doBitmapSourceAssignment(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Setting "+toks[0]+" to " + str(toks[1]))
-		# The first "source" is the colour depth for all the others.
-		# The depth format is b[,m] where b is the bitmap depth and m is
-		# the mask depth.
-		# Valid values for b are: 1 2 4 8 c4 c8 c12 c16 c24 c32 c32a (?)
-		# Valid values for m are: 1 8 (any number?)
-		#
-		# If m is specified then the bitmaps are in pairs: b0 m0 b1 m1...
-		# If m is not specified then there are no masks, just bitmaps: b0 b1...
-		colordepth = toks[1][0].lower()
-		if "," in colordepth:
-			(bitmapdepth, maskdepth) = colordepth.split(",")
-		else:
-			bitmapdepth = colordepth
-			maskdepth = 0
-
-		sources=""
-		mask = False
-		for file in toks[1][1:]:
-			path = generic_path.Join(self.__bitmapSourcepath, file)
-			if sources:
-				sources += " "
-			if mask:
-				sources += "DEPTH=" + maskdepth + " FILE=" + str(path)
-			else:
-				sources += "DEPTH=" + bitmapdepth + " FILE=" + str(path)
-			if maskdepth:
-				mask = not mask
-		self.__debug("sources: " + sources)
-		self.__currentBitmapVariant.AddOperation(raptor_data.Append("SOURCE", sources))
-		return "OK"
-
-	def doBitmapSetSwitch(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Set bitmap switch "+toks[0]+" ON")
-		self.__currentBitmapVariant.AddOperation(raptor_data.Set(toks[0].upper(), "1"))
-		return "OK"
-
-	def doEndBitmap(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__bitmapSourcepath = self.__sourcepath
-		self.BitmapVariants.append(self.__currentBitmapVariant)
-		self.__currentBitmapVariant = None
-		self.__debug("End BITMAP")
-		return "OK"
-
-	# Stringtable
-
-	def doStartStringTable(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		self.__debug( "Start STRINGTABLE "+toks[1])
-
-		specstringtable = generic_path.Join(self.__sourcepath, toks[1])
-		uniqname = specstringtable.File().replace('.','_') # corrected, filename only
-		source = str(specstringtable.FindCaseless())
-
-		self.__debug("sourcepath: " + self.__sourcepath)
-		self.__debug("stringtable: " + toks[1])
-		self.__debug("adjusted stringtable source=" + source)
-
-		self.__currentStringTableVariant = raptor_data.Variant(uniqname)
-		self.__currentStringTableVariant.AddOperation(raptor_data.Set("SOURCE", source))
-		self.__currentStringTableVariant.AddOperation(raptor_data.Set("EXPORTPATH", ""))
-		self.__stringtableExported = False
-
-		# The target name by default is the name of the stringtable without the extension
-		# e.g. the stringtable "/fred/http.st" would have a default target name of "http"
-		stringtable_withext = specstringtable.File()
-		self.__stringtable = stringtable_withext.rsplit(".",1)[0].lower()
-		self.__currentStringTableVariant.AddOperation(raptor_data.Set("TARGET", self.__stringtable))
-
-		self.__stringtableHeaderonlyspecified = False
-
-		return "OK"
-
-	def doStringTableAssignment(self,s,loc,toks):
-		""" Assign variables for stringtables """
-		self.__currentLineNumber += 1
-		varname = toks[0].upper() # the mmp keyword
-		varvalue = "".join(toks[1])
-
-		# Get rid of any .rsc extension because the build system
-		# needs to have it stripped off to calculate other names
-		# for other purposes and # we aren't going to make it
-		# optional anyhow.
-		if varname == "EXPORTPATH":
-			finalvalue = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, varvalue)
-			self.__stringtableExported = True
-		else:
-			finalvalue = varvalue
-
-		self.__debug("Set stringtable "+varname+" to " + finalvalue)
-		self.__currentStringTableVariant.AddOperation(raptor_data.Set(varname,finalvalue))
-		return "OK"
-
-	def doStringTableSetSwitch(self,s,loc,toks):
-		self.__currentLineNumber += 1
-		if toks[0].upper()== "HEADERONLY":
-			self.__stringtableHeaderonlyspecified = True
-			self.__debug( "Set stringtable switch "+toks[0]+" ON")
-			self.__currentStringTableVariant.AddOperation(raptor_data.Set(toks[0].upper(), "1"))
-		return "OK"
-
-	def doEndStringTable(self,s,loc,toks):
-		self.__currentLineNumber += 1
-
-		if not self.__stringtableExported:
-			# There was no EXPORTPATH specified for this stringtable
-			# so for our other code to be able to reference it we
-			# must add the path of the generated location to the userinclude path
-
-			ipath = "$(OUTPUTPATH)"
-			self.BuildVariant.AddOperation(raptor_data.Append("USERINCLUDE",ipath))
-			self.__userinclude += ' ' + ipath
-			self.__debug("  USERINCLUDE = %s", self.__userinclude)
-			self.__userinclude.strip()
-
-		self.StringTableVariants.append(self.__currentStringTableVariant)
-		self.__currentStringTableVariant = None
-		self.__debug("End STRINGTABLE")
-		if not self.__stringtableHeaderonlyspecified:
-			# Have to assume that this is where the cpp file will be.  This has to be maintained
-			# in sync with the FLM's idea of where this file should be.  We need a better way.
-			# Interfaces also need outputs that allow other interfaces to refer to their outputs
-			# without having to "know" where they will be.
-			self.sources.append('$(OUTPUTPATH)/' + self.__stringtable + '.cpp')
-		return "OK"
-
-
-	def doUnknownStatement(self,s,loc,toks):
-		self.__warn("%s (%d) : Unrecognised Keyword %s", self.__currentMmpFile, self.__currentLineNumber, str(toks))
-		self.__currentLineNumber += 1
-		return "OK"
-
-
-	def doUnknownBlock(self,s,loc,toks):
-		self.__warn("%s (%d) : Unrecognised Block %s", self.__currentMmpFile, self.__currentLineNumber, str(toks))
-		self.__currentLineNumber += 1
-		return "OK"
-
-	def doDeprecated(self,s,loc,toks):
-		self.__debug( "Deprecated command " + str(toks))
-		self.__warn("%s (%d) : %s is deprecated .mmp file syntax", self.__currentMmpFile, self.__currentLineNumber, str(toks))
-		self.__currentLineNumber += 1
-		return "OK"
-
-	def doNothing(self):
-		self.__currentLineNumber += 1
-		return "OK"
-
-	def finalise(self, aBuildPlatform):
-		"""Post-processing of data that is only applicable in the context of a fully
-		processed .mmp file."""
-		resolvedDefFile = ""
-
-		if self.__TARGET:
-			defaultRootName = self.__TARGET
-			if self.__TARGETEXT!="":
-				defaultRootName += "." + self.__TARGETEXT
-
-			# NOTE: Changing default .def file name based on the LINKAS argument is actually
-			# a defect, but this follows the behaviour of the current build system.
-			if (self.__LINKAS):
-				defaultRootName = self.__LINKAS
-
-			resolvedDefFile = self.resolveDefFile(defaultRootName, aBuildPlatform)
-			self.__debug("Resolved def file:  %s" % resolvedDefFile )
-			# We need to store this resolved deffile location for the FREEZE target
-			self.BuildVariant.AddOperation(raptor_data.Set("RESOLVED_DEFFILE", resolvedDefFile))
-
-		# If a deffile is specified, an FLM will put in a dependency.
-		# If a deffile is specified then raptor_meta will guess a name but:
-		#	1) If the guess is wrong then the FLM will complain "no rule to make ..."
-		#	2) In some cases, e.g. plugin, 1) is not desirable as the presence of a def file
-		#		is not a necessity.  In these cases the FLM needs to know if DEFFILE
-		#		is a guess or not so it can decide if a dependency should be added.
-
-		# We check that the def file exists and that it is non-zero (incredible
-		# that this should be needed).
-
-		deffile_keyword="1"
-		if self.deffile == "":
-			# If the user didn't specify a deffile name then
-			# we must be guessing
-			# Let's check if our guess actually corresponds to a
-			# real file.  If it does then that confims the guess.
-			#  If there's no file then we still need to pass make the name
-			# so it can complain about there not being a DEF file
-			# for this particular target type and fail to build this target.
-
-			deffile_keyword=""
-			try:
-				findpath = generic_path.Path(resolvedDefFile)
-				foundfile = findpath.FindCaseless()
-
-				if foundfile == None:
-					raise IOError("file not found")
-
-				self.__debug("Found DEFFILE  " + foundfile.GetLocalString())
-				rfstat = os.stat(foundfile.GetLocalString())
-
-				mode = rfstat[stat.ST_MODE]
-				if mode != None and stat.S_ISREG(mode) and rfstat[stat.ST_SIZE] > 0:
-					resolvedDefFile = str(foundfile)
-				else:
-					resolvedDefFile=""
-			except Exception,e:
-				self.__debug("While Searching for an IMPLIED  DEFFILE: %s: %s" % (str(e),str(findpath)) )
-				resolvedDefFile=""
-		else:
-			if not resolvedDefFile == "":
-				try:
-					findpath = generic_path.Path(resolvedDefFile)
-					resolvedDefFile = str(findpath.FindCaseless())
-					if resolvedDefFile=="None":
-						raise IOError("file not found")
-				except Exception,e:
-					self.__warn("While Searching for a SPECIFIED DEFFILE: %s: %s" % (str(e),str(findpath)) )
-					resolvedDefFile=""
-			else:
-				self.__warn("DEFFILE KEYWORD used (%s) but def file not resolved" % (self.deffile) )
-
-
-		self.BuildVariant.AddOperation(raptor_data.Set("DEFFILE", resolvedDefFile))
-		self.__debug("Set DEFFILE to " + resolvedDefFile)
-		self.BuildVariant.AddOperation(raptor_data.Set("DEFFILEKEYWORD", deffile_keyword))
-		self.__debug("Set DEFFILEKEYWORD to '%s'",deffile_keyword)
-
-		# if this target type has a default TARGETPATH other than "" for
-		# resources then we need to add that default to all resources which
-		# do not explicitly set the TARGETPATH themselves.
-		tp = self.getDefaultResourceTargetPath(self.getTargetType())
-		if tp:
-			for i,var in enumerate(self.ResourceVariants):
-				# does this resource specify its own TARGETPATH?
-				needTP = True
-				for op in var.ops:
-					if isinstance(op, raptor_data.Set) \
-					and op.name == "TARGETPATH":
-						needTP = False
-						break
-				if needTP:
-					self.ResourceVariants[i].AddOperation(raptor_data.Set("TARGETPATH", tp))
-
-		# some core build configurations need to know about the resource builds, and
-		# some resource building configurations need knowledge of the core build
-		for resourceFile in self.__resourceFiles:
-			self.BuildVariant.AddOperation(raptor_data.Append("RESOURCEFILES", resourceFile))
-
-		for i,var in enumerate(self.ResourceVariants):
-			self.ResourceVariants[i].AddOperation(raptor_data.Set("MAIN_TARGET_lower", self.__TARGET.lower()))
-			self.ResourceVariants[i].AddOperation(raptor_data.Set("MAIN_REQUESTEDTARGETEXT", self.__TARGETEXT.lower()))
-
-		# Resolve combined capabilities as hex flags, for configurations that require them
-		capabilityFlag1 = 0
-		capabilityFlag2 = 0			# Always 0
-
-		for capability in self.__capabilities:
-			invert = 0
-
-			if capability.startswith('-'):
-				invert = 0xffffffff
-				capability = capability.lstrip('-')
-
-			if MMPRaptorBackend.supportedCapabilities.has_key(capability):
-				capabilityFlag1 = capabilityFlag1 ^ invert
-				capabilityFlag1 = capabilityFlag1 | MMPRaptorBackend.supportedCapabilities[capability]
-				capabilityFlag1 = capabilityFlag1 ^ invert
-
-		capabilityFlag1 = "%08xu" % capabilityFlag1
-		capabilityFlag2 = "%08xu" % capabilityFlag2
-
-		self.BuildVariant.AddOperation(raptor_data.Set("CAPABILITYFLAG1", capabilityFlag1))
-		self.__debug ("Set CAPABILITYFLAG1 to " + capabilityFlag1)
-		self.BuildVariant.AddOperation(raptor_data.Set("CAPABILITYFLAG2", capabilityFlag2))
-		self.__debug ("Set CAPABILITYFLAG2 to " + capabilityFlag2)
-
-		# For non-Feature Variant builds, the location of the product include hrh file is
-		# appended to the SYSTEMINCLUDE list
-		if not aBuildPlatform['ISFEATUREVARIANT']:
-			productIncludePath = str(aBuildPlatform['VARIANT_HRH'].Dir())
-			self.BuildVariant.AddOperation(raptor_data.Append("SYSTEMINCLUDE",productIncludePath))
-			self.__debug("Appending product include location %s to SYSTEMINCLUDE",productIncludePath)
-
-		# Specifying both a PAGED* and its opposite UNPAGED* keyword in a .mmp file
-		# will generate a warning and the last keyword specified will take effect.
-		self.__pageConflict.reverse()
-		if "PAGEDCODE" in self.__pageConflict and "UNPAGEDCODE" in self.__pageConflict:
-			for x in self.__pageConflict:
-				if x == "PAGEDCODE" or x == "UNPAGEDCODE":
-					self.__Raptor.Warn("Both PAGEDCODE and UNPAGEDCODE are specified. The last one %s will take effect" % x)
-					break
-		if "PAGEDDATA" in self.__pageConflict and "UNPAGEDDATA" in self.__pageConflict:
-			for x in self.__pageConflict:
-				if x == "PAGEDDATA" or x == "UNPAGEDDATA":
-					self.__Raptor.Warn("Both PAGEDDATA and UNPAGEDDATA are specified. The last one %s will take effect" % x)
-					break
-
-		# Set Debuggable
-		self.BuildVariant.AddOperation(raptor_data.Set("DEBUGGABLE", self.__debuggable))
-
-		if self.__explicitversion:
-			self.BuildVariant.AddOperation(raptor_data.Append("UNIQUETARGETPATH","$(TARGET_lower)_$(VERSIONHEX)_$(REQUESTEDTARGETEXT)",'/'))
-		else:
-			self.BuildVariant.AddOperation(raptor_data.Append("UNIQUETARGETPATH","$(TARGET_lower)_$(REQUESTEDTARGETEXT)",'/'))
-
-		# Put the list of sourcefiles in with one Set operation - saves memory
-		# and performance over using multiple Append operations.
-		self.BuildVariant.AddOperation(raptor_data.Set("SOURCE",
-						   " ".join(self.sources)))
-
-	def getTargetType(self):
-		"""Target type in lower case - the standard format"""
-		return self.__targettype.lower()
-
-	def resolveDefFile(self, aTARGET, aBuildPlatform):
-		"""Returns a fully resolved DEFFILE entry depending on .mmp file location and TARGET, DEFFILE and NOSTRICTDEF
-		entries in the .mmp file itself (where appropriate).
-		Is able to deal with target names that have multiple '.' characters e.g. messageintercept.esockdebug.dll
-		"""
-
-		resolvedDefFile = ""
-		platform = aBuildPlatform['PLATFORM']
-
-		# Not having a default .def file directory is a pretty strong indicator that
-		# .def files aren't supported for the particular platform
-		if PlatformDefaultDefFileDir.has_key(platform):
-			(targetname,targetext) = os.path.splitext(aTARGET)
-			(defname,defext) = os.path.splitext(self.deffile)
-			if defext=="":
-				defext = ".def"
-
-			# NOTE: WORKAROUND
-			if len(targetext) > 4:
-				targetname += defext
-
-			if not self.deffile:
-				resolvedDefFile = targetname
-			else:
-				if re.search('[\\|\/]$', self.deffile):
-					# If DEFFILE is *solely* a path, signified by ending in a slash, then TARGET is the
-					# basis for the default .def filename but with the specified path as prefix
-					resolvedDefFile = self.deffile + targetname
-
-				else:
-					resolvedDefFile = defname
-
-				resolvedDefFile = resolvedDefFile.replace('~', PlatformDefaultDefFileDir[platform])
-
-			if resolvedDefFile:
-				if not self.nostrictdef:
-					resolvedDefFile += 'u'
-
-				if self.__explicitversion:
-					resolvedDefFile += '{' + self.__versionhex + '}'
-
-				resolvedDefFile += defext
-
-
-				# If a DEFFILE statement doesn't specify a path in any shape or form, prepend the default .def file
-				# location based on the platform being built
-				if not re.search('[\\\/]+', self.deffile):
-					resolvedDefFile = '../'+PlatformDefaultDefFileDir[platform]+'/'+resolvedDefFile
-
-				resolvedDefFile = raptor_utilities.resolveSymbianPath(self.__defFileRoot, resolvedDefFile, 'DEFFILE', "", str(aBuildPlatform['EPOCROOT']))
-
-		return resolvedDefFile
-
-
-class MetaReader(object):
-	"""Entry point class for Symbian metadata processing.
-
-	Provides a means of integrating "traditional" Symbian metadata processing
-	with the new Raptor build system."""
-
-	filesplit_re = re.compile(r"^(?P<name>.*)\.(?P<ext>[^\.]*)$")
-
-	def __init__(self, aRaptor, configsToBuild):
-		self.__Raptor = aRaptor
-		self.BuildPlatforms = []
-		self.ExportPlatforms = []
-
-		# Get the version of CPP that we are using
-		metadata = self.__Raptor.cache.FindNamedVariant("meta")
-		evaluator = self.__Raptor.GetEvaluator(None, raptor_data.BuildUnit(metadata.name, [metadata]) )
-		self.__gnucpp = self.CheckValue(evaluator, "GNUCPP")
-		self.__defaultplatforms = self.CheckValue(evaluator, "DEFAULT_PLATFORMS")
-		self.__basedefaultplatforms = self.CheckValue(evaluator, "BASE_DEFAULT_PLATFORMS")
-		self.__baseuserdefaultplatforms = self.CheckValue(evaluator, "BASE_USER_DEFAULT_PLATFORMS")
-
-		# Only read each variant.cfg once
-		variantCfgs = {}
-
-		# Group the list of configurations into "build platforms".
-		# A build platform is a set of configurations which share
-		# the same metadata. In other words, a set of configurations
-		# for which the bld.inf and MMP files pre-process to exactly
-		# the same text.
-		platforms = {}
-
-		# Exports are not "platform dependent" but they are configuration
-		# dependent because different configs can have different EPOCROOT
-		# and VARIANT_HRH values. Each "build platform" has one associated
-		# "export platform" but several "build platforms" can be associated
-		# with the same "export platform".
-		exports = {}
-
-		for buildConfig in configsToBuild:
-			# get everything we need to know about the configuration
-			evaluator = self.__Raptor.GetEvaluator(None, buildConfig)
-
-			detail = {}
-			detail['PLATFORM'] = self.CheckValue(evaluator, "TRADITIONAL_PLATFORM")
-			epocroot = self.CheckValue(evaluator, "EPOCROOT")
-			detail['EPOCROOT'] = generic_path.Path(epocroot)
-
-			sbs_build_dir = self.CheckValue(evaluator, "SBS_BUILD_DIR")
-			detail['SBS_BUILD_DIR'] = generic_path.Path(sbs_build_dir)
-			flm_export_dir = self.CheckValue(evaluator, "FLM_EXPORT_DIR")
-			detail['FLM_EXPORT_DIR'] = generic_path.Path(flm_export_dir)
-			detail['CACHEID'] = flm_export_dir
-			if raptor_utilities.getOSPlatform().startswith("win"):
-				detail['PLATMACROS'] = self.CheckValue(evaluator,"PLATMACROS.WINDOWS")
-			else:
-				detail['PLATMACROS'] = self.CheckValue(evaluator,"PLATMACROS.LINUX")
-
-			# Apply OS variant provided we are not ignoring this
-			if not self.__Raptor.ignoreOsDetection:
-				self.__Raptor.Debug("Automatic OS detection enabled.")
-				self.ApplyOSVariant(buildConfig, epocroot)
-			else: # We are ignore OS versions so no detection required, so no variant will be applied
-				self.__Raptor.Debug("Automatic OS detection disabled.")
-
-			# is this a feature variant config or an ordinary variant
-			fv = evaluator.Get("FEATUREVARIANTNAME")
-			if fv:
-				variantHdr = self.CheckValue(evaluator, "VARIANT_HRH")
-				variantHRH = generic_path.Path(variantHdr)
-				detail['ISFEATUREVARIANT'] = True
-			else:
-				variantCfg = self.CheckValue(evaluator, "VARIANT_CFG")
-				variantCfg = generic_path.Path(variantCfg)
-				if not variantCfg in variantCfgs:
-					# get VARIANT_HRH from the variant.cfg file
-					varCfg = getVariantCfgDetail(detail['EPOCROOT'], variantCfg)
-					variantCfgs[variantCfg] = varCfg['VARIANT_HRH']
-					# we expect to always build ABIv2
-					if not 'ENABLE_ABIV2_MODE' in varCfg:
-						self.__Raptor.Warn("missing flag ENABLE_ABIV2_MODE in %s file. ABIV1 builds are not supported.",
-										   str(variantCfg))
-				variantHRH = variantCfgs[variantCfg]
-				detail['ISFEATUREVARIANT'] = False
-
-			detail['VARIANT_HRH'] = variantHRH
-			self.__Raptor.Info("'%s' uses variant hrh file '%s'", buildConfig.name, variantHRH)
-			detail['SYSTEMINCLUDE'] = self.CheckValue(evaluator, "SYSTEMINCLUDE")
-
-			detail['METADEPS'] = [] # Dependency targets for all metadata files in this platform
-
-			# find all the interface names we need
-			ifaceTypes = self.CheckValue(evaluator, "INTERFACE_TYPES")
-			interfaces = ifaceTypes.split()
-
-			for iface in interfaces:
-				detail[iface] = self.CheckValue(evaluator, "INTERFACE." + iface)
-
-			# not test code unless positively specified
-			detail['TESTCODE'] = self.CheckValue(evaluator, "TESTCODE", "")
-
-			# make a key that identifies this platform uniquely
-			# - used to tell us whether we have done the pre-processing
-			# we need already using another platform with compatible values.
-
-			key = str(detail['VARIANT_HRH']) \
-			 	+ str(detail['EPOCROOT']) \
-		    	+ detail['SYSTEMINCLUDE'] \
-		    	+ detail['PLATFORM']
-
-		    # Keep a short version of the key for use in filenames.
-			uniq = hashlib.md5()
-			uniq.update(key)
-
-			detail['key'] = key
-			detail['key_md5'] = "p_" + uniq.hexdigest()
-			del uniq
-
-			# compare this configuration to the ones we have already seen
-
-			# Is this an unseen export platform?
-			# concatenate all the values we care about in a fixed order
-			# and use that as a signature for the exports.
-			items = ['EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE', 'export']
-			export = ""
-			for i in  items:
-				if i in detail:
-					export += i + str(detail[i])
-
-			if export in exports:
-				# add this configuration to an existing export platform
-				index = exports[export]
-				self.ExportPlatforms[index]['configs'].append(buildConfig)
-			else:
-				# create a new export platform with this configuration
-				exports[export] = len(self.ExportPlatforms)
-				exp = copy.copy(detail)
-				exp['PLATFORM'] = 'EXPORT'
-				exp['configs']  = [buildConfig]
-				self.ExportPlatforms.append(exp)
-
-			# Is this an unseen build platform?
-			# concatenate all the values we care about in a fixed order
-			# and use that as a signature for the platform.
-			items = ['PLATFORM', 'EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE']
-			if raptor_utilities.getOSPlatform().startswith("win"):
-				items.append('PLATMACROS.WINDOWS')
-			else:
-				items.append('PLATMACROS.LINUX')
-
-			items.extend(interfaces)
-			platform = ""
-			for i in  items:
-				if i in detail:
-					platform += i + str(detail[i])
-
-			if platform in platforms:
-				# add this configuration to an existing build platform
-				index = platforms[platform]
-				self.BuildPlatforms[index]['configs'].append(buildConfig)
-			else:
-				# create a new build platform with this configuration
-				platforms[platform] = len(self.BuildPlatforms)
-				detail['configs'] = [buildConfig]
-				self.BuildPlatforms.append(detail)
-
-		# one platform is picked as the "default" for extracting things
-		# that are supposedly platform independent (e.g. PRJ_PLATFORMS)
-		self.defaultPlatform = self.ExportPlatforms[0]
-
-	def CheckValue(self, evaluator, key, default = None):
-		"""extract a value from an evaluator and raise an exception if None.
-
-		An optional default can be set to replace a None value."""
-		value = evaluator.Get(key)
-		if value == None:
-			if default == None:
-				raise MetaDataError("configuration " + evaluator.config.name +
-								    " has no variable " + key)
-			else:
-				return default
-		return value
-
-	def ReadBldInfFiles(self, aFileList, doExportOnly):
-		"""Take a list of bld.inf files and return a list of build specs.
-
-		The returned specification nodes will be suitable for all the build
-		configurations under consideration (using Filter nodes where required).
-		"""
-
-		# we need a Filter node per export platform
-		exportNodes = []
-		for i,ep in enumerate(self.ExportPlatforms):
-			filter = raptor_data.Filter("export_" + str(i))
-
-			# what configurations is this node active for?
-			for config in ep['configs']:
-				filter.AddConfigCondition(config.name)
-
-			exportNodes.append(filter)
-
-		# we need a Filter node per build platform
-		platformNodes = []
-		for i,bp in enumerate(self.BuildPlatforms):
-			filter = raptor_data.Filter("build_" + str(i))
-
-			# what configurations is this node active for?
-			for config in bp['configs']:
-				filter.AddConfigCondition(config.name)
-
-			# platform-wide data
-			platformVar = raptor_data.Variant()
-			platformVar.AddOperation(raptor_data.Set("PRODUCT_INCLUDE",
-													 str(bp['VARIANT_HRH'])))
-
-			filter.AddVariant(platformVar)
-			platformNodes.append(filter)
-
-		# check that each bld.inf exists and add a Specification node for it
-		# to the nodes of the export and build platforms that it supports.
-		for bif in aFileList:
-			if bif.isFile():
-				self.__Raptor.Info("Processing %s", str(bif))
-				try:
-					self.AddComponentNodes(bif, exportNodes, platformNodes)
-
-				except MetaDataError, e:
-					self.__Raptor.Error(e.Text, bldinf=str(bif))
-					if not self.__Raptor.keepGoing:
-						return []
-			else:
-				self.__Raptor.Error("build info file does not exist", bldinf=str(bif))
-				if not self.__Raptor.keepGoing:
-					return []
-
-		# now we have the top-level structure in place...
-		#
-		# <filter exports 1>
-		#		<spec bld.inf 1 />
-		#		<spec bld.inf 2 />
-		#		<spec bld.inf N /> </filter>
-		# <filter build 1>
-		#		<spec bld.inf 1 />
-		#		<spec bld.inf 2 />
-		#		<spec bld.inf N /> </filter>
-		# <filter build 2>
-		#		<spec bld.inf 1 />
-		#		<spec bld.inf 2 />
-		#		<spec bld.inf N /> </filter>
-		# <filter build 3>
-		#		<spec bld.inf 1 />
-		#		<spec bld.inf 2 />
-		#		<spec bld.inf N /> </filter>
-		#
-		# assuming that every bld.inf builds for every platform and all
-		# exports go to the same place. clearly, it is more likely that
-		# some filters have less than N child nodes. in bigger builds there
-		# will also be more than one export platform.
-
-		# we now need to process the EXPORTS for all the bld.inf nodes
-		# before we can do anything else (because raptor itself must do
-		# some exports before the MMP files that include them can be
-		# processed).
-		for i,p in enumerate(exportNodes):
-			exportPlatform = self.ExportPlatforms[i]
-			for s in p.GetChildSpecs():
-				try:
-					self.ProcessExports(s, exportPlatform)
-
-				except MetaDataError, e:
-					self.__Raptor.Error("%s",e.Text)
-					if not self.__Raptor.keepGoing:
-						return []
-
-		# this is a switch to return the function at this point if export
-		# only option is specified in the run
-		if (self.__Raptor.doExportOnly):
-			self.__Raptor.Info("Processing Exports only")
-			return[]
-
-		# after exports are done we can look to see if there are any
-		# new Interfaces which can be used for EXTENSIONS. Make sure
-		# that we only load each cache once as some export platforms
-		# may share a directory.
-		doneID = {}
-		for ep in self.ExportPlatforms:
-			flmDir = ep["FLM_EXPORT_DIR"]
-			cid = ep["CACHEID"]
-			if flmDir.isDir() and not cid in doneID:
-				self.__Raptor.cache.Load(flmDir, cid)
-			doneID[cid] = True
-
-		# finally we can process all the other parts of the bld.inf nodes.
-		# Keep a list of the projects we were asked to build so that we can
-		# tell at the end if there were any we didn't know about.
-		self.projectList = list(self.__Raptor.projects)
-		for i,p in enumerate(platformNodes):
-			buildPlatform = self.BuildPlatforms[i]
-			for s in p.GetChildSpecs():
-				try:
-					self.ProcessTEMs(s, buildPlatform)
-					self.ProcessMMPs(s, buildPlatform)
-
-				except MetaDataError, e:
-					self.__Raptor.Error(e.Text)
-					if not self.__Raptor.keepGoing:
-						return []
-
-		for badProj in self.projectList:
-			self.__Raptor.Warn("Can't find project '%s' in any build info file", badProj)
-
-		# everything is specified
-		return exportNodes + platformNodes
-
-	def ModuleName(self,aBldInfPath):
-		"""Calculate the name of the ROM/emulator batch files that run the tests"""
-
-		def LeftPortionOf(pth,sep):
-			""" Internal function to return portion of str that is to the left of sep. 
-			The partition is case-insentive."""
-			length = len((pth.lower().partition(sep.lower()))[0])
-			return pth[0:length]
-			
-		modulePath = LeftPortionOf(LeftPortionOf(os.path.dirname(aBldInfPath), "group"), "ongoing")
-		moduleName = os.path.basename(modulePath.strip("/"))
-		
-		# Ensure that ModuleName does not return blank, if the above calculation determines
-		# that moduleName is blank
-		if moduleName == "" or moduleName.endswith(":"):
-			moduleName = "module"
-		return moduleName
-
-
-	def AddComponentNodes(self, buildFile, exportNodes, platformNodes):
-		"""Add Specification nodes for a bld.inf to the appropriate platforms."""
-		bldInfFile = BldInfFile(buildFile, self.__gnucpp, self.__Raptor)
-
-		specName = self.getSpecName(buildFile, fullPath=True)
-
-		if isinstance(buildFile, raptor_xml.SystemModelComponent):
-			# this component came from a system_definition.xml
-			layer = buildFile.GetContainerName("layer")
-			component = buildFile.GetContainerName("component")
-		else:
-			# this is a plain old bld.inf file from the command-line
-			layer = ""
-			component = ""
-
-		# exports are independent of build platform
-		for i,ep in enumerate(self.ExportPlatforms):
-			specNode = raptor_data.Specification(specName)
-
-			# keep the BldInfFile object for later
-			specNode.bldinf = bldInfFile
-
-			# add some basic data in a component-wide variant
-			var = raptor_data.Variant()
-			var.AddOperation(raptor_data.Set("COMPONENT_META", str(buildFile)))
-			var.AddOperation(raptor_data.Set("COMPONENT_NAME", component))
-			var.AddOperation(raptor_data.Set("COMPONENT_LAYER", layer))
-			specNode.AddVariant(var)
-
-			# add this bld.inf Specification to the export platform
-			exportNodes[i].AddChild(specNode)
-
-		# get the relevant build platforms
-		listedPlatforms = bldInfFile.getBuildPlatforms(self.defaultPlatform)
-		platforms = getBuildableBldInfBuildPlatforms(listedPlatforms,
-													self.__defaultplatforms,
-													self.__basedefaultplatforms,
-													self.__baseuserdefaultplatforms)
-
-
-
-		outputDir = BldInfFile.outputPathFragment(buildFile)
-
-		# Calculate "module name"
-		modulename = self.ModuleName(str(buildFile))
-
-		for i,bp in enumerate(self.BuildPlatforms):
-			if bp['PLATFORM'] in platforms:
-				specNode = raptor_data.Specification(specName)
-
-				# keep the BldInfFile object for later
-				specNode.bldinf = bldInfFile
-
-				# add some basic data in a component-wide variant
-				var = raptor_data.Variant()
-				var.AddOperation(raptor_data.Set("COMPONENT_META",str(buildFile)))
-				var.AddOperation(raptor_data.Set("COMPONENT_NAME", component))
-				var.AddOperation(raptor_data.Set("COMPONENT_LAYER", layer))
-				var.AddOperation(raptor_data.Set("MODULE", modulename))
-				var.AddOperation(raptor_data.Append("OUTPUTPATHOFFSET", outputDir, '/'))
-				var.AddOperation(raptor_data.Append("OUTPUTPATH", outputDir, '/'))
-				var.AddOperation(raptor_data.Append("BLDINF_OUTPUTPATH",outputDir, '/'))
-
-				var.AddOperation(raptor_data.Set("TEST_OPTION", specNode.bldinf.getRomTestType(bp)))
-				specNode.AddVariant(var)
-
-				# add this bld.inf Specification to the build platform
-				platformNodes[i].AddChild(specNode)
-
-	def ProcessExports(self, componentNode, exportPlatform):
-		"""Do the exports for a given platform and skeleton bld.inf node.
-
-		This will actually perform exports as certain types of files (.mmh)
-		are required to be in place before the rest of the bld.inf node
-		(and parts of other bld.inf nodes) can be processed.
-
-		[some MMP files #include exported .mmh files]
-		"""
-		if exportPlatform["TESTCODE"]:
-			exports = componentNode.bldinf.getTestExports(exportPlatform)
-		else:
-			exports = componentNode.bldinf.getExports(exportPlatform)
-
-		self.__Raptor.Debug("%i exports for %s",
-							len(exports), str(componentNode.bldinf.filename))
-		if exports:
-
-			# each export is either a 'copy' or 'unzip'
-			# maybe we should trap multiple exports to the same location here?
-			epocroot = str(exportPlatform["EPOCROOT"])
-			bldinf_filename = str(componentNode.bldinf.filename)
-			exportwhatlog="<whatlog bldinf='%s' mmp='' config=''>\n" % bldinf_filename
-			for export in exports:
-				expSrc = export.getSource()
-				expDstList = export.getDestination() # Might not be a list in all circumstances
-
-				# make it a list if it isn't
-				if not isinstance(expDstList, list):
-					expDstList = [expDstList]
-
-				fromFile = generic_path.Path(expSrc.replace("$(EPOCROOT)", epocroot))
-
-				# For each destination in the destination list, add an export target, perform it if required.
-				# This ensures that make knows the dependency situation but that the export is made
-				# before any other part of the metadata requires it.  It also helps with the build
-				# from clean situation where we can't use order only prerequisites.
-				for expDst in expDstList:
-					toFile = generic_path.Path(expDst.replace("$(EPOCROOT)", epocroot))
-					try:
-						if export.getAction() == "copy":
-							# export the file
-							exportwhatlog += self.CopyExport(fromFile, toFile, bldinf_filename)
-						else:
-							# unzip the zip
-							exportwhatlog += ("<archive zipfile='" + str(fromFile) + "'>\n")
-							members = self.UnzipExport(fromFile, toFile,
-									str(exportPlatform['SBS_BUILD_DIR']),
-									bldinf_filename)
-							if members != None:
-								exportwhatlog += members
-							exportwhatlog += "</archive>\n"
-					except MetaDataError, e:
-						if self.__Raptor.keepGoing:
-							self.__Raptor.Error("%s",e.Text, bldinf=bldinf_filename)
-						else:
-							raise e
-			exportwhatlog+="</whatlog>\n"
-			self.__Raptor.PrintXML("%s",exportwhatlog)
-
-	def CopyExport(self, _source, _destination, bldInfFile):
-		"""Copy the source file to the destination file (create a directory
-		   to copy into if it does not exist). Don't copy if the destination
-		   file exists and has an equal or newer modification time."""
-		source = generic_path.Path(str(_source).replace('%20',' '))
-		destination = generic_path.Path(str(_destination).replace('%20',' '))
-		dest_str = str(destination)
-		source_str = str(source)
-
-		exportwhatlog="<export destination='" + dest_str + "' source='" + \
-				source_str + "'/>\n"
-
-		try:
-
-
-			destDir = destination.Dir()
-			if not destDir.isDir():
-				os.makedirs(str(destDir))
-				shutil.copyfile(source_str, dest_str)
-				return exportwhatlog
-
-			sourceMTime = 0
-			destMTime = 0
-			try:
-				sourceMTime = os.stat(source_str)[stat.ST_MTIME]
-				destMTime = os.stat(dest_str)[stat.ST_MTIME]
-			except OSError, e:
-				if sourceMTime == 0:
-					message = "Source of export does not exist:  " + str(source)
-					if not self.__Raptor.keepGoing:
-						raise MetaDataError(message)
-					else:
-						self.__Raptor.Error(message, bldinf=bldInfFile)
-
-			if destMTime == 0 or destMTime < sourceMTime:
-				if os.path.exists(dest_str):
-					os.chmod(dest_str,stat.S_IREAD | stat.S_IWRITE)
-				shutil.copyfile(source_str, dest_str)
-				self.__Raptor.Info("Copied %s to %s", source_str, dest_str)
-			else:
-				self.__Raptor.Info("Up-to-date: %s", dest_str)
-
-
-		except Exception,e:
-			message = "Could not export " + source_str + " to " + dest_str + " : " + str(e)
-			if not self.__Raptor.keepGoing:
-				raise MetaDataError(message)
-			else:
-				self.__Raptor.Error(message, bldinf=bldInfFile)
-
-		return exportwhatlog
-
-
-	def UnzipExport(self, _source, _destination, _sbs_build_dir, bldinf_filename):
-		"""Unzip the source zipfile into the destination directory
-		   but only if the markerfile does not already exist there
-		   or it does exist but is older than the zipfile.
-		   the markerfile is comprised of the name of the zipfile
-		   with the ".zip" removed and ".unzipped" added.
-		"""
-
-		# Insert spaces into file if they are there
-		source = str(_source).replace('%20',' ')
-		destination = str(_destination).replace('%20',' ')
-		sanitisedSource = raptor_utilities.sanitise(source)
-		sanitisedDestination = raptor_utilities.sanitise(destination)
-
-		destination = str(_destination).replace('%20',' ')
-		exportwhatlog = ""
-
-
-		try:
-			if not _destination.isDir():
-				os.makedirs(destination)
-
-			# Form the directory to contain the unzipped marker files, and make the directory if require.
-			markerfiledir = generic_path.Path(_sbs_build_dir)
-			if not markerfiledir.isDir():
-				os.makedirs(str(markerfiledir))
-
-			# Form the marker file name and convert to Python string
-			markerfilename = str(generic_path.Join(markerfiledir, sanitisedSource + sanitisedDestination + ".unzipped"))
-
-			# Don't unzip if the marker file is already there or more uptodate
-			sourceMTime = 0
-			destMTime = 0
-			try:
-				sourceMTime = os.stat(source)[stat.ST_MTIME]
-				destMTime = os.stat(markerfilename)[stat.ST_MTIME]
-			except OSError, e:
-				if sourceMTime == 0:
-					raise MetaDataError("Source zip for export does not exist:  " + source)
-			if destMTime != 0 and destMTime >= sourceMTime:
-				# This file has already been unzipped. Print members then return
-				exportzip = zipfile.ZipFile(source, 'r')
-				files = exportzip.namelist()
-				files.sort()
-
-				for file in files:
-					if not file.endswith('/'):
-						expfilename = str(generic_path.Join(destination, file))
-						exportwhatlog += "<member>" + expfilename + "</member>\n"
-
-				self.__Raptor.PrintXML("<clean bldinf='" + bldinf_filename + "' mmp='' config=''>\n")
-				self.__Raptor.PrintXML("<zipmarker>" + markerfilename + "</zipmarker>\n")
-				self.__Raptor.PrintXML("</clean>\n")
-
-				return exportwhatlog
-
-			exportzip = zipfile.ZipFile(source, 'r')
-			files = exportzip.namelist()
-			files.sort()
-			filecount = 0
-			for file in files:
-				expfilename = str(generic_path.Join(destination, file))
-				if file.endswith('/'):
-					try:
-						os.makedirs(expfilename)
-					except OSError, e:
-						pass # errors to do with "already exists" are not interesting.
-				else:
-					try:
-						os.makedirs(os.path.split(expfilename)[0])
-					except OSError, e:
-						pass # errors to do with "already exists" are not interesting.
-
-					try:
-						if os.path.exists(expfilename):
-							os.chmod(expfilename,stat.S_IREAD | stat.S_IWRITE)
-						expfile = open(expfilename, 'wb')
-						expfile.write(exportzip.read(file))
-						expfile.close()
-						# Each file keeps its modified time the same as what it was before unzipping
-						accesstime = time.time()
-						datetime = exportzip.getinfo(file).date_time
-						timeTuple=(int(datetime[0]), int(datetime[1]), int(datetime[2]), int(datetime[3]), \
-									int(datetime[4]), int(datetime[5]), int(0), int(0), int(0))
-						modifiedtime = time.mktime(timeTuple)
-						os.utime(expfilename,(accesstime, modifiedtime))
-
-						filecount += 1
-						exportwhatlog+="<member>" + expfilename + "</member>\n"
-					except IOError, e:
-						message = "Could not unzip %s to %s: file %s: %s" %(source, destination, expfilename, str(e))
-						if not self.__Raptor.keepGoing:
-							raise MetaDataError(message)
-						else:
-							self.__Raptor.Error(message, bldinf=bldinf_filename)
-
-			markerfile = open(markerfilename, 'wb+')
-			markerfile.close()
-			self.__Raptor.PrintXML("<clean bldinf='" + bldinf_filename + "' mmp='' config=''>\n")
-			self.__Raptor.PrintXML("<zipmarker>" + markerfilename +	"</zipmarker>\n")
-			self.__Raptor.PrintXML("</clean>\n")
-
-		except IOError:
-			self.__Raptor.Warn("Problem while unzipping export %s to %s: %s",source,destination,str(e))
-
-		self.__Raptor.Info("Unzipped %d files from %s to %s", filecount, source, destination)
-		return exportwhatlog
-
-	def ProcessTEMs(self, componentNode, buildPlatform):
-		"""Add Template Extension Makefile nodes for a given platform
-		   to a skeleton bld.inf node.
-
-		This happens after exports have been handled.
-		"""
-		if buildPlatform["ISFEATUREVARIANT"]:
-			return	# feature variation does not run extensions at all
-		
-		if buildPlatform["TESTCODE"]:
-			extensions = componentNode.bldinf.getTestExtensions(buildPlatform)
-		else:
-			extensions = componentNode.bldinf.getExtensions(buildPlatform)
-
-		self.__Raptor.Debug("%i template extension makefiles for %s",
-							len(extensions), str(componentNode.bldinf.filename))
-
-		for i,extension in enumerate(extensions):
-			if self.__Raptor.projects:
-				if not extension.nametag in self.__Raptor.projects:
-					self.__Raptor.Debug("Skipping %s", extension.getMakefile())
-					continue
-				elif extension.nametag in self.projectList:
-					self.projectList.remove(extension.nametag)
-
-			extensionSpec = raptor_data.Specification("extension" + str(i))
-
-			interface = buildPlatform["extension"]
-			customInterface = False
-
-			# is there an FLM replacement for this extension?
-			if extension.interface:
-				try:
-					interface = self.__Raptor.cache.FindNamedInterface(extension.interface, buildPlatform["CACHEID"])
-					customInterface = True
-				except KeyError:
-					# no, there isn't an FLM
-					pass
-
-			extensionSpec.SetInterface(interface)
-
-			var = raptor_data.Variant()
-			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
-			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
-			var.AddOperation(raptor_data.Set("PLATFORM_PATH", buildPlatform["PLATFORM"].lower()))
-			var.AddOperation(raptor_data.Set("CFG", "$(VARIANTTYPE)"))
-			var.AddOperation(raptor_data.Set("CFG_PATH", "$(VARIANTTYPE)"))
-			var.AddOperation(raptor_data.Set("GENERATEDCPP", "$(OUTPUTPATH)"))
-			var.AddOperation(raptor_data.Set("TEMPLATE_EXTENSION_MAKEFILE", extension.getMakefile()))
-			var.AddOperation(raptor_data.Set("TEMCOUNT", str(i)))
-
-			# Extension inputs are added to the build spec.
-			# '$'s are escaped so that they are not expanded by Raptor or
-			# by Make in the call to the FLM
-			# The Extension makefiles are supposed to expand them themselves
-			# Path separators need not be parameterised anymore
-			# as bash is the standard shell
-			standardVariables = extension.getStandardVariables()
-			for standardVariable in standardVariables.keys():
-				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
-				value = standardVariables[standardVariable].replace('$(', '$$$$(')
-				value = value.replace('$/', '/').replace('$;', ':')
-				var.AddOperation(raptor_data.Set(standardVariable, value))
-
-			# . . . as with the standard variables but the names and number
-			# of options are not known in advance so we add them to
-			# a "structure" that is self-describing
-			var.AddOperation(raptor_data.Set("O._MEMBERS", ""))
-			options = extension.getOptions()
-			for option in options:
-				self.__Raptor.Debug("Set %s=%s", option, options[option])
-				value = options[option].replace('$(EPOCROOT)', '$(EPOCROOT)/')
-				value = value.replace('$(', '$$$$(')
-				value = value.replace('$/', '/').replace('$;', ':')
-				value = value.replace('$/', '/').replace('$;', ':')
-
-				if customInterface:
-					var.AddOperation(raptor_data.Set(option, value))
-				else:
-					var.AddOperation(raptor_data.Append("O._MEMBERS", option))
-					var.AddOperation(raptor_data.Set("O." + option, value))
-
-			extensionSpec.AddVariant(var)
-			componentNode.AddChild(extensionSpec)
-
-
-	def ProcessMMPs(self, componentNode, buildPlatform):
-		"""Add project nodes for a given platform to a skeleton bld.inf node.
-
-		This happens after exports have been handled.
-		"""
-		gnuList = []
-		makefileList = []
-
-		if buildPlatform["TESTCODE"]:
-			MMPList = componentNode.bldinf.getTestMMPList(buildPlatform)
-		else:
-			MMPList = componentNode.bldinf.getMMPList(buildPlatform)
-
-		bldInfFile = componentNode.bldinf.filename
-
-		for mmpFileEntry in MMPList['mmpFileList']:
-			projectname = mmpFileEntry.filename.File().lower()
-
-			if self.__Raptor.projects:
-				if not projectname in self.__Raptor.projects:
-					self.__Raptor.Debug("Skipping %s", str(mmpFileEntry.filename))
-					continue
-				elif projectname in self.projectList:
-					self.projectList.remove(projectname)
-
-			foundmmpfile = (mmpFileEntry.filename).FindCaseless()
-
-			if foundmmpfile == None:
-				self.__Raptor.Error("Can't find mmp file '%s'", str(mmpFileEntry.filename), bldinf=str(bldInfFile))
-				continue
-
-			mmpFile = MMPFile(foundmmpfile,
-								   self.__gnucpp,
-								   bldinf = componentNode.bldinf,
-								   log = self.__Raptor)
-
-			mmpFilename = mmpFile.filename
-
-			self.__Raptor.Info("Processing %s for platform %s",
-							   str(mmpFilename),
-							   " + ".join([x.name for x in buildPlatform["configs"]]))
-
-			# Run the Parser
-			# The backend supplies the actions
-			content = mmpFile.getContent(buildPlatform)
-			backend = MMPRaptorBackend(self.__Raptor, str(mmpFilename), str(bldInfFile))
-			parser  = MMPParser(backend)
-			parseresult = None
-			try:
-				parseresult = parser.mmp.parseString(content)
-			except ParseException,e:
-				self.__Raptor.Debug(e) # basically ignore parse exceptions
-
-			if (not parseresult) or (parseresult[0] != 'MMP'):
-				self.__Raptor.Error("The MMP Parser didn't recognise the mmp file '%s'",
-					                str(mmpFileEntry.filename), 
-					                bldinf=str(bldInfFile))
-				self.__Raptor.Debug(content)
-				self.__Raptor.Debug("The parse result was %s", parseresult)
-			else:
-				backend.finalise(buildPlatform)
-
-			# feature variation only processes FEATUREVARIANT binaries
-			if buildPlatform["ISFEATUREVARIANT"] and not backend.featureVariant:
-				continue
-			
-			# now build the specification tree
-			mmpSpec = raptor_data.Specification(self.getSpecName(mmpFilename))
-			var = backend.BuildVariant
-
-			var.AddOperation(raptor_data.Set("PROJECT_META", str(mmpFilename)))
-
-			# If it is a TESTMMPFILE section, the FLM needs to know about it
-			if buildPlatform["TESTCODE"] and (mmpFileEntry.testoption in
-					["manual", "auto"]):
-
-				var.AddOperation(raptor_data.Set("TESTPATH",
-						mmpFileEntry.testoption.lower() + ".bat"))
-
-			# The output path for objects, stringtables and bitmaps specified by
-			# this MMP.  Adding in the requested target extension prevents build
-			# "fouling" in cases where there are several mmp targets which only differ
-			# by the requested extension. e.g. elocl.01 and elocl.18
-			var.AddOperation(raptor_data.Append("OUTPUTPATH","$(UNIQUETARGETPATH)",'/'))
-
-			# If the bld.inf entry for this MMP had the BUILD_AS_ARM option then
-			# tell the FLM.
-			if mmpFileEntry.armoption:
-				var.AddOperation(raptor_data.Set("ALWAYS_BUILD_AS_ARM","1"))
-
-			# what interface builds this node?
-			try:
-				interfaceName = buildPlatform[backend.getTargetType()]
-				mmpSpec.SetInterface(interfaceName)
-			except KeyError:
-				self.__Raptor.Error("Unsupported target type '%s' in %s",
-								    backend.getTargetType(),
-								    str(mmpFileEntry.filename),
-								    bldinf=str(bldInfFile))
-				continue
-
-			# Although not part of the MMP, some MMP-based build specs additionally require knowledge of their
-			# container bld.inf exported headers
-			for export in componentNode.bldinf.getExports(buildPlatform):
-				destination = export.getDestination()
-				if isinstance(destination, list):
-					exportfile = str(destination[0])
-				else:
-					exportfile = str(destination)
-
-				if re.search('\.h',exportfile,re.IGNORECASE):
-					var.AddOperation(raptor_data.Append("EXPORTHEADERS", str(exportfile)))
-
-			# now we have something worth adding to the component
-			mmpSpec.AddVariant(var)
-			componentNode.AddChild(mmpSpec)
-
-			# resources, stringtables and bitmaps are sub-nodes of this project
-			# (do not add these for feature variant builds)
-			
-			if not buildPlatform["ISFEATUREVARIANT"]:
-				# Buildspec for Resource files
-				for i,rvar in enumerate(backend.ResourceVariants):
-					resourceSpec = raptor_data.Specification('resource' + str(i))
-					resourceSpec.SetInterface(buildPlatform['resource'])
-					resourceSpec.AddVariant(rvar)
-					mmpSpec.AddChild(resourceSpec)
-
-				# Buildspec for String Tables
-				for i,stvar in enumerate(backend.StringTableVariants):
-					stringTableSpec = raptor_data.Specification('stringtable' + str(i))
-					stringTableSpec.SetInterface(buildPlatform['stringtable'])
-					stringTableSpec.AddVariant(stvar)
-					mmpSpec.AddChild(stringTableSpec)
-
-				# Buildspec for Bitmaps
-				for i,bvar in enumerate(backend.BitmapVariants):
-					bitmapSpec = raptor_data.Specification('bitmap' + str(i))
-					bitmapSpec.SetInterface(buildPlatform['bitmap'])
-					bitmapSpec.AddVariant(bvar)
-					mmpSpec.AddChild(bitmapSpec)
-
-		# feature variation does not run extensions at all
-		# so return without considering .*MAKEFILE sections
-		if buildPlatform["ISFEATUREVARIANT"]:
-			return
-			
-		# Build spec for gnumakefile
-		for g in MMPList['gnuList']:
-			projectname = g.getMakefileName().lower()
-
-			if self.__Raptor.projects:
-				if not projectname in self.__Raptor.projects:
-					self.__Raptor.Debug("Skipping %s", str(g.getMakefileName()))
-					continue
-				elif projectname in self.projectList:
-					self.projectList.remove(projectname)
-
-			self.__Raptor.Debug("%i gnumakefile extension makefiles for %s",
-						len(gnuList), str(componentNode.bldinf.filename))
-			var = raptor_data.Variant()
-			gnuSpec = raptor_data.Specification("gnumakefile " + str(g.getMakefileName()))
-			interface = buildPlatform["ext_makefile"]
-			gnuSpec.SetInterface(interface)
-			gnumakefilePath = raptor_utilities.resolveSymbianPath(str(bldInfFile), g.getMakefileName())
-			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
-			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
-			var.AddOperation(raptor_data.Set("EXTMAKEFILENAME", g.getMakefileName()))
-			var.AddOperation(raptor_data.Set("DIRECTORY",g.getMakeDirectory()))
-			var.AddOperation(raptor_data.Set("CFG","$(VARIANTTYPE)"))
-			standardVariables = g.getStandardVariables()
-			for standardVariable in standardVariables.keys():
-				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
-				value = standardVariables[standardVariable].replace('$(', '$$$$(')
-				value = value.replace('$/', '/').replace('$;', ':')
-				var.AddOperation(raptor_data.Set(standardVariable, value))
-			gnuSpec.AddVariant(var)
-			componentNode.AddChild(gnuSpec)
-
-		# Build spec for makefile
-		for m in MMPList['makefileList']:
-			projectname = m.getMakefileName().lower()
-
-			if self.__Raptor.projects:
-				if not projectname in self.__Raptor.projects:
-					self.__Raptor.Debug("Skipping %s", str(m.getMakefileName()))
-					continue
-				elif projectname in self.projectList:
-					projectList.remove(projectname)
-
-			self.__Raptor.Debug("%i makefile extension makefiles for %s",
-						len(makefileList), str(componentNode.bldinf.filename))
-			var = raptor_data.Variant()
-			gnuSpec = raptor_data.Specification("makefile " + str(m.getMakefileName()))
-			interface = buildPlatform["ext_makefile"]
-			gnuSpec.SetInterface(interface)
-			gnumakefilePath = raptor_utilities.resolveSymbianPath(str(bldInfFile), m.getMakefileName())
-			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
-			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
-			var.AddOperation(raptor_data.Set("EXTMAKEFILENAME", m.getMakefileName()))
-			var.AddOperation(raptor_data.Set("DIRECTORY",m.getMakeDirectory()))
-			var.AddOperation(raptor_data.Set("CFG","$(VARIANTTYPE)"))
-			var.AddOperation(raptor_data.Set("USENMAKE","1"))
-			standardVariables = m.getStandardVariables()
-			for standardVariable in standardVariables.keys():
-				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
-				value = standardVariables[standardVariable].replace('$(', '$$$$(')
-				value = value.replace('$/', '/').replace('$;', ':')
-				var.AddOperation(raptor_data.Set(standardVariable, value))
-			gnuSpec.AddVariant(var)
-			componentNode.AddChild(gnuSpec)
-
-	def getSpecName(self, aFileRoot, fullPath=False):
-		"""Returns a build spec name: this is the file root (full path
-		or simple file name) made safe for use as a file name."""
-
-		if fullPath:
-			specName = str(aFileRoot).replace("/","_")
-			specName = specName.replace(":","")
-		else:
-			specName = aFileRoot.File()
-
-		return specName.lower()
-
-	def ApplyOSVariant(self, aBuildUnit, aEpocroot):
-		# Form path to kif.xml and path to buildinfo.txt
-		kifXmlPath = generic_path.Join(aEpocroot, "epoc32", "data","kif.xml")
-		buildInfoTxtPath = generic_path.Join(aEpocroot, "epoc32", "data","buildinfo.txt")
-
-		# Start with osVersion being None. This variable is a string and does two things:
-		# 1) is a representation of the OS version
-		# 2) is potentially the name of a variant
-		osVersion = None
-		if kifXmlPath.isFile(): # kif.xml exists so try to read it
-			osVersion = getOsVerFromKifXml(str(kifXmlPath))
-			if osVersion != None:
-				self.__Raptor.Info("OS version \"%s\" determined from file \"%s\"" % (osVersion, kifXmlPath))
-
-		# OS version was not determined from the kif.xml, e.g. because it doesn't exist
-		# or there was a problem parsing it. So, we fall over to using the buildinfo.txt
-		if osVersion == None and buildInfoTxtPath.isFile():
-			osVersion = getOsVerFromBuildInfoTxt(str(buildInfoTxtPath))
-			if osVersion != None:
-				self.__Raptor.Info("OS version \"%s\" determined from file \"%s\"" % (osVersion, buildInfoTxtPath))
-
-		# If we determined a non-empty string for the OS Version, attempt to apply it
-		if osVersion and osVersion in self.__Raptor.cache.variants:
-			self.__Raptor.Info("applying the OS variant to the configuration \"%s\"." % aBuildUnit.name)
-			aBuildUnit.variants.append(self.__Raptor.cache.variants[osVersion])
-		else:
-			self.__Raptor.Info("no OS variant for the configuration \"%s\"." % aBuildUnit.name)
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This module includes classes that process bld.inf and .mmp files to
+# generate Raptor build specifications
+#
+
+import copy
+import re
+import os.path
+import shutil
+import stat
+import hashlib
+import base64
+
+import raptor
+import raptor_data
+import raptor_utilities
+import raptor_xml
+import generic_path
+import subprocess
+import zipfile
+from mmpparser import *
+
+import time
+
+
+PiggyBackedBuildPlatforms = {'ARMV5':['GCCXML']}
+
+PlatformDefaultDefFileDir = {'WINSCW':'bwins',
+				  'ARMV5' :'eabi',
+				  'ARMV5SMP' :'eabi',
+				  'GCCXML':'eabi',
+				  'ARMV6':'eabi',
+				  'ARMV7' : 'eabi',
+				  'ARMV7SMP' : 'eabi'}
+
+def getVariantCfgDetail(aEPOCROOT, aVariantCfgFile):
+	"""Obtain pertinent build related detail from the Symbian variant.cfg file.
+
+	This variant.cfg file, usually located relative to $(EPOCROOT), contains:
+	(1) The $(EPOCROOT) relative location of the primary .hrh file used to configure the specific OS variant build
+	(2) A flag determining whether ARMV5 represents an ABIV1 or ABIV2 build (currently unused by Raptor)."""
+
+	variantCfgDetails = {}
+	variantCfgFile = None
+
+	try:
+		variantCfgFile = open(str(aVariantCfgFile))
+	except IOError, (number, message):
+		raise MetaDataError("Could not read variant configuration file "+str(aVariantCfgFile)+" ("+message+")")
+
+	for line in variantCfgFile.readlines():
+		if re.search('^(\s$|\s*#)', line):
+			continue
+		# Note that this detection of the .hrh file matches the command line build i.e. ".hrh" somewhere
+		# in the specified line
+		elif re.search('\.hrh', line, re.I):
+			variantHrh = line.strip()
+			if variantHrh.startswith('\\') or variantHrh.startswith('/'):
+				variantHrh = variantHrh[1:]
+			variantHrh = aEPOCROOT.Append(variantHrh)
+			variantCfgDetails['VARIANT_HRH'] = variantHrh
+		else:
+			lineContent = line.split()
+
+			if len(lineContent) == 1:
+				variantCfgDetails[lineContent.pop(0)] = 1
+			else:
+				variantCfgDetails[lineContent.pop(0)] = lineContent
+
+	variantCfgFile.close()
+
+	if not variantCfgDetails.has_key('VARIANT_HRH'):
+		raise MetaDataError("No variant file specified in "+str(aVariantCfgFile))
+	if not variantHrh.isFile():
+		raise MetaDataError("Variant file "+str(variantHrh)+" does not exist")
+
+	return variantCfgDetails
+
+def getOsVerFromKifXml(aPathToKifXml):
+	"""Obtain the OS version from the kif.xml file located at $EPOCROOT/epoc32/data/kif.xml.
+
+	If successful, the function returns a string such as "v95" to indicate 9.5; None is
+	returned if for any reason the function cannot determine the OS version."""
+
+	releaseTagName = "ki:release"
+	osVersion = None
+
+	import xml.dom.minidom
+
+	try:
+		# Parsed document object
+		kifDom = xml.dom.minidom.parse(str(aPathToKifXml))
+
+		# elements - the elements whose names are releaseTagName
+		elements = kifDom.getElementsByTagName(releaseTagName)
+
+		# There should be exactly one of the elements whose name is releaseTagName
+		# If more than one, osVersion is left as None, since the version should be
+		# unique to the kif.xml file
+		if len(elements) == 1:
+			osVersionTemp = elements[0].getAttribute("version")
+			osVersion = "v" + osVersionTemp.replace(".", "")
+
+		kifDom.unlink() # Clean up
+
+	except:
+		# There's no documentation on which exceptions are raised by these functions.
+		# We catch everything and assume any exception means there was a failure to
+		# determine OS version. None is returned, and the code will fall back
+		# to looking at the buildinfo.txt file.
+		pass
+
+	return osVersion
+
+def getOsVerFromBuildInfoTxt(aPathToBuildInfoTxt):
+	"""Obtain the OS version from the buildinfo.txt file located at $EPOCROOT/epoc32/data/buildinfo.txt.
+
+	If successful, the function returns a string such as "v95" to indicate 9.5; None is
+	returned if for any reason the function cannot determine the OS version.
+
+	The file $EPOCROOT/epoc32/data/buildinfo.txt is presumed to exist. The client code should
+	handle existance/non-existance."""
+
+	pathToBuildInfoTxt = str(aPathToBuildInfoTxt) # String form version of path to buildinfo.txt
+
+	# Open the file for reading; throw an exception if it could not be read - note that
+	# it should exist at this point.
+	try:
+		buildInfoTxt = open(pathToBuildInfoTxt)
+	except IOError, (number, message):
+		raise MetaDataError("Could not read buildinfo.txt file at" + pathToBuildInfoTxt + ": (" + message + ")")
+
+	# Example buildinfo.txt contents:
+	#
+	# DeviceFamily               100
+	# DeviceFamilyRev            0x900
+	# ManufacturerSoftwareBuild  M08765_Symbian_OS_v9.5
+	#
+	# Regexp to match the line containing the OS version
+	# Need to match things like M08765_Symbian_OS_v9.5 and M08765_Symbian_OS_vFuture
+	# So for the version, match everything except whitespace after v. Whitespace
+	# signifies the end of the regexp.
+	osVersionMatcher = re.compile('.*_Symbian_OS_v([^\s]*)', re.I)
+	osVersion = None
+
+	# Search for a regexp match over all the times in the file
+	# Note: if two or more lines match the search pattern then
+	# the latest match will overwrite the osVersion string.
+	for line in buildInfoTxt:
+		matchResult = osVersionMatcher.match(line)
+		if matchResult:
+			result = matchResult.groups()
+			osVersion = "v" +  str(reduce(lambda x, y: x + y, result))
+			osVersion = osVersion.replace(".", "")
+
+	buildInfoTxt.close() # Clean-up
+
+	return osVersion
+
+def getBuildableBldInfBuildPlatforms(aBldInfBuildPlatforms,
+									aDefaultOSBuildPlatforms,
+									aBaseDefaultOSBuildPlatforms,
+									aBaseUserDefaultOSBuildPlatforms):
+	"""Obtain a set of build platform names supported by a bld.inf file
+
+	Build platform deduction is based on both the contents of the PRJ_PLATFORMS section of
+	a bld.inf file together with a hard-coded set of default build platforms supported by
+	the build system itself."""
+
+	expandedBldInfBuildPlatforms = []
+	removePlatforms = set()
+
+	for bldInfBuildPlatform in aBldInfBuildPlatforms:
+		if bldInfBuildPlatform.upper() == "DEFAULT":
+			expandedBldInfBuildPlatforms.extend(aDefaultOSBuildPlatforms.split())
+		elif bldInfBuildPlatform.upper() == "BASEDEFAULT":
+			expandedBldInfBuildPlatforms.extend(aBaseDefaultOSBuildPlatforms.split())
+		elif bldInfBuildPlatform.upper() == "BASEUSERDEFAULT":
+			expandedBldInfBuildPlatforms.extend(aBaseUserDefaultOSBuildPlatforms.split())
+		elif bldInfBuildPlatform.startswith("-"):
+			removePlatforms.add(bldInfBuildPlatform.lstrip("-").upper())
+		else:
+			expandedBldInfBuildPlatforms.append(bldInfBuildPlatform.upper())
+
+	if len(expandedBldInfBuildPlatforms) == 0:
+		expandedBldInfBuildPlatforms.extend(aDefaultOSBuildPlatforms.split())
+
+	# make a set of platforms that can be built
+	buildableBldInfBuildPlatforms = set(expandedBldInfBuildPlatforms)
+
+	# Add platforms that are buildable by virtue of the presence of another
+	for piggyBackedPlatform in PiggyBackedBuildPlatforms:
+		if piggyBackedPlatform in buildableBldInfBuildPlatforms:
+			buildableBldInfBuildPlatforms.update(PiggyBackedBuildPlatforms.get(piggyBackedPlatform))
+
+	# Remove platforms that were negated
+	buildableBldInfBuildPlatforms -= removePlatforms
+
+	return buildableBldInfBuildPlatforms
+
+
+def getPreProcessorCommentDetail (aPreProcessorComment):
+	"""Takes a preprocessor comment and returns an array containing the filename and linenumber detail."""
+
+	commentDetail = []
+	commentMatch = re.search('# (?P<LINENUMBER>\d+) "(?P<FILENAME>.*)"', aPreProcessorComment)
+
+	if commentMatch:
+		filename = commentMatch.group('FILENAME')
+		filename = os.path.abspath(filename)
+		filename = re.sub(r'\\\\', r'\\', filename)
+		filename = re.sub(r'//', r'/', filename)
+		filename = generic_path.Path(filename)
+		linenumber = int (commentMatch.group('LINENUMBER'))
+
+		commentDetail.append(filename)
+		commentDetail.append(linenumber)
+
+	return commentDetail
+
+
+# Classes
+
+class MetaDataError(Exception):
+	"""Fatal error wrapper, to be thrown directly back to whatever is calling."""
+
+	def __init__(self, aText):
+		self.Text = aText
+	def __str__(self):
+		return repr(self.Text)
+
+
+class PreProcessedLine(str):
+	"""Custom string class that accepts filename and line number information from
+	a preprocessed context."""
+
+	def __new__(cls, value, *args, **keywargs):
+		return str.__new__(cls, value)
+
+	def __init__(self, value, aFilename, aLineNumber):
+		self.filename = aFilename
+		self.lineNumber = aLineNumber
+
+	def getFilename (self):
+		return self.filename
+
+	def getLineNumber (self):
+		return self.lineNumber
+
+class PreProcessor(raptor_utilities.ExternalTool):
+	"""Preprocessor wrapper suitable for Symbian metadata file processing."""
+
+	def __init__(self, aPreProcessor,
+				 aStaticOptions,
+				 aIncludeOption,
+				 aMacroOption,
+				 aPreIncludeOption,
+				 aRaptor):
+		raptor_utilities.ExternalTool.__init__(self, aPreProcessor)
+		self.__StaticOptions = aStaticOptions
+		self.__IncludeOption = aIncludeOption
+		self.__MacroOption = aMacroOption
+		self.__PreIncludeOption = aPreIncludeOption
+
+		self.filename = ""
+		self.__Macros = []
+		self.__IncludePaths = []
+		self.__PreIncludeFile = ""
+		self.raptor = aRaptor
+
+	def call(self, aArgs, sourcefilename):
+		""" Override call so that we can do our own error handling."""
+		tool = self._ExternalTool__Tool
+		try:
+			commandline = tool + " " + aArgs + " " + str(sourcefilename)
+
+			# the actual call differs between Windows and Unix
+			if raptor_utilities.getOSFileSystem() == "unix":
+				p = subprocess.Popen(commandline, \
+									 shell=True, bufsize=65535, \
+									 stdin=subprocess.PIPE, \
+									 stdout=subprocess.PIPE, \
+									 stderr=subprocess.PIPE, \
+									 close_fds=True)
+			else:
+				p = subprocess.Popen(commandline, \
+									 bufsize=65535, \
+									 stdin=subprocess.PIPE, \
+									 stdout=subprocess.PIPE, \
+									 stderr=subprocess.PIPE, \
+									 universal_newlines=True)
+
+			# run the command and wait for all the output
+			(self._ExternalTool__Output, errors) = p.communicate()
+
+			if self.raptor.debugOutput:
+				self.raptor.Debug("Preprocessing Start %s", str(sourcefilename))
+				self.raptor.Debug("Output:\n%s", self._ExternalTool__Output)
+				self.raptor.Debug("Errors:\n%s", errors)
+				self.raptor.Debug("Preprocessing End %s", str(sourcefilename))
+
+			incRE = re.compile("In file included from")
+			fromRE = re.compile(r"\s+from")
+			warningRE = re.compile("warning:|pasting.+token|from.+:")
+			remarkRE = re.compile("no newline at end of file|does not give a valid preprocessing token")
+
+			actualErr = False
+			if errors != "":
+				for error in errors.splitlines():
+					if incRE.search(error) or fromRE.search(error):
+						continue
+					if not remarkRE.search(error):
+						if warningRE.search(error):
+							self.raptor.Warn("%s: %s", tool, error)
+						else:
+							self.raptor.Error("%s: %s", tool, error)
+							actualErr = True
+			if actualErr:
+				raise MetaDataError("Errors in %s" % str(sourcefilename))
+
+		except Exception,e:
+			raise MetaDataError("Preprocessor exception: %s" % str(e))
+
+		return 0	# all OK
+
+	def setMacros(self, aMacros):
+		self.__Macros = aMacros
+
+	def addMacro(self, aMacro):
+		self.__Macros.append(aMacro)
+
+	def addMacros(self, aMacros):
+		self.__Macros.extend(aMacros)
+
+	def getMacros(self):
+		return self.__Macros
+
+
+	def addIncludePath(self, aIncludePath):
+		p = str(aIncludePath)
+		if p == "":
+			self.raptor.Warn("attempt to set an empty preprocessor include path for %s" % str(self.filename))
+		else:
+			self.__IncludePaths.append(p)
+
+	def addIncludePaths(self, aIncludePaths):
+		for path in aIncludePaths:
+			self.addIncludePath(path)
+
+	def setIncludePaths(self, aIncludePaths):
+		self.__IncludePaths = []
+		self.addIncludePaths(aIncludePaths)
+
+	def setPreIncludeFile(self, aPreIncludeFile):
+		self.__PreIncludeFile = aPreIncludeFile
+
+	def preprocess(self):
+		preProcessorCall = self.__constructPreProcessorCall()
+		returnValue = self.call(preProcessorCall, self.filename)
+
+		return self.getOutput()
+
+	def __constructPreProcessorCall(self):
+
+		call = self.__StaticOptions
+
+		if self.__PreIncludeFile:
+			call += " " + self.__PreIncludeOption
+			call += " " + str(self.__PreIncludeFile)
+
+		for macro in self.__Macros:
+			call += " " + self.__MacroOption + macro
+
+		for includePath in self.__IncludePaths:
+			call += " " + self.__IncludeOption
+			call += " " + str(includePath)
+
+		return call
+
+
+class MetaDataFile(object):
+	"""A generic representation of a Symbian metadata file
+
+	Symbian metadata files are subject to preprocessing, primarily with macros based
+	on the selected build platform.  This class provides a generic means of wrapping
+	up the preprocessing of such files."""
+
+	def __init__(self, aFilename, gnucpp, aRootLocation=None, log=None):
+		"""
+		@param aFilename	An MMP, bld.inf or other preprocessable build spec file
+		@param aDefaultPlatform  Default preprocessed version of this file
+		@param aCPP 		location of GNU CPP
+		@param log 		A class with Debug(<string>), Info(<string>) and Error(<string>) methods
+		"""
+		self.filename = aFilename
+		self.__RootLocation = aRootLocation
+		# Dictionary with key of build platform and a text string of processed output as values
+		self.__PreProcessedContent = {}
+		self.log = log
+
+		self.__gnucpp = gnucpp
+		if gnucpp is None:
+			raise ValueError('gnucpp must be set')
+
+	def depspath(self, platform):
+	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
+	       Subclasses should redefine this
+	   """
+	   return str(platform['SBS_BUILD_DIR']) + "/" + str(self.__RootLocation) + "." + platform['key_md5'] + ".d"
+
+	def getContent(self, aBuildPlatform):
+
+		key = aBuildPlatform['key']
+
+		config_macros = []
+
+		adepfilename = self.depspath(aBuildPlatform)
+		generateDepsOptions = ""
+		if adepfilename:
+
+			if raptor_utilities.getOSPlatform().startswith("win"):
+				metatarget = "$(PARSETARGET)"
+			else:
+				metatarget = "'$(PARSETARGET)'"
+			generateDepsOptions = "-MD -MF%s -MT%s" % (adepfilename, metatarget)
+			aBuildPlatform['METADEPS'].append((adepfilename, metatarget))
+			try:
+				os.makedirs(os.path.dirname(adepfilename))
+			except Exception, e:
+				self.log.Debug("Couldn't make bldinf outputpath for dependency generation")
+
+		config_macros = (aBuildPlatform['PLATMACROS']).split()
+
+		if not key in self.__PreProcessedContent:
+
+			preProcessor = PreProcessor(self.__gnucpp, '-undef -nostdinc ' + generateDepsOptions + ' ',
+										'-I', '-D', '-include', self.log)
+			preProcessor.filename = self.filename
+
+			# always have the current directory on the include path
+			preProcessor.addIncludePath('.')
+
+			# the SYSTEMINCLUDE directories defined in the build config
+			# should be on the include path. This is added mainly to support
+			# Feature Variation as SYSTEMINCLUDE is usually empty at this point.
+			systemIncludes = aBuildPlatform['SYSTEMINCLUDE']
+			if systemIncludes:
+				preProcessor.addIncludePaths(systemIncludes.split())
+
+			preInclude = aBuildPlatform['VARIANT_HRH']
+
+			# for non-Feature Variant builds, the directory containing the HRH should
+			# be on the include path
+			if not aBuildPlatform['ISFEATUREVARIANT']:
+				preProcessor.addIncludePath(preInclude.Dir())
+
+			# and EPOCROOT/epoc32/include
+			preProcessor.addIncludePath(aBuildPlatform['EPOCROOT'].Append('epoc32/include'))
+
+			# and the directory containing the bld.inf file
+			if self.__RootLocation is not None and str(self.__RootLocation) != "":
+				preProcessor.addIncludePath(self.__RootLocation)
+
+			# and the directory containing the file we are processing
+			preProcessor.addIncludePath(self.filename.Dir())
+
+			# there is always a pre-include file
+			preProcessor.setPreIncludeFile(preInclude)
+
+			macros = ["SBSV2"]
+
+			if config_macros:
+				macros.extend(config_macros)
+
+			if macros:
+				for macro in macros:
+					preProcessor.addMacro(macro + "=_____" +macro)
+
+			# extra "raw" macros that do not need protecting
+			preProcessor.addMacro("__GNUC__=3")
+
+			preProcessorOutput = preProcessor.preprocess()
+
+			# Resurrect preprocessing replacements
+			pattern = r'([\\|/]| |) ?_____(('+macros[0]+')'
+			for macro in macros[1:]:
+				pattern += r'|('+macro+r')'
+
+			pattern += r'\s*)'
+			# Work on all Macros in one substitution.
+			text = re.sub(pattern, r"\1\2", preProcessorOutput)
+			text = re.sub(r"\n[\t ]*", r"\n", text)
+
+			self.__PreProcessedContent[key] = text
+
+		return self.__PreProcessedContent[key]
+
+class MMPFile(MetaDataFile):
+	"""A generic representation of a Symbian metadata file
+
+	Symbian metadata files are subject to preprocessing, primarily with macros based
+	on the selected build platform.  This class provides a generic means of wrapping
+	up the preprocessing of such files."""
+
+	def __init__(self, aFilename, gnucpp, bldinf, log=None):
+		"""
+		@param aFilename	An MMP, bld.inf or other preprocessable build spec file
+		@param gnucpp 		location of GNU CPP
+		@param bldinf   	the bldinf file that this mmp comes from
+		@param log 			A class with Debug(<string>), Info(<string>) and Error(<string>) methods
+		"""
+		super(MMPFile, self).__init__(aFilename, gnucpp, str(bldinf.filename.Dir()), log)
+		self.__bldinf = bldinf
+
+		self.__gnucpp = gnucpp
+		if gnucpp is None:
+			raise ValueError('gnucpp must be set')
+
+	def depspath(self, platform):
+	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
+	       Subclasses should redefine this
+	   """
+	   return self.__bldinf.outputpath(platform) + "/" + self.filename.File() + '.' + platform['key_md5'] + ".d"
+
+class Export(object):
+	"""Single processed PRJ_EXPORTS or PRJ_TESTEXPORTS entry from a bld.inf file"""
+
+	def getPossiblyQuotedStrings(cls,spec):
+		""" 	Split a string based on whitespace
+			but keep double quoted substrings together.
+		"""
+		inquotes=False
+		intokengap=False
+		sourcedest=[]
+		word = 0
+		for c in spec:
+			if c == '"':
+				if inquotes:
+					inquotes = False
+					word += 1
+					intokengap = True
+				else:
+					inquotes = True
+					intokengap = False
+				pass
+			elif c == ' ' or c == '\t':
+				if inquotes:
+					if len(sourcedest) == word:
+						sourcedest.append(c)
+					else:
+						sourcedest[word] += c
+				else:
+					if intokengap:
+						# gobble unquoted spaces
+						pass
+					else:
+						word += 1
+						intokengap=True
+				pass
+			else:
+				intokengap = False
+				if len(sourcedest) == word:
+					sourcedest.append(c)
+				else:
+					sourcedest[word] += c
+
+		return sourcedest
+
+	getPossiblyQuotedStrings = classmethod(getPossiblyQuotedStrings)
+
+
+	def __init__(self, aBldInfFile, aExportsLine, aType):
+		"""
+		Rules from the OS library for convenience:
+
+		For PRJ_TESTEXPORTS
+		source_file_1 [destination_file]
+		source_file_n [destination_file]
+		If the source file is listed with a relative path, the path will
+	 	  be considered relative to the directory containing the bld.inf file.
+		If a destination file is not specified, the source file will be copied
+		  to the directory containing the bld.inf file.
+		If a relative path is specified with the destination file, the path
+		  will be considered relative to directory containing the bld.inf file.
+
+		For PRJ_EXPORTS
+		source_file_1 [destination_file]
+		source_file_n [destination_file]
+		:zip zip_file [destination_path]
+
+		Note that:
+		If a source file is listed with a relative path, the path will be
+		considered relative to the directory containing the bld.inf file.
+
+		If a destination file is not specified, the source file will be copied
+		to epoc32\include\.
+
+		If a destination file is specified with the relative path, the path will
+		be considered relative to directory epoc32\include\.
+
+		If a destination begins with a drive letter, then the file is copied to
+		epoc32\data\<drive_letter>\<path>. For example,
+
+			mydata.dat e:\appdata\mydata.dat
+			copies mydata.dat to epoc32\data\e\appdata\mydata.dat.
+			You can use any driveletter between A and Z.
+
+		A line can start with the preface :zip. This instructs the build tools
+		to unzip the specified zip file to the specified destination path. If a
+		destination path is not specified, the source file will be unzipped in
+		the root directory.
+
+
+		"""
+
+		# Work out what action is required - unzip or copy?
+		action = "copy"
+		typematch = re.match(r'^\s*(?P<type>:zip\s+)?(?P<spec>[^\s].*[^\s])\s*$',aExportsLine, re.I)
+
+		spec = typematch.group('spec')
+		if spec == None:
+			raise ValueError('must specify at least a source file for an export')
+
+		if typematch.group('type') is not None:
+			action = "unzip"
+
+		# Split the spec into source and destination but take care
+		# to allow filenames with quoted strings.
+		exportEntries = Export.getPossiblyQuotedStrings(spec)
+
+		# Get the source path as specified by the bld.inf
+		source_spec = exportEntries.pop(0).replace(' ','%20')
+
+		# Resolve the source file
+		sourcepath = generic_path.Path(raptor_utilities.resolveSymbianPath(str(aBldInfFile), source_spec))
+
+		# Find it if the case of the filename is wrong:
+		# Carry on even if we don't find it
+		foundfile = sourcepath.FindCaseless()
+		if foundfile != None:
+			source = str(foundfile).replace(' ','%20')
+		else:
+			source = str(sourcepath).replace(' ','%20')
+
+
+		# Get the destination path as specified by the bld.inf
+		if len(exportEntries) > 0:
+			dest_spec = exportEntries.pop(0).replace(' ','%20')
+		else:
+			dest_spec = None
+		# Destination list - list of destinations. For the WINSCW resource building stage,
+		# files exported to the emulated drives and there are several locations, for example,
+		# PRJ_[TEST]EXPORTS
+		# 1234ABCD.SPD		z:/private/10009876/policy/1234ABCD.spd
+		# needs to end up copied in
+		# epoc32/data/z/private/10009876/policy/1234ABCD.spd *and* in
+		# epoc32/release/winscw/udeb/z/private/10009876/policy/1234ABCD.spd *and* in
+		# epoc32/release/winscw/urel/z/private/10009876/policy/1234ABCD.spd
+		dest_list = []
+
+		# Resolve the destination if one is specified
+		if dest_spec:
+			# check for troublesome characters
+			if ':' in dest_spec and not re.search('^[a-z]:', dest_spec, re.I):
+				raise ValueError("invalid filename " + dest_spec)
+
+			dest_spec = dest_spec.replace(' ','%20')
+			aSubType=""
+			if action == "unzip":
+				aSubType=":zip"
+				dest_spec = dest_spec.rstrip("\\/")
+
+			# Get the export destination(s) - note this can be a list of strings or just a string.
+			dest_list = raptor_utilities.resolveSymbianPath(str(aBldInfFile), dest_spec, aType, aSubType)
+
+			def process_dest(aDest):
+				if dest_spec.endswith('/') or  dest_spec.endswith('\\'):
+					m = generic_path.Path(source)
+					aDest += '/'+m.File()
+				return aDest
+
+			if isinstance(dest_list, list):
+				# Process each file in the list
+				dest_list = map(process_dest, dest_list)
+			else:
+				# Process the single destination
+				dest_list = process_dest(dest_list)
+
+		else:
+			# No destination was specified so we assume an appropriate one
+
+			dest_filename=generic_path.Path(source).File()
+
+			if aType == "PRJ_EXPORTS":
+				if action == "copy":
+					destination = '$(EPOCROOT)/epoc32/include/'+dest_filename
+				elif action == "unzip":
+					destination = '$(EPOCROOT)'
+			elif aType == "PRJ_TESTEXPORTS":
+				d = aBldInfFile.Dir()
+				if action == "copy":
+					destination = str(d.Append(dest_filename))
+				elif action == "unzip":
+					destination = "$(EPOCROOT)"
+			else:
+				raise ValueError("Export type should be 'PRJ_EXPORTS' or 'PRJ_TESTEXPORTS'. It was: "+str(aType))
+
+
+		self.__Source = source
+		if len(dest_list) > 0: # If the list has length > 0, this means there are several export destinations.
+			self.__Destination = dest_list
+		else: # Otherwise the list has length zero, so there is only a single export destination.
+			self.__Destination = destination
+		self.__Action = action
+
+	def getSource(self):
+		return self.__Source
+
+	def getDestination(self):
+		return self.__Destination # Note that this could be either a list, or a string, depending on the export destination
+
+	def getAction(self):
+		return self.__Action
+
+class ExtensionmakefileEntry(object):
+	def __init__(self, aGnuLine, aBldInfFile, tmp):
+
+		self.__BldInfFile = aBldInfFile
+		bldInfLocation = self.__BldInfFile.Dir()
+		biloc = str(bldInfLocation)
+		extInfLocation = tmp.filename.Dir()
+		eiloc = str(extInfLocation)
+
+		if eiloc is None or eiloc == "":
+			eiloc="." # Someone building with a relative raptor path
+		if biloc is None or biloc == "":
+			biloc="." # Someone building with a relative raptor path
+
+		self.__StandardVariables = {}
+		# Relative step-down to the root - let's try ignoring this for now, as it
+		# should amount to the same thing in a world where absolute paths are king
+		self.__StandardVariables['TO_ROOT'] = ""
+		# Top-level bld.inf location
+		self.__StandardVariables['TO_BLDINF'] = biloc
+		self.__StandardVariables['EXTENSION_ROOT'] = eiloc
+
+		# Get the directory and filename from the full path containing the extension makefile
+		self.__FullPath = generic_path.Join(eiloc,aGnuLine)
+		self.__FullPath = self.__FullPath.GetLocalString()
+		self.__Filename = os.path.split(self.__FullPath)[1]
+		self.__Directory = os.path.split(self.__FullPath)[0]
+
+	def getMakefileName(self):
+		return self.__Filename
+
+	def getMakeDirectory(self):
+		return self.__Directory
+
+	def getStandardVariables(self):
+		return self.__StandardVariables
+
+class Extension(object):
+	"""Single processed PRJ_EXTENSIONS or PRJ_TESTEXTENSIONS START EXTENSIONS...END block
+	from a bld.inf file"""
+
+	def __init__(self, aBldInfFile, aStartLine, aOptionLines, aBuildPlatform, aRaptor):
+		self.__BldInfFile = aBldInfFile
+		self.__Options = {}
+		self.interface = ""
+		self.__Raptor = aRaptor
+
+		makefile = ""
+		makefileMatch = re.search(r'^\s*START EXTENSION\s+(?P<MAKEFILE>\S+)\s*(?P<NAMETAG>\S*)$', aStartLine, re.I)
+
+		self.__RawMakefile = ""
+
+		if (makefileMatch):
+			self.__RawMakefile = makefileMatch.group('MAKEFILE')
+			self.nametag = makefileMatch.group('NAMETAG').lower()
+
+			# Ensure all \'s are translated into /'s if required
+			self.interface = self.__RawMakefile
+			self.interface = self.interface.replace("\\", "/").replace("/", ".")
+
+		# To support standalone testing, '$(' prefixed TEMs  are assumed to  start with
+		# a makefile variable and hence be fully located in FLM operation
+		if self.__RawMakefile.startswith("$("):
+			self.__Makefile = self.__RawMakefile + ".mk"
+		else:
+			self.__Makefile = '$(MAKEFILE_TEMPLATES)/' + self.__RawMakefile + ".mk"
+
+		for optionLine in aOptionLines:
+			optionMatch = re.search(r'^\s*(OPTION\s+)?(?P<VARIABLE>\S+)\s+(?P<VALUE>\S+.*)$',optionLine, re.I)
+			if optionMatch:
+				self.__Options[optionMatch.group('VARIABLE').upper()] = optionMatch.group('VALUE')
+
+		bldInfLocation = self.__BldInfFile.Dir()
+
+		biloc = str(bldInfLocation)
+		if biloc is None or biloc == "":
+			biloc="." # Someone building with a relative raptor path
+
+		extInfLocation = aStartLine.filename.Dir()
+
+		eiloc = str(extInfLocation)
+		if eiloc is None or eiloc == "":
+			eiloc="." # Someone building with a relative raptor path
+
+		self.__StandardVariables = {}
+		# Relative step-down to the root - let's try ignoring this for now, as it
+		# should amount to the same thing in a world where absolute paths are king
+		self.__StandardVariables['TO_ROOT'] = ""
+		# Top-level bld.inf location
+		self.__StandardVariables['TO_BLDINF'] = biloc
+		# Location of bld.inf file containing the current EXTENSION block
+		self.__StandardVariables['EXTENSION_ROOT'] = eiloc
+
+		# If the interface exists, this means it's not a Template Extension Makefile so don't look for a .meta file for it;
+		# so do nothing if it's not a template extension makefile
+		try:
+			self.__Raptor.cache.FindNamedInterface(str(self.interface), aBuildPlatform['CACHEID'])
+		except KeyError: # This means that this Raptor doesn't have the interface self.interface, so we are in a TEM
+			# Read extension meta file and get default options from it.  The use of TEM meta file is compulsory if TEM is used
+			metaFilename = "%s/epoc32/tools/makefile_templates/%s.meta" % (aBuildPlatform['EPOCROOT'], self.__RawMakefile)
+			metaFile = None
+			try:
+				metaFile = open(metaFilename, "r")
+			except IOError, e:
+				self.__warn("Extension: %s - cannot open Meta file: %s" % (self.__RawMakefile, metaFilename))
+
+			if metaFile:
+				for line in metaFile.readlines():
+					defaultOptionMatch = re.search(r'^OPTION\s+(?P<VARIABLE>\S+)\s+(?P<VALUE>\S+.*)$',line, re.I)
+					if defaultOptionMatch and defaultOptionMatch.group('VARIABLE').upper() not in self.__Options.keys():
+						self.__Options[defaultOptionMatch.group('VARIABLE').upper()] = defaultOptionMatch.group('VALUE')
+
+				metaFile.close()
+
+	def __warn(self, format, *extras):
+		if (self.__Raptor):
+			self.__Raptor.Warn(format, *extras)
+
+	def getIdentifier(self):
+		return re.sub (r'\\|\/|\$|\(|\)', '_', self.__RawMakefile)
+
+	def getMakefile(self):
+		return self.__Makefile
+
+	def getOptions(self):
+		return self.__Options
+
+	def getStandardVariables(self):
+		return self.__StandardVariables
+
+class MMPFileEntry(object):
+	def __init__(self, aFilename, aTestOption, aARMOption):
+		self.filename = aFilename
+		self.testoption = aTestOption
+		if aARMOption:
+			self.armoption = True
+		else:
+			self.armoption = False
+
+
+class BldInfFile(MetaDataFile):
+	"""Representation of a Symbian bld.inf file"""
+
+	def __init__(self, aFilename, gnucpp, log=None):
+		MetaDataFile.__init__(self, aFilename, gnucpp, None, log)
+		self.__Raptor = log
+		self.testManual = 0
+		self.testAuto = 0
+	# Generic
+
+	def getBuildPlatforms(self, aBuildPlatform):
+		platformList = []
+
+		for platformLine in self.__getSection(aBuildPlatform, 'PRJ_PLATFORMS'):
+			for platformEntry in platformLine.split():
+				platformList.append(platformEntry)
+
+		return platformList
+
+	# Build Platform Specific
+	def getMMPList(self, aBuildPlatform, aType="PRJ_MMPFILES"):
+		mmpFileList=[]
+		gnuList = []
+		makefileList = []
+		extFound = False
+		m = None
+
+		hashValue = {'mmpFileList': [] , 'gnuList': [], 'makefileList' : []}
+
+		for mmpFileEntry in self.__getSection(aBuildPlatform, aType):
+
+			actualBldInfRoot = mmpFileEntry.getFilename()
+			n = re.match('\s*(?P<makefiletype>(GNUMAKEFILE|N?MAKEFILE))\s+(?P<extmakefile>[^ ]+)\s*(support|manual)?\s*(?P<invalid>\S+.*)?\s*$',mmpFileEntry,re.I)
+			if n:
+
+				if (n.groupdict()['invalid']):
+					self.log.Error("%s (%d) : invalid .mmp file qualifier \"%s\"", mmpFileEntry.filename, mmpFileEntry.getLineNumber(), n.groupdict()['invalid'])
+				if raptor_utilities.getOSFileSystem() == "unix":
+					self.log.Warn("NMAKEFILE/GNUMAKEFILE/MAKEFILE keywords not supported on Linux")
+				else:
+					extmakefilearg = n.groupdict()['extmakefile']
+					bldInfDir = actualBldInfRoot.Dir()
+					extmakefilename = bldInfDir.Append(extmakefilearg)
+					extmakefile = ExtensionmakefileEntry(extmakefilearg, self.filename, mmpFileEntry)
+
+					if (n.groupdict()['makefiletype']).upper() == "GNUMAKEFILE":
+						gnuList.append(extmakefile)
+					else:
+						makefileList.append(extmakefile)
+			else:
+				# Currently there is only one possible option - build as arm.
+				# For TESTMMPFILES, the supported options are support, tidy, ignore, manual and build as arm
+				if aType.upper()=="PRJ_TESTMMPFILES":
+					if re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I):
+						m = re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I)
+				else:
+					if re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I):
+						m = re.match('\s*(?P<name>[^ ]+)\s*(?P<baa>build_as_arm)?\s*(?P<invalid>\S+.*)?\s*$', mmpFileEntry, re.I)
+
+			if m:
+				if (m.groupdict()['invalid']):
+					self.log.Error("%s (%d) : invalid .mmp file qualifier \"%s\"", mmpFileEntry.filename, mmpFileEntry.getLineNumber(), m.groupdict()['invalid'])
+
+				mmpFileName = m.groupdict()['name']
+				testmmpoption = "auto" # Setup tests to be automatic by default
+				tokens = m.groupdict()
+				for key,item in tokens.iteritems():
+					if key=="manual" and item=="manual":
+						testmmpoption = "manual"
+					elif key=="support" and item=="support":
+						testmmpoption = "support"
+					elif key=="ignore" and item=="ignore":
+						testmmpoption = "ignore"
+
+				buildasarm = False
+				if  m.groupdict()['baa']:
+					if m.groupdict()['baa'].lower() == 'build_as_arm':
+						buildasarm = True
+
+				if not mmpFileName.lower().endswith('.mmp'):
+					mmpFileName += '.mmp'
+				bldInfDir = actualBldInfRoot.Dir()
+				try:
+					mmpFileName = bldInfDir.Append(mmpFileName)
+					mmpfe = MMPFileEntry(mmpFileName, testmmpoption, buildasarm)
+					mmpFileList.append(mmpfe)
+				except ValueError, e:
+					self.log.Error("invalid .mmp file name: %s" % str(e))
+
+				m = None
+
+
+		hashValue['mmpFileList'] = mmpFileList
+		hashValue['gnuList'] = gnuList
+		hashValue['makefileList'] = makefileList
+
+		return hashValue
+
+	# Return a list of gnumakefiles used in the bld.inf
+	def getExtensionmakefileList(self, aBuildPlatform, aType="PRJ_MMPFILES",aString = ""):
+		extMakefileList=[]
+		m = None
+		for extmakeFileEntry in self.__getSection(aBuildPlatform, aType):
+
+			actualBldInfRoot = extmakeFileEntry.filename
+			if aType.upper()=="PRJ_TESTMMPFILES":
+				m = re.match('\s*GNUMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<support>support)?\s*(?P<ignore>ignore)?\s*(?P<tidy>tidy)?\s*(?P<manual>manual)?\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
+			else:
+				if aString == "gnumakefile":
+					m = re.match('\s*GNUMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
+				elif aString == "nmakefile":
+					m = re.match('\s*NMAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
+				elif aString == "makefile":
+					m = re.match('\s*MAKEFILE\s+(?P<extmakefile>[^ ]+)\s*(?P<invalid>\S+.*)?\s*$',extmakeFileEntry,re.I)
+			if m:
+				if (m.groupdict()['invalid']):
+					self.log.Error("%s (%d) : invalid extension makefile qualifier \"%s\"", extmakeFileEntry.filename, extmakeFileEntry.getLineNumber(), m.groupdict()['invalid'])
+
+				extmakefilearg = m.groupdict()['extmakefile']
+				bldInfDir = actualBldInfRoot.Dir()
+				extmakefilename = bldInfDir.Append(extmakefilearg)
+				extmakefile = ExtensionmakefileEntry(extmakefilearg, self.filename, extmakeFileEntry)
+				extMakefileList.append(extmakefile)
+				m = None
+
+		return extMakefileList
+
+	def getTestExtensionmakefileList(self,aBuildPlatform,aString=""):
+		return self.getExtensionmakefileList(aBuildPlatform,"PRJ_TESTMMPFILES",aString)
+
+	def getTestMMPList(self, aBuildPlatform):
+		return self.getMMPList(aBuildPlatform, "PRJ_TESTMMPFILES")
+
+	def getRomTestType(self, aBuildPlatform):
+		testMMPList = self.getTestMMPList(aBuildPlatform)
+		for testMMPFileEntry in testMMPList['mmpFileList']:
+			if aBuildPlatform["TESTCODE"]:
+				# Calculate test type (manual or auto)
+				if testMMPFileEntry.testoption == "manual":
+					self.testManual += 1
+				if not (testMMPFileEntry.testoption == "support" or testMMPFileEntry.testoption == "manual" or testMMPFileEntry.testoption == "ignore"):
+					self.testAuto += 1
+		if self.testManual and self.testAuto:
+			return 'BOTH'
+		elif self.testAuto:
+			return 'AUTO'
+		elif self.testManual:
+			return 'MANUAL'
+		else:
+			return 'NONE'
+
+	def getExports(self, aBuildPlatform, aType="PRJ_EXPORTS"):
+		exportList = []
+
+		for exportLine in self.__getSection(aBuildPlatform, aType):
+
+			if not re.match(r'\S+', exportLine):
+				continue
+
+			try:
+				exportList.append(Export(exportLine.getFilename(), exportLine, aType))
+			except ValueError,e:
+				self.log.Error(str(e))
+
+		return exportList
+
+	def getTestExports(self, aBuildPlatform):
+		return self.getExports(aBuildPlatform, "PRJ_TESTEXPORTS")
+
+	def getExtensions(self, aBuildPlatform, aType="PRJ_EXTENSIONS"):
+		extensionObjects = []
+		start = ""
+		options = []
+
+		for extensionLine in self.__getSection(aBuildPlatform, aType):
+			if (re.search(r'^\s*START ',extensionLine, re.I)):
+				start = extensionLine
+			elif re.search(r'^\s*END\s*$',extensionLine, re.I):
+				extensionObjects.append(Extension(self.filename, start, options, aBuildPlatform, self.__Raptor))
+				start = ""
+				options = []
+			elif re.search(r'^\s*$',extensionLine, re.I):
+				continue
+			elif start:
+				options.append(extensionLine)
+
+		return extensionObjects
+
+	def getTestExtensions(self, aBuildPlatform):
+		return self.getExtensions(aBuildPlatform, "PRJ_TESTEXTENSIONS")
+
+	def __getSection(self, aBuildPlatform, aSection):
+
+		activeSection = False
+		sectionContent = []
+		lineContent = re.split(r'\n', self.getContent(aBuildPlatform));
+
+		currentBldInfFile = self.filename
+		currentLineNumber = 0
+
+		for line in lineContent:
+			if line.startswith("#"):
+				commentDetail = getPreProcessorCommentDetail(line)
+				currentBldInfFile = commentDetail[0]
+				currentLineNumber = commentDetail[1]-1
+				continue
+
+			currentLineNumber += 1
+
+			if not re.match(r'.*\S+', line):
+				continue
+			elif re.match(r'\s*' + aSection + r'\s*$', line, re.I):
+				activeSection = True
+			elif re.match(r'\s*PRJ_\w+\s*$', line, re.I):
+				activeSection = False
+			elif activeSection:
+				sectionContent.append(PreProcessedLine(line, currentBldInfFile, currentLineNumber))
+
+		return sectionContent
+
+	@staticmethod
+	def outputPathFragment(bldinfpath):
+		"""Return a relative path that uniquely identifies this bldinf file
+		   whilst being short so that it can be appended to epoc32/build.
+		   The  build product of a particular bld.inf may be placed in here.
+		   This affects its TEMs and its MMPs"""
+
+		absroot_str = os.path.abspath(str(bldinfpath)).lower().replace("\\","/")
+
+		uniqueid = hashlib.md5()
+		uniqueid.update(absroot_str)
+
+		specnamecomponents = (re.sub("^[A-Za-z]:", "", absroot_str)).split('/') # split, removing any drive identifier (if present)
+
+		pathlist=[]
+		while len(specnamecomponents) > 0:
+			top = specnamecomponents.pop()
+			if top.endswith('.inf'):
+				continue
+			elif top == 'group':
+				continue
+			else:
+				pathlist = [top]
+				break
+
+		pathlist.append("c_"+uniqueid.hexdigest()[:16])
+		return "/".join(pathlist)
+
+	def outputpath(self, platform):
+		""" The full path where product from this bldinf is created."""
+		return str(platform['SBS_BUILD_DIR']) + "/" + BldInfFile.outputPathFragment(self.filename)
+
+	def depspath(self, platform):
+	   """ Where does dependency information go relative to platform's SBS_BUILD_DIR?
+	       Subclasses should redefine this
+	   """
+	   return self.outputpath(platform) + "/bldinf." + platform['key_md5'] + ".d"
+
+
+
+class MMPRaptorBackend(MMPBackend):
+	"""A parser "backend" for the MMP language
+
+	This is used to map recognised MMP syntax onto a buildspec """
+
+	# Support priorities, with case-fixed mappings for use
+	epoc32priorities = {
+		'low':'Low',
+		'background':'Background',
+		'foreground':'Foreground',
+		'high':'High',
+		'windowserver':'WindowServer',
+		'fileserver':'FileServer',
+		'realtimeserver':'RealTimeServer',
+		'supervisor':'SuperVisor'
+		}
+
+	# Known capability flags with associated bitwise operations
+	supportedCapabilities = {
+		'tcb':(1<<0),
+		'commdd':(1<<1),
+		'powermgmt':(1<<2),
+		'multimediadd':(1<<3),
+		'readdevicedata':(1<<4),
+		'writedevicedata':(1<<5),
+		'drm':(1<<6),
+		'trustedui':(1<<7),
+		'protserv':(1<<8),
+		'diskadmin':(1<<9),
+		'networkcontrol':(1<<10),
+		'allfiles':(1<<11),
+		'swevent':(1<<12),
+		'networkservices':(1<<13),
+		'localservices':(1<<14),
+		'readuserdata':(1<<15),
+		'writeuserdata':(1<<16),
+		'location':(1<<17),
+		'surroundingsdd':(1<<18),
+		'userenvironment':(1<<19),
+	# Old capability names have zero value
+		'root':0,
+		'mediadd':0,
+		'readsystemdata':0,
+		'writesystemdata':0,
+		'sounddd':0,
+		'uidd':0,
+		'killanyprocess':0,
+		'devman':0,
+		'phonenetwork':0,
+		'localnetwork':0
+	  	}
+
+	library_re = re.compile(r"^(?P<name>[^{]+?)(?P<version>{(?P<major>[0-9]+)\.(?P<minor>[0-9]+)})?(\.(lib|dso))?$",re.I)
+
+
+	def __init__(self, aRaptor, aMmpfilename, aBldInfFilename):
+		super(MMPRaptorBackend,self).__init__()
+		self.platformblock = None
+		self.__Raptor = aRaptor
+		self.BuildVariant = raptor_data.Variant()
+		self.ResourceVariants = []
+		self.BitmapVariants = []
+		self.StringTableVariants = []
+		self.__bldInfFilename = aBldInfFilename
+		self.__targettype = "UNKNOWN"
+		self.__currentMmpFile = aMmpfilename
+		self.__defFileRoot = self.__currentMmpFile
+		self.__currentLineNumber = 0
+		self.__sourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, "")
+		self.__userinclude = ""
+		self.__systeminclude = ""
+		self.__bitmapSourcepath = self.__sourcepath
+		self.__current_resource = ""
+		self.__capabilities = []
+		self.__resourceFiles = []
+		self.__pageConflict = []
+		self.__debuggable = ""
+		self.sources = []
+
+		self.__TARGET = ""
+		self.__TARGETEXT = ""
+		self.deffile = ""
+		self.__LINKAS = ""
+		self.nostrictdef = False
+		self.featureVariant = False
+
+		self.__currentResourceVariant = None
+		self.__currentStringTableVariant = None
+		self.__explicitversion = False
+		self.__versionhex = ""
+
+		# "ALL" capability calculated based on the total capabilities currently supported
+		allCapabilities = 0
+		for supportedCapability in MMPRaptorBackend.supportedCapabilities.keys():
+			allCapabilities = allCapabilities | MMPRaptorBackend.supportedCapabilities[supportedCapability]
+		MMPRaptorBackend.supportedCapabilities['all'] = allCapabilities
+
+	# Permit unit-testing output without a Raptor context
+	def __debug(self, format, *extras):
+		if (self.__Raptor):
+			self.__Raptor.Debug(format, *extras)
+
+	def __warn(self, format, *extras):
+		if (self.__Raptor):
+			self.__Raptor.Warn(format, *extras)
+
+	def doPreProcessorComment(self,s,loc,toks):
+		commentDetail = getPreProcessorCommentDetail(toks[0])
+		self.__currentMmpFile = commentDetail[0].GetLocalString()
+		self.__currentLineNumber = commentDetail[1]
+		self.__debug("Current file %s, line number %s\n"  % (self.__currentMmpFile,str(self.__currentLineNumber)))
+		return "OK"
+
+	def doBlankLine(self,s,loc,toks):
+		self.__currentLineNumber += 1
+
+	def doStartPlatform(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Start Platform block "+toks[0])
+		self.platformblock = toks[0]
+		return "OK"
+
+	def doEndPlatform(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Finalise platform " + self.platformblock)
+		return "OK"
+
+	def doSetSwitch(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		prefix=""
+		varname = toks[0].upper()
+
+		# A bright spark made the optionname the same as
+		# the env variable. One will override the other if we pass this
+		# on to make.  Add a prefix to prevent the clash.
+		if varname=='ARMINC':
+			prefix="SET_"
+			self.__debug( "Set switch "+toks[0]+" ON")
+			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
+
+		elif varname=='NOSTRICTDEF':
+			self.nostrictdef = True
+			self.__debug( "Set switch "+toks[0]+" ON")
+			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
+
+		elif varname == 'PAGED':
+			self.BuildVariant.AddOperation(raptor_data.Set(varname, "1"))
+			self.__debug( "Set switch PAGE ON")
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "paged"))
+			self.__debug( "Set switch PAGEDCODE ON")
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "paged"))
+			self.__debug( "Set data PAGEDDATA ON")
+			self.__pageConflict.append("PAGEDCODE")
+			self.__pageConflict.append("PAGEDDATA")
+
+		elif varname == 'UNPAGED':
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGED", "0"))
+			self.__debug( "Set switch PAGED OFF")
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
+			self.__debug( "Set switch PAGEDCODE OFF")
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
+			self.__debug( "Set data PAGEDDATA OFF")
+			self.__pageConflict.append("UNPAGEDCODE")
+			self.__pageConflict.append("UNPAGEDDATA")
+
+		elif varname == 'PAGEDCODE':
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "paged"))
+			self.__debug( "Set switch " + varname + " ON")
+			self.__pageConflict.append(varname)
+
+		elif varname == 'PAGEDDATA':
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "paged"))
+			self.__debug( "Set switch " + varname + " ON")
+			self.__pageConflict.append(varname)
+
+		elif varname == 'UNPAGEDCODE':
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDCODE_OPTION", "unpaged"))
+			self.__debug( "Set switch " + varname + " ON")
+			self.__pageConflict.append(varname)
+		elif varname == 'UNPAGEDDATA':
+			self.BuildVariant.AddOperation(raptor_data.Set("PAGEDDATA_OPTION", "unpaged"))
+			self.__debug( "Set switch " + varname + " ON")
+			self.__pageConflict.append(varname)
+
+		elif varname == 'NOLINKTIMECODEGENERATION':
+			self.BuildVariant.AddOperation(raptor_data.Set("LTCG",""))
+			self.__debug( "Set switch " + varname + " OFF")
+		elif varname == 'NOMULTIFILECOMPILATION':
+			self.BuildVariant.AddOperation(raptor_data.Set("MULTIFILE_ENABLED",""))
+			self.__debug( "Set switch " + varname + " OFF")
+
+		elif varname == 'DEBUGGABLE':
+			if self.__debuggable != "udeb":
+				self.__debuggable = "udeb urel"
+			else:
+				self.__Raptor.Warn("DEBUGGABLE keyword ignored as DEBUGGABLE_UDEBONLY is already specified")
+		elif varname == 'DEBUGGABLE_UDEBONLY':
+			if self.__debuggable != "":
+				self.__Raptor.Warn("DEBUGGABLE keyword has no effect as DEBUGGABLE or DEBUGGABLE_UDEBONLY is already set")
+			self.__debuggable = "udeb"
+		elif varname == 'FEATUREVARIANT':
+			self.BuildVariant.AddOperation(raptor_data.Set(varname,"1"))
+			self.featureVariant = True
+		else:
+			self.__debug( "Set switch "+toks[0]+" ON")
+			self.BuildVariant.AddOperation(raptor_data.Set(prefix+varname, "1"))
+
+		return "OK"
+
+	def doAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		varname = toks[0].upper()
+		if varname=='TARGET':
+			(self.__TARGET, self.__TARGETEXT) = os.path.splitext(toks[1])
+			self.__TARGETEXT = self.__TARGETEXT.lstrip('.')
+
+			self.BuildVariant.AddOperation(raptor_data.Set("REQUESTEDTARGETEXT", self.__TARGETEXT.lower()))
+
+			lowercase_TARGET = self.__TARGET.lower()
+			self.__debug("Set "+toks[0]+" to " + lowercase_TARGET)
+			self.__debug("Set REQUESTEDTARGETEXT to " + self.__TARGETEXT.lower())
+
+			self.BuildVariant.AddOperation(raptor_data.Set("TARGET", self.__TARGET))
+			self.BuildVariant.AddOperation(raptor_data.Set("TARGET_lower", lowercase_TARGET))
+			if  lowercase_TARGET !=  self.__TARGET:
+				self.__debug("TARGET is not lowercase: '%s' - might cause BC problems." % self.__TARGET)
+		elif varname=='TARGETTYPE':
+			self.__debug("Set "+toks[0]+" to " + str(toks[1]))
+			self.__targettype=toks[1]
+			if  self.__targettype.lower() == "none":
+				self.BuildVariant.AddOperation(raptor_data.Set("TARGET", ""))
+				self.BuildVariant.AddOperation(raptor_data.Set("TARGET_lower",""))
+				self.BuildVariant.AddOperation(raptor_data.Set("REQUESTEDTARGETEXT", ""))
+			self.BuildVariant.AddOperation(raptor_data.Set(varname,toks[1].lower()))
+
+		elif varname=='TARGETPATH':
+			value = toks[1].lower().replace('\\','/')
+			self.__debug("Set "+varname+" to " + value)
+			self.BuildVariant.AddOperation(raptor_data.Set(varname, value))
+
+		elif varname=='OPTION' or varname=='LINKEROPTION':
+			self.__debug("Set "+toks[1]+varname+" to " + str(toks[2]))
+			self.BuildVariant.AddOperation(raptor_data.Append(varname+"_"+toks[1].upper()," ".join(toks[2])))
+
+			# Warn about OPTION ARMASM
+			if "armasm" in toks[1].lower():
+				self.__Raptor.Warn(varname+" ARMASM has no effect (use OPTION ARMCC).")
+
+		elif varname=='OPTION_REPLACE':
+			# Warn about OPTION_REPLACE ARMASM
+			if "armasm" in toks[1].lower():
+				self.__Raptor.Warn("OPTION_REPLACE ARMASM has no effect (use OPTION_REPLACE ARMCC).")
+			else:
+				args = " ".join(toks[2])
+
+				searchReplacePairs = self.resolveOptionReplace(args)
+
+				for searchReplacePair in searchReplacePairs:
+					self.__debug("Append %s to OPTION_REPLACE_%s", searchReplacePair, toks[1].upper())
+					self.BuildVariant.AddOperation(raptor_data.Append(varname+"_"+toks[1].upper(),searchReplacePair))
+
+		elif varname=='SYSTEMINCLUDE' or varname=='USERINCLUDE':
+			for path in toks[1]:
+				resolved = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, path)
+				self.BuildVariant.AddOperation(raptor_data.Append(varname,resolved))
+
+				if varname=='SYSTEMINCLUDE':
+					self.__systeminclude += ' ' + resolved
+					self.__debug("  %s = %s",varname, self.__systeminclude)
+				else:
+					self.__userinclude += ' ' + resolved
+					self.__debug("  %s = %s",varname, self.__userinclude)
+
+				self.__debug("Appending %s to %s",resolved, varname)
+
+			self.__systeminclude = self.__systeminclude.strip()
+			self.__systeminclude = self.__systeminclude.rstrip('\/')
+			self.__userinclude = self.__userinclude.strip()
+			self.__userinclude = self.__userinclude.rstrip('\/')
+
+		elif varname=='EXPORTLIBRARY':
+			# Remove extension from the EXPORTLIBRARY name
+			libName = toks[1].rsplit(".", 1)[0]
+			self.__debug("Set "+varname+" to " + libName)
+			self.BuildVariant.AddOperation(raptor_data.Set(varname,"".join(libName)))
+
+		elif varname=='CAPABILITY':
+			for cap in toks[1]:
+				self.BuildVariant.AddOperation(raptor_data.Append(varname,cap," "))
+				self.__debug("Setting  "+toks[0]+": " + cap)
+				self.__capabilities.append(cap.lower())
+		elif varname=='DEFFILE':
+			self.__defFileRoot = self.__currentMmpFile
+			self.deffile = toks[1]
+		elif varname=='LINKAS':
+			self.__debug("Set "+toks[0]+"  OPTION to " + str(toks[1]))
+			self.__LINKAS = toks[1]
+			self.BuildVariant.AddOperation(raptor_data.Set(varname, toks[1]))
+		elif varname=='SECUREID' or varname=='VENDORID':
+			hexoutput = MMPRaptorBackend.canonicalUID(toks[1])
+			self.__debug("Set "+toks[0]+"  OPTION to " + hexoutput)
+			self.BuildVariant.AddOperation(raptor_data.Set(varname, hexoutput))
+		elif varname=='VERSION':
+			if toks[-1] == "EXPLICIT":
+				self.__explicitversion = True
+				self.BuildVariant.AddOperation(raptor_data.Set("EXPLICITVERSION", "1"))
+
+			vm = re.match(r'^(\d+)(\.(\d+))?$', toks[1])
+			if vm is not None:
+				version = vm.groups()
+				# the major version number
+				major = int(version[0],10)
+
+				# add in the minor number
+				minor = 0
+				if version[1] is not None:
+					minor = int(version[2],10)
+				else:
+					self.__Raptor.Warn("VERSION (%s) missing '.minor' in %s, using '.0'" % (toks[1],self.__currentMmpFile))
+
+				self.__versionhex = "%04x%04x" % (major, minor)
+				self.BuildVariant.AddOperation(raptor_data.Set(varname, "%d.%d" %(major, minor)))
+				self.BuildVariant.AddOperation(raptor_data.Set(varname+"HEX", self.__versionhex))
+				self.__debug("Set "+toks[0]+"  OPTION to " + toks[1])
+				self.__debug("Set "+toks[0]+"HEX OPTION to " + "%04x%04x" % (major,minor))
+
+			else:
+				self.__Raptor.Warn("Invalid version supplied to VERSION (%s), using default value" % toks[1])
+
+		elif varname=='EPOCHEAPSIZE':
+			# Standardise on sending hex numbers to the FLMS.
+
+			if toks[1].lower().startswith('0x'):
+				min = long(toks[1],16)
+			else:
+				min = long(toks[1],10)
+
+			if toks[2].lower().startswith('0x'):
+				max = long(toks[2],16)
+			else:
+				max = long(toks[2],10)
+
+			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MIN", "%x" % min))
+			self.__debug("Set "+varname+"MIN  OPTION to '%x' (hex)" % min )
+			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MAX", "%x" % max))
+			self.__debug("Set "+varname+"MAX  OPTION to '%x' (hex)" % max )
+
+			# Some toolchains require decimal versions of the min/max values, converted to KB and
+			# rounded up to the next 1KB boundary
+			min_dec_kb = (int(min) + 1023) / 1024
+			max_dec_kb = (int(max) + 1023) / 1024
+			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MIN_DEC_KB", "%d" % min_dec_kb))
+			self.__debug("Set "+varname+"MIN  OPTION KB to '%d' (dec)" % min_dec_kb )
+			self.BuildVariant.AddOperation(raptor_data.Set(varname+"MAX_DEC_KB", "%d" % max_dec_kb))
+			self.__debug("Set "+varname+"MAX  OPTION KB to '%d' (dec)" % max_dec_kb )
+
+		elif varname=='EPOCSTACKSIZE':
+			if toks[1].lower().startswith('0x'):
+				stack = long(toks[1],16)
+			else:
+				stack = long(toks[1],10)
+			self.BuildVariant.AddOperation(raptor_data.Set(varname, "%x" % stack))
+			self.__debug("Set "+varname+"  OPTION to '%x' (hex)" % stack  )
+		elif varname=='EPOCPROCESSPRIORITY':
+			# low, background, foreground, high, windowserver, fileserver, realtimeserver or supervisor
+			# These are case insensitive in metadata entries, but must be mapped to a static case pattern for use
+			prio = toks[1].lower()
+
+			# NOTE: Original validation here didn't actually work.  This has been corrected to provide an error, but probably needs re-examination.
+			if not MMPRaptorBackend.epoc32priorities.has_key(prio):
+				self.__Raptor.Error("Priority setting '%s' is not a valid priority - should be one of %s.", prio, MMPRaptorBackend.epoc32priorities.values())
+			else:
+				self.__debug("Set "+toks[0]+" to " +  MMPRaptorBackend.epoc32priorities[prio])
+				self.BuildVariant.AddOperation(raptor_data.Set(varname,MMPRaptorBackend.epoc32priorities[prio]))
+		elif varname=='ROMTARGET' or varname=='RAMTARGET':
+			if len(toks) == 1:
+				self.__debug("Set "+toks[0]+" to <none>" )
+				self.BuildVariant.AddOperation(raptor_data.Set(varname,"<none>"))
+			else:
+				toks1 = str(toks[1]).replace("\\","/")
+				if toks1.find(","):
+					toks1 = re.sub("[,'\[\]]", "", toks1).replace("//","/")
+				self.__debug("Set "+toks[0]+" to " + toks1)
+				self.BuildVariant.AddOperation(raptor_data.Set(varname,toks1))
+
+		else:
+			self.__debug("Set "+toks[0]+" to " + str(toks[1]))
+			self.BuildVariant.AddOperation(raptor_data.Set(varname,"".join(toks[1])))
+
+			if varname=='LINKAS':
+				self.__LINKAS = toks[1]
+
+		return "OK"
+
+	def doAppend(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		"""MMP command
+		"""
+		name=toks[0].upper()
+		if len(toks) == 1:
+			# list can be empty e.g. MACRO _FRED_ when fred it defined in the HRH
+			# causes us to see just "MACRO" in the input - it is valid to ignore this
+			self.__debug("Empty append list for " + name)
+			return "OK"
+		self.__debug("Append to "+name+" the values: " +str(toks[1]))
+
+		if name=='MACRO':
+			name='MMPDEFS'
+		elif name=='LANG':
+			# don't break the environment variable
+			name='LANGUAGES'
+
+		for item in toks[1]:
+			if name=='MMPDEFS':
+				# Unquote any macros since the FLM does it anyhow
+				if item.startswith('"') and item.endswith('"') \
+				or item.startswith("'") and item.endswith("'"):
+					item = item.strip("'\"")
+			if name=='LIBRARY' or name=='DEBUGLIBRARY':
+				im = MMPRaptorBackend.library_re.match(item)
+				if not im:
+					self.__error("LIBRARY: %s Seems to have an invalid name.\nExpected xxxx.lib or xxxx.dso\n where xxxx might be\n\tname or \n\tname(n,m) where n is a major version number and m is a minor version number\n" %item)
+				d = im.groupdict()
+
+				item = d['name']
+				if d['version'] is not None:
+					item += "{%04x%04x}" % (int(d['major']), int(d['minor']))
+				item += ".dso"
+			elif name=='STATICLIBRARY':
+				# the FLM will decide on the ending appropriate to the platform
+				item = re.sub(r"^(.*)\.[Ll][Ii][Bb]$",r"\1", item)
+			elif name=="LANGUAGES":
+				item = item.lower()
+			elif (name=="WIN32_LIBRARY" and (item.startswith(".") or re.search(r'[\\|/]',item))) \
+				or (name=="WIN32_RESOURCE"):
+				# Relatively pathed win32 libraries, and all win32 resources, are resolved in relation
+				# to the wrapper bld.inf file in which their .mmp file is specified.  This equates to
+				# the current working directory in ABLD operation.
+				item = raptor_utilities.resolveSymbianPath(self.__bldInfFilename, item)
+				
+			self.BuildVariant.AddOperation(raptor_data.Append(name,item," "))
+			
+			# maintain a debug library list, the same as LIBRARY but with DEBUGLIBRARY values
+			# appended as they are encountered
+			if name=='LIBRARY' or name=='DEBUGLIBRARY':
+				self.BuildVariant.AddOperation(raptor_data.Append("LIBRARY_DEBUG",item," "))			
+
+		return "OK"
+
+	def canonicalUID(number):
+		""" convert a UID string into an 8 digit hexadecimal string without leading 0x """
+		if number.lower().startswith("0x"):
+			n = int(number,16)
+		else:
+			n = int(number,10)
+
+		return "%08x" % n
+
+	canonicalUID = staticmethod(canonicalUID)
+
+	def doUIDAssignment(self,s,loc,toks):
+		"""A single UID command results in a number of spec variables"""
+		self.__currentLineNumber += 1
+
+		hexoutput = MMPRaptorBackend.canonicalUID(toks[1][0])
+		self.__debug( "Set UID2 to %s" % hexoutput )
+		self.BuildVariant.AddOperation(raptor_data.Set("UID2", hexoutput))
+
+		if len(toks[1]) > 1:
+			hexoutput = MMPRaptorBackend.canonicalUID(toks[1][1])
+			self.__debug( "Set UID3 to %s" % hexoutput)
+			self.BuildVariant.AddOperation(raptor_data.Set("UID3", hexoutput))
+
+		self.__debug( "done set UID")
+		return "OK"
+
+	def doSourcePathAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__sourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, toks[1])
+		self.__debug( "Remembering self.sourcepath state:  "+str(toks[0])+" is now " + self.__sourcepath)
+		self.__debug("selfcurrentMmpFile: " + self.__currentMmpFile)
+		return "OK"
+
+
+	def doSourceAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Setting "+toks[0]+" to " + str(toks[1]))
+		for file in toks[1]:
+			# file is always relative to sourcepath but some MMP files
+			# have items that begin with a slash...
+			file = file.lstrip("/")
+			source = generic_path.Join(self.__sourcepath, file)
+
+			# If the SOURCEPATH itself begins with a '/', then dont look up the caseless version, since
+			# we don't know at this time what $(EPOCROOT) will evaluate to.
+			if source.GetLocalString().startswith('$(EPOCROOT)'):
+				self.sources.append(str(source))	
+				self.__debug("Append SOURCE " + str(source))
+
+			else:
+				foundsource = source.FindCaseless()
+				if foundsource == None:
+					# Hope that the file will be generated later
+					self.__debug("Sourcefile not found: %s" % source)
+					foundsource = source
+
+				self.sources.append(str(foundsource))	
+				self.__debug("Append SOURCE " + str(foundsource))
+
+
+		self.__debug("		sourcepath: " + self.__sourcepath)
+		return "OK"
+
+	# Resource
+
+	def doOldResourceAssignment(self,s,loc,toks):
+		# Technically deprecated, but still used, so...
+		self.__currentLineNumber += 1
+		self.__debug("Processing old-style "+toks[0]+" "+str(toks[1]))
+
+		sysRes = (toks[0].lower() == "systemresource")
+
+		for rss in toks[1]:
+			variant = raptor_data.Variant()
+
+			source = generic_path.Join(self.__sourcepath, rss)
+			variant.AddOperation(raptor_data.Set("SOURCE", str(source)))
+			self.__resourceFiles.append(str(source))
+
+			target = source.File().rsplit(".", 1)[0]	# remove the extension
+			variant.AddOperation(raptor_data.Set("TARGET", target))
+			variant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
+
+			header = target.lower() + ".rsg"			# filename policy
+			variant.AddOperation(raptor_data.Set("HEADER", header))
+
+			if sysRes:
+				dsrtp = self.getDefaultSystemResourceTargetPath()
+				variant.AddOperation(raptor_data.Set("TARGETPATH", dsrtp))
+
+			self.ResourceVariants.append(variant)
+
+		return "OK"
+
+	def getDefaultSystemResourceTargetPath(self):
+		# the default systemresource TARGETPATH value should come from the
+		# configuration rather than being hard-coded here. Then again, this
+		# should really be deprecated away into oblivion...
+		return "system/data"
+
+
+	def getDefaultResourceTargetPath(self, targettype):
+		# the different default TARGETPATH values should come from the
+		# configuration rather than being hard-coded here.
+		if targettype == "plugin":
+			return "resource/plugins"
+		if targettype == "pdl":
+			return "resource/printers"
+		return ""
+
+	def resolveOptionReplace(self, content):
+		"""
+		Constructs search/replace pairs based on .mmp OPTION_REPLACE entries for use on tool command lines
+		within FLMS.
+
+		Depending on what's supplied to OPTION_REPLACE <TOOL>, the core part of the <TOOL> command line
+		in the relevant FLM will have search and replace actions performed on it post-expansion (but pre-
+		any OPTION <TOOL> additions).
+
+		In terms of logic, we try to follow what ABLD does, as the current behaviour is undocumented.
+		What happens is a little inconsistent, and best described by some generic examples:
+
+			OPTION_REPLACE TOOL existing_option replacement_value
+
+				Replace all instances of "option existing_value" with "option replacement_value"
+
+			OPTION_REPLACE TOOL existing_option replacement_option
+
+				Replace all instances of "existing_option" with "replacement_option".
+
+			If "existing_option" is present in isolation then a removal is performed.
+
+		Any values encountered that don't follow an option are ignored.
+		Options are identified as being prefixed with either '-' or '--'.
+
+		The front-end processes each OPTION_REPLACE entry and then appends one or more search/replace pairs
+		to an OPTION_REPLACE_<TOOL> variable in the following format:
+
+		     search<->replace
+		"""
+		# Note that, for compatibility reasons, the following is mostly a port to Python of the corresponding
+		# ABLD Perl, and hence maintains ABLD's idiosyncrasies in what it achieves
+
+		searchReplacePairs = []
+		matches = re.findall("-{1,2}\S+\s*(?!-)\S*",content)
+
+		if matches:
+			# reverse so we can process as a stack whilst retaining original order
+			matches.reverse()
+
+			while (len(matches)):
+				match = matches.pop()
+
+				standaloneMatch = re.match('^(?P<option>\S+)\s+(?P<value>\S+)$', match)
+
+				if (standaloneMatch):
+					# Option listed standalone with a replacement value
+					# Example:
+					# 	OPTION_REPLACE ARMCC --cpu 6
+					# Intention:
+					# 	Replace instances of  "--cpu <something>" with "--cpu 6"
+
+					# Substitute any existing "option <existing_value>" instances with a single word
+					# "@@<existing_value>" for later replacement
+					searchReplacePairs.append('%s <->@@' % standaloneMatch.group('option'))
+
+					# Replace "@@<existing_value>" entries from above with "option <new_value>" entries
+					# A pattern substitution is used to cover pre-existing values
+					searchReplacePairs.append('@@%%<->%s %s' % (standaloneMatch.group('option'), standaloneMatch.group('value')))
+				else:
+					# Options specified in search/replace pairs with optional values
+					# Example:
+					#	OPTION_REPLACE ARMCC --O2 --O3
+					# Intention:
+					#	Replace instances of "--O2" with "--O3"
+
+					# At this point we will be looking at just the search option - there may or may not
+					# be a replacement to consider
+					search = match
+					replace = ""
+					if len(matches):
+						replace = matches.pop()
+					
+					searchReplacePairs.append('%s<->%s' % (search, replace))
+
+			# Replace spaces to maintain word-based grouping in downstream makefile lists
+			for i in range(0,len(searchReplacePairs)):
+				searchReplacePairs[i] = searchReplacePairs[i].replace(' ','%20')
+
+		return searchReplacePairs
+
+	def doStartResource(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug("Start RESOURCE "+toks[1])
+
+		self.__current_resource = generic_path.Path(self.__sourcepath, toks[1])
+		self.__current_resource = str(self.__current_resource)
+
+		self.__debug("sourcepath: " + self.__sourcepath)
+		self.__debug("self.__current_resource source: " + toks[1])
+		self.__debug("adjusted self.__current_resource source=" + self.__current_resource)
+
+		self.__currentResourceVariant = raptor_data.Variant()
+		self.__currentResourceVariant.AddOperation(raptor_data.Set("SOURCE", self.__current_resource))
+		self.__resourceFiles.append(self.__current_resource)
+
+		# The target name is the basename of the resource without the extension
+		# e.g. "/fred/129ab34f.rss" would have a target name of "129ab34f"
+		target = self.__current_resource.rsplit("/",1)[-1]
+		target = target.rsplit(".",1)[0]
+		self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET", target))
+		self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
+		self.__headerspecified = False
+		self.__headeronlyspecified = False
+		self.__current_resource_header = target.lower() + ".rsg"
+
+		return "OK"
+
+	def doResourceAssignment(self,s,loc,toks):
+		""" Assign variables for resource files """
+		self.__currentLineNumber += 1
+		varname = toks[0].upper() # the mmp keyword
+		varvalue = "".join(toks[1])
+
+		# Get rid of any .rsc extension because the build system
+		# needs to have it stripped off to calculate other names
+		# for other purposes and # we aren't going to make it
+		# optional anyhow.
+		if varname == "TARGET":
+			target_withext = varvalue.rsplit("/\\",1)[-1]
+			target = target_withext.rsplit(".",1)[0]
+			self.__current_resource_header = target.lower() + ".rsg"
+			self.__currentResourceVariant.AddOperation(raptor_data.Set("TARGET_lower", target.lower()))
+			self.__debug("Set resource "+varname+" to " + target)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,target))
+		if varname == "TARGETPATH":
+			varvalue=varvalue.replace('\\','/')
+			self.__debug("Set resource "+varname+" to " + varvalue)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,varvalue))
+		else:
+			self.__debug("Set resource "+varname+" to " + varvalue)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set(varname,varvalue))
+		return "OK"
+
+	def doResourceAppend(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug("Append resource to "+toks[0]+" the values: " +str(toks[1]))
+		varname = toks[0].upper()
+
+		# we cannot use LANG as it interferes with the environment
+		if varname == "LANG":
+			varname = "LANGUAGES"
+
+		for item in toks[1]:
+			if varname == "LANGUAGES":
+				item = item.lower()
+			self.__currentResourceVariant.AddOperation(raptor_data.Append(varname,item))
+		return "OK"
+
+	def doResourceSetSwitch(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		name = toks[0].upper()
+
+		if name == "HEADER":
+			self.__headerspecified = True
+
+		elif name == "HEADERONLY":
+			self.__headeronlyspecified = True
+
+		else:
+			value = "1"
+			self.__debug( "Set resource switch " + name + " " + value)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set(name, value))
+
+		return "OK"
+
+	def doEndResource(self,s,loc,toks):
+		self.__currentLineNumber += 1
+
+		# Header name can change, depening if there was a TARGET defined or not, so it must be appended at the end
+		if self.__headerspecified:
+			self.__debug("Set resource switch HEADER " + self.__current_resource_header)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADER", self.__current_resource_header))
+
+		if self.__headeronlyspecified:
+			self.__debug("Set resource switch HEADERONLY " + self.__current_resource_header)
+			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADER", self.__current_resource_header))
+			self.__currentResourceVariant.AddOperation(raptor_data.Set("HEADERONLY", "True"))
+
+		self.__debug("End RESOURCE")
+		self.ResourceVariants.append(self.__currentResourceVariant)
+		self.__currentResourceVariant = None
+		self.__current_resource = ""
+		return "OK"
+
+	# Bitmap
+
+	def doStartBitmap(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug("Start BITMAP "+toks[1])
+
+		self.__currentBitmapVariant = raptor_data.Variant(toks[1].replace('.','_'))
+		# Use BMTARGET and BMTARGET_lower because that prevents
+		# confusion with the TARGET and TARGET_lower of our parent MMP
+		# when setting the OUTPUTPATH.  This in turn allows us to
+		# not get tripped up by multiple mbms being generated with
+		# the same name to the same directory.
+		self.__currentBitmapVariant.AddOperation(raptor_data.Set("BMTARGET", toks[1]))
+		self.__currentBitmapVariant.AddOperation(raptor_data.Set("BMTARGET_lower", toks[1].lower()))
+		self.__currentBitmapVariant.AddOperation(raptor_data.Set("SOURCE", ""))
+		return "OK"
+
+	def doBitmapAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug("Set bitmap "+toks[0]+" to " + str(toks[1]))
+		name = toks[0].upper()
+		value = "".join(toks[1])
+		if name == "TARGETPATH":
+			value = value.replace('\\','/')
+
+		self.__currentBitmapVariant.AddOperation(raptor_data.Set(name,value))
+		return "OK"
+
+	def doBitmapSourcePathAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug("Previous bitmap sourcepath:" + self.__bitmapSourcepath)
+		self.__bitmapSourcepath = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, toks[1])
+		self.__debug("New bitmap sourcepath: " + self.__bitmapSourcepath)
+
+	def doBitmapSourceAssignment(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Setting "+toks[0]+" to " + str(toks[1]))
+		# The first "source" is the colour depth for all the others.
+		# The depth format is b[,m] where b is the bitmap depth and m is
+		# the mask depth.
+		# Valid values for b are: 1 2 4 8 c4 c8 c12 c16 c24 c32 c32a (?)
+		# Valid values for m are: 1 8 (any number?)
+		#
+		# If m is specified then the bitmaps are in pairs: b0 m0 b1 m1...
+		# If m is not specified then there are no masks, just bitmaps: b0 b1...
+		colordepth = toks[1][0].lower()
+		if "," in colordepth:
+			(bitmapdepth, maskdepth) = colordepth.split(",")
+		else:
+			bitmapdepth = colordepth
+			maskdepth = 0
+
+		sources=""
+		mask = False
+		for file in toks[1][1:]:
+			path = generic_path.Join(self.__bitmapSourcepath, file)
+			if sources:
+				sources += " "
+			if mask:
+				sources += "DEPTH=" + maskdepth + " FILE=" + str(path)
+			else:
+				sources += "DEPTH=" + bitmapdepth + " FILE=" + str(path)
+			if maskdepth:
+				mask = not mask
+		self.__debug("sources: " + sources)
+		self.__currentBitmapVariant.AddOperation(raptor_data.Append("SOURCE", sources))
+		return "OK"
+
+	def doBitmapSetSwitch(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Set bitmap switch "+toks[0]+" ON")
+		self.__currentBitmapVariant.AddOperation(raptor_data.Set(toks[0].upper(), "1"))
+		return "OK"
+
+	def doEndBitmap(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__bitmapSourcepath = self.__sourcepath
+		self.BitmapVariants.append(self.__currentBitmapVariant)
+		self.__currentBitmapVariant = None
+		self.__debug("End BITMAP")
+		return "OK"
+
+	# Stringtable
+
+	def doStartStringTable(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		self.__debug( "Start STRINGTABLE "+toks[1])
+
+		specstringtable = generic_path.Join(self.__sourcepath, toks[1])
+		uniqname = specstringtable.File().replace('.','_') # corrected, filename only
+		source = str(specstringtable.FindCaseless())
+
+		self.__debug("sourcepath: " + self.__sourcepath)
+		self.__debug("stringtable: " + toks[1])
+		self.__debug("adjusted stringtable source=" + source)
+
+		self.__currentStringTableVariant = raptor_data.Variant(uniqname)
+		self.__currentStringTableVariant.AddOperation(raptor_data.Set("SOURCE", source))
+		self.__currentStringTableVariant.AddOperation(raptor_data.Set("EXPORTPATH", ""))
+		self.__stringtableExported = False
+
+		# The target name by default is the name of the stringtable without the extension
+		# e.g. the stringtable "/fred/http.st" would have a default target name of "http"
+		stringtable_withext = specstringtable.File()
+		self.__stringtable = stringtable_withext.rsplit(".",1)[0].lower()
+		self.__currentStringTableVariant.AddOperation(raptor_data.Set("TARGET", self.__stringtable))
+
+		self.__stringtableHeaderonlyspecified = False
+
+		return "OK"
+
+	def doStringTableAssignment(self,s,loc,toks):
+		""" Assign variables for stringtables """
+		self.__currentLineNumber += 1
+		varname = toks[0].upper() # the mmp keyword
+		varvalue = "".join(toks[1])
+
+		# Get rid of any .rsc extension because the build system
+		# needs to have it stripped off to calculate other names
+		# for other purposes and # we aren't going to make it
+		# optional anyhow.
+		if varname == "EXPORTPATH":
+			finalvalue = raptor_utilities.resolveSymbianPath(self.__currentMmpFile, varvalue)
+			self.__stringtableExported = True
+		else:
+			finalvalue = varvalue
+
+		self.__debug("Set stringtable "+varname+" to " + finalvalue)
+		self.__currentStringTableVariant.AddOperation(raptor_data.Set(varname,finalvalue))
+		return "OK"
+
+	def doStringTableSetSwitch(self,s,loc,toks):
+		self.__currentLineNumber += 1
+		if toks[0].upper()== "HEADERONLY":
+			self.__stringtableHeaderonlyspecified = True
+			self.__debug( "Set stringtable switch "+toks[0]+" ON")
+			self.__currentStringTableVariant.AddOperation(raptor_data.Set(toks[0].upper(), "1"))
+		return "OK"
+
+	def doEndStringTable(self,s,loc,toks):
+		self.__currentLineNumber += 1
+
+		if not self.__stringtableExported:
+			# There was no EXPORTPATH specified for this stringtable
+			# so for our other code to be able to reference it we
+			# must add the path of the generated location to the userinclude path
+
+			ipath = "$(OUTPUTPATH)"
+			self.BuildVariant.AddOperation(raptor_data.Append("USERINCLUDE",ipath))
+			self.__userinclude += ' ' + ipath
+			self.__debug("  USERINCLUDE = %s", self.__userinclude)
+			self.__userinclude.strip()
+
+		self.StringTableVariants.append(self.__currentStringTableVariant)
+		self.__currentStringTableVariant = None
+		self.__debug("End STRINGTABLE")
+		if not self.__stringtableHeaderonlyspecified:
+			# Have to assume that this is where the cpp file will be.  This has to be maintained
+			# in sync with the FLM's idea of where this file should be.  We need a better way.
+			# Interfaces also need outputs that allow other interfaces to refer to their outputs
+			# without having to "know" where they will be.
+			self.sources.append('$(OUTPUTPATH)/' + self.__stringtable + '.cpp')
+		return "OK"
+
+
+	def doUnknownStatement(self,s,loc,toks):
+		self.__warn("%s (%d) : Unrecognised Keyword %s", self.__currentMmpFile, self.__currentLineNumber, str(toks))
+		self.__currentLineNumber += 1
+		return "OK"
+
+
+	def doUnknownBlock(self,s,loc,toks):
+		self.__warn("%s (%d) : Unrecognised Block %s", self.__currentMmpFile, self.__currentLineNumber, str(toks))
+		self.__currentLineNumber += 1
+		return "OK"
+
+	def doDeprecated(self,s,loc,toks):
+		self.__debug( "Deprecated command " + str(toks))
+		self.__warn("%s (%d) : %s is deprecated .mmp file syntax", self.__currentMmpFile, self.__currentLineNumber, str(toks))
+		self.__currentLineNumber += 1
+		return "OK"
+
+	def doNothing(self):
+		self.__currentLineNumber += 1
+		return "OK"
+
+	def finalise(self, aBuildPlatform):
+		"""Post-processing of data that is only applicable in the context of a fully
+		processed .mmp file."""
+		resolvedDefFile = ""
+
+		if self.__TARGET:
+			defaultRootName = self.__TARGET
+			if self.__TARGETEXT!="":
+				defaultRootName += "." + self.__TARGETEXT
+
+			# NOTE: Changing default .def file name based on the LINKAS argument is actually
+			# a defect, but this follows the behaviour of the current build system.
+			if (self.__LINKAS):
+				defaultRootName = self.__LINKAS
+
+			resolvedDefFile = self.resolveDefFile(defaultRootName, aBuildPlatform)
+			self.__debug("Resolved def file:  %s" % resolvedDefFile )
+			# We need to store this resolved deffile location for the FREEZE target
+			self.BuildVariant.AddOperation(raptor_data.Set("RESOLVED_DEFFILE", resolvedDefFile))
+
+		# If a deffile is specified, an FLM will put in a dependency.
+		# If a deffile is specified then raptor_meta will guess a name but:
+		#	1) If the guess is wrong then the FLM will complain "no rule to make ..."
+		#	2) In some cases, e.g. plugin, 1) is not desirable as the presence of a def file
+		#		is not a necessity.  In these cases the FLM needs to know if DEFFILE
+		#		is a guess or not so it can decide if a dependency should be added.
+
+		# We check that the def file exists and that it is non-zero (incredible
+		# that this should be needed).
+
+		deffile_keyword="1"
+		if self.deffile == "":
+			# If the user didn't specify a deffile name then
+			# we must be guessing
+			# Let's check if our guess actually corresponds to a
+			# real file.  If it does then that confims the guess.
+			#  If there's no file then we still need to pass make the name
+			# so it can complain about there not being a DEF file
+			# for this particular target type and fail to build this target.
+
+			deffile_keyword=""
+			try:
+				findpath = generic_path.Path(resolvedDefFile)
+				foundfile = findpath.FindCaseless()
+
+				if foundfile == None:
+					raise IOError("file not found")
+
+				self.__debug("Found DEFFILE  " + foundfile.GetLocalString())
+				rfstat = os.stat(foundfile.GetLocalString())
+
+				mode = rfstat[stat.ST_MODE]
+				if mode != None and stat.S_ISREG(mode) and rfstat[stat.ST_SIZE] > 0:
+					resolvedDefFile = str(foundfile)
+				else:
+					resolvedDefFile=""
+			except Exception,e:
+				self.__debug("While Searching for an IMPLIED  DEFFILE: %s: %s" % (str(e),str(findpath)) )
+				resolvedDefFile=""
+		else:
+			if not resolvedDefFile == "":
+				try:
+					findpath = generic_path.Path(resolvedDefFile)
+					resolvedDefFile = str(findpath.FindCaseless())
+					if resolvedDefFile=="None":
+						raise IOError("file not found")
+				except Exception,e:
+					self.__warn("While Searching for a SPECIFIED DEFFILE: %s: %s" % (str(e),str(findpath)) )
+					resolvedDefFile=""
+			else:
+				self.__warn("DEFFILE KEYWORD used (%s) but def file not resolved" % (self.deffile) )
+
+
+		self.BuildVariant.AddOperation(raptor_data.Set("DEFFILE", resolvedDefFile))
+		self.__debug("Set DEFFILE to " + resolvedDefFile)
+		self.BuildVariant.AddOperation(raptor_data.Set("DEFFILEKEYWORD", deffile_keyword))
+		self.__debug("Set DEFFILEKEYWORD to '%s'",deffile_keyword)
+
+		# if this target type has a default TARGETPATH other than "" for
+		# resources then we need to add that default to all resources which
+		# do not explicitly set the TARGETPATH themselves.
+		tp = self.getDefaultResourceTargetPath(self.getTargetType())
+		if tp:
+			for i,var in enumerate(self.ResourceVariants):
+				# does this resource specify its own TARGETPATH?
+				needTP = True
+				for op in var.ops:
+					if isinstance(op, raptor_data.Set) \
+					and op.name == "TARGETPATH":
+						needTP = False
+						break
+				if needTP:
+					self.ResourceVariants[i].AddOperation(raptor_data.Set("TARGETPATH", tp))
+
+		# some core build configurations need to know about the resource builds, and
+		# some resource building configurations need knowledge of the core build
+		for resourceFile in self.__resourceFiles:
+			self.BuildVariant.AddOperation(raptor_data.Append("RESOURCEFILES", resourceFile))
+
+		for i,var in enumerate(self.ResourceVariants):
+			self.ResourceVariants[i].AddOperation(raptor_data.Set("MAIN_TARGET_lower", self.__TARGET.lower()))
+			self.ResourceVariants[i].AddOperation(raptor_data.Set("MAIN_REQUESTEDTARGETEXT", self.__TARGETEXT.lower()))
+
+		# Resolve combined capabilities as hex flags, for configurations that require them
+		capabilityFlag1 = 0
+		capabilityFlag2 = 0			# Always 0
+
+		for capability in self.__capabilities:
+			invert = 0
+
+			if capability.startswith('-'):
+				invert = 0xffffffff
+				capability = capability.lstrip('-')
+
+			if MMPRaptorBackend.supportedCapabilities.has_key(capability):
+				capabilityFlag1 = capabilityFlag1 ^ invert
+				capabilityFlag1 = capabilityFlag1 | MMPRaptorBackend.supportedCapabilities[capability]
+				capabilityFlag1 = capabilityFlag1 ^ invert
+
+		capabilityFlag1 = "%08xu" % capabilityFlag1
+		capabilityFlag2 = "%08xu" % capabilityFlag2
+
+		self.BuildVariant.AddOperation(raptor_data.Set("CAPABILITYFLAG1", capabilityFlag1))
+		self.__debug ("Set CAPABILITYFLAG1 to " + capabilityFlag1)
+		self.BuildVariant.AddOperation(raptor_data.Set("CAPABILITYFLAG2", capabilityFlag2))
+		self.__debug ("Set CAPABILITYFLAG2 to " + capabilityFlag2)
+
+		# For non-Feature Variant builds, the location of the product include hrh file is
+		# appended to the SYSTEMINCLUDE list
+		if not aBuildPlatform['ISFEATUREVARIANT']:
+			productIncludePath = str(aBuildPlatform['VARIANT_HRH'].Dir())
+			self.BuildVariant.AddOperation(raptor_data.Append("SYSTEMINCLUDE",productIncludePath))
+			self.__debug("Appending product include location %s to SYSTEMINCLUDE",productIncludePath)
+
+		# Specifying both a PAGED* and its opposite UNPAGED* keyword in a .mmp file
+		# will generate a warning and the last keyword specified will take effect.
+		self.__pageConflict.reverse()
+		if "PAGEDCODE" in self.__pageConflict and "UNPAGEDCODE" in self.__pageConflict:
+			for x in self.__pageConflict:
+				if x == "PAGEDCODE" or x == "UNPAGEDCODE":
+					self.__Raptor.Warn("Both PAGEDCODE and UNPAGEDCODE are specified. The last one %s will take effect" % x)
+					break
+		if "PAGEDDATA" in self.__pageConflict and "UNPAGEDDATA" in self.__pageConflict:
+			for x in self.__pageConflict:
+				if x == "PAGEDDATA" or x == "UNPAGEDDATA":
+					self.__Raptor.Warn("Both PAGEDDATA and UNPAGEDDATA are specified. The last one %s will take effect" % x)
+					break
+
+		# Set Debuggable
+		self.BuildVariant.AddOperation(raptor_data.Set("DEBUGGABLE", self.__debuggable))
+
+		if self.__explicitversion:
+			self.BuildVariant.AddOperation(raptor_data.Append("UNIQUETARGETPATH","$(TARGET_lower)_$(VERSIONHEX)_$(REQUESTEDTARGETEXT)",'/'))
+		else:
+			self.BuildVariant.AddOperation(raptor_data.Append("UNIQUETARGETPATH","$(TARGET_lower)_$(REQUESTEDTARGETEXT)",'/'))
+
+		# Put the list of sourcefiles in with one Set operation - saves memory
+		# and performance over using multiple Append operations.
+		self.BuildVariant.AddOperation(raptor_data.Set("SOURCE",
+						   " ".join(self.sources)))
+
+	def getTargetType(self):
+		"""Target type in lower case - the standard format"""
+		return self.__targettype.lower()
+
+	def resolveDefFile(self, aTARGET, aBuildPlatform):
+		"""Returns a fully resolved DEFFILE entry depending on .mmp file location and TARGET, DEFFILE and NOSTRICTDEF
+		entries in the .mmp file itself (where appropriate).
+		Is able to deal with target names that have multiple '.' characters e.g. messageintercept.esockdebug.dll
+		"""
+
+		resolvedDefFile = ""
+		platform = aBuildPlatform['PLATFORM']
+
+		# Not having a default .def file directory is a pretty strong indicator that
+		# .def files aren't supported for the particular platform
+		if PlatformDefaultDefFileDir.has_key(platform):
+			(targetname,targetext) = os.path.splitext(aTARGET)
+			(defname,defext) = os.path.splitext(self.deffile)
+			if defext=="":
+				defext = ".def"
+
+			# NOTE: WORKAROUND
+			if len(targetext) > 4:
+				targetname += defext
+
+			if not self.deffile:
+				resolvedDefFile = targetname
+			else:
+				if re.search('[\\|\/]$', self.deffile):
+					# If DEFFILE is *solely* a path, signified by ending in a slash, then TARGET is the
+					# basis for the default .def filename but with the specified path as prefix
+					resolvedDefFile = self.deffile + targetname
+
+				else:
+					resolvedDefFile = defname
+
+				resolvedDefFile = resolvedDefFile.replace('~', PlatformDefaultDefFileDir[platform])
+
+			if resolvedDefFile:
+				if not self.nostrictdef:
+					resolvedDefFile += 'u'
+
+				if self.__explicitversion:
+					resolvedDefFile += '{' + self.__versionhex + '}'
+
+				resolvedDefFile += defext
+
+
+				# If a DEFFILE statement doesn't specify a path in any shape or form, prepend the default .def file
+				# location based on the platform being built
+				if not re.search('[\\\/]+', self.deffile):
+					resolvedDefFile = '../'+PlatformDefaultDefFileDir[platform]+'/'+resolvedDefFile
+
+				resolvedDefFile = raptor_utilities.resolveSymbianPath(self.__defFileRoot, resolvedDefFile, 'DEFFILE', "", str(aBuildPlatform['EPOCROOT']))
+
+		return resolvedDefFile
+
+
+class MetaReader(object):
+	"""Entry point class for Symbian metadata processing.
+
+	Provides a means of integrating "traditional" Symbian metadata processing
+	with the new Raptor build system."""
+
+	filesplit_re = re.compile(r"^(?P<name>.*)\.(?P<ext>[^\.]*)$")
+
+	def __init__(self, aRaptor, configsToBuild):
+		self.__Raptor = aRaptor
+		self.BuildPlatforms = []
+		self.ExportPlatforms = []
+
+		# Get the version of CPP that we are using
+		metadata = self.__Raptor.cache.FindNamedVariant("meta")
+		evaluator = self.__Raptor.GetEvaluator(None, raptor_data.BuildUnit(metadata.name, [metadata]) )
+		self.__gnucpp = self.CheckValue(evaluator, "GNUCPP")
+		self.__defaultplatforms = self.CheckValue(evaluator, "DEFAULT_PLATFORMS")
+		self.__basedefaultplatforms = self.CheckValue(evaluator, "BASE_DEFAULT_PLATFORMS")
+		self.__baseuserdefaultplatforms = self.CheckValue(evaluator, "BASE_USER_DEFAULT_PLATFORMS")
+
+		# Only read each variant.cfg once
+		variantCfgs = {}
+
+		# Group the list of configurations into "build platforms".
+		# A build platform is a set of configurations which share
+		# the same metadata. In other words, a set of configurations
+		# for which the bld.inf and MMP files pre-process to exactly
+		# the same text.
+		platforms = {}
+
+		# Exports are not "platform dependent" but they are configuration
+		# dependent because different configs can have different EPOCROOT
+		# and VARIANT_HRH values. Each "build platform" has one associated
+		# "export platform" but several "build platforms" can be associated
+		# with the same "export platform".
+		exports = {}
+
+		for buildConfig in configsToBuild:
+			# get everything we need to know about the configuration
+			evaluator = self.__Raptor.GetEvaluator(None, buildConfig)
+
+			detail = {}
+			detail['PLATFORM'] = self.CheckValue(evaluator, "TRADITIONAL_PLATFORM")
+			epocroot = self.CheckValue(evaluator, "EPOCROOT")
+			detail['EPOCROOT'] = generic_path.Path(epocroot)
+
+			sbs_build_dir = self.CheckValue(evaluator, "SBS_BUILD_DIR")
+			detail['SBS_BUILD_DIR'] = generic_path.Path(sbs_build_dir)
+			flm_export_dir = self.CheckValue(evaluator, "FLM_EXPORT_DIR")
+			detail['FLM_EXPORT_DIR'] = generic_path.Path(flm_export_dir)
+			detail['CACHEID'] = flm_export_dir
+			if raptor_utilities.getOSPlatform().startswith("win"):
+				detail['PLATMACROS'] = self.CheckValue(evaluator,"PLATMACROS.WINDOWS")
+			else:
+				detail['PLATMACROS'] = self.CheckValue(evaluator,"PLATMACROS.LINUX")
+
+			# Apply OS variant provided we are not ignoring this
+			if not self.__Raptor.ignoreOsDetection:
+				self.__Raptor.Debug("Automatic OS detection enabled.")
+				self.ApplyOSVariant(buildConfig, epocroot)
+			else: # We are ignore OS versions so no detection required, so no variant will be applied
+				self.__Raptor.Debug("Automatic OS detection disabled.")
+
+			# is this a feature variant config or an ordinary variant
+			fv = evaluator.Get("FEATUREVARIANTNAME")
+			if fv:
+				variantHdr = self.CheckValue(evaluator, "VARIANT_HRH")
+				variantHRH = generic_path.Path(variantHdr)
+				detail['ISFEATUREVARIANT'] = True
+			else:
+				variantCfg = self.CheckValue(evaluator, "VARIANT_CFG")
+				variantCfg = generic_path.Path(variantCfg)
+				if not variantCfg in variantCfgs:
+					# get VARIANT_HRH from the variant.cfg file
+					varCfg = getVariantCfgDetail(detail['EPOCROOT'], variantCfg)
+					variantCfgs[variantCfg] = varCfg['VARIANT_HRH']
+					# we expect to always build ABIv2
+					if not 'ENABLE_ABIV2_MODE' in varCfg:
+						self.__Raptor.Warn("missing flag ENABLE_ABIV2_MODE in %s file. ABIV1 builds are not supported.",
+										   str(variantCfg))
+				variantHRH = variantCfgs[variantCfg]
+				detail['ISFEATUREVARIANT'] = False
+
+			detail['VARIANT_HRH'] = variantHRH
+			self.__Raptor.Info("'%s' uses variant hrh file '%s'", buildConfig.name, variantHRH)
+			detail['SYSTEMINCLUDE'] = self.CheckValue(evaluator, "SYSTEMINCLUDE")
+
+			detail['METADEPS'] = [] # Dependency targets for all metadata files in this platform
+
+			# find all the interface names we need
+			ifaceTypes = self.CheckValue(evaluator, "INTERFACE_TYPES")
+			interfaces = ifaceTypes.split()
+
+			for iface in interfaces:
+				detail[iface] = self.CheckValue(evaluator, "INTERFACE." + iface)
+
+			# not test code unless positively specified
+			detail['TESTCODE'] = self.CheckValue(evaluator, "TESTCODE", "")
+
+			# make a key that identifies this platform uniquely
+			# - used to tell us whether we have done the pre-processing
+			# we need already using another platform with compatible values.
+
+			key = str(detail['VARIANT_HRH']) \
+			 	+ str(detail['EPOCROOT']) \
+		    	+ detail['SYSTEMINCLUDE'] \
+		    	+ detail['PLATFORM']
+
+		    # Keep a short version of the key for use in filenames.
+			uniq = hashlib.md5()
+			uniq.update(key)
+
+			detail['key'] = key
+			detail['key_md5'] = "p_" + uniq.hexdigest()
+			del uniq
+
+			# compare this configuration to the ones we have already seen
+
+			# Is this an unseen export platform?
+			# concatenate all the values we care about in a fixed order
+			# and use that as a signature for the exports.
+			items = ['EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE', 'export']
+			export = ""
+			for i in  items:
+				if i in detail:
+					export += i + str(detail[i])
+
+			if export in exports:
+				# add this configuration to an existing export platform
+				index = exports[export]
+				self.ExportPlatforms[index]['configs'].append(buildConfig)
+			else:
+				# create a new export platform with this configuration
+				exports[export] = len(self.ExportPlatforms)
+				exp = copy.copy(detail)
+				exp['PLATFORM'] = 'EXPORT'
+				exp['configs']  = [buildConfig]
+				self.ExportPlatforms.append(exp)
+
+			# Is this an unseen build platform?
+			# concatenate all the values we care about in a fixed order
+			# and use that as a signature for the platform.
+			items = ['PLATFORM', 'EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE']
+			if raptor_utilities.getOSPlatform().startswith("win"):
+				items.append('PLATMACROS.WINDOWS')
+			else:
+				items.append('PLATMACROS.LINUX')
+
+			items.extend(interfaces)
+			platform = ""
+			for i in  items:
+				if i in detail:
+					platform += i + str(detail[i])
+
+			if platform in platforms:
+				# add this configuration to an existing build platform
+				index = platforms[platform]
+				self.BuildPlatforms[index]['configs'].append(buildConfig)
+			else:
+				# create a new build platform with this configuration
+				platforms[platform] = len(self.BuildPlatforms)
+				detail['configs'] = [buildConfig]
+				self.BuildPlatforms.append(detail)
+
+		# one platform is picked as the "default" for extracting things
+		# that are supposedly platform independent (e.g. PRJ_PLATFORMS)
+		self.defaultPlatform = self.ExportPlatforms[0]
+
+	def CheckValue(self, evaluator, key, default = None):
+		"""extract a value from an evaluator and raise an exception if None.
+
+		An optional default can be set to replace a None value."""
+		value = evaluator.Get(key)
+		if value == None:
+			if default == None:
+				raise MetaDataError("configuration " + evaluator.config.name +
+								    " has no variable " + key)
+			else:
+				return default
+		return value
+
+	def ReadBldInfFiles(self, aFileList, doExportOnly):
+		"""Take a list of bld.inf files and return a list of build specs.
+
+		The returned specification nodes will be suitable for all the build
+		configurations under consideration (using Filter nodes where required).
+		"""
+
+		# we need a Filter node per export platform
+		exportNodes = []
+		for i,ep in enumerate(self.ExportPlatforms):
+			filter = raptor_data.Filter("export_" + str(i))
+
+			# what configurations is this node active for?
+			for config in ep['configs']:
+				filter.AddConfigCondition(config.name)
+
+			exportNodes.append(filter)
+
+		# we need a Filter node per build platform
+		platformNodes = []
+		for i,bp in enumerate(self.BuildPlatforms):
+			filter = raptor_data.Filter("build_" + str(i))
+
+			# what configurations is this node active for?
+			for config in bp['configs']:
+				filter.AddConfigCondition(config.name)
+
+			# platform-wide data
+			platformVar = raptor_data.Variant()
+			platformVar.AddOperation(raptor_data.Set("PRODUCT_INCLUDE",
+													 str(bp['VARIANT_HRH'])))
+
+			filter.AddVariant(platformVar)
+			platformNodes.append(filter)
+
+		# check that each bld.inf exists and add a Specification node for it
+		# to the nodes of the export and build platforms that it supports.
+		for bif in aFileList:
+			if bif.isFile():
+				self.__Raptor.Info("Processing %s", str(bif))
+				try:
+					self.AddComponentNodes(bif, exportNodes, platformNodes)
+
+				except MetaDataError, e:
+					self.__Raptor.Error(e.Text, bldinf=str(bif))
+					if not self.__Raptor.keepGoing:
+						return []
+			else:
+				self.__Raptor.Error("build info file does not exist", bldinf=str(bif))
+				if not self.__Raptor.keepGoing:
+					return []
+
+		# now we have the top-level structure in place...
+		#
+		# <filter exports 1>
+		#		<spec bld.inf 1 />
+		#		<spec bld.inf 2 />
+		#		<spec bld.inf N /> </filter>
+		# <filter build 1>
+		#		<spec bld.inf 1 />
+		#		<spec bld.inf 2 />
+		#		<spec bld.inf N /> </filter>
+		# <filter build 2>
+		#		<spec bld.inf 1 />
+		#		<spec bld.inf 2 />
+		#		<spec bld.inf N /> </filter>
+		# <filter build 3>
+		#		<spec bld.inf 1 />
+		#		<spec bld.inf 2 />
+		#		<spec bld.inf N /> </filter>
+		#
+		# assuming that every bld.inf builds for every platform and all
+		# exports go to the same place. clearly, it is more likely that
+		# some filters have less than N child nodes. in bigger builds there
+		# will also be more than one export platform.
+
+		# we now need to process the EXPORTS for all the bld.inf nodes
+		# before we can do anything else (because raptor itself must do
+		# some exports before the MMP files that include them can be
+		# processed).
+		for i,p in enumerate(exportNodes):
+			exportPlatform = self.ExportPlatforms[i]
+			for s in p.GetChildSpecs():
+				try:
+					self.ProcessExports(s, exportPlatform)
+
+				except MetaDataError, e:
+					self.__Raptor.Error("%s",e.Text)
+					if not self.__Raptor.keepGoing:
+						return []
+
+		# this is a switch to return the function at this point if export
+		# only option is specified in the run
+		if (self.__Raptor.doExportOnly):
+			self.__Raptor.Info("Processing Exports only")
+			return[]
+
+		# after exports are done we can look to see if there are any
+		# new Interfaces which can be used for EXTENSIONS. Make sure
+		# that we only load each cache once as some export platforms
+		# may share a directory.
+		doneID = {}
+		for ep in self.ExportPlatforms:
+			flmDir = ep["FLM_EXPORT_DIR"]
+			cid = ep["CACHEID"]
+			if flmDir.isDir() and not cid in doneID:
+				self.__Raptor.cache.Load(flmDir, cid)
+			doneID[cid] = True
+
+		# finally we can process all the other parts of the bld.inf nodes.
+		# Keep a list of the projects we were asked to build so that we can
+		# tell at the end if there were any we didn't know about.
+		self.projectList = list(self.__Raptor.projects)
+		for i,p in enumerate(platformNodes):
+			buildPlatform = self.BuildPlatforms[i]
+			for s in p.GetChildSpecs():
+				try:
+					self.ProcessTEMs(s, buildPlatform)
+					self.ProcessMMPs(s, buildPlatform)
+
+				except MetaDataError, e:
+					self.__Raptor.Error(e.Text)
+					if not self.__Raptor.keepGoing:
+						return []
+
+		for badProj in self.projectList:
+			self.__Raptor.Warn("Can't find project '%s' in any build info file", badProj)
+
+		# everything is specified
+		return exportNodes + platformNodes
+
+	def ModuleName(self,aBldInfPath):
+		"""Calculate the name of the ROM/emulator batch files that run the tests"""
+
+		def LeftPortionOf(pth,sep):
+			""" Internal function to return portion of str that is to the left of sep. 
+			The partition is case-insentive."""
+			length = len((pth.lower().partition(sep.lower()))[0])
+			return pth[0:length]
+			
+		modulePath = LeftPortionOf(LeftPortionOf(os.path.dirname(aBldInfPath), "group"), "ongoing")
+		moduleName = os.path.basename(modulePath.strip("/"))
+		
+		# Ensure that ModuleName does not return blank, if the above calculation determines
+		# that moduleName is blank
+		if moduleName == "" or moduleName.endswith(":"):
+			moduleName = "module"
+		return moduleName
+
+
+	def AddComponentNodes(self, buildFile, exportNodes, platformNodes):
+		"""Add Specification nodes for a bld.inf to the appropriate platforms."""
+		bldInfFile = BldInfFile(buildFile, self.__gnucpp, self.__Raptor)
+
+		specName = self.getSpecName(buildFile, fullPath=True)
+
+		if isinstance(buildFile, raptor_xml.SystemModelComponent):
+			# this component came from a system_definition.xml
+			layer = buildFile.GetContainerName("layer")
+			component = buildFile.GetContainerName("component")
+		else:
+			# this is a plain old bld.inf file from the command-line
+			layer = ""
+			component = ""
+
+		# exports are independent of build platform
+		for i,ep in enumerate(self.ExportPlatforms):
+			specNode = raptor_data.Specification(specName)
+
+			# keep the BldInfFile object for later
+			specNode.bldinf = bldInfFile
+
+			# add some basic data in a component-wide variant
+			var = raptor_data.Variant()
+			var.AddOperation(raptor_data.Set("COMPONENT_META", str(buildFile)))
+			var.AddOperation(raptor_data.Set("COMPONENT_NAME", component))
+			var.AddOperation(raptor_data.Set("COMPONENT_LAYER", layer))
+			specNode.AddVariant(var)
+
+			# add this bld.inf Specification to the export platform
+			exportNodes[i].AddChild(specNode)
+
+		# get the relevant build platforms
+		listedPlatforms = bldInfFile.getBuildPlatforms(self.defaultPlatform)
+		platforms = getBuildableBldInfBuildPlatforms(listedPlatforms,
+													self.__defaultplatforms,
+													self.__basedefaultplatforms,
+													self.__baseuserdefaultplatforms)
+
+
+
+		outputDir = BldInfFile.outputPathFragment(buildFile)
+
+		# Calculate "module name"
+		modulename = self.ModuleName(str(buildFile))
+
+		for i,bp in enumerate(self.BuildPlatforms):
+			if bp['PLATFORM'] in platforms:
+				specNode = raptor_data.Specification(specName)
+
+				# keep the BldInfFile object for later
+				specNode.bldinf = bldInfFile
+
+				# add some basic data in a component-wide variant
+				var = raptor_data.Variant()
+				var.AddOperation(raptor_data.Set("COMPONENT_META",str(buildFile)))
+				var.AddOperation(raptor_data.Set("COMPONENT_NAME", component))
+				var.AddOperation(raptor_data.Set("COMPONENT_LAYER", layer))
+				var.AddOperation(raptor_data.Set("MODULE", modulename))
+				var.AddOperation(raptor_data.Append("OUTPUTPATHOFFSET", outputDir, '/'))
+				var.AddOperation(raptor_data.Append("OUTPUTPATH", outputDir, '/'))
+				var.AddOperation(raptor_data.Append("BLDINF_OUTPUTPATH",outputDir, '/'))
+
+				var.AddOperation(raptor_data.Set("TEST_OPTION", specNode.bldinf.getRomTestType(bp)))
+				specNode.AddVariant(var)
+
+				# add this bld.inf Specification to the build platform
+				platformNodes[i].AddChild(specNode)
+
+	def ProcessExports(self, componentNode, exportPlatform):
+		"""Do the exports for a given platform and skeleton bld.inf node.
+
+		This will actually perform exports as certain types of files (.mmh)
+		are required to be in place before the rest of the bld.inf node
+		(and parts of other bld.inf nodes) can be processed.
+
+		[some MMP files #include exported .mmh files]
+		"""
+		if exportPlatform["TESTCODE"]:
+			exports = componentNode.bldinf.getTestExports(exportPlatform)
+		else:
+			exports = componentNode.bldinf.getExports(exportPlatform)
+
+		self.__Raptor.Debug("%i exports for %s",
+							len(exports), str(componentNode.bldinf.filename))
+		if exports:
+
+			# each export is either a 'copy' or 'unzip'
+			# maybe we should trap multiple exports to the same location here?
+			epocroot = str(exportPlatform["EPOCROOT"])
+			bldinf_filename = str(componentNode.bldinf.filename)
+			exportwhatlog="<whatlog bldinf='%s' mmp='' config=''>\n" % bldinf_filename
+			for export in exports:
+				expSrc = export.getSource()
+				expDstList = export.getDestination() # Might not be a list in all circumstances
+
+				# make it a list if it isn't
+				if not isinstance(expDstList, list):
+					expDstList = [expDstList]
+
+				fromFile = generic_path.Path(expSrc.replace("$(EPOCROOT)", epocroot))
+
+				# For each destination in the destination list, add an export target, perform it if required.
+				# This ensures that make knows the dependency situation but that the export is made
+				# before any other part of the metadata requires it.  It also helps with the build
+				# from clean situation where we can't use order only prerequisites.
+				for expDst in expDstList:
+					toFile = generic_path.Path(expDst.replace("$(EPOCROOT)", epocroot))
+					try:
+						if export.getAction() == "copy":
+							# export the file
+							exportwhatlog += self.CopyExport(fromFile, toFile, bldinf_filename)
+						else:
+							# unzip the zip
+							exportwhatlog += ("<archive zipfile='" + str(fromFile) + "'>\n")
+							members = self.UnzipExport(fromFile, toFile,
+									str(exportPlatform['SBS_BUILD_DIR']),
+									bldinf_filename)
+							if members != None:
+								exportwhatlog += members
+							exportwhatlog += "</archive>\n"
+					except MetaDataError, e:
+						if self.__Raptor.keepGoing:
+							self.__Raptor.Error("%s",e.Text, bldinf=bldinf_filename)
+						else:
+							raise e
+			exportwhatlog+="</whatlog>\n"
+			self.__Raptor.PrintXML("%s",exportwhatlog)
+
+	def CopyExport(self, _source, _destination, bldInfFile):
+		"""Copy the source file to the destination file (create a directory
+		   to copy into if it does not exist). Don't copy if the destination
+		   file exists and has an equal or newer modification time."""
+		source = generic_path.Path(str(_source).replace('%20',' '))
+		destination = generic_path.Path(str(_destination).replace('%20',' '))
+		dest_str = str(destination)
+		source_str = str(source)
+
+		exportwhatlog="<export destination='" + dest_str + "' source='" + \
+				source_str + "'/>\n"
+
+		try:
+
+
+			destDir = destination.Dir()
+			if not destDir.isDir():
+				os.makedirs(str(destDir))
+				shutil.copyfile(source_str, dest_str)
+				return exportwhatlog
+
+			sourceMTime = 0
+			destMTime = 0
+			try:
+				sourceMTime = os.stat(source_str)[stat.ST_MTIME]
+				destMTime = os.stat(dest_str)[stat.ST_MTIME]
+			except OSError, e:
+				if sourceMTime == 0:
+					message = "Source of export does not exist:  " + str(source)
+					if not self.__Raptor.keepGoing:
+						raise MetaDataError(message)
+					else:
+						self.__Raptor.Error(message, bldinf=bldInfFile)
+
+			if destMTime == 0 or destMTime < sourceMTime:
+				if os.path.exists(dest_str):
+					os.chmod(dest_str,stat.S_IREAD | stat.S_IWRITE)
+				shutil.copyfile(source_str, dest_str)
+				self.__Raptor.Info("Copied %s to %s", source_str, dest_str)
+			else:
+				self.__Raptor.Info("Up-to-date: %s", dest_str)
+
+
+		except Exception,e:
+			message = "Could not export " + source_str + " to " + dest_str + " : " + str(e)
+			if not self.__Raptor.keepGoing:
+				raise MetaDataError(message)
+			else:
+				self.__Raptor.Error(message, bldinf=bldInfFile)
+
+		return exportwhatlog
+
+
+	def UnzipExport(self, _source, _destination, _sbs_build_dir, bldinf_filename):
+		"""Unzip the source zipfile into the destination directory
+		   but only if the markerfile does not already exist there
+		   or it does exist but is older than the zipfile.
+		   the markerfile is comprised of the name of the zipfile
+		   with the ".zip" removed and ".unzipped" added.
+		"""
+
+		# Insert spaces into file if they are there
+		source = str(_source).replace('%20',' ')
+		destination = str(_destination).replace('%20',' ')
+		sanitisedSource = raptor_utilities.sanitise(source)
+		sanitisedDestination = raptor_utilities.sanitise(destination)
+
+		destination = str(_destination).replace('%20',' ')
+		exportwhatlog = ""
+
+
+		try:
+			if not _destination.isDir():
+				os.makedirs(destination)
+
+			# Form the directory to contain the unzipped marker files, and make the directory if require.
+			markerfiledir = generic_path.Path(_sbs_build_dir)
+			if not markerfiledir.isDir():
+				os.makedirs(str(markerfiledir))
+
+			# Form the marker file name and convert to Python string
+			markerfilename = str(generic_path.Join(markerfiledir, sanitisedSource + sanitisedDestination + ".unzipped"))
+
+			# Don't unzip if the marker file is already there or more uptodate
+			sourceMTime = 0
+			destMTime = 0
+			try:
+				sourceMTime = os.stat(source)[stat.ST_MTIME]
+				destMTime = os.stat(markerfilename)[stat.ST_MTIME]
+			except OSError, e:
+				if sourceMTime == 0:
+					raise MetaDataError("Source zip for export does not exist:  " + source)
+			if destMTime != 0 and destMTime >= sourceMTime:
+				# This file has already been unzipped. Print members then return
+				exportzip = zipfile.ZipFile(source, 'r')
+				files = exportzip.namelist()
+				files.sort()
+
+				for file in files:
+					if not file.endswith('/'):
+						expfilename = str(generic_path.Join(destination, file))
+						exportwhatlog += "<member>" + expfilename + "</member>\n"
+
+				self.__Raptor.PrintXML("<clean bldinf='" + bldinf_filename + "' mmp='' config=''>\n")
+				self.__Raptor.PrintXML("<zipmarker>" + markerfilename + "</zipmarker>\n")
+				self.__Raptor.PrintXML("</clean>\n")
+
+				return exportwhatlog
+
+			exportzip = zipfile.ZipFile(source, 'r')
+			files = exportzip.namelist()
+			files.sort()
+			filecount = 0
+			for file in files:
+				expfilename = str(generic_path.Join(destination, file))
+				if file.endswith('/'):
+					try:
+						os.makedirs(expfilename)
+					except OSError, e:
+						pass # errors to do with "already exists" are not interesting.
+				else:
+					try:
+						os.makedirs(os.path.split(expfilename)[0])
+					except OSError, e:
+						pass # errors to do with "already exists" are not interesting.
+
+					try:
+						if os.path.exists(expfilename):
+							os.chmod(expfilename,stat.S_IREAD | stat.S_IWRITE)
+						expfile = open(expfilename, 'wb')
+						expfile.write(exportzip.read(file))
+						expfile.close()
+						# Each file keeps its modified time the same as what it was before unzipping
+						accesstime = time.time()
+						datetime = exportzip.getinfo(file).date_time
+						timeTuple=(int(datetime[0]), int(datetime[1]), int(datetime[2]), int(datetime[3]), \
+									int(datetime[4]), int(datetime[5]), int(0), int(0), int(0))
+						modifiedtime = time.mktime(timeTuple)
+						os.utime(expfilename,(accesstime, modifiedtime))
+
+						filecount += 1
+						exportwhatlog+="<member>" + expfilename + "</member>\n"
+					except IOError, e:
+						message = "Could not unzip %s to %s: file %s: %s" %(source, destination, expfilename, str(e))
+						if not self.__Raptor.keepGoing:
+							raise MetaDataError(message)
+						else:
+							self.__Raptor.Error(message, bldinf=bldinf_filename)
+
+			markerfile = open(markerfilename, 'wb+')
+			markerfile.close()
+			self.__Raptor.PrintXML("<clean bldinf='" + bldinf_filename + "' mmp='' config=''>\n")
+			self.__Raptor.PrintXML("<zipmarker>" + markerfilename +	"</zipmarker>\n")
+			self.__Raptor.PrintXML("</clean>\n")
+
+		except IOError:
+			self.__Raptor.Warn("Problem while unzipping export %s to %s: %s",source,destination,str(e))
+
+		self.__Raptor.Info("Unzipped %d files from %s to %s", filecount, source, destination)
+		return exportwhatlog
+
+	def ProcessTEMs(self, componentNode, buildPlatform):
+		"""Add Template Extension Makefile nodes for a given platform
+		   to a skeleton bld.inf node.
+
+		This happens after exports have been handled.
+		"""
+		if buildPlatform["ISFEATUREVARIANT"]:
+			return	# feature variation does not run extensions at all
+		
+		if buildPlatform["TESTCODE"]:
+			extensions = componentNode.bldinf.getTestExtensions(buildPlatform)
+		else:
+			extensions = componentNode.bldinf.getExtensions(buildPlatform)
+
+		self.__Raptor.Debug("%i template extension makefiles for %s",
+							len(extensions), str(componentNode.bldinf.filename))
+
+		for i,extension in enumerate(extensions):
+			if self.__Raptor.projects:
+				if not extension.nametag in self.__Raptor.projects:
+					self.__Raptor.Debug("Skipping %s", extension.getMakefile())
+					continue
+				elif extension.nametag in self.projectList:
+					self.projectList.remove(extension.nametag)
+
+			extensionSpec = raptor_data.Specification("extension" + str(i))
+
+			interface = buildPlatform["extension"]
+			customInterface = False
+
+			# is there an FLM replacement for this extension?
+			if extension.interface:
+				try:
+					interface = self.__Raptor.cache.FindNamedInterface(extension.interface, buildPlatform["CACHEID"])
+					customInterface = True
+				except KeyError:
+					# no, there isn't an FLM
+					pass
+
+			extensionSpec.SetInterface(interface)
+
+			var = raptor_data.Variant()
+			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
+			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
+			var.AddOperation(raptor_data.Set("PLATFORM_PATH", buildPlatform["PLATFORM"].lower()))
+			var.AddOperation(raptor_data.Set("CFG", "$(VARIANTTYPE)"))
+			var.AddOperation(raptor_data.Set("CFG_PATH", "$(VARIANTTYPE)"))
+			var.AddOperation(raptor_data.Set("GENERATEDCPP", "$(OUTPUTPATH)"))
+			var.AddOperation(raptor_data.Set("TEMPLATE_EXTENSION_MAKEFILE", extension.getMakefile()))
+			var.AddOperation(raptor_data.Set("TEMCOUNT", str(i)))
+
+			# Extension inputs are added to the build spec.
+			# '$'s are escaped so that they are not expanded by Raptor or
+			# by Make in the call to the FLM
+			# The Extension makefiles are supposed to expand them themselves
+			# Path separators need not be parameterised anymore
+			# as bash is the standard shell
+			standardVariables = extension.getStandardVariables()
+			for standardVariable in standardVariables.keys():
+				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
+				value = standardVariables[standardVariable].replace('$(', '$$$$(')
+				value = value.replace('$/', '/').replace('$;', ':')
+				var.AddOperation(raptor_data.Set(standardVariable, value))
+
+			# . . . as with the standard variables but the names and number
+			# of options are not known in advance so we add them to
+			# a "structure" that is self-describing
+			var.AddOperation(raptor_data.Set("O._MEMBERS", ""))
+			options = extension.getOptions()
+			for option in options:
+				self.__Raptor.Debug("Set %s=%s", option, options[option])
+				value = options[option].replace('$(EPOCROOT)', '$(EPOCROOT)/')
+				value = value.replace('$(', '$$$$(')
+				value = value.replace('$/', '/').replace('$;', ':')
+				value = value.replace('$/', '/').replace('$;', ':')
+
+				if customInterface:
+					var.AddOperation(raptor_data.Set(option, value))
+				else:
+					var.AddOperation(raptor_data.Append("O._MEMBERS", option))
+					var.AddOperation(raptor_data.Set("O." + option, value))
+
+			extensionSpec.AddVariant(var)
+			componentNode.AddChild(extensionSpec)
+
+
+	def ProcessMMPs(self, componentNode, buildPlatform):
+		"""Add project nodes for a given platform to a skeleton bld.inf node.
+
+		This happens after exports have been handled.
+		"""
+		gnuList = []
+		makefileList = []
+
+		if buildPlatform["TESTCODE"]:
+			MMPList = componentNode.bldinf.getTestMMPList(buildPlatform)
+		else:
+			MMPList = componentNode.bldinf.getMMPList(buildPlatform)
+
+		bldInfFile = componentNode.bldinf.filename
+
+		for mmpFileEntry in MMPList['mmpFileList']:
+			projectname = mmpFileEntry.filename.File().lower()
+
+			if self.__Raptor.projects:
+				if not projectname in self.__Raptor.projects:
+					self.__Raptor.Debug("Skipping %s", str(mmpFileEntry.filename))
+					continue
+				elif projectname in self.projectList:
+					self.projectList.remove(projectname)
+
+			foundmmpfile = (mmpFileEntry.filename).FindCaseless()
+
+			if foundmmpfile == None:
+				self.__Raptor.Error("Can't find mmp file '%s'", str(mmpFileEntry.filename), bldinf=str(bldInfFile))
+				continue
+
+			mmpFile = MMPFile(foundmmpfile,
+								   self.__gnucpp,
+								   bldinf = componentNode.bldinf,
+								   log = self.__Raptor)
+
+			mmpFilename = mmpFile.filename
+
+			self.__Raptor.Info("Processing %s for platform %s",
+							   str(mmpFilename),
+							   " + ".join([x.name for x in buildPlatform["configs"]]))
+
+			# Run the Parser
+			# The backend supplies the actions
+			content = mmpFile.getContent(buildPlatform)
+			backend = MMPRaptorBackend(self.__Raptor, str(mmpFilename), str(bldInfFile))
+			parser  = MMPParser(backend)
+			parseresult = None
+			try:
+				parseresult = parser.mmp.parseString(content)
+			except ParseException,e:
+				self.__Raptor.Debug(e) # basically ignore parse exceptions
+
+			if (not parseresult) or (parseresult[0] != 'MMP'):
+				self.__Raptor.Error("The MMP Parser didn't recognise the mmp file '%s'",
+					                str(mmpFileEntry.filename), 
+					                bldinf=str(bldInfFile))
+				self.__Raptor.Debug(content)
+				self.__Raptor.Debug("The parse result was %s", parseresult)
+			else:
+				backend.finalise(buildPlatform)
+
+			# feature variation only processes FEATUREVARIANT binaries
+			if buildPlatform["ISFEATUREVARIANT"] and not backend.featureVariant:
+				continue
+			
+			# now build the specification tree
+			mmpSpec = raptor_data.Specification(self.getSpecName(mmpFilename))
+			var = backend.BuildVariant
+
+			var.AddOperation(raptor_data.Set("PROJECT_META", str(mmpFilename)))
+
+			# If it is a TESTMMPFILE section, the FLM needs to know about it
+			if buildPlatform["TESTCODE"] and (mmpFileEntry.testoption in
+					["manual", "auto"]):
+
+				var.AddOperation(raptor_data.Set("TESTPATH",
+						mmpFileEntry.testoption.lower() + ".bat"))
+
+			# The output path for objects, stringtables and bitmaps specified by
+			# this MMP.  Adding in the requested target extension prevents build
+			# "fouling" in cases where there are several mmp targets which only differ
+			# by the requested extension. e.g. elocl.01 and elocl.18
+			var.AddOperation(raptor_data.Append("OUTPUTPATH","$(UNIQUETARGETPATH)",'/'))
+
+			# If the bld.inf entry for this MMP had the BUILD_AS_ARM option then
+			# tell the FLM.
+			if mmpFileEntry.armoption:
+				var.AddOperation(raptor_data.Set("ALWAYS_BUILD_AS_ARM","1"))
+
+			# what interface builds this node?
+			try:
+				interfaceName = buildPlatform[backend.getTargetType()]
+				mmpSpec.SetInterface(interfaceName)
+			except KeyError:
+				self.__Raptor.Error("Unsupported target type '%s' in %s",
+								    backend.getTargetType(),
+								    str(mmpFileEntry.filename),
+								    bldinf=str(bldInfFile))
+				continue
+
+			# Although not part of the MMP, some MMP-based build specs additionally require knowledge of their
+			# container bld.inf exported headers
+			for export in componentNode.bldinf.getExports(buildPlatform):
+				destination = export.getDestination()
+				if isinstance(destination, list):
+					exportfile = str(destination[0])
+				else:
+					exportfile = str(destination)
+
+				if re.search('\.h',exportfile,re.IGNORECASE):
+					var.AddOperation(raptor_data.Append("EXPORTHEADERS", str(exportfile)))
+
+			# now we have something worth adding to the component
+			mmpSpec.AddVariant(var)
+			componentNode.AddChild(mmpSpec)
+
+			# resources, stringtables and bitmaps are sub-nodes of this project
+			# (do not add these for feature variant builds)
+			
+			if not buildPlatform["ISFEATUREVARIANT"]:
+				# Buildspec for Resource files
+				for i,rvar in enumerate(backend.ResourceVariants):
+					resourceSpec = raptor_data.Specification('resource' + str(i))
+					resourceSpec.SetInterface(buildPlatform['resource'])
+					resourceSpec.AddVariant(rvar)
+					mmpSpec.AddChild(resourceSpec)
+
+				# Buildspec for String Tables
+				for i,stvar in enumerate(backend.StringTableVariants):
+					stringTableSpec = raptor_data.Specification('stringtable' + str(i))
+					stringTableSpec.SetInterface(buildPlatform['stringtable'])
+					stringTableSpec.AddVariant(stvar)
+					mmpSpec.AddChild(stringTableSpec)
+
+				# Buildspec for Bitmaps
+				for i,bvar in enumerate(backend.BitmapVariants):
+					bitmapSpec = raptor_data.Specification('bitmap' + str(i))
+					bitmapSpec.SetInterface(buildPlatform['bitmap'])
+					bitmapSpec.AddVariant(bvar)
+					mmpSpec.AddChild(bitmapSpec)
+
+		# feature variation does not run extensions at all
+		# so return without considering .*MAKEFILE sections
+		if buildPlatform["ISFEATUREVARIANT"]:
+			return
+			
+		# Build spec for gnumakefile
+		for g in MMPList['gnuList']:
+			projectname = g.getMakefileName().lower()
+
+			if self.__Raptor.projects:
+				if not projectname in self.__Raptor.projects:
+					self.__Raptor.Debug("Skipping %s", str(g.getMakefileName()))
+					continue
+				elif projectname in self.projectList:
+					self.projectList.remove(projectname)
+
+			self.__Raptor.Debug("%i gnumakefile extension makefiles for %s",
+						len(gnuList), str(componentNode.bldinf.filename))
+			var = raptor_data.Variant()
+			gnuSpec = raptor_data.Specification("gnumakefile " + str(g.getMakefileName()))
+			interface = buildPlatform["ext_makefile"]
+			gnuSpec.SetInterface(interface)
+			gnumakefilePath = raptor_utilities.resolveSymbianPath(str(bldInfFile), g.getMakefileName())
+			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
+			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
+			var.AddOperation(raptor_data.Set("EXTMAKEFILENAME", g.getMakefileName()))
+			var.AddOperation(raptor_data.Set("DIRECTORY",g.getMakeDirectory()))
+			var.AddOperation(raptor_data.Set("CFG","$(VARIANTTYPE)"))
+			standardVariables = g.getStandardVariables()
+			for standardVariable in standardVariables.keys():
+				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
+				value = standardVariables[standardVariable].replace('$(', '$$$$(')
+				value = value.replace('$/', '/').replace('$;', ':')
+				var.AddOperation(raptor_data.Set(standardVariable, value))
+			gnuSpec.AddVariant(var)
+			componentNode.AddChild(gnuSpec)
+
+		# Build spec for makefile
+		for m in MMPList['makefileList']:
+			projectname = m.getMakefileName().lower()
+
+			if self.__Raptor.projects:
+				if not projectname in self.__Raptor.projects:
+					self.__Raptor.Debug("Skipping %s", str(m.getMakefileName()))
+					continue
+				elif projectname in self.projectList:
+					projectList.remove(projectname)
+
+			self.__Raptor.Debug("%i makefile extension makefiles for %s",
+						len(makefileList), str(componentNode.bldinf.filename))
+			var = raptor_data.Variant()
+			gnuSpec = raptor_data.Specification("makefile " + str(m.getMakefileName()))
+			interface = buildPlatform["ext_makefile"]
+			gnuSpec.SetInterface(interface)
+			gnumakefilePath = raptor_utilities.resolveSymbianPath(str(bldInfFile), m.getMakefileName())
+			var.AddOperation(raptor_data.Set("EPOCBLD", "$(OUTPUTPATH)"))
+			var.AddOperation(raptor_data.Set("PLATFORM", buildPlatform["PLATFORM"]))
+			var.AddOperation(raptor_data.Set("EXTMAKEFILENAME", m.getMakefileName()))
+			var.AddOperation(raptor_data.Set("DIRECTORY",m.getMakeDirectory()))
+			var.AddOperation(raptor_data.Set("CFG","$(VARIANTTYPE)"))
+			var.AddOperation(raptor_data.Set("USENMAKE","1"))
+			standardVariables = m.getStandardVariables()
+			for standardVariable in standardVariables.keys():
+				self.__Raptor.Debug("Set %s=%s", standardVariable, standardVariables[standardVariable])
+				value = standardVariables[standardVariable].replace('$(', '$$$$(')
+				value = value.replace('$/', '/').replace('$;', ':')
+				var.AddOperation(raptor_data.Set(standardVariable, value))
+			gnuSpec.AddVariant(var)
+			componentNode.AddChild(gnuSpec)
+
+	def getSpecName(self, aFileRoot, fullPath=False):
+		"""Returns a build spec name: this is the file root (full path
+		or simple file name) made safe for use as a file name."""
+
+		if fullPath:
+			specName = str(aFileRoot).replace("/","_")
+			specName = specName.replace(":","")
+		else:
+			specName = aFileRoot.File()
+
+		return specName.lower()
+
+	def ApplyOSVariant(self, aBuildUnit, aEpocroot):
+		# Form path to kif.xml and path to buildinfo.txt
+		kifXmlPath = generic_path.Join(aEpocroot, "epoc32", "data","kif.xml")
+		buildInfoTxtPath = generic_path.Join(aEpocroot, "epoc32", "data","buildinfo.txt")
+
+		# Start with osVersion being None. This variable is a string and does two things:
+		# 1) is a representation of the OS version
+		# 2) is potentially the name of a variant
+		osVersion = None
+		if kifXmlPath.isFile(): # kif.xml exists so try to read it
+			osVersion = getOsVerFromKifXml(str(kifXmlPath))
+			if osVersion != None:
+				self.__Raptor.Info("OS version \"%s\" determined from file \"%s\"" % (osVersion, kifXmlPath))
+
+		# OS version was not determined from the kif.xml, e.g. because it doesn't exist
+		# or there was a problem parsing it. So, we fall over to using the buildinfo.txt
+		if osVersion == None and buildInfoTxtPath.isFile():
+			osVersion = getOsVerFromBuildInfoTxt(str(buildInfoTxtPath))
+			if osVersion != None:
+				self.__Raptor.Info("OS version \"%s\" determined from file \"%s\"" % (osVersion, buildInfoTxtPath))
+
+		# If we determined a non-empty string for the OS Version, attempt to apply it
+		if osVersion and osVersion in self.__Raptor.cache.variants:
+			self.__Raptor.Info("applying the OS variant to the configuration \"%s\"." % aBuildUnit.name)
+			aBuildUnit.variants.append(self.__Raptor.cache.variants[osVersion])
+		else:
+			self.__Raptor.Info("no OS variant for the configuration \"%s\"." % aBuildUnit.name)
+
--- a/sbsv2/raptor/python/raptor_start.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_start.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,42 +1,42 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# lightweight script to start raptor
-#
-
-import raptor
-import sys
-import os
-
-profile_basename = None
-if os.environ.has_key('SBS_PROFILE_BASENAME'):
-	profile_basename = os.environ['SBS_PROFILE_BASENAME']
-	import cProfile
-
-#
-# Main takes the command-line (ignoring argv[0] which is the name of
-# this script) and returns the exit code.
-#
-try:	
-	if profile_basename is not None:
-		sys.exit(cProfile.run('raptor.Main(sys.argv[1:])',profile_basename))
-	else:
-		sys.exit(raptor.Main(sys.argv[1:]))
-except KeyboardInterrupt:
-	sys.stderr.write("ERROR: sbs: Terminated by control-c or break\n")
-	sys.exit(255)
-except ValueError, exc:
-	sys.stderr.write("ERROR: sbs: %s" % str(exc))
-	sys.exit(255)
-
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# lightweight script to start raptor
+#
+
+import raptor
+import sys
+import os
+
+profile_basename = None
+if os.environ.has_key('SBS_PROFILE_BASENAME'):
+	profile_basename = os.environ['SBS_PROFILE_BASENAME']
+	import cProfile
+
+#
+# Main takes the command-line (ignoring argv[0] which is the name of
+# this script) and returns the exit code.
+#
+try:	
+	if profile_basename is not None:
+		sys.exit(cProfile.run('raptor.Main(sys.argv[1:])',profile_basename))
+	else:
+		sys.exit(raptor.Main(sys.argv[1:]))
+except KeyboardInterrupt:
+	sys.stderr.write("ERROR: sbs: Terminated by control-c or break\n")
+	sys.exit(255)
+except ValueError, exc:
+	sys.stderr.write("ERROR: sbs: %s" % str(exc))
+	sys.exit(255)
+
--- a/sbsv2/raptor/python/raptor_utilities.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_utilities.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,191 +1,191 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_utilities module
-# Useful wrapper functions and classes used in Raptor processing
-#
-
-import generic_path
-import os.path
-import re
-import sys
-
-dosSlashRegEx = re.compile(r'\\')
-unixSlashRegEx = re.compile(r'/')
-dosDriveRegEx = re.compile("^([A-Za-z]{1}):")
-
-def getOSPlatform():
-	return sys.platform.lower()
-
-def getOSFileSystem():
-	if getOSPlatform().startswith("win"):
-		return "cygwin"
-	else:
-		return "unix"
-
-def convertToUnixSlash(aReference):
-	return dosSlashRegEx.sub(r'/', aReference)
-
-def convertToDOSSlash(aReference):
-	return unixSlashRegEx.sub(r'\\', aReference)
-
-def absPathFromPath(aPathRoot, aReference):
-	pathRoot = convertToUnixSlash(aPathRoot)
-	reference = convertToUnixSlash(aReference)
-	
-	if os.path.isabs(reference):
-		reference = reference.lstrip(r'/')
-	
-	joined = os.path.join(pathRoot, reference)
-	
-	return os.path.abspath(joined)
-   
-
-def absPathFromFile(aFileRoot, aReference):
-	pathRoot = os.path.dirname(aFileRoot)
-	return absPathFromPath(pathRoot, aReference)
-
-def sanitise(aPotentialFilename):
-	"Take a string and return a version suitable for use as a filename."
-	return re.sub("(\\\\|\/|:|;| )", "_", aPotentialFilename)
-
-def resolveSymbianPath(aFileRoot, aReference, aMainType="", aSubType="", aEPOCROOT="$(EPOCROOT)"):
-	""" Convert raw Symbian metadata path/file references into absolute makefile references, or list of references
-
-	<drive>-prefix	: maps to an emulated drive depending on the following cases:
-							(a) If the drive is C:, it maps to the *two* locations
-								$(EPOCROOT)/epoc32/data/<drive>/<path> and
-								$(EPOCROOT)/epoc32/winscw/<drive>/<path>
-							(b) If the drive is A:, B:, or D: to Z:, it maps to the *three* locations
-								$(EPOCROOT)/epoc32/data/<drive>/<path> and
-								$(EPOCROOT)/epoc32/release/winscw/udeb/<drive>/<path> and
-								$(EPOCROOT)/epoc32/release/winscw/urel/<drive>/<path>
-	Absolute 		: true absolute if:
-							(a) PRJ_*EXPORTS destination or DEFFILE location and
-							(b) not starting with an 'epoc32'
-						otherwise relative to $(EPOCROOT)
-	Relative 		: relative to $(EPOCROOT)/epoc32/include if:
-							(a) PRJ_EXPORTS destination and
-							(b) not a :zip statement,
-					  relative to $(EPOCROOT) if:
-							(a) PRJ_(TEST)EXPORTS destination and
-							(b) a :zip statement,
-						otherwise relative to aFileRoot
-	|-prefix 		: relative to aFileRoot
-	+-prefix 		: relative to $(EPOCROOT)/epoc32"""
-	
-	# Both reference and fileroot can have backslashes - so convert them.
-	reference = convertToUnixSlash(aReference)
-	fileroot = convertToUnixSlash(aFileRoot)
-	
-	# Remove Trailing backslashes so that the expansions doesnt mess up the shell
-	if reference.endswith('/') and len(reference) > 1:
-		reference = reference.rstrip('/')
-
-	emulatedDrive = dosDriveRegEx.match(reference)	
-	if emulatedDrive:
-		# Emulated drive C:/ Z:/ and the like
-		# C: drive 
-		if reference.lower().startswith("c"):
-			resolvedPath = []
-			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/data/'+emulatedDrive.group(1), reference))
-			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/winscw/'+emulatedDrive.group(1), reference))
-		else: # Other letters: A, B and D to Z
-			resolvedPath = []
-			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/data/'+emulatedDrive.group(1), reference))
-			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/release/winscw/udeb/'+emulatedDrive.group(1), reference))
-			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/release/winscw/urel/'+emulatedDrive.group(1), reference))
-	elif os.path.isabs(reference):
-		# Absolute
-		if re.search("(DEFFILE|PRJ_(TEST)?EXPORTS)", aMainType, re.I) and not re.search("^\/epoc32\/", reference, re.I):
-			# Ensures prepending of drive if on Windows
-			resolvedPath = os.path.abspath(reference)
-		else:
-			resolvedPath = aEPOCROOT + reference
-		
-	elif reference.startswith("+"):
-		# '+' prefix
-		reference = reference.lstrip(r'+')
-		resolvedPath = aEPOCROOT + '/epoc32'+reference
-	elif reference.startswith("|"):
-		# '|' prefix
-		reference = reference.lstrip(r'|')
-		resolvedPath = absPathFromFile(fileroot, reference)
-	else:
-		# Relative
-		if aMainType == "PRJ_EXPORTS" and aSubType != ":zip":
-			resolvedPath = aEPOCROOT + '/epoc32/include/'+reference
-		elif aSubType == ":zip":
-			resolvedPath = aEPOCROOT + '/' + reference
-		else:
-			resolvedPath = absPathFromFile(fileroot, aReference)
-	
-	if isinstance(resolvedPath, list):
-		# In this case, this is a list of export destinations, 
-		makefilePath = map(lambda x: str(generic_path.Path(x)), resolvedPath)
-	else:
-		makefilePath = str(generic_path.Path(resolvedPath))
-	
-	return makefilePath # Note this is either a list of strings, or a single string
-
-
-class ExternalTool(object):
-	""" Generic wrapper for an external tool
-	
-	Provides the basic means to wrap up a tool that is external to Raptor with a
-	consistent interface for both invocation and the capture of output."""
-	
-	def __init__(self, aTool):
-		self.__Tool = aTool
-		self.__Output = []
-
-	def call(self, aArgs):		
-		print "RUNNNING: %s %s" %(self.__Tool, aArgs)
-		(input, output) = os.popen2(self.__Tool + " " + aArgs)
-		self.__Output = output.read()
-		return output.close() 
-	
-	def getTool(self):
-		return self.__Tool
-
-	def getOutput(self):
-		return self.__Output
-		
-	def getOutputLines(self):
-		return self.__Output.split("\n")
-
-
-class NullLog(object):
-	""" If your class has these methods then it can act as a log """
-	def Info(self, format, *extras):
-		"Send an information message to the configured channel"
-		return
-
-	def ClockInfo(self):
-		"Print a timestamp in seconds"
-		return
-
-	def Debug(self, format, *extras):
-		"Send a debugging message to the configured channel"
-		return
-
-	def Warn(self, format, *extras):
-		"Send a warning message to the configured channel"
-		return
-
-	def Error(self, format, *extras):
-		"Send an error message to the configured channel"
-		return
-
-nulllog = NullLog()
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_utilities module
+# Useful wrapper functions and classes used in Raptor processing
+#
+
+import generic_path
+import os.path
+import re
+import sys
+
+dosSlashRegEx = re.compile(r'\\')
+unixSlashRegEx = re.compile(r'/')
+dosDriveRegEx = re.compile("^([A-Za-z]{1}):")
+
+def getOSPlatform():
+	return sys.platform.lower()
+
+def getOSFileSystem():
+	if getOSPlatform().startswith("win"):
+		return "cygwin"
+	else:
+		return "unix"
+
+def convertToUnixSlash(aReference):
+	return dosSlashRegEx.sub(r'/', aReference)
+
+def convertToDOSSlash(aReference):
+	return unixSlashRegEx.sub(r'\\', aReference)
+
+def absPathFromPath(aPathRoot, aReference):
+	pathRoot = convertToUnixSlash(aPathRoot)
+	reference = convertToUnixSlash(aReference)
+	
+	if os.path.isabs(reference):
+		reference = reference.lstrip(r'/')
+	
+	joined = os.path.join(pathRoot, reference)
+	
+	return os.path.abspath(joined)
+   
+
+def absPathFromFile(aFileRoot, aReference):
+	pathRoot = os.path.dirname(aFileRoot)
+	return absPathFromPath(pathRoot, aReference)
+
+def sanitise(aPotentialFilename):
+	"Take a string and return a version suitable for use as a filename."
+	return re.sub("(\\\\|\/|:|;| )", "_", aPotentialFilename)
+
+def resolveSymbianPath(aFileRoot, aReference, aMainType="", aSubType="", aEPOCROOT="$(EPOCROOT)"):
+	""" Convert raw Symbian metadata path/file references into absolute makefile references, or list of references
+
+	<drive>-prefix	: maps to an emulated drive depending on the following cases:
+							(a) If the drive is C:, it maps to the *two* locations
+								$(EPOCROOT)/epoc32/data/<drive>/<path> and
+								$(EPOCROOT)/epoc32/winscw/<drive>/<path>
+							(b) If the drive is A:, B:, or D: to Z:, it maps to the *three* locations
+								$(EPOCROOT)/epoc32/data/<drive>/<path> and
+								$(EPOCROOT)/epoc32/release/winscw/udeb/<drive>/<path> and
+								$(EPOCROOT)/epoc32/release/winscw/urel/<drive>/<path>
+	Absolute 		: true absolute if:
+							(a) PRJ_*EXPORTS destination or DEFFILE location and
+							(b) not starting with an 'epoc32'
+						otherwise relative to $(EPOCROOT)
+	Relative 		: relative to $(EPOCROOT)/epoc32/include if:
+							(a) PRJ_EXPORTS destination and
+							(b) not a :zip statement,
+					  relative to $(EPOCROOT) if:
+							(a) PRJ_(TEST)EXPORTS destination and
+							(b) a :zip statement,
+						otherwise relative to aFileRoot
+	|-prefix 		: relative to aFileRoot
+	+-prefix 		: relative to $(EPOCROOT)/epoc32"""
+	
+	# Both reference and fileroot can have backslashes - so convert them.
+	reference = convertToUnixSlash(aReference)
+	fileroot = convertToUnixSlash(aFileRoot)
+	
+	# Remove Trailing backslashes so that the expansions doesnt mess up the shell
+	if reference.endswith('/') and len(reference) > 1:
+		reference = reference.rstrip('/')
+
+	emulatedDrive = dosDriveRegEx.match(reference)	
+	if emulatedDrive:
+		# Emulated drive C:/ Z:/ and the like
+		# C: drive 
+		if reference.lower().startswith("c"):
+			resolvedPath = []
+			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/data/'+emulatedDrive.group(1), reference))
+			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/winscw/'+emulatedDrive.group(1), reference))
+		else: # Other letters: A, B and D to Z
+			resolvedPath = []
+			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/data/'+emulatedDrive.group(1), reference))
+			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/release/winscw/udeb/'+emulatedDrive.group(1), reference))
+			resolvedPath.append(dosDriveRegEx.sub(aEPOCROOT+'/epoc32/release/winscw/urel/'+emulatedDrive.group(1), reference))
+	elif os.path.isabs(reference):
+		# Absolute
+		if re.search("(DEFFILE|PRJ_(TEST)?EXPORTS)", aMainType, re.I) and not re.search("^\/epoc32\/", reference, re.I):
+			# Ensures prepending of drive if on Windows
+			resolvedPath = os.path.abspath(reference)
+		else:
+			resolvedPath = aEPOCROOT + reference
+		
+	elif reference.startswith("+"):
+		# '+' prefix
+		reference = reference.lstrip(r'+')
+		resolvedPath = aEPOCROOT + '/epoc32'+reference
+	elif reference.startswith("|"):
+		# '|' prefix
+		reference = reference.lstrip(r'|')
+		resolvedPath = absPathFromFile(fileroot, reference)
+	else:
+		# Relative
+		if aMainType == "PRJ_EXPORTS" and aSubType != ":zip":
+			resolvedPath = aEPOCROOT + '/epoc32/include/'+reference
+		elif aSubType == ":zip":
+			resolvedPath = aEPOCROOT + '/' + reference
+		else:
+			resolvedPath = absPathFromFile(fileroot, aReference)
+	
+	if isinstance(resolvedPath, list):
+		# In this case, this is a list of export destinations, 
+		makefilePath = map(lambda x: str(generic_path.Path(x)), resolvedPath)
+	else:
+		makefilePath = str(generic_path.Path(resolvedPath))
+	
+	return makefilePath # Note this is either a list of strings, or a single string
+
+
+class ExternalTool(object):
+	""" Generic wrapper for an external tool
+	
+	Provides the basic means to wrap up a tool that is external to Raptor with a
+	consistent interface for both invocation and the capture of output."""
+	
+	def __init__(self, aTool):
+		self.__Tool = aTool
+		self.__Output = []
+
+	def call(self, aArgs):		
+		print "RUNNNING: %s %s" %(self.__Tool, aArgs)
+		(input, output) = os.popen2(self.__Tool + " " + aArgs)
+		self.__Output = output.read()
+		return output.close() 
+	
+	def getTool(self):
+		return self.__Tool
+
+	def getOutput(self):
+		return self.__Output
+		
+	def getOutputLines(self):
+		return self.__Output.split("\n")
+
+
+class NullLog(object):
+	""" If your class has these methods then it can act as a log """
+	def Info(self, format, *extras):
+		"Send an information message to the configured channel"
+		return
+
+	def ClockInfo(self):
+		"Print a timestamp in seconds"
+		return
+
+	def Debug(self, format, *extras):
+		"Send a debugging message to the configured channel"
+		return
+
+	def Warn(self, format, *extras):
+		"Send a warning message to the configured channel"
+		return
+
+	def Error(self, format, *extras):
+		"Send an error message to the configured channel"
+		return
+
+nulllog = NullLog()
--- a/sbsv2/raptor/python/raptor_version.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_version.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,20 +1,20 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor version information module
-#
-
-def Version():
-	"""Raptor version string"""
-	return "2.10.1 [2009-10-27 sf prerelease]"
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor version information module
+#
+
+def Version():
+	"""Raptor version string"""
+	return "2.10.2 [2009-11-12 sf release]"
--- a/sbsv2/raptor/python/raptor_version.py.bak	Wed Oct 28 14:39:48 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor version information module
-#
-
-def Version():
-	"""Raptor version string"""
-	return "2.10.0 [2009-10-05 sf release]"
--- a/sbsv2/raptor/python/raptor_xml.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/raptor_xml.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,363 +1,363 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor_xml module
-#
-
-import os
-import raptor_data
-import raptor_utilities
-import xml.dom.minidom
-import re
-import generic_path
-
-# raptor_xml module attributes
-
-namespace = "http://symbian.com/xml/build"
-xsdVersion = "build/2_0.xsd"
-xsdIgnore = "build/666.xsd"
-
-_constructors = {"alias":raptor_data.Alias,
-				 "aliasRef":raptor_data.AliasRef,
-				 "append":raptor_data.Append,
-				 "env":raptor_data.Env,
-				 "group":raptor_data.Group,
-				 "groupRef":raptor_data.GroupRef,
-				 "interface":raptor_data.Interface,
-				 "interfaceRef":raptor_data.InterfaceRef,
-				 "param":raptor_data.Parameter,
-				 "paramgroup":raptor_data.ParameterGroup,
-				 "prepend":raptor_data.Prepend,
-				 "set":raptor_data.Set,
-				 "spec":raptor_data.Specification,
-				 "var":raptor_data.Variant,
-				 "varRef":raptor_data.VariantRef}
-
-
-# raptor_xml module classes
-
-class XMLError(Exception):
-	pass
-
-# raptor_xml module functions
-
-def Read(Raptor, filename):
-	"Read in a Raptor XML document"
-
-	# try to read and parse the XML file
-	try:
-		dom = xml.dom.minidom.parse(filename)
-
-	except: # a whole bag of exceptions can be raised here
-		raise XMLError
-
-	# <build> is always the root element
-	build = dom.documentElement
-	objects = []
-
-	fileVersion = build.getAttribute("xsi:schemaLocation")
-	
-	# ignore the file it matches the "invalid" schema
-	if fileVersion.endswith(xsdIgnore):
-		return objects
-		
-	# check that the file matches the expected schema
-	if not fileVersion.endswith(xsdVersion):
-		Raptor.Warn("file '%s' uses schema '%s' which does not end with the expected version '%s'", filename, fileVersion, xsdVersion)
-		
-	# create a Data Model object from each sub-element
-	for child in build.childNodes:
-		if child.namespaceURI == namespace \
-		and child.nodeType == child.ELEMENT_NODE:
-			try:
-				o = XMLtoDataModel(Raptor, child)
-				if o is not None:
-					objects.append(o)
-			except raptor_data.InvalidChildError:
-				Raptor.Warn("Invalid element %s in %s", child.localName, filename)
-
-	# discard the XML
-	dom.unlink()
-	return objects
-
-
-def XMLtoDataModel(Raptor, node):
-	"Create a data-model object from an XML element"
-
-	# look-up a function to create an object from the node name
-	try:
-		constructor = _constructors[node.localName]
-
-	except KeyError:
-		Raptor.Warn("Unknown element %s", node.localName)
-		return
-
-	model = constructor()
-
-	# deal with the attributes first
-	if node.hasAttributes():
-		for i in range(node.attributes.length):
-			attribute = node.attributes.item(i)
-			try:
-
-				model.SetProperty(attribute.localName, attribute.value)
-
-			except raptor_data.InvalidPropertyError:
-				Raptor.Warn("Can't set attribute %s for element %s",
-							 attribute.localName, node.localName)
-
-	# add the sub-elements
-	for child in node.childNodes:
-		if child.namespaceURI == namespace \
-		and child.nodeType == child.ELEMENT_NODE:
-			try:
-				gc = XMLtoDataModel(Raptor, child)
-				if gc is not None:
-					model.AddChild(gc)
-
-			except raptor_data.InvalidChildError:
-				Raptor.Warn("Can't add child %s to element %s",
-							 child.localName, node.localName)
-
-	# only return a valid object (or raise error)
-	if model.Valid():
-		if model.IsApplicable():
-			return model
-		else:
-			return None
-	else:
-		raise raptor_data.InvalidChildError
-
-
-class SystemModelComponent(generic_path.Path):
-	"""Path sub-class that wraps up a component bld.inf file with
-	system_definition.xml context information."""
-
-	def __init__(self, aBldInfFile, aContainerNames, aSystemDefinitionFile, aSystemDefinitionBase, aSystemDefinitionVersion):
-		generic_path.Path.__init__(self, aBldInfFile.Absolute().path)
-		self.__ContainerNames = aContainerNames
-		self.__SystemDefinitionFile = aSystemDefinitionFile
-		self.__SystemDefinitionBase = aSystemDefinitionBase
-		self.__SystemDefinitionVersion = aSystemDefinitionVersion
-
-	def GetSystemDefinitionFile(self):
-		return self.__SystemDefinitionFile
-
-	def GetSystemDefinitionBase(self):
-		return self.__SystemDefinitionBase
-
-	def GetSystemDefinitionFile(self):
-		return self.__SystemDefinitionVersion
-
-	def GetContainerName(self, aContainerType):
-		if self.__ContainerNames.has_key(aContainerType):
-		  return self.__ContainerNames[aContainerType]
-		return ""
-
-
-class SystemModel(object):
-	"""A representation of the SystemModel section of a Symbian system_definition.xml file."""
-
-	def __init__(self, aLogger, aSystemDefinitionFile, aSystemDefinitionBase):
-		self.__Logger = aLogger
-		self.__SystemDefinitionFile = aSystemDefinitionFile.GetLocalString()
-		self.__SystemDefinitionBase = aSystemDefinitionBase.GetLocalString()
-		self.__Version = {'MAJOR':0,'MID':0,'MINOR':0}
-		self.__ComponentRoot = ""
-		self.__TotalComponents = 0
-		self.__LayerList = []
-		self.__LayerDetails = {}
-
-		self.__DOM = None
-		self.__SystemDefinitionElement = None
-
-		if self.__Read():
-			if self.__Validate():
-				self.__Parse()
-
-		if self.__DOM:
-			self.__DOM.unlink()
-
-	def HasLayer(self, aLayer):
-		return aLayer in self.__LayerList
-
-	def GetLayerNames(self):
-		return self.__LayerList
-
-	def GetLayerComponents(self, aLayer):
-		if not self.HasLayer(aLayer):
-			self.__Logger.Error("System Definition layer \"%s\" does not exist in %s", aLayer, self.__SystemDefinitionFile)
-			return []
-
-		return self.__LayerDetails[aLayer]
-
-	def IsLayerBuildable(self, aLayer):
-		if len(self.GetLayerComponents(aLayer)):
-			return True
-		return False
-
-	def GetAllComponents(self):
-		components = []
-
-		for layer in self.GetLayerNames():
-			components.extend(self.GetLayerComponents(layer))
-
-		return components
-
-	def DumpLayerInfo(self, aLayer):
-		if self.HasLayer(aLayer):
-			self.__Logger.Info("Found %d bld.inf references in layer \"%s\"", len(self.GetLayerComponents(aLayer)), aLayer)
-
-	def DumpInfo(self):
-		self.__Logger.Info("Found %d bld.inf references in %s within %d layers:", len(self.GetAllComponents()), self.__SystemDefinitionFile, len(self.GetLayerNames()))
-		self.__Logger.Info("\t%s", ", ".join(self.GetLayerNames()))
-
-	def __Read(self):
-		if not os.path.exists(self.__SystemDefinitionFile):
-			self.__Logger.Error("System Definition file %s does not exist", self.__SystemDefinitionFile)
-			return False
-
-		self.__Logger.Info("System Definition file %s", self.__SystemDefinitionFile)
-
-		# try to read the XML file
-		try:
-			self.__DOM = xml.dom.minidom.parse(self.__SystemDefinitionFile)
-
-		except: # a whole bag of exceptions can be raised here
-			self.__Logger.Error("Failed to parse XML file %s", self.__SystemDefinitionFile)
-			return False
-
-		# <SystemDefinition> is always the root element
-		self.__SystemDefinitionElement = self.__DOM.documentElement
-
-		return True
-
-	def __Validate(self):
-		# account for different schema versions in processing
-		# old format : version >= 1.3.0
-		# new format : version >= 2.0.0 (assume later versions are compatible...at least for now)
-		version = re.match(r'(?P<MAJOR>\d)\.(?P<MID>\d)(\.(?P<MINOR>\d))?', self.__SystemDefinitionElement.getAttribute("schema"))
-
-		if not version:
-			self.__Logger.Error("Cannot determine schema version of XML file %s", self.__SystemDefinitionFile)
-			return False
-
-		self.__Version['MAJOR'] = int(version.group('MAJOR'))
-		self.__Version['MID'] = int(version.group('MID'))
-		self.__Version['MINOR'] = int(version.group('MINOR'))
-
-		if self.__Version['MAJOR'] == 1 and self.__Version['MID'] > 2:
-			self.__ComponentRoot = self.__SystemDefinitionBase
-		elif self.__Version['MAJOR'] == 2:
-			# 2.0.0 format supports SOURCEROOT as an environment specified base - we respect this, unless
-			# explicitly overridden on the command line
-			if os.environ.has_key('SOURCEROOT'):
-				self.__ComponentRoot = generic_path.Path(os.environ['SOURCEROOT'])
-			if self.__SystemDefinitionBase and self.__SystemDefinitionBase != ".":
-				self.__ComponentRoot = self.__SystemDefinitionBase
-				if os.environ.has_key('SOURCEROOT'):
-					self.__Logger.Info("Command line specified System Definition file base \'%s\' overriding environment SOURCEROOT \'%s\'", self.__SystemDefinitionBase, os.environ['SOURCEROOT'])
-		else:
-			self.__Logger.Error("Cannot process schema version %s of file %s", version.string, self.__SystemDefinitionFile)
-			return False
-
-		return True
-
-	def __Parse(self):
-		# find the <systemModel> element (there can be 0 or 1) and search any <layer> elements for <unit> elements with "bldFile" attributes
-		# the <layer> context of captured "bldFile" attributes is recorded as we go
-		for child in self.__SystemDefinitionElement.childNodes:
-			if child.localName == "systemModel":
-				self.__ProcessSystemModelElement(child)
-
-	def __CreateComponent(self, aBldInfFile, aUnitElement):
-		# take a resolved bld.inf file and associated <unit/> element and returns a populated Component object
-		containers = {}
-		self.__GetElementContainers(aUnitElement, containers)
-		component = SystemModelComponent(aBldInfFile, containers, self.__SystemDefinitionFile, self.__SystemDefinitionBase, self.__Version)
-
-		return component
-
-	def __GetElementContainers(self, aElement, aContainers):
-		# take a <unit/> element and creates a type->name dictionary of all of its parent containers
-		# We're only interested in parent nodes if they're not the top-most node
-		if aElement.parentNode.parentNode:
-			parent = aElement.parentNode
-			name = parent.getAttribute("name")
-
-			if name:
-				aContainers[parent.tagName] = name
-
-			self.__GetElementContainers(parent, aContainers)
-
-	def __ProcessSystemModelElement(self, aElement):
-		"""Search for XML <unit/> elements with 'bldFile' attributes and resolve concrete bld.inf locations
-		with an appreciation of different schema versions."""
-
-		if aElement.tagName == "layer":
-			currentLayer = aElement.getAttribute("name")
-
-			if not self.__LayerDetails.has_key(currentLayer):
-				self.__LayerDetails[currentLayer] = []
-
-			if not currentLayer in self.__LayerList:
-				self.__LayerList.append(currentLayer)
-
-		elif aElement.tagName == "unit" and aElement.hasAttributes():
-			bldFileValue = aElement.getAttribute("bldFile")
-
-			if bldFileValue:
-				bldInfRoot = self.__ComponentRoot
-
-				if self.__Version['MAJOR'] == 1 and self.__Version['MID'] == 4:
-					# version 1.4.x schema paths can use DOS slashes
-					bldFileValue = raptor_utilities.convertToUnixSlash(bldFileValue)
-				elif self.__Version['MAJOR'] == 2:
-					# version 2.x.x schema paths are subject to a "root" attribute off-set, if it exists
-					rootValue = aElement.getAttribute("root")
-
-					if rootValue:
-						if os.environ.has_key(rootValue):
-							bldInfRoot = generic_path.Path(os.environ[rootValue])
-						else:
-							# Assume that this is an error i.e. don't attempt to resolve in relation to SOURCEROOT
-							bldInfRoot = None
-							self.__Logger.Error("Cannot resolve \'root\' attribute value \"%s\" in %s", rootValue, self.__SystemDefinitionFile)
-							return
-
-				group = generic_path.Path(bldFileValue)
-
-				if not group.isAbsolute() and bldInfRoot:
-					group = generic_path.Join(bldInfRoot, group)
-
-				bldinf = generic_path.Join(group, "bld.inf").FindCaseless()
-
-				if bldinf == None:
-					self.__Logger.Error("No bld.inf found at %s in %s", group.GetLocalString(), self.__SystemDefinitionFile)
-				else:
-					component = self.__CreateComponent(bldinf, aElement)
-					layer = component.GetContainerName("layer")
-					if layer:
-						self.__LayerDetails[layer].append(component)
-						self.__TotalComponents += 1
-					else:
-						self.__Logger.Error("No containing layer found for %s in %s", str(bldinf), self.__SystemDefinitionFile)
-
-		# search the sub-elements
-		for child in aElement.childNodes:
-			if child.nodeType == child.ELEMENT_NODE:
-				self.__ProcessSystemModelElement(child)
-
-
-# end of the raptor_xml module
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_xml module
+#
+
+import os
+import raptor_data
+import raptor_utilities
+import xml.dom.minidom
+import re
+import generic_path
+
+# raptor_xml module attributes
+
+namespace = "http://symbian.com/xml/build"
+xsdVersion = "build/2_0.xsd"
+xsdIgnore = "build/666.xsd"
+
+_constructors = {"alias":raptor_data.Alias,
+				 "aliasRef":raptor_data.AliasRef,
+				 "append":raptor_data.Append,
+				 "env":raptor_data.Env,
+				 "group":raptor_data.Group,
+				 "groupRef":raptor_data.GroupRef,
+				 "interface":raptor_data.Interface,
+				 "interfaceRef":raptor_data.InterfaceRef,
+				 "param":raptor_data.Parameter,
+				 "paramgroup":raptor_data.ParameterGroup,
+				 "prepend":raptor_data.Prepend,
+				 "set":raptor_data.Set,
+				 "spec":raptor_data.Specification,
+				 "var":raptor_data.Variant,
+				 "varRef":raptor_data.VariantRef}
+
+
+# raptor_xml module classes
+
+class XMLError(Exception):
+	pass
+
+# raptor_xml module functions
+
+def Read(Raptor, filename):
+	"Read in a Raptor XML document"
+
+	# try to read and parse the XML file
+	try:
+		dom = xml.dom.minidom.parse(filename)
+
+	except: # a whole bag of exceptions can be raised here
+		raise XMLError
+
+	# <build> is always the root element
+	build = dom.documentElement
+	objects = []
+
+	fileVersion = build.getAttribute("xsi:schemaLocation")
+	
+	# ignore the file it matches the "invalid" schema
+	if fileVersion.endswith(xsdIgnore):
+		return objects
+		
+	# check that the file matches the expected schema
+	if not fileVersion.endswith(xsdVersion):
+		Raptor.Warn("file '%s' uses schema '%s' which does not end with the expected version '%s'", filename, fileVersion, xsdVersion)
+		
+	# create a Data Model object from each sub-element
+	for child in build.childNodes:
+		if child.namespaceURI == namespace \
+		and child.nodeType == child.ELEMENT_NODE:
+			try:
+				o = XMLtoDataModel(Raptor, child)
+				if o is not None:
+					objects.append(o)
+			except raptor_data.InvalidChildError:
+				Raptor.Warn("Invalid element %s in %s", child.localName, filename)
+
+	# discard the XML
+	dom.unlink()
+	return objects
+
+
+def XMLtoDataModel(Raptor, node):
+	"Create a data-model object from an XML element"
+
+	# look-up a function to create an object from the node name
+	try:
+		constructor = _constructors[node.localName]
+
+	except KeyError:
+		Raptor.Warn("Unknown element %s", node.localName)
+		return
+
+	model = constructor()
+
+	# deal with the attributes first
+	if node.hasAttributes():
+		for i in range(node.attributes.length):
+			attribute = node.attributes.item(i)
+			try:
+
+				model.SetProperty(attribute.localName, attribute.value)
+
+			except raptor_data.InvalidPropertyError:
+				Raptor.Warn("Can't set attribute %s for element %s",
+							 attribute.localName, node.localName)
+
+	# add the sub-elements
+	for child in node.childNodes:
+		if child.namespaceURI == namespace \
+		and child.nodeType == child.ELEMENT_NODE:
+			try:
+				gc = XMLtoDataModel(Raptor, child)
+				if gc is not None:
+					model.AddChild(gc)
+
+			except raptor_data.InvalidChildError:
+				Raptor.Warn("Can't add child %s to element %s",
+							 child.localName, node.localName)
+
+	# only return a valid object (or raise error)
+	if model.Valid():
+		if model.IsApplicable():
+			return model
+		else:
+			return None
+	else:
+		raise raptor_data.InvalidChildError
+
+
+class SystemModelComponent(generic_path.Path):
+	"""Path sub-class that wraps up a component bld.inf file with
+	system_definition.xml context information."""
+
+	def __init__(self, aBldInfFile, aContainerNames, aSystemDefinitionFile, aSystemDefinitionBase, aSystemDefinitionVersion):
+		generic_path.Path.__init__(self, aBldInfFile.Absolute().path)
+		self.__ContainerNames = aContainerNames
+		self.__SystemDefinitionFile = aSystemDefinitionFile
+		self.__SystemDefinitionBase = aSystemDefinitionBase
+		self.__SystemDefinitionVersion = aSystemDefinitionVersion
+
+	def GetSystemDefinitionFile(self):
+		return self.__SystemDefinitionFile
+
+	def GetSystemDefinitionBase(self):
+		return self.__SystemDefinitionBase
+
+	def GetSystemDefinitionFile(self):
+		return self.__SystemDefinitionVersion
+
+	def GetContainerName(self, aContainerType):
+		if self.__ContainerNames.has_key(aContainerType):
+		  return self.__ContainerNames[aContainerType]
+		return ""
+
+
+class SystemModel(object):
+	"""A representation of the SystemModel section of a Symbian system_definition.xml file."""
+
+	def __init__(self, aLogger, aSystemDefinitionFile, aSystemDefinitionBase):
+		self.__Logger = aLogger
+		self.__SystemDefinitionFile = aSystemDefinitionFile.GetLocalString()
+		self.__SystemDefinitionBase = aSystemDefinitionBase.GetLocalString()
+		self.__Version = {'MAJOR':0,'MID':0,'MINOR':0}
+		self.__ComponentRoot = ""
+		self.__TotalComponents = 0
+		self.__LayerList = []
+		self.__LayerDetails = {}
+
+		self.__DOM = None
+		self.__SystemDefinitionElement = None
+
+		if self.__Read():
+			if self.__Validate():
+				self.__Parse()
+
+		if self.__DOM:
+			self.__DOM.unlink()
+
+	def HasLayer(self, aLayer):
+		return aLayer in self.__LayerList
+
+	def GetLayerNames(self):
+		return self.__LayerList
+
+	def GetLayerComponents(self, aLayer):
+		if not self.HasLayer(aLayer):
+			self.__Logger.Error("System Definition layer \"%s\" does not exist in %s", aLayer, self.__SystemDefinitionFile)
+			return []
+
+		return self.__LayerDetails[aLayer]
+
+	def IsLayerBuildable(self, aLayer):
+		if len(self.GetLayerComponents(aLayer)):
+			return True
+		return False
+
+	def GetAllComponents(self):
+		components = []
+
+		for layer in self.GetLayerNames():
+			components.extend(self.GetLayerComponents(layer))
+
+		return components
+
+	def DumpLayerInfo(self, aLayer):
+		if self.HasLayer(aLayer):
+			self.__Logger.Info("Found %d bld.inf references in layer \"%s\"", len(self.GetLayerComponents(aLayer)), aLayer)
+
+	def DumpInfo(self):
+		self.__Logger.Info("Found %d bld.inf references in %s within %d layers:", len(self.GetAllComponents()), self.__SystemDefinitionFile, len(self.GetLayerNames()))
+		self.__Logger.Info("\t%s", ", ".join(self.GetLayerNames()))
+
+	def __Read(self):
+		if not os.path.exists(self.__SystemDefinitionFile):
+			self.__Logger.Error("System Definition file %s does not exist", self.__SystemDefinitionFile)
+			return False
+
+		self.__Logger.Info("System Definition file %s", self.__SystemDefinitionFile)
+
+		# try to read the XML file
+		try:
+			self.__DOM = xml.dom.minidom.parse(self.__SystemDefinitionFile)
+
+		except: # a whole bag of exceptions can be raised here
+			self.__Logger.Error("Failed to parse XML file %s", self.__SystemDefinitionFile)
+			return False
+
+		# <SystemDefinition> is always the root element
+		self.__SystemDefinitionElement = self.__DOM.documentElement
+
+		return True
+
+	def __Validate(self):
+		# account for different schema versions in processing
+		# old format : version >= 1.3.0
+		# new format : version >= 2.0.0 (assume later versions are compatible...at least for now)
+		version = re.match(r'(?P<MAJOR>\d)\.(?P<MID>\d)(\.(?P<MINOR>\d))?', self.__SystemDefinitionElement.getAttribute("schema"))
+
+		if not version:
+			self.__Logger.Error("Cannot determine schema version of XML file %s", self.__SystemDefinitionFile)
+			return False
+
+		self.__Version['MAJOR'] = int(version.group('MAJOR'))
+		self.__Version['MID'] = int(version.group('MID'))
+		self.__Version['MINOR'] = int(version.group('MINOR'))
+
+		if self.__Version['MAJOR'] == 1 and self.__Version['MID'] > 2:
+			self.__ComponentRoot = self.__SystemDefinitionBase
+		elif self.__Version['MAJOR'] == 2:
+			# 2.0.0 format supports SOURCEROOT as an environment specified base - we respect this, unless
+			# explicitly overridden on the command line
+			if os.environ.has_key('SOURCEROOT'):
+				self.__ComponentRoot = generic_path.Path(os.environ['SOURCEROOT'])
+			if self.__SystemDefinitionBase and self.__SystemDefinitionBase != ".":
+				self.__ComponentRoot = self.__SystemDefinitionBase
+				if os.environ.has_key('SOURCEROOT'):
+					self.__Logger.Info("Command line specified System Definition file base \'%s\' overriding environment SOURCEROOT \'%s\'", self.__SystemDefinitionBase, os.environ['SOURCEROOT'])
+		else:
+			self.__Logger.Error("Cannot process schema version %s of file %s", version.string, self.__SystemDefinitionFile)
+			return False
+
+		return True
+
+	def __Parse(self):
+		# find the <systemModel> element (there can be 0 or 1) and search any <layer> elements for <unit> elements with "bldFile" attributes
+		# the <layer> context of captured "bldFile" attributes is recorded as we go
+		for child in self.__SystemDefinitionElement.childNodes:
+			if child.localName == "systemModel":
+				self.__ProcessSystemModelElement(child)
+
+	def __CreateComponent(self, aBldInfFile, aUnitElement):
+		# take a resolved bld.inf file and associated <unit/> element and returns a populated Component object
+		containers = {}
+		self.__GetElementContainers(aUnitElement, containers)
+		component = SystemModelComponent(aBldInfFile, containers, self.__SystemDefinitionFile, self.__SystemDefinitionBase, self.__Version)
+
+		return component
+
+	def __GetElementContainers(self, aElement, aContainers):
+		# take a <unit/> element and creates a type->name dictionary of all of its parent containers
+		# We're only interested in parent nodes if they're not the top-most node
+		if aElement.parentNode.parentNode:
+			parent = aElement.parentNode
+			name = parent.getAttribute("name")
+
+			if name:
+				aContainers[parent.tagName] = name
+
+			self.__GetElementContainers(parent, aContainers)
+
+	def __ProcessSystemModelElement(self, aElement):
+		"""Search for XML <unit/> elements with 'bldFile' attributes and resolve concrete bld.inf locations
+		with an appreciation of different schema versions."""
+
+		if aElement.tagName == "layer":
+			currentLayer = aElement.getAttribute("name")
+
+			if not self.__LayerDetails.has_key(currentLayer):
+				self.__LayerDetails[currentLayer] = []
+
+			if not currentLayer in self.__LayerList:
+				self.__LayerList.append(currentLayer)
+
+		elif aElement.tagName == "unit" and aElement.hasAttributes():
+			bldFileValue = aElement.getAttribute("bldFile")
+
+			if bldFileValue:
+				bldInfRoot = self.__ComponentRoot
+
+				if self.__Version['MAJOR'] == 1 and self.__Version['MID'] == 4:
+					# version 1.4.x schema paths can use DOS slashes
+					bldFileValue = raptor_utilities.convertToUnixSlash(bldFileValue)
+				elif self.__Version['MAJOR'] == 2:
+					# version 2.x.x schema paths are subject to a "root" attribute off-set, if it exists
+					rootValue = aElement.getAttribute("root")
+
+					if rootValue:
+						if os.environ.has_key(rootValue):
+							bldInfRoot = generic_path.Path(os.environ[rootValue])
+						else:
+							# Assume that this is an error i.e. don't attempt to resolve in relation to SOURCEROOT
+							bldInfRoot = None
+							self.__Logger.Error("Cannot resolve \'root\' attribute value \"%s\" in %s", rootValue, self.__SystemDefinitionFile)
+							return
+
+				group = generic_path.Path(bldFileValue)
+
+				if not group.isAbsolute() and bldInfRoot:
+					group = generic_path.Join(bldInfRoot, group)
+
+				bldinf = generic_path.Join(group, "bld.inf").FindCaseless()
+
+				if bldinf == None:
+					self.__Logger.Error("No bld.inf found at %s in %s", group.GetLocalString(), self.__SystemDefinitionFile)
+				else:
+					component = self.__CreateComponent(bldinf, aElement)
+					layer = component.GetContainerName("layer")
+					if layer:
+						self.__LayerDetails[layer].append(component)
+						self.__TotalComponents += 1
+					else:
+						self.__Logger.Error("No containing layer found for %s in %s", str(bldinf), self.__SystemDefinitionFile)
+
+		# search the sub-elements
+		for child in aElement.childNodes:
+			if child.nodeType == child.ELEMENT_NODE:
+				self.__ProcessSystemModelElement(child)
+
+
+# end of the raptor_xml module
--- a/sbsv2/raptor/python/sbs_dist.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/python/sbs_dist.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,139 +1,139 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# raptor linux distribution creation module
-# This module allow to crate raptor linux distribution archive (tar.gz) e.g. sbs_linux_dist.tar.gz
-# Script extect the following command-line parameters:
-# 1. Archive name
-# 2. List of files/directories to include
-# By default windows specific and source files are excluded.
-# example including bin and python subdir:
-# sbs_dist.py sbs_linux_dist.tar.gz bin python
-#
-
-import os
-import re
-import tarfile
-import sys
-import dos2unix
-
-#------------------------------------------------------------------------------
-# Create tar.gz archive including given files (fileName list and tarinfo list)
-#------------------------------------------------------------------------------
-def createTarGZ(tarName, fileList):
-    tar = tarfile.open(tarName, "w|gz")
-    for name in fileList:
-        tar.add(name)
-    return tar
-
-#------------------------------------------------------------------------------
-# Lists files in each of given directories
-#------------------------------------------------------------------------------
-def listFilesInDirs(paths):
-    fileList = []
-    for path in paths:
-        fileList.extend(listFiles(path))
-    return fileList
-
-#------------------------------------------------------------------------------
-# Lists files in given directory
-#------------------------------------------------------------------------------
-def listFiles(path):
-    fileList = []
-    for root, dirs, files in os.walk(path):
-        for index in range(len(files)):
-            fileList.append(root + "/" + files[index])
-    return fileList
-
-#------------------------------------------------------------------------------
-# Excludes files matching "pattern" from given files list
-#------------------------------------------------------------------------------
-def excludeFiles(fileList, pattern):
-    filteredFileList = []
-    regExp = re.compile(pattern)
-    for fileName in fileList:
-        if not(regExp.match(fileName)):
-           filteredFileList.append(fileName)
-    return filteredFileList
-
-
-#------------------------------------------------------------------------------
-# Groups given paths as files or directories
-#------------------------------------------------------------------------------
-def groupFilesAndDirs(filesAndDirs):
-    files = []
-    dirs = []
-    for name in filesAndDirs:
-        if os.path.isdir(name):
-             dirs.append(name)
-        else:
-             if os.path.isfile(name):
-                files.append(name)
-             else:
-                  print "Warning: Neither a file nor a directory! Ignoring parameter - " + name
-    return (files,dirs)
-
-#------------------------------------------------------------------------------
-# Prepares regular expression to exclude unnecessary files
-#------------------------------------------------------------------------------
-def prepareExcludedFilesRegExp():
-    pathPrefixRegExp = ".*[\\\/]"
-    filesRegExp = "((sbs)|(.*\.bat)|(.*\.pyc)|(.*\.cmd)|(.*\.exe)|(.*\.dll)|(sbs_dist.py)"
-    filesRegExp = filesRegExp + "|(dos2unix.py)|(raptor_py2exe_setup.py)|(make)|(bash)|(bashbug))+"
-    return "^" + pathPrefixRegExp + filesRegExp + "$"
-
-#------------------------------------------------------------------------------
-# Includes all files in fileList in given tar with altered executable permision (+X) for all
-#------------------------------------------------------------------------------
-def includeAsExecutable(tar, fileList):
-    for f in fileList:
-        tarinfo = tar.gettarinfo(f)
-        # OR with 73 (001 001 001) - +X for all
-        tarinfo.mode = tarinfo.mode | 73
-        tar.addfile(tarinfo,file(f, "rb"))
-
-
-#------------------------------------------------------------------------------
-# Validate script parameters
-#------------------------------------------------------------------------------
-def validateParameters(tarFileName, filesToInclude):
-    if not(len(tarFileName) > 0):
-       print "Error: No archive name given."
-       sys.exit()
-    if not(len(filesToInclude) > 0):
-       print "Error: No files/directories names to include in archive given."
-       sys.exit()
-
-
-tarFileName = sys.argv[1]
-# files and directories
-filesAndDirsToInclude = sys.argv[2:]
-
-validateParameters(tarFileName, filesAndDirsToInclude)
-
-(filesToInclude,dirsToInclude) = groupFilesAndDirs(filesAndDirsToInclude)
-
-fileList = listFilesInDirs(dirsToInclude)
-fileList.extend(filesToInclude)
-
-filteredFileList = excludeFiles(fileList, prepareExcludedFilesRegExp())
-
-dos2unix.dos2unix("bin/sbs")
-
-tar = createTarGZ(tarFileName, filteredFileList)
-fileToBeExecutableList = ["bin/sbs", "linux-i386/bin/make", "linux-i386/bin/bash", "linux-i386/bin/bashbug",
-			  "bin/sbs_descramble"]
-includeAsExecutable(tar, fileToBeExecutableList)
-tar.close()
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor linux distribution creation module
+# This module allow to crate raptor linux distribution archive (tar.gz) e.g. sbs_linux_dist.tar.gz
+# Script extect the following command-line parameters:
+# 1. Archive name
+# 2. List of files/directories to include
+# By default windows specific and source files are excluded.
+# example including bin and python subdir:
+# sbs_dist.py sbs_linux_dist.tar.gz bin python
+#
+
+import os
+import re
+import tarfile
+import sys
+import dos2unix
+
+#------------------------------------------------------------------------------
+# Create tar.gz archive including given files (fileName list and tarinfo list)
+#------------------------------------------------------------------------------
+def createTarGZ(tarName, fileList):
+    tar = tarfile.open(tarName, "w|gz")
+    for name in fileList:
+        tar.add(name)
+    return tar
+
+#------------------------------------------------------------------------------
+# Lists files in each of given directories
+#------------------------------------------------------------------------------
+def listFilesInDirs(paths):
+    fileList = []
+    for path in paths:
+        fileList.extend(listFiles(path))
+    return fileList
+
+#------------------------------------------------------------------------------
+# Lists files in given directory
+#------------------------------------------------------------------------------
+def listFiles(path):
+    fileList = []
+    for root, dirs, files in os.walk(path):
+        for index in range(len(files)):
+            fileList.append(root + "/" + files[index])
+    return fileList
+
+#------------------------------------------------------------------------------
+# Excludes files matching "pattern" from given files list
+#------------------------------------------------------------------------------
+def excludeFiles(fileList, pattern):
+    filteredFileList = []
+    regExp = re.compile(pattern)
+    for fileName in fileList:
+        if not(regExp.match(fileName)):
+           filteredFileList.append(fileName)
+    return filteredFileList
+
+
+#------------------------------------------------------------------------------
+# Groups given paths as files or directories
+#------------------------------------------------------------------------------
+def groupFilesAndDirs(filesAndDirs):
+    files = []
+    dirs = []
+    for name in filesAndDirs:
+        if os.path.isdir(name):
+             dirs.append(name)
+        else:
+             if os.path.isfile(name):
+                files.append(name)
+             else:
+                  print "Warning: Neither a file nor a directory! Ignoring parameter - " + name
+    return (files,dirs)
+
+#------------------------------------------------------------------------------
+# Prepares regular expression to exclude unnecessary files
+#------------------------------------------------------------------------------
+def prepareExcludedFilesRegExp():
+    pathPrefixRegExp = ".*[\\\/]"
+    filesRegExp = "((sbs)|(.*\.bat)|(.*\.pyc)|(.*\.cmd)|(.*\.exe)|(.*\.dll)|(sbs_dist.py)"
+    filesRegExp = filesRegExp + "|(dos2unix.py)|(raptor_py2exe_setup.py)|(make)|(bash)|(bashbug))+"
+    return "^" + pathPrefixRegExp + filesRegExp + "$"
+
+#------------------------------------------------------------------------------
+# Includes all files in fileList in given tar with altered executable permision (+X) for all
+#------------------------------------------------------------------------------
+def includeAsExecutable(tar, fileList):
+    for f in fileList:
+        tarinfo = tar.gettarinfo(f)
+        # OR with 73 (001 001 001) - +X for all
+        tarinfo.mode = tarinfo.mode | 73
+        tar.addfile(tarinfo,file(f, "rb"))
+
+
+#------------------------------------------------------------------------------
+# Validate script parameters
+#------------------------------------------------------------------------------
+def validateParameters(tarFileName, filesToInclude):
+    if not(len(tarFileName) > 0):
+       print "Error: No archive name given."
+       sys.exit()
+    if not(len(filesToInclude) > 0):
+       print "Error: No files/directories names to include in archive given."
+       sys.exit()
+
+
+tarFileName = sys.argv[1]
+# files and directories
+filesAndDirsToInclude = sys.argv[2:]
+
+validateParameters(tarFileName, filesAndDirsToInclude)
+
+(filesToInclude,dirsToInclude) = groupFilesAndDirs(filesAndDirsToInclude)
+
+fileList = listFilesInDirs(dirsToInclude)
+fileList.extend(filesToInclude)
+
+filteredFileList = excludeFiles(fileList, prepareExcludedFilesRegExp())
+
+dos2unix.dos2unix("bin/sbs")
+
+tar = createTarGZ(tarFileName, filteredFileList)
+fileToBeExecutableList = ["bin/sbs", "linux-i386/bin/make", "linux-i386/bin/bash", "linux-i386/bin/bashbug",
+			  "bin/sbs_descramble"]
+includeAsExecutable(tar, fileToBeExecutableList)
+tar.close()
+
--- a/sbsv2/raptor/schema/build/1_0.xsd	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/schema/build/1_0.xsd	Mon Nov 16 09:46:46 2009 +0000
@@ -1,87 +1,87 @@
-<?xml version="1.0"?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://symbian.com/xml/build" xmlns="http://symbian.com/xml/build" elementFormDefault="qualified">
-
-	<xsd:annotation>
-		<xsd:documentation xml:lang="en">
-			Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-			All rights reserved.
-			This component and the accompanying materials are made available
-			under the terms of the License "Eclipse Public License v1.0"
-			which accompanies this distribution, and is available
-			at the URL "http://www.eclipse.org/legal/epl-v10.html".
-
-			Initial Contributors:
-			Nokia Corporation - initial contribution.
-
-			Contributors:
-
-			Description:
-
-		</xsd:documentation>
-	</xsd:annotation>
-
-	<xsd:element name="build">
-		<xsd:complexType>
-  		<xsd:sequence>
-    		<xsd:element ref="config" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
-			</xsd:sequence>
-		</xsd:complexType>
-	</xsd:element>
-
-	<xsd:element name="config">
-		<xsd:complexType>
-			<xsd:sequence>
-				<xsd:element name="varRef" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="ref" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="configRef" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="ref" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-				<xsd:element ref="config" minOccurs="0" maxOccurs="unbounded"/>
-			</xsd:sequence>
-			<xsd:attribute name="name" type="xsd:string"/>
-			<xsd:attribute name="abstract" type="xsd:boolean"/>
-		</xsd:complexType>
-	</xsd:element>
-
-	<xsd:element name="var">
-		<xsd:complexType>
-			<xsd:sequence maxOccurs="unbounded">
-		  	<xsd:element name="env" minOccurs="0" maxOccurs="unbounded">
-	  			<xsd:complexType>
-		      	<xsd:attribute name="name" type="xsd:string"/>
-		      	<xsd:attribute name="default" type="xsd:string"/>
-		      	<xsd:attribute name="type" type="xsd:string"/>
-						<xsd:attribute name="versionCommand" type="xsd:string"/>
-						<xsd:attribute name="versionResult" type="xsd:string"/>
-		  		</xsd:complexType>
-				</xsd:element>
-				<xsd:element name="set" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="name" type="xsd:string"/>
-						<xsd:attribute name="value" type="xsd:string"/>
-						<xsd:attribute name="type" type="xsd:string"/>
-						<xsd:attribute name="versionCommand" type="xsd:string"/>
-						<xsd:attribute name="versionResult" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-				<xsd:element name="append" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="name" type="xsd:string"/>
-						<xsd:attribute name="value" type="xsd:string"/>
-						<xsd:attribute name="separator" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-			</xsd:sequence>
-			<xsd:attribute name="name" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-
-</xsd:schema>
-
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://symbian.com/xml/build" xmlns="http://symbian.com/xml/build" elementFormDefault="qualified">
+
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+			Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+			All rights reserved.
+			This component and the accompanying materials are made available
+			under the terms of the License "Eclipse Public License v1.0"
+			which accompanies this distribution, and is available
+			at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+			Initial Contributors:
+			Nokia Corporation - initial contribution.
+
+			Contributors:
+
+			Description:
+
+		</xsd:documentation>
+	</xsd:annotation>
+
+	<xsd:element name="build">
+		<xsd:complexType>
+  		<xsd:sequence>
+    		<xsd:element ref="config" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+
+	<xsd:element name="config">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element name="varRef" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="ref" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="configRef" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="ref" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+				<xsd:element ref="config" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+			<xsd:attribute name="name" type="xsd:string"/>
+			<xsd:attribute name="abstract" type="xsd:boolean"/>
+		</xsd:complexType>
+	</xsd:element>
+
+	<xsd:element name="var">
+		<xsd:complexType>
+			<xsd:sequence maxOccurs="unbounded">
+		  	<xsd:element name="env" minOccurs="0" maxOccurs="unbounded">
+	  			<xsd:complexType>
+		      	<xsd:attribute name="name" type="xsd:string"/>
+		      	<xsd:attribute name="default" type="xsd:string"/>
+		      	<xsd:attribute name="type" type="xsd:string"/>
+						<xsd:attribute name="versionCommand" type="xsd:string"/>
+						<xsd:attribute name="versionResult" type="xsd:string"/>
+		  		</xsd:complexType>
+				</xsd:element>
+				<xsd:element name="set" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="name" type="xsd:string"/>
+						<xsd:attribute name="value" type="xsd:string"/>
+						<xsd:attribute name="type" type="xsd:string"/>
+						<xsd:attribute name="versionCommand" type="xsd:string"/>
+						<xsd:attribute name="versionResult" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+				<xsd:element name="append" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="name" type="xsd:string"/>
+						<xsd:attribute name="value" type="xsd:string"/>
+						<xsd:attribute name="separator" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+			<xsd:attribute name="name" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+
+</xsd:schema>
+
--- a/sbsv2/raptor/schema/build/2_0.xsd	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/schema/build/2_0.xsd	Mon Nov 16 09:46:46 2009 +0000
@@ -1,134 +1,134 @@
-<?xml version="1.0"?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://symbian.com/xml/build" targetNamespace="http://symbian.com/xml/build" elementFormDefault="qualified">
-	<xsd:annotation>
-		<xsd:documentation xml:lang="en">
-			Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-			All rights reserved.
-			This component and the accompanying materials are made available
-			under the terms of the License "Eclipse Public License v1.0"
-			which accompanies this distribution, and is available
-			at the URL "http://www.eclipse.org/legal/epl-v10.html".
-
-			Initial Contributors:
-			Nokia Corporation - initial contribution.
-
-			Contributors:
-
-			Description:
-
-		</xsd:documentation>
-	</xsd:annotation>
-	<xsd:element name="build">
-		<xsd:complexType>
-			<xsd:sequence maxOccurs="unbounded">
-				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="alias" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="group" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="interface" minOccurs="0" maxOccurs="unbounded"/>
-			</xsd:sequence>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="var">
-		<xsd:complexType>
-			<xsd:sequence>
-				<xsd:sequence minOccurs="0">
-					<xsd:element ref="varRef" minOccurs="0" maxOccurs="unbounded"/>
-				</xsd:sequence>
-				<xsd:sequence maxOccurs="unbounded">
-					<xsd:element name="env" minOccurs="0" maxOccurs="unbounded">
-						<xsd:complexType>
-							<xsd:attribute name="name" type="xsd:string" use="required"/>
-							<xsd:attribute name="default" type="xsd:string" use="optional"/>
-							<xsd:attribute name="type" type="xsd:string"/>
-							<xsd:attribute name="versionCommand" type="xsd:string"/>
-							<xsd:attribute name="versionResult" type="xsd:string"/>
-						</xsd:complexType>
-					</xsd:element>
-					<xsd:element name="set" minOccurs="0" maxOccurs="unbounded">
-						<xsd:complexType>
-							<xsd:attribute name="name" type="xsd:string" use="required"/>
-							<xsd:attribute name="value" type="xsd:string" use="required"/>
-							<xsd:attribute name="type" type="xsd:string"/>
-							<xsd:attribute name="versionCommand" type="xsd:string"/>
-							<xsd:attribute name="versionResult" type="xsd:string"/>
-							<xsd:attribute name="host" type="xsd:string"/>
-						</xsd:complexType>
-					</xsd:element>
-					<xsd:element name="append" minOccurs="0" maxOccurs="unbounded">
-						<xsd:complexType>
-							<xsd:attribute name="name" type="xsd:string" use="required"/>
-							<xsd:attribute name="value" type="xsd:string" use="required"/>
-							<xsd:attribute name="separator" type="xsd:string"/>
-						</xsd:complexType>
-					</xsd:element>
-					<xsd:element name="prepend" minOccurs="0" maxOccurs="unbounded">
-						<xsd:complexType>
-							<xsd:attribute name="name" type="xsd:string" use="required"/>
-							<xsd:attribute name="value" type="xsd:string" use="required"/>
-							<xsd:attribute name="separator" type="xsd:string"/>
-						</xsd:complexType>
-					</xsd:element>
-				</xsd:sequence>
-			</xsd:sequence>
-			<xsd:attribute name="name" type="xsd:string" use="required"/>
-			<xsd:attribute name="extends" type="xsd:string"/>
-			<xsd:attribute name="host" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="alias">
-		<xsd:complexType>
-			<xsd:attribute name="name" type="xsd:string" use="required"/>
-			<xsd:attribute name="meaning" type="xsd:string" use="required"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="group">
-		<xsd:complexType>
-			<xsd:sequence maxOccurs="unbounded">
-				<xsd:element ref="varRef" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="aliasRef" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element ref="groupRef" minOccurs="0" maxOccurs="unbounded"/>
-			</xsd:sequence>
-			<xsd:attribute name="name" use="required"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="varRef">
-		<xsd:complexType>
-			<xsd:attribute name="ref" type="xsd:string" use="required"/>
-			<xsd:attribute name="mod" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="aliasRef">
-		<xsd:complexType>
-			<xsd:attribute name="ref" type="xsd:string" use="required"/>
-			<xsd:attribute name="mod" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="groupRef">
-		<xsd:complexType>
-			<xsd:attribute name="ref" type="xsd:string" use="required"/>
-			<xsd:attribute name="mod" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-	<xsd:element name="interface">
-		<xsd:complexType>
-			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
-				<xsd:element name="param" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="name" type="xsd:string" use="required"/>
-						<xsd:attribute name="default" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-				<xsd:element name="paramgroup" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:attribute name="pattern" type="xsd:string" use="required"/>
-						<xsd:attribute name="default" type="xsd:string"/>
-					</xsd:complexType>
-				</xsd:element>
-			</xsd:sequence>
-			<xsd:attribute name="name" type="xsd:string" use="required"/>
-			<xsd:attribute name="extends" type="xsd:string"/>
-			<xsd:attribute name="abstract" type="xsd:boolean"/>
-			<xsd:attribute name="flm" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-</xsd:schema>
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://symbian.com/xml/build" targetNamespace="http://symbian.com/xml/build" elementFormDefault="qualified">
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+			Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+			All rights reserved.
+			This component and the accompanying materials are made available
+			under the terms of the License "Eclipse Public License v1.0"
+			which accompanies this distribution, and is available
+			at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+			Initial Contributors:
+			Nokia Corporation - initial contribution.
+
+			Contributors:
+
+			Description:
+
+		</xsd:documentation>
+	</xsd:annotation>
+	<xsd:element name="build">
+		<xsd:complexType>
+			<xsd:sequence maxOccurs="unbounded">
+				<xsd:element ref="var" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="alias" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="group" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="interface" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="var">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:sequence minOccurs="0">
+					<xsd:element ref="varRef" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:sequence maxOccurs="unbounded">
+					<xsd:element name="env" minOccurs="0" maxOccurs="unbounded">
+						<xsd:complexType>
+							<xsd:attribute name="name" type="xsd:string" use="required"/>
+							<xsd:attribute name="default" type="xsd:string" use="optional"/>
+							<xsd:attribute name="type" type="xsd:string"/>
+							<xsd:attribute name="versionCommand" type="xsd:string"/>
+							<xsd:attribute name="versionResult" type="xsd:string"/>
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="set" minOccurs="0" maxOccurs="unbounded">
+						<xsd:complexType>
+							<xsd:attribute name="name" type="xsd:string" use="required"/>
+							<xsd:attribute name="value" type="xsd:string" use="required"/>
+							<xsd:attribute name="type" type="xsd:string"/>
+							<xsd:attribute name="versionCommand" type="xsd:string"/>
+							<xsd:attribute name="versionResult" type="xsd:string"/>
+							<xsd:attribute name="host" type="xsd:string"/>
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="append" minOccurs="0" maxOccurs="unbounded">
+						<xsd:complexType>
+							<xsd:attribute name="name" type="xsd:string" use="required"/>
+							<xsd:attribute name="value" type="xsd:string" use="required"/>
+							<xsd:attribute name="separator" type="xsd:string"/>
+						</xsd:complexType>
+					</xsd:element>
+					<xsd:element name="prepend" minOccurs="0" maxOccurs="unbounded">
+						<xsd:complexType>
+							<xsd:attribute name="name" type="xsd:string" use="required"/>
+							<xsd:attribute name="value" type="xsd:string" use="required"/>
+							<xsd:attribute name="separator" type="xsd:string"/>
+						</xsd:complexType>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:sequence>
+			<xsd:attribute name="name" type="xsd:string" use="required"/>
+			<xsd:attribute name="extends" type="xsd:string"/>
+			<xsd:attribute name="host" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="alias">
+		<xsd:complexType>
+			<xsd:attribute name="name" type="xsd:string" use="required"/>
+			<xsd:attribute name="meaning" type="xsd:string" use="required"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="group">
+		<xsd:complexType>
+			<xsd:sequence maxOccurs="unbounded">
+				<xsd:element ref="varRef" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="aliasRef" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element ref="groupRef" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+			<xsd:attribute name="name" use="required"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="varRef">
+		<xsd:complexType>
+			<xsd:attribute name="ref" type="xsd:string" use="required"/>
+			<xsd:attribute name="mod" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="aliasRef">
+		<xsd:complexType>
+			<xsd:attribute name="ref" type="xsd:string" use="required"/>
+			<xsd:attribute name="mod" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="groupRef">
+		<xsd:complexType>
+			<xsd:attribute name="ref" type="xsd:string" use="required"/>
+			<xsd:attribute name="mod" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+	<xsd:element name="interface">
+		<xsd:complexType>
+			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
+				<xsd:element name="param" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="name" type="xsd:string" use="required"/>
+						<xsd:attribute name="default" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+				<xsd:element name="paramgroup" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:attribute name="pattern" type="xsd:string" use="required"/>
+						<xsd:attribute name="default" type="xsd:string"/>
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+			<xsd:attribute name="name" type="xsd:string" use="required"/>
+			<xsd:attribute name="extends" type="xsd:string"/>
+			<xsd:attribute name="abstract" type="xsd:boolean"/>
+			<xsd:attribute name="flm" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+</xsd:schema>
--- a/sbsv2/raptor/schema/build/log/1_0.xsd	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/schema/build/log/1_0.xsd	Mon Nov 16 09:46:46 2009 +0000
@@ -1,79 +1,79 @@
-<?xml version="1.0"?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://symbian.com/xml/build/log" xmlns="http://symbian.com/xml/build/log" elementFormDefault="qualified">
-
-	<xsd:annotation>
-		<xsd:documentation xml:lang="en">
-			Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-			All rights reserved.
-			This component and the accompanying materials are made available
-			uunder the terms of the License "Eclipse Public License v1.0"
-			which accompanies this distribution, and is available
-			at the URL "http://www.eclipse.org/legal/epl-v10.html".
-
-			Initial Contributors:
-			Nokia Corporation - initial contribution.
-
-			Contributors:
-
-			Description:
-
-		</xsd:documentation>
-	</xsd:annotation>
-
-	<xsd:element name="buildlog">
-		<xsd:complexType mixed="true">
-			<xsd:sequence maxOccurs="unbounded">
-				<xsd:element name="info" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="error" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="warning" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="flm" type="flmType" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="bmconvcmdfile" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
-				<xsd:element name="recipe" type="recipeType" minOccurs="0" maxOccurs="unbounded"/>
-			</xsd:sequence>
-			<xsd:attribute name="sbs_version" type="xsd:string"/>
-		</xsd:complexType>
-	</xsd:element>
-
-	<xsd:complexType name="flmType" mixed="true">
-		<xsd:attribute name="name" type="xsd:string"/>
-		<xsd:attribute name="target" type="xsd:string"/>
-		<xsd:attribute name="EPOCROOT" type="xsd:string"/>
-		<xsd:attribute name="type" type="xsd:string"/>
-		<xsd:attribute name="variant" type="xsd:string"/>
-		<xsd:attribute name="component" type="xsd:string"/>
-		<xsd:attribute name="project" type="xsd:string"/>
-		<xsd:attribute name="source" type="xsd:string"/>
-	</xsd:complexType>
-
-	<xsd:complexType name="recipeType" mixed="true">
-		<xsd:sequence>
-		  <xsd:element name="time">
-	  		<xsd:complexType>
-		      <xsd:attribute name="start" type="xsd:decimal"/>
-		      <xsd:attribute name="elapsed" type="xsd:decimal"/>
-		    </xsd:complexType>
-			</xsd:element>
-			<xsd:element name="status">
-				<xsd:complexType>
-					<xsd:attribute name="exit" type="xsd:string"/>
-					<xsd:attribute name="code" type="xsd:integer"/>
-					<xsd:attribute name="name" type="xsd:string"/>
-					<xsd:attribute name="project" type="xsd:string"/>
-					<xsd:attribute name="component" type="xsd:string"/>
-					<xsd:attribute name="forcesuccess" type="xsd:string"/>
-				</xsd:complexType>
-			</xsd:element>
-		</xsd:sequence>
-		<xsd:attribute name="name" type="xsd:string"/>
-		<xsd:attribute name="host" type="xsd:string"/>
-		<xsd:attribute name="layer" type="xsd:string"/>
-		<xsd:attribute name="component" type="xsd:string"/>
-		<xsd:attribute name="bldinf" type="xsd:string"/>
-		<xsd:attribute name="mmp" type="xsd:string"/>
-		<xsd:attribute name="config" type="xsd:string"/>
-		<xsd:attribute name="platform" type="xsd:string"/>
-		<xsd:attribute name="phase" type="xsd:string"/>
-	</xsd:complexType>
-
-</xsd:schema>
-
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://symbian.com/xml/build/log" xmlns="http://symbian.com/xml/build/log" elementFormDefault="qualified">
+
+	<xsd:annotation>
+		<xsd:documentation xml:lang="en">
+			Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+			All rights reserved.
+			This component and the accompanying materials are made available
+			uunder the terms of the License "Eclipse Public License v1.0"
+			which accompanies this distribution, and is available
+			at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+			Initial Contributors:
+			Nokia Corporation - initial contribution.
+
+			Contributors:
+
+			Description:
+
+		</xsd:documentation>
+	</xsd:annotation>
+
+	<xsd:element name="buildlog">
+		<xsd:complexType mixed="true">
+			<xsd:sequence maxOccurs="unbounded">
+				<xsd:element name="info" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="error" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="warning" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="flm" type="flmType" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="bmconvcmdfile" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				<xsd:element name="recipe" type="recipeType" minOccurs="0" maxOccurs="unbounded"/>
+			</xsd:sequence>
+			<xsd:attribute name="sbs_version" type="xsd:string"/>
+		</xsd:complexType>
+	</xsd:element>
+
+	<xsd:complexType name="flmType" mixed="true">
+		<xsd:attribute name="name" type="xsd:string"/>
+		<xsd:attribute name="target" type="xsd:string"/>
+		<xsd:attribute name="EPOCROOT" type="xsd:string"/>
+		<xsd:attribute name="type" type="xsd:string"/>
+		<xsd:attribute name="variant" type="xsd:string"/>
+		<xsd:attribute name="component" type="xsd:string"/>
+		<xsd:attribute name="project" type="xsd:string"/>
+		<xsd:attribute name="source" type="xsd:string"/>
+	</xsd:complexType>
+
+	<xsd:complexType name="recipeType" mixed="true">
+		<xsd:sequence>
+		  <xsd:element name="time">
+	  		<xsd:complexType>
+		      <xsd:attribute name="start" type="xsd:decimal"/>
+		      <xsd:attribute name="elapsed" type="xsd:decimal"/>
+		    </xsd:complexType>
+			</xsd:element>
+			<xsd:element name="status">
+				<xsd:complexType>
+					<xsd:attribute name="exit" type="xsd:string"/>
+					<xsd:attribute name="code" type="xsd:integer"/>
+					<xsd:attribute name="name" type="xsd:string"/>
+					<xsd:attribute name="project" type="xsd:string"/>
+					<xsd:attribute name="component" type="xsd:string"/>
+					<xsd:attribute name="forcesuccess" type="xsd:string"/>
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:sequence>
+		<xsd:attribute name="name" type="xsd:string"/>
+		<xsd:attribute name="host" type="xsd:string"/>
+		<xsd:attribute name="layer" type="xsd:string"/>
+		<xsd:attribute name="component" type="xsd:string"/>
+		<xsd:attribute name="bldinf" type="xsd:string"/>
+		<xsd:attribute name="mmp" type="xsd:string"/>
+		<xsd:attribute name="config" type="xsd:string"/>
+		<xsd:attribute name="platform" type="xsd:string"/>
+		<xsd:attribute name="phase" type="xsd:string"/>
+	</xsd:complexType>
+
+</xsd:schema>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/System_Definition.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="Raptor">
+      <module name="Smoke Tests">
+        <component name="simple">
+          <unit unitID="simpleID" name="simpleName" bldFile="simple"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/README	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+
+Testing a Cluster to See if it is Correctly Configured
+--------------------------------------------------------
+
+The tests in this directory can be seen only as examples of how to test a cluster.  They would have to be customised before use on any particular cluster.
+
+The tests here are aimed at:
+
+1) Testing that the configuration of each nodes and that services such as NIS,DNS and NTP are configured.
+  This requires that logins for the current user work on all nodes.
+2) Checking that raptor-relevant software is installed and that the compiler can obtain licenses.
+3) Testing that PVM is installed and will run without crashing (solves a problem that has occurred in the past).
+4) Tests that PVM can run commands on all nodes.
+
+
+Typically one would run headtest.sh which performs the tests relating to items 1-3. It causes "nodetest.sh" to be run on all nodes.
+
+e.g.
+	./headtest.sh node1 node2 node3
+
+pvmtest.sh can be used to check that pvm is working by running the compiler on each node via pvm.
+	./pvmtest node1 node2 node3
+
+None of these tests is automatic - one must simply observe the output.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/headtest.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# Test all nodes in a cluster
+# arguments are the list of nodes.
+
+NODELIST="$@"
+
+(
+echo "Date and time check:"
+echo "    The numbers following each hostname are the date and time in seconds"
+echo "    They should all be the same otherwise make errors may occur during builds."
+echo "    "`hostname`' '`date +%s`
+for i in $NODELIST; do
+	ssh $i 'echo "    "`hostname`' '`date +%s`'&
+done
+)
+
+
+
+for i in $NODELIST; do
+	ssh $i "NODELIST=\"$NODELIST\" $SBS_HOME/test/cluster/nodetest.sh"
+done
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/nodetest.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TESTUSER="$@"
+LOCALTOOLS_HOME=/opt/symbian
+
+
+echo 
+hostname
+echo
+ypwhich 
+mount | grep home
+ls -ld /home/$TESTUSER
+
+ls -l $LOCALTOOLS_HOME/a616/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 
+ls -l $LOCALTOOLS_HOME/make-pvm-381/pvmgmake 
+ls -l $LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_pvm 
+ls -l $LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_avg 
+
+$LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_pvm 
+#$LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_avg
+
+
+$LOCALTOOLS_HOME/a616/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 2>&1 | grep ARM
+
+#connectivity
+for i in $NODELIST; do
+	echo "Pinging $i"
+	ping -c 1  $i| grep "bytes from"
+done
+
+echo "---------------------------------------------------------------------------"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/pvmtest.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# Test all nodes in a cluster
+# arguments are the list of nodes.
+
+NODELIST="$@"
+
+for i in $NODELIST; do
+	ssh $i "ls -l /tmp/pvm.$UID"
+done
+
+for i in $NODELIST; do
+	(
+	echo "spawn -($i) -> /bin/hostname"
+	echo "spawn -($i) -> $PVM_ROOT/bin/LINUX/pvmgmake_pvm"
+	echo "quit"
+	) | pvm
+done
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/common/raptor_tests.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,649 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# run the smoke tests
+
+import os
+import re
+import stat
+import sys
+import subprocess
+import traceback
+from shutil import rmtree
+
+sys.path.append(os.environ["SBS_HOME"]+"/python")
+from raptor_meta import BldInfFile
+
+logDir = "$(EPOCROOT)/epoc32/build/smoketestlogs"
+
+debug_mode_active = False
+
+# Environment #################################################################
+
+# On MYS there is USERNAME but not USER
+if 'USER' not in os.environ:
+	os.environ['USER'] = os.environ['USERNAME']
+
+def activate_debug():
+	"""
+		Activate debug-mode remotely
+	"""
+	global debug_mode_active
+	debug_mode_active = True
+
+# Determine the OS version in the epocroot we're testing
+# since some tests expect different outcomes for 9.4 and 9.5
+def getsymbianversion():
+	epocroot = os.environ['EPOCROOT']
+	b = open (epocroot+"/epoc32/data/buildinfo.txt","r")
+	binfo = " ".join(b.readlines())
+	vmatch = (re.compile("v(9\.[0-9])")).search(binfo)
+	if vmatch:
+		osversion = vmatch.group(1)
+	else:
+		osversion = '9.4'
+	return osversion
+
+envRegex = re.compile("\$\((.+?)\)")
+fixEnvironment = ['EPOCROOT', 'SBS_HOME', 'SBS_CYGWIN', 'SBS_MINGW', 'SBS_PYTHON']
+
+def ReplaceEnvs(item):
+	
+	envs = envRegex.findall(item)
+
+	for e in set(envs):
+		try:
+			val = os.environ[e]
+			if e in fixEnvironment:
+				# Raptor "fixes up" EPOCROOT etc. so we must do the same:
+				# add the drive letter (make absolute)
+				val = os.path.abspath(val)
+				# use forward slashes
+				val = val.replace("\\", "/")
+				# remove trailing slashes
+				val = val.rstrip("/")
+			item = item.replace("$(" + e + ")", val)
+		except KeyError:
+			print e, "is not set in the environment"
+			raise ValueError
+				
+	return item
+
+# Utility functions ###########################################################
+
+
+
+def where(input_file):
+	"""Search for 'input_file' in the system path"""
+	locations = []
+	if sys.platform.startswith("win"):
+		if not input_file.lower().endswith(".exe"):
+			input_file += ".exe"
+			for current_file in [loop_number + "\\" + input_file for loop_number in
+					     os.environ["PATH"].split(";")]:
+				try:
+					stat = os.stat(current_file)
+					locations.append(current_file)
+				except OSError, error:
+					pass
+	else:
+		(comIn, comOut) = os.popen4("which " + input_file)
+		output = comOut.read()
+		if len(output) > 0:
+			locations.append(output[0:(len(output) - 1)])
+				
+	if len(locations) == 0:
+		print "Error: " + input_file + " not defined in PATH environment variable"
+	else:
+		return locations[0]
+	
+def clean_epocroot():
+	"""
+	This method walks through epocroot and cleans every file and folder that is
+	not present in the manifest file
+	"""
+	all_files = {} # dictionary to hold all files
+	folders = [] # holds all unique folders in manifest
+	try:
+		mani = "./epocroot/manifest"
+		manifest = open(ReplaceEnvs(mani), "r")
+		# This is a fast algorithm to read the manifest file
+		while 1:
+            # The file is close to 3000 lines.
+            # If this value changes, increment the number to include all lines
+			lines = manifest.readlines(3000)
+			if not lines:
+				break
+			for line in lines:
+				# Get rid of newline char and add to dictionary
+				all_files[line.rstrip("\n")] = True
+				# This bit makes a record of unique folders into a list
+				end = 0
+				while end != -1: # Look through the parent folders
+					end = line.rfind("/")
+					line = line[:end]
+					if line not in folders:
+						folders.append(line)
+		# This algorithm walks through epocroot and handles files and folders
+		walkpath = "./epocroot"
+		for (root, dirs, files) in os.walk(ReplaceEnvs(walkpath), topdown =
+				False):
+			# This loop handles all files
+			for name in files:
+				name = os.path.join(root, name).replace("\\", "/")
+				name = name.replace("./epocroot/", "./")
+								
+				if name not in all_files:
+					try:
+						name = ReplaceEnvs(name.replace("./", "./epocroot/"))
+						os.remove(name)
+					except:
+						# chmod to rw and try again
+						try:
+							os.chmod(name, stat.S_IRWXU)
+							os.remove(name)
+						except:							
+							print "\nEPOCROOT-CLEAN ERROR:"
+							print (sys.exc_type.__name__ + ":"), \
+									sys.exc_value, "\n", \
+									traceback.print_tb(sys.exc_traceback)
+									
+			# This loop handles folders
+			for name in dirs:
+				name = os.path.join(root, name).replace("\\", "/")
+				name = name.replace("./epocroot/", "./")
+				if name not in all_files and name not in folders:
+					# Remove the folder fully with no errors if full
+					try:
+						rmtree(ReplaceEnvs(name.replace("./", "./epocroot/")))
+					except:
+						print "\nEPOCROOT-CLEAN ERROR:"
+						print (sys.exc_type.__name__ + ":"), \
+								sys.exc_value, "\n", \
+								traceback.print_tb(sys.exc_traceback)
+	except IOError,e:
+		print e
+
+def fix_id(input_id):
+	return input_id.zfill(4)
+	
+# Test classes ################################################################
+
+class SmokeTest(object):
+	"""Base class for Smoke Test objects.
+	
+	Each test is defined (minimally) by,
+	1) a raptor command-line
+	2) a list of target files that should get built
+
+	The run() method will,
+	1) delete all the listed target files
+	2) execute the raptor command
+	3) check that the target files were created
+	4) count the warnings and errors reported
+	"""
+	
+	PASS = "pass"
+	FAIL = "fail"
+	SKIP = "skip"	
+
+	def __init__(self):
+		
+		self.id = 0
+		self.name = "smoketest"
+		self.description = ""
+		self.command = "sbs --do_what_i_want"
+		self.targets = []
+		self.missing = 0
+		self.warnings = 0
+		self.errors = 0
+		self.exceptions = 0
+		self.returncode = 0
+
+		self.onWindows = sys.platform.startswith("win")
+
+		# These variables are for tests that treat the text as a list of lines. In
+		# particular, "." will not match end-of-line. This means that, for example,
+		# "abc.*def" will only match if "abc" and "def" appear on the same line.
+		self.mustmatch = []
+		self.mustnotmatch = []
+		self.mustmatch_singleline = []
+		self.mustnotmatch_singleline = []
+		
+		# These variables are for tests that treat the text as a single string of
+		# characters. The pattern "." will match anything, including end-of-line.
+		self.mustmatch_multiline = []
+		self.mustnotmatch_multiline = []
+		
+		self.countmatch = []
+
+		self.outputok = True
+		self.usebash = False
+		self.failsbecause = None
+		self.result = SmokeTest.SKIP
+		self.environ = {} # Allow tests to set the environment in which commands run.
+		self.sbs_build_dir = "$(EPOCROOT)/epoc32/build"
+
+	def run(self, platform = "all"):
+		previousResult = self.result
+		self.id = fix_id(self.id)
+		try:
+			if self.runnable(platform):
+				
+				if not self.pretest():
+					self.result = SmokeTest.FAIL
+				
+				elif not self.test():
+					self.result = SmokeTest.FAIL
+				
+				elif not self.posttest():
+					self.result = SmokeTest.FAIL
+				
+				else:
+					self.result = SmokeTest.PASS
+			else:
+				self.skip(platform)
+		except Exception, e:
+			print e
+			self.result = SmokeTest.FAIL
+		
+		# print the result of this run()
+		self.print_result(True)
+		
+		# if a previous run() failed then the overall result is a FAIL
+		if previousResult == SmokeTest.FAIL:
+			self.result = SmokeTest.FAIL
+	
+	def print_result(self, internal = False, value = ""):
+		# the test passed :-)
+		
+		result = self.result
+		
+		if value != "":
+			print value
+		else:
+			string = ""
+			if not internal:
+				string += "\n" + self.name + ": "
+			if result == SmokeTest.PASS:
+				string += "PASSED"
+			elif result == SmokeTest.FAIL:
+				string += "FAILED"
+			
+			print string 
+	
+	def runnable(self, platform):
+		# can this test run on this platform?	
+		if platform == "all":
+			return True
+		
+		isWin = self.onWindows
+		wantWin = platform.startswith("win")
+		
+		return (isWin == wantWin)
+
+	def skip(self, platform):
+		print "\nSKIPPING:", self.name, "for", platform
+
+	def logfileOption(self):
+		return "-f " + self.logfile();
+	
+	def logfile(self):
+		return logDir + "/" + self.name + ".log"
+	
+	def makefileOption(self):
+		return "-m " + self.makefile();
+	
+	def makefile(self):
+		return logDir + "/" + self.name + ".mk"
+
+	def removeFiles(self, files):
+		for t in files:
+			tgt = os.path.normpath(ReplaceEnvs(t))
+
+			if os.path.exists(tgt):
+				try:
+					os.chmod(tgt, stat.S_IRWXU)
+					if os.path.isdir(tgt):
+						rmtree(tgt)
+					else:
+						os.remove(tgt)
+				except OSError:
+					print "Could not remove", tgt, "before the test"
+					return False
+		return True
+
+
+	def clean(self):
+		# remove all the target files
+
+		# flatten any lists first (only 1 level of flattenening expected)
+		# these indicate alternative files - one of them will exist after a build
+		removables = []
+		for i in self.targets:
+			if type(i) is not list:
+				removables.append(i)
+			else:
+				removables.extend(i)
+				
+		return self.removeFiles(removables)
+
+	def pretest(self):
+		# what to do before the test runs
+		
+		print "\nID:", self.id
+		print "TEST:", self.name
+
+		return self.clean()
+			
+	def test(self):
+		# run the actual test
+		
+		# put the makefile and log in $EPOCROOT/build/smoketestlogs
+		if self.usebash:
+			command = ReplaceEnvs(self.command)
+		else:
+			command = ReplaceEnvs(self.command + 
+					" " + self.makefileOption() + 
+					" " + self.logfileOption())
+	
+		print "COMMAND:", command
+
+
+		# Any environment settings specific to this test
+		shellenv = os.environ.copy()
+		for ev in self.environ:
+			shellenv[ev] = self.environ[ev]	
+
+		if self.usebash:
+			shellpath = shellenv['PATH']
+			if self.onWindows:
+				if 'SBS_CYGWIN' in shellenv:
+					shellpath = ReplaceEnvs("$(SBS_CYGWIN)/bin") + ";" + shellpath
+					BASH=ReplaceEnvs("$(SBS_CYGWIN)/bin/bash.exe")
+				else:
+					shellpath = ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin") + ";" + shellpath
+					BASH=ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin/bash.exe")
+			else:
+				BASH=ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/bash")
+
+			shellenv['SBSMAKEFILE']=ReplaceEnvs(self.makefile())
+			shellenv['SBSLOGFILE']=ReplaceEnvs(self.logfile())
+			shellenv['PATH']=shellpath
+			shellenv['PYTHON_HOME'] = ""
+			shellenv['CYGWIN']="nontsec nosmbntsec"
+
+			p = subprocess.Popen(args=[BASH, '-c', command], 
+					stdout=subprocess.PIPE,
+					stderr=subprocess.STDOUT,
+					env=shellenv,
+					shell=False,
+					universal_newlines=True)
+
+			self.output = p.communicate()[0]
+		else:
+			p = subprocess.Popen(command, 
+					stdout=subprocess.PIPE,
+					stderr=subprocess.STDOUT,
+					env=shellenv,
+					shell=True,
+					universal_newlines=True)
+
+			self.output = p.communicate()[0]
+
+		if debug_mode_active:
+			print self.output
+
+		if p.returncode != self.returncode:
+			print "RETURN: got", p.returncode, "expected", self.returncode
+			return False
+			
+		return True
+	
+	def posttest(self):
+		# what to do after the test has run
+	
+		# count the targets that got built
+		found = 0
+		missing = []
+		for t in self.targets:
+			if type(t) is not list:
+				target_alternatives=[t]
+
+			found_flag = False	
+			for alt in target_alternatives:
+				tgt = os.path.normpath(ReplaceEnvs(alt))
+				if os.path.exists(tgt):
+					found_flag = True
+					break
+			if found_flag:
+				found += 1
+			else:
+				missing.append(tgt)
+	
+		# count the errors and warnings
+		warn = 0
+		error = 0
+		exception = 0
+		lines = self.output.split("\n")
+	
+		for line in lines:
+			if line.find("sbs: warning:") != -1 or line.find("<warning") != -1:
+				warn += 1
+			elif line.find("sbs: error:") != -1 or line.find("<error") != -1:
+				error += 1
+			elif line.startswith("Traceback"):
+				exception += 1
+
+		# Check the output for required, forbidden and counted regexp matches
+		self.outputok = True
+		
+		for expr in self.mustmatch_singleline + self.mustmatch:
+			if not re.search(expr, self.output, re.MULTILINE):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output did not match: %s" % expr
+
+		for expr in self.mustnotmatch_singleline + self.mustnotmatch:
+			if re.search(expr, self.output, re.MULTILINE):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output should not have matched: %s" % expr
+
+		for expr in self.mustmatch_multiline:
+			if not re.search(expr, self.output, re.DOTALL):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output did not match: %s" % expr
+
+		for expr in self.mustnotmatch_multiline:
+			if re.search(expr, self.output, re.DOTALL):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output should not have matched: %s" % expr
+
+		for (expr,num) in self.countmatch:
+			expr_re = re.compile(expr)
+			matchnum = len(expr_re.findall(self.output))
+			if  matchnum != num:
+				print "OUTPUTMISMATCH: %d matches occurred when %d were expected: %s" % (matchnum, num, expr)
+				self.outputok = False
+
+		# Ignore errors/warnings if they are set to (-1)
+		if self.errors == (-1):
+			self.errors = error
+		if self.warnings == (-1):
+			self.warnings= warn
+
+		# all as expected?
+		if  self.missing == len(missing) \
+				and self.warnings == warn \
+				and self.errors == error \
+				and self.exceptions == exception \
+				and self.outputok:
+			return True
+	
+		# something was wrong :-(
+	
+		if len(missing) != self.missing:
+			print "MISSING: %d, expected %s" % (len(missing), self.missing)
+			for file in missing:
+				print "\t%s" % (file)
+			
+		if warn != self.warnings:
+			print "WARNINGS: %d, expected %d" % (warn, self.warnings)
+		
+		if error != self.errors:
+			print "ERRORS: %d, expected %d" % ( error, self.errors)
+		
+		if exception != self.exceptions:
+			print "EXCEPTIONS: %d, expected %d" % (exception, self.exceptions)
+		
+		return False
+	
+	def addbuildtargets(self, bldinfsourcepath, targetsuffixes):
+		"""Add targets that are under epoc32/build whose path
+		can change based on an md5 hash of the path to the bld.inf.
+		"""
+
+		fragment = BldInfFile.outputPathFragment(bldinfsourcepath)
+
+		for t in targetsuffixes:
+			if type(t) is not list:
+				newt=self.sbs_build_dir+'/'+fragment+"/"+t
+				self.targets.append(newt)
+			else:
+				self.targets.append([self.sbs_build_dir+'/'+fragment+"/"+x for x in t])
+		return 
+
+# derived class for tests that invoke some process, which have no log file and no makefile
+# e.g. unit tests
+
+class GenericSmokeTest(SmokeTest):
+	
+	def __init__(self):
+		SmokeTest.__init__(self)
+
+	def logfileOption(self):
+		return ""
+	
+	def makefileOption(self):
+		return ""
+	
+	def posttest(self):
+		# dump the standard output to a log file
+		dir = ReplaceEnvs(logDir)
+		logfile = os.path.join(dir, self.name + ".log")
+		try:
+			if not os.path.exists(dir):
+				os.makedirs(dir)
+			file = open(logfile, "w")
+			file.write(self.output)
+			file.close()
+		except:
+			print "Could not save stdout in", logfile
+			return False
+		
+		# do the base class things too
+		return SmokeTest.posttest(self)
+	
+# derived class for --check, --what and .whatlog tests - these all write to stdout, but may
+# not actually build anything
+
+class CheckWhatSmokeTest(SmokeTest):
+	
+	def __init__(self):
+		SmokeTest.__init__(self)
+		
+		# regular expression match object to restrict comparisons to specific lines
+		self.regexlinefilter = None
+		
+		# paths in --what output are tailored to the host OS, hence slashes are converted appropriately
+		# .whatlog output is used verbatim from the build/TEM/EM output
+		self.hostossensitive = True
+	
+	def posttest(self):
+		outlines = self.output.splitlines()
+		
+		ok = True
+		seen = []
+		
+		# check for lines that we expected to see, optionally filtered
+		for line in self.stdout:
+			if self.regexlinefilter and not self.regexlinefilter.match(line):
+				continue
+			line = ReplaceEnvs(line)
+			if self.hostossensitive and self.onWindows:
+					line = line.replace("/", "\\")
+				
+			if line in outlines:
+				seen.append(line)
+			else:
+				print "OUTPUT NOT FOUND:", line
+				ok = False
+		
+		# and check for extra lines that we didn't expect, optionally filtered
+		for line in outlines:
+			if self.regexlinefilter and not self.regexlinefilter.match(line):
+				continue
+			if not line in seen:
+				print "UNEXPECTED OUTPUT:", line
+				ok = False
+			
+		# do the base class things too
+		return (SmokeTest.posttest(self) and ok)	
+
+# derived class for tests that also need to make sure that certain files
+# are NOT created - sort of anti-targets.
+
+class AntiTargetSmokeTest(SmokeTest):
+
+	def __init__(self):
+		SmokeTest.__init__(self)
+		self.antitargets = []
+
+	def pretest(self):
+		""" Prepare for the test """
+		# parent pretest first 
+		ok = SmokeTest.pretest(self)
+		
+		# remove all the anti-target files
+		return (self.removeFiles(self.antitargets) and ok)
+	
+	def posttest(self):
+		""" look for antitargets """
+		ok = True
+		for t in self.antitargets:
+			tgt = os.path.normpath(ReplaceEnvs(t))
+			if os.path.exists(tgt):
+				print "UNWANTED", tgt
+				ok = False
+				
+		# do the base class things too
+		return (SmokeTest.posttest(self) and ok)
+	
+	def addbuildantitargets(self, bldinfsourcepath, targetsuffixes):
+		"""Add targets that are under epoc32/build whose path
+		can change based on an md5 hash of the path to the bld.inf.
+		"""
+
+		fragment = BldInfFile.outputPathFragment(bldinfsourcepath)
+
+		for t in targetsuffixes:
+			if type(t) is not list:
+				newt="$(EPOCROOT)/epoc32/build/"+fragment+"/"+t
+				self.antitargets.append(newt)
+			else:
+				self.antitargets.append(["$(EPOCROOT)/epoc32/build/"+fragment+"/"+x for x in t])
+		return
+	
+# the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/common/run_tests.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,514 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Runs the specified suite of raptor tests
+
+import os
+import sys
+import re
+import imp
+import datetime
+import traceback
+raptor_tests = imp.load_source("raptor_tests", "common/raptor_tests.py")
+
+# Command line options ########################################################
+from optparse import OptionParser
+
+parser = OptionParser(
+		prog = "run",
+		usage = "%prog [Options]")
+
+parser.add_option("-u", "--upload", action = "store", type = "string",
+		dest = "upload", default = None,
+		help = "Path for uploading results (Can be UNC path)")
+parser.add_option("-b", "--branch", action = "store", type = "choice",
+		dest = "branch", choices = ["master", "m", "fix", "f", "wip", "w"],
+		help = "string indicating which branch is being tested:\n" + \
+		"master, fix or wip. Default is 'fix'")
+parser.add_option("-s", "--suite", action = "store", type = "string",
+		dest = "suite", help = "regex to use for selecting test suites")
+parser.add_option("-t", "--tests", action = "store", type = "string",
+		dest = "tests", help = "regex to use for selecting tests")
+parser.add_option("-d", "--debug", action = "store_true", dest = "debug_mode",
+		default = False, help = "Turns on debug-mode")
+parser.add_option("--test-home", action = "store", type = "string",
+		dest = "test_home",
+		help = "Location of custom .sbs_init.xml (name of directory in " +
+		"'custom_options'): test/custom_options/<test_home>/.sbs_init.xml")
+parser.add_option("--what-failed", action = "store_true", dest = "what_failed",
+		help = "Re-run all the tests that failed in the previous test run")
+parser.add_option("--clean", action = "store_true", dest = "clean",
+		help = "Clean EPOCROOT after each test is run")
+
+
+(options, args) = parser.parse_args()
+
+# Check for --what-failed and override '-s' and '-t' (including flagless regex)
+if options.what_failed:
+	try:
+		what_failed_file = open("what_failed", "r")
+		what_failed = what_failed_file.readline()
+		what_failed_file.close()
+		print "Running: run " + what_failed
+		
+		first = what_failed.find('"')
+		second = what_failed.find('"', (first + 1))
+		options.suite = what_failed[(first + 1):second]
+		
+		first = what_failed.find('"', (second + 1))
+		second = what_failed.find('"', (first + 1))
+		options.tests = what_failed[(first + 1):second]
+	except:
+		# If no file exists, nothing failed, so run as usual
+		pass
+
+# Allow flagless test regex
+if (options.tests == None) and (len(args) > 0):
+	options.tests = args[len(args) - 1]
+	
+if options.upload != None:
+	if options.branch != None:
+		if options.branch == "m":
+			branch = "master"
+		elif options.branch == "f":
+			branch = "fix"
+		elif options.branch == "w":
+			branch = "wip"
+		else:
+			branch = options.branch
+	else:
+		print "Warning: Test branch not set - Use " + \
+				"'-b [master|fix|wip]'\n Using default of 'Fix'..."
+		branch = "fix"
+
+if options.debug_mode:
+	raptor_tests.activate_debug()
+
+
+# Set $HOME environment variable for finding a custom .sbs_init.xml 
+if options.test_home != None:
+	home_dir = options.test_home
+	if home_dir in os.listdir("./custom_options"):
+		os.environ["HOME"] = os.environ["SBS_HOME"] + "/test/custom_options/" \
+				+ home_dir + "/"
+	else:
+		print "Warning: Path to custom .sbs_init.xml file not found (" + \
+				home_dir + ")\nUsing defaults..."
+		options.test_home = None
+
+
+def format_milliseconds(microseconds):
+	""" format a microsecond time in milliseconds """
+	milliseconds = (microseconds / 1000)
+	if milliseconds == 0:
+		return "000"
+	elif milliseconds < 10:
+		return "00" + str(milliseconds)
+	elif milliseconds < 100:
+		return "0" + str(milliseconds)
+	return milliseconds
+
+
+
+class TestRun(object):
+	"""Represents any series of tests"""
+	def __init__(self):
+		self.test_set = []
+		self.failed_tests = []
+		self.error_tests = []
+		self.pass_total = 0
+		self.fail_total = 0
+		self.skip_total = 0
+		self.exception_total = 0
+		self.test_total = 0
+		# For --what-failed:
+		self.suites_failed = []
+		self.tests_failed = []
+
+	def aggregate(self, atestrun):
+		""" Aggregate other test results into this one """
+		self.test_set.append(atestrun)
+		self.test_total += len(atestrun.test_set)
+
+	def show(self):
+		for test_set in self.test_set:
+			print "\n\n" + str(test_set.suite_dir) + ":\n"
+			
+			# If a suite has failed/erroneous tests, add it to what_failed
+			if (test_set.fail_total + test_set.exception_total) > 0:
+				self.suites_failed.append(test_set.suite_dir)
+				
+			if len(test_set.test_set) < 1:
+				print "No tests run"
+			else:
+				print "PASSED: " + str(test_set.pass_total)
+				print "FAILED: " + str(test_set.fail_total)
+				if test_set.skip_total > 0:
+					print "SKIPPED: " + str(test_set.skip_total)
+				if test_set.exception_total > 0:
+					print "EXCEPTIONS: " + str(test_set.exception_total)
+		
+				if test_set.fail_total > 0:
+					print "\nFAILED TESTS:"
+					
+					# Add each failed test to what_failed and print it
+					for test in test_set.failed_tests:
+						self.tests_failed.append("^" + test + ".py")
+						print "\t", test
+		
+				if test_set.exception_total > 0:
+					print "\nERRONEOUS TESTS:"
+					
+					# Add each erroneous test to what_failed and print it
+					for test in test_set.error_tests:
+						first = test.find("'")
+						second = test.find("'", (first + 1))
+						self.tests_failed.append("^" +
+								test[(first + 1):second] + ".py")
+						print "\t", test
+						
+	def what_failed(self):
+		"Create the file for --what-failed if there were failing tests"
+		if len(self.suites_failed) > 0:
+			self.what_failed = open("what_failed", "w")
+			# Add the suites and tests to the file as command-line options
+			self.what_failed.write('-s "')
+			loop_number = 0
+			for suite in self.suites_failed:
+				loop_number += 1
+				self.what_failed.write(suite)
+				
+				# If this is not the last suite, prepare to add another
+				if loop_number < len(self.suites_failed):
+					self.what_failed.write("|")
+					
+			self.what_failed.write('" -t "')
+			loop_number = 0
+			for test in self.tests_failed:
+				loop_number += 1
+				self.what_failed.write(test)
+				
+				# If this is not the last test, prepare to add another
+				if loop_number < len(self.tests_failed):
+					self.what_failed.write("|")
+			self.what_failed.write('"')
+			self.what_failed.close()
+			
+		else:
+			# If there were no failing tests this time, remove any previous file
+			try:
+				os.remove("what_failed")
+			except:
+				try:
+					os.chmod("what_failed", stat.S_IRWXU)
+					os.remove("what_failed")
+				except:
+					pass
+					
+
+class Suite(TestRun):
+	"""A test suite"""
+
+	python_file_regex = re.compile("(.*)\.py$", re.I)
+
+	def __init__(self, dir, parent):
+		TestRun.__init__(self)
+		self.suite_dir = dir
+
+		# Upload directory (if set)
+		self.upload_location = parent.upload_location
+
+		# Regex for searching for tests
+
+		self.test_file_regex = parent.test_file_regex
+		self.test_pattern = parent.testpattern
+		
+
+	def run(self):
+		"""run the suite"""
+
+		self.time_stamp = datetime.datetime.now()
+		self.results = {}
+		self.start_times = {}
+		self.end_times = {}
+		
+		print "\n\nRunning " + str(self.suite_dir) + "..."
+
+		# Iterate through all files in specified directory
+		for test in os.listdir(self.suite_dir):
+			# Only check '*.py' files
+			name_match = self.python_file_regex.match(test)
+			if name_match is not None:
+				if self.test_file_regex is not None:
+					# Each file that matches -t input is imported if any
+					name_match = self.test_file_regex.match(test)
+				else:
+					name_match = 1
+				if name_match is not None:
+					import_name = test[:-3]
+					try:
+						self.test_set.append(imp.load_source(import_name,
+								(raptor_tests.ReplaceEnvs(self.suite_dir
+								+ "/" + test))))
+					except:
+						print "\n", (sys.exc_type.__name__ + ":"), \
+								sys.exc_value, "\n", \
+								traceback.print_tb(sys.exc_traceback)
+	
+		test_number = 0
+		test_total = len(self.test_set)
+		if test_total < 1:
+			print "No tests in suite "+self.suite_dir+" matched by specification '"+self.test_pattern+"' (regex: /.*"+self.test_pattern+".*/)\n";
+		# Run each test, capturing all its details and its results
+		for test in self.test_set:
+			test_number += 1
+			# Save start/end times and save in dictionary for TMS
+			start_time = datetime.datetime.now()
+			try:
+				print "\n\nTEST " + str(test_number) + "/" + \
+						str(test_total) + ":\n",
+				test_object = test.run()
+				
+				end_time = datetime.datetime.now()
+				
+				# Add leading 0s
+				test_object.id = raptor_tests.fix_id(test_object.id)
+
+				# No millisecond function, so need to use microseconds/1000
+				start_milliseconds = start_time.microsecond
+				end_milliseconds = end_time.microsecond
+		
+				# Add trailing 0's if required
+				start_milliseconds = \
+						format_milliseconds(start_milliseconds)
+				end_milliseconds = \
+						format_milliseconds(end_milliseconds)
+		
+				self.start_times[test_object.id] = \
+						start_time.strftime("%H:%M:%S:" +
+						str(start_milliseconds))
+				self.end_times[test_object.id] = \
+						end_time.strftime("%H:%M:%S:" + \
+						str(end_milliseconds))
+				
+				run_time = (end_time - start_time)
+				
+				run_time_seconds = (str(run_time.seconds) + "." + \
+						str(format_milliseconds(run_time.microseconds)))
+				print ("RunTime: " + run_time_seconds + "s")
+				# Add to pass/fail count and save result to dictionary
+				if test_object.result == raptor_tests.SmokeTest.PASS:
+					self.pass_total += 1
+					self.results[test_object.id] = "Passed"
+				elif test_object.result == raptor_tests.SmokeTest.FAIL:
+					self.fail_total += 1
+					self.results[test_object.id] = "Failed"
+					self.failed_tests.append(test_object.name)
+				elif test_object.result == raptor_tests.SmokeTest.SKIP:
+					self.skip_total += 1
+				# Clean epocroot after running each test if --clean option is specified
+				if options.clean:
+					print "\nCLEANING TEST RESULTS..."
+					raptor_tests.clean_epocroot()
+					
+			except:
+				print "\nTEST ERROR:"
+				print (sys.exc_type.__name__ + ":"), \
+						sys.exc_value, "\n", \
+						traceback.print_tb(sys.exc_traceback)
+				self.exception_total += 1
+				self.error_tests.append(str(self.test_set[test_number - 1]))
+				
+		if self.upload_location != None:
+			self.create_csv()
+
+		end_time_stamp = datetime.datetime.now()
+			
+		runtime = end_time_stamp - self.time_stamp
+		seconds = (str(runtime.seconds) + "." + \
+				str(format_milliseconds(runtime.microseconds)))
+		if options.upload:
+			self.create_tri(seconds)
+
+		print ("\n" + str(self.suite_dir) + " RunTime: " + seconds + "s")
+
+	def create_csv(self):
+		"""
+		This method will create a CSV file with the smoke test's output
+				in order to successfully upload results to TMS QC
+		"""
+		
+		# This sorts the dictionaries by their key values (Test IDs)
+		id_list = run_tests.sort_dict(self.results)
+		
+		self.test_file_name = (self.suite_dir + "_" + \
+				self.time_stamp.strftime("%Y-%m-%d_%H-%M-%S") + "_" +
+				branch + "_results.csv")
+		# This is the path for file-creation on the server. Includes
+		self.test_path = (self.upload_location + "/csv/" + self.suite_dir + "/"
+				+ self.test_file_name)
+		
+		try:
+		
+			if not os.path.isdir(self.upload_location + "/csv/" +
+					self.suite_dir):
+				os.makedirs(self.upload_location + "/csv/" + self.suite_dir)
+
+			csv_file = \
+					open(raptor_tests.ReplaceEnvs(os.path.normpath(self.test_path)),
+					"w")
+			csv_file.write("TestCaseID,StartTime,EndTime,Result\n")
+			
+			for test_id in id_list:
+				csv_file.write("PCT-SBSV2-" + self.suite_dir + "-" + test_id + \
+						"," + str(self.start_times[test_id]) + "," + \
+						str(self.end_times[test_id]) + "," + \
+						self.results[test_id] + "\n")
+			csv_file.close()
+			
+		except OSError, e:
+			print "SBS_TESTS: Error:", e
+			
+			
+	def create_tri(self, overall_seconds):
+		"""
+		This method will create a TRI (xml) file containing the location of the
+				CSV file in order to successfully upload results to TMS QC
+		"""
+		# Path for the tri file
+		tri_path = (self.upload_location + "/new/" + self.suite_dir + \
+				"_" + self.time_stamp.strftime("%Y-%m-%d_%H-%M-%S") + ".xml")
+		run_name_timestamp = self.time_stamp.strftime(self.suite_dir + \
+				"%Y-%m-%d_%H-%M-%S")
+		date_time_timestamp = self.time_stamp.strftime("%d.%m.%Y %H:%M:%S")
+		test_set_name = "Root\\Product Creation Tools\\Regression\\" + \
+				"SBS v2 (Raptor)\\" + self.suite_dir + "_"
+		if sys.platform.startswith("win"):
+			test_set_name += ("WinXP_" + branch)
+		else:
+			test_set_name += ("Linux_" + branch)
+		
+		# /mnt/ -> // Fixes the difference in paths for lon-rhdev mounts vs. win
+		if not sys.platform.startswith("win"):
+			if self.test_path.startswith("/mnt/"):
+				self.test_path = self.test_path.replace("mnt", "", 1)
+		
+		try:
+			tri_file = \
+					open(raptor_tests.ReplaceEnvs(os.path.normpath(tri_path)), \
+					"w")
+			tri_file.write(
+					"<TestRunInfo>\n" + \
+						"\t<RunName>\n\t\t" + \
+							run_name_timestamp + \
+						"\n\t</RunName>\n" + \
+						"\t<TestGroup>\n" + \
+							"\t\tSBSv2 (Non-SITK)\n" + \
+						"\t</TestGroup>\n" + \
+						"\t<DateTime>\n\t\t" + \
+							date_time_timestamp + \
+						"\n\t</DateTime>\n" + \
+						"\t<RunDuration>\n\t\t" + \
+							overall_seconds + \
+						"\n\t</RunDuration>\n" + \
+						'\t<TestSet name="' + test_set_name + '">\n' + \
+							"\t\t<TestResults>\n\t\t\t" + \
+								self.test_path + \
+							"\n\t\t</TestResults>\n" + \
+						"\t</TestSet>\n" + \
+					"</TestRunInfo>")
+			tri_file.close()
+			print "Tests uploaded to '" + self.upload_location + "' (" + \
+					branch + ")"
+		except OSError, e:
+			print "SBS_TESTS: Error:", e
+
+class SuiteRun(TestRun):
+	""" Represents a 'run' of a number of test suites """
+
+	def __init__(self, suitepattern = None, testpattern = None,
+			upload_location = None):
+		TestRun.__init__(self)
+		
+		# Add common directory to list of paths to search for modules
+		sys.path.append(raptor_tests.ReplaceEnvs("$(SBS_HOME)/test/common"))
+		
+		
+		if suitepattern:
+			self.suite_regex = re.compile(".*" + suitepattern + ".*", re.I)
+		else:
+			self.suite_regex = re.compile(".*\_suite$", re.I)
+
+		if testpattern:
+			self.test_file_regex = re.compile(".*" + testpattern + ".*",
+					re.I)
+		else:
+			self.test_file_regex = None
+
+		self.suitepattern = suitepattern
+		self.testpattern = testpattern
+		self.upload_location = upload_location
+		
+
+
+	def run_tests(self):
+		"""
+		Run all the tests in the specified suite (directory)
+		"""
+	
+		suites = []
+		for dir in os.listdir("."):
+			name_match = self.suite_regex.match(dir)
+			# Each folder that matches the suite pattern will be looked into
+			# Also checks to make sure the found entry is actually a directory
+			if name_match is not None and os.path.isdir(dir):
+				s = Suite(dir, self)
+				s.run()
+				self.aggregate(s)
+				suites.append(dir)
+		
+		# Print which options were used
+		if options.test_home == None:
+			options_dir = "defaults)"
+		else:
+			options_dir = "'" + options.test_home + "' options file)"
+		print "\n(Tests run using %s" %options_dir
+
+		# Summarise the entire test run
+		if self.suitepattern and (self.test_total < 1):
+			print "\nNo suites matched specification '" + self.suitepattern + \
+					"'\n"
+		else:
+			print "Overall summary (%d suites, %d tests):" \
+					%(len(suites), self.test_total)
+			self.show()
+			self.what_failed()
+	        
+
+	def sort_dict(self, input_dict):
+		"""
+		This method sorts values in a dictionary
+		"""
+		keys = input_dict.keys()
+		keys.sort()
+		return keys
+
+
+# Clean epocroot before running tests
+raptor_tests.clean_epocroot()
+run_tests = SuiteRun(suitepattern = options.suite, testpattern = options.tests,
+		upload_location = options.upload)
+run_tests.run_tests()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/arm.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- build configurations for ARM compilers -->
+
+  <var name="ARMV5_BASE">
+    <env name='EPOCROOT'/>
+    <env name='ARMROOT'/>
+
+    <set name='FLMHOME' value='$(SBS_HOME)/lib/flm'/>
+    <set name='TRADITIONAL_PLATFORM' value='ARMV5'/>
+    <set name='VARIANT_CFG' value='$(EPOCROOT)/variant/variant.cfg'/>
+  </var>
+
+  <var name="ARMV5_UDEB" extends="ARMV5_BASE">
+    <append name='ABC' value='abc' />
+    <append name='VARIANT_CFG' value='2' separator='' />
+  </var>
+
+  <var name="ARMV5_UREL" extends="ARMV5_BASE">
+    <prepend name='ABC' value='abc' />
+    <prepend name='VARIANT_CFG' value='' separator='' />
+  </var>
+
+  <var name="MOD1">
+    <set name="X" value="X1"/>
+  </var>
+
+  <var name="MOD2">
+    <set name="X" value="X2"/>
+    <set name="Y" value="Y2"/>
+  </var>
+
+  <group name="ARMV5">
+    <varRef ref="ARMV5_UREL"/>
+    <varRef ref="ARMV5_UDEB"/>
+  </group>
+
+  <alias name="ALIAS_1" meaning="ARMV5_UREL.MOD1"/>
+  <alias name="ALIAS_2" meaning="ARMV5_UDEB.MOD1.MOD2"/>
+
+  <group name="G1">
+    <varRef ref="MOD1"/>
+    <varRef ref="MOD2"/>
+  </group>
+
+  <group name="G2">
+    <varRef ref="ARMV5_UREL" mod="MOD1"/>
+    <varRef ref="ARMV5_UDEB" mod="MOD1.MOD2"/>
+    <aliasRef ref="ALIAS_1"/>
+    <aliasRef ref="ALIAS_2" mod="MOD1.MOD2.MOD1"/>
+    <groupRef ref="ARMV5" mod="MOD2"/>
+    <groupRef ref="G1"/>
+  </group>
+
+  <!-- these are deliberately redefined in user.xml -->
+  
+  <alias name="alias_redef" meaning="MOD1"/>
+  <group name="group_redef"><varRef ref="MOD1"/></group>
+  <interface name="interface_redef" abstract="true"/>
+  <var name="var_redef"></var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/default.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+    <!-- The build configurations built by default -->
+
+	<var name="default">
+		<set name="OVER" value="default"/>
+		<varRef ref="A"/>
+		<varRef ref="B"/>
+	</var>
+
+	<var name="baseA">
+		<set name="BASE" value="baseA"/>
+		<set name="OVER" value="baseA"/>
+	</var>
+
+	<var name="A" extends="baseA">
+		<set name="OVER" value="A"/>
+		<varRef ref="A2"/>
+		<varRef ref="A3"/>
+	</var>
+
+	<var name="baseB">
+		<set name="BASE" value="baseB"/>
+		<set name="OVER" value="baseB"/>
+	</var>
+
+	<var name="B" extends="baseB">
+		<set name="OVER" value="B"/>
+		<varRef ref="B2"/>
+		<varRef ref="B3"/>
+	</var>
+
+	<var name="A2">
+		<set name="OVER" value="A2"/>
+	</var>
+
+	<var name="A3">
+		<set name="OVER" value="A3"/>
+	</var>
+
+	<var name="B2">
+		<set name="OVER" value="B2"/>
+	</var>
+
+	<var name="B3">
+		<set name="OVER" value="B3"/>
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/interface.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+    <!-- a base interface -->
+
+	<interface name="Base.XYZ" flm="base.flm">
+		<param name='A'/>
+		<param name='B' default='baseB'/>
+		<param name='C' default='baseC'/>
+    </interface>
+    
+    <!-- extends the base interface -->
+
+	<interface name="Extended.XYZ" extends="Base.XYZ" flm="ext.flm">
+		<param name='D'/>
+		<param name='C' default='extC'/>
+    </interface>
+    
+    <!-- extends the base interface and uses its FLM -->
+
+	<interface name="Extended2.XYZ" extends="Base.XYZ">
+		<param name='D'/>
+		<param name='C' default='extC'/>
+    </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/user.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- user.xml - user configuration file for raptor_data_unit.py test "testUserXmlCfg" -->
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- these are deliberately redefined in arm.xml -->
+  
+  <alias name="alias_redef" meaning="MOD2"/>
+  <group name="group_redef"><varRef ref="MOD2"/></group>
+  <interface name="interface_redef" abstract="true"/>
+  <var name="var_redef"></var>
+</build>
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/makefiles_testrun01.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/testrig01.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 500 1000 2500 5000 10000 15000 20000 25000) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (100 250 500 1000) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (500 1000 2500 5000 10000 15000 20000 25000) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/makefiles_testrun02.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/testrig02.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 200 500 750 1000 1250 1500 1750 2000 2250 2500) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 200 500 750 1000 1250 1500 1750 2000 2250 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/makefiles_testrun03.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/testrig03.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/makefiles_testrun04.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/testrig04.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -c %%c -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/makefiles_testrun05.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/testrig05.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/makefiles_testrun06.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/testrig06.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/makefiles_testrun07.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/testrig07.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/makefiles_testrun08.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/testrig08.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/HowTo.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,96 @@
+HowTo.txt - Copyright 2008 Symbian Software Ltd.
+
+This document describes how to use this test suite for stress-testing Linux-emulation type systems on Windows.
+
+Structure of tests
+==================
+
+The Linux emulation layer tests are structured as follows:
+
+LinuxEmulationLayerStressTests\HowTo.txt (this file)
+LinuxEmulationLayerStressTests\makemakefile.py (described below)
+LinuxEmulationLayerStressTests\mingw.tar.bz2
+LinuxEmulationLayerStressTests\msys.tar.bz2
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\makefiles_testrun01.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\testrig01.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\makefiles_testrun02.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\testrig02.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\makefiles_testrun03.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\testrig03.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\makefiles_testrun04.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\testrig04.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\makefiles_testrun05.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\testrig05.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\makefiles_testrun06.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\testrig06.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\makefiles_testrun07.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\testrig07.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\makefiles_testrun08.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\testrig08.bat
+LinuxEmulationLayerStressTests\src\msys-sed-4.1.5-src.tar.gz
+
+Each test run has its makefiles preserved in the corresponding zip file (e.g. makefiles_testrun01.zip). 
+
+The testrigNN.bat are very basic batch scripts that do not take any parameters. They are simply there as a 
+bootstrap to 
+
+1) Set the PATH to contain either MSYS's or Cygwin's bin folder (but not both!) 
+2) Set the PATH to contain MinGW's bin folder (for MinGW's make)
+3) Generate the makefiles in a number of for-loops (optional)
+4) Run the make over the makefiles in a number of for-loops
+
+In future, if any of these batch files are re-used, it will be necessary to adjust them so that 
+they set the PATH environment variable correctly to contain the place where MSYS or Cygwin 
+was unzipped. Then decide if you wish to generate further makefiles using the Python script,
+or if it's just enough to run the existing makefiles.
+
+For convenience, both MSYS and Cygwin are provided in the files
+
+LinuxEmulationLayerStressTests\mingw.tar.bz2
+LinuxEmulationLayerStressTests\msys.tar.bz2
+
+These are the versions that were tested and were shipped with SBSv2. Simply untar to a convenient
+location and update the batch files bootstraps to add these to your PATH.
+
+makemakefile.py
+===============
+
+This script, as its name suggests, makes a range of makefiles. Use the command
+
+python makemakefile.py -h
+
+to see a list of available options. At time of writing, the usage help is as follows:
+
+Usage: makemakefile.py [options]
+
+Options:
+  -h, --help            show this help message and exit
+  -t TARGETS, --targets=TARGETS
+                        Number of main (or "level1") targets to generate -
+                        these are the targets that actually perform some
+                        simulated actions.
+  -d DIVISIONS, --divisions=DIVISIONS
+                        The number of "level2" targets. Each level2 target
+                        will depend on t/d level1 targets. This makes makefile
+                        generation more logical.
+  -m MAKEFILE, --makefile=MAKEFILE
+                        Name of makefile to generate. If blank, makefile is
+                        printed to STDOUT.
+  -c CASE, --case=CASE  Type of commands to use in each rule. Default is
+                        "all"; other options are "env", "echo", "cp" and "sed"
+
+
+
+The -t option specifies total the number of makefile targets. This should be a positive integer. 
+
+The -d option specifies total the number of subdivisions of the makefile targets into level1/level2 targets. 
+This should be a positive integer. 
+
+The makefiles are structured in such as way, so that the dependency tree has three levels. The aim is to 
+introduce some complexity into the makefile's dependency tree rather than just having a "flat" dependency tree. 
+The top level in the dependency tree contains only one target called "main"; below this are the level2 targets
+which are all prerequisites of main; lastly are the level1 targets which split into groups and each group is 
+the set of prerequisites for a level2 target.
+
+The size of these groups of level1 targets is <= DIVISIONS depending if DIVISIONS divides into TARGETS exactly or not. 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/makemakefile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,152 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#! python
+
+import optparse
+import sys
+
+def writeline(line, filehandle):
+	"""Assumes filehandle has a write method and that line is a string; 
+	Calls the filehandle's write method with line as an argument. Note:
+	filehandle can be STDOUT or STDERR or a real file. The client code
+	should take care of the creation of the filehandle object"""
+	print >> filehandle, line,
+
+def info(arg, filehandle):
+	writeline("# INFO: " + str(arg), filehandle)
+
+def warning(arg, filehandle):
+	writeline("# WARNING: " + str(arg), filehandle)
+
+def error(arg, filehandle):
+	writeline("# ERROR: " + str(arg), filehandle)
+
+# Get the command line options
+parser = optparse.OptionParser()
+parser.add_option("-t", "--targets", type="int", dest="targets",   
+				  help="Number of main (or \"level1\") targets to generate - these are the targets " + \
+				  "that actually perform some simulated actions.")
+parser.add_option("-d", "--divisions", type="int", dest="divisions", 
+				  help="The number of \"level2\" targets. Each level2 target will depend on " + \
+				  "t/d level1 targets. This makes makefile generation more logical.")
+parser.add_option("-m", "--makefile", dest="makefile", 
+				  help="Name of makefile to generate. If blank, makefile is printed to STDOUT.")
+parser.add_option("-c", "--case", dest="case", 
+				  help="Type of commands to use in each rule. Default is \"all\"; other options are " + \
+				  "\"env\", \"echo\", \"cp\" and \"sed\"")
+
+(options, args) = parser.parse_args()
+
+makefile = options.makefile
+makefilefh = None
+# Open the makefile if possible. Note, all info, warnings and errors 
+# will appear in the makefile as comments.
+if makefile != None:
+	try:
+		makefilefh = open(makefile, "w")
+	except:
+		makefile = None
+		makefilefh = None
+		error("Failed to open " + makefile + ". STDOUT will be used instead.", makefilefh)
+
+info("Auto-generated makefile for stress-testing.\n\n", makefilefh)
+
+if options.targets == None:
+	error("Missing option \"targets\". Please ensure you have specified the number of targets required.\n\n", makefilefh)
+	sys.exit(2)
+
+if options.divisions == None:
+	info("Missing option \"divisions\". Defaulting to 1.\n\n", makefilefh)
+	options.divisions = 1
+
+# Commands to use in the main "worker" rules
+command_env = "echo Echoing PATH from $@ in a subshell; (echo PATH=$$PATH;)"
+command_echo_1 = "echo This is rule $@; echo PATH=$$PATH && echo TMP=$$TMP;"
+command_echo_2 = "echo Echoing PATH from $@ in a subshell; (echo PATH=$$PATH;)"
+command_echo_3 = "echo Echoing PATH from $@ in a subshell; (echo Another subshell; (echo PATH=$$PATH;))"
+command_cp_1 = "cp -f junk_file junk_file_copy_1_$@"
+command_cp_2 = "cp -f junk_file junk_file_copy_2_$@"
+command_cp_3 = "cp -f junk_file junk_file_copy_3_$@"
+command_cp_4 = "cp -f junk_file junk_file_copy_4_$@"
+command_sed_1 = "echo asdfsdf-----asdfasdfasdf-.txt | sed 's!.*-----!!g';"
+command_sed_2 = "echo 'ssss:33 x' | sed 's!.*:[0-9][0-9] *!!g'"
+
+# Default command list
+command_list = []
+
+if options.case == "env":
+	command_list = [command_env]
+elif options.case == "echo":
+	command_list = [command_echo_1, command_echo_2, command_echo_3]
+elif options.case == "cp":
+	command_list = [command_cp_1, command_cp_2, command_cp_3, command_cp_4]
+elif options.case == "sed":
+	command_list = [command_sed_1, command_sed_2]
+elif options.case in ["all", None]:
+	command_list = [command_env, 
+				    command_echo_1, command_echo_2, command_echo_3, 
+				    command_cp_1, command_cp_2, command_cp_3, command_cp_4, 
+				    command_sed_1, command_sed_2]
+else:
+	error("Unknown option for \"case\" option: %s. Reverting to defaults..." % (options.case), makefilefh)
+	command_list = [command_env, 
+				    command_echo_1, command_echo_2, command_echo_3, 
+				    command_cp_1, command_cp_2, command_cp_3, command_cp_4, 
+				    command_sed_1, command_sed_2]
+
+# Clean command to delete all the junk copy files
+clean = "rm -f junk_file_copy_*"
+
+total_targets = options.targets
+divisions = options.divisions
+quotient = total_targets/divisions
+remainder = total_targets - quotient*divisions
+
+writeline("main:", makefilefh)
+for i in range(divisions):
+	writeline("level_2_rule_%09d " % (i), makefilefh)
+writeline("\n\n", makefilefh)
+
+for i in range(divisions):
+	writeline("level_2_rule_%09d: " % (i), makefilefh)
+	for j in range(quotient):
+		writeline("level_1_rule_%09d " % (j + i*quotient), makefilefh)
+	writeline("\n\n", makefilefh)
+
+# Generate extra rule for the "remainder" targets
+if remainder > 0:
+	writeline("main:", makefilefh)
+	writeline("level_2_rule_%09d " % (divisions), makefilefh)
+	writeline("\n\n", makefilefh)
+	writeline("level_2_rule_%09d: " % (divisions), makefilefh)	
+	for j in range(total_targets - remainder,total_targets):
+		writeline("level_1_rule_%09d " % (j), makefilefh)
+	writeline("\n\n", makefilefh)
+
+# Generate the level_1_rules - these are the ones that actually
+# execute commands.
+for i in range(total_targets):
+	writeline("level_1_rule_%09d: \n" % (i), makefilefh)
+	for command in command_list:
+		writeline("\t" + command + "\n", makefilefh)
+	writeline("\n\n", makefilefh)
+
+writeline("clean:\n", makefilefh)
+writeline("\t" + clean + "\n", makefilefh)
+writeline("\n", makefilefh)
+
+if makefile != None:
+	makefilefh.close()
\ No newline at end of file
Binary file sbsv2/raptor/test/core_utils/mingw.tar.bz2 has changed
Binary file sbsv2/raptor/test/core_utils/msys.tar.bz2 has changed
Binary file sbsv2/raptor/test/core_utils/src/msys-sed-4.1.5-src.tar.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/custom_options/emake/.sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <!-- defaults for Raptor -->
+
+ <var name="defaults.init">
+   <!-- Make command parameter file -->
+   <set name="makeEngine" value="emake"/>
+ </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/custom_options/rvct31/.sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- make RVCT3.1 the default compiler for ARMV5 -->
+
+	<alias name="armv5_urel" meaning="arm.v5.urel.rvct3_1"/>
+	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct3_1"/>
+	
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/custom_options/rvct40/.sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- make RVCT4.0 the default compiler for ARMV5 and ARMV7 -->
+
+	<alias name="armv5_urel" meaning="arm.v5.urel.rvct4_0"/>
+	<alias name="armv5_udeb" meaning="arm.v5.udeb.rvct4_0"/>
+
+	<alias name="armv7_urel" meaning="arm.v7.urel.rvct4_0"/>
+	<alias name="armv7_udeb" meaning="arm.v7.udeb.rvct4_0"/>
+	
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/custom_options/talon/.sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <var name="defaults.init">
+   <!-- Make command parameter file -->
+   <set name="makeEngine" value="make_talon"/>
+ </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/1quarter.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/2quarter.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' />
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/all_nocompsupp.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,387 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='UNISTORE2_NANDBOOT' name='base_nandboot_unistore2' bldFile='cedar/generic/base/e32utils/nandboot/nandloader/unistore2' />
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+<!--	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' /> -->
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+	<unit unitID='ECAM' name='multimedia_ecam' bldFile='common/generic/MULTIMEDIA/ECAM/GROUP' />
+	<unit unitID='TUNER' name='multimedia_tuner' bldFile='common/generic/MULTIMEDIA/tuner/GROUP' />
+	<unit unitID='WSERV8.1' name='graphics_wserv' bldFile='common/generic/GRAPHICS/Wserv/group' />
+	<unit unitID='OPENGLESDISPLAYPROPERTY' name='graphics_openglesdisplayproperty' bldFile='common/generic/graphics/OpenGLESDisplayProperty/group' />
+	<unit unitID='OPENGLSHEADERS' name='graphics_openglesheaders' bldFile='common/generic/graphics/OpenGLESHeaders/group' />
+	<unit unitID='OPENGLES9.X' name='graphics_opengles' bldFile='common/generic/graphics/OpenGLES/group/' />
+	<unit unitID='PDRSTORE' name='graphics_pdrstore' bldFile='common/generic/GRAPHICS/PDRSTORE/GROUP' />
+	<unit unitID='PRINTDRV' name='graphics_printdrv' bldFile='common/generic/GRAPHICS/PRINTDRV/GROUP' />
+	<unit unitID='ICULAYOUTENGINE' name='graphics_iculayoutengine' bldFile='common/generic/GRAPHICS/iculayoutengine/GROUP' />
+	<unit unitID='FBSERV' name='graphics_fbserv' bldFile='common/generic/GRAPHICS/Fbserv/GROUP' />
+	<unit unitID='FNTSTORE' name='graphics_fntstore' bldFile='common/generic/GRAPHICS/Fntstore/GROUP' />
+	<unit unitID='FREETYPE' name='graphics_freetype' bldFile='common/generic/GRAPHICS/Freetype/GROUP' />
+	<unit unitID='FONTS' name='graphics_fonts' bldFile='common/generic/GRAPHICS/Fonts/GROUP' />
+	<unit unitID='BITGDI' name='graphics_bitgdi' bldFile='common/generic/GRAPHICS/Bitgdi/GROUP' />
+	<unit unitID='GDI' name='graphics_gdi' bldFile='common/generic/GRAPHICS/GDI/GROUP' />
+	<unit unitID='PALETTE' name='graphics_palette' bldFile='common/generic/GRAPHICS/palette/group' />
+	<unit unitID='OPENVGHEADERS' name='graphics_openvgheaders' bldFile='common/generic/graphics/openvgheaders/group' />
+	<unit unitID='OPENVG' name='graphics_openvg' bldFile='common/generic/graphics/OpenVG/group/' />
+	<unit unitID='EGLVGHEADERS' name='graphics_eglheaders' bldFile='common/generic/graphics/eglheaders/group' />
+	<unit unitID='EGL' name='graphics_egl' bldFile='common/generic/graphics/egl/group/' />
+	<unit unitID='LOCATIONFRAMEWORK' name='lbs_locationframework' bldFile='common/generic/lbs/group' />
+	<unit unitID='LBSDATASOURCEPLUGINS' name='lbs_datasourceplugins' bldFile='common/generic/lbs/LbsLocDataSourcePlugins/group' />
+	<unit unitID='CONARC' name='app-framework_conarc' bldFile='common/generic/APP-FRAMEWORK/CONARC/GROUP' />
+	<unit unitID='CHTMLTOCRTCONVERTER' name='app-services_chtmltocrtconv' bldFile='common/generic/APP-SERVICES/CHTMLTOCRTCONV/GROUP' />
+	<unit unitID='CONVERT' name='app-engines_convert' bldFile='common/generic/APP-ENGINES/CONVERT/GROUP' />
+	<unit unitID='RICHTEXTTOHTMLCONV' name='app-services_richtexttohtmlconv' bldFile='common/generic/APP-SERVICES/RICHTEXTTOHTMLCONV/GROUP' />
+	<unit unitID='ETEXT' name='app-framework_etext' bldFile='common/generic/APP-FRAMEWORK/ETEXT/GROUP' />
+	<unit unitID='FORM' name='app-framework_form' bldFile='common/generic/APP-FRAMEWORK/FORM/GROUP' />
+	<unit unitID='ALARMSERVER' name='app-services_alarmserver' bldFile='common/generic/APP-SERVICES/AlarmServer/GROUP' />
+	<unit unitID='HLPMODEL' name='app-services_hlpmodel' bldFile='common/generic/APP-SERVICES/HLPMODEL/GROUP' />
+	<unit unitID='WORLDSERVER' name='app-services_worldserver' bldFile='common/generic/APP-SERVICES/WorldServer/GROUP' />
+	<unit unitID='TZ' name='app-services_tz' bldFile='common/generic/APP-SERVICES/tz/GROUP' />
+	<unit unitID='TIMEZONELOCALIZATION' name='app-services_timezonelocalization' bldFile='common/generic/APP-SERVICES/TimeZoneLocalization/GROUP' />
+	<unit unitID='TZLOCALIZATIONRSCFACTORY' name='app-services_tzlocalizationrscfactory' bldFile='common/generic/APP-SERVICES/TzLocalizationRscFactory/GROUP' />
+	<unit unitID='TZCOMPILER' name='app-services_tzcompiler' bldFile='common/generic/APP-SERVICES/tzcompiler/GROUP' />
+	<unit unitID='TZDB' name='app-services_tzdb' bldFile='common/generic/APP-SERVICES/tzdb/GROUP' />
+	<unit unitID='CONTENT_HANDLING' name='Content-Handling' bldFile='common/generic/Content-Handling/GROUP' />
+	<unit unitID='MSG_GMXML' name='messaging_gmxml' bldFile='common/generic/messaging/gmxml/group' />
+	<unit unitID='RECOGNISERS' name='application-protocols_recognisers' bldFile='common/generic/APPLICATION-PROTOCOLS/RECOGNISERS/GROUP' />
+	<unit unitID='PRINT' name='app-framework_print' bldFile='common/generic/APP-FRAMEWORK/PRINT/GROUP' />
+	<unit unitID='SECURESOFTWAREINSTALL' name='security_swi' bldFile='common/generic/SECURITY/SWI/GROUP' />
+	<unit unitID='SISINSTALLER' name='security_sisinstaller' bldFile='common/generic/SECURITY/SISInstaller/Group' />
+	<unit unitID='JAVAMIDLETINSTALLER' name='security_javaMIDletInstaller' bldFile='common/generic/SECURITY/JavaMIDletInstaller/Group' />
+	<unit unitID='CRYPTOTOKENS' name='security_cryptotokens' bldFile='common/generic/SECURITY/CRYPTOTOKENS/GROUP' />
+	<unit unitID='FILETOKENS' name='security_filetokens' bldFile='common/generic/security/filetokens/group' />
+	<unit unitID='CERTMAN' name='security_certman' bldFile='common/generic/SECURITY/Certman/GROUP' />
+	<unit unitID='TLS' name='networking_tls' bldFile='common/generic/networking/tls/group' />
+	<unit unitID='TLSPROVIDER' name='security_tlsprovider' bldFile='common/generic/security/tlsprovider/group' />
+	<unit unitID='IPSECV2' name='networking_ipsec' bldFile='common/generic/NETWORKING/ipsec/group' />
+	<unit unitID='HTTP' name='application-protocols_http2' bldFile='common/generic/application-protocols/http/protocol/group' />
+	<unit unitID='HTTP' name='application-protocols_http3' bldFile='common/generic/application-protocols/http/examples/testwebbrowser/group' />
+	<unit unitID='HTTP' name='application-protocols_http5' bldFile='common/generic/application-protocols/http/examples/pipeliningconfigfilter/group' />
+	<unit unitID='HTTP' name='application-protocols_http6' bldFile='common/generic/application-protocols/http/examples/cookies/group' />
+	<unit unitID='HTTP' name='application-protocols_http7' bldFile='common/generic/application-protocols/http/examples/uaprof/group' />
+	<unit unitID='HTTP' name='application-protocols_http9' bldFile='common/generic/application-protocols/http/examples/group' />
+	<unit unitID='HTTP' name='application-protocols_http10' bldFile='common/generic/application-protocols/http/transport/group' />
+	<unit unitID='HTTP' name='application-protocols_http12' bldFile='common/generic/application-protocols/http/framework/group' />
+	<unit unitID='WAPPUSH' name='wap-browser_wappush' bldFile='common/generic/WAP-BROWSER/WAPPUSH/GROUP' />
+	<unit unitID='FTP' name='networking_ftp_e' bldFile='common/generic/NETWORKING/ftp_e/group' />
+	<unit unitID='TELNET_E' name='networking_telnet_e' bldFile='common/generic/NETWORKING/TELNET_E/GROUP' />
+	<unit unitID='OBEX' name='obex' bldFile='common/generic/obex/group' />
+	<unit unitID='OBEX_EXTENSIONAPIS' name='obex_extensionapis' bldFile='common/generic/obex/obexextensionapis/group' />
+	<unit unitID='INETPROTUTIL' name='application-protocols_inetprotutil' bldFile='common/generic/APPLICATION-PROTOCOLS/INETPROTUTIL/GROUP' />
+	<unit unitID='INETURILIST' name='application-protocols_ineturilist' bldFile='common/generic/application-protocols/ineturilist/group' />
+	<unit unitID='BOOKMARK_SUPPORT' name='application-protocols_bookmarks' bldFile='common/generic/application-protocols/bookmarks/group' />
+	<unit unitID='BLUETOOTH_AVRCP' name='bluetooth_avrcp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/avrcp' />
+	<unit unitID='BLUETOOTH_ACCESSHOST' name='bluetooth_accesshost' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pbap/group' />
+	<unit unitID='BLUETOOTH_PAN' name='bluetooth_pan' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pan/group' />
+	<unit unitID='WAPMESSAGE' name='wap-stack_wapmessage' bldFile='common/generic/WAP-STACK/WAPMESSAGE/GROUP' />
+	<unit unitID='WAPSTACK' name='WAP Stack Wrapper' bldFile='common/generic/WAP-STACK/WAPSTACK/GROUP' />
+	<unit unitID='MROUTERSECURE' name='mRouterSecure' bldFile='common/generic/connectivity/mRouterSecure/group' />
+	<unit unitID='MROUTER-PLUGIN' name='mRouter-plugin' bldFile='common/generic/connectivity/BAL/Plugins/mRouter3/group' />
+	<unit unitID='PLPVARIANT' name='connectivity_legacy_plp_plpvariant' bldFile='common/generic/connectivity/legacy/plp/PLPVARIANT' />
+	<unit unitID='PLP' name='connectivity_legacy_plp_plpgrp' bldFile='common/generic/connectivity/legacy/plp/PLPGRP' />
+	<unit unitID='BRDCST' name='connectivity_legacy_brdcst' bldFile='common/generic/connectivity/legacy/BRDCST/GROUP' />
+	<unit unitID='MTPUSBSIC' name='mtp_usbsic' bldFile='common/generic/mtp/transports/usbsic/group' />
+	<unit unitID='MTPFRAMEWORK' name='mtp_framework' bldFile='common/generic/mtp/framework/group' />
+	<unit unitID='RTP' name='mm-protocols_rtp' bldFile='common/generic/mm-protocols/rtp/group' />
+	<!-- not including <unit unitID='SIP_COM' name='mm-protocols_sip_com' bldFile='common/generic/mm-protocols/sip/group' /> -->
+	<unit unitID='SIP_COM2' name='mm-protocols_SIP2_Com' bldFile='common/generic/mm-protocols/sip2/group' />
+	<!-- excluding <unit unitID='SIPCPR' name='mm-protocols_SIPCPR' bldFile='common/generic/mm-protocols/ConnProv/SIPCPR/group' /> -->
+	<!-- excluding <unit unitID='SIPDUMMYPRT' name='mm-protocols_SIPDummyPRT' bldFile='common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group' /> -->
+	<!-- excluding <unit unitID='SIPSTATEMACHINE' name='mm-protocols_SipStateMachine' bldFile='common/generic/mm-protocols/SipProvEngine/SipStateMachine/group' /> -->
+	<!-- excluding <unit unitID='SIPPARAMS' name='mm-protocols_SIPParams' bldFile='common/generic/mm-protocols/SubConnProv/SIPParams/group' /> -->
+	<!-- excluding <unit unitID='SIPSCPR' name='mm-protocols_SIPSCPR' bldFile='common/generic/mm-protocols/SubConnProv/SIPSCPR/group' /> -->
+	<unit unitID='GFXTRANSEFFECT' name='app-framework_gfxtranseffect' bldFile='common/generic/app-framework/gfxtranseffect/group' />
+	<unit unitID='EGUL' name='app-framework_egul' bldFile='common/generic/APP-FRAMEWORK/EGUL/GROUP' />
+	<unit unitID='NUMBERCONVERSION' name='app-framework_numberconversion' bldFile='common/generic/APP-FRAMEWORK/NumberConversion/group' />
+	<unit unitID='GRID' name='app-framework_grid' bldFile='common/generic/APP-FRAMEWORK/GRID/GROUP' />
+	<unit unitID='CLOCK' name='app-framework_clock' bldFile='common/generic/APP-FRAMEWORK/CLOCK/GROUP' />
+	<unit unitID='BMPANIM' name='app-framework_bmpanim' bldFile='common/generic/APP-FRAMEWORK/BmpAnim/GROUP' />
+	<unit unitID='ANIMATION' name='app-framework_animation' bldFile='common/generic/APP-FRAMEWORK/animation/group' />
+	<unit unitID='UIKON' name='app-framework_uikon' bldFile='common/generic/APP-FRAMEWORK/UIKON/GROUP' />
+	<unit unitID='UIKLAFGT' name='app-framework_uiklafgt' bldFile='common/generic/APP-FRAMEWORK/UIKLAFGT/GROUP' />
+	<unit unitID='CONE' name='app-framework_cone' bldFile='common/generic/APP-FRAMEWORK/CONE/GROUP' />
+	<unit unitID='FEPBASE' name='app-framework_fepbase' bldFile='common/generic/APP-FRAMEWORK/Fepbase/GROUP' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='VIEWSRV' name='app-framework_viewsrv' bldFile='common/generic/APP-FRAMEWORK/VIEWSRV/GROUP' />
+	<!-- excluding <unit unitID='CALINTERIMAPI' name='app-engines_calinterimapi' bldFile='common/generic/app-engines/calinterimapi/group' /> -->
+	<unit unitID='CALENDAR' name='app-engines_calendar' bldFile='common/generic/app-engines/calendar/group' />
+	<!-- excluding <unit unitID='AGNMODEL' name='app-engines_agnmodel' bldFile='common/generic/APP-ENGINES/AGNMODEL/GROUP' /> -->
+	<!-- excluding <unit unitID='AGNVERSIT' name='app-engines_agnversit' bldFile='common/generic/APP-ENGINES/AgnVersit/GROUP' /> -->
+	<unit unitID='AGNVERSIT2' name='app-engines_agnversit2' bldFile='common/generic/APP-ENGINES/AgnVersit2/GROUP' />
+	<!-- excluding <unit unitID='CNTMODEL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUP' /> -->
+	<unit unitID='CNTMODELSQL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUPSQL' />
+	<unit unitID='PHBKSYNC' name='telephony_phbksync' bldFile='common/generic/TELEPHONY/phbksync/group' />
+	<unit unitID='VERSIT' name='app-services_versit' bldFile='common/generic/APP-SERVICES/VERSIT/GROUP' />
+	<unit unitID='CALCON' name='app-services_calcon' bldFile='common/generic/APP-SERVICES/Calcon/GROUP' />
+	<unit unitID='BACKUPRESTORENOTIFICATION' name='app-services_BackupRestoreNotification' bldFile='common/generic/APP-SERVICES/BACKUPRESTORENOTIFICATION/GROUP' />
+	<unit unitID='DAMODEL' name='app-engines_damodel' bldFile='common/generic/APP-ENGINES/DAMODEL/GROUP' />
+	<unit unitID='SHENG' name='app-engines_sheng' bldFile='common/generic/APP-ENGINES/SHENG/GROUP' />
+	<unit unitID='WPENG' name='app-engines_wpeng' bldFile='common/generic/APP-ENGINES/WPENG/GROUP' />
+	<unit unitID='MSG_FRAMEWORK' name='messaging_framework' bldFile='common/generic/messaging/framework/group' />
+	<unit unitID='MSG_BIOMSG' name='messaging_biomsg' bldFile='common/generic/messaging/biomsg/group' />
+	<unit unitID='MSG_MMS_SETTINGS' name='messaging_mmssettings' bldFile='common/generic/messaging/mmssettings/group/' />
+	<unit unitID='MSG_BIOWATCHERSCDMA' name='messaging_biomsg_biowatchers_cdma' bldFile='common/generic/messaging/biomsg/biowatcherscdma/group' />
+	<unit unitID='MSG_SCHEDULEDSEND' name='messaging_schedulesend' bldFile='common/generic/messaging/schedulesend/group' />
+	<unit unitID='MSG_EMAIL' name='messaging_email' bldFile='common/generic/messaging/email/group' />
+	<unit unitID='MSG_IMAP' name='messaging_email_imap' bldFile='common/generic/messaging/email/imap/group' />
+	<unit unitID='MSG_OBEXMTM' name='messaging_obex' bldFile='common/generic/messaging/obex/group' />
+	<unit unitID='MSG_SMS8.1' name='messaging_sms_multimode' bldFile='common/generic/messaging/sms/multimode/group' />
+	<unit unitID='CONNECTIVITY' name='connectivity' bldFile='common/generic/CONNECTIVITY/GROUP' />
+	<unit unitID='SECUREBACKUPENGINE' name='connectivity_securebackupengine' bldFile='common/generic/connectivity/SecureBackupEngine/group' />
+	<unit unitID='MTPFILEDP' name='mtp_filedp' bldFile='common/generic/mtp/dataproviders/filedp/group' />
+	<unit unitID='SYNCMLCLIENT' name='SyncML' bldFile='common/generic/SyncML/Framework/Group' />
+	<unit unitID='SYNCMLDMCLIENT' name='SyncML_DM' bldFile='common/generic/SyncML/DevMan/Group' />
+	<unit unitID='DEVPROV_DEVMAN_FRAMEWORK' name='devprov_devman_framework' bldFile='common/generic/DEVPROV/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_FRAMEWORK' name='devprov_clientprov_framework' bldFile='common/generic/DEVPROV/ClientProv/Group' />
+	<unit unitID='SYNCMLDSCLIENT' name='SyncML_DS' bldFile='common/generic/SyncML/DataSync/Group' />
+	<unit unitID='DEVPROV_DEVMAN_ADAPTERS' name='devprov_devman_adapters' bldFile='common/generic/DEVPROV/Adapters/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_ADAPTERS' name='devprov_clientprov_adapters' bldFile='common/generic/DEVPROV/Adapters/ClientProv/Group' />
+	<unit unitID='MIDP2INSTALLER_9.2' name='MIDP2INSTALLER' bldFile='common/generic/j2me/systemamsV1_5' />
+	<unit unitID='MemSpy' name='graphics_memspy' bldFile='common/generic/graphics/testutils/memspy/group' />
+	<unit unitID='ASSABET_EKA2' name='base_assabet' bldFile='cedar/generic/BASE/ASSABET' />
+	<unit unitID='INTEGRATORAP_EKA2' name='base_integrator_integratorap' bldFile='cedar/generic/base/integrator/integratorap' />
+	<unit unitID='INTEGRATOR_CORE_EKA2' name='base_integrator_core_8.1b' bldFile='cedar/generic/base/integrator/core' />
+	<unit unitID='INTEGRATOR_CM920_EKA2' name='base_integrator_core_cm920' bldFile='cedar/generic/base/integrator/core/cm920' />
+	<unit unitID='INTEGRATOR_CM1136_EKA2' name='base_integrator_core_cm1136' bldFile='cedar/generic/base/integrator/core/cm1136' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='UI_BENCH' name='graphics_ui_bench' bldFile='common/generic/graphics/ui_bench/group' />
+	<unit unitID='FAX' name='telephony_fax' bldFile='common/generic/TELEPHONY/FAX/GROUP' />
+	<unit unitID='DUMMY' name='additional_dummy' bldFile='common/generic/tools/cbr/dummy' />
+	<unit unitID='BASE_SDIOTESTS' name='base_sdiotests' bldFile='cedar/generic/base/e32utils/sdio' />
+	<unit unitID='E32UTILS_EKA2' name='base_e32utils' bldFile='cedar/generic/BASE/E32Utils/GROUP' />
+	<unit unitID='ERRORRESGT' name='app-framework_errorresgt' bldFile='common/generic/APP-FRAMEWORK/ERRORRESGT/GROUP' />
+	<unit unitID='GDITOOLS' name='graphics_gditools' bldFile='common/generic/GRAPHICS/GDITools/GROUP' />
+	<unit unitID='GDTRAN' name='GDTRAN' bldFile='common/generic/GRAPHICS/GDTran/GROUP' />
+	<unit unitID='INTEGRATIONTEST' name='networking_integrationtest' bldFile='common/generic/NETWORKING/Integrationtest/group' />
+	<unit unitID='MRPTEST' name='mtp_test' bldFile='common/generic/mtp/test/group' />
+	<unit unitID='BASEINTEGRATIONTEST' name='base_integration_test' bldFile='cedar/generic/base_integration_test/group' />
+	<unit unitID='MOBILEIP' name='networking_mobileip' bldFile='common/generic/networking/mobileip/group' />
+	<unit unitID='MSG_SENDAS2' name='messaging_sendas2' bldFile='common/generic/messaging/sendas2/group' />
+	<unit unitID='MSG_TEST' name='messaging_test' bldFile='common/generic/messaging/test/group' />
+	<unit unitID='MSG_URLHANDLER' name='messaging_urlhandler' bldFile='common/generic/messaging/urlhandler/group' />
+	<unit unitID='MVS_APP' name='multimedia_mvs_app' bldFile='common/generic/multimedia/mvs/application/group' />
+	<unit unitID='MVS_AGENTS' name='multimedia_mvs_agents' bldFile='common/generic/multimedia/mvs/agents/group' />
+	<unit unitID='TEMPLATE_EKA2' name='base_template' bldFile='cedar/generic/base/template/template_variant' />
+	<unit unitID='WAPBASE' name='wap-browser_wapbase' bldFile='common/generic/WAP-BROWSER/WAPBASE/GROUP' />
+	<unit unitID='WLDDATABASEKIT' name='WLDDATABASEKIT' bldFile='common/generic/APP-SERVICES/Wlddatabasekit/GROUP' />
+	<unit unitID='WLDTOOLS' name='app-services_wldtools' bldFile='common/generic/APP-SERVICES/WLDTOOLS/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/allexport.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,788 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID="001" name="assabet" bldFile="cedar/generic/base/assabet" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/assabet/single" /> -->
+	<unit unitID="001" name="domain" bldFile="cedar/generic/base/domain/group" />
+	<unit unitID="001" name="e32" bldFile="cedar/generic/base/e32" />
+	<unit unitID="001" name="compsupp" bldFile="cedar/generic/base/e32/compsupp" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32/drivers/crashflash/unistore2" />
+	<unit unitID="001" name="sdcard3c" bldFile="cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c" />
+	<unit unitID="001" name="sdcard4c" bldFile="cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32/drivers/unistore2" />
+	<unit unitID="001" name="e32utils" bldFile="cedar/generic/base/e32utils/group" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32utils/nandboot/nandloader/unistore2" />
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/e32utils/sdio" />
+	<unit unitID="001" name="f32" bldFile="cedar/generic/base/f32/group" />
+	<unit unitID="001" name="hal" bldFile="cedar/generic/base/hal" />
+	<unit unitID="001" name="bootldr" bldFile="cedar/generic/base/integrator/bootldr" />
+	<unit unitID="001" name="core" bldFile="cedar/generic/base/integrator/core" />
+	<unit unitID="001" name="cm1136" bldFile="cedar/generic/base/integrator/core/cm1136" />
+	<unit unitID="001" name="cm920" bldFile="cedar/generic/base/integrator/core/cm920" />
+	<unit unitID="001" name="integratorap" bldFile="cedar/generic/base/integrator/integratorap" />
+	<unit unitID="001" name="lm_pana" bldFile="cedar/generic/base/integrator/logic/lm_pana" />
+	<unit unitID="001" name="lmnand" bldFile="cedar/generic/base/integrator/logic/lmnand" />
+	<unit unitID="001" name="lmnand2" bldFile="cedar/generic/base/integrator/logic/lmnand2" />
+	<unit unitID="001" name="lmxx600" bldFile="cedar/generic/base/integrator/logic/lmxx600" />
+	<unit unitID="001" name="lubbock" bldFile="cedar/generic/base/lubbock" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/lubbock/single" /> -->
+	<unit unitID="001" name="h2" bldFile="cedar/generic/base/omap/h2" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/omap/h2/single" /> -->
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/omap/h2_restricted/sdio" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/omap/h2_restricted/unistore2" />
+	<unit unitID="001" name="h4" bldFile="cedar/generic/base/omap_hrp/h4" />
+	<unit unitID="001" name="h4_bootloader" bldFile="cedar/generic/base/omap_hrp/h4_bootloader" />
+	<unit unitID="001" name="h4_mebootloader" bldFile="cedar/generic/base/omap_hrp/h4_mebootloader" />
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/omap_hrp/h4_restricted/sdio" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/omap_hrp/h4_restricted/unistore2" />
+	<unit unitID="001" name="template_variant" bldFile="cedar/generic/base/template/template_variant" />
+	<unit unitID="001" name="wins" bldFile="cedar/generic/base/wins" />
+	<unit unitID="001" name="mRouter" bldFile="cedar/generic/connectivity/mRouter/group" />
+	<unit unitID="001" name="mRouterSecure" bldFile="cedar/generic/connectivity/mRouterSecure/group" />
+	<unit unitID="001" name="e32tools" bldFile="cedar/generic/tools/e32tools/group" />
+	<unit unitID="001" name="redistribution" bldFile="cedar/generic/tools/redistribution" />
+	<unit unitID="001" name="romkit" bldFile="cedar/generic/tools/romkit/group" />
+	<unit unitID="001" name="agnmodel" bldFile="common/generic/app-engines/agnmodel/group" />
+	<unit unitID="001" name="agnversit" bldFile="common/generic/app-engines/agnversit/group" />
+	<unit unitID="001" name="agnversit2" bldFile="common/generic/app-engines/agnversit2/group" />
+	<unit unitID="001" name="calendar" bldFile="common/generic/app-engines/calendar/group" />
+	<unit unitID="001" name="CR-6BLC8W" bldFile="common/generic/app-engines/calendar/tsrc/Integration/CR-6BLC8W/group" />
+	<unit unitID="001" name="unit" bldFile="common/generic/app-engines/calendar/tsrc/unit/group" />
+	<unit unitID="001" name="CalInterimApi" bldFile="common/generic/app-engines/CalInterimApi/group" />
+	<unit unitID="001" name="CR-6BLC8W" bldFile="common/generic/app-engines/CalInterimApi/tsrc/Integration/CR-6BLC8W/group" />
+	<unit unitID="001" name="unit" bldFile="common/generic/app-engines/CalInterimApi/tsrc/unit/group" />
+	<unit unitID="001" name="chart" bldFile="common/generic/app-engines/chart/group" />
+	<unit unitID="001" name="cntmatchlog" bldFile="common/generic/app-engines/cntmodel/cntmatchlog/group" />
+	<unit unitID="001" name="cntmodel" bldFile="common/generic/app-engines/cntmodel/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/groupsql" />
+	<unit unitID="001" name="cntmatchlog" bldFile="common/generic/app-engines/cntmodel/tsrc/cntmatchlog/group" />
+	<unit unitID="001" name="PerfFuncSuite" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/PerfFuncSuite/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/PerfFuncSuite/groupsql" />
+	<unit unitID="001" name="TCntPolice" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/TCntPolice/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/TCntPolice/groupsql" />
+	<unit unitID="001" name="convert" bldFile="common/generic/app-engines/convert/group" />
+	<unit unitID="001" name="damodel" bldFile="common/generic/app-engines/damodel/group" />
+	<unit unitID="001" name="sheng" bldFile="common/generic/app-engines/sheng/group" />
+	<unit unitID="001" name="wpeng" bldFile="common/generic/app-engines/wpeng/group" />
+	<unit unitID="001" name="animation" bldFile="common/generic/app-framework/animation/group" />
+	<unit unitID="001" name="apparc" bldFile="common/generic/app-framework/apparc/group" />
+	<unit unitID="001" name="bmpanim" bldFile="common/generic/app-framework/bmpanim/group" />
+	<unit unitID="001" name="clock" bldFile="common/generic/app-framework/clock/group" />
+	<unit unitID="001" name="conarc" bldFile="common/generic/app-framework/conarc/group" />
+	<unit unitID="001" name="cone" bldFile="common/generic/app-framework/cone/group" />
+	<unit unitID="001" name="egul" bldFile="common/generic/app-framework/egul/group" />
+	<unit unitID="001" name="emime" bldFile="common/generic/app-framework/emime/group" />
+	<unit unitID="001" name="errorresgt" bldFile="common/generic/app-framework/errorresgt/group" />
+	<unit unitID="001" name="etext" bldFile="common/generic/app-framework/etext/group" />
+	<unit unitID="001" name="fepbase" bldFile="common/generic/app-framework/fepbase/group" />
+	<unit unitID="001" name="form" bldFile="common/generic/app-framework/form/group" />
+	<unit unitID="001" name="GfxTransEffect" bldFile="common/generic/app-framework/GfxTransEffect/group" />
+	<unit unitID="001" name="grid" bldFile="common/generic/app-framework/grid/group" />
+	<unit unitID="001" name="numberconversion" bldFile="common/generic/app-framework/numberconversion/group" />
+	<unit unitID="001" name="print" bldFile="common/generic/app-framework/print/group" />
+	<unit unitID="001" name="SysStart" bldFile="common/generic/app-framework/SysStart/group" />
+	<unit unitID="001" name="uiklafGT" bldFile="common/generic/app-framework/uiklafGT/GROUP" />
+	<unit unitID="001" name="notifier1" bldFile="common/generic/app-framework/uikon/examples/notifier1/group" />
+	<unit unitID="001" name="uikon" bldFile="common/generic/app-framework/uikon/group" />
+	<unit unitID="001" name="viewsrv" bldFile="common/generic/app-framework/viewsrv/group" />
+	<unit unitID="001" name="word" bldFile="common/generic/app-framework/word/group" />
+	<unit unitID="001" name="alarmserver" bldFile="common/generic/app-services/alarmserver/Group" />
+	<unit unitID="001" name="BackupRestoreNotification" bldFile="common/generic/app-services/BackupRestoreNotification/group" />
+	<unit unitID="001" name="calcon" bldFile="common/generic/app-services/calcon/group" />
+	<unit unitID="001" name="chtmltocrtconv" bldFile="common/generic/app-services/chtmltocrtconv/group" />
+	<unit unitID="001" name="hlpmodel" bldFile="common/generic/app-services/hlpmodel/group" />
+	<unit unitID="001" name="richtexttohtmlconv" bldFile="common/generic/app-services/richtexttohtmlconv/Group" />
+	<unit unitID="001" name="TimeZoneLocalization" bldFile="common/generic/app-services/TimeZoneLocalization/group" />
+	<unit unitID="001" name="tz" bldFile="common/generic/app-services/tz/group" />
+	<unit unitID="001" name="tzcompiler" bldFile="common/generic/app-services/tzcompiler/group" />
+	<unit unitID="001" name="tzdb" bldFile="common/generic/app-services/tzdb/group" />
+	<unit unitID="001" name="TzLocalizationRscFactory" bldFile="common/generic/app-services/TzLocalizationRscFactory/group" />
+	<unit unitID="001" name="versit" bldFile="common/generic/app-services/versit/group" />
+	<unit unitID="001" name="wlddatabasekit" bldFile="common/generic/app-services/wlddatabasekit/group" />
+	<unit unitID="001" name="wldtools" bldFile="common/generic/app-services/wldtools/group" />
+	<unit unitID="001" name="worldserver" bldFile="common/generic/app-services/worldserver/group" />
+	<unit unitID="001" name="bookmarks" bldFile="common/generic/application-protocols/bookmarks/group" />
+	<unit unitID="001" name="cookies" bldFile="common/generic/application-protocols/http/examples/cookies/group" />
+	<unit unitID="001" name="PipeliningConfigFilter" bldFile="common/generic/application-protocols/http/examples/PipeliningConfigFilter/Group" />
+	<unit unitID="001" name="uaprof" bldFile="common/generic/application-protocols/http/examples/uaprof/group" />
+	<unit unitID="001" name="http" bldFile="common/generic/application-protocols/http/group" />
+	<unit unitID="001" name="inetprotutil" bldFile="common/generic/application-protocols/inetprotutil/group" />
+	<unit unitID="001" name="ineturilist" bldFile="common/generic/application-protocols/ineturilist/group" />
+	<unit unitID="001" name="recognisers" bldFile="common/generic/application-protocols/recognisers/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/base/loce32/ongoing" />
+	<unit unitID="001" name="mmpfiles" bldFile="common/generic/base/loce32/ongoing/mmpfiles" />
+	<unit unitID="001" name="commdbshim" bldFile="common/generic/comms-infras/commdb/commdbshim/group" />
+	<unit unitID="001" name="commdb" bldFile="common/generic/comms-infras/commdb/group" />
+	<unit unitID="001" name="te_cdma2000Settings" bldFile="common/generic/comms-infras/commdb/ts_commdb/te_cdma2000Settings/group" />
+	<unit unitID="001" name="defaultcommdb" bldFile="common/generic/comms-infras/commsdat/defaultcommdb/group" />
+	<unit unitID="001" name="commsdat" bldFile="common/generic/comms-infras/commsdat/group" />
+	<unit unitID="001" name="installdefaultcommdb" bldFile="common/generic/comms-infras/commsDat/installdefaultcommdb/group" />
+	<unit unitID="001" name="ced" bldFile="common/generic/comms-infras/commsdat/Tools/ced/group" />
+	<unit unitID="001" name="ceddump" bldFile="common/generic/comms-infras/commsdat/Tools/ceddump/group" />
+	<unit unitID="001" name="cfg2xml" bldFile="common/generic/comms-infras/commsdat/Tools/cfg2xml/group" />
+	<unit unitID="001" name="hidden_readonly_support" bldFile="common/generic/comms-infras/commsdat/Tools/cfg2xml/hidden_readonly_support/group" />
+	<unit unitID="001" name="commsdebugutility" bldFile="Common/Generic/comms-infras/commsdebugutility/group" />
+	<unit unitID="001" name="commsfw" bldFile="Common/Generic/comms-infras/commsfw/group" />
+	<unit unitID="001" name="te_Commsfw_transport" bldFile="common/generic/comms-infras/commsfw/te_Commsfw_transport/group" />
+	<unit unitID="001" name="Elements" bldFile="common/generic/comms-infras/Elements/group" />
+	<unit unitID="001" name="Helpers" bldFile="common/generic/comms-infras/Elements/Helpers/group" />
+	<unit unitID="001" name="MsgParser" bldFile="common/generic/comms-infras/Elements/MsgParser/group" />
+	<unit unitID="001" name="NetInterfaces" bldFile="common/generic/comms-infras/Elements/NetInterfaces/group" />
+	<unit unitID="001" name="NetMessages" bldFile="common/generic/comms-infras/Elements/NetMessages/group" />
+	<unit unitID="001" name="NetMeta" bldFile="common/generic/comms-infras/Elements/NetMeta/group" />
+	<unit unitID="001" name="NetSubscribe" bldFile="common/generic/comms-infras/Elements/NetSubscribe/group" />
+	<unit unitID="001" name="ResponseMsg" bldFile="common/generic/comms-infras/Elements/ResponseMsg/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/comms-infras/Elements/ResponseMsg/version1/group" />
+	<unit unitID="001" name="StartServer" bldFile="common/generic/comms-infras/Elements/StartServer/group" />
+	<unit unitID="001" name="StateMachine" bldFile="common/generic/comms-infras/Elements/StateMachine/group" />
+	<unit unitID="001" name="api_ext" bldFile="common/generic/comms-infras/esock/api_ext/group" />
+	<unit unitID="001" name="commsdataobjects" bldFile="common/generic/comms-infras/esock/commsdataobjects/group" />
+	<unit unitID="001" name="compatibility_headers" bldFile="common/generic/comms-infras/esock/compatibility_headers/group" />
+	<unit unitID="001" name="CoreProviders" bldFile="common/generic/comms-infras/ESock/CoreProviders/group" />
+	<unit unitID="001" name="MessageInterceptRegister" bldFile="common/generic/comms-infras/esock/debug/MessageInterceptRegister/group" />
+	<unit unitID="001" name="esock_internal_messages" bldFile="common/generic/comms-infras/esock/esock_internal_messages/group" />
+	<unit unitID="001" name="esock_messages" bldFile="common/generic/comms-infras/esock/esock_messages/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/esock/ETC" />
+	<unit unitID="001" name="esock" bldFile="common/generic/comms-infras/esock/group" />
+	<unit unitID="001" name="MobilityCoreProviders" bldFile="common/generic/comms-infras/esock/MobilityCoreProviders/group" />
+	<unit unitID="001" name="simpleselectorbase" bldFile="common/generic/comms-infras/esock/simpleselectorbase/group" />
+	<unit unitID="001" name="commsdataobjects" bldFile="common/generic/comms-infras/esock/version2/commsdataobjects/group" />
+	<unit unitID="001" name="esock_messages" bldFile="common/generic/comms-infras/esock/version2/esock_messages/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/esock/version2/ETC" />
+	<unit unitID="001" name="version2" bldFile="common/generic/comms-infras/esock/version2/group" />
+	<unit unitID="001" name="flogger" bldFile="common/generic/comms-infras/flogger/group" />
+	<unit unitID="001" name="mbufmgr" bldFile="Common/Generic/comms-infras/mbufmgr/group" />
+	<unit unitID="001" name="nifman" bldFile="common/generic/comms-infras/nifman/group" />
+	<unit unitID="001" name="netcfgext" bldFile="common/generic/comms-infras/nifman/netcfgext/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/comms-infras/nifman/version1/group" />
+	<unit unitID="001" name="shimcpr" bldFile="common/generic/comms-infras/nifman/version1/shimcpr/group" />
+	<unit unitID="001" name="configurator" bldFile="common/generic/comms-infras/rootserver/configurator/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/rootserver/ETC" />
+	<unit unitID="001" name="rootserver" bldFile="Common/Generic/comms-infras/rootserver/group" />
+	<unit unitID="001" name="util" bldFile="common/generic/comms-infras/rootserver/Te_Configurator/util/group" />
+	<unit unitID="001" name="BAL" bldFile="common/generic/connectivity/BAL/Group" />
+	<unit unitID="001" name="mRouter3" bldFile="common/generic/connectivity/BAL/Plugins/mRouter3/group" />
+	<unit unitID="001" name="NTRAS" bldFile="common/generic/connectivity/BAL/Plugins/NTRAS/group" />
+	<unit unitID="001" name="FreeSpaceChecker" bldFile="common/generic/connectivity/FreeSpaceChecker/group" />
+	<unit unitID="001" name="connectivity" bldFile="common/generic/connectivity/group" />
+	<unit unitID="001" name="brdcst" bldFile="common/generic/connectivity/legacy/brdcst/group" />
+	<unit unitID="001" name="plpgrp" bldFile="common/generic/connectivity/legacy/PLP/plpgrp" />
+	<unit unitID="001" name="plpremlink" bldFile="common/generic/connectivity/legacy/PLP/plpremlink" />
+	<unit unitID="001" name="PLPVARIANT" bldFile="common/generic/connectivity/legacy/PLP/PLPVARIANT" />
+	<unit unitID="001" name="BT" bldFile="common/generic/connectivity/mRouterSecure/Bearers/BT/group" />
+	<unit unitID="001" name="Emulator" bldFile="common/generic/connectivity/mRouterSecure/Bearers/Emulator/group" />
+	<unit unitID="001" name="IR" bldFile="common/generic/connectivity/mRouterSecure/Bearers/IR/group" />
+	<unit unitID="001" name="Serial" bldFile="common/generic/connectivity/mRouterSecure/Bearers/Serial/group" />
+	<unit unitID="001" name="USB" bldFile="common/generic/connectivity/mRouterSecure/Bearers/USB/group" />
+	<unit unitID="001" name="SockComm" bldFile="common/generic/connectivity/mRouterSecure/CSY/SockComm/group" />
+	<unit unitID="001" name="WinsCsy" bldFile="common/generic/connectivity/mRouterSecure/CSY/WinsCsy/group" />
+	<unit unitID="001" name="mRouterSecure" bldFile="common/generic/connectivity/mRouterSecure/group" />
+	<unit unitID="001" name="mRouterAgent" bldFile="common/generic/connectivity/mRouterSecure/mRouterAgent/group" />
+	<unit unitID="001" name="mRouterClient" bldFile="common/generic/connectivity/mRouterSecure/mRouterClient/group" />
+	<unit unitID="001" name="SBSocketServer" bldFile="common/generic/connectivity/SBSocketServer/group" />
+	<unit unitID="001" name="SCRemoteFileServer" bldFile="common/generic/connectivity/SCRemoteFileServer/group" />
+	<unit unitID="001" name="SecureBackupEngine" bldFile="common/generic/connectivity/SecureBackupEngine/group" />
+	<unit unitID="001" name="ServerSocket" bldFile="common/generic/connectivity/ServerSocket/group" />
+	<unit unitID="001" name="ServiceBroker" bldFile="common/generic/connectivity/ServiceBroker/group" />
+	<unit unitID="001" name="SWInstallServer" bldFile="common/generic/connectivity/SWInstallServer/group" />
+	<unit unitID="001" name="SyncMLInitServer" bldFile="common/generic/connectivity/SyncMLInitServer/group" />
+	<unit unitID="001" name="CHFHelloWorld" bldFile="common/generic/Content-Handling/Framework/example/CHFHelloWorld" />
+	<unit unitID="001" name="Framework" bldFile="common/generic/content-handling/Framework/group" />
+	<unit unitID="001" name="content-handling" bldFile="common/generic/content-handling/Group" />
+	<unit unitID="001" name="ClientProv" bldFile="common/generic/DevProv/Adapters/ClientProv/group" />
+	<unit unitID="001" name="AppMgt" bldFile="common/generic/DevProv/Adapters/DevMan/AppMgt" />
+	<unit unitID="001" name="DevMan" bldFile="common/generic/DevProv/Adapters/DevMan/Group" />
+	<unit unitID="001" name="Shared" bldFile="common/generic/DevProv/Adapters/DevMan/Shared" />
+	<unit unitID="001" name="CPAgent" bldFile="common/generic/DevProv/ClientProv/CPAgent" />
+	<unit unitID="001" name="CpDocRecognizer" bldFile="common/generic/DevProv/ClientProv/CpDocRecognizer" />
+	<unit unitID="001" name="CpFileHandler" bldFile="common/generic/DevProv/ClientProv/CpFileHandler" />
+	<unit unitID="001" name="CpFileWatcher" bldFile="common/generic/DevProv/ClientProv/CpFileWatcher" />
+	<unit unitID="001" name="CpInputHistory" bldFile="common/generic/DevProv/ClientProv/CpInputHistory" />
+	<unit unitID="001" name="CpScDocReader" bldFile="common/generic/DevProv/ClientProv/CpScDocReader" />
+	<unit unitID="001" name="CpWapPushPlugin" bldFile="common/generic/DevProv/ClientProv/CpWapPushPlugin" />
+	<unit unitID="001" name="ClientProv" bldFile="common/generic/DevProv/ClientProv/Group" />
+	<unit unitID="001" name="ProvDoc" bldFile="common/generic/DevProv/ClientProv/ProvDoc" />
+	<unit unitID="001" name="UserAgent" bldFile="common/generic/DevProv/ClientProv/UserAgent" />
+	<unit unitID="001" name="Utils" bldFile="common/generic/DevProv/ClientProv/Utils" />
+	<unit unitID="001" name="dmtree" bldFile="common/generic/DevProv/DevMan/dmtree/group" />
+	<unit unitID="001" name="fota" bldFile="common/generic/devprov/DevMan/fota/group" />
+	<unit unitID="001" name="DevMan" bldFile="common/generic/DevProv/DevMan/group" />
+	<unit unitID="001" name="HostServerClient" bldFile="common/generic/DevProv/DevMan/HostServerClient/group" />
+	<unit unitID="001" name="RefHostServer" bldFile="common/generic/DevProv/DevMan/RefHostServer/group" />
+	<unit unitID="001" name="tools" bldFile="common/generic/DevProv/DevMan/tools/group" />
+	<unit unitID="001" name="DevProv" bldFile="common/generic/DevProv/Group" />
+	<unit unitID="001" name="bitgdi" bldFile="common/generic/graphics/bitgdi/group" />
+	<unit unitID="001" name="egl" bldFile="common/generic/graphics/egl/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/egl/implementation/products/egl/1.0/build/symbian/group" />
+	<unit unitID="001" name="eglheaders" bldFile="common/generic/graphics/eglheaders/group" />
+	<unit unitID="001" name="fbserv" bldFile="common/generic/graphics/fbserv/group" />
+	<unit unitID="001" name="fntstore" bldFile="common/generic/graphics/fntstore/group" />
+	<unit unitID="001" name="fonts" bldFile="common/generic/graphics/fonts/group" />
+	<unit unitID="001" name="freetype" bldFile="common/generic/graphics/freetype/group" />
+	<unit unitID="001" name="gdi" bldFile="common/generic/graphics/gdi/group" />
+	<unit unitID="001" name="gditools" bldFile="common/generic/graphics/gditools/group" />
+	<unit unitID="001" name="gdtran" bldFile="common/generic/graphics/gdtran/group" />
+	<unit unitID="001" name="IcuLayoutEngine" bldFile="common/generic/graphics/IcuLayoutEngine/group" />
+	<unit unitID="001" name="OpenGLES" bldFile="common/generic/graphics/OpenGLES/group" />
+	<unit unitID="001" name="OpenGLESDisplayProperty" bldFile="common/generic/graphics/OpenGLESDisplayProperty/group" />
+	<unit unitID="001" name="OpenGLESHeaders" bldFile="common/generic/graphics/OpenGLESHeaders/group" />
+	<unit unitID="001" name="opengles_stub" bldFile="common/generic/graphics/openglesheaders/group/opengles_stub" />
+	<unit unitID="001" name="OpenVG" bldFile="common/generic/graphics/OpenVG/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/OpenVG/implementation/products/openvg/1.2/openvg/build/symbian/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/OpenVG/implementation/products/openvg/1.2/samples/build/symbian/group" />
+	<unit unitID="001" name="openvgheaders" bldFile="common/generic/graphics/openvgheaders/group" />
+	<unit unitID="001" name="palette" bldFile="common/generic/graphics/palette/group" />
+	<unit unitID="001" name="pdrstore" bldFile="common/generic/graphics/pdrstore/group" />
+	<unit unitID="001" name="printdrv" bldFile="common/generic/graphics/printdrv/group" />
+	<unit unitID="001" name="screendriver" bldFile="common/generic/graphics/screendriver/group" />
+	<unit unitID="001" name="ui_bench" bldFile="common/generic/graphics/ui_bench/group" />
+	<unit unitID="001" name="wserv" bldFile="common/generic/graphics/wserv/group" />
+	<unit unitID="001" name="config" bldFile="common/generic/infra-red/config" />
+	<unit unitID="001" name="irda" bldFile="common/generic/infra-red/irda" />
+	<unit unitID="001" name="irda" bldFile="common/generic/infra-red/irda/group" />
+	<unit unitID="001" name="irdialbca" bldFile="common/generic/infra-red/irda/irdialbca/group" />
+	<unit unitID="001" name="GpsClockManual" bldFile="common/generic/LBS/GPSClock/GpsClockManual/group" />
+	<unit unitID="001" name="GpsSetClock" bldFile="common/generic/LBS/GPSClock/GpsSetClock/group" />
+	<unit unitID="001" name="GPSClock" bldFile="common/generic/LBS/GPSClock/group" />
+	<unit unitID="001" name="LBS" bldFile="common/generic/LBS/group" />
+	<unit unitID="001" name="LbsAdmin" bldFile="common/generic/LBS/LbsAdmin/group" />
+	<unit unitID="001" name="LbsAGPSManager" bldFile="common/generic/LBS/LbsAGPSManager/group" />
+	<unit unitID="001" name="LbsAssistanceData" bldFile="common/generic/LBS/LbsAssistanceData/group" />
+	<unit unitID="001" name="LbsAssistanceDataSourceInterface" bldFile="common/generic/LBS/LbsAssistanceDataSourceInterface/group" />
+	<unit unitID="001" name="LBSClient" bldFile="common/generic/LBS/LBSClient/group" />
+	<unit unitID="001" name="LbsApi" bldFile="common/generic/LBS/LBSClient/LbsApi/group" />
+	<unit unitID="001" name="LbsDebug" bldFile="common/generic/LBS/LbsDebug/group" />
+	<unit unitID="001" name="LbsInternalApi" bldFile="common/generic/LBS/LbsInternalApi/group" />
+	<unit unitID="001" name="LbsLocCommon" bldFile="common/generic/LBS/LbsLocCommon/group" />
+	<unit unitID="001" name="ServerFramework" bldFile="common/generic/LBS/LbsLocCommon/ServerFramework/group" />
+	<unit unitID="001" name="LbsLocDataSource" bldFile="common/generic/LBS/LbsLocDataSource/group" />
+	<unit unitID="001" name="LbsLocDataSourcePlugins" bldFile="common/generic/LBS/LbsLocDataSourcePlugins/group" />
+	<unit unitID="001" name="sirf" bldFile="common/generic/LBS/LbsLocDataSourcePlugins/sirf/group" />
+	<unit unitID="001" name="LbsLocServer" bldFile="common/generic/LBS/LbsLocServer/group" />
+	<unit unitID="001" name="te_LbsLocServer" bldFile="common/generic/LBS/lbslocserver/te_LbsLocServer/group" />
+	<unit unitID="001" name="LbsLocUtils" bldFile="common/generic/LBS/LbsLocUtils/group" />
+	<unit unitID="001" name="LbsLogging" bldFile="common/generic/LBS/LbsLogging/group" />
+	<unit unitID="001" name="te_LbsLogging" bldFile="common/generic/LBS/LbsLogging/te_LbsLogging/group" />
+	<unit unitID="001" name="LbsMaths" bldFile="common/generic/LBS/LbsMaths/group" />
+	<unit unitID="001" name="te_lbsmaths" bldFile="common/generic/LBS/LbsMaths/te_lbsmaths/group" />
+	<unit unitID="001" name="LbsNetGateway" bldFile="common/generic/LBS/LbsNetGateway/group" />
+	<unit unitID="001" name="LbsNetInternalApi" bldFile="common/generic/LBS/LbsNetInternalApi/group" />
+	<unit unitID="001" name="LbsNetProtocol" bldFile="common/generic/LBS/LbsNetProtocol/group" />
+	<unit unitID="001" name="LbsNetSim" bldFile="common/generic/LBS/LbsNetSim/group" />
+	<unit unitID="001" name="LbsNetworkLocationManager" bldFile="common/generic/LBS/LbsNetworkLocationManager/group" />
+	<unit unitID="001" name="t_lbsDummygateway" bldFile="common/generic/LBS/LbsNetworkLocationManager/t_lbsDummygateway/group" />
+	<unit unitID="001" name="te_LbsNetworkLocationManager" bldFile="common/generic/LBS/LbsNetworkLocationManager/te_LbsNetworkLocationManager/group" />
+	<unit unitID="001" name="LbsNetworkRequestHandler" bldFile="common/generic/LBS/LbsNetworkRequestHandler/group" />
+	<unit unitID="001" name="LbsPartnerCommon" bldFile="common/generic/LBS/LbsPartnerCommon/group" />
+	<unit unitID="001" name="LBSPrivacyNotification" bldFile="common/generic/LBS/LBSPrivacyNotification/group" />
+	<unit unitID="001" name="LbsPrivacyController" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyController/group" />
+	<unit unitID="001" name="LbsPrivacyExtNotifiers" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyExtNotifiers/group" />
+	<unit unitID="001" name="LbsPrivacyNotifier" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyNotifier/group" />
+	<unit unitID="001" name="LbsProtocolModule" bldFile="common/generic/LBS/LbsProtocolModule/group" />
+	<unit unitID="001" name="LbsQualityProfileApi" bldFile="common/generic/LBS/LbsQualityProfileApi/group" />
+	<unit unitID="001" name="lbsroot" bldFile="common/generic/LBS/lbsroot/group" />
+	<unit unitID="001" name="lbsrootapi" bldFile="common/generic/LBS/lbsrootapi/group" />
+	<unit unitID="001" name="LbsX3P" bldFile="common/generic/LBS/LbsX3P/group" />
+	<unit unitID="001" name="LbsX3PApi" bldFile="common/generic/LBS/LbsX3P/LbsX3PApi/group" />
+	<unit unitID="001" name="suplasn1" bldFile="common/generic/LBS/suplasn1/group" />
+	<unit unitID="001" name="BDB" bldFile="common/generic/messaging/biomsg/BDB" />
+	<unit unitID="001" name="BIFU" bldFile="common/generic/messaging/biomsg/BIFU" />
+	<unit unitID="001" name="BIOC" bldFile="common/generic/messaging/biomsg/BIOC" />
+	<unit unitID="001" name="BIOS" bldFile="common/generic/messaging/biomsg/BIOS" />
+	<unit unitID="001" name="BioWatchers" bldFile="common/generic/messaging/biomsg/BioWatchers" />
+	<unit unitID="001" name="CdmaNbsWatcher" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaNbsWatcher/Group" />
+	<unit unitID="001" name="CdmaSocketWatcher" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaSocketWatcher/Group" />
+	<unit unitID="001" name="CdmaWatcherVMN" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherVMN/Group" />
+	<unit unitID="001" name="CdmaWatcherWEMT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWEMT/Group" />
+	<unit unitID="001" name="CdmaWatcherWMT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWMT/Group" />
+	<unit unitID="001" name="CdmaWatcherWPT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWPT/Group" />
+	<unit unitID="001" name="BioWatchersCdma" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/Group" />
+	<unit unitID="001" name="BITS" bldFile="common/generic/messaging/biomsg/BITS" />
+	<unit unitID="001" name="BIUT" bldFile="common/generic/messaging/biomsg/BIUT" />
+	<unit unitID="001" name="cbcp" bldFile="common/generic/messaging/biomsg/cbcp" />
+	<unit unitID="001" name="enp" bldFile="common/generic/messaging/biomsg/enp" />
+	<unit unitID="001" name="gfp" bldFile="common/generic/messaging/biomsg/gfp" />
+	<unit unitID="001" name="biomsg" bldFile="common/generic/messaging/biomsg/group" />
+	<unit unitID="001" name="iacp" bldFile="common/generic/messaging/biomsg/iacp" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/biomsg/Rom" />
+	<unit unitID="001" name="T_BIOMSG" bldFile="common/generic/messaging/biomsg/T_BIOMSG/Group" />
+	<unit unitID="001" name="wapp" bldFile="common/generic/messaging/biomsg/wapp" />
+	<unit unitID="001" name="autosend" bldFile="common/generic/messaging/email/autosend/group" />
+	<unit unitID="001" name="clientmtms" bldFile="common/generic/messaging/email/clientmtms/group" />
+	<unit unitID="001" name="email" bldFile="common/generic/messaging/email/group" />
+	<unit unitID="001" name="imap" bldFile="common/generic/messaging/email/imap/group" />
+	<unit unitID="001" name="imapmailstore" bldFile="common/generic/messaging/email/imap/imapmailstore/group" />
+	<unit unitID="001" name="imapofflinecontrol" bldFile="common/generic/messaging/email/imap/imapofflinecontrol/group" />
+	<unit unitID="001" name="imapprotocolcontroller" bldFile="common/generic/messaging/email/imap/imapprotocolcontroller/group" />
+	<unit unitID="001" name="imapservermtm" bldFile="common/generic/messaging/email/imap/imapservermtm/group" />
+	<unit unitID="001" name="imapsession" bldFile="common/generic/messaging/email/imap/imapsession/group" />
+	<unit unitID="001" name="imapsettings" bldFile="common/generic/messaging/email/imap/imapsettings/group" />
+	<unit unitID="001" name="imapsyncmanager" bldFile="common/generic/messaging/email/imap/imapsyncmanager/group" />
+	<unit unitID="001" name="imaptransporthandler" bldFile="common/generic/messaging/email/imap/imaptransporthandler/group" />
+	<unit unitID="001" name="imaputils" bldFile="common/generic/messaging/email/imap/imaputils/group" />
+	<unit unitID="001" name="imapservermtm" bldFile="common/generic/messaging/email/imapservermtm/group" />
+	<unit unitID="001" name="popservermtm" bldFile="common/generic/messaging/email/popservermtm/group" />
+	<unit unitID="001" name="servermtmutils" bldFile="common/generic/messaging/email/servermtmutils/group" />
+	<unit unitID="001" name="smtpservermtm" bldFile="common/generic/messaging/email/smtpservermtm/group" />
+	<unit unitID="001" name="framework" bldFile="common/generic/messaging/framework/group" />
+	<unit unitID="001" name="mtmbase" bldFile="common/generic/messaging/framework/mtmbase/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/messaging/framework/server/group" />
+	<unit unitID="001" name="serverexe" bldFile="common/generic/messaging/framework/serverexe/group" />
+	<unit unitID="001" name="watcher" bldFile="common/generic/messaging/framework/watcher/group" />
+	<unit unitID="001" name="GMXML" bldFile="common/generic/messaging/GMXML/GROUP" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/GMXML/Rom" />
+	<unit unitID="001" name="SMILdtd" bldFile="common/generic/messaging/GMXML/SMILdtd/GROUP" />
+	<unit unitID="001" name="XMLDom" bldFile="common/generic/messaging/GMXML/XMLDom/GROUP" />
+	<unit unitID="001" name="XMLParser" bldFile="common/generic/messaging/GMXML/XMLParser/GROUP" />
+	<unit unitID="001" name="messaging" bldFile="common/generic/messaging/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/messaging/mmssettings/ETC" />
+	<unit unitID="001" name="mmssettings" bldFile="common/generic/messaging/mmssettings/group" />
+	<unit unitID="001" name="btclient" bldFile="common/generic/messaging/obex/btmtm/btclient/group" />
+	<unit unitID="001" name="btserver" bldFile="common/generic/messaging/obex/btmtm/btserver/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/messaging/obex/Group" />
+	<unit unitID="001" name="irclient" bldFile="common/generic/messaging/obex/irmtm/irclient/group" />
+	<unit unitID="001" name="irserver" bldFile="common/generic/messaging/obex/irmtm/irserver/group" />
+	<unit unitID="001" name="obexclient" bldFile="common/generic/messaging/obex/obexmtm/obexclient/group" />
+	<unit unitID="001" name="obexserver" bldFile="common/generic/messaging/obex/obexmtm/obexserver/group" />
+	<unit unitID="001" name="obexutil" bldFile="common/generic/messaging/obex/obexmtm/obexutil/group" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/obex/Rom" />
+	<unit unitID="001" name="TObexMTM" bldFile="common/generic/messaging/obex/TObexMTM/GROUP" />
+	<unit unitID="001" name="sdp" bldFile="common/generic/Messaging/obex/TObexMTM/obexstub/BluetoothSdpStub/sdp" />
+	<unit unitID="001" name="IrobexStub" bldFile="common/generic/messaging/obex/TObexMTM/obexstub/IrobexStub/group" />
+	<unit unitID="001" name="schedulesend" bldFile="common/generic/messaging/schedulesend/group" />
+	<unit unitID="001" name="schedulesendexe" bldFile="common/generic/messaging/schedulesend/schedulesendexe/group" />
+	<unit unitID="001" name="schedulesendmtm" bldFile="common/generic/messaging/schedulesend/schedulesendmtm/group" />
+	<unit unitID="001" name="client" bldFile="common/generic/messaging/sendas2/client/group" />
+	<unit unitID="001" name="editutils" bldFile="common/generic/messaging/sendas2/editutils/group" />
+	<unit unitID="001" name="sendas2" bldFile="common/generic/messaging/sendas2/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/messaging/sendas2/server/group" />
+	<unit unitID="001" name="clientmtm" bldFile="common/generic/messaging/sms/clientmtm/group" />
+	<unit unitID="001" name="clientmtm" bldFile="common/generic/messaging/sms/multimode/clientmtm/group" />
+	<unit unitID="001" name="multimode" bldFile="common/generic/messaging/sms/multimode/Group" />
+	<unit unitID="001" name="servermtm" bldFile="common/generic/messaging/sms/multimode/servermtm/group" />
+	<unit unitID="001" name="servermtm" bldFile="common/generic/messaging/sms/servermtm/group" />
+	<unit unitID="001" name="smsgetdetdescdefault" bldFile="common/generic/messaging/sms/smsgetdetdescdefault/group" />
+	<unit unitID="001" name="smsswitch" bldFile="common/generic/messaging/sms/smsswitch/group" />
+	<unit unitID="001" name="smcm" bldFile="common/generic/messaging/sms/smsswitch/smcm/group" />
+	<unit unitID="001" name="smss" bldFile="common/generic/messaging/sms/smsswitch/smss/group" />
+	<unit unitID="001" name="urlhandler" bldFile="common/generic/messaging/urlhandler/group" />
+	<unit unitID="001" name="urlhandler" bldFile="common/generic/messaging/urlhandler/urlhandler/group" />
+	<unit unitID="001" name="SIPCPR" bldFile="common/generic/mm-protocols/ConnProv/SIPCPR/group" />
+	<unit unitID="001" name="General" bldFile="common/generic/mm-protocols/General/Group" />
+	<unit unitID="001" name="core" bldFile="common/generic/mm-protocols/rtp/core/group" />
+	<unit unitID="001" name="rtp" bldFile="common/generic/mm-protocols/rtp/group" />
+	<unit unitID="001" name="SIP" bldFile="common/generic/mm-protocols/SIP/Group" />
+	<unit unitID="001" name="gameengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/gameengine/Group" />
+	<unit unitID="001" name="gameUI_techview" bldFile="common/generic/mm-protocols/SIP/SampleApp/gameUI_techview/Group" />
+	<unit unitID="001" name="SampleApp" bldFile="common/generic/mm-protocols/SIP/SampleApp/group" />
+	<unit unitID="001" name="resolverplugin" bldFile="common/generic/mm-protocols/SIP/SampleApp/resolverplugin/Group" />
+	<unit unitID="001" name="sipengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/sipengine/group" />
+	<unit unitID="001" name="socketengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/socketengine/Group" />
+	<unit unitID="001" name="example_plugin" bldFile="common/generic/mm-protocols/SIP/SIP/NATTraversalController/example_plugin/group" />
+	<unit unitID="001" name="SIP2" bldFile="common/generic/mm-protocols/SIP2/Group" />
+	<unit unitID="001" name="gameengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/gameengine/Group" />
+	<unit unitID="001" name="gameUI_techview" bldFile="common/generic/mm-protocols/SIP2/SampleApp/gameUI_techview/Group" />
+	<unit unitID="001" name="SampleApp" bldFile="common/generic/mm-protocols/SIP2/SampleApp/group" />
+	<unit unitID="001" name="resolverplugin" bldFile="common/generic/mm-protocols/SIP2/SampleApp/resolverplugin/Group" />
+	<unit unitID="001" name="sipengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/sipengine/group" />
+	<unit unitID="001" name="socketengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/socketengine/Group" />
+	<unit unitID="001" name="example_plugin" bldFile="common/generic/mm-protocols/SIP2/SIP/NATTraversalController/example_plugin/group" />
+	<unit unitID="001" name="SIPDummyPRT" bldFile="common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group" />
+	<unit unitID="001" name="SipStateMachine" bldFile="common/generic/mm-protocols/SipProvEngine/SipStateMachine/group" />
+	<unit unitID="001" name="SIPParams" bldFile="common/generic/mm-protocols/SubConnProv/SIPParams/group" />
+	<unit unitID="001" name="SIPSCPR" bldFile="common/generic/mm-protocols/SubConnProv/SIPSCPR/group" />
+	<unit unitID="001" name="client" bldFile="common/generic/mtp/daemon/client/group" />
+	<unit unitID="001" name="daemon" bldFile="common/generic/mtp/daemon/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/mtp/daemon/server/group" />
+	<unit unitID="001" name="dataproviderapi" bldFile="common/generic/mtp/dataproviders/dataproviderapi/group" />
+	<unit unitID="001" name="devdp" bldFile="common/generic/mtp/dataproviders/devdp/group" />
+	<unit unitID="001" name="dputility" bldFile="common/generic/mtp/dataproviders/dputility/group" />
+	<unit unitID="001" name="filedp" bldFile="common/generic/mtp/dataproviders/filedp/group" />
+	<unit unitID="001" name="dataproviders" bldFile="common/generic/mtp/dataproviders/group" />
+	<unit unitID="001" name="proxydp" bldFile="common/generic/mtp/dataproviders/proxydp/group" />
+	<unit unitID="001" name="datatypes" bldFile="common/generic/mtp/datatypes/group" />
+	<unit unitID="001" name="framework" bldFile="common/generic/mtp/framework/group" />
+	<unit unitID="001" name="mtp" bldFile="common/generic/mtp/group" />
+	<unit unitID="001" name="transports" bldFile="common/generic/mtp/transports/group" />
+	<unit unitID="001" name="transportapi" bldFile="common/generic/mtp/transports/transportapi/group" />
+	<unit unitID="001" name="usbsic" bldFile="common/generic/mtp/transports/usbsic/group" />
+	<unit unitID="001" name="usbdatatypes" bldFile="common/generic/mtp/transports/usbsic/usbdatatypes/group" />
+	<unit unitID="001" name="usbsic_cc" bldFile="common/generic/mtp/transports/usbsic/usbsic_cc/group" />
+	<unit unitID="001" name="usbsic_imp" bldFile="common/generic/mtp/transports/usbsic/usbsic_imp/group" />
+	<unit unitID="001" name="play" bldFile="common/generic/Multimedia/char/mmf/clientutils/audio/play/group" />
+	<unit unitID="001" name="record" bldFile="common/generic/Multimedia/char/mmf/clientutils/audio/record/group" />
+	<unit unitID="001" name="play" bldFile="common/generic/Multimedia/char/mmf/clientutils/video/play/group" />
+	<unit unitID="001" name="mmf" bldFile="common/generic/Multimedia/char/mmf/group" />
+	<unit unitID="001" name="ECam" bldFile="Common/Generic/Multimedia/ECam/Group" />
+	<unit unitID="001" name="BitmapTransform" bldFile="Common/Generic/Multimedia/ICL/BitmapTransform/group" />
+	<unit unitID="001" name="ICL" bldFile="Common/Generic/Multimedia/ICL/group" />
+	<unit unitID="001" name="MediaClientImage" bldFile="Common/Generic/Multimedia/ICL/MediaClientImage/Group" />
+	<unit unitID="001" name="mdf" bldFile="common/generic/Multimedia/mdf/group" />
+	<unit unitID="001" name="mmcommon" bldFile="Common/Generic/Multimedia/mmcommon/group" />
+	<unit unitID="001" name="MMF" bldFile="Common/Generic/Multimedia/MMF/group" />
+	<unit unitID="001" name="SoundDev" bldFile="Common/Generic/Multimedia/MMF/SoundDev/group" />
+	<unit unitID="001" name="sounddevbt" bldFile="Common/Generic/Multimedia/MMF/sounddevbt/group" />
+	<unit unitID="001" name="Agents" bldFile="common/generic/Multimedia/MVS/Agents/group" />
+	<unit unitID="001" name="Application" bldFile="common/generic/Multimedia/MVS/Application/group" />
+	<unit unitID="001" name="openmax" bldFile="common/generic/Multimedia/openmax/group" />
+	<unit unitID="001" name="Tuner" bldFile="Common/Generic/Multimedia/Tuner/group" />
+	<unit unitID="001" name="cdmaprot" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmaprot/group" />
+	<unit unitID="001" name="cdmau" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmau/group" />
+	<unit unitID="001" name="cdmawapprot" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmawapprot/Group" />
+	<unit unitID="001" name="cdmasmsstack" bldFile="common/generic/nbprotocols/cdmasmsstack/group" />
+	<unit unitID="001" name="ota-xml" bldFile="common/generic/nbprotocols/cdmasmsstack/ota-xml/group" />
+	<unit unitID="001" name="smsstackv2" bldFile="common/generic/nbprotocols/smsstackv2/group" />
+	<unit unitID="001" name="gsmu" bldFile="common/generic/nbprotocols/smsstackv2/gsmu/group" />
+	<unit unitID="001" name="smsprot" bldFile="common/generic/nbprotocols/smsstackv2/smsprot/Group" />
+	<unit unitID="001" name="smsu" bldFile="common/generic/nbprotocols/smsstackv2/smsu/group" />
+	<unit unitID="001" name="wapprot" bldFile="common/generic/nbprotocols/smsstackv2/wapprot/Group" />
+	<unit unitID="001" name="6to4" bldFile="common/generic/networking/6to4/group" />
+	<unit unitID="001" name="802.11" bldFile="common/generic/networking/802.11/group" />
+	<unit unitID="001" name="WiFiAgent" bldFile="common/generic/networking/802.11/WiFiAgent/group" />
+	<unit unitID="001" name="WiFiCfgEng" bldFile="common/generic/networking/802.11/WiFiCfgEng/group" />
+	<unit unitID="001" name="WiFiCore" bldFile="common/generic/networking/802.11/WiFiCore/group" />
+	<unit unitID="001" name="WiFiDB" bldFile="common/generic/networking/802.11/WiFiDB/group" />
+	<unit unitID="001" name="WiFiLdd" bldFile="common/generic/networking/802.11/WiFiDrvs/WiFiLdd/group" />
+	<unit unitID="001" name="Marvell83xx" bldFile="common/generic/networking/802.11/WiFiDrvs/WiFiPdds/Marvell83xx/group" />
+	<unit unitID="001" name="WiFiPkt" bldFile="common/generic/networking/802.11/WiFiPkt/group" />
+	<unit unitID="001" name="WiFiRSSIEng" bldFile="common/generic/networking/802.11/WiFiRSSIEng/group" />
+	<unit unitID="001" name="WiFiSecEapMods" bldFile="common/generic/networking/802.11/WiFiSecEapMods/group" />
+	<unit unitID="001" name="WiFiSecurity" bldFile="common/generic/networking/802.11/WiFiSecurity/GROUP" />
+	<unit unitID="001" name="WiFiStatsEng" bldFile="common/generic/networking/802.11/WiFiStatsEng/group" />
+	<unit unitID="001" name="WiFiSurveyEng" bldFile="common/generic/networking/802.11/WiFiSurveyEng/group" />
+	<unit unitID="001" name="bca" bldFile="common/generic/networking/BasebandAdaptation/bca/group" />
+	<unit unitID="001" name="c32bca" bldFile="common/generic/networking/BasebandAdaptation/c32bca/group" />
+	<unit unitID="001" name="te_c32bca" bldFile="common/generic/networking/BasebandAdaptation/c32bca/te_c32bca/group" />
+	<unit unitID="001" name="isc" bldFile="common/generic/networking/BasebandAdaptation/isc/group" />
+<!-- deprecated 	<unit unitID="001" name="networking" bldFile="common/generic/networking" /> -->
+	<unit unitID="001" name="cgi" bldFile="common/generic/networking/cgi/group" />
+	<unit unitID="001" name="csdagt" bldFile="common/generic/networking/csdagt/group" />
+	<unit unitID="001" name="dhcp" bldFile="common/generic/networking/dhcp/group" />
+	<unit unitID="001" name="te_dhcp" bldFile="common/generic/networking/dhcp/te_dhcp" />
+	<unit unitID="001" name="config" bldFile="common/generic/networking/dhcp/te_dhcp/config" />
+	<unit unitID="001" name="agentnotifier" bldFile="common/generic/networking/dialog/agentnotifier/group" />
+	<unit unitID="001" name="default" bldFile="common/generic/networking/dialog/default" />
+	<unit unitID="001" name="dialog" bldFile="common/generic/networking/dialog/group" />
+	<unit unitID="001" name="TE_Dialog" bldFile="common/generic/networking/dialog/TE_Dialog/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/dnd/data" />
+	<unit unitID="001" name="dnd" bldFile="common/generic/networking/dnd/group" />
+	<unit unitID="001" name="wifieapaka" bldFile="common/generic/networking/eap/adapters/wifieapaka/group" />
+	<unit unitID="001" name="wifieapsim" bldFile="common/generic/networking/eap/adapters/wifieapsim/group" />
+	<unit unitID="001" name="eapaka" bldFile="common/generic/networking/eap/eapsimaka/eapaka/group" />
+	<unit unitID="001" name="eapsim" bldFile="common/generic/networking/eap/eapsimaka/eapsim/group" />
+	<unit unitID="001" name="eap" bldFile="common/generic/networking/eap/group" />
+	<unit unitID="001" name="ether802" bldFile="common/generic/networking/ether802/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/ether802/version1/group" />
+	<unit unitID="001" name="etherdrv" bldFile="common/generic/networking/etherdrv/group" />
+	<unit unitID="001" name="examplecode" bldFile="common/generic/networking/examplecode/group" />
+	<unit unitID="001" name="inetd" bldFile="common/generic/networking/examplecode/inetd/group" />
+	<unit unitID="001" name="ipip" bldFile="common/generic/networking/examplecode/ipip/group" />
+	<unit unitID="001" name="tcpdumping" bldFile="common/generic/networking/examplecode/tcpdumping/group" />
+	<unit unitID="001" name="ftp_e" bldFile="common/generic/networking/ftp_e/group" />
+	<unit unitID="001" name="General" bldFile="common/generic/networking/General/group" />
+	<unit unitID="001" name="guqos" bldFile="common/generic/networking/guqos/group" />
+	<unit unitID="001" name="inetutil" bldFile="common/generic/networking/inetutil/group" />
+	<unit unitID="001" name="inhook6" bldFile="common/generic/networking/inhook6/group" />
+	<unit unitID="001" name="inhook6example" bldFile="common/generic/networking/inhook6example/group" />
+	<unit unitID="001" name="insock" bldFile="common/generic/networking/insock/group" />
+	<unit unitID="001" name="ipproto" bldFile="common/generic/networking/ip/ipproto/group" />
+	<unit unitID="001" name="iptransport" bldFile="common/generic/networking/ip/iptransport/group" />
+	<unit unitID="001" name="ipcpr" bldFile="common/generic/networking/ip/version1/ipcpr/group" />
+	<unit unitID="001" name="referencecpr" bldFile="common/generic/networking/ip/version1/referencecpr/group" />
+	<unit unitID="001" name="ipadm" bldFile="common/generic/networking/ipadm/group" />
+	<unit unitID="001" name="IPEventNotifier" bldFile="common/generic/networking/IPEventNotifier/group" />
+	<unit unitID="001" name="IPEventFactory" bldFile="common/generic/networking/IPEventNotifier/IPEventFactory/group" />
+	<unit unitID="001" name="IPEventTypes" bldFile="common/generic/networking/IPEventNotifier/IPEventTypes/group" />
+	<unit unitID="001" name="te_IPEventNotifier" bldFile="common/generic/networking/IPEventNotifier/te_IPEventNotifier/group" />
+	<unit unitID="001" name="iprotor" bldFile="common/generic/networking/iprotor/group" />
+	<unit unitID="001" name="eventmediator" bldFile="common/generic/networking/ipsec/eventmediator/group" />
+	<unit unitID="001" name="eventmediatorapi" bldFile="common/generic/networking/ipsec/eventmediatorapi/group" />
+	<unit unitID="001" name="ipsec" bldFile="common/generic/networking/ipsec/group" />
+	<unit unitID="001" name="ikepolparser" bldFile="common/generic/networking/ipsec/ikepolparser/group" />
+	<unit unitID="001" name="ikesocketplugin" bldFile="common/generic/networking/ipsec/ikesocketplugin/group" />
+	<unit unitID="001" name="ipsec6" bldFile="common/generic/networking/ipsec/ipsec6/group" />
+	<unit unitID="001" name="ipseccrypto" bldFile="common/generic/networking/ipsec/ipseccrypto/group" />
+	<unit unitID="001" name="ipsecpol" bldFile="common/generic/networking/ipsec/ipsecpol/group" />
+	<unit unitID="001" name="ipsecpolapi" bldFile="common/generic/networking/ipsec/ipsecpolapi/group" />
+	<unit unitID="001" name="ipsecpolparser" bldFile="common/generic/networking/ipsec/ipsecpolparser/group" />
+	<unit unitID="001" name="kmdserver" bldFile="common/generic/networking/ipsec/kmdserver/group" />
+	<unit unitID="001" name="lib_pfkey" bldFile="common/generic/networking/ipsec/lib_pfkey/group" />
+	<unit unitID="001" name="pkiservice" bldFile="common/generic/networking/ipsec/pkiservice/group" />
+	<unit unitID="001" name="pkiserviceapi" bldFile="common/generic/networking/ipsec/pkiserviceapi/group" />
+	<unit unitID="001" name="sit" bldFile="common/generic/networking/ipsec/sit/group" />
+	<unit unitID="001" name="te_ipsec_platsec" bldFile="common/generic/networking/ipsec/te_ipsec_platsec/group" />
+	<unit unitID="001" name="utlbase64" bldFile="common/generic/networking/ipsec/utlbase64/group" />
+	<unit unitID="001" name="utlcrypto" bldFile="common/generic/networking/ipsec/utlcrypto/group" />
+	<unit unitID="001" name="utlpkcs1" bldFile="common/generic/networking/ipsec/utlpkcs1/group" />
+	<unit unitID="001" name="utlpkcs10" bldFile="common/generic/networking/ipsec/utlpkcs10/group" />
+	<unit unitID="001" name="utlpkcs5" bldFile="common/generic/networking/ipsec/utlpkcs5/group" />
+	<unit unitID="001" name="vpnapi" bldFile="common/generic/networking/ipsec/vpnapi/group" />
+	<unit unitID="001" name="vpnconnagt" bldFile="common/generic/networking/ipsec/vpnconnagt/group" />
+	<unit unitID="001" name="vpnmanager" bldFile="common/generic/networking/ipsec/vpnmanager/group" />
+	<unit unitID="001" name="mobileip" bldFile="common/generic/networking/mobileip/group" />
+	<unit unitID="001" name="mscomp" bldFile="common/generic/networking/mscomp/group" />
+	<unit unitID="001" name="napt" bldFile="common/generic/networking/napt/group" />
+	<unit unitID="001" name="TE_Napt" bldFile="common/generic/networking/napt/TE_Napt/group" />
+	<unit unitID="001" name="Te_NaptCap" bldFile="common/generic/networking/napt/Te_NaptCap/group" />
+	<unit unitID="001" name="netcon" bldFile="common/generic/networking/netcon/group" />
+	<unit unitID="001" name="te_mobileiptosimpleipfallback" bldFile="common/generic/networking/netcon/te_mobileiptosimpleipfallback/group" />
+	<unit unitID="001" name="nslookup" bldFile="Common/Generic/networking/nslookup/group" />
+	<unit unitID="001" name="nullagt" bldFile="common/generic/networking/nullagt/group" />
+	<unit unitID="001" name="TS_nullagt" bldFile="common/generic/networking/nullagt/TS_nullagt/group" />
+	<unit unitID="001" name="packetlogger" bldFile="common/generic/networking/packetlogger/group" />
+	<unit unitID="001" name="pfqoslib" bldFile="common/generic/networking/pfqoslib/group" />
+	<unit unitID="001" name="ping" bldFile="common/generic/networking/ping/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/ppp/data" />
+	<unit unitID="001" name="ppp" bldFile="common/generic/networking/ppp/group" />
+	<unit unitID="001" name="dummyppp" bldFile="common/generic/networking/ppp/te_ppp/dummyppp/group" />
+	<unit unitID="001" name="te_incoming_ppp" bldFile="common/generic/networking/ppp/te_ppp/te_incoming_ppp/group" />
+	<unit unitID="001" name="te_pppcomp" bldFile="common/generic/networking/ppp/te_ppp/te_pppcomp/group" />
+	<unit unitID="001" name="te_vjcomp" bldFile="common/generic/networking/ppp/te_ppp/te_vjcomp/group" />
+	<unit unitID="001" name="TS_dummyppp" bldFile="common/generic/networking/ppp/te_ppp/TS_dummyppp/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/ppp/version1/data" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/ppp/version1/group" />
+	<unit unitID="001" name="dummyppp" bldFile="common/generic/networking/ppp/version1/te_ppp/dummyppp/group" />
+	<unit unitID="001" name="te_incoming_ppp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_incoming_ppp/group" />
+	<unit unitID="001" name="te_pppcomp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_pppcomp/group" />
+	<unit unitID="001" name="te_vjcomp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_vjcomp/group" />
+	<unit unitID="001" name="TS_dummyppp" bldFile="common/generic/networking/ppp/version1/te_ppp/TS_dummyppp/group" />
+	<unit unitID="001" name="predcomp" bldFile="common/generic/networking/predcomp/group" />
+	<unit unitID="001" name="probe" bldFile="common/generic/networking/probe/group" />
+	<unit unitID="001" name="psdagt" bldFile="common/generic/networking/psdagt/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/qos/data" />
+	<unit unitID="001" name="qos" bldFile="common/generic/networking/qos/group" />
+	<unit unitID="001" name="qosextnapi" bldFile="common/generic/networking/qosextnapi/group" />
+	<unit unitID="001" name="qoslib" bldFile="common/generic/networking/qoslib/group" />
+	<unit unitID="001" name="rawipnif" bldFile="common/generic/networking/rawipnif/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/rawipnif/version1/group" />
+	<unit unitID="001" name="sblpapi" bldFile="common/generic/networking/sblpapi/group" />
+	<unit unitID="001" name="slip" bldFile="common/generic/networking/slip/group" />
+	<unit unitID="001" name="sockbench" bldFile="common/generic/networking/sockbench/group" />
+	<unit unitID="001" name="spud" bldFile="common/generic/networking/spud/group" />
+	<unit unitID="001" name="te_spudNetworkSide" bldFile="common/generic/networking/spud/te_spudNetworkSide/group" />
+	<unit unitID="001" name="te_spudRSubConn" bldFile="common/generic/networking/spud/te_spudRSubConn/group" />
+	<unit unitID="001" name="staccomp" bldFile="common/generic/networking/staccomp/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/tcpip6/data" />
+	<unit unitID="001" name="tcpip6" bldFile="common/generic/networking/tcpip6/group" />
+	<unit unitID="001" name="telnet_e" bldFile="common/generic/networking/telnet_e/group" />
+	<unit unitID="001" name="tls" bldFile="common/generic/networking/tls/group" />
+	<unit unitID="001" name="tunnelnif" bldFile="common/generic/networking/tunnelnif/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/tunnelnif/version1/group" />
+	<unit unitID="001" name="udpecho" bldFile="common/generic/networking/udpecho/group" />
+	<unit unitID="001" name="udpsend" bldFile="common/generic/networking/udpsend/group" />
+	<unit unitID="001" name="pdp" bldFile="common/generic/networking/umts/pdp/group" />
+	<unit unitID="001" name="qos3gpp" bldFile="common/generic/networking/umts/qos3gpp/group" />
+	<unit unitID="001" name="qosipscpr" bldFile="common/generic/networking/umts/qosipscpr/group" />
+	<unit unitID="001" name="ipscpr" bldFile="common/generic/networking/umts/version1/ipscpr/group" />
+	<unit unitID="001" name="referencescpr" bldFile="common/generic/networking/umts/version1/referencescpr/group" />
+	<unit unitID="001" name="umtsgprsscpr" bldFile="common/generic/networking/umts/version1/umtsgprsscpr/group" />
+	<unit unitID="001" name="umtsapi" bldFile="common/generic/networking/umtsapi/group" />
+	<unit unitID="001" name="umtsif" bldFile="common/generic/networking/umtsif/group" />
+	<unit unitID="001" name="webserver" bldFile="common/generic/networking/webserver/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex/obex/group" />
+	<unit unitID="001" name="obexbttransport" bldFile="common/generic/obex/obexbttransport/group" />
+	<unit unitID="001" name="obexextensionapis" bldFile="common/generic/obex/obexextensionapis/group" />
+	<unit unitID="001" name="obexirdatransport" bldFile="common/generic/obex/obexirdatransport/group" />
+	<unit unitID="001" name="obextransport" bldFile="common/generic/obex/obextransport/group" />
+	<unit unitID="001" name="obexusbtransport" bldFile="common/generic/obex/obexusbtransport/group" />
+	<unit unitID="001" name="obexwin32usbtransport" bldFile="common/generic/obex/obexwin32usbtransport/group" />
+	<unit unitID="001" name="backend" bldFile="common/generic/openenv/core/backend/group" />
+	<unit unitID="001" name="ipcserver" bldFile="common/generic/openenv/core/backend/ipcserver/group" />
+	<unit unitID="001" name="ipccli" bldFile="common/generic/openenv/core/backend/ipcserver/ipccli/group" />
+	<unit unitID="001" name="ipcsrv" bldFile="common/generic/openenv/core/backend/ipcserver/ipcsrv/group" />
+	<unit unitID="001" name="ewsd" bldFile="common/generic/openenv/core/ewsd/group" />
+	<unit unitID="001" name="core" bldFile="common/generic/openenv/core/group" />
+	<unit unitID="001" name="libc" bldFile="common/generic/openenv/core/libc/group" />
+	<unit unitID="001" name="libdl" bldFile="common/generic/openenv/core/libdl/group" />
+	<unit unitID="001" name="liblogger" bldFile="common/generic/openenv/core/liblogger/group" />
+	<unit unitID="001" name="libm" bldFile="common/generic/openenv/core/libm/group" />
+	<unit unitID="001" name="libpthread" bldFile="common/generic/openenv/core/libpthread/group" />
+	<unit unitID="001" name="authserver" bldFile="common/generic/security/authserver/group" />
+	<unit unitID="001" name="security" bldFile="common/generic/security" />
+	<unit unitID="001" name="certman" bldFile="common/generic/security/certman/group" />
+	<unit unitID="001" name="common" bldFile="common/generic/security/common/group" />
+	<unit unitID="001" name="crypto" bldFile="common/generic/security/crypto/group" />
+	<unit unitID="001" name="strong" bldFile="common/generic/security/crypto/strong" />
+	<unit unitID="001" name="cryptospi" bldFile="common/generic/security/cryptospi/group" />
+	<unit unitID="001" name="strong" bldFile="common/generic/security/cryptospi/strong" />
+	<unit unitID="001" name="cryptotokens" bldFile="common/generic/security/cryptotokens/group" />
+	<unit unitID="001" name="filetokens" bldFile="common/generic/security/filetokens/group" />
+	<unit unitID="001" name="JavaMIDletInstaller" bldFile="common/generic/security/JavaMIDletInstaller/group" />
+	<unit unitID="001" name="winsignmidlet" bldFile="common/generic/security/JavaMIDletInstaller/source/winsignmidlet" />
+	<unit unitID="001" name="makekeys" bldFile="common/generic/security/makekeys/group" />
+	<unit unitID="001" name="securityconfig" bldFile="common/generic/security/securityconfig/group" />
+	<unit unitID="001" name="SISInstaller" bldFile="common/generic/security/SISInstaller/group" />
+	<unit unitID="001" name="swi" bldFile="common/generic/security/swi/group" />
+	<unit unitID="001" name="tlsprovider" bldFile="common/generic/security/tlsprovider/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/ser-comms/c32/data" />
+	<unit unitID="001" name="c32" bldFile="common/generic/ser-comms/c32/group" />
+	<unit unitID="001" name="usb" bldFile="common/generic/ser-comms/usb" />
+	<unit unitID="001" name="acmserver" bldFile="common/generic/ser-comms/usb/csy/acmserver/group" />
+	<unit unitID="001" name="csy" bldFile="common/generic/ser-comms/usb/csy/group" />
+	<unit unitID="001" name="usb" bldFile="common/generic/ser-comms/usb/group" />
+	<unit unitID="001" name="logger" bldFile="common/generic/ser-comms/usb/logger/group" />
+	<unit unitID="001" name="mscc" bldFile="common/generic/ser-comms/usb/mscc/group" />
+	<unit unitID="001" name="usbman" bldFile="common/generic/ser-comms/usb/usbman/group" />
+	<unit unitID="001" name="DBA" bldFile="common/generic/SyncML/DataSync/DBA/group" />
+	<unit unitID="001" name="DataSync" bldFile="Common/Generic/SyncML/DataSync/Group" />
+	<unit unitID="001" name="HostServers" bldFile="common/generic/syncml/DataSync/HostServers/group" />
+	<unit unitID="001" name="PushMsgParsing" bldFile="Common/Generic/SyncML/DataSync/PushMsgParsing" />
+	<unit unitID="001" name="ServerDataProvider" bldFile="common/generic/syncml/DataSync/ServerDataProvider/group" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/DataSync/SyncEngine" />
+	<unit unitID="001" name="DevMan" bldFile="Common/Generic/SyncML/DevMan/group" />
+	<unit unitID="001" name="PushMsgParsing" bldFile="Common/Generic/SyncML/DevMan/PushMsgParsing" />
+	<unit unitID="001" name="SyncAgent" bldFile="Common/Generic/SyncML/DevMan/SyncAgent" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/DevMan/SyncEngine" />
+	<unit unitID="001" name="ClientAPI" bldFile="Common/Generic/SyncML/Framework/ClientAPI" />
+	<unit unitID="001" name="dataproviderregistry" bldFile="common/generic/SyncML/Framework/dataproviderregistry/group" />
+	<unit unitID="001" name="filter" bldFile="common/generic/SyncML/Framework/filter/group" />
+	<unit unitID="001" name="Framework" bldFile="Common/Generic/SyncML/Framework/Group" />
+	<unit unitID="001" name="Logger" bldFile="Common/Generic/SyncML/Framework/Logger" />
+	<unit unitID="001" name="Shared" bldFile="Common/Generic/SyncML/Framework/Shared" />
+	<unit unitID="001" name="SyncAgent" bldFile="Common/Generic/SyncML/Framework/SyncAgent" />
+	<unit unitID="001" name="SyncDataStore" bldFile="Common/Generic/SyncML/Framework/SyncDataStore" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/Framework/SyncEngine" />
+	<unit unitID="001" name="TransportProvision" bldFile="Common/Generic/SyncML/Framework/TransportProvision" />
+	<unit unitID="001" name="SyncML" bldFile="Common/Generic/SyncML/Group" />
+	<unit unitID="001" name="stringpoolexample" bldFile="common/generic/syslibs/bafl/engineering/stringpoolexample" />
+	<unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/group" />
+	<unit unitID="001" name="initLocale" bldFile="common/generic/syslibs/bafl/initLocale/group" />
+	<unit unitID="001" name="caf2" bldFile="common/generic/syslibs/caf2/group" />
+	<unit unitID="001" name="reccafconfig" bldFile="common/generic/syslibs/caf2/reccafconfig" />
+	<unit unitID="001" name="centralrepository" bldFile="common/generic/syslibs/centralrepository/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/charconv/ongoing/group" />
+	<unit unitID="001" name="esql" bldFile="common/generic/syslibs/dbms/esql/group" />
+	<unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/ecom/ongoing/Group" />
+	<unit unitID="001" name="EcomSvrIniWriter" bldFile="common/generic/syslibs/ecom/ongoing/Tools/EcomSvrIniWriter" />
+	<unit unitID="001" name="Template" bldFile="common/generic/syslibs/ecom/ongoing/Unsupported/Tools/MsDev/Wizard/EComPluginWiz/Template" />
+	<unit unitID="001" name="ezlib" bldFile="common/generic/syslibs/ezlib/group" />
+	<unit unitID="001" name="FATCharsetConv" bldFile="common/generic/syslibs/FATCharsetConv/group" />
+	<unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/logeng/ongoing/group" />
+	<unit unitID="001" name="pwrcli" bldFile="common/generic/syslibs/pwrcli/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/schsvr/ongoing/group" />
+	<unit unitID="001" name="SQL" bldFile="common/generic/syslibs/SQL/GROUP" />
+	<unit unitID="001" name="stdlib" bldFile="common/generic/syslibs/stdlib/group" />
+	<unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group" />
+	<unit unitID="001" name="SysAgent2" bldFile="common/generic/syslibs/SysAgent2/group" />
+	<unit unitID="001" name="xml" bldFile="common/generic/syslibs/xml/group" />
+	<unit unitID="001" name="cdmatsy" bldFile="common/generic/telephony/cdmatsy/group" />
+	<unit unitID="001" name="dial" bldFile="common/generic/telephony/dial/group" />
+	<unit unitID="001" name="DATA" bldFile="common/generic/telephony/etel/DATA" />
+	<unit unitID="001" name="playback" bldFile="common/generic/telephony/etel/EtelRecorder/playback/group" />
+	<unit unitID="001" name="etel" bldFile="common/generic/telephony/etel/group" />
+	<unit unitID="001" name="ExampleApps" bldFile="common/generic/telephony/ETel3rdParty/ExampleApps/Group" />
+	<unit unitID="001" name="ETel3rdParty" bldFile="common/generic/telephony/ETel3rdParty/Group" />
+	<unit unitID="001" name="etelcdma" bldFile="common/generic/telephony/etelcdma/group" />
+	<unit unitID="001" name="etelmm" bldFile="common/generic/telephony/etelmm/group" />
+	<unit unitID="001" name="etelpckt" bldFile="common/generic/telephony/etelpckt/group" />
+	<unit unitID="001" name="etelsat" bldFile="common/generic/telephony/etelsat/group" />
+	<unit unitID="001" name="FAX" bldFile="common/generic/telephony/FAX/Group" />
+	<unit unitID="001" name="mmtsy" bldFile="common/generic/telephony/mmtsy/group" />
+	<unit unitID="001" name="phbksync" bldFile="common/generic/telephony/phbksync/group" />
+	<unit unitID="001" name="simtsy" bldFile="common/generic/telephony/simtsy/group" />
+	<unit unitID="001" name="trpagt" bldFile="common/generic/telephony/trp/agt/trpagt/group" />
+	<unit unitID="001" name="csy27010" bldFile="common/generic/telephony/trp/csy/csy27010/group" />
+	<unit unitID="001" name="at" bldFile="common/generic/telephony/trp/group/at" />
+	<unit unitID="001" name="trp" bldFile="common/generic/telephony/trp/group" />
+	<unit unitID="001" name="stubbed" bldFile="common/generic/telephony/trp/group/stubbed" />
+	<unit unitID="001" name="rawipnif" bldFile="common/generic/telephony/trp/nif/rawipnif/group" />
+	<unit unitID="001" name="at" bldFile="common/generic/telephony/trp/tsy/group/at" />
+	<unit unitID="001" name="icera" bldFile="common/generic/telephony/trp/tsy/group/icera" />
+	<unit unitID="001" name="stubbed" bldFile="common/generic/telephony/trp/tsy/group/stubbed" />
+	<unit unitID="001" name="Watchers" bldFile="common/generic/telephony/Watchers/group" />
+	<unit unitID="001" name="bspbuilder" bldFile="common/generic/tools/bspbuilder/group" />
+	<unit unitID="001" name="build" bldFile="common/generic/tools/build/group" />
+	<unit unitID="001" name="dummy" bldFile="common/generic/tools/cbr/dummy" />
+	<unit unitID="001" name="prf" bldFile="common/generic/tools/cbr/prf/group" />
+	<unit unitID="001" name="HelloWorld" bldFile="common/generic/tools/cbr/tools/docs/Example/HelloWorld/group" />
+	<unit unitID="001" name="tools" bldFile="common/generic/tools/cbr/tools/group" />
+	<unit unitID="001" name="cinidata" bldFile="common/generic/tools/cinidata" />
+	<unit unitID="001" name="te_CInidata" bldFile="common/generic/tools/cinidata/te_CInidata/group" />
+	<unit unitID="001" name="ProductInstaller" bldFile="common/generic/tools/custkits/ProductInstaller/group" />
+	<unit unitID="001" name="depcheck" bldFile="common/generic/tools/depcheck" />
+	<unit unitID="001" name="DepModel" bldFile="common/generic/tools/DepModel/group" />
+	<unit unitID="001" name="KitSetupApp" bldFile="common/generic/tools/devkits/KitSetupApp/group" />
+	<unit unitID="001" name="evalid" bldFile="common/generic/tools/host_utilities/evalid" />
+	<unit unitID="001" name="rcomp" bldFile="common/generic/tools/rcomp/group" />
+	<unit unitID="001" name="redistribution" bldFile="common/generic/tools/redistribution" />
+	<unit unitID="001" name="s60_header_compat" bldFile="common/generic/tools/s60_header_compat/group" />
+	<unit unitID="001" name="isc" bldFile="common/generic/tools/s60_header_compat/isc" />
+	<unit unitID="001" name="alp2csh" bldFile="common/generic/tools/sdk_eng/alp2csh/group" />
+	<unit unitID="001" name="assertion" bldFile="common/generic/tools/sdk_eng/assertion/group" />
+	<unit unitID="001" name="build-tools" bldFile="common/generic/tools/sdk_eng/build-tools/group" />
+	<unit unitID="001" name="cjpeg" bldFile="common/generic/tools/sdk_eng/cjpeg/group" />
+	<unit unitID="001" name="cshlpcmp_backend" bldFile="common/generic/tools/sdk_eng/cshlpcmp_backend/group" />
+	<unit unitID="001" name="cshlpcmp_frontend" bldFile="common/generic/tools/sdk_eng/cshlpcmp_frontend/group" />
+	<unit unitID="001" name="cshlpcmp_gui" bldFile="common/generic/tools/sdk_eng/cshlpcmp_gui/group" />
+	<unit unitID="001" name="cwplugins" bldFile="common/generic/tools/sdk_eng/cwplugins/group" />
+	<unit unitID="001" name="emulator_launcher" bldFile="common/generic/tools/sdk_eng/emulator_launcher/group" />
+	<unit unitID="001" name="enum" bldFile="common/generic/tools/sdk_eng/enum/group" />
+	<unit unitID="001" name="envvar" bldFile="common/generic/tools/sdk_eng/envvar/group" />
+	<unit unitID="001" name="filesys" bldFile="common/generic/tools/sdk_eng/filesys/group" />
+	<unit unitID="001" name="InstallUtils" bldFile="common/generic/tools/sdk_eng/InstallUtils/group" />
+	<unit unitID="001" name="jade" bldFile="common/generic/tools/sdk_eng/jade/group" />
+	<unit unitID="001" name="javahelp" bldFile="common/generic/tools/sdk_eng/javahelp/group" />
+	<unit unitID="001" name="javalibrary" bldFile="common/generic/tools/sdk_eng/javalibrary/group" />
+	<unit unitID="001" name="langconfig" bldFile="common/generic/tools/sdk_eng/langconfig/group" />
+	<unit unitID="001" name="launch" bldFile="common/generic/tools/sdk_eng/launch/group" />
+	<unit unitID="001" name="logger" bldFile="common/generic/tools/sdk_eng/logger/group" />
+	<unit unitID="001" name="mbmcodec" bldFile="common/generic/tools/sdk_eng/mbmcodec/group" />
+	<unit unitID="001" name="mnemonicfix" bldFile="common/generic/tools/sdk_eng/mnemonicfix/group" />
+	<unit unitID="001" name="pathbrowser" bldFile="common/generic/tools/sdk_eng/pathbrowser/group" />
+	<unit unitID="001" name="perl_shared" bldFile="common/generic/tools/sdk_eng/perl_shared/group" />
+	<unit unitID="001" name="perllibrary" bldFile="common/generic/tools/sdk_eng/perllibrary/group" />
+	<unit unitID="001" name="pkgmgrgui" bldFile="common/generic/tools/sdk_eng/pkgmgrgui/group" />
+	<unit unitID="001" name="rtf2ptml" bldFile="common/generic/tools/sdk_eng/rtf2ptml/group" />
+	<unit unitID="001" name="runperl" bldFile="common/generic/tools/sdk_eng/runperl/group" />
+	<unit unitID="001" name="SDK_Builder" bldFile="common/generic/tools/sdk_eng/SDK_Builder/group" />
+	<unit unitID="001" name="sdkinfo" bldFile="common/generic/tools/sdk_eng/sdkinfo/group" />
+	<unit unitID="001" name="sdkpkg-manager" bldFile="common/generic/tools/sdk_eng/sdkpkg-manager/group" />
+	<unit unitID="001" name="sdkpkg-tools" bldFile="common/generic/tools/sdk_eng/sdkpkg-tools/group" />
+	<unit unitID="001" name="shellexec" bldFile="common/generic/tools/sdk_eng/shellexec/group" />
+	<unit unitID="001" name="sisar" bldFile="common/generic/tools/sdk_eng/sisar/group" />
+	<unit unitID="001" name="splash" bldFile="common/generic/tools/sdk_eng/splash/group" />
+	<unit unitID="001" name="swingworker" bldFile="common/generic/tools/sdk_eng/swingworker/group" />
+	<unit unitID="001" name="toolbarpanel" bldFile="common/generic/tools/sdk_eng/toolbarpanel/group" />
+	<unit unitID="001" name="tools_stubs" bldFile="common/generic/tools/sdk_eng/tools_stubs/group" />
+	<unit unitID="001" name="stlport" bldFile="common/generic/tools/stlport/group" />
+	<unit unitID="001" name="wapbase" bldFile="common/generic/wap-browser/wapbase/Group" />
+	<unit unitID="001" name="wapplugins" bldFile="common/generic/wap-browser/wapplugins/Group" />
+	<unit unitID="001" name="PushAppHandlerEx" bldFile="common/generic/wap-browser/wappush/examples/PushAppHandlerEx" />
+	<unit unitID="001" name="wappush" bldFile="common/generic/wap-browser/wappush/group" />
+	<unit unitID="001" name="MiscPushMsgUtils" bldFile="common/generic/wap-browser/wappush/MiscPushMsgUtils/group" />
+	<unit unitID="001" name="plugins" bldFile="common/generic/wap-browser/wappush/plugins/group" />
+	<unit unitID="001" name="WapUriLookup" bldFile="common/generic/wap-browser/wappush/plugins/WapUriLookup/group" />
+	<unit unitID="001" name="PushMsgEntry" bldFile="common/generic/wap-browser/wappush/PushMsgEntry/group" />
+	<unit unitID="001" name="pushmtm" bldFile="common/generic/wap-browser/wappush/pushmtm/group" />
+	<unit unitID="001" name="pushutils" bldFile="common/generic/wap-browser/wappush/pushutils/group" />
+	<unit unitID="001" name="pushwatcher" bldFile="common/generic/wap-browser/wappush/pushwatcher/group" />
+	<unit unitID="001" name="ROAPTContentHandler" bldFile="common/generic/wap-browser/wappush/ROAPTContentHandler/group" />
+	<unit unitID="001" name="ROContentHandler" bldFile="common/generic/wap-browser/wappush/ROContentHandler/group" />
+	<unit unitID="001" name="rom" bldFile="common/generic/wap-browser/wappush/rom" />
+	<unit unitID="001" name="SISLContentHandlers" bldFile="common/generic/wap-browser/wappush/SISLContentHandlers/group" />
+	<unit unitID="001" name="SISLPushMsgUtils" bldFile="common/generic/wap-browser/wappush/SISLPushMsgUtils/group" />
+	<unit unitID="001" name="tpush" bldFile="common/generic/wap-browser/wappush/tpush" />
+	<unit unitID="001" name="tpushscriptbased" bldFile="common/generic/wap-browser/wappush/tpushscriptbased" />
+	<unit unitID="001" name="WapPushSupport" bldFile="common/generic/wap-browser/WapPushSupport/Group" />
+	<unit unitID="001" name="wapmessage" bldFile="common/generic/wap-stack/wapmessage/group" />
+	<unit unitID="001" name="wapstack" bldFile="common/generic/wap-stack/wapstack/group" />
+	<unit unitID="001" name="possock" bldFile="common/generic/wap-stack/wapstack/rb-wps/possock/group" />
+	<unit unitID="001" name="wapstdlib" bldFile="common/generic/wap-stack/wapstack/rb-wps/wapstdlib/group" />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/allexport2.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,389 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='UNISTORE2_NANDBOOT' name='base_nandboot_unistore2' bldFile='cedar/generic/base/e32utils/nandboot/nandloader/unistore2' />
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' />
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='CRYPTOGRAPHY' name='security_cryptospi' bldFile='common/generic/SECURITY/cryptospi/group' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+	<unit unitID='ECAM' name='multimedia_ecam' bldFile='common/generic/MULTIMEDIA/ECAM/GROUP' />
+	<unit unitID='TUNER' name='multimedia_tuner' bldFile='common/generic/MULTIMEDIA/tuner/GROUP' />
+	<unit unitID='WSERV8.1' name='graphics_wserv' bldFile='common/generic/GRAPHICS/Wserv/group' />
+	<unit unitID='OPENGLESDISPLAYPROPERTY' name='graphics_openglesdisplayproperty' bldFile='common/generic/graphics/OpenGLESDisplayProperty/group' />
+	<unit unitID='OPENGLSHEADERS' name='graphics_openglesheaders' bldFile='common/generic/graphics/OpenGLESHeaders/group' />
+	<unit unitID='OPENGLES9.X' name='graphics_opengles' bldFile='common/generic/graphics/OpenGLES/group/' />
+	<unit unitID='PDRSTORE' name='graphics_pdrstore' bldFile='common/generic/GRAPHICS/PDRSTORE/GROUP' />
+	<unit unitID='PRINTDRV' name='graphics_printdrv' bldFile='common/generic/GRAPHICS/PRINTDRV/GROUP' />
+	<unit unitID='ICULAYOUTENGINE' name='graphics_iculayoutengine' bldFile='common/generic/GRAPHICS/iculayoutengine/GROUP' />
+	<unit unitID='FBSERV' name='graphics_fbserv' bldFile='common/generic/GRAPHICS/Fbserv/GROUP' />
+	<unit unitID='FNTSTORE' name='graphics_fntstore' bldFile='common/generic/GRAPHICS/Fntstore/GROUP' />
+	<unit unitID='FREETYPE' name='graphics_freetype' bldFile='common/generic/GRAPHICS/Freetype/GROUP' />
+	<unit unitID='FONTS' name='graphics_fonts' bldFile='common/generic/GRAPHICS/Fonts/GROUP' />
+	<unit unitID='BITGDI' name='graphics_bitgdi' bldFile='common/generic/GRAPHICS/Bitgdi/GROUP' />
+	<unit unitID='GDI' name='graphics_gdi' bldFile='common/generic/GRAPHICS/GDI/GROUP' />
+	<unit unitID='PALETTE' name='graphics_palette' bldFile='common/generic/GRAPHICS/palette/group' />
+	<unit unitID='OPENVGHEADERS' name='graphics_openvgheaders' bldFile='common/generic/graphics/openvgheaders/group' />
+	<unit unitID='OPENVG' name='graphics_openvg' bldFile='common/generic/graphics/OpenVG/group/' />
+	<unit unitID='EGLVGHEADERS' name='graphics_eglheaders' bldFile='common/generic/graphics/eglheaders/group' />
+	<unit unitID='EGL' name='graphics_egl' bldFile='common/generic/graphics/egl/group/' />
+	<unit unitID='LOCATIONFRAMEWORK' name='lbs_locationframework' bldFile='common/generic/lbs/group' />
+	<unit unitID='LBSDATASOURCEPLUGINS' name='lbs_datasourceplugins' bldFile='common/generic/lbs/LbsLocDataSourcePlugins/group' />
+	<unit unitID='CONARC' name='app-framework_conarc' bldFile='common/generic/APP-FRAMEWORK/CONARC/GROUP' />
+	<unit unitID='CHTMLTOCRTCONVERTER' name='app-services_chtmltocrtconv' bldFile='common/generic/APP-SERVICES/CHTMLTOCRTCONV/GROUP' />
+	<unit unitID='CONVERT' name='app-engines_convert' bldFile='common/generic/APP-ENGINES/CONVERT/GROUP' />
+	<unit unitID='RICHTEXTTOHTMLCONV' name='app-services_richtexttohtmlconv' bldFile='common/generic/APP-SERVICES/RICHTEXTTOHTMLCONV/GROUP' />
+	<unit unitID='ETEXT' name='app-framework_etext' bldFile='common/generic/APP-FRAMEWORK/ETEXT/GROUP' />
+	<unit unitID='FORM' name='app-framework_form' bldFile='common/generic/APP-FRAMEWORK/FORM/GROUP' />
+	<unit unitID='ALARMSERVER' name='app-services_alarmserver' bldFile='common/generic/APP-SERVICES/AlarmServer/GROUP' />
+	<unit unitID='HLPMODEL' name='app-services_hlpmodel' bldFile='common/generic/APP-SERVICES/HLPMODEL/GROUP' />
+	<unit unitID='WORLDSERVER' name='app-services_worldserver' bldFile='common/generic/APP-SERVICES/WorldServer/GROUP' />
+	<unit unitID='TZ' name='app-services_tz' bldFile='common/generic/APP-SERVICES/tz/GROUP' />
+	<unit unitID='TIMEZONELOCALIZATION' name='app-services_timezonelocalization' bldFile='common/generic/APP-SERVICES/TimeZoneLocalization/GROUP' />
+	<unit unitID='TZLOCALIZATIONRSCFACTORY' name='app-services_tzlocalizationrscfactory' bldFile='common/generic/APP-SERVICES/TzLocalizationRscFactory/GROUP' />
+	<unit unitID='TZCOMPILER' name='app-services_tzcompiler' bldFile='common/generic/APP-SERVICES/tzcompiler/GROUP' />
+	<unit unitID='TZDB' name='app-services_tzdb' bldFile='common/generic/APP-SERVICES/tzdb/GROUP' />
+	<unit unitID='CONTENT_HANDLING' name='Content-Handling' bldFile='common/generic/Content-Handling/GROUP' />
+	<unit unitID='MSG_GMXML' name='messaging_gmxml' bldFile='common/generic/messaging/gmxml/group' />
+	<unit unitID='RECOGNISERS' name='application-protocols_recognisers' bldFile='common/generic/APPLICATION-PROTOCOLS/RECOGNISERS/GROUP' />
+	<unit unitID='PRINT' name='app-framework_print' bldFile='common/generic/APP-FRAMEWORK/PRINT/GROUP' />
+	<unit unitID='SECURESOFTWAREINSTALL' name='security_swi' bldFile='common/generic/SECURITY/SWI/GROUP' />
+	<unit unitID='SISINSTALLER' name='security_sisinstaller' bldFile='common/generic/SECURITY/SISInstaller/Group' />
+	<unit unitID='JAVAMIDLETINSTALLER' name='security_javaMIDletInstaller' bldFile='common/generic/SECURITY/JavaMIDletInstaller/Group' />
+	<unit unitID='CRYPTOTOKENS' name='security_cryptotokens' bldFile='common/generic/SECURITY/CRYPTOTOKENS/GROUP' />
+	<unit unitID='FILETOKENS' name='security_filetokens' bldFile='common/generic/security/filetokens/group' />
+	<unit unitID='CERTMAN' name='security_certman' bldFile='common/generic/SECURITY/Certman/GROUP' />
+	<unit unitID='TLS' name='networking_tls' bldFile='common/generic/networking/tls/group' />
+	<unit unitID='TLSPROVIDER' name='security_tlsprovider' bldFile='common/generic/security/tlsprovider/group' />
+	<unit unitID='IPSECV2' name='networking_ipsec' bldFile='common/generic/NETWORKING/ipsec/group' />
+	<unit unitID='HTTP' name='application-protocols_http2' bldFile='common/generic/application-protocols/http/protocol/group' />
+	<unit unitID='HTTP' name='application-protocols_http3' bldFile='common/generic/application-protocols/http/examples/testwebbrowser/group' />
+	<unit unitID='HTTP' name='application-protocols_http5' bldFile='common/generic/application-protocols/http/examples/pipeliningconfigfilter/group' />
+	<unit unitID='HTTP' name='application-protocols_http6' bldFile='common/generic/application-protocols/http/examples/cookies/group' />
+	<unit unitID='HTTP' name='application-protocols_http7' bldFile='common/generic/application-protocols/http/examples/uaprof/group' />
+	<unit unitID='HTTP' name='application-protocols_http9' bldFile='common/generic/application-protocols/http/examples/group' />
+	<unit unitID='HTTP' name='application-protocols_http10' bldFile='common/generic/application-protocols/http/transport/group' />
+	<unit unitID='HTTP' name='application-protocols_http12' bldFile='common/generic/application-protocols/http/framework/group' />
+	<unit unitID='WAPPLUGINS' name='wap-browser_wapplugins' bldFile='common/generic/wap-browser/wapplugins/group' />
+	<unit unitID='WAPPUSH' name='wap-browser_wappush' bldFile='common/generic/wap-browser/wappush/group' />
+	<unit unitID='FTP' name='networking_ftp_e' bldFile='common/generic/NETWORKING/ftp_e/group' />
+	<unit unitID='TELNET_E' name='networking_telnet_e' bldFile='common/generic/NETWORKING/TELNET_E/GROUP' />
+	<unit unitID='OBEX' name='obex' bldFile='common/generic/obex/group' />
+	<unit unitID='OBEX_EXTENSIONAPIS' name='obex_extensionapis' bldFile='common/generic/obex/obexextensionapis/group' />
+	<unit unitID='INETPROTUTIL' name='application-protocols_inetprotutil' bldFile='common/generic/APPLICATION-PROTOCOLS/INETPROTUTIL/GROUP' />
+	<unit unitID='INETURILIST' name='application-protocols_ineturilist' bldFile='common/generic/application-protocols/ineturilist/group' />
+	<unit unitID='BOOKMARK_SUPPORT' name='application-protocols_bookmarks' bldFile='common/generic/application-protocols/bookmarks/group' />
+	<unit unitID='BLUETOOTH_AVRCP' name='bluetooth_avrcp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/avrcp' />
+	<unit unitID='BLUETOOTH_ACCESSHOST' name='bluetooth_accesshost' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pbap/group' />
+	<unit unitID='BLUETOOTH_PAN' name='bluetooth_pan' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pan/group' />
+	<unit unitID='WAPMESSAGE' name='wap-stack_wapmessage' bldFile='common/generic/WAP-STACK/WAPMESSAGE/GROUP' />
+	<unit unitID='WAPSTACK' name='WAP Stack Wrapper' bldFile='common/generic/WAP-STACK/WAPSTACK/GROUP' />
+	<unit unitID='MROUTERSECURE' name='mRouterSecure' bldFile='common/generic/connectivity/mRouterSecure/group' />
+	<unit unitID='MROUTER-PLUGIN' name='mRouter-plugin' bldFile='common/generic/connectivity/BAL/Plugins/mRouter3/group' />
+	<unit unitID='PLPVARIANT' name='connectivity_legacy_plp_plpvariant' bldFile='common/generic/connectivity/legacy/plp/PLPVARIANT' />
+	<unit unitID='PLP' name='connectivity_legacy_plp_plpgrp' bldFile='common/generic/connectivity/legacy/plp/PLPGRP' />
+	<unit unitID='BRDCST' name='connectivity_legacy_brdcst' bldFile='common/generic/connectivity/legacy/BRDCST/GROUP' />
+	<unit unitID='MTPUSBSIC' name='mtp_usbsic' bldFile='common/generic/mtp/transports/usbsic/group' />
+	<unit unitID='MTPFRAMEWORK' name='mtp_framework' bldFile='common/generic/mtp/framework/group' />
+	<unit unitID='RTP' name='mm-protocols_rtp' bldFile='common/generic/mm-protocols/rtp/group' />
+	<!-- not including <unit unitID='SIP_COM' name='mm-protocols_sip_com' bldFile='common/generic/mm-protocols/sip/group' /> -->
+	<unit unitID='SIP_COM2' name='mm-protocols_SIP2_Com' bldFile='common/generic/mm-protocols/sip2/group' />
+	<!-- excluding <unit unitID='SIPCPR' name='mm-protocols_SIPCPR' bldFile='common/generic/mm-protocols/ConnProv/SIPCPR/group' /> -->
+	<!-- excluding <unit unitID='SIPDUMMYPRT' name='mm-protocols_SIPDummyPRT' bldFile='common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group' /> -->
+	<!-- excluding <unit unitID='SIPSTATEMACHINE' name='mm-protocols_SipStateMachine' bldFile='common/generic/mm-protocols/SipProvEngine/SipStateMachine/group' /> -->
+	<!-- excluding <unit unitID='SIPPARAMS' name='mm-protocols_SIPParams' bldFile='common/generic/mm-protocols/SubConnProv/SIPParams/group' /> -->
+	<!-- excluding <unit unitID='SIPSCPR' name='mm-protocols_SIPSCPR' bldFile='common/generic/mm-protocols/SubConnProv/SIPSCPR/group' /> -->
+	<unit unitID='GFXTRANSEFFECT' name='app-framework_gfxtranseffect' bldFile='common/generic/app-framework/gfxtranseffect/group' />
+	<unit unitID='EGUL' name='app-framework_egul' bldFile='common/generic/APP-FRAMEWORK/EGUL/GROUP' />
+	<unit unitID='NUMBERCONVERSION' name='app-framework_numberconversion' bldFile='common/generic/APP-FRAMEWORK/NumberConversion/group' />
+	<unit unitID='GRID' name='app-framework_grid' bldFile='common/generic/APP-FRAMEWORK/GRID/GROUP' />
+	<unit unitID='CLOCK' name='app-framework_clock' bldFile='common/generic/APP-FRAMEWORK/CLOCK/GROUP' />
+	<unit unitID='BMPANIM' name='app-framework_bmpanim' bldFile='common/generic/APP-FRAMEWORK/BmpAnim/GROUP' />
+	<unit unitID='ANIMATION' name='app-framework_animation' bldFile='common/generic/APP-FRAMEWORK/animation/group' />
+	<unit unitID='UIKON' name='app-framework_uikon' bldFile='common/generic/APP-FRAMEWORK/UIKON/GROUP' />
+	<unit unitID='UIKLAFGT' name='app-framework_uiklafgt' bldFile='common/generic/APP-FRAMEWORK/UIKLAFGT/GROUP' />
+	<unit unitID='CONE' name='app-framework_cone' bldFile='common/generic/APP-FRAMEWORK/CONE/GROUP' />
+	<unit unitID='FEPBASE' name='app-framework_fepbase' bldFile='common/generic/APP-FRAMEWORK/Fepbase/GROUP' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='VIEWSRV' name='app-framework_viewsrv' bldFile='common/generic/APP-FRAMEWORK/VIEWSRV/GROUP' />
+	<!-- excluding <unit unitID='CALINTERIMAPI' name='app-engines_calinterimapi' bldFile='common/generic/app-engines/calinterimapi/group' /> -->
+	<unit unitID='CALENDAR' name='app-engines_calendar' bldFile='common/generic/app-engines/calendar/group' />
+	<!-- excluding <unit unitID='AGNMODEL' name='app-engines_agnmodel' bldFile='common/generic/APP-ENGINES/AGNMODEL/GROUP' /> -->
+	<!-- excluding <unit unitID='AGNVERSIT' name='app-engines_agnversit' bldFile='common/generic/APP-ENGINES/AgnVersit/GROUP' /> -->
+	<unit unitID='AGNVERSIT2' name='app-engines_agnversit2' bldFile='common/generic/APP-ENGINES/AgnVersit2/GROUP' />
+	<!-- excluding <unit unitID='CNTMODEL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUP' /> -->
+	<unit unitID='CNTMODELSQL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUPSQL' />
+	<unit unitID='PHBKSYNC' name='telephony_phbksync' bldFile='common/generic/TELEPHONY/phbksync/group' />
+	<unit unitID='VERSIT' name='app-services_versit' bldFile='common/generic/APP-SERVICES/VERSIT/GROUP' />
+	<unit unitID='CALCON' name='app-services_calcon' bldFile='common/generic/APP-SERVICES/Calcon/GROUP' />
+	<unit unitID='BACKUPRESTORENOTIFICATION' name='app-services_BackupRestoreNotification' bldFile='common/generic/APP-SERVICES/BACKUPRESTORENOTIFICATION/GROUP' />
+	<unit unitID='DAMODEL' name='app-engines_damodel' bldFile='common/generic/APP-ENGINES/DAMODEL/GROUP' />
+	<unit unitID='SHENG' name='app-engines_sheng' bldFile='common/generic/APP-ENGINES/SHENG/GROUP' />
+	<unit unitID='WPENG' name='app-engines_wpeng' bldFile='common/generic/APP-ENGINES/WPENG/GROUP' />
+	<unit unitID='MSG_FRAMEWORK' name='messaging_framework' bldFile='common/generic/messaging/framework/group' />
+	<unit unitID='MSG_BIOMSG' name='messaging_biomsg' bldFile='common/generic/messaging/biomsg/group' />
+	<unit unitID='MSG_MMS_SETTINGS' name='messaging_mmssettings' bldFile='common/generic/messaging/mmssettings/group/' />
+	<unit unitID='MSG_BIOWATCHERSCDMA' name='messaging_biomsg_biowatchers_cdma' bldFile='common/generic/messaging/biomsg/biowatcherscdma/group' />
+	<unit unitID='MSG_SCHEDULEDSEND' name='messaging_schedulesend' bldFile='common/generic/messaging/schedulesend/group' />
+	<unit unitID='MSG_EMAIL' name='messaging_email' bldFile='common/generic/messaging/email/group' />
+	<unit unitID='MSG_IMAP' name='messaging_email_imap' bldFile='common/generic/messaging/email/imap/group' />
+	<unit unitID='MSG_OBEXMTM' name='messaging_obex' bldFile='common/generic/messaging/obex/group' />
+	<unit unitID='MSG_SMS8.1' name='messaging_sms_multimode' bldFile='common/generic/messaging/sms/multimode/group' />
+	<unit unitID='CONNECTIVITY' name='connectivity' bldFile='common/generic/CONNECTIVITY/GROUP' />
+	<unit unitID='SECUREBACKUPENGINE' name='connectivity_securebackupengine' bldFile='common/generic/connectivity/SecureBackupEngine/group' />
+	<unit unitID='MTPFILEDP' name='mtp_filedp' bldFile='common/generic/mtp/dataproviders/filedp/group' />
+	<unit unitID='SYNCMLCLIENT' name='SyncML' bldFile='common/generic/SyncML/Framework/Group' />
+	<unit unitID='SYNCMLDMCLIENT' name='SyncML_DM' bldFile='common/generic/SyncML/DevMan/Group' />
+	<unit unitID='DEVPROV_DEVMAN_FRAMEWORK' name='devprov_devman_framework' bldFile='common/generic/DEVPROV/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_FRAMEWORK' name='devprov_clientprov_framework' bldFile='common/generic/DEVPROV/ClientProv/Group' />
+	<unit unitID='SYNCMLDSCLIENT' name='SyncML_DS' bldFile='common/generic/SyncML/DataSync/Group' />
+	<unit unitID='DEVPROV_DEVMAN_ADAPTERS' name='devprov_devman_adapters' bldFile='common/generic/DEVPROV/Adapters/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_ADAPTERS' name='devprov_clientprov_adapters' bldFile='common/generic/DEVPROV/Adapters/ClientProv/Group' />
+	<unit unitID='MIDP2INSTALLER_9.2' name='MIDP2INSTALLER' bldFile='common/generic/j2me/systemamsV1_5' />
+	<unit unitID='MemSpy' name='graphics_memspy' bldFile='common/generic/graphics/testutils/memspy/group' />
+	<unit unitID='ASSABET_EKA2' name='base_assabet' bldFile='cedar/generic/BASE/ASSABET' />
+	<unit unitID='INTEGRATORAP_EKA2' name='base_integrator_integratorap' bldFile='cedar/generic/base/integrator/integratorap' />
+	<unit unitID='INTEGRATOR_CORE_EKA2' name='base_integrator_core_8.1b' bldFile='cedar/generic/base/integrator/core' />
+	<unit unitID='INTEGRATOR_CM920_EKA2' name='base_integrator_core_cm920' bldFile='cedar/generic/base/integrator/core/cm920' />
+	<unit unitID='INTEGRATOR_CM1136_EKA2' name='base_integrator_core_cm1136' bldFile='cedar/generic/base/integrator/core/cm1136' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='UI_BENCH' name='graphics_ui_bench' bldFile='common/generic/graphics/ui_bench/group' />
+	<unit unitID='FAX' name='telephony_fax' bldFile='common/generic/TELEPHONY/FAX/GROUP' />
+	<unit unitID='DUMMY' name='additional_dummy' bldFile='common/generic/tools/cbr/dummy' />
+	<unit unitID='BASE_SDIOTESTS' name='base_sdiotests' bldFile='cedar/generic/base/e32utils/sdio' />
+	<unit unitID='E32UTILS_EKA2' name='base_e32utils' bldFile='cedar/generic/BASE/E32Utils/GROUP' />
+	<unit unitID='ERRORRESGT' name='app-framework_errorresgt' bldFile='common/generic/APP-FRAMEWORK/ERRORRESGT/GROUP' />
+	<unit unitID='GDITOOLS' name='graphics_gditools' bldFile='common/generic/GRAPHICS/GDITools/GROUP' />
+	<unit unitID='GDTRAN' name='GDTRAN' bldFile='common/generic/GRAPHICS/GDTran/GROUP' />
+	<unit unitID='INTEGRATIONTEST' name='networking_integrationtest' bldFile='common/generic/NETWORKING/Integrationtest/group' />
+	<unit unitID='MRPTEST' name='mtp_test' bldFile='common/generic/mtp/test/group' />
+	<unit unitID='BASEINTEGRATIONTEST' name='base_integration_test' bldFile='cedar/generic/base_integration_test/group' />
+	<unit unitID='MOBILEIP' name='networking_mobileip' bldFile='common/generic/networking/mobileip/group' />
+	<unit unitID='MSG_SENDAS2' name='messaging_sendas2' bldFile='common/generic/messaging/sendas2/group' />
+	<unit unitID='MSG_TEST' name='messaging_test' bldFile='common/generic/messaging/test/group' />
+	<unit unitID='MSG_URLHANDLER' name='messaging_urlhandler' bldFile='common/generic/messaging/urlhandler/group' />
+	<unit unitID='MVS_APP' name='multimedia_mvs_app' bldFile='common/generic/multimedia/mvs/application/group' />
+	<unit unitID='MVS_AGENTS' name='multimedia_mvs_agents' bldFile='common/generic/multimedia/mvs/agents/group' />
+	<unit unitID='TEMPLATE_EKA2' name='base_template' bldFile='cedar/generic/base/template/template_variant' />
+	<unit unitID='WAPBASE' name='wap-browser_wapbase' bldFile='common/generic/WAP-BROWSER/WAPBASE/GROUP' />
+	<unit unitID='WLDDATABASEKIT' name='WLDDATABASEKIT' bldFile='common/generic/APP-SERVICES/Wlddatabasekit/GROUP' />
+	<unit unitID='WLDTOOLS' name='app-services_wldtools' bldFile='common/generic/APP-SERVICES/WLDTOOLS/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/little.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/preexport.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!-- This file is used to export meta data in a pre-run through of raptor. 
+	i.e. raptor -s <thisfile> EXPORT
+     when system included mmh files are removed from MMPs this can be removed. -->
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="preexports">
+        <component name="envelope">
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+        <unit unitID='esockdebug' name='esockdebug' bldFile='common/generic/comms-infras/esock/debug/MessageInterceptRegister/group' />
+        <unit unitID='commsdebugutility' name='commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/group' />
+        <unit unitID='usblogger' name='usblogger' bldFile='common/generic/ser-comms/usb/logger/group' />
+        <unit unitID='packetlogger' name='packetlogger' bldFile='common/generic/networking/packetlogger/group' />
+        <unit unitID='commsfw' name='cflog' bldFile='common/generic/comms-infras/commsfw/group' />
+
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib0.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="RaptorEnvelope">
+      <module name="Tests">
+        <component name="envelope">
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group"/>
+          <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib1.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+          <unit unitID="001" name="emime" bldFile="common/generic/app-framework/emime/group"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ezlib/group"/>
+          <unit unitID="001" name="caf" bldFile="common/generic/syslibs/caf2/group"/>
+          <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group/"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group"/>
+          <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib2.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ezlib/group"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ecom/ongoing/group"/>
+          <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group"/>
+	  <unit unitID="001" name="ezlib" bldFile="common/generic/syslibs/ezlib/group" />
+	  <unit unitID="001" name="caf2" bldFile="common/generic/syslibs/caf2/group" />
+	  <unit unitID="001" name="stdlib" bldFile="common/generic/syslibs/stdlib/group" />
+	  <unit unitID="001" name="FATCharsetConv" bldFile="common/generic/syslibs/FATCharsetConv/group" />
+	  <unit unitID="001" name="pwrcli" bldFile="common/generic/syslibs/pwrcli/group" />
+	  <unit unitID="001" name="SysAgent2" bldFile="common/generic/syslibs/SysAgent2/group" />
+	  <unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/initLocale/group" />
+	  <unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/group" />
+	  <unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/esql/group" />
+	  <unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/group" />
+	  <unit unitID="001" name="xml" bldFile="common/generic/syslibs/xml/group" />
+	  <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group" />
+	  <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group" />
+	  <unit unitID="001" name="logeng" bldFile="common/generic/syslibs/logeng/ongoing/group" />
+	  <unit unitID="001" name="centralrepository" bldFile="common/generic/syslibs/centralrepository/group" />
+	  <unit unitID="001" name="schsvr" bldFile="common/generic/syslibs/schsvr/ongoing/group" />
+	  <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group" />
+	  <unit unitID="001" name="sql" bldFile="common/generic/syslibs/SQL/group" />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt test1();
+TInt test2();
+TInt test3();
+TInt test4();
+TInt test5();
+TInt test6();
+
+TInt E32Main()
+{
+	test1();
+	test2();
+	test3();
+	test4();
+	test5();
+	test6();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/empty_cfg.cfg	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/invalid_cfg.cfg	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+metadata\include\missing_hrh.hrh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/test_cfg.cfg	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+metadata\include\test_hrh.hrh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/include/subdir/test_hrh_include.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// test_hrh_include.h
+
+#ifndef TEST_HRH_INCLUDE
+#define TEST_HRH_INCLUDE
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/include/test_hrh.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1224 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test_hrh.hrh (base on Symbian_OS_v9.4.hrh)
+*
+*/
+
+#include <subdir/test_hrh_include.h>
+
+
+/**
+@publishedAll
+
+EKA2
+
+If EKA2 is defined, assume Kernel Architecture 2.
+If EKA2 is not defined, assume Kernel Architecture 1
+
+Kernel Architecture 2 is a defining property of the Cedar platform.
+Kernel Architecture 1 is a defining property of the Beech platform.
+*/
+#ifndef EKA2
+#define EKA2
+#endif
+
+/**
+@publishedAll
+@deprecated
+@since 8.0
+
+SYMBIAN_CRYPTO
+
+*/
+#define SYMBIAN_CRYPTO
+
+/**
+@publishedAll
+
+__CNF_FORMAT_V2__
+
+If __CNF_FORMAT_V2__ is defined, assume that Epoccnf.pl generates
+files in version 2 of the CNF format, and that both versions 1
+and 2 of this file format can be read by Conarc.
+If __CNF_FORMAT_V2__ is not defined, assume that Epoccnf.pl
+generates files in version 1 of the CNF format, and that only
+version 1 of this file format can be read by Conarc.
+*/
+#define __CNF_FORMAT_V2__
+
+/**
+@publishedAll
+@deprecated
+@since 8.0
+
+__KEYSTORE_API_V2__
+
+*/
+#define __KEYSTORE_API_V2__
+
+/**
+@publishedAll
+
+__BLUETOOTH_API_V2__
+
+If __BLUETOOTH_API_V2__ is defined assume that version 2 of the bluetooth
+subsystem will be built.  This is binary compatible with version 1 for all
+published-all APIs but is not source compatible.  Users of classes defined
+in BTDevice.h and BTManClient.h may need to make source changes.
+
+The BTRegistry.dll is removed, users should link instead against BTManClient.lib.
+The APIs provided by that DLL were classified as published-partner.
+
+@see CBTDevice
+@see SGL.GT172.103 - Bluetooth Compatibility Specification
+
+If __BLUETOOTH_API_V2__ is not defined then version 1 of the bluetooth subsystem
+will be built.
+
+*/
+#define __BLUETOOTH_API_V2__
+
+
+/**
+@publishedAll
+
+__OBEX_USER_DEFINED_HEADERS__
+
+If __OBEX_USER_DEFINED_HEADERS__ is defined then the new API support for extended Headers will be available.
+This new support includes USER DEFINED HEADERS and the COUNT header.
+If this functionality is compiled out then the old API is available as before.
+For more information on see documents shown below.
+
+@see SGL.GT171.097 - Obex Header Extension how to
+@see SGL.GT171.095 - Obex Extension Design Document
+*/
+#define __OBEX_USER_DEFINED_HEADERS__
+
+
+/**
+@publishedAll
+
+__HIDE_IPC_V1__
+
+If __HIDE_IPC_V1__ is defined then the deprecated insecure IPC APIs will be removed from various Symbian OS header files. Classes affected include CSession, CServer, RMessage and RMessageptr.
+
+For more information see the document listed below.
+
+@see SMG.SM0005.004 - Platform Security Development for Zephyr
+@see CSession
+@see CServer
+@see RMessage
+@see RMessagePtr
+*/
+#define __HIDE_IPC_V1__
+
+
+/**
+@internalAll
+
+DO_NOT_USE_THIS_MACRO
+
+If DO_NOT_USE_THIS_MACRO is defined, assume the Cedar platform.
+If DO_NOT_USE_THIS_MACRO is not defined, assume the Beech platform.
+
+This macro was originally introduced as a stopgap measure, to
+identify differences between Symbian OS v7.0s and Symbian OS v8.0b
+which were not specifically to do with the change from Kernel
+Architecture 1 to Kernel Architecture 2.
+
+This macro will be deprecated when a suitable alternative is provided.
+*/
+
+#ifndef DO_NOT_USE_THIS_MACRO
+#define DO_NOT_USE_THIS_MACRO
+#endif
+
+/**
+@publishedAll
+
+__CONDITIONS_SCHEDULES_VALID__
+
+If __CONDITIONS_SCHEDULES_VALID__ is defined then the Task Scheduler component 
+supports creating persistent schedules based on a set of conditions and a 
+timeout. The schedule is run when either all the conditions are met or the 
+timeout is reached.
+
+This functionality is part of PREQ694 - PREQ 694 - Automatic sending of SMS on
+network reconnection.
+*/
+
+#define __CONDITIONS_SCHEDULES_VALID__
+
+
+/**
+@publishedAll
+
+__JAVACUSTOMINSTALL__
+
+If __JAVACUSTOMINSTALL__ is defined then an additional UI callback is made after MIDlet
+installation has succeeded or failed. This callback is intended for information only and the 
+information passed can be licensee customised. The intention would be that the device user
+can use this information to diagnose install problems in conjunction with network operators.
+If this #define is not present then the callback is not present and is not called.
+For more information on see documents shown below.
+
+@see SGL.GT0188.253 CDMA Java MIDlet Installer Component Design
+*/
+#define __JAVACUSTOMINSTALL__
+
+/**
+@publishedAll
+
+__UI_FRAMEWORKS_V2__
+
+If __UI_FRAMEWORKS_V2__ is defined then PlatSec aware UI Frameworks API's will be available. 
+The following frameworks will be affected:
+
+Applications 
+File Recognizers
+Data Recognizers
+Notifiers
+Control Panel Plugins
+Feps
+App-initialization (CEikLibrary)
+Converters
+Error-Resolving
+*/
+#define __UI_FRAMEWORKS_V2__
+#define SYMBIAN_HIDE_UI_FRAMEWORKS_V1
+#define SYMBIAN_REMOVE_UI_FRAMEWORKS_V1
+
+/**
+@publishedAll
+
+__BLUETOOTH_HCI_ALLOWS_AFH__
+
+If __BLUETOOTH_HCI_ALLOWS_AFH__ is defined the HCI interface will require the Adaptive Frequency Hopping CHCIBase pure virtual functions to be implemented in any derived class in Licensee produced host controller interface (HCI) code. 
+If this is not defined no AFH commands may be sent to the host controller, and no AFH events will be received from the host controller. 
+The APIs provided by the HCI DLL were classified as published-partner.
+
+@see CHCIBase
+@see MHCIEventObserver
+
+*/
+#define __BLUETOOTH_HCI_ALLOWS_AFH__
+
+/**
+@publishedAll
+
+__MESSAGING_API_V2__
+
+If __MESSAGING_API_V2__ is defined then new functionality 
+is available within the Messaging sub-system to support a 
+platform secured OS, e.g. the Attachment API.
+*/
+#define __MESSAGING_API_V2__
+#define __HIDE_MESSAGING_API_V1__
+#define __REMOVE_MESSAGING_API_V1__
+
+/**
+@internalAll
+
+__BC_FUTURE_PROOFING__
+
+Support for the implementation of PREQ743 "Introduction of interface 
+robustness patterns to support future binary compatibility".
+*/
+#define __BC_FUTURE_PROOFING__
+
+/**
+@publishedAll
+
+__SECURE_DATA__
+
+When __SECURE_DATA__ is defined, public read-only files are
+assumed to be in their data-caged locations. The presence of
+this #define does not imply that data-caging is enforced, and
+does not imply that binaries have been relocated to sys\bin.
+
+This #define supports PREQ537 "Platform security - file system layout".
+*/
+#define __SECURE_DATA__
+
+/**
+@publishedPartner
+
+__SECURE_BIN__
+
+When __SECURE_BIN__ is defined, executable files stored as
+"data" in the XIP ROM are assumed to be in their data-caged 
+locations. The presence of this #define does not imply that 
+data-caging is enforced, and does not imply that binaries have 
+been relocated to sys\bin.
+
+This #define supports PREQ537 "Platform security - file system layout".
+*/
+#define __SECURE_BIN__
+
+/**
+@publishedAll
+
+__SECURE_TELEPHONY__
+
+If __SECURE_TELEPHONY__ is defined, all Platform Security functionality 
+within the Telephony subsystem will be enabled.
+If __SECURE_TELEPHONY__ is not defined, no Platform Security functionality 
+within the Telephony subsystem is enabled.
+*/
+#define __SECURE_TELEPHONY__
+
+/**
+@publishedAll
+
+SYMBIAN_NETWORKING_PLATSEC
+
+If SYMBIAN_NETWORKING_PLATSEC is defined, additional platform security 
+related functionality in enabled in the Comms-Infras and Networking 
+subsystems (e.g. API policing).
+*/
+#define SYMBIAN_NETWORKING_PLATSEC
+
+/**
+@publishedAll
+
+__WATCHER_API_V2__
+
+If __WATCHER_API_V2__ is defined then the 
+watcher framework supports ECOM watcher plugins.
+*/
+#define __WATCHER_API_V2__
+/**
+@publishedAll
+
+SYMBIAN_COREAPPS_API_V2
+
+If SYMBIAN_COREAPPS_API_V2 is defined then new functionality is available within 
+the Core Apps sub-system (Contacts Model, Agenda Model and World Server) to 
+support a platform secured OS.
+*/
+#define SYMBIAN_COREAPPS_API_V2
+
+
+/**
+@publishedAll
+
+SYMBIAN_COREAPPS_PLUGIN_API_V2
+
+If SYMBIAN_COREAPPS_PLUGIN_API_V2 is defined then  Ecom solely is used as loading 
+mechanism.The legacy plugin loading mechanism is used otherwise.
+*/
+#define SYMBIAN_COREAPPS_PLUGIN_API_V2
+
+/**
+@PublishedPartner
+
+SYMBIAN_SECURE_DBMS
+
+When SYMBIAN_SECURE_DBMS is defined, support for secure 
+shared databases is enabled within DBMS.  
+When not defined, all secure-shared-database-specific APIs 
+take the form of dummy implementations which return KErrNone.
+*/
+#define SYMBIAN_SECURE_DBMS
+
+/**
+@publishedPartner
+
+__SECURE_SOFTWARE_INSTALL__
+
+When __SECURE_SOFTWARE_INSTALL__ is defined, the Software
+Install APIs are replaced with versions appropriate to
+the Secure Platform.
+
+This #define supports PREQ56 "Software install enhancements"
+*/
+#define __SECURE_SOFTWARE_INSTALL__
+
+/**
+@publishedAll
+
+__SECURITY_PLATSEC_ARCH__
+
+If this macro is defined, then platform security aware security services 
+APIs will be present.  This includes architectural changes to several 
+components.
+
+If this macro is not defined, the original version (since 8.0) of the 
+security services APIs will be present. 
+
+The following components are affected:
+  cryptotokens
+  certman
+  filetokens
+
+*/
+#define __SECURITY_PLATSEC_ARCH__
+
+/**
+@publishedAll
+
+SYMBIAN_SECURE_ECOM
+
+When SYMBIAN_SECURE_ECOM is not defined, ECOM plugins are discovered by 
+searching for DLLs in System\libs\plugins, and inferring the name of 
+the resource file from the UID3 of the DLL.
+
+When SYMBIAN_SECURE_ECOM is defined, ECOM plugins will also be discovered
+by searching for resource files in \Resource\Plugins, and inferring the
+name of the DLL from the name of the resource file. When platform security
+is fully enforced, only this new style of discovery will work.
+
+@see common\generic\syslibs\documentation\syslibs_functional_specification.doc
+*/
+#define SYMBIAN_SECURE_ECOM
+
+/**
+@publishedAll
+
+SYMBIAN_SECURITY_CAF_RFILE_HANDLE
+
+If SYMBIAN_SECURITY_CAF_RFILE_HANDLE is defined then it enables the Content Access 
+Framework to read from files passed to it as an open RFile handles instead of CAF 
+opening the file itself. This allows files stored in a data caged directory to be 
+read by CAF.  
+
+*/
+#define SYMBIAN_SECURITY_CAF_RFILE_HANDLE
+
+/** 
+@publishedPartner
+
+SYMBIAN_C32ROOT_API_V2
+
+Strengthens the C32Root API and extends it to include 
+configuration of queue length for bindings. 
+
+This #define supports PREQ318.
+*/
+#define SYMBIAN_C32ROOT_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_ESOCK_V3
+
+If SYMBIAN_ESOCK_V3 is defined, the socket server allows protocol 
+families to run in individual threads to protect one protocol family 
+from the behaviour of another. The allocation of protocol families to
+threads is determined by a naming convention on the ESK files.
+
+This #define supports PREQ318.
+*/
+#define SYMBIAN_ESOCK_V3
+
+/**
+@publishedPartner
+
+SYMBIAN_UIKON_UNIFICATION
+
+When SYMBIAN_UIKON_UNIFICATION is defined, the existing 
+CEikSrvAppUiBase class is replaced with a customisable class
+provided by the System GUI. 
+
+This #define supports PREQ819 and PREQ826
+*/
+#define SYMBIAN_UIKON_UNIFICATION
+
+/**
+@publishedPartner
+@released 9.0
+
+SYMBIAN_NETWORKING_RSUBCONNECTION
+
+If SYMBIAN_NETWORKING_RSUBCONNECTION is defined, the RQosChannel API is
+removed, and the RSubConnection API exported by ESOCK must be used instead.
+
+This #define supports PREQ 26.
+*/ 
+#define SYMBIAN_NETWORKING_RSUBCONNECTION
+
+/**
+@publishedAll
+
+SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2
+
+If SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2 is defined then 
+the following additional features will be available in CONE.
+1) Functions to set and get the background of a control.
+2) Functions to add components to a compound control in a simpler way.
+3) Hooks for the support of layout managers.
+4) A component that will provide fonts and cache them for easier use 
+   of these fonts by controls.
+
+@see CCoeControl
+*/
+#define SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_SECURE_MIDLET_INSTALL
+
+If SYMBIAN_SECURE_MIDLET_INSTALL is defined then the Java MIDlet 
+Installer supports installation under Platform Security policies, 
+using the interface published by security\JavaMIDletInstaller.
+
+If SYMBIAN_SECURE_MIDLET_INSTALL is not defined then Java MIDlet 
+installation is achieved through the security\appinst interfaces.
+*/
+#define SYMBIAN_SECURE_MIDLET_INSTALL
+
+/**
+@publishedAll
+
+__SECURE_BACKUP__
+
+If __SECURE_BACKUP__ is defined, the Secure Backup server replaces
+the use of SCRemFs for backup and restore, changing the backup protocol.
+Applications which have private data need to provide additional backup 
+registration files, and may use Publish & Subscribe to receive 
+notification of backup requests.
+
+This #define supports PREQ716 - Provide support for secure backup and 
+restore for licensee PC Connectivity software 
+*/
+#define __SECURE_BACKUP__
+
+/**
+@published All 
+
+SYMBIAN_COMMS_REPOSITORY
+
+Comms data is now stored in the Central Repository rather than the DBMS server.  
+A new module, CommsDat.dll, replaces Commdb.dll as the interface for comms data stored on a device. 
+CommsDat has a different API to Commdb, but provides equivalent functionality. 
+There is no longer an SQL API for access to Comms Data. 
+Commdb tools have been migrated for use with CommsDat 
+Commdb is deprecated and should not be used, though it remains as a temporary BC shim on top of CommsDat.   
+*/
+#define SYMBIAN_COMMS_REPOSITORY
+
+/**
+@publishedAll
+
+__HIDE_WATCHER_API_V1__
+
+Hides support APIs for loading non-ECOM watcher plugins. Non-ECOM watcher 
+plugins are still loaded. The associated define __REMOVE_WATCHER_API_V1__
+removes the implementation of the support APIs.
+
+Assumes that __WATCHER_API_V2__ has been defined.
+*/
+#define __HIDE_WATCHER_API_V1__
+#define __REMOVE_WATCHER_API_V1__
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_REMOVE_RGENERIC
+
+If this macro is defined the deprecated APIs RGenericAgent, 
+RNif, RNifMonitor and Nifman are removed. All of these APIs, 
+exported by NIFMAN, have been deprecated and replaced by 
+the RConnection API exported by ESOCK.
+
+@see Break request BR1070 
+*/ 
+#define SYMBIAN_NETWORKING_REMOVE_RGENERIC
+
+/**
+@publishedPartner
+
+SYMBIAN_IGNORE_BIN_TARGETPATH
+
+When SYMBIAN_IGNORE_BIN_TARGETPATH is defined the TARGETPATH keyword in MMP files is ignored for executables. 
+Executables for the emulator instead get built to the default location.
+e.g. \epoc32\release\winscw\udeb
+*/
+#define SYMBIAN_IGNORE_BIN_TARGETPATH
+
+/**
+@publishedAll
+
+SYMBIAN_HIDE_COREAPPS_API_V1
+
+If SYMBIAN_HIDE_COREAPPS_API_V1 is defined then the insecure CoreApps APIs
+will be removed from various Symbian OS header files. Components affected are 
+Contacts Model, Agenda Model and World Server.
+
+The related define SYMBIAN_REMOVE_COREAPPS_API_V1 removes the underlying implementations,
+causing a binary compatibility break to match the source compatibility break.
+*/
+#define SYMBIAN_HIDE_COREAPPS_API_V1
+#define SYMBIAN_REMOVE_COREAPPS_API_V1
+
+/**
+@publishedAll
+
+__SECURE_API__
+
+Hides unsecure APIs. Many of these have been replaced by Secure variants 
+but some are no longer available in a Secure platform.
+
+e.g.
+
+@see User::RenameThread
+@see User::CommandLine
+
+*/
+#define __SECURE_API__
+#define SYMBIAN_REMOVE_INSECURE_API
+
+/**
+@publishedPartner
+@since 8.1
+
+SYMBIAN_BLUETOOTH_REQUIRES_HCI_FLUSH_COMPLETE_EVENT 
+
+If this is defined, the MHCIEventObserver class must implement
+the FlushCompleteEvent virtual function, which will be used by 
+the link manager to send Flush Complete events up to the stack. 
+If this macro is not defined, Flush Complete events will be discarded.
+
+@see MHCIEventObserver
+@see CHCIFacade
+*/
+#define SYMBIAN_BLUETOOTH_REQUIRES_HCI_FLUSH_COMPLETE_EVENT
+
+/**
+@publishedPartner
+
+SYMBIAN_FONT_METRICS_V2 
+
+If this is defined, then classes which derive from COpenFont (usually 
+these are part of a font rasterizer implementation) must set the 
+protected member variables:
+iFontAscentOfCapitals
+iFontAscentIncAccents
+iFontDescent
+iFontLineGap
+to appropriate values during the creation of a font. 
+If this macro is not defined then these member variables do not exist.
+
+@see COpenFont
+*/
+#define SYMBIAN_FONT_METRICS_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1
+
+When SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1 is defined a new EColor16MA 
+display mode is available, having an alpha channel. The alpha support 
+is tailored to the needs of wserv server-side, although some alpha 
+support will also be available to client applications.
+
+This #define supports PREQ915.
+*/
+#define SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1
+
+/**
+@publishedPartner
+
+SYMBIAN_TELEPHONY_IMS
+
+If SYMBIAN_TELEPHONY_IMS is defined then IMS related APIs are included 
+in Telephony components.
+
+This #define supports PREQ61.
+*/
+#define SYMBIAN_TELEPHONY_IMS
+
+/**
+@internalComponent
+
+__LEAVE_EQUALS_THROW__
+
+If __LEAVE_EQUALS_THROW__ is defined, User::Leave() and TRAP() are 
+implemented in terms of C++ exceptions where the compiler supports this.
+If __LEAVE_EQUALS_THROW__ is not defined, the legacy Symbian exception 
+mechanism is used instead.
+
+Support for C++ exceptions by the compiler is indicated by the 
+internal macro __SUPPORT_CPP_EXCEPTIONS__ supplied by the tools.  
+Where this macro is not present, __LEAVE_EQUALS_THROW__ is automatically 
+undefined.
+
+This macro supports PREQ519 "Implement User::Leave() in terms of throw()".
+*/
+#define __LEAVE_EQUALS_THROW__
+
+/**
+@publishedPartner
+
+SYMBIAN_CAF_V2
+
+The SYMBIAN_CAF_V2 flag indicates the CAF API v2 is present. 
+CAF v2 supports files containing multiple content objects, which requires 
+a change of API for CAF agents: agents written for CAF v1 will not compile
+against CAF v2. See BR.1219.2 for migration information.
+
+This #define supports PREQ780.
+*/
+#define SYMBIAN_CAF_V2
+
+/**  
+@publishedAll 
+
+SYMBIAN_MDF_API_V2 
+
+This macro selects the Symbian OS 9.x phase of development in 
+the Media Device Framework API, including changes to enable 
+MDF Video Decoder Hardware devices to support applications, 
+streaming and demux.
+
+@see CMMFVideoPlayHwDevice
+*/ 
+#define SYMBIAN_MDF_API_V2
+
+/**
+SYMBIAN_GENERIC_SYSTEM_STARTUP
+
+@publishedPartner
+
+This #define enables the generic start-up architecture in
+which the System Starter process is responsible for the
+controlled startup of the system. 
+
+The #define supports PREQ808 and PREQ809.
+*/
+#define SYMBIAN_GENERIC_SYSTEM_STARTUP
+
+/**
+SYMBIAN_STAGED_SYSTEM_STARTUP
+
+@publishedPartner
+
+When SYMBIAN_STAGED_SYSTEM_STARTUP is defined, the staged 
+start-up architecture has been introduced into the OS and 
+'Start-up State Aware' components can make use of the 
+architecture.
+
+This #define supports PREQ 810.
+*/
+#define SYMBIAN_STAGED_SYSTEM_STARTUP
+
+/**
+SYMBIAN_TIMEZONE_SUPPORT_V1
+
+@publishedAll
+
+When SYMBIAN_TIMEZONE_SUPPORT_V1 is defined the App-services TzClient.dll 
+module (and accompanying import library) is made available for client 
+application use.
+
+This #define supports PREQ663
+*/
+#define SYMBIAN_TIMEZONE_SUPPORT_V1
+
+/**
+SYMBIAN_ECAM_CHUNKAPI
+
+@publishedAll
+@released
+
+Specifies that an extended API will be used in the multimedia 
+camera interface. This has a v2 observer which allows camera data 
+to be returned without buffer copy, and also allows clients to set 
+camera access priority
+
+@see CCamera
+@see MCameraObserver2
+
+This #define supports PREQ799.
+*/
+#define SYMBIAN_ECAM_CHUNKAPI
+
+/**
+@publishedAll
+
+SYMBIAN_SECURE_PUBLISH_AND_SUBSCRIBE
+
+If this macro is defined, then the Bluetooth stack reconfigures to take
+advantage of security mechanisms in Publish and Subscribe. Any other
+components requiring reconfiguration to make use of Publish and Subscribe
+can also use this macro.
+
+*/
+#define SYMBIAN_SECURE_PUBLISH_AND_SUBSCRIBE
+
+/**
+@publishedAll
+
+SYMBIAN_MMF_AUTOPAUSE_RESUME
+
+This #define enables extra features in the MMF APIs for auto pause 
+and resume of audio streams.
+*/
+#define SYMBIAN_MMF_AUTOPAUSE_RESUME
+
+/**
+@publishedPartner
+
+SYMBIAN_BLUETOOTH_ESCO_ENABLED
+
+Enable support for Bluetooth eSCO synchronous links.  
+Defining this macro extends the interface to CHCIBase to support 
+the Synchronous connection commands added in Bluetooth 1.2.
+*/
+#define SYMBIAN_BLUETOOTH_ESCO_ENABLED
+
+/**
+SYMBIAN_ROM_STATIC_PLUGIN_INFORMATION
+
+@publishedPartner
+ 
+This macro enables a consolidation phase in the ROM building 
+process to generate additional metadata for each ROM drive.  
+The metadata describes the content and structure of the ROM 
+conveniently filtered for any component that requires it.
+
+Components supply metadata with the "spidata" BUILDROM keyword.
+
+This macro supports PREQ806 and other requirements that 
+eliminate run-time scanning of ROM content.
+*/
+#define SYMBIAN_ROM_STATIC_PLUGIN_INFORMATION
+
+/**
+@publishedPartner
+
+SYMBIAN_BOOKMARK_DATABASE
+
+The Bookmark Database is an API used to provide system-wide 
+storage and management functionality for URI bookmarks. 
+If defined, this macro indicates that the Bookmark Database 
+API is present in the platform.
+*/
+#define SYMBIAN_BOOKMARK_DATABASE
+
+/**
+@publishedAll
+
+SYMBIAN_ASSUME_SECURE_DATA
+
+When this macro is defined, all data files are assumed to be in their secure
+locations, and all code which provided backward compatibility for the
+insecure locations is removed. For example, ICL extended resource files
+will not be loaded from System\Libs\Plugins, only from \Resource\ICL.
+
+This macro only makes sense if __SECURE_DATA__ is defined.
+*/
+#define SYMBIAN_ASSUME_SECURE_DATA
+
+/**
+@publishedPartner
+
+SYMBIAN_SWI_POST_INSTALL_REVOCATION
+
+When SYMBIAN_SWI_POST_INSTALL_REVOCATION is defined, 
+support for the SWI post install revocation service is enabled.
+
+This #define supports PREQ919
+*/
+#define SYMBIAN_SWI_POST_INSTALL_REVOCATION
+
+/**  
+@publishedAll 
+
+SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION
+
+This macro removes the trivial encryption APIs that are exported by EUSER. 
+
+See BR1320 for more details
+
+*/
+#define SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION
+
+/**
+@publishedPartner
+
+SYMBIAN_FLEXIBLE_ALARM
+
+When this macro is defined, Calendar Interim API, Alarm server and UIKON 
+Alert Server will support additional functionality.
+- Extra data can be attached to calendar alarm and allow UI app 
+to retrieve the associated data.
+- The Alarm server can send multiple expired alarms to Alert Server without 
+waiting for the previous alarm acknowledged first
+- A Resource file can be used to configure alarm play intervals and durations, 
+or to disable alarm sound control.
+
+This #define supports PREQ1118
+*/
+#define SYMBIAN_FLEXIBLE_ALARM
+
+/**
+@publishedPartner 
+
+SYMBIAN_C32_SERCOMMS_V2
+
+Description: 
+If SYMBIAN_C32_SERCOMMS_V2 is defined, the Comms Server allows grouped CSYs
+to get loaded into individual threads in order to avoid CSY blocking. 
+The allocation of CSYs to threads is determined by naming convention from 
+the configurator/INI file. 
+
+This #define supports PREQ890
+*/
+//#define SYMBIAN_C32_SERCOMMS_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_SMS_REL6_SUPPORT
+
+SMS Release 6 support is defined in the 3GPP specifications
+(3GPP TS 23.040 V6.5.0 and 3GPP TS 23.038 V6.1.0).
+If defined, this macro indicates that Symbian OS SMS APIs
+shall support Release 6 functionality.
+*/
+#define SYMBIAN_SMS_REL6_SUPPORT
+
+/**
+@publishedPartner
+
+SYMBIAN_HCI_API_V2
+
+If SYMBIAN_HCI_API_V2 is defined then the HCI APIs provided in PREQ750 
+(Bluetooth HCI improvements) will be required for use by a version 2 
+Bluetooth Stack and a version 2 HCI. These APIs are neither binary nor 
+source compatible with the previous version 1 HCI APIs. Both the original 
+version 1  Bluetooth stack and HCI, and the new version 2 Bluetooth stack 
+and HCI will be built, but both rombuild and the emulator will be 
+configured to use the version 2 binaries. The version 2 HCI will support 
+all commands and events listed in Bluetooth v2.0 specification.
+
+If SYMBIAN_HCI_API_V2 is not defined then only the version 1 Bluetooth 
+stack and HCI will be built and used by rombuild and the emulator.
+The version 1 HCI supports most but NOT all commands and events listed 
+in Bluetooth v2.0 specification.
+
+See BR1613 for more information.
+*/
+//#define SYMBIAN_HCI_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_UMTSR5
+
+If SYMBIAN_NETWORKING_UMTSR5 is defined support for the QoS 
+and IMS parameters introduced by Release 5 of the 3GPP 
+specification will be enabled. This involves a BC break in 
+TContextConfig - see BR1582.1 for details.
+
+@see TContextConfig
+
+This #define supports PREQ192 and PREQ635.
+*/
+#define SYMBIAN_NETWORKING_UMTSR5
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_3GPPDEFAULTQOS
+
+If SYMBIAN_NETWORKING_3GPPDEFAULTQOS is defined, support 
+for QoS modification on the default PDP context will be 
+enabled via the RSubconnection API.
+
+This #define supports PREQ870.
+*/
+#define SYMBIAN_NETWORKING_3GPPDEFAULTQOS
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_WIFI 
+
+If SYMBIAN_NETWORKING_WIFI is defined the following WiFi 
+functionality is enabled: 
+1) New WiFi components can be built. 
+2) WiFi specific CommsDat tables are enabled. 
+
+This #define supports PREQ719 and PREQ1054. 
+*/ 
+#define SYMBIAN_NETWORKING_WIFI
+
+/**
+@internalTechnology
+
+SYMBIAN_COMMSDEBUGUTILITY_V2
+
+If SYMBIAN_COMMSDEBUGUTILITY_V2 is defined then COMSDBGUTIL.DLL 
+becomes a thin layer over the System Tracer. Users of CCFLogIf class 
+have to migrate to use the __FLOG macros instead.
+
+This change also affects the way that CommsDebugUtility logging is
+controlled, and the format of the logs produced. See BR1632 and BR1715.
+*/
+//#define SYMBIAN_COMMSDEBUGUTILITY_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_LFFS_SIBLEY_NORFLASH
+
+If SYMBIAN_LFFS_SIBLEY_NORFLASH is defined support for LFFS on 
+Intel Sibley NOR flash is enabled.
+
+This #define supports PREQ912 and involves a BC break in the 
+parameter list for DMediaDriverFlash::Caps() - see BR1680 for details.
+*/
+//#define SYMBIAN_LFFS_SIBLEY_NORFLASH
+
+/** 
+@publishedAll 
+
+SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY 
+
+If SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY is defined 
+then the comms-infras framework supports the management plane 
+with the RCommsManager API providing support for connection 
+selection, bearer mobility and other functionality.
+
+This #define supports PREQ 1060. 
+*/ 
+//#define SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_IPSEC_IKE_V2
+
+If SYMBIAN_NETWORKING_IPSEC_IKE_V2 is defined, IPSEC will 
+be able to support Internet Key Exchange version 2 in 
+addition to IKE v1. This involves a change in the size of 
+the TPfkeyMsgBase class - see BR1736.1.
+
+Actual support for IKE v2 will depend on the provision 
+of a suitable plugin to the Key Management Daemon.
+
+This #define supports PREQ1223.
+*/
+#define SYMBIAN_NETWORKING_IPSEC_IKE_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_PKCS12
+
+If SYMBIAN_PKCS12 is defined, the PKCS#12 Key Derivation 
+Algorithm is supplied.
+
+This #define supports PREQ1054. 
+*/
+#define SYMBIAN_PKCS12
+
+/**
+@publishedAll
+
+SYMBIAN_CNTMODEL_V2
+
+If SYMBIAN_CNTMODEL_V2 is defined, clients of the
+Contacts Model can exploit the efficiency improvements
+introduced by PREQ811, e.g. efficient use of transactions. 
+
+This #define supports PREQ811
+*/
+#define SYMBIAN_CNTMODEL_V2
+
+/**
+@publishedAll
+
+SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS 
+
+If SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS is defined, new
+APIs are provided in cone.lib and ws32.lib which allow 
+applications to draw to multiple displays simultaneously and 
+react to a change of the active display.
+
+This #define supports PREQ1227
+
+@see CCoeEnv::ScreenDevice
+@see CScreenItem
+*/
+//#define SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+
+/**
+@publishedPartner
+
+SYMBIAN_CENTREP_NOC
+
+If SYMBIAN_CENTREP_NOC is defined, the Central Repository 
+includes Notify-Only Client Optimization. This will cause 
+repositories to be unloaded after a timeout even if the 
+connection is still open.
+
+This #define supports PREQ1228. 
+*/
+#define SYMBIAN_CENTREP_NOC
+
+/**
+@publishedAll
+
+SYMBIAN_VARIABLE_BITRATE_CODEC
+
+If SYMBIAN_VARIABLE_BITRATE_CODEC is defined then 
+CMMFSwCodecWrapper based audio hardware devices in the 
+Multimedia Framework (MMF) can support variable bitrate codecs.
+
+@see CMMFSwCodecWrapper
+*/
+#define SYMBIAN_VARIABLE_BITRATE_CODEC
+
+/**
+@publishedAll
+
+SYMBIAN_SWTRACER_V1
+
+When defined, the new System Wide Tracer APIs are available.
+
+@see SWT::RTracer
+
+This #define supports PREQ505
+*/
+//#define SYMBIAN_SWTRACER_V1
+
+/** 
+@publishedPartner 
+  
+SYMBIAN_TELEPHONY_USAT5 
+
+If SYMBIAN_TELEPHONY_USAT5 is defined then support for 3GPP 
+Release 5 (U)SAT will be enabled. 
+
+@see RSat::TCallControlV5
+
+This #define supports PREQ1234.
+*/ 
+#define SYMBIAN_TELEPHONY_USAT5
+
+/**
+@publishedAll
+
+SYMBIAN_MULTIMEDIA_CODEC_API
+
+If SYMBIAN_MULTIMEDIA_CODEC_API is defined then support is 
+available for PREQ1024 delivered Processing Unit or 
+OpenMAX based codecs and Multimedia hardware devices.
+*/
+#define SYMBIAN_MULTIMEDIA_CODEC_API
+
+/**
+@publishedAll
+
+SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES
+
+If SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES is defined, threads at 
+priority SystemServer/More (i.e. process priorities EPriorityFileServer, 
+EPriorityWindowServer or EPrioritySupervisor with relative thread priority 
+EPriorityMore) are mapped to absolute priority 23, equal to the highest 
+priority available to normal applications. This lowers the Window Server 
+and File Server priorities so application threads can timeslice with them, 
+benefitting audio and other pseudo real-time applications.
+
+If SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES is not defined, these system server 
+priorities remain at 24, preempting all normal user application threads.
+
+This #define supports PREQ955, and BR1821.
+*/
+#define SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES
+
+/**
+@publishedPartner
+
+SYMBIAN_APPARC_APPINFO_CACHE
+
+If SYMBIAN_APPARC_APPINFO_CACHE is defined then apparc creates 
+a file of application information on the first boot, which is 
+used during subsequent boots for application information.
+*/
+#define SYMBIAN_APPARC_APPINFO_CACHE
+
+/** 
+@publishedAll
+
+SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT
+
+If SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT is defined then 
+the Multimedia Framework (MMF) can support video playback on 
+a secondary display. The default screen will be the screen 
+number in the cone environment.
+
+@see CVideoPlayerUtility
+*/
+#define SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT
+
+/**
+@publishedAll
+
+SYMBIAN_USE_MMF_RUF_RECOGNIZER
+
+If SYMBIAN_USE_MMF_RUF_RECOGNIZER is defined, the MMF recognizer is able to 
+recognize formats such as MPEG4, MPEG2, AAC and Divx.
+*/
+#define SYMBIAN_USE_MMF_RUF_RECOGNIZER
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_EAP
+
+If SYMBIAN_NETWORKING_EAP is defined the following  
+functionality is affected: 
+1) Generic EAP-Framework Components built 
+2) Generic Support EAP-MSCHAPv2, PEAPv0, EAP-TTLS, EAP-TLS, EAP-SIM and EAP-AKA enabled
+3) WiFi specific EAP Framework and EAP Methods not built
+
+This #define supports PREQ1623. 
+*/
+//#define SYMBIAN_NETWORKING_EAP
+
+/**
+@publishedAll
+
+SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM
+
+If  SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM is defined, the Composite
+File System allows more than one ROFS partition to be included in
+the composite Z: drive.
+
+This #define supports PREQ1085
+*/
+#define SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM
+
+/** 
+@publishedPartner 
+
+SYMBIAN_SUPPORT_LINKED_FONTS 
+
+If SYMBIAN_SUPPORT_LINKED_FONTS is defined then APIs are provided 
+to create 'linked' font instances which combine glyph sets from 
+multiple existing font glyph sets.
+
+@see CLinkedTypefaceElement
+@see CLinkedTypefaceSpecification
+
+This #define supports PREQ1431.
+*/ 
+#define SYMBIAN_SUPPORT_LINKED_FONTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/default_plats.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/default_plats_minus_plat.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT -WINSCW
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/exports.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_EXPORTS
+export1.h															// %EPOCROOT%epoc32\include\export1.h
+export2.h				export_test/export2.h						// %EPOCROOT%epoc32\include\export_test\export2.h 
+export3.h				../export_test/export3.h					// %EPOCROOT%epoc32\export_test\export3.h
+export4.h				/export_test_abs/export4.h					// \export_test_abs\export4.h
+export5.h				/epoc32/export_test_abs/export5.h			// %EPOCROOT%epoc32\export_test_abs\export5.h
+export6.h				|../export_test_rel/\export6.h				// ..\export_test_rel\export6.h
+export7.h				|/export_test_rel/export7.h					// .\export_test_rel\export7.h
+export8.h				|export_test_rel/export8.h					// .\export_test_rel\export8.h
+:zip export9.zip													// %EPOCROOT% 
+:zip export10.zip		export_test									// %EPOCROOT%export_test
+:zip export11.zip		/export_test								// \export_test
+:zip export12.zip		/epoc32/export_test							// %EPOCROOT%epoc32\export_test
+export13.rsc			z:/resource/app/export13.rsc				// %EPOCROOT%epoc32\data\z\resource\app\export13.rsc
+
+PRJ_TESTEXPORTS
+testexport1.h														// .\testexport1.h (as exports over itself!)
+testexport2.h			export_test_rel/testexport2.h				// .\export_test_rel\testexport2.h 
+testexport3.h			../export_test_rel/testexport3.h			// ..\export_test_rel\testexport3.h
+testexport4.h			/export_test_abs/testexport4.h				// \export_test_abs\testexport4.h
+testexport5.h			/epoc32/export_test_abs/testexport5.h		// %EPOCROOT%epoc32\export_test_abs\testexport5.h
+testexport6.h			|../export_test_rel/testexport6.h			// ..\export_test_rel\testexport6.h
+testexport7.h			|/export_test_rel/testexport7.h				// .\export_test_rel\testexport7.h
+testexport8.h			|export_test_rel/testexport8.h				// .\export_test_rel\testexport8.h
+:zip testexport9.zip												// %EPOCROOT%
+:zip testexport10.zip	export_test									// %EPOCROOT%export_test
+:zip testexport11.zip	/export_test								// \export_test
+:zip testexport12.zip	/epoc32/export_test							// %EPOCROOT%epoc32\export_test
+testexport13.rsc		z:/resource/app/testexport13.rsc			// %EPOCROOT%epoc32\data\z\resource\app\testexport13.rsc
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/extensions.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_EXTENSIONS
+
+START EXTENSION test/dummyextension1
+	TARGET dummyoutput1.exe
+	SOURCES dummysource11.cpp dummysource12.cpp dummysource13.cpp
+	DEPENDENCIES dummylib11.lib dummylib12.lib
+	TOOL dummytool1.exe
+	OPTION option11 option11value
+	OPTION option12 $(MAKE_VAR)
+END
+
+START EXTENSION test/dummyextension2
+	TARGET dummyoutput2.exe
+	SOURCES dummysource21.cpp dummysource22.cpp dummysource23.cpp
+	DEPENDENCIES dummylib21.lib dummylib22.lib
+	TOOL dummytool2.exe
+	OPTION option21 option21value
+	OPTION option22 $(MAKE_VAR)
+END
+
+// Note that variable prefixed TEMs are supported only for Raptor testing
+START EXTENSION $(SBS_HOME)/test/dummyextension3
+	TARGET dummyoutput3.exe
+	SOURCES dummysource31.cpp dummysource32.cpp dummysource33.cpp
+	DEPENDENCIES dummylib31.lib dummylib32.lib
+	TOOL dummytool3.exe
+	OPTION option31 option31value
+	OPTION option32 $(MAKE_VAR)
+END
+
+
+PRJ_TESTEXTENSIONS
+
+START EXTENSION test/dummytestextension1
+	TARGET dummytestoutput1.exe
+	SOURCES dummytestsource11.cpp dummytestsource12.cpp dummytestsource13.cpp
+	DEPENDENCIES dummytestlib11.lib dummytestlib12.lib
+	TOOL dummytesttool1.exe
+	OPTION optiontest11 optiontest11value
+	OPTION optiontest12 $(MAKE_VAR)
+END
+
+START EXTENSION test/dummytestextension2
+	TARGET dummytestoutput2.exe
+	SOURCES dummytestsource21.cpp dummytestsource22.cpp dummytestsource23.cpp
+	DEPENDENCIES dummytestlib21.lib dummytestlib22.lib
+	TOOL dummytesttool2.exe
+	OPTION optiontest21 optiontest21value
+	OPTION optiontest22 $(MAKE_VAR)
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/dir1/dir2/up_dir.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// up_dir.inf
+
+#include "../../dir3/down_dir.inf"
+
+PRJ_EXPORTS
+up_dir_export_source.h	up_dir_export_destination.h
+
+PRJ_MMPFILES
+up_dir.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/dir3/down_dir.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// down_dir.inf
+
+PRJ_EXPORTS
+down_dir_export_source.h	down_dir_export_destination.h
+
+PRJ_MMPFILES
+down_dir.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/top_level.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.inf
+
+#include "dir1/dir2/up_dir.inf"
+
+PRJ_EXPORTS
+top_level_export_source.h	top_level_export_destination.h
+
+PRJ_MMPFILES
+top_level.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/multiple_plats.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW TOOLS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/no_plats.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/no_prj_platforms.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/single_plat.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/dir1/dir2/up_dir.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// up_dir.mmh
+
+SOURCEPATH	.
+SOURCE		up_dir.cpp
+
+#include "../../dir3/down_dir.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/dir3/down_dir.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// down_dir.mmh
+
+SOURCEPATH	.
+SOURCE		down_dir.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/top_level.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.inf
+
+PRJ_MMPFILES
+top_level.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/top_level.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.mmp
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
+#include "dir1/dir2/up_dir.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/autotest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/ignoretest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/manualtest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/supporttest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/test_mmps.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_TESTMMPFILES
+autotest.mmp
+manualtest.mmp		manual
+supporttest.mmp		support
+ignoretest.mmp		ignore
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.3.1.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.3.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.4.1.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.4.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.5.1.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.5.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_2.0.0.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">
+				<unit bldFile="simple" mrp="simple/simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit bldFile="test/smoke_suite/test_resources/basics/helloworld" root="SBS_HOME" mrp="test/smoke_suite/test_resources/basics/helloworld.mrp"/>
+			</component>
+			<component name="Incorrect root attribute">
+				<unit bldFile="basics/helloworld" root="NON_EXISTENT_ENVVAR" mrp="basics/helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_3.0.0.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+<SystemDefinition name="MCL" schema="3.0.0" >  
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_multi_layers.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="First Layer">
+			<component name="simple">
+				<unit bldFile="test/smoke_suite/test_resources/simple" root="SBS_HOME" mrp="simple/test.mrp"/>
+			</component>
+			<component name="simple_dll">
+				<unit bldFile="test/smoke_suite/test_resources/simple_dll" root="SBS_HOME" mrp="simple_dll/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Second Layer">
+			<component name="simple_export">
+				<unit bldFile="test/smoke_suite/test_resources/simple_export" root="SBS_HOME" mrp="simple_export/test.mrp"/>
+			</component>
+			<component name="simple_gui">
+				<unit bldFile="test/smoke_suite/test_resources/simple_gui" root="SBS_HOME" mrp="simple_gui/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Third Layer">
+			<component name="simple_implib">
+				<unit bldFile="test/smoke_suite/test_resources/simple_implib" root="SBS_HOME" mrp="simple_implib/test.mrp"/>
+			</component>
+			<component name="simple_lib">
+				<unit bldFile="test/smoke_suite/test_resources/simple_lib" root="SBS_HOME" mrp="simple_lib/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Fourth Layer">
+			<component name="simple_stringtable">
+				<unit bldFile="test/smoke_suite/test_resources/simple_stringtable" root="SBS_HOME" mrp="simple_stringtable/test.mrp"/>
+			</component>
+			<component name="simple_test">
+				<unit bldFile="test/smoke_suite/test_resources/simple_test" root="SBS_HOME" mrp="simple_test/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Fifth Layer">
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_nover.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" >  
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+test_oeexe.mmp
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/group/test_oeexe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* t_oeexe.mmp
+*
+*/
+
+
+TARGET			test_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			test_oeexe_wins.cpp
+#else
+SOURCE			test_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib t_oedll.lib
+
+// Standard Symbian Library Created by Simple_lib\simple.mmp
+STATICLIBRARY		etest.lib
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oedll.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h*
+*/
+
+
+ 
+
+
+
+#include <e32cons.h>
+
+extern "C" {
+
+extern int IMPORT_C myfoo();
+
+}
+
+
+
+IMPORT_C int bar();
+
+class CMessenger : public CBase
+
+  	{
+
+public:
+
+		// Construction
+
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+
+		// Destructor - virtual and class not intended
+
+		// for derivation, so not exported
+
+	~CMessenger();
+
+		// general functions - exported
+
+	IMPORT_C void ShowMessage();
+
+private:
+
+		// C++ constructor - not exported;
+
+		// implicitly called from NewLC()
+
+	CMessenger(CConsoleBase& aConsole);
+
+		// 2nd phase construction, called by NewLC()
+
+	void ConstructL(const TDesC& aString); // second-phase constructor
+
+private:
+
+	CConsoleBase& iConsole; // Use the console (but not owned)
+
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+
+Overview:
+
+	Tests it is possible to retrieve the 0th ordinal from exes and dlls
+
+	that are marked as having named symbol export data.  This is loaded
+
+	as non-XIP so loader fixups of 0th ordinal imports can be tested
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EpocExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test attempts to get the 0th ordinal from a dll without the named symbol 
+
+		data returns NULL
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EpocExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test import fixups has correctly fixed up the 0th ordinal of the static
+
+		dependencies to this stdexe
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EpocExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <test_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+// This is defined as LOCAL_D(static) to ensure that tools allow static symbol in stdexe/dlls
+
+// as this was not always the case.
+
+LOCAL_D void VerifyHdr(E32EpocExpSymInfoHdr& aExpectedHdr, E32EpocExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSize == aReadHdr.iSize);
+
+	test(aExpectedHdr.iFlags == aReadHdr.iFlags);
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iSymbolTblOffset == aReadHdr.iSymbolTblOffset);
+
+	test(aExpectedHdr.iStringTableSz == aReadHdr.iStringTableSz);
+
+	test(aExpectedHdr.iStringTableOffset == aReadHdr.iStringTableOffset);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	test(aExpectedHdr.iDepDllZeroOrdTableOffset == aReadHdr.iDepDllZeroOrdTableOffset);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EpocExpSymInfoHdr tmpHdr;
+
+	E32EpocExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSize = 0x1a4;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0xc;	
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x134;
+
+	tmpHdr.iStringTableOffset = 0x64;
+
+	tmpHdr.iDllCount = 0x3;	
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x198;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EpocExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data of t_oedll.dll at the 0th ordinal is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EpocExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSize = 0x48;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0x2;
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x14;
+
+	tmpHdr.iStringTableOffset = 0x28;
+
+	tmpHdr.iDllCount = 0x3;
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x3c;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EpocExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data at th 0th ordinal of this exe is that expected"));
+
+
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSize=%08x;iFlags=%08x;iSymCount=%08x;iSymbolTblOffset=%08x\n"),readHdr->iSize,readHdr->iFlags,readHdr->iSymCount,readHdr->iSymbolTblOffset);
+
+	test.Printf(_L("iStringTableSz=%08x,iStringTableOffset=%08x,iDllCount=%08x,iDepDllZeroOrdTableOffset=%08x\n"), readHdr->iStringTableSz, readHdr->iStringTableOffset,readHdr->iDllCount,readHdr->iDepDllZeroOrdTableOffset);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+	test.Next(_L("Verify static dependency t_oedll1 has been fixed up correctly"));
+
+	test(myfoo()==0x1234);
+
+
+
+	// Get the 0th ordinal data from the dependency t_oedll1 and verify it
+
+	readHdr=(E32EpocExpSymInfoHdr *)((TUint32)readHdr+readHdr->iDepDllZeroOrdTableOffset);
+
+	TUint32 readHdrEnd = (TUint32)readHdr + 12;
+
+	// This stdexe only links one stddll so the only non-NULL entry in iDepDllZeroOrdTable
+
+	// should point to 0th ordinal of t_oedll1
+
+	while (*(TUint32*)readHdr == NULL && (TUint32)readHdr < readHdrEnd)
+
+		{
+
+		readHdr=(E32EpocExpSymInfoHdr *)(((TUint32*)readHdr)+1);
+
+		}
+
+
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSize=%08x;iFlags=%08x;iSymCount=%08x;iSymbolTblOffset=%08x\n"),(*(E32EpocExpSymInfoHdr**)readHdr)->iSize,(*(E32EpocExpSymInfoHdr**)readHdr)->iFlags,(*(E32EpocExpSymInfoHdr**)readHdr)->iSymCount,(*(E32EpocExpSymInfoHdr**)readHdr)->iSymbolTblOffset);
+
+	test.Printf(_L("iStringTableSz=%08x,iStringTableOffset=%08x,iDllCount=%08x,iDepDllZeroOrdTableOffset=%08x\n"), (*(E32EpocExpSymInfoHdr**)readHdr)->iStringTableSz, (*(E32EpocExpSymInfoHdr**)readHdr)->iStringTableOffset,(*(E32EpocExpSymInfoHdr**)readHdr)->iDllCount,(*(E32EpocExpSymInfoHdr**)readHdr)->iDepDllZeroOrdTableOffset);
+
+#endif
+
+
+
+	tmpHdr.iSize = 0x1a4;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0xc;	
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x134;
+
+	tmpHdr.iStringTableOffset = 0x64;
+
+	tmpHdr.iDllCount = 0x3;	
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x198;
+
+	VerifyHdr(tmpHdr,**(E32EpocExpSymInfoHdr**)readHdr);
+
+	
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe_wins.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+
+Overview:
+
+	Emulator version that tests it is possible to retrieve the 0th 
+
+	ordinal from exes and dlls that are marked as having named 
+
+	symbol export data.
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EmulExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test NULL is returned on attempts to get the 0th ordinal from a 
+
+		dll without the named symbol data
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EmulExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EmulExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <test_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+LOCAL_D void VerifyHdr(E32EmulExpSymInfoHdr& aExpectedHdr, E32EmulExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EmulExpSymInfoHdr tmpHdr;
+
+	E32EmulExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x0;
+
+	tmpHdr.iDllCount = 0x3;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	test.Next(_L("Verify export data of t_oedll.dll is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x3;
+
+	tmpHdr.iDllCount = 0x5;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data 0th ordinal data of this exe is that expected"));
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x;\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+/*
+
+On Emulator can't examine fixups & depdencies via export data as data not included
+
+in E32EmulExpSymInfoHdr.  This is all handled by the MS loader.
+
+
+
+*/
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/run	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,59 @@
+#!/bin/bash
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Test Suite execution file for linux
+#
+
+# Ensure that the host type is set for Raptor:
+eval $($SBS_HOME/bin/gethost.sh -e)
+
+if [ -z "$HOSTPLATFORM" ]; then
+	echo "Error: HOSTPLATFORM could not be determined."
+	exit 1
+fi
+
+if [ "$OSTYPE" == "cygwin" ]; then
+
+	SBS_HOME=${SBS_HOME//\\//}
+
+	__CYGWIN__=${SBS_CYGWIN:-$SBS_HOME/$HOSTPLATFORM_DIR/cygwin}
+	__PYTHON__=${SBS_PYTHON:-$SBS_HOME/$HOSTPLATFORM_DIR/python252/python.exe}
+
+	# Unify paths.
+
+	u="$__CYGWIN__/bin/cygpath.exe -m"
+
+	SBS_HOME=$($u "$SBS_HOME")
+	EPOCROOT=$($u "$EPOCROOT")
+
+	__PYTHON__=$($u "$__PYTHON__")
+else
+	LD_LIBRARY_PATH=$SBS_HOME/$HOSTPLATFORM_DIR/bv/lib:$LD_LIBRARY_PATH
+
+	export PATH LD_LIBRARY_PATH
+	__PYTHON__=python
+fi
+
+# Call run_tests.py with the arguments
+TEST_SUITE_PY="$SBS_HOME/test/common/run_tests.py"
+
+if [ -e "$TEST_SUITE_PY" ]; then
+	# run the source version
+	$__PYTHON__ -tt "$TEST_SUITE_PY" "$@"
+elif [ -e "$TEST_SUITE_PY"c ]; then
+	# run the compiled version
+	$__PYTHON__ -tt "$TEST_SUITE_PY"c "$@"
+else
+	echo "Cannot run Test Suite - $TEST_SUITE_PY not found" 1>&2
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/run.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+@rem
+@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@echo off
+
+set HOSTPLATFORM=win 32
+set HOSTPLATFORM_DIR=win32
+
+setlocal
+set __PYTHON__=%SBS_PYTHON%
+if "%__PYTHON__%"=="" set __PYTHON__=%SBS_HOME%\win32\python252\python.exe
+
+set __TEST_SUITE__=%SBS_HOME%\test\common\run_tests.pyc
+set __TEST_SUITE_PY__=%SBS_HOME%\test\common\run_tests.py
+
+@REM Mount '/' in cygwin, in case it is not done automatically
+set __CYGWIN__=%SBS_CYGWIN%
+if "%__CYGWIN__%"=="" set __CYGWIN__=%SBS_HOME%\win32\cygwin
+%__CYGWIN__%\bin\umount -u "/" >NUL  2>NUL
+%__CYGWIN__%\bin\mount -u "%__CYGWIN__%" "/"
+
+@REM If the Python source exists, use it. Else use the byte-compiled Python code
+if exist %__TEST_SUITE_PY__% SET __TEST_SUITE__=%__TEST_SUITE_PY__%
+
+@REM Then run the test suite with all the arguments
+%__PYTHON__% -tt %__TEST_SUITE__% %*
+
+endlocal
+@echo on
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/simple/test_dbg.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple debuggable test";
+
+TInt E32Main()
+{
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_asmtest.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "16"
+	t.name = "armv5_asmtest"
+	t.command = "sbs -b smoke_suite/test_resources/asmtest/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/asmtest/bld.inf', [
+		"asmtest_/armv5/udeb/asmtest_udeb_objects.via",
+		"asmtest_/armv5/udeb/testassembler.o.d",
+		"asmtest_/armv5/udeb/testassembler.o",
+		"asmtest_/armv5/udeb/testassembler.o",
+		"asmtest_/armv5/udeb/testcia_.o",
+		"asmtest_/armv5/udeb/testcia_.cpp",
+		"asmtest_/armv5/udeb/testcia_.pre",
+		"asmtest_/armv5/udeb/testcia_.pre.d",
+		"asmtest_/armv5/udeb/testasm.o.d",
+		"asmtest_/armv5/udeb/testasm.o",
+		"asmtest_/armv5/urel/asmtest_urel_objects.via",
+		"asmtest_/armv5/urel/testassembler.o.d",
+		"asmtest_/armv5/urel/testassembler.o",
+		"asmtest_/armv5/urel/testassembler.o",
+		"asmtest_/armv5/urel/testcia_.o",
+		"asmtest_/armv5/urel/testcia_.cpp",
+		"asmtest_/armv5/urel/testcia_.pre",
+		"asmtest_/armv5/urel/testcia_.pre.d",
+		"asmtest_/armv5/urel/testasm.o.d",
+		"asmtest_/armv5/urel/testasm.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_stringtable.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "26"
+	t.name = "armv5_stringtable"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf" \
+			+ " -c armv5 EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.cpp"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_testcode.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "28"
+	t.name = "armv5_testcode"
+	t.command = "sbs -b smoke_suite/test_resources/simple_test/bld.inf -c " + \
+			"armv5.test -f - "
+	
+	# Don't allow -f to be appended
+	t.logfileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/include/testexportheader.h",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv5.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv5.manual.bat"
+		]
+	t.mustmatch = [".*/epoc32/data/z/test/simple_test/armv5.auto.bat</build>.*"]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_asmtest.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "17"
+	t.name = "armv7_asmtest"
+	t.command = "sbs -b smoke_suite/test_resources/asmtest/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/asmtest/bld.inf', [
+		"asmtest_/armv7/udeb/asmtest_udeb_objects.via",
+		"asmtest_/armv7/udeb/testassembler.o.d",
+		"asmtest_/armv7/udeb/testassembler.o",
+		"asmtest_/armv7/udeb/testassembler.o",
+		"asmtest_/armv7/udeb/testcia_.o",
+		"asmtest_/armv7/udeb/testcia_.cpp",
+		"asmtest_/armv7/udeb/testcia_.pre",
+		"asmtest_/armv7/udeb/testcia_.pre.d",
+		"asmtest_/armv7/udeb/testasm.o.d",
+		"asmtest_/armv7/udeb/testasm.o",
+		"asmtest_/armv7/urel/asmtest_urel_objects.via",
+		"asmtest_/armv7/urel/testassembler.o.d",
+		"asmtest_/armv7/urel/testassembler.o",
+		"asmtest_/armv7/urel/testassembler.o",
+		"asmtest_/armv7/urel/testcia_.o",
+		"asmtest_/armv7/urel/testcia_.cpp",
+		"asmtest_/armv7/urel/testcia_.pre",
+		"asmtest_/armv7/urel/testcia_.pre.d",
+		"asmtest_/armv7/urel/testasm.o.d",
+		"asmtest_/armv7/urel/testasm.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_stringtable.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "27"
+	t.name = "armv7_stringtable"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf" \
+			+ " -c armv7 EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.cpp"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_testcode.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "29"
+	t.name = "armv7_testcode"
+	t.command = "sbs -b smoke_suite/test_resources/simple_test/bld.inf -c " + \
+			"armv7.test -f - "
+	
+	# Don't allow -f to be appended
+	t.logfileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/urel/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/include/testexportheader.h",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv7.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv7.manual.bat"
+		]
+	t.mustmatch = [".*/epoc32/data/z/test/simple_test/armv7.auto.bat</build>.*"]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/basic_dependency.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_meta import BldInfFile
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0098a"
+	t.name = "Build a component to begin with"
+	t.description = "Build a simple component"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf"
+			
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Ensure we don't clean up from the previous build in any subsequent runs
+	t = SmokeTest()
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [])
+	t.targets = []
+	t.usebash = True
+
+	t.id = "0098b"
+	t.name ="Touch a source file dependency and make sure thats the only one rebuilt"
+	t.description = "Touches one source file's dependency to check if its rebuilt"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/simple/test.h
+		sbs -f - -b smoke_suite/test_resources/simple/bld.inf """
+	# We should only recompile 1 source file, twice for armv5 and twice for winscw
+	t.countmatch = [
+		[".*recipe name='compile'.*", 2],
+		[".*recipe name='win32compile2object'.*", 2]
+	]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# Invalidate the dependency file to make sure its not regenerated
+	t = SmokeTest()
+	# Ensure we don't clean up from the previous build in any subsequent runs
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [])
+	t.targets = []
+	t.usebash = True
+
+	t.id = "0098c"
+	t.name ="Invalidate the dependency file to make sure its not regenerated"
+	t.description = "Invalidate the dependency file to make sure its not regenerated"
+	fragment = BldInfFile.outputPathFragment('smoke_suite/test_resources/simple/Bld.inf')
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/simple/test.cpp
+		echo INVALIDATE_ARMV5_DEPENDENCY_FILE >> $(EPOCROOT)/epoc32/build/"""+ fragment + """/test_/armv5/urel/test.o.d
+		echo INVALIDATE_WINSCW_DEPENDENCY_FILE >> $(EPOCROOT)/epoc32/build/"""+ fragment + """/test_/winscw/urel/test.o.d
+		sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5_urel -c winscw_urel
+		rm -rf $(EPOCROOT)/epoc32/build/"""+ fragment + """/test_/armv5/urel/test.o.d
+		rm -rf $(EPOCROOT)/epoc32/build/"""+ fragment + """/test_/winscw/urel/test.o.d"""
+	t.errors = 1 # We expect the build to fail since we messed up the dependency file
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	t.id = "98"
+	t.name = "basic_dependency"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/bitmap.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Component description file
+#
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "8"
+	t.name = "bitmap"
+	t.description = "This step is for testing BITMAP keyword and MIFCONV support for s60"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/bitmap/bld.inf BITMAP && grep -ir 'MIFCONV_TEST:=1' $(EPOCROOT)/epoc32/build"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testbitmap.mbg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/testbitmap.mBm",
+		"$(EPOCROOT)/epoc32/localisation/group/testbitmap.info",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def2m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def3m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def4m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def24.bmp",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def32.bmp",
+		"$(EPOCROOT)/epoc32/localisation/testbitmap/mbm/def48.bmp",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/mifconv.xml",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/mifconv.flm"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/bitmap/bld.inf', [
+		"testbitmap_dll/testbitmap.mBm_bmconvcommands"
+	])
+	t.mustmatch = [
+		".*Makefile.bitmap:MIFCONV_TEST:=1.*"
+	]
+	t.mustnotmatch = [
+		".*Makefile.default:MIFCONV_TEST.*"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/clean_readonly.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+import os
+import stat
+
+def run():
+	# This particular file createstaticdll.dll is changed to be readonly to test
+	# 		if sbs CLEAN command actually gets rid of read only files
+	fileForClean = (os.environ['EPOCROOT'] + \
+			"/epoc32/release/armv5/urel/createstaticdll.dll")
+	if os.path.exists(fileForClean):
+		os.chmod(fileForClean, stat.S_IREAD)
+	
+	t = AntiTargetSmokeTest()
+	t.id = "10"
+	t.name = "cleanreadonly" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5 CLEAN"
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/build/test/simple_dll/createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/build/test/simple_dll/createstaticdll_dll/armv5/urel/CreateStaticDLL.o",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/commandfile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "4"
+	t.name = "commandfile"
+	t.command = "sbs " \
+			+ "--command=smoke_suite/test_resources/simple/commands-v7.txt " \
+			+ "-c armv7_udeb"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv7/udeb/test.o",
+		"test_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/configpath.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+import os.path
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.logfileOption = lambda :""
+	t.id = "0074a"
+	t.name = "configpath"
+	t.description = """Test --configpath option for sbs. Specify two remote
+			locations and use the variants in those folders along with ones in
+			each of the default folders."""
+
+	# the variants here affect compile steps so we only need to see a single compile
+	# to know whether the variant is doing its thing or not.
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf",
+	                  ["test_/armv5/udeb/test.o"])
+
+	result = SmokeTest.PASS
+
+	# the extra config folders are
+	# smoke_suite/test_resources/configpathtest/v{2,3}
+	sbshome = os.environ["SBS_HOME"].replace("\\","/")
+
+	aFolder = sbshome + "/test/smoke_suite/test_resources/configpathtest/v2"
+	bFolder = sbshome + "/test/smoke_suite/test_resources/configpathtest/v3"
+
+	common = "sbs -b smoke_suite/test_resources/simple/bld.inf " + \
+			"-c armv5.configpathtest1.configpathtest2.configpathtest3"
+
+	# run the command using the built-in default systemConfig
+	t.command = common + " --configpath=" + aFolder + os.pathsep + bFolder + \
+			" -f -"
+
+	t.mustmatch = [
+		".*armv5_udeb.configpathtest1.configpathtest2.configpathtest3.*",
+		".*armv5_urel.configpathtest1.configpathtest2.configpathtest3.*",
+		".*Duplicate variant 'configpathtest3'.*",
+		".*-DTESTPASSED.*",
+		".*-DOSVARIANT95WASAPPLIED.*"
+		]
+	t.mustnotmatch = [
+		".*sbs: error: Unknown variant.*",
+		".*-DTESTFAILED.*"
+		]
+	# Duplicate variant is Info not Warn
+	t.warnings = 0
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# run the command again using a systemConfig from $HOME/.sbs_init.xml
+	# and the configpath as two separate options.
+	t.usebash = True
+	homedir = sbshome + "/test/smoke_suite/test_resources/configpathtest/home"
+	t.command = "export HOME=" + homedir + "; " + common + \
+			" --configpath=" + aFolder + " --configpath=" + bFolder + " -f -"
+	t.id = "0074b"
+	t.mustmatch = [
+		".*armv5_udeb.configpathtest1.configpathtest2.configpathtest3.*",
+		".*armv5_urel.configpathtest1.configpathtest2.configpathtest3.*",
+		".*Duplicate variant 'configpathtest3'.*"
+		]
+	t.mustnotmatch = [
+		".*sbs: error: Unknown variant.*"
+		]
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# Clean
+	t.mustmatch = []
+	t.targets = []
+	t.id = "0074c"
+	t.name = "CLEAN"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"REALLYCLEAN"
+	t.run() # Does not contribute to results
+
+	t.id = "74"
+	t.name = "configpath"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/defs_armv5.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest 
+
+def run():
+	t = SmokeTest()
+	t.id = "21"
+	t.name = "defs_armv5"
+	t.command = "sbs -b smoke_suite/test_resources/defs/group/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/defs/group/bld.inf', [
+		"deftest_/armv5/udeb/deftest_udeb_objects.via",
+		"deftest_/armv5/udeb/test.o",
+		"deftest_/armv5/urel/deftest_urel_objects.via",
+		"deftest_/armv5/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/defs_armv7.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest 
+
+def run():
+	t = SmokeTest()
+	t.id = "22"
+	t.name = "defs_armv7"
+	t.command = "sbs -b smoke_suite/test_resources/defs/group/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/defs/group/bld.inf', [
+		"deftest_/armv7/udeb/deftest_udeb_objects.via",
+		"deftest_/armv7/udeb/test.o",
+		"deftest_/armv7/urel/deftest_urel_objects.via",
+		"deftest_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.usebash = True
+	result = AntiTargetSmokeTest.PASS
+	
+	command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c %s -f-"
+	maintargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll"
+		]
+	abiv1libtargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.lib"
+		]	
+	buildtargets =  [
+		"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o"
+		]
+	mustmatch = [
+		r".*\busrt\d_\d\.lib\b.*",
+		r".*\bscppnwdl\.dso\b.*"
+			]
+	mustnotmatch = [
+		".*ksrt.*"
+		]
+	
+	# Note that ABIv1 import libraries are only generated for RVCT-based armv5
+	# builds on Windows
+	
+	t.id = "0009a"
+	t.name = "dll_armv5_rvct"
+	t.command = command % "armv5"
+	t.targets = maintargets[:]	# Shallow, as we optionally extend later and then re-use
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run("linux")
+	if t.result == AntiTargetSmokeTest.SKIP:
+		t.targets.extend(abiv1libtargets)
+		t.run("windows")
+	if t.result == AntiTargetSmokeTest.FAIL:
+		result = AntiTargetSmokeTest.FAIL
+		
+	t.id = "0009b"
+	t.name = "dll_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5 clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.run()	
+	if t.result == AntiTargetSmokeTest.FAIL:
+		result = AntiTargetSmokeTest.FAIL		
+		
+	t.id = "0009c"
+	t.name = "dll_armv5_gcce"
+	t.command = command % "gcce_armv5"
+	t.targets = maintargets
+	t.antitargets = abiv1libtargets
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()	
+	if t.result == AntiTargetSmokeTest.FAIL:
+		result = AntiTargetSmokeTest.FAIL
+	
+	t.id = "9"
+	t.name = "dll_armv5"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5_smp.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.name = "dll_armv5_smp"
+	t.id = "63"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c " + \
+			"armv5 -c armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/createstaticdll.dll"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5smp/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5smp/urel/CreateStaticDLL.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5_winscw_freeze.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import where
+
+def run():
+	t = SmokeTest()
+	t.id = "0012a"
+	t.name = "dll_armv5_winscw_freeze"
+	t.description = """Builds a component with unfrozen exports from clean,
+		followed by a FREEZE, a further CLEAN and then a check that new .def
+		files are present. The PERL environment variable is set to the absolute
+		Perl path in order to test a known issue with the execution of tools
+		such as efreeze under Cygwin when multiple arguments are listed.
+		Part b tests whether removing an export works when using the variant;
+		remove_freeze"""
+	t.usebash = True
+	
+	perl_location = where("perl")
+	
+	t.command = """
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5 -c winscw CLEAN > /dev/null &&
+export PERL="%s" &&
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5 -c winscw > /dev/null &&
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5_urel -c winscw_urel FREEZE -m ${SBSMAKEFILE} -f ${SBSLOGFILE}
+""" % perl_location
+
+	t.targets = [
+		"smoke_suite/test_resources/unfrozen/frozen/bwins/frozenu.def",
+		"smoke_suite/test_resources/unfrozen/frozen/eabi/frozenu.def"		
+		]
+
+	t.warnings = 2	
+	t.run()
+	
+	
+	t.id = "0012b"
+	t.name = "armv5_re-freeze_with_removed_export"
+	
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp -c armv5_urel ;" \
+			+ " sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp FREEZE" \
+			+ " -c armv5_urel.remove_freeze" \
+			+ " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} &&" \
+			+ " grep -ir '_ZN10CMessenger11ShowMessageEv @ 1 NONAME ABSENT' $(SBS_HOME)/test/smoke_suite/test_resources/unfrozen/frozen/eabi/frozenu.def"
+			
+	t.targets = []
+	t.mustmatch = [
+		"_ZN10CMessenger11ShowMessageEv @ 1 NONAME ABSENT"
+	]
+	t.warnings = 0
+	t.errors = 1
+			
+	t.run()
+	
+	
+	t.id = "0012c"
+	t.name = "winscw_re-freeze_with_removed_export"
+	
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp -c winscw_urel ;" \
+			+ " sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp FREEZE" \
+			+ " -c winscw_urel.remove_freeze" \
+			+ " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} &&" \
+			+ " grep -ir '?ShowMessage@CMessenger@@QAEXXZ @ 3 NONAME ABSENT' $(SBS_HOME)/test/smoke_suite/test_resources/unfrozen/frozen/bwins/frozenu.def"
+
+	t.mustmatch = [
+		"\?ShowMessage@CMessenger@@QAEXXZ @ 3 NONAME ABSENT"
+	]
+			
+	t.run()
+	
+	t.id = "12"
+	t.name = "dll_armv5_winscw_freeze"
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv6.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "97"
+	t.name = "dll_armv6"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv6"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv6/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv6/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv6/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv6/urel/createstaticdll.dll"
+		]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/armv6/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv6/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv6/udeb/armv6_specific.o",
+		"createstaticdll_dll/armv6/urel/armv6_specific.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv7.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "11"
+	t.name = "dll_armv7"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/createstaticdll.dll"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/armv7/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv7/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv7/udeb/armv7_specific.o",
+		"createstaticdll_dll/armv7/urel/armv7_specific.o"		
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_winscw.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "34"
+	t.name = "dll_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/winscw/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/udeb/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/udeb/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_winscw_win32resource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "78"
+	t.name = "dll_winscw_win32resource"
+	t.description = """Test the construction of a custom WINSCW DLL containing Windows resources specified by win32_resource."""
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/win32resource/bld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/win32resource/bld.inf', [
+		"createstaticdll_dll/winscw/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/udeb/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/udeb/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/udeb/gui.res",
+		"createstaticdll_dll/winscw/udeb/gui.res.d",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/urel/gui.res",
+		"createstaticdll_dll/winscw/urel/gui.res.d",
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/emulated_drives.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "42"
+	t.name = "emulated_drives"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/emulated_drives_export/bld.inf EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/c/private/10001234/policy/emulated_drives_export2.mbm",
+		"$(EPOCROOT)/epoc32/winscw/c/private/10001234/policy/emulated_drives_export2.mbm",
+		"$(EPOCROOT)/epoc32/data/z/private/10001234/policy/emulated_drives_export1.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10001234/policy/emulated_drives_export1.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10001234/policy/emulated_drives_export1.mbm"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,124 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	result = SmokeTest.PASS
+
+	description = """This test is testing 2 states of keywords, DEBUGGABLE on its own and with DEBUGGABLE_UDEBONLY together; in their mmp's
+			make a new mmp change the target so that it generates another exe, and search together with that exe name when testing second test"""
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -b smoke_suite/test_resources/simple/debuggable_bld.inf -c %s -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && " + \
+			"grep -i '.*elf2e32.*--debuggable.*' ${SBSLOGFILE};"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe.map"
+		]	
+	buildtargets = [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test3.o.d",
+		"test_/armv5/udeb/test4.o.d",
+		"test_/armv5/udeb/test5.o.d",
+		"test_/armv5/udeb/test1.o.d",
+		"test_/armv5/udeb/test6.o.d",
+		"test_/armv5/udeb/test2.o.d",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test3.o.d",
+		"test_/armv5/urel/test4.o.d",
+		"test_/armv5/urel/test5.o.d",
+		"test_/armv5/urel/test1.o.d",
+		"test_/armv5/urel/test6.o.d",
+		"test_/armv5/urel/test2.o.d",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/urel/test_urel_objects.via"
+		]
+	mustmatch = [
+		".*elf2e32.*urel.*test.exe.*--debuggable.*",
+		".*elf2e32.*udeb.*test.exe.*--debuggable.*",
+		".*elf2e32.*udeb.*debuggable.exe.*--debuggable.*"
+	]
+	mustnotmatch = [
+		".*elf2e32.*urel.*debuggable.exe.*--debuggable.*"
+	]
+	warnings = 1
+	
+	t.id = "0001a"
+	t.name = "exe_armv5_rvct"
+	t.description = description
+	t.command = command % "armv5"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	t.id = "0001b"
+	t.name = "exe_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.run()	
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
+		
+	t.id = "0001c"
+	t.name = "exe_armv5_gcce"
+	t.command = command % "gcce_armv5"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
+
+	t.id = "1"
+	t.name = "exe_armv5"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_filtered.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "2"
+	t.name = "exe_armv5_filtered"
+	t.description = "Run exe_armv5 with a customised filter. Will create then" \
+			+ " remove filter file"
+	t.usebash = True
+	t.command = "cp -f smoke_suite/test_resources/filter_test/testfilter.py ../python/plugins/testfilter.py " \
+				"&& chmod 600 ../python/plugins/testfilter.py " \
+				"&& sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 --filters=TestFilter " \
+				"&& rm -f ../python/plugins/testfilter.py*"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+	])
+	t.mustmatch = [
+		".*Test Passed!.*"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_smp.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "62"
+	t.name = "exe_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 -c" \
+			+ " armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5smp/udeb/test.o",
+		"test_/armv5smp/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "6"
+	t.name = "exe_armv5_winscw_check"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 -c winscw --check"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.missing = 7
+	t.returncode = 1
+	t.stdout = [
+	# armv5 artefacts
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+	# winscw artefacts
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_plus_clean.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0005a"
+	t.name = "exe_armv5_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	
+	"Check that CLEAN removes built files"
+	c = AntiTargetSmokeTest()
+	c.id = "0005b"
+	c.name = "exe_armv5_winscw_clean"
+	c.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw CLEAN"
+	c.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	c.addbuildantitargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	c.run()
+	if c.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	"Rebuild"
+	t.id = "0005c"
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	"Check that REALLYCLEAN removes built files"
+	c.id = "0005d"
+	c.name = "exe_armv5_winscw_reallyclean"
+	c.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw REALLYCLEAN"
+	c.run()
+	if c.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "5"
+	t.name = "exe_armv5_winscw_plus_clean"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_single_file.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,149 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	result = SmokeTest.PASS
+
+	t = SmokeTest()
+	t.name = "exe_armv5_winscw_single_file_baseline_build"
+
+	# Build component
+	t.id = "0089a"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -c armv5 -c winscw"
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_udeb_objects.lrf",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld_urel_objects.lrf",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d"
+	])
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Ensure we don't clean up from the previous build in any subsequent runs
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [])
+	t.targets = []
+	t.usebash = True
+
+	# Touch both a straight source and a resource file and confirm we can recompile in isolation without additional impact
+	t.id = "0089b"
+	t.name = "exe_armv5_winscw_single_file_touch_rebuild"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp
+		touch smoke_suite/test_resources/simple_gui/HelloWorld.rss
+		sbs -f - --source-target=smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp --source-target=smoke_suite/test_resources/simple_gui/HelloWorld.rss -b smoke_suite/test_resources/simple_gui/Bld.inf"""
+	t.countmatch = [
+		[".*recipe name='resource(preprocess|header|compile)'", 3],
+		[".*recipe name='compile'.*", 2],
+		[".*recipe name='win32compile2object'.*", 2]
+	]
+	t.mustnotmatch = [
+		".*recipe name='(win32simplelink|postlink|link)'.*"
+	]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Attempt separate source and resource file compile where nothing should be done
+	t.id = "0089c"
+	t.name = "exe_armv5_winscw_single_file_notouch_rebuild"
+	t.command = "sbs -f - --source-target=smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp --source-target=smoke_suite/test_resources/simple_gui/HelloWorld.rss -b smoke_suite/test_resources/simple_gui/Bld.inf"
+	t.mustmatch = []
+	t.countmatch = [
+		[".*make.*Nothing to be done for.*SOURCETARGET_.*", 10]
+	]
+	t.mustnotmatch = [
+		".*recipe name='(resourcepreprocess|win32compile2object|compile|win32simplelink|postlink|link)'.*"
+	]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "89"
+	t.name = "exe_armv5_winscw_single_file"
+	t.description = """Builds a component and tests single file compilation for straight source and resource files"""
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "7"
+	t.name = "exe_armv5_winscw_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw --what"
+	t.stdout = [
+			# armv5 artefacts
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+			# winscw artefacts
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv7.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "3"
+	t.name = "exe_armv7"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv7/udeb/test.o",
+		"test_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_checksource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "88"
+	t.name = "exe_checksource"
+	t.description = "Build a exe with a checksource filter"
+	t.usebash = True
+	
+	bldinf = "smoke_suite/test_resources/checksource/helloworld/bld.inf"
+	cmd1 = "sbs -b %s REALLYCLEAN -m ${SBSMAKEFILE} -f ${SBSLOGFILE}" % bldinf
+	cmd2 = "sbs -b %s --filter=FilterCheckSource -m ${SBSMAKEFILE} -f ${SBSLOGFILE}" % bldinf
+	cmd3 = "grep -i '.*checksource errors found.*' ${SBSLOGFILE}"
+	t.command = cmd1 + " && " + cmd2 + " && " + cmd3
+
+	t.mustmatch = [
+		".* 6 checksource errors found.*"
+		]
+	t.returncode = 1
+	t.run("windows")
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_winscw.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "33"
+	t.name = "exe_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/export.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,112 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+import os
+
+def run():
+	result = SmokeTest.PASS
+	
+	# This .inf file is created for clean_simple_export and
+	# reallyclean_simple_export tests to use, because of $$USER problem occuring
+	# at the front end.
+	bld = open('smoke_suite/test_resources/simple_export/expbld.inf', 'w')
+	bld.write("PRJ_PLATFORMS\n"
+		"ARMV5 WINSCW\n\n"
+
+		"PRJ_MMPFILES\n"
+		"simple.mmp\n\n"
+
+		"PRJ_EXPORTS\n"
+		"simple_exp1.h exported_1.h\n"
+		"simple_exp2.h exported_2.h\n"
+		"simple_exp3.h exported_3.h\n"
+		'"file with a space.doc" "exportedfilewithspacesremoved.doc"\n'
+		'"file with a space.doc" "exported file with a space.doc"\n\n'
+
+		"simple_exp1.h /tmp/"+os.environ['USER']+"/  //\n"
+		"simple_exp2.h \\tmp\\"+os.environ['USER']+"/  //\n"
+		"simple_exp3.h /tmp/"+os.environ['USER']+"/simple_exp3.h \n"
+		"simple_exp4.h //")
+	bld.close()
+
+
+	t = SmokeTest()
+	t.id = "0023a"
+	t.name = "export"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
+			+ "-c armv5 EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/exported_1.h",
+		"$(EPOCROOT)/epoc32/include/exported_2.h",
+		"$(EPOCROOT)/epoc32/include/exported_3.h",
+		"$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc",
+		"$(EPOCROOT)/epoc32/include/exported file with a space.doc",
+		"/tmp/$(USER)/simple_exp1.h",
+		"/tmp/$(USER)/simple_exp2.h",
+		"/tmp/$(USER)/simple_exp3.h",
+		"$(EPOCROOT)/epoc32/include/simple_exp4.h"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	# Testing if clean deletes any exports which it is not supposed to
+	t.id = "0023b"
+	t.name = "export_clean" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
+			+ "-c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/exported_1.h",
+		"$(EPOCROOT)/epoc32/include/exported_2.h",
+		"$(EPOCROOT)/epoc32/include/exported_3.h",
+		"$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc",
+		"$(EPOCROOT)/epoc32/include/exported file with a space.doc",
+		"/tmp/$(USER)/simple_exp1.h",
+		"/tmp/$(USER)/simple_exp2.h",
+		"/tmp/$(USER)/simple_exp3.h"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t = AntiTargetSmokeTest()
+	t.id = "0023c"
+	t.name = "export_reallyclean" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf " \
+			+ "-c armv5 REALLYCLEAN"
+	t.antitargets = [
+		'$(EPOCROOT)/epoc32/include/exported_1.h',
+		'$(EPOCROOT)/epoc32/include/exported_2.h',
+		'$(EPOCROOT)/epoc32/include/exported_3.h',
+		'$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc',
+		'$(EPOCROOT)/epoc32/include/exported file with a space.doc',
+		'/tmp/$(USER)/simple_exp1.h',
+		'/tmp/$(USER)/simple_exp2.h',
+		'/tmp/$(USER)/simple_exp3.h',
+		'$(EPOCROOT)/epoc32/include/simple_exp4.h'
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	t.id = "23"
+	t.name = "export"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/export_multi.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "81"
+	t.name = "export_multi"
+	t.description = "Test that the export section only gets included once even if all platforms are selected (see DPDEF138366)"
+	# Note I'm not including 'tools' to avoid a dependency on MSVC6
+	# Given this test will not be necessary once the export section is removed from the make files anyway, I'm not too worried.
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf -c winscw -c armv5 -c tools2 -c armv7 -c gccxml EXPORT"
+	t.mustnotmatch = [
+		".*warning: overriding commands for target.*",
+		".*warning: ignoring old commands for target.*"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/extension_reallyclean.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "19"
+	t.name = "extension_reallyclean"
+	t.description = "These 2 sets of tests are for testing REALLYCLEAN on TEM" \
+			+ " files"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf " \
+			+ "-c armv5_urel -m ${SBSMAKEFILE} -f ${SBSLOGFILE}; ls " \
+			+ "$(EPOCROOT)/epoc32/build/tem_export_test; sbs -b " \
+			+ "smoke_suite/test_resources/simple_extension/bld.inf -c " \
+			+ "armv5_urel REALLYCLEAN -m ${SBSMAKEFILE}_2 -f ${SBSLOGFILE}_2"
+	t.mustnotmatch = [
+		"ls.*/epoc32/build/tem_export_test: No such file or directory"
+	]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/build/tem_export_test",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/extension_whattarget.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re
+
+def run():
+	
+	t = CheckWhatSmokeTest()
+	t.id = "68"
+	t.description = "Test output from WHAT target"
+	t.name = "extension_whattarget"
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf" + \
+			" WHAT -f - -m ${SBSMAKEFILE}"
+	t.regexlinefilter = \
+			re.compile("^<(whatlog|export|build>|resource>|bitmap>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta",
+		]
+	t.stdout = [
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config=''>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/clean.mk'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/clean.meta'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/build.mk'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/build.meta'/>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='armv5_udeb'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='armv5_urel'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='winscw_urel'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='winscw_udeb'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_extension.txt</build>"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/featurevariants.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,299 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	
+	# tests for building feature variants
+	t.id = "56"
+	t.name = "featurevariants"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/bv/bld.inf -c armv5 " + \
+                "-c armv5.test_bv_1 -c armv5.test_bv_2 -c armv5.test_bv_3 " + \
+                "--configpath=test/smoke_suite/test_resources/bv -f-"
+	t.targets = [
+		# prebuilt files
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dummy.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dummy.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debfake.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/relfake.lib",
+		
+		# built files
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.sym",
+
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.vmap",
+		
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.vmap",
+		
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2{000a0000}.dso",
+
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var1.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var1.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var2.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var2.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var3.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var3.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_inv.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_inv.rsg"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf', [
+		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o",
+		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o.d",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant_udeb_objects.via",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant{000a0000}.def",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant{000a0000}.dso",
+		"createstaticdll_invariant_dll/armv5/urel/CreateStaticDLL_invariant.o",
+		"createstaticdll_invariant_dll/armv5/urel/CreateStaticDLL_invariant.o.d",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant_urel_objects.via",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant{000a0000}.def",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant{000a0000}.dso",
+		
+		"dummy_inv_dll/dummy_inv__resource_apps_sc.rpp",
+		"dummy_inv_dll/dummy_inv__resource_apps_sc.rpp.d",
+		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp",
+		"dummy_var1_dll/dummy_var1__resource_apps_sc.rpp.d",
+		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp",
+		"dummy_var2_dll/dummy_var2__resource_apps_sc.rpp.d",
+		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp",
+		"dummy_var3_exe/dummy_var3__resource_apps_sc.rpp.d",
+		
+		
+		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.one/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.one/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.one/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.one/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.one/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.one/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.one/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.one/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.one/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.one/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.one/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.one/urel/createexe_variant3_urel_objects.via",
+		
+		
+		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.two/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.two/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.two/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.two/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.two/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.two/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.two/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.two/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.two/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.two/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.two/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.two/urel/createexe_variant3_urel_objects.via",
+		
+		
+		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.three/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.three/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.three/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.three/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.three/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.three/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.three/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.three/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.three/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.three/urel/createexe_variant3_urel_objects.via"
+	])
+	# Test that static libs are linked from the invariant place.
+	t.mustmatch = [
+		"armlink.*epoc32/release/armv5/urel/bv_static_lib.lib",
+		"armlink.*epoc32/release/armv5/udeb/bv_static_lib.lib"
+	]
+	t.run()
+	
+	
+	# tests for the createvmap script
+	createvmap = "python $(SBS_HOME)/bin/createvmap.py"
+	vmapfile = "$(EPOCROOT)/epoc32/build/test.vmap"
+	vmap = " -o " + vmapfile
+	bvcpp = " -c $(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp"
+	if t.onWindows:
+		bvcpp += ".exe"
+
+	bvdata = "$(SBS_HOME)/test/smoke_suite/test_resources/bv"
+	
+	preinc = " -p " + bvdata + "/var1/var1.h"
+	listA = " -f " + bvdata + "/listA.txt"
+	listB = " -f " + bvdata + "/listB.txt"
+	listC = " -f " + bvdata + "/listC.txt"
+	srcWith = " -s " + bvdata + "/with_macros.cpp"
+	srcWithout = " -s " + bvdata + "/without_macros.cpp"
+	badSrc = " -s " + bvdata + "/with_errors.cpp"
+
+	t.id = "56a"
+	t.name = "createvmap exits with an error"
+	t.usebash = True
+	t.command = createvmap
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = []
+	t.run()
+
+	
+	t.id = "56b"
+	t.name = "createvmap shows cpp errors"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + badSrc
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = ["#error this code is broken"]
+	t.run()
+	
+	
+	t.id = "56c"
+	t.name = "createvmap errors on missing feature list"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listC + srcWith
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = ["The feature list '.*listC.txt' does not exist"]
+	t.run()
+	
+	
+	t.id = "56d"
+	t.name = "createvmap warns on featureless code"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + srcWithout
+	t.returncode = 0
+	t.targets = [vmapfile]
+	t.mustmatch = ["warning: No feature macros were found in the source"]
+	t.run()
+	
+	
+	t.id = "56e"
+	t.name = "createvmap creates the right vmap file"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + listB + srcWith + srcWithout + " && cat " + vmapfile
+	t.returncode = 0
+	t.targets = [vmapfile]
+	t.mustmatch = ["A_1=defined", "B_1000=undefined"]
+	t.run()
+	
+	
+	# print the overall result
+	t.id = "56"
+	t.name = "featurevariants"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/filter_missing.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import GenericSmokeTest
+
+def run():
+	result = GenericSmokeTest.PASS 
+	
+	t = GenericSmokeTest()
+	t.id = "0072a"
+	t.name = "filter_missing" 
+	t.command = "sbs --filters=NonExistingFilter"
+	t.mustmatch = [
+			".*requested filters not found.*NonExistingFilter.*"
+	]
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	if t.result == GenericSmokeTest.FAIL:
+		result = GenericSmokeTest.FAIL
+
+	t.id = "0072b"
+	t.name = "filter_crashes"
+	t.usebash = True
+	t.command = "cp -f smoke_suite/test_resources/filter_test/testfilter_exceptions.py " \
+			+ "$SBS_HOME/python/plugins ; " \
+			+ "sbs -n --filters=FilterTestCrash,FilterLogFile,FilterTerminal " \
+			+ "-b smoke_suite/test_resources/simple/bld.inf " \
+			+ "-m ${SBSMAKEFILE} -f ${SBSLOGFILE} ; " \
+    		+ "rm -f $SBS_HOME/python/plugins/testfilter_exceptions.py"
+	t.errors = 0
+	t.returncode = 0
+	t.exceptions = 1
+	t.mustmatch = [
+			".*A test exception in a filter was generated.*",
+			".*sbs: build log in.*"
+	]
+
+	t.run()
+	if t.result == GenericSmokeTest.FAIL:
+		result = GenericSmokeTest.FAIL
+	
+	t.id = "72"
+	t.name = "filter_missing"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/flm_extension.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "20"
+	t.name = "flm_extension"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/simple_extension/flm_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/flm_test_1_2",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/tools/flm_export.xml",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/tools/flm_export.flm"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gccxml.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,129 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0057a"
+	t.name = "gccxml"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/bld.inf " + \
+			"-c gccxml_urel -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && " + \
+			"grep -o 'gcc.*-fpermissive' ${SBSLOGFILE}"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/gccxml/includeheaders.txt",
+		"$(EPOCROOT)/epoc32/release/gccxml/urel/helloworldexe.gxp"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/bld.inf', [
+		"helloworld_exe/gccxml/HelloWorld.mmp.xml",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld.rss.rfi",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld_reg.rss.rfi",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml"
+	])
+	t.mustmatch = [
+		".*gcc.*-fpermissive.*"
+	]
+	# Windows-only until formal delivery of a Linux version of gccxml_cc1plus
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	elif t.result == SmokeTest.SKIP:
+		return t
+	
+	
+	t = AntiTargetSmokeTest()
+	t.id = "0057b"
+	t.name = "gccxml_reallyclean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/bld.inf " + \
+			"-c gccxml_urel REALLYCLEAN"
+	t.antitargets = ["$(EPOCROOT)/epoc32/release/gccxml/urel/helloworldexe.gxp"]
+	t.addbuildantitargets('smoke_suite/test_resources/simple_gui/bld.inf', [
+		"helloworld_exe/gccxml/HelloWorld.mmp.xml",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld.rss.rfi",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld_reg.rss.rfi",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+		
+	t = SmokeTest()
+	t.id = "0057c"
+	t.name = "gccxml_var2"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/BldVar2.inf " + \
+			"-c gccxml_urel -f -"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	
+	t.mustmatch = [".*__KERNEL_MODE__.*"]
+	t.errors = 1 # not really VAR2 code, so it wont build cleanly
+	t.returncode = 1
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+		
+	t = SmokeTest()
+	t.id = "0057d"
+	t.name = "gccxml_stdcpp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf " + \
+			"-c gccxml_urel -f -"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	
+	t.mustmatch = [".*__SYMBIAN_STDCPP_SUPPORT__.*"]
+	t.errors = 0 # reset after previous run
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+		
+	t.id = "57"
+	t.name = "gccxml"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "53"	
+	t.name = "gnumakefile"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_WINSCW_UREL.txt"
+		]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re,os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "54"
+	t.name = "gnumakefile_what"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf --what"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/gnumakefile"))
+
+	t.stdout = [
+	# Generated txt files by the gnumakefile
+		componentpath+"/master_bld_ARMV5_UDEB.txt",
+		componentpath+"/master_bld_ARMV5_UREL.txt",
+		componentpath+"/master_bld_WINSCW_UDEB.txt",
+		componentpath+"/master_bld_WINSCW_UREL.txt",
+		componentpath+"/master_final_ARMV5_UDEB.txt",
+		componentpath+"/master_final_ARMV5_UREL.txt",
+		componentpath+"/master_final_WINSCW_UDEB.txt",
+		componentpath+"/master_final_WINSCW_UREL.txt",
+		componentpath+"/master_lib_ARMV5_UDEB.txt",
+		componentpath+"/master_lib_ARMV5_UREL.txt",
+		componentpath+"/master_lib_WINSCW_UDEB.txt",
+		componentpath+"/master_lib_WINSCW_UREL.txt",
+		componentpath+"/master_makmake_ARMV5_UDEB.txt",
+		componentpath+"/master_makmake_ARMV5_UREL.txt",
+		componentpath+"/master_makmake_WINSCW_UDEB.txt",
+		componentpath+"/master_makmake_WINSCW_UREL.txt",
+		componentpath+"/master_resource_ARMV5_UDEB.txt",
+		componentpath+"/master_resource_ARMV5_UREL.txt",
+		componentpath+"/master_resource_WINSCW_UDEB.txt",
+		componentpath+"/master_resource_WINSCW_UREL.txt"
+	]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile_whatlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,79 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "70"
+	t.name = "gnumakefile_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf -f - " \
+			"-m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/gnumakefile"))
+	t.regexlinefilter = re.compile("^<(whatlog|build>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		componentpath+"/master_bld_ARMV5_UDEB.txt",
+		componentpath+"/master_bld_ARMV5_UREL.txt",
+		componentpath+"/master_bld_WINSCW_UDEB.txt",
+		componentpath+"/master_bld_WINSCW_UREL.txt",
+		componentpath+"/master_final_ARMV5_UDEB.txt",
+		componentpath+"/master_final_ARMV5_UREL.txt",
+		componentpath+"/master_final_WINSCW_UDEB.txt",
+		componentpath+"/master_final_WINSCW_UREL.txt",
+		componentpath+"/master_lib_ARMV5_UDEB.txt",
+		componentpath+"/master_lib_ARMV5_UREL.txt",
+		componentpath+"/master_lib_WINSCW_UDEB.txt",
+		componentpath+"/master_lib_WINSCW_UREL.txt",
+		componentpath+"/master_makmake_ARMV5_UDEB.txt",
+		componentpath+"/master_makmake_ARMV5_UREL.txt",
+		componentpath+"/master_makmake_WINSCW_UDEB.txt",
+		componentpath+"/master_makmake_WINSCW_UREL.txt",
+		componentpath+"/master_resource_ARMV5_UDEB.txt",
+		componentpath+"/master_resource_ARMV5_UREL.txt",
+		componentpath+"/master_resource_WINSCW_UDEB.txt",
+		componentpath+"/master_resource_WINSCW_UREL.txt"
+		]
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_udeb.whatlog'>",
+		"<build>"+componentpath+"/master_bld_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_final_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_lib_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_makmake_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_resource_ARMV5_UDEB.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_urel.whatlog'>",
+		"<build>"+componentpath+"/master_bld_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_final_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_lib_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_makmake_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_resource_ARMV5_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_urel.whatlog'>",
+		"<build>"+componentpath+"/master_bld_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_final_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_lib_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_makmake_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_resource_WINSCW_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_udeb.whatlog'>",
+		"<build>"+componentpath+"/master_bld_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_final_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_lib_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_makmake_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_resource_WINSCW_UDEB.txt</build>"
+	]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gui_whatlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,172 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "66"
+	t.name = "gui_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -f - -m" \
+			+ " ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_gui"))
+	t.regexlinefilter = \
+			re.compile("^<(whatlog|export|build>|resource>|bitmap>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d"
+	])
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='armv5_udeb.whatlog'>",
+		"<bitmap>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/group/helloworld.info</bitmap>",
+		"<resource>$(EPOCROOT)/epoc32/include/helloworld.rsg</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/group/helloworld.info</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/helloworld_reg/rsc/helloworld_reg.rpp</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info</resource>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='winscw_urel.whatlog'>",
+		"<bitmap>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/localisation/group/helloworld.info</bitmap>",
+		"<resource>$(EPOCROOT)/epoc32/include/helloworld.rsg</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/group/helloworld.info</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/helloworld_reg/rsc/helloworld_reg.rpp</resource>",
+		"<resource>$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info</resource>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='armv5_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='winscw_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe</build>",
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "14"
+	t.name = "implib_armv5"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf" \
+		+ " -c armv5 LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_implib/bld.inf', [
+		['simple_implib_lib/armv5/udeb/simple_implib.prep',
+                 'simple_implib_lib/armv5/urel/simple_implib.prep']
+	])
+	t.run("linux")
+	# Run test on Windows if that is the current OS
+	if t.result == SmokeTest.SKIP:
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib"
+		])
+		t.run("windows")
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_smp.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "64"
+	t.name = "implib_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "armv5.smp LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.run("linux")
+	if t.result == AntiTargetSmokeTest.SKIP:
+		t.antitargets = [
+			'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib',
+			'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib'
+		]
+		t.run("windows")
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "15"
+	t.name = "implib_armv5_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " + \
+			"armv5 --what LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso',
+		'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso'
+	]
+	t.run("linux")
+	# Run test on Windows if that is the current OS
+	if t.result == CheckWhatSmokeTest.SKIP:
+		t.stdout.extend([
+			'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib',
+			'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib'
+		])
+		t.run("windows")
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_with_armv5_smp.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "65"
+	t.name = "implib_armv5_with_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "armv5 -c armv5.smp LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.run("linux")
+	if t.result == SmokeTest.SKIP:
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib"
+		])
+		t.run("windows")
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_whatlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "67"
+	t.name = "implib_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -f -" \
+			" -m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog LIBRARY"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_implib"))
+	t.regexlinefilter = re.compile("^<(whatlog|build>)")
+	t.hostossensitive = False
+	t.usebash = True
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib"
+		]
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='winscw_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='winscw_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='armv5_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='armv5_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso</build>"
+	]
+	t.run("linux")
+	if t.result == CheckWhatSmokeTest.SKIP:
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib"
+		])
+		t.stdout.extend([
+			"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.lib</build>",
+			"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.lib</build>"
+		])
+		t.run("windows")
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_winscw.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "36"
+	t.name = "implib_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "winscw LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_implib/bld.inf', [
+		["simple_implib/simple_implib_lib/winscw/udeb/simple_implib.prep.def",
+		"simple_implib/simple_implib_lib/winscw/urel/simple_implib.prep.def"]
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_winscw_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "37"
+	t.name = "implib_winscw_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "winscw --what LIBRARY"
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib'
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/kdll_armv5.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0096"
+	t.name = "kdll_armv5"
+	t.usebash = 1
+
+	t.command = "sbs -b smoke_suite/test_resources/simple_kdll/bld.inf -c armv5_urel -f-"
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll.sym"
+		]
+
+	t.mustmatch = [
+		r".*\bksrt\d_\d\.lib\b.*",
+		r".*\bekll\.lib\b.*"
+		]
+
+	t.mustnotmatch = [
+		r".*usrt.*",
+		r".*scppnwdl.*"
+		]
+
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_armv5_armv7.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,107 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import ReplaceEnvs
+import os
+
+def run():
+	# Generate source files for simple_lib tests
+	dir = ReplaceEnvs("$(SBS_HOME)/test/smoke_suite/test_resources/simple_lib")
+	zs = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
+	for i in range(1, 100):
+		file = open(os.path.join(dir, zs + "_" + str(i) + ".cpp"), "w")
+		file.write("int f(void) { return 1; }\n")
+		file.close()
+
+	# Convenience method to list generated source build output
+	def __generatedFiles(aConfig):
+		udeb = "etest_lib/%s/udeb/" % aConfig
+		urel = "etest_lib/%s/urel/" % aConfig
+	
+		generated = []
+		for i in range(1, 100):
+			generated.append(udeb + zs + "_" + str(i) + ".o")
+			generated.append(udeb + zs + "_" + str(i) + ".o.d")
+			generated.append(urel + zs + "_" + str(i) + ".o")
+			generated.append(urel + zs + "_" + str(i) + ".o.d")
+		return generated
+		
+	t = SmokeTest()
+	result = SmokeTest.PASS
+	
+	armv5targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/etest.lib"
+		]
+	armv5buildtargets = [
+		"etest_lib/armv5/udeb/etest_udeb_objects.via",
+		"etest_lib/armv5/udeb/test_lib.o",
+		"etest_lib/armv5/urel/etest_urel_objects.via",
+		"etest_lib/armv5/urel/test_lib.o"
+		]
+	armv5buildtargets.extend(__generatedFiles("armv5"))
+		
+	t.id = "0013a"
+	t.name = "lib_armv5_rvct"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv5 LIBRARY"
+	t.targets = armv5targets
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', armv5buildtargets)
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	t.id = "0013b"
+	t.name = "lib_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv5 clean"
+	t.targets = []
+	t.run()	
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0013c"
+	t.name = "lib_armv5_gcce"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c gcce_armv5 LIBRARY"
+	t.targets = armv5targets
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', armv5buildtargets)
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	t.name = "lib_armv7"
+	t.id = "0013d"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv7 LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/etest.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', [
+		"etest_lib/armv7/udeb/etest_udeb_objects.via",
+		"etest_lib/armv7/udeb/test_lib.o",
+		"etest_lib/armv7/urel/etest_urel_objects.via",
+		"etest_lib/armv7/urel/test_lib.o"
+	])
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', __generatedFiles("armv7"))
+	
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+
+	t.id = "13"
+	t.name = "lib_armv5_armv7"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_versioned.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import sys
+
+def run():
+	t = SmokeTest()
+	t.id = "58"
+	t.name = "lib_versioned"
+	t.command = "sbs -b smoke_suite/test_resources/versioned_lib/bld.inf" + \
+		    " -b smoke_suite/test_resources/versioned_lib/dllversioning.inf" + \
+		    " -c armv5 -c winscw "
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00020000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00030000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib.04.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib{000a0000}.04.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib.03.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib{000a0000}.03.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib.02.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib{000a0000}.02.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver{00020000}.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver{00020000}.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver{00020000}.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver{00020000}.dll.sym",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/version.ed.lib.04.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versioned.lib.03.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versionedlib.02.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versionedlib01.lib"
+		]
+
+	if sys.platform.lower().startswith("win"):
+		t.targets.extend (	
+		[
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib.03.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib.02.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00020000}.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00030000}.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib{000a0000}.03.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib.04.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib{000a0000}.04.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01{000a0000}.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib{000a0000}.02.lib"
+		] )
+		
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_winscw.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "35"
+	t.name = "lib_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c " + \
+			"winscw LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/etest.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', [
+		"etest_lib/winscw/udeb/test_lib.o",
+		"etest_lib/winscw/urel/test_lib.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/listing.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "31"
+	t.name = "listing"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw -k listing"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.WINSCW.lst"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/longfilenames.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,129 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+import re
+import sys
+
+def run():
+	# Content for files to be generated.
+	cpp = "longerfilenamethanyoumightnormallyexpecttobepresent"
+	path = "/test/smoke_suite/test_resources/longfilenames/"
+	targetinfo = """TARGET			longfilenames.exe
+TARGETTYPE		exe
+UID				0xE8000047
+LIBRARY			euser.lib
+SYSTEMINCLUDE	/epoc32/include
+"""
+	
+	# Some numbers for path and file operations
+	length_limit = 245 # Safety-margin of 10 chars for changing dir structures in Raptor
+	extLen = 8 # eg. _001.o.d
+	numLen = 43 # release directory length (c_0000000000000000/longfilenames_exe/winscw/urel/) (minus a few as a safety-margin)
+	pathmultiplier = 5	# expand cpp to the maximum length
+	mmpStart = 1
+	mmpStop = 270
+	cppStart = 1
+	cppStop = 270
+
+
+	# Find SBS_Home and its length as a string
+	sbsHome = os.environ["SBS_HOME"]
+	sbsLen = len(sbsHome)
+	
+	# Work out path lengths required
+	dirname = sbsHome + path
+	string = cpp * pathmultiplier
+	dirlen = len(dirname)
+	fileLen = length_limit - dirlen - numLen - extLen
+	if fileLen < 0:
+		print "Error: Your test path is too long for the longfilenames test to work"
+		sys.exit()
+	fileName = string[0:fileLen]
+
+	# Generate the mmp file using the mmp string
+	f = open(dirname + 'longfilenames.mmp', 'w')
+	f.writelines(targetinfo)
+	f.writelines("\nSOURCE		" + cpp + ".cpp\n")
+	while mmpStart <= mmpStop:
+		sourceinfo = "SOURCE		" + fileName + '_%03d' %mmpStart + ".cpp " + '\n'
+		f.writelines(sourceinfo)
+		mmpStart += 1
+	f.close()
+
+	# File generating utility
+	while cppStart <= cppStop:
+		t = str(cppStart)
+		filename = dirname + fileName + '_%03d' %cppStart + '.cpp'
+		content = 'int x' + t + ' = 1;'
+		f = open (filename, 'w')
+		f.write (content)
+		f.close()
+		cppStart += 1
+
+
+	t = SmokeTest()
+	t.id = "79"
+	t.name = "longfilenames"
+	t.command = "sbs -b smoke_suite/test_resources/longfilenames/bld.inf -c winscw"
+	t.description = """Ensure that winscw links with large amounts of object files with long names are buildable.
+		Note that the link in the build of this component should always be greater than 16500 chars, regardless
+		of environment - we know such calls are currently problematic on Windows with GNU Make and Cygwin's
+		Bash unless a linker response file is not used to hold the object files."""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.dep",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames.UID.CPP",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.dep",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames_urel_objects.lrf"]
+		)
+	
+	basefilename = "longfilenames_exe/winscw/urel/" + fileName + "_%03d.%s"
+	for i in range(1, 271):		
+		t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+			basefilename % (i, "dep"),
+			basefilename % (i, "o"),
+			basefilename % (i, "o.d")
+			]
+		)
+
+	t.run()
+		
+	# Remove all created files
+	
+	# Matches longerfilena......_nnn.cpp
+	cpp_regex = re.compile("^.+_\d{3}.cpp$", re.I)
+	for file in os.listdir(dirname):
+		if cpp_regex.match(file) is not None:
+			try:
+				os.remove(dirname + file)
+			except:
+				pass
+	
+	try:
+		os.remove(dirname + 'longfilenames.mmp')
+	except:
+		pass
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/longpath.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,131 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	#------------------------------------------------------------------------------
+	# Content for files to be generated.
+	#------------------------------------------------------------------------------
+	cpp = "longerfilenamethanyoumightnormallyexpecttobepresent"
+	path = "/test/smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/"
+	path_eabi = "/test/smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/eabi/"
+	
+	#------------------------------------------------------------------------------
+	# Some numbers for path and file operations
+	#------------------------------------------------------------------------------
+	cppStart = 1
+	cppStop = 49
+	
+	import os
+	import shutil
+	import sys
+	
+	#------------------------------------------------------------------------------
+	# Find SBS_Home
+	#------------------------------------------------------------------------------
+	sbsHome = os.environ["SBS_HOME"]
+	
+	#------------------------------------------------------------------------------
+	# Create directories for both Linux and Windows
+	#------------------------------------------------------------------------------
+	d = os.path.dirname(sbsHome + path)
+	if not os.path.exists(d):
+		os.makedirs(d)
+		
+	d = os.path.dirname(sbsHome + path_eabi)
+	if not os.path.exists(d):
+		os.makedirs(d)
+
+	#------------------------------------------------------------------------------
+	# File generating utility
+	#------------------------------------------------------------------------------
+	while cppStart <= cppStop:
+			t = str(cppStart)
+			filename = sbsHome + path + 'test' + '%02d' %cppStart + '.cpp'
+			content = 'int x' + t + ' = 0;'
+			cppStart = cppStart + 1
+			f = open (filename, 'w')
+			f.write (content + '\n')
+			f.close()
+	cppStart = cppStart + 1
+
+	#------------------------------------------------------------------------------
+	# File copying utility
+	#------------------------------------------------------------------------------
+	dirname = sbsHome + '/test/smoke_suite/test_resources/long/paths/'
+	cpp = dirname + 'test.cpp'
+	bld = dirname + 'bld.inf'
+	deftest = dirname + 'deftest.mmp'
+	e32def = dirname + 'e32def.h'
+	
+	deftestu = dirname + 'deftestu.def'
+	distpol = dirname + 'distribution.policy.s60'
+	
+	dst_cpp = sbsHome + path + 'test.cpp'
+	dst_bld = sbsHome + path + 'bld.inf'
+	dst_deftest = sbsHome + path + 'deftest.mmp'
+	dst_e32def = sbsHome + path + 'e32def.h'
+	dst_deftestu = sbsHome + path_eabi + 'deftestu.def'
+	dst_distpol = sbsHome + path_eabi + 'distribution.policy.s60'
+	
+		
+	if os.path.exists(dst_cpp):
+		pass
+	else:
+		shutil.copy(cpp, dst_cpp)
+		shutil.copy(bld, dst_bld)
+		shutil.copy(deftest, dst_deftest)
+		shutil.copy(e32def, dst_e32def)
+		shutil.copy(deftestu , dst_deftestu)
+		shutil.copy(distpol , dst_distpol)
+		dirname = sbsHome + path
+		
+	t = SmokeTest()
+	t.id = "41"
+	t.name = "longpath"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/bld.inf" + \
+			" -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/bld.inf', [
+		"deftest_/armv5/udeb/deftest_udeb_objects.via",
+		"deftest_/armv5/udeb/test.o",
+		"deftest_/armv5/udeb/test09.o",
+		"deftest_/armv5/udeb/test19.o",
+		"deftest_/armv5/udeb/test29.o",
+		"deftest_/armv5/udeb/test39.o",
+		"deftest_/armv5/udeb/test49.o",
+		"deftest_/armv5/urel/deftest_urel_objects.via",
+		"deftest_/armv5/urel/test.o",
+		"deftest_/armv5/urel/test09.o",
+		"deftest_/armv5/urel/test19.o",
+		"deftest_/armv5/urel/test29.o",
+		"deftest_/armv5/urel/test39.o",
+		"deftest_/armv5/urel/test49.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/metadep.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "71"
+	t.name = "metadep"
+	t.description =  """Tests metadata dependency generation.  Changes 
+			to bld.infs and mmps can be detected."""
+	t.usebash = True
+	t.command = """export SBSLOGFILE SBSMAKEFILE; bash smoke_suite/test_resources/metadep.sh 2>&1"""
+			
+	t.targets = [
+		]
+
+	t.mustmatch_multiline = [
+""".*Step 1 .*no warnings or errors.*
+sbs: build log in.*
+\+ sleep 1.*
+.*make -rf .*epoc32/build/metadata_all.mk.*
+.*make.*epoc32/build/metadata_all.mk. is up to date.*
+Step 2 .*
+.*RE-RUNNING SBS with previous parameters.*
+Step 3 .*
+.*RE-RUNNING SBS with previous parameters.*
+.*RE-RUNNING SBS with previous parameters.*"""
+	]
+	t.mustnotmatch_multiline = [
+"""RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*"""
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,250 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	t = SmokeTest()
+	t.description = "This testcase tests all mmp keywords including new implementation of 'paged/unpaged code/data'"
+	t.usebash = True
+	t.id = "75a"
+	t.name = "mmp_1"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp1/group/bld.inf -c armv5 -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/shutdownsrv.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/shutdownsrv.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/shutdownsrv.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/shutdownsrv.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/exportlibrary_shutdownsrv.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/exportlibrary_shutdownsrv{000a0000}.dso",
+	]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp1/group/bld.inf", [
+		"shutdownsrv_dll/armv5/udeb/shutdownsrv.o",
+		"shutdownsrv_dll/armv5/urel/shutdownsrv.o",
+		"shutdownsrv_dll/armv5/udeb/shutdownsrvpatchdata.o",
+		"shutdownsrv_dll/armv5/urel/shutdownsrvpatchdata.o",
+		"shutdownsrv_dll/armv5/udeb/shutdowntimer.o",
+		"shutdownsrv_dll/armv5/urel/shutdowntimer.o"
+		])
+	t.mustmatch = [
+		".*elf2e32.*(--defaultpaged|--codepaging=default.*--datapaging=default).*",
+		".*armlink.*--verbose.*"
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "75b"
+	t.name = "mmp_2"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp2/group/bld.inf -c armv5 -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/imageprocessorperf.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/imageprocessorperf.lib"		
+	]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp2/group/bld.inf", [
+		"imageprocessorperf_lib/armv5/udeb/ColorConverter.o",
+		"imageprocessorperf_lib/armv5/urel/ColorConverter.o",
+		"imageprocessorperf_lib/armv5/udeb/ImageProcessor.o",
+		"imageprocessorperf_lib/armv5/urel/ImageProcessor.o"
+		])
+	t.mustmatch = [
+		".*armcc.*-O0.*-g.*--cpu 6.*-Otime.*",
+		".*armcc.*-O3.*--cpu 6.*-Otime.*",
+		".*OPTION ARMASM has no effect.*",
+		".*OPTION_REPLACE ARMASM has no effect.*"
+	]
+	t.mustnotmatch = [
+		".*armcc.*--export_all_vtbl.*"
+	]
+	t.warnings = 2
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "75c"
+	t.name = "mmp_3"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp3/bld.inf -c armv5 -c winscw -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tbm.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tbm.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tbm.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tbm.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dfpaeabi_vfpv2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dfpaeabi_vfpv2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dfpaeabi_vfpv2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dfpaeabi_vfpv2.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oom.exe"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp3/bld.inf", [
+		"tbm_exe/armv5/udeb/tbm.o",
+		"tbm_exe/armv5/urel/tbm.o",
+		"t_oom_exe/armv5/udeb/t_oom.o",
+		"t_oom_exe/armv5/urel/t_oom.o",
+		"dfpaeabi_vfpv2_dll/armv5/udeb/dfpaeabi.o",
+		"dfpaeabi_vfpv2_dll/armv5/urel/dfpaeabi.o",
+		"t_oom_exe/winscw/udeb/t_oom.o",
+		"t_oom_exe/winscw/udeb/t_oom_UID_.o",
+		"t_oom_exe/winscw/urel/t_oom.o",
+		"t_oom_exe/winscw/urel/t_oom_UID_.o"
+		])
+	t.mustmatch = [
+		".*armlink.*udeb/eexe.lib.*-o.*armv5/udeb/t_oom.exe.sym.*euser.dso.*efsrv.dso.*estor.dso.*euser.dso.*",
+		".*armlink.*urel/eexe.lib.*-o.*armv5/urel/t_oom.exe.sym.*euser.dso.*efsrv.dso.*euser.dso.*",
+		".*mwldsym2.*udeb/eexe.lib.*euser.lib.*efsrv.lib.*estor.lib.*euser.lib.*-o.*winscw/udeb/t_oom.exe.*",
+		".*mwldsym2.*urel/eexe.lib.*euser.lib.*efsrv.lib.*euser.lib.*-o.*winscw/urel/t_oom.exe.*"
+		]
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "75d"
+	t.name = "mmp_4"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp4/group/bld.inf -c winscw"
+	t.targets = [			
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/d_newldd.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_newldd.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/d_lddturnaroundtimertest.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_lddturnaroundtimertest.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_lddturnaroundtimertest.ldd.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_sharedio3.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_sharedio3.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_sharedio3.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_rbuf.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_rbuf.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_rbuf.exe.map"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp4/group/bld.inf", [
+		"d_newldd_ldd/winscw/udeb/d_newldd.o",
+		"d_newldd_ldd/winscw/udeb/d_newldd.UID.CPP",
+		"d_newldd_ldd/winscw/udeb/d_newldd_UID_.o",
+		"d_newldd_ldd/winscw/urel/d_newldd.o",
+		"d_newldd_ldd/winscw/urel/d_newldd.UID.CPP",
+		"d_newldd_ldd/winscw/urel/d_newldd_UID_.o",
+		"d_newldd_ldd/winscw/udeb/t_new_classes.o",
+		"d_newldd_ldd/winscw/urel/t_new_classes.o",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest.o",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest.UID.CPP",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest_UID_.o",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest.o",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest.UID.CPP",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest_UID_.o",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio.o",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio3.UID.CPP",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio3_UID_.o",
+		"t_sharedio3_exe/winscw/urel/t_sharedio.o",
+		"t_sharedio3_exe/winscw/urel/t_sharedio3.UID.CPP",
+		"t_sharedio3_exe/winscw/urel/t_sharedio3_UID_.o",
+		"t_rbuf_exe/winscw/udeb/t_rbuf.o",
+		"t_rbuf_exe/winscw/udeb/t_rbuf.UID.CPP",
+		"t_rbuf_exe/winscw/udeb/t_rbuf_UID_.o",
+		"t_rbuf_exe/winscw/urel/t_rbuf.o",
+		"t_rbuf_exe/winscw/urel/t_rbuf.UID.CPP",
+		"t_rbuf_exe/winscw/urel/t_rbuf_UID_.o"
+		])
+	t.mustmatch = []
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# Test keywords: version, firstlib, nocompresstarget
+	t.id = "75e"
+	t.name = "mmp_5"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp5/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/fuzzv5.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/fuzzv5.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/fuzzlib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/fuzzlib.lib"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp5/bld.inf", [
+		"fuzzv5_exe/armv5/udeb/fuzzv5.o",
+		"fuzzv5_exe/armv5/urel/fuzzv5.o",
+		"fuzzlib_lib/armv5/udeb/uc_exe_.cpp",
+		"fuzzlib_lib/armv5/urel/uc_exe_.cpp",
+		"fuzzlib_lib/armv5/udeb/uc_exe_.o",
+		"fuzzlib_lib/armv5/urel/uc_exe_.o",
+		])
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "75f"
+	t.name = "mmp_6"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp6_7/bld.inf -c armv5 -k -p diagsuppress.mmp -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_test.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_test.dll",
+		]
+
+	t.mustmatch = [
+					"--diag_suppress 6780",
+					"--diag_suppress 6331"
+					]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	t.id = "75g"
+	t.name = "mmp_7"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp6_7/bld.inf -c armv5 -k -p diagsuppress_noarmlibs.mmp -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_noarmlibs_test.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_noarmlibs_test.dll"
+		]
+
+	t.mustmatch = ["--diag_suppress 6331"]
+	t.mustnotmatch = ["--diag_suppress 6780"]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Test keyword: version
+	t.id = "75h"
+	t.name = "mmp_8"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp8/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_mmp_version.exe"
+		]
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.warnings = 2
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "75"
+	t.name = "mmp_keywords"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_newlib_keyword.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "40"
+	t.name = "mmp_newlib_keyword"
+	t.description = "Test the NEWLIB MMP keyword by specifying an invalid " + \
+			"library to link against"
+	t.command = "sbs -b smoke_suite/test_resources/newlib/bld.inf"
+	# 1 error is expected because the NEWLIB library we are trying to link
+	# Against does not exist
+	t.errors = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_select.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "44"
+	t.name = "mmp_select"
+	t.description = "Test -p option"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "-p hElLoWoRlD.mMp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/HelloWorld.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/basics/helloworld/Bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld.o",
+		"helloworld_exe/armv5/urel/HelloWorld.o",
+		"helloworld_exe/winscw/udeb/HelloWorld.o",
+		"helloworld_exe/winscw/urel/HelloWorld.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/named_extension.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,45 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():	
+	t = AntiTargetSmokeTest()
+	t.id = "43"
+	t.name = "named_extension"
+	t.description = "Test -p option with named extensions - should clean then" \
+			+ " create success.txt"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "REALLYCLEAN && sbs -b " \
+			+ "smoke_suite/test_resources/basics/helloworld/Bld.inf -p run_this"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/success.txt"
+		]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/failure.txt",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/HelloWorld.exe"
+	]
+	t.addbuildantitargets("smoke_suite/test_resources/basics/helloworld/Bld.inf", [
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/armv5/udeb/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/armv5/urel/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/winscw/udeb/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/winscw/urel/HelloWorld.o"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/nobuild.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "76"
+	t.name = "nobuild"
+
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/simple/bld.inf -n -m ${SBSMAKEFILE} -f ${SBSLOGFILE} " + \
+			"&& grep -i 'No build performed' ${SBSLOGFILE}"
+	
+	t.targets = []
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [])
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe"
+	]
+	t.addbuildantitargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/udeb/test3.o",
+		"test_/winscw/udeb/test4.o",
+		"test_/winscw/udeb/test5.o",
+		"test_/winscw/udeb/test1.o",
+		"test_/winscw/udeb/test6.o",
+		"test_/winscw/udeb/test2.o",
+		"test_/winscw/urel/test3.o",
+		"test_/winscw/urel/test4.o",
+		"test_/winscw/urel/test5.o",
+		"test_/winscw/urel/test1.o",
+		"test_/winscw/urel/test6.o",
+		"test_/winscw/urel/test2.o"
+		])
+	t.mustmatch = [
+		".*No build performed.*"
+	]
+
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/non_ascii.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,56 @@
+# -*- coding: iso-8859-1 -*- This line *must* be on the first line of the file!
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+
+	# Should have returncode of 1 and output 1 error, but not cause a traceback
+	t.returncode = 1
+	t.errors = 1
+	t.mustmatch = ["sbs: error: Non-ASCII character in argument or command file"]
+
+	result = SmokeTest.PASS
+
+	t.id = "0091a"
+	t.name = "non_ascii_argument"
+
+	# The dash in "-c" is an en dash, not a normal ASCII dash.
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf –c armv5"
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0091b"
+	t.name = "non_ascii_commandfile"
+
+	t.command = "sbs --command=smoke_suite/test_resources/non_ascii/cmd.txt"
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "91"
+	t.name = "non_ascii"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/openenvironment.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,243 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, getsymbianversion
+
+def run():
+	t = SmokeTest()
+	t.id = "39"
+	t.name = "openenvironment"
+	t.description = "Test STDEXE, STDLIB and STDDLL creation; Test open " + \
+			"environment project linking against a symbian environment " + \
+			"library; Test symbian environment project linking against an " + \
+			"open environment library"
+	t.usebash = True
+	t.command = "sbs -k -b smoke_suite/test_resources/oe/group/bld.inf -c armv5 " \
+			+ "-c winscw -m ${SBSMAKEFILE} -f ${SBSLOGFILE}; grep -E \"(armlink|checklib)\" ${SBSLOGFILE} "
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oedll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oedll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/t_oedll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/t_oedll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oedll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oedll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oedll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oelib.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/oe/group/bld.inf', [
+		"t_oedll_dll/armv5/urel/t_oedll{000a0000}.dso",
+		"t_oedll_dll/armv5/urel/t_oedll_urel_objects.via",
+		"t_oedll_dll/armv5/urel/t_oedll.o",
+		"t_oedll_dll/armv5/urel/t_oedll.o.d",
+                # either prep file can exist - luck determines which
+                 ['t_oedll_dll/armv5/urel/t_oedll.prep',
+                  't_oedll_dll/armv5/udeb/t_oedll.prep'],
+		"t_oedll_dll/armv5/urel/t_oedll{000a0000}.def",
+		"t_oedll_dll/armv5/udeb/t_oedll{000a0000}.dso",
+		"t_oedll_dll/armv5/udeb/t_oedll_udeb_objects.via",
+		"t_oedll_dll/armv5/udeb/t_oedll.o",
+		"t_oedll_dll/armv5/udeb/t_oedll.o.d",
+		"t_oedll_dll/armv5/udeb/t_oedll{000a0000}.def",
+		"symbian_test_lib/armv5/urel/symbian_test_urel_objects.via",
+		"symbian_test_lib/armv5/urel/symbian_lib.o.d",
+		"symbian_test_lib/armv5/urel/symbian_lib.o",
+		"symbian_test_lib/armv5/udeb/symbian_test_udeb_objects.via",
+		"symbian_test_lib/armv5/udeb/symbian_lib.o.d",
+		"symbian_test_lib/armv5/udeb/symbian_lib.o",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/wrong_newlib_test_oeexe_urel_objects.via",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/t_oeexe.o",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/t_oeexe.o.d",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/t_oeexe.o",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/wrong_newlib_test_oeexe_udeb_objects.via",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/t_oeexe.o.d",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_seexe_urel_objects.via",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_seexe_udeb_objects.via",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_symbian.o.d",
+		"t_oeexe_exe/armv5/urel/t_oeexe_urel_objects.via",
+		"t_oeexe_exe/armv5/urel/t_oeexe.o",
+		"t_oeexe_exe/armv5/urel/t_oeexe.o.d",
+		"t_oeexe_exe/armv5/udeb/t_oeexe.o",
+		"t_oeexe_exe/armv5/udeb/t_oeexe.o.d",
+		"t_oeexe_exe/armv5/udeb/t_oeexe_udeb_objects.via",
+		"t_oelib_lib/armv5/urel/t_oelib_urel_objects.via",
+		"t_oelib_lib/armv5/urel/t_oelib.o",
+		"t_oelib_lib/armv5/urel/t_oelib.o.d",
+		"t_oelib_lib/armv5/udeb/t_oelib.o",
+		"t_oelib_lib/armv5/udeb/t_oelib_udeb_objects.via",
+		"t_oelib_lib/armv5/udeb/t_oelib.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll.dep",
+		"t_oedll_dll/winscw/urel/t_oedll.lib",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.cpp",
+		"t_oedll_dll/winscw/urel/t_oedll.dll",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.o",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.o",
+		"t_oedll_dll/winscw/urel/t_oedll.o",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.dep",
+		"t_oedll_dll/winscw/urel/t_oedll.sym",
+		"t_oedll_dll/winscw/urel/t_oedll.UID.CPP",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.dep",
+                # The prep.def file can be in urel or udeb
+                ['t_oedll_dll/winscw/urel/t_oedll.prep.def',
+                 't_oedll_dll/winscw/udeb/t_oedll.prep.def'],
+		"t_oedll_dll/winscw/urel/t_oedll.def",
+		"t_oedll_dll/winscw/urel/t_oedll.inf",
+		"t_oedll_dll/winscw/udeb/t_oedll.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.lib",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.cpp",
+		"t_oedll_dll/winscw/udeb/t_oedll.dll",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.o",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.o",
+		"t_oedll_dll/winscw/udeb/t_oedll.o",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.sym",
+		"t_oedll_dll/winscw/udeb/t_oedll.UID.CPP",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.def",
+		"t_oedll_dll/winscw/udeb/t_oedll.inf",
+		"symbian_test_lib/winscw/urel/symbian_lib.dep",
+		"symbian_test_lib/winscw/urel/symbian_lib.o.d",
+		"symbian_test_lib/winscw/urel/symbian_lib.o",
+		"symbian_test_lib/winscw/udeb/symbian_lib.dep",
+		"symbian_test_lib/winscw/udeb/symbian_lib.o.d",
+		"symbian_test_lib/winscw/udeb/symbian_lib.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe.UID.CPP",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.o",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe.UID.CPP",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.o",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.o.d",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.dep",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.o",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.dep",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe.UID.CPP",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.o.d",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.dep",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.o",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.dep",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe.UID.CPP",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.o.d",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.o",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.dep",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.dep",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.o",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.o.d",
+		"t_oeexe_exe/winscw/urel/t_oeexe.UID.CPP",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.o.d",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.o",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.dep",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.dep",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.o",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.o.d",
+		"t_oeexe_exe/winscw/udeb/t_oeexe.UID.CPP",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.o.d",
+		"t_oelib_lib/winscw/urel/t_oelib.o",
+		"t_oelib_lib/winscw/urel/t_oelib.o.d",
+		"t_oelib_lib/winscw/urel/t_oelib.dep",
+		"t_oelib_lib/winscw/udeb/t_oelib.o",
+		"t_oelib_lib/winscw/udeb/t_oelib.o.d",
+		"t_oelib_lib/winscw/udeb/t_oelib.dep"
+	])
+	
+	# On 9.4 the open environment checks for
+	# mixed symbianc++ and stdc++ new/delete won't fail
+	if getsymbianversion() != "9.4":
+		t.mustmatch = [
+			'.*checklib: error: library .*epoc32.release.armv5.urel.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.armv5.urel.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.armv5.udeb.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.armv5.udeb.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.urel.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.winscw.urel.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.udeb.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.udeb.symbian_test.lib is incompatible with standard.*',
+			'.*armlink.*oe_exe_without_stdcpp.*scppnwdl.dso.*',
+			'.*armlink.*symbian_exe_with_stdcpp.*stdnew.dso.*',
+			'.*armlink.*oedll.*stdnew.dso.*',
+			'.*armlink.*oeexe.*stdnew.dso.*',
+			'.*armlink.*symbian_newlib.exe.*scppnwdl.dso.*'
+		]
+		t.mustnotmatch = [
+			'.*armlink.*oe_exe_without_stdcpp.*stdnew.dso.*',
+			'.*armlink.*symbian_exe_with_stdcpp.*scppnwdl.dso.*',
+			'.*armlink.*oedll.*scppnwdl.dso.*',
+			'.*armlink.*oeexe.*scppnwdl.dso.*',
+			'.*armlink.*symbian_newlib.exe.*stdnew.dso.*'
+		]
+	else: 
+		# these files will build for 9.4
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe.sym"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/output_control.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from os import environ
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	commonbuildfiles = [ 
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o.d",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o.d",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o.d"
+	]
+	
+	t = SmokeTest()
+	t.id = "82"
+	t.name = "output_control_sbs_build_dir"
+	t.description = "Test building intermediate files into a location other than $EPOCROOT/epoc32/build. Use SBS_BUILD_DIR. environment variable."
+	t.sbs_build_dir = environ['EPOCROOT'].replace("\\","/").rstrip("/") + '/anotherbuilddir'
+	t.environ['SBS_BUILD_DIR'] = t.sbs_build_dir
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5_urel -c winscw_urel"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll",
+                "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+                "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+								
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', commonbuildfiles) 
+	t.run()
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/paging.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+	t.usebash = True
+
+	cmd_prefix = "sbs -b smoke_suite/test_resources/simple_paging/bld.inf -c armv5_urel "
+	cmd_suffix = " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && cat ${SBSLOGFILE} "
+
+	result = SmokeTest.PASS
+
+	t.id = "0093a"
+	t.name = "paging_default"
+	t.command = cmd_prefix + "-p default.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=default.*", ".*--datapaging=default.*"]
+	t.run("windows")	# Windows-only until we've updated the Linux version of elf2e32.
+	if t.result == "skip":
+		return t
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093b"
+	t.name = "paging_unpaged"
+	t.command = cmd_prefix + "-p unpaged.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=unpaged.*", ".*--datapaging=unpaged.*"]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093c"
+	t.name = "paging_paged"
+	t.command = cmd_prefix + "-p paged.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=paged.*"]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093d"
+	t.name = "paging_unpagedcode_pageddata"
+	t.command = cmd_prefix + "-p unpagedcode_pageddata.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=unpaged.*", ".*--datapaging=paged.*"]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093e"
+	t.name = "paging_pagedcode_unpageddata"
+	t.command = cmd_prefix + "-p pagedcode_unpageddata.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=unpaged.*"]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093f"
+	t.name = "paging_pagedcode_defaultdata"
+	t.command = cmd_prefix + "-p pagedcode_defaultdata.mmp" + cmd_suffix
+	t.mustmatch = [".*--codepaging=paged.*", ".*--datapaging=default.*"]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0093"
+	t.name = "paging"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,56 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "90"
+	t.name = "plugin_armv5_winscw_freeze"
+	t.description = """Builds two PLUGIN components, one with and one without an explicit DEFFILE statement,
+		and confirms the correct FREEZE behaviour in each case.  The correct behaviour for a PLUGIN is indicative
+		of all TARGETTYPEs where the build system defines known exports: FREEZE should do nothing unless an
+		explicit DEFFILE statement is present in the .mmp file."""
+	t.usebash = True
+	
+	t.command = """
+		sbs -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel CLEAN > /dev/null &&
+		sbs -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel > /dev/null &&
+		sbs -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel FREEZE -m ${SBSMAKEFILE} -f ${SBSLOGFILE}"""
+
+	t.targets = [
+		"smoke_suite/test_resources/simple_plugin/bwins/plugin2u.def",
+		"smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def"		
+		]
+	
+	t.antitargets = [
+		"smoke_suite/test_resources/simple_plugin/bwins/pluginu.def",
+		"smoke_suite/test_resources/simple_plugin/eabi/pluginu.def"		
+		]
+	
+	t.mustmatch = [
+		".*EFREEZE: Appending 3 New Export\(s\) to .*/test/smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def.*",
+		".*EFREEZE: Appending 1 New Export\(s\) to .*/test/smoke_suite/test_resources/simple_plugin/bwins/plugin2u.def.*"
+		]
+
+	t.mustnotmatch = [
+		".*EFREEZE: .*/test/smoke_suite/test_resources/simple_plugin/eabi/pluginu.def.*",
+		".*EFREEZE: .*/test/smoke_suite/test_resources/simple_plugin/bwins/pluginu.def.*"
+		]
+	
+	t.warnings = 2	
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/pre_export.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "32"
+	t.name = "pre_export"
+	t.command = "sbs -b smoke_suite/test_resources/pre-export/bld.inf -c " + \
+			"armv5 -k"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/my.mmh",
+		"$(EPOCROOT)/epoc32/include/second.mmh",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/petest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/petest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/petest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/petest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/pre-export/bld.inf', [
+		"petest_/armv5/udeb/test.o",
+		"petest_/armv5/urel/test.o"
+	])
+	# we expect these errors because there are 2 MMP files deliberately missing
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/raptor_crash.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "tests that previous crash conditions now generate tidy errors."
+	
+	# no crash when there are bld.inf lines starting with a slash	
+	t.id = "45a"
+	t.name = "raptor_crash"
+	t.command = "sbs -b smoke_suite/test_resources/simple_crash/bld.inf"
+	t.errors = 2
+	t.returncode = 1
+	t.run()
+	
+	# should get an error code when running inside cmd
+	t.id = "45b"
+	t.name = "error_cmd"
+	t.usebash = True
+	t.command = "cmd /c sbs -s no_such_thing"
+	t.mustmatch = ["System Definition file no_such_thing does not exist"]
+	t.errors = 1
+	t.returncode = 1
+	t.run("windows")
+	
+	# should get an error code when running in bash
+	t.id = "45c"
+	t.name = "error_bash"
+	t.usebash = True
+	t.command = "sbs -s no_such_thing"
+	t.mustmatch = ["System Definition file no_such_thing does not exist"]
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	
+	# print the over all result
+	t.id = "45"
+	t.name = "raptor_crash"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/resource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,73 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "30"
+	t.name =  "resource"
+	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf -b smoke_suite/test_resources/simple_gui/Bld.inf RESOURCE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testresource.rsg",
+		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/localisation/group/testresource.info",
+		"$(EPOCROOT)/epoc32/localisation/testresource/rsc/testresource.rpp",
+		
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/localisation/helloworld_reg/rsc/helloworld_reg.rpp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc"	
+		]
+	
+	t.addbuildtargets('smoke_suite/test_resources/resource/group/bld.inf', [	
+		"testresource_/testresource_resource_testresource2_sc.rpp.d",
+		"testresource_/testresource_resource_testresource3_02.rpp",
+		"testresource_/testresource_resource_testresource3_02.rpp.d",
+		"testresource_/testresource_resource_testresource3_sc.rpp",
+		"testresource_/testresource_resource_testresource3_sc.rpp.d",
+		"testresource_/testresource_resource_testresource_01.rpp",
+		"testresource_/testresource_resource_testresource_01.rpp.d",
+		"testresource_/testresource_resource_testresource_sc.rpp",
+		"testresource_/testresource_resource_testresource_sc.rpp.d"])
+
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d"])
+
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/retry.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "59"
+	t.name = "retry"
+	#
+	# -t 3 means try each recipe up to 3 times, if it fails.
+	#
+	# There are 3 FLM calls: 
+	#    retry_1 fails once then succeeds.
+	#    retry_2 fails twice then succeeds.
+	#    retry_3 fails all 3 times.
+	#
+	# use -k in case the retry_3 case happens to be run first.
+	#
+	t.command = "sbs -b smoke_suite/test_resources/retry/bld.inf -c armv5_urel -t 3 -k"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/retry_1.1",
+		"$(EPOCROOT)/epoc32/build/retry_1.ok",
+		"$(EPOCROOT)/epoc32/build/retry_2.1",
+		"$(EPOCROOT)/epoc32/build/retry_2.2",
+		"$(EPOCROOT)/epoc32/build/retry_2.ok",
+		"$(EPOCROOT)/epoc32/build/retry_3.1",
+		"$(EPOCROOT)/epoc32/build/retry_3.2",
+		"$(EPOCROOT)/epoc32/build/retry_3.3"
+	]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/build/retry_1.2",
+		"$(EPOCROOT)/epoc32/build/retry_1.3",
+		"$(EPOCROOT)/epoc32/build/retry_2.3",
+		"$(EPOCROOT)/epoc32/build/retry_3.ok"
+	]
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/romfile.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.id = "55"
+	t.name = "romfile"
+	t.description = """
+		Tests the creation and content of an .iby romfile for the armv5.test
+		configuration. Also tests for creation of relevant test batch files.
+		"""
+	t.usebash = True
+	t.command = "sbs -b $(EPOCROOT)/src/ongoing/group/romfile/other_name.inf " \
+			+ "-c armv5.test ROMFILE -f - " \
+			+ "&& cat $(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby",
+		"$(EPOCROOT)/epoc32/data/z/test/src/armv5.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/src/armv5.manual.bat"
+		]
+
+	# Check the content of the generated .iby file.
+
+	t.mustmatch = [
+		# Check whatlog output includes batch files and .iby file
+		r".*/epoc32/rom/src/ongoing/group/romfile/armv5test.iby</build>.*",
+		r".*/epoc32/data/z/test/src/armv5.auto.bat</build>.*",
+		r".*/epoc32/data/z/test/src/armv5.manual.bat</build>.*",
+		
+		# The comment that is put at the start of the file.
+		r".*// epoc32/rom/src/ongoing/group/romfile/armv5test\.iby\n.*",
+
+		# The batch files that are added by the build system.
+		r".*\ndata=/epoc32/data/z/test/src/armv5\.auto\.bat test/src\.auto\.bat\n.*",
+		r".*\ndata=/epoc32/data/z/test/src/armv5\.manual\.bat test/src\.manual\.bat\n.*",
+
+		# Some normal files.
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_rand\.exe\s+sys/bin/t_rand\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_swapfsys\.exe\s+sys/bin/t_swapfsys\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_localtime\.exe\s+sys/bin/t_localtime\.exe\n.*",
+
+		# Some files where the MMP file has the PAGED or UNPAGED keywords.
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_pagestress\.exe\s+sys/bin/t_pagestress\.exe paged\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_fsys\.exe\s+sys/bin/t_fsys\.exe unpaged\n.*",
+
+		# Some files where the MMP file has the ROMTARGET or RAMTARGET keywords.
+		r".*\ndata=/epoc32/release/##MAIN##/##BUILD##/t_prel\.dll\s+/sys/bin/t_prel\.dll attrib=r\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+sys/bin/t_sysbin\.exe\n.*",
+		r".*\ndata=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/sys/bin/t_sysbin_ram\.exe attrib=r\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/sys/bin/t_sysbina\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/system/programs/t_sysbinb\.exe\n.*"
+		]
+	t.mustnotmatch = [
+		# Try to detect file paths that contain two or more slashes in a row,
+		# without flagging C++ style comments.
+		r"\w//+\w"
+		]
+
+	t.run("windows")
+
+	if t.result == SmokeTest.SKIP:
+		t.command = "sbs -b $(EPOCROOT)/src/ongoing/group/romfile/other_name.inf" \
+				+ " -c armv5.test ROMFILE -f -" \
+				+ " && cat $(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby"
+
+		# These two warnings are because gnumakefiles are not supported on
+		# Linux:
+		t.warnings = 2
+		t.run("linux")
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sbs_with_nonexisting_bldinf.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "80"
+	t.name = "sbs_with_nonexisting_bldinf"
+	t.description = "Test if sbs generates warning if invoked without bld.inf specified i.e. using default bld.inf which doesn't exist"
+	t.command = "mkdir ${EPOCROOT}/emptydir; rm ${EPOCROOT}/emptydir/*;  cd ${EPOCROOT}/emptydir; sbs -f ${SBSLOGFILE} -m {SBSMAKEFILE}"
+	t.usebash = True
+	t.warnings = 1 
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/smp.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "61"
+	t.name = "smp"
+	#
+	# the command asks for ARMV5 and ARMV5SMP but the component only builds
+	# code for ARMV5SMP according to its bld.inf file. so, check that the
+	# ARMV5SMP binaries exist and the ARMV5 ones do not.
+	#
+	t.command = "sbs -b smoke_suite/test_resources/smp/bld.inf -c armv5 -c " + \
+			"armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/smp/bld.inf', [
+		"test_/armv5smp/udeb/test.o",
+		"test_/armv5smp/urel/test.o"
+	])
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+	]
+	t.addbuildantitargets('smoke_suite/test_resources/smp/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/splitlog_filter.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,122 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import sys
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	# Override logfileoption and makefileoption to stop them adding '-f' and '-m'
+	t.logfileOption = lambda : ""
+	t.makefileOption = lambda : ""
+	t.id = "0083a"
+	t.name = "splitlog_filter"
+	t.description = "Tests scanlog_filter output"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"--filters=FilterSplitlog " + \
+			"-f $(EPOCROOT)/epoc32/build/splitlog.xml " + \
+			"&& cat $(EPOCROOT)/epoc32/build/splitlog.xml"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+		])
+	t.mustmatch = [
+		".*<info.*"		
+		]
+	t.mustnotmatch = [
+		".*<clean.*",
+		".*</clean>.*",
+		".*<whatlog.*",
+		".*</whatlog>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "0083b"
+	t.name = "splitlog_cleancheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.clean.xml"
+	t.targets = []
+	t.mustmatch = [
+		".*<clean.*",
+		".*</clean>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*"
+		".*<whatlog.*",
+		".*</whatlog>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	
+	t.id = "0083c"
+	t.name = "splitlog_whatlogcheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.whatlog.xml"
+	t.mustmatch = [
+		".*<whatlog.*",
+		".*</whatlog>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*",
+		".*<clean.*",
+		".*</clean>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	t.id = "0083d"
+	t.name = "splitlog_recipecheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.recipe.xml"
+	t.mustmatch = [
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*",
+		".*<clean.*",
+		".*</clean>.*",
+		".*<whatlog.*",
+		".*</whatlog>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "83"
+	t.name = "splitlog_filter"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/stringtable_zip_whatlog.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,82 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# The stringtable example doesn't currently build in full, hence it's built for
+# EXPORT in isolation; We also test archives here - although an export, they
+# will be exported in response to the first configuration processed (this
+# example ensures it's armv5_udeb, so we can match against that config).
+from raptor_tests import CheckWhatSmokeTest, ReplaceEnvs
+import re
+import os
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	result = CheckWhatSmokeTest.PASS
+	
+	t = CheckWhatSmokeTest()
+	t.id = "0069a"
+	t.name = "stringtable_zip_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf -b smoke_suite/test_resources/simple_zip_export/bld.inf -f - -m ${SBSMAKEFILE} -c armv5_udeb.whatlog EXPORT"
+	componentpath1 = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_stringtable"))
+	componentpath2 = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_zip_export"))
+	t.regexlinefilter = \
+			re.compile("^<(whatlog|archive|stringtable>|archive|member>|zipmarker>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.cpp",
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.st"
+	])
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath1+"/bld.inf' mmp='"+componentpath1+"/simple_stringtable.mmp' config='armv5_udeb.whatlog'>",
+		"<stringtable>$(EPOCROOT)/epoc32/include/strconsts.h</stringtable>",
+		"<whatlog bldinf='"+componentpath2+"/bld.inf' mmp='' config=''>",
+		"<archive zipfile='"+componentpath2+"/archive.zip'>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt</member>",
+		"<zipmarker>$(EPOCROOT)/epoc32/build/" + markerfile + "</zipmarker>"
+	]
+	t.run()
+	if t.result == CheckWhatSmokeTest.FAIL:
+		result = CheckWhatSmokeTest.FAIL
+	
+	
+	"Tests to check that up-to-date zip exports are reported"
+	t.id = "0069b"
+	t.name = "stringtable_zip_whatlog_rebuild"
+	t.targets = []
+	t.run()
+	if t.result == CheckWhatSmokeTest.FAIL:
+		result = CheckWhatSmokeTest.FAIL
+	
+	
+	t.id = "69"
+	t.name = "stringtable_zip_whatlog"	
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_dud.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "50"
+	t.name = "sysdef_dud"
+	t.description = "Test an invalid system_definition.xml file"
+	t.command = "sbs -s " + \
+			"smoke_suite/test_resources/sysdef/system_definition_dud.xml"
+	t.targets = []
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_exports.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,57 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "47"
+	t.name = "sysdef_exports"
+	t.description = "Test general system_definition.xml processing of exports"
+	t.command = "sbs -a $(SBS_HOME)/test/smoke_suite/test_resources/sysdef -s smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/dependent_on_exports/metadata_export_pre1.mmh",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/dependent_on_exports/metadata_export_pre2.mmh",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe.sym",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependent_on_exports.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf', [
+		"dependent_on_exports_exe/armv5/udeb/dependent_on_exports_udeb_objects.via",
+		"dependent_on_exports_exe/armv5/udeb/test.o",
+		"dependent_on_exports_exe/armv5/udeb/test.o.d",
+		"dependent_on_exports_exe/armv5/urel/dependent_on_exports_urel_objects.via",
+		"dependent_on_exports_exe/armv5/urel/test.o",
+		"dependent_on_exports_exe/armv5/urel/test.o.d",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports.UID.CPP",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports_UID_.dep",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports_UID_.o",
+		"dependent_on_exports_exe/winscw/udeb/test.dep",
+		"dependent_on_exports_exe/winscw/udeb/test.o",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports.UID.CPP",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports_UID_.dep",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports_UID_.o",
+		"dependent_on_exports_exe/winscw/urel/test.dep",
+		"dependent_on_exports_exe/winscw/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_layers.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "48"
+	t.name = "sysdef_layers"
+	t.description = "Test system_definition.xml layer processing"
+	t.command = 'sbs -s ' + \
+			'smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml' + \
+			' -l "Metadata Export" -l "Build Generated Source" -l ' + \
+			'"Component with Layer Dependencies" -o'
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/build_gen_source/exported.inf",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/build_gen_source/exported.mmh",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld.info",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info",
+		"$(EPOCROOT)/epoc32/localisation/helloworld_reg/rsc/helloworld_reg.rpp"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/build_gen_source/bld.inf', [
+		"helloworld_/helloworld__resource_apps_sc.rpp"
+		])
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/dependent/bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/talon_test.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,100 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import ReplaceEnvs
+import os
+import sys
+
+def run():
+	t = SmokeTest()
+	t.description =  """talon_test: two part test
+	1) Test talon's -c option
+	2) Test talon with a script file that has some blank lines and a single non-blank command line
+	"""
+
+	# Don't need these as we are not invoking Raptor
+	t.logfileOption = lambda : ""
+	t.makefileOption = lambda : ""
+
+	# Set up variables for talon
+	bindir = ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin")
+	bash = bindir + "/bash"
+	talon = bindir + "/talon"
+
+	# Adjust if on Windows - three "tries" for Bash on Windows.
+	# 1 Default try
+	if "win" in sys.platform.lower():
+		bash = ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin/bash.exe")
+		talon = ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/talon.exe")
+	
+	# 2 Bash from a Cygwin
+	if os.environ.has_key("SBS_CYGWIN"):
+		bash = ReplaceEnvs("$(SBS_CYGWIN)/bin/bash.exe")
+	
+	# 3 Bash from an env. var.
+	if os.environ.has_key("SBS_SHELL"):
+		bash = os.environ["SBS_SHELL"]
+	
+	# Talon's command line
+	commandline="\"|name=commandlinetest;COMPONENT_META=commandline/group/bld.inf;PROJECT_META=commandline.mmp;|echo Command line invocation output\""
+	
+	# Talon's "shell script"
+	scriptfile=ReplaceEnvs("$(SBS_HOME)/test/smoke_suite/test_resources/talon_test/script")
+	
+	# Environment variables needed by talon - TALON_SHELL must be bash; the other two can be arbitrary.
+	os.environ["TALON_SHELL"]=bash
+	os.environ["TALON_BUILDID"]=str(t.id)
+	os.environ["TALON_RECIPEATTRIBUTES"]="component=talontest"
+
+	# First part of test - command line
+	t.name = "talon_test command line"
+	t.id = "100a"
+	t.command = "%s -c %s" % (talon, commandline)
+	t.targets = []
+	t.mustmatch_multiline = ["<recipe component=talontest>.*<!\[CDATA\[.*\+ echo Command line invocation output" + 
+			".*\]\]><time start='\d+\.\d+' elapsed='\d+\.\d+' />" + 
+			".*<status exit='ok' attempt='1' />.*</recipe>"]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Second part of test - script file
+	t.name = "talon_test script file"
+	t.id = "100b"
+	t.command = "%s %s" % (talon, scriptfile)
+	t.targets = []
+	t.mustmatch_multiline = ["<recipe component=talontest>.*<!\[CDATA\[.*\+ echo Script file output" + 
+			".*\]\]><time start='\d+\.\d+' elapsed='\d+\.\d+' />" + 
+			".*<status exit='ok' attempt='1' />.*</recipe>"]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+
+	# Print final result
+	t.name = "talon_test"
+	t.id = "100"
+	t.print_result()
+
+	# Delete the added environment variables
+	del os.environ["TALON_SHELL"]
+	del os.environ["TALON_BUILDID"]
+	del os.environ["TALON_RECIPEATTRIBUTES"]
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tem_conflicts.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0094"
+	t.name = "tem_conflicts"
+	t.usebash = 1
+	t.command = "sbs -b smoke_suite/test_resources/tem_conflict/bld.inf " + \
+		"-c armv5 -j 2 -f $SBSLOGFILE; cat $SBSLOGFILE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.sh"
+		]
+	t.mustnotmatch = [
+		"cp: cannot open .* for reading: Permission denied",
+		"cp: cannot stat .*: No such file or directory",
+		"rm: cannot remove .*: No such file or directory",
+		"rm: cannot remove .*: Permission denied"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tem_stages.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	result = SmokeTest.PASS
+
+	# export the TEM
+
+	t = SmokeTest()
+	t.id = "73a"
+	t.name = "tem_stages"
+	t.command = "sbs -b smoke_suite/test_resources/tem_stages/bld.inf EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_stages.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_stages.meta"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# run the main test
+
+	t.id = "73b"
+	t.name = "tem_stages"
+	t.command = "sbs -b smoke_suite/test_resources/tem_stages/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/generated/tem_stages_generated.cpp",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated.h",
+
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.final",
+
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.exe",
+
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.exe2",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.exe2",
+
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.exe",
+
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.exe2",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.exe2",
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# return the combined result
+
+	t.id = "73"
+	t.name = "tem_stages"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/temtest.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,135 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, CheckWhatSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	t = SmokeTest()
+	t.id = "0018a"
+	t.name = "temclean"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "0018b"
+	t.name = "temtest"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded"
+		]
+	t.warnings = 2
+	t.missing = 0
+	t.returncode = 1
+	t.mustmatch = [ "repeated call to TEM with same values.* Stop\." ]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018c"
+	t.name = "temclean2"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.mustmatch = []
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018d"
+	t.name = "badtem"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bad_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.warnings = 3
+	t.missing = 0
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018e"
+	t.name = "temclean3"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t = CheckWhatSmokeTest()
+	t.id = "0018f"
+	t.name = "temwhat"
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf --what"
+	t.stdout = [
+		# exports
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta',
+		# release tree built
+		'$(EPOCROOT)/epoc32/release/armv5/udeb/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/winscw/udeb/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/winscw/urel/simple_extension.txt'
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t = SmokeTest()
+	t.id = "0018g"
+	t.name = "badtem2"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bad2_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.warnings = 3
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "18"
+	t.name = "temtest"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+	t.id = "87"
+	t.name = "terminal_filter_tests"
+	t.description = "terminal_filter_tests: Tests the terminal filter against" \
+			+ " log files to ensure it 'does the right thing'"
+	t.command = "$(SBS_HOME)/test/smoke_suite/test_resources/refilter/testfilterterminal"
+	t.countmatch = [
+		# One of each type of error occurs early in the 'sbs' call where there
+		# is a recipe inside another recipe. Then the errors occur in the
+		# opposite order where are 2 closing tags next to each other before 2
+		# opening tags appear next to each other
+			["sbs: error: Opening recipe tag found before closing recipe tag for previous recipe:", 2],
+			["Discarding previous recipe \(Possible logfile corruption\)", 2],
+			["sbs: error: Closing recipe tag found before opening recipe tag:", 2],
+			["Unable to print recipe data \(Possible logfile corruption\)", 2]
+	]
+	t.errors = 4
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/asmtest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			asmtest
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE		/epoc32/include
+SOURCE			testasm.s testcia.cia testassembler.cpp
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_MMPFILES
+asmtest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testasm.s	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,45 @@
+; test arm assembler
+;
+; (C) Copyright Symbian Software Limited 2008. All rights reserved.
+;
+        AREA |.text|, CODE, READONLY, ALIGN=6
+
+        CODE32
+
+        ; UPT
+
+;
+;
+
+
+
+;EXPORT fake_assembler_function1
+        EXPORT  _Z24fake_assembler_function1v
+
+;fake_assembler_function1
+_Z24fake_assembler_function1v
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        bx lr
+
+        END
+
+; End of file - testasm.s
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testassembler.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Assembler test";
+
+void fake_assembler_function1(void);
+void fake_assembler_function2(void);
+
+TInt E32Main()
+{
+	fake_assembler_function1();
+	fake_assembler_function2();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testcia.cia	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32cia.h>
+// #include <arm.h>
+// #include <cache.h>
+
+// #include <nk_priv.h>
+
+#ifndef __CIA__
+#error __CIA__ must be defined for .cia files
+#endif
+
+__NAKED__ void fake_assembler_function2(void)
+    {
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+
+    asm("bx lr");
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/CommonFramework.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/DISTRIBUTION.POLICY	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/Bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
+
+PRJ_EXPORTS
+result_creation.flm /epoc32/tools/makefile_templates/tools/result_creation.flm
+result_creation.xml /epoc32/tools/makefile_templates/tools/result_creation.xml
+
+PRJ_EXTENSIONS
+START EXTENSION helloworld.extensiontest run_this
+	OPTION TEST_RESULT "success"
+END
+
+START EXTENSION helloworld.extensiontest skip_this
+	OPTION TEST_RESULT "failure"
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/DISTRIBUTION.POLICY	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "CommonFramework.h"
+
+// do the example
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        HelloWorld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# # Will output whether the test has passed or failed
+# 
+#
+
+## Parameters that are expected:
+# TEST_RESULT
+# EPOCROOT
+
+ALL::
+	echo $(TEST_RESULT) > $(EPOCROOT)/epoc32/$(TEST_RESULT).txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- Extension interfaces : replacements for Template Extension Makefiles -->
+
+	<interface name="helloworld.extensiontest" flm="result_creation.flm">
+		<param name="TEST_RESULT" />
+		<param name="EPOCROOT" />
+	</interface>
+
+</build>
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+mifconv.xml /epoc32/tools/makefile_templates/test/mifconv.xml
+mifconv.flm /epoc32/tools/makefile_templates/test/mifconv.flm
+
+PRJ_MMPFILES
+bmt.mmp
+
+PRJ_EXTENSIONS
+START EXTENSION test.mifconv
+  OPTION MIFCONV_TEST 1
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bmt.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target			testbitmap.dll
+targettype      DLL
+source			fake.cpp
+
+START BITMAP	testbitmap.mBm
+HEADER
+
+// Test backslash conversion to / here:
+TARGETPATH		\resource\apps
+SOURCEPATH		aifsrccl
+SOURCE			c8,1 DEF24.BMP DEF2M.BMP DEF32.BMP DEF3M.BMP DEF48.BMP DEF4M.BMP
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2 @@
+# SBSv2 test flm
+# This helps test mifconv for s60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <interface name="test.mifconv" extends="Symbian.UserFLM" flm="mifconv.flm">
+  <param name="MIFCONV_TEST" /> 
+ </interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLARM.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLWINS.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+variant1/CreateStaticDLL_variant1.mmp
+invariant/CreateStaticDLL_invariant.mmp
+variant2/CreateStaticDLL_variant2.mmp
+variant3/CreateEXE_variant3.mmp
+invariant/CreateStaticLib.mmp
+
+PRJ_EXTENSIONS
+
+START EXTENSION utility.prebuilt
+OPTION PRE_PLATFORM armv5
+OPTION PRE_TYPE urel
+OPTION BINARIES release/dummy.lib release/fake.lib->relfake.lib
+END
+
+START EXTENSION utility.prebuilt
+OPTION PRE_PLATFORM armv5
+OPTION PRE_TYPE udeb
+OPTION BINARIES debug/dummy.lib debug/fake.lib->debfake.lib
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/bv_test.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+	<build xmlns="http://symbian.com/xml/build"
+			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+			xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+		<!-- test feature variants -->
+		<var name="test_bv_1">
+			<set name='FEATUREVARIANTNAME' value='.one' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var1.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var1
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />   
+  		</var>
+		<var name="test_bv_2">
+			<set name='FEATUREVARIANTNAME' value='.two' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var2.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var2
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+		<var name="test_bv_3">
+			<set name='FEATUREVARIANTNAME' value='.three' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var3.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var3
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+	</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/dummy.lib	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/fake.lib	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/bv_hrh_relative/relative.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// relative.h
+
+#define RELATIVE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var1.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var1 defines A_3 and B_100 used in source
+#include <var1.h>
+
+// extra defines that are never used
+#define V_ONE_ABC
+#define V_TWO_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var2.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var2 defines A_3 used in source
+#include <var2.h>
+
+// extra defines that are never used
+#define V_TWO_ABC
+#define V_ONE_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var3.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var3 defines A_3 used in source
+#include <var3.h>
+
+// extra defines that are never used
+#define V_TWO_ABC
+#define V_ONE_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_invariant.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_invariant.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_invariant.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_inv.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticLib.cpp
+*
+*/
+
+
+void bv_static_lib_function(void)
+{
+	int x = 1;
+	int y = 8;
+	int z = 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticLib.mmp
+*
+*/
+
+
+TARGET        bv_static_lib.lib
+TARGETTYPE    lib
+
+SOURCEPATH    .
+SOURCE        CreateStaticLib.cpp
+SYSTEMINCLUDE /epoc32/include
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/dummy.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/listA.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+A_1
+A_2
+A_3
+_A_1_
+_A_2_
+_A_3_
+A_LONGER_NAME_THAN_YOU_MIGHT_EXPECT_HERE_MAYBE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/listB.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+B
+B_1
+B_10
+B_100
+B_1000
+B_10000
+B_100000
+B_1000000
+B_10000000
+B_100000000
+B_1000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/release/dummy.lib	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/release/fake.lib	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var1/var1.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var1.hrh defines A_3 and B_100 used in source
+
+#define A_1
+#define A_3
+#define A_5
+#define B_1
+#define B_100
+#define B_10000
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var2/var2.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var2.hrh defines A_3 used in source
+
+#define A_1
+#define A_2
+#define A_3
+#define A_4
+#define A_5
+#define A_once
+#define A_i
+#define A_caught
+#define A_a
+#define A_fish
+#define A_alive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var3/var3.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var3.hrh defines A_3 used in source
+
+#define A_1
+#define A_2
+#define A_3
+#define A_4
+#define A_5
+#define A_once
+#define A_i
+#define A_caught
+#define A_a
+#define A_fish
+#define A_alive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_variant1.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef A_3
+// use a builtin macro to test a cpp defect
+#ifdef __FILE__
+	_LIT(KFormat1,"A_3 %S\n");
+#endif
+#else
+// use a builtin macro to test a cpp defect
+#ifdef __LINE__
+	_LIT(KFormat1,"not A_3 %S\n");
+#endif
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_variant1.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_variant1.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+// static libs are always feature invariant
+STATICLIBRARY bv_static_lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var1.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/dummy.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_variant2.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef B_100
+	_LIT(KFormat1,"B_100 %S\n");
+#else
+	_LIT(KFormat1,"%S\n");
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_variant2.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_variant2.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var2.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/dummy.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates an exe.
+*
+*/
+
+
+#include "CreateEXE_variant3.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+TInt E32Main()
+{
+	return 0;
+}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef B_100
+	_LIT(KFormat1,"B_100 %S\n");
+#else
+	_LIT(KFormat1,"%S\n");
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this EXE, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        createexe_variant3.exe
+TARGETTYPE    exe
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateEXE_variant3.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var3.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/dummy.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/with_errors.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file has cpp errors
+//
+#error this code is broken
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/with_macros.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file uses feature variant macros
+//
+#ifdef A_1
+#ifdef B_1000
+int x = 1;
+#endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/without_macros.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file uses no feature variant macros
+//
+int y = 1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/commonframework/CommonFramework.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32Base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/Bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
+HelloWorld2.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    ..\Source
+SOURCE        helloWorld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LINKEROPTION CW --verbose
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld2.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    ..\source
+SOURCE        Helloworld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/source/HelloWorld.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "CommonFramework.H"
+
+// do the example
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/home/.sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <!-- defaults for Raptor -->
+
+  <var name="defaults.init">
+	<env name='EPOCROOT' default='' type='path'/>
+
+	<set name="systemConfig" value="lib/config;$(EPOCROOT)/epoc32/sbs_config" host="win.*"/>
+	<set name="systemConfig" value="lib/config:$(EPOCROOT)/epoc32/sbs_config" host="lin.*" />
+  </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v2/variant2.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant is used for testing purposes -->
+  <var name="configpathtest2">
+	<set name='D' value='1'/>
+  </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v3/variant3.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+       
+  <!-- This variant is used for testing purposes -->
+  <var name="configpathtest3">
+	<set name='S' value='3'/>
+	<append name="CDEFS" value="TESTPASSED" />
+  </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/eabi/deftestu.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_MMPFILES
+deftest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/deftest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target		deftest
+targettype		dll
+
+source	test.cpp 
+unpaged
+macro __TESTNAME__="deftest"
+
+deffile  deftest.def
+uid 0x1000008d 0x100039e5
+VENDORID 0x70000001
+capability		all
+unpaged
+epocallowdlldata
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/e32def.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2870 @@
+/*
+* Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\e32def.h
+* NOTE: THIS FILE SHOULD BE ACCEPTABLE TO A C COMPILER
+*
+*/
+
+
+
+
+#ifndef __E32DEF_H__
+#define __E32DEF_H__
+
+/*
+ * __LEAVE_EQUALS_THROW__ requires the compiler to support C++ exceptions
+ */
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#undef __LEAVE_EQUALS_THROW__
+#endif
+
+
+
+
+
+#ifdef __PROFILING__
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_START(aBin) RDebug::ProfileStart(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_END(aBin)   RDebug::ProfileEnd(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_RESET(aNumberOfBins) RDebug::ProfileReset(0,aNumberOfBins)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_DISPLAY(aNumberOfBins) \
+			{	TFixedArray<TProfile, aNumberOfBins> result; \
+				RDebug::ProfileResult(result.Begin(), 0, aNumberOfBins); \
+				for (TInt i=0; i<aNumberOfBins; i++)   \
+				RDebug::Print(_L("Profile bin %d:  Calls: %d, Clock ticks: %d\n" ),i,res[i].iCount,result[i].iTime);  \
+			}
+#else /* __PROFILING__ */
+#define __PROFILE_START(aBin) 
+#define __PROFILE_END(aBin)   
+#define __PROFILE_RESET(aNumberOfBins) 
+#define __PROFILE_DISPLAY(aNumberOfBins)
+#endif
+
+
+
+#if defined(__VC32__)
+/**
+@publishedAll
+@released
+*/
+#define __NO_CLASS_CONSTS__
+#if (_MSC_VER >= 1200)
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN__ __declspec(noreturn)
+#else
+#define __NORETURN__
+#endif
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN_TERMINATOR()
+/**
+@publishedAll
+@released
+*/
+#define IMPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define EXPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_CLASS(x) class x
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_STRUCT(x) struct x
+/**
+@publishedAll
+@released
+*/
+#define __NO_THROW throw()
+/**
+@publishedAll
+@released
+*/
+#define __THROW(t) throw(t)
+#pragma warning( disable : 4355 )	/* 'this' used in base member initializer list */
+#pragma warning( disable : 4511 )	/* copy constructor could not be generated */
+#pragma warning( disable : 4512 )	/* assignment operator could not be generated */
+#pragma warning( disable : 4514 )	/* unreferenced inline function has been removed */
+#pragma warning( disable : 4699 )	/* Note: Using precompiled header %s */
+#pragma warning( disable : 4710 )	/* function not inlined */
+#pragma warning( disable : 4121 )	/* alignment sensitive to packing */
+#pragma warning( disable : 4273 )
+#pragma warning( disable : 4097 )	/* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
+#pragma warning( disable : 4291 )	/* 'TAny *CBase::operator new(TUint,TLeave)' : no matching operator delete found; memory will not be freed if initialization throws an exception */
+
+#if _MSC_VER  >= 1100
+/**
+@publishedAll
+@released
+*/
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#if defined(__CW32__)
+#undef __embedded_cplusplus
+/** @internalTechnology */
+#define __embedded_cplusplus	1
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__
+#define __NORETURN_TERMINATOR()
+#define IMPORT_C __declspec(dllexport)
+#define EXPORT_C __declspec(dllexport)
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW throw()
+#define __THROW(t) throw(t)
+
+#define TEMPLATE_SPECIALIZATION template<>
+/**
+@publishedAll
+@released
+*/
+#define _asm	asm
+#ifndef __int64
+#pragma longlong on
+/** @internalTechnology */
+#define __int64  long long
+#endif
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#pragma exceptions off    /* no support for C++ exception handling */
+#pragma RTTI off          /* no support for C++ runtime type information */
+#endif
+#if __MWERKS__ >= 0x3200
+#pragma warning off (10480)	/* deleteing void pointer is undefined */
+#pragma warning off (10350) /* N pad byte(s) inserted after data member */
+#endif
+#endif
+
+
+
+#if defined(__GCC32__)
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__  __attribute__ ((noreturn))
+#ifdef __GCCV3__
+#define __NORETURN_TERMINATOR()
+#else
+#define __NORETURN_TERMINATOR()		abort()
+#endif
+#define IMPORT_C
+#if !defined __WINS__ && defined _WIN32 /* VC++ Browser Hack */
+#define EXPORT_C
+/** @internalTechnology */
+#define asm(x)
+#else
+#define EXPORT_C __declspec(dllexport)
+#endif
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW
+#define __THROW(t)
+#ifdef __EABI__
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#ifdef __GCC32__
+/**
+@publishedAll
+@released
+*/
+#define __DOUBLE_WORDS_SWAPPED__
+#endif
+
+
+
+/** @internalTechnology */
+#define __NO_MUTABLE_KEYWORD
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define __MUTABLE
+#else
+#define __MUTABLE mutable
+#endif
+
+
+
+/**
+@publishedAll
+@deprecated
+*/
+#define CONST_CAST(type,exp) (const_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define STATIC_CAST(type,exp) (static_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define MUTABLE_CAST(type,exp) (const_cast<type>(exp))
+#else
+#define MUTABLE_CAST(type,exp) (exp)
+#endif
+
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_D extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_D
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_D static
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_C extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_C
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_C static
+/**
+@publishedAll
+@deprecated
+*/
+#define FOREVER for(;;)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a true value.
+*/
+#define TRUE 1
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a false value.
+*/
+#define FALSE 0
+#ifndef NULL
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a NULL value.
+*/
+#define NULL 0
+#endif
+
+
+
+
+#ifndef VA_START
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to point to the first of the variable arguments.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   // other code
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer points to the first argument in
+            the variable argument list.
+            This symbol is usually declared as a VA_LIST type. 
+
+@param pn   The argument that immediately precedes the variable argument list.
+
+@see VA_LIST
+@see VA_ARG
+*/
+#define VA_START(ap,pn) ((ap)[0]=(TInt8 *)&pn+((sizeof(pn)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(void)0)
+#endif
+
+
+
+
+#ifndef VA_ARG
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Increments a pointer to a variable argument list to point to the next argument
+in the list. The current argument is assumed to be of a type defined by
+the second parameter to this macro.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   ...
+   TInt x = VA_ARG(list,TInt);
+   ...
+   const TDesC *pS=VA_ARG(aList,const TDesC*);
+   ... 
+   etc
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. It is assumed to point to the current
+            argument in the variable argument list. After execution of the code
+            generated by this macro, the pointer points to the next argument in
+            the list. This symbol is usually declared as a VA_LIST type. 
+
+@param type The type of the current argument.
+            This can be any valid type, for example, TInt, const TDesC*, etc.
+            
+@see VA_LIST
+@see VA_START            
+*/
+#define VA_ARG(ap,type) ((ap)[0]+=((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(*(type *)((ap)[0]-((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)))))
+#endif
+
+
+
+
+#ifndef VA_END
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to zero.
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer is reset to 0.
+            This symbol is usually declared as a VA_LIST type. 
+            
+@see VA_LIST
+@see VA_START
+@see VA_ARG            
+*/
+#define VA_END(ap) ((ap)[0]=0,(void)0)
+#endif
+	
+
+
+/**
+@publishedAll
+@released
+
+Calculates the offset of member f within class c.
+
+This is used in the TSglQue and TDblQue constructors to set the offset of
+the link object from the start of a list element.
+
+@param c The name of the class.
+@param f The name of the member within the specified class.
+
+@see TSglQue
+@see TDblQue
+*/
+#ifndef _FOFF
+#define _FOFF(c,f)			(((TInt)&(((c *)0x1000)->f))-0x1000)
+#endif
+
+
+
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_DOWN(x,a)	((x)&~((a)-1))
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_UP(x,a)		_ALIGN_DOWN((x)+(a)-1, a)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Pointer to any type.
+
+TAny* is equivalent to void* in standard C or C++. TAny* is used in preference 
+to void* because it is more suggestive of the actual meaning,
+e.g. TAny* foo();.
+
+TAny is not used where it really means "nothing", as in the declaration of 
+functions which do not return a value; void is used instead, e.g. void Foo();.
+*/
+typedef void TAny;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit signed integer type, used in Symbian OS to mean an 8-bit
+signed integer, independent of the implementation.
+*/
+typedef signed char TInt8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned integer type; used in Symbian OS to mean an 8-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned char TUint8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit signed integer type, used in Symbian OS to mean a 16-bit
+signed integer, independent of the implementation.
+*/
+typedef short int TInt16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned integer type. used in Symbian OS to mean a 16-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned short int TUint16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit signed integer type, used in Symbian OS to mean a 32-bit
+signed integer, independent of the implementation.
+*/
+typedef long int TInt32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit unsigned integer type; used in Symbian OS to mean a 32-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned long int TUint32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Signed integer type of the natural machine word length.
+
+This is as defined by the C++ implementation's int type. In all
+implementations, this is guaranteed to be at least 32 bits.
+
+A TInt should be used in preference to a sized integer (TInt32, TInt16) for 
+all general use. Sized integers should only be used when packing is essential. 
+C++'s type conversion rules imply that all sized integers smaller than the 
+natural machine word are in any case broadened to the natural machine word 
+size when passed as function parameters.
+
+A TInt should be used in preference to an unsigned integer (TUint) for all 
+general use. Unsigned integers should only be used for flags (which use Boolean 
+operations but not arithmetic) and, in very rare cases, for numbers whose 
+range exceeds that available from signed integers. Although it is natural 
+to attempt to use unsigned integers for quantities which cannot by nature 
+be negative, the C++ language does not provide the support necessary to enforce 
+the "expected" behaviour in these circumstances, and experience has shown 
+that it is better to use signed integers unless there is good reason not to.
+
+@see TUint
+@see TInt32
+@see TInt16
+*/
+typedef signed int TInt;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Unsigned integer type of the natural machine word length. 
+
+This is guaranteed to be at least 32 bits in all implementations.
+
+In almost all circumstances, a TInt should be used in preference to a TUint. 
+The main exception is in flags bytes.
+
+@see TInt
+*/
+typedef unsigned int TUint;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit floating point number, providing IEEE754 single precision on all Symbian 
+OS implementations.
+
+TReal should normally be used in preference to TReal32.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+*/
+typedef float TReal32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number, providing IEEE754 double precision on all Symbian 
+OS implementations.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+This type is identical to TReal.
+
+@see TReal
+*/
+typedef double TReal64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number; identical to TReal64.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+Most serious floating-point calculations require double-precision. All standard 
+math functions (see Math class) take double-precision arguments. Single-precision 
+should only be used where space and performance are at a premium, and when 
+their limited precision is acceptable.
+
+@see TReal64
+@see Math
+*/
+typedef double TReal;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned character.
+
+Use instead of C++ built-in char type because it is guaranteed to be unsigned. 
+Use instead of TInt8 where the application is really for text rather than 
+8-bit arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText8. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText8 only when you are dealing explicitly with 
+8-bit text, regardless of build.
+
+@see TText */
+typedef unsigned char TText8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned character.
+
+Use instead of C++ wchar_t type because it is guaranteed to be unsigned. Use 
+instead of TInt16 where the application is really for text rather than 8-bit 
+arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText16. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText16 only when you are dealing explicitly with 
+16-bit text, regardless of build.
+
+@see TText
+*/
+typedef unsigned short int TText16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Boolean type which takes the value either ETrue or EFalse.
+
+Although only a single bit would theoretically be necessary to represent a 
+Boolean, a machine word is used instead, so that these quantities can be easily 
+passed. Also, TBool must map onto int because of C++'s interpretation of 
+operands in conditional expressions.
+
+On implementations of Symbian OS in which the compiler supports the ANSI-recommended 
+bool type, TBool will be typedef'ed to bool instead of int.
+*/
+typedef int TBool;
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Defines a linear (virtual) address type.
+*/
+typedef TUint32 TLinAddr;
+
+/**
+@internalTechnology
+
+A sorted list of all the code segments in ROM that contain an Exception Descriptor.
+
+*/
+typedef struct TRomExceptionSearchTable
+	{
+	/**
+	The number of entries in the following table.
+	*/
+	TInt32 iNumEntries;
+	
+	/**
+	Address of the code segment of each TRomImageHeader that has an Exception Descriptor.
+	*/
+	TLinAddr iEntries[1];
+	} TRomExceptionSearchTable;
+
+/**
+@internalComponent
+*/
+typedef struct TExceptionDescriptor 
+	{
+	TLinAddr iExIdxBase;
+	TLinAddr iExIdxLimit;
+	TLinAddr iROSegmentBase;
+	TLinAddr iROSegmentLimit;
+	} TExceptionDescriptor;
+
+
+#if defined(__GCC32__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+*/
+typedef long long Int64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit unsigned integer type.
+*/
+typedef unsigned long long Uint64;
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define	I64LIT(x)	x##LL
+/**
+@publishedAll
+@released
+*/
+#define	UI64LIT(x)	x##ULL
+
+#elif defined(__VC32__)
+typedef __int64 Int64;
+typedef unsigned __int64 Uint64;
+#define	I64LIT(x)	(__int64)##x
+#define	UI64LIT(x)	(unsigned __int64)##x
+
+#elif defined(__CW32__)
+#pragma longlong on
+typedef long long Int64;
+typedef unsigned long long Uint64;
+#define	I64LIT(x)	x##LL
+#define	UI64LIT(x)	x##ULL
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+
+NOTE: For those migrating from versions of Symbian OS before 8.1b (i.e. 8.1a, 7.0s etc)
+TInt64 is now defined as a built-in type instead of as a class type. This means
+that the member functions of the old TInt64 class are no longer exported
+from EUSER.LIB, and represents a compatibility break.
+
+To ease migration of source code, a number of macros are provided. Similar
+macros have also been defined in Symbian OS versions 7.0s and 8.1a, but
+implemented in terms of the old TInt64 class. This is important for code that
+is common to : one or both of these Symbian OS versions, and to 8.1b and
+subsequent versions.
+
+The following list shows the new macros and the functions that they replace.
+It also shows some alternative techniques.
+In this list: x, v and r are declared as TInt64, c is declared as TInt, High
+and Low are declared as TUint.
+
+@code
+OLD USAGE						REPLACEMENT
+
+TInt64(High,Low);				MAKE_TINT64(High,Low);
+x.Set(High,Low);				MAKE_TINT64(High,Low);
+x.Low();						I64LOW(x);
+x.High();						I64HIGH(x); 
+x.GetTInt();					I64INT(x); 
+x.GetTReal();					I64REAL(x); 
+x.Lsr(c);						I64LSR(x,c); 
+x.Mul10();						x*=10; 
+x.MulTop(a);					I64MULTOP(x,a); 
+x.DivMod(v,r);					r=x%v; x/=v;
+@endcode 
+*/
+typedef	Int64	TInt64;
+
+
+
+
+/**
+@publishedAll
+@released
+ 
+Defines a 64-bit unsigned integer type.
+*/
+typedef	Uint64	TUint64;
+
+
+
+
+/** @internalComponent */
+#define _MAKE_TINT64_ZX(x)	((TInt64)((TUint32)(x)))
+
+/** @internalComponent */
+#define _MAKE_TUINT64_ZX(x)	((TUint64)((TUint32)(x)))
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TINT64(h,l)	( (_MAKE_TINT64_ZX(h)<<32) | _MAKE_TINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TUINT64(h,l)	( (_MAKE_TUINT64_ZX(h)<<32) | _MAKE_TUINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the high order 32 bits of a 64 bit number.
+*/
+#define	I64HIGH(x)			( (TUint32)((x)>>32) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the low order 32 bits of a 64 bit number.
+*/
+#define	I64LOW(x)			( (TUint32)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as an signed integer.
+*/
+#define	I64INT(x)			( (TInt)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as a TReal type.
+*/
+#define	I64REAL(x)			( (TReal)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to logically shift a 64 bit integer right.
+*/
+#define	I64LSR(x, shift)	( *reinterpret_cast<TUint64*>(&(x)) >>= (shift) )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to multiply a 64 bit integer by 10.
+*/
+#define	I64MUL10(x)			( (x) *= 10 )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to divide a 64 bit integer by another and find the remainder.
+*/
+#define	I64DIVMOD(x, divisor, remainder)	( ((remainder) = (x) % (divisor), (x) /= (divisor)) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a double to a 64 bit integer.
+*/
+#define	I64DOUBLECAST(x)	( static_cast<TInt64>(x) )
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT8 instead.
+
+8-bit literal.
+
+The macro defines an explicit 8-bit constant literal which is suitable
+for non-Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT8
+@see _LIT
+*/
+#define _L8(a) (TPtrC8((const TText8 *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 8-bit string which is suitable when non-Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L8.
+*/
+#define _S8(a) ((const TText8 *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC8<TInt> with
+the specified name and text.
+
+The 8-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT8(name,s) const static TLitC8<sizeof(s)> name={sizeof(s)-1,s}
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT16 instead.
+
+16-bit literal.
+
+The macro defines an explicit 16-bit constant literal which is suitable
+for Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT16
+@see _LIT
+*/
+#define _L16(a) (TPtrC16((const TText16 *)L ## a))
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 16-bit string which is suitable when Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L16.
+*/
+#define _S16(a) ((const TText16 *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC16<TInt> with
+the specified name and text.
+
+The 16-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT16(name,s) const static TLitC16<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText16 TText;
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)L ## a))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#else
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText8 TText;
+
+
+
+/**
+@publishedAll
+@released
+
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(s)> name={sizeof(s)-1,s}
+#endif
+
+
+
+
+#ifndef __VA_LIST_defined
+/** 
+@publishedAll
+@released
+
+Defines a 'C' style array of pointers to TInt8 types.
+
+The type is most commonly used by code that needs to deal with a variable
+number of arguments passed to a function.
+
+@see TInt8
+*/
+typedef TInt8 *VA_LIST[1];
+#endif
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for all builds.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. Unlike __ASSERT_DEBUG
+it is defined in both release and debug builds.
+
+The most common use for this macro is to check that the external environment of
+a function or class is behaving as expected; for example, that parameters
+passed to a function are credible, or that called functions are behaving as
+expected; the macro is commonly placed at the beginning of a function.
+
+The effect of the macro is to generate code which tests
+the conditional expression c; if the expression is false, then
+function p is called. In the majority of cases, the function p is one that
+raises a panic.
+
+Note that the macro definition is, in effect, equivalent to: 
+
+@code
+if !(c)p;
+@endcode
+
+@param c a conditional expression which results in true or false.
+@param p a function which is called if the conditional expression c is false.
+
+@see __ASSERT_DEBUG
+*/
+#define __ASSERT_ALWAYS(c,p) (void)((c)||(p,0))
+
+
+
+#ifdef __WINS__
+#ifdef __CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { byte 0xcc };		\
+	}
+#else // !__CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { int 3 };			\
+	}
+#endif //__CW32__
+#else
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()
+#endif
+
+#if defined(_DEBUG)
+
+/** 
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_DEBUG_MB(aCond,aPanicNo) (void)((aCond)||(PanicMB(aPanicNo,_L(#aPanicNo),_L(#aCond)),0))
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for debug builds only.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. It is used in
+the same way as __ASSERT_ALWAYS, except that it is only defined for debug builds.
+
+The macro may be used to insert extra checks at various points in source code
+as desired; the code will only be generated in debug builds and not in release
+builds.
+
+@param c A conditional expression which results in true or false.
+@param p A function which is called if the conditional expression c is false.
+
+@see __ASSERT_ALWAYS
+*/
+#define __ASSERT_DEBUG(c,p) (void)((c)||(p,0))
+
+
+
+/** 
+@internalAll
+@removed
+*/
+#define __DECLARE_NAME(t)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Calls the function for testing object invariance.
+
+Classes can define a standard member function __DbgTestInvariant(),
+which checks that the object is in a valid state, and panics if it is not.
+In debug builds, this macro simply expands to call that function. For details on how
+to define __DbgTestInvariant(), and an example of its use, see __DECLARE_TEST.
+
+The macro is typically invoked at the beginning of all the member functions of
+the class. For non-const functions (those which can change the object’s state),
+you can ensure that the object has been left in a stable state by invoking
+the macro at the end of the function.
+
+In release builds, no code is generated for the macro. 
+*/
+#define __TEST_INVARIANT __DbgTestInvariant()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK User::__DbgMarkStart(FALSE)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount) User::__DbgMarkCheck(FALSE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount) User::__DbgMarkCheck(FALSE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND User::__DbgMarkEnd(FALSE,0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount) User::__DbgMarkEnd(FALSE,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(FALSE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(FALSE,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET User::__DbgSetAllocFail(FALSE,RAllocator::ENone,1)
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET User::__DbgSetAllocFail(FALSE,RAllocator::EReset,1)
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK User::__DbgMarkStart(TRUE)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount) User::__DbgMarkCheck(TRUE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount) User::__DbgMarkCheck(TRUE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND User::__DbgMarkEnd(TRUE,0)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount) User::__DbgMarkEnd(TRUE,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(TRUE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(TRUE,aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET User::__DbgSetAllocFail(TRUE,RAllocator::ENone,1)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET User::__DbgSetAllocFail(TRUE,RAllocator::EReset,1)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap) (aHeap)->__DbgMarkStart()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount) (aHeap)->__DbgMarkCheck(FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount) (aHeap)->__DbgMarkCheck(TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap) (aHeap)->__DbgMarkEnd(0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount) (aHeap)->__DbgMarkEnd(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount) (aHeap)->__DbgSetAllocFail(RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue) (aHeap)->__DbgSetAllocFail(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::ENone,1)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::EReset,1)
+
+
+
+
+#if defined (__WINS__) 
+
+/**
+@publishedAll
+@released
+*/
+#define __DEBUGGER() {if (User::JustInTime()) __BREAKPOINT()}
+
+#else
+#define __DEBUGGER()
+#endif
+
+
+#if defined(__DLL__)
+/**
+@publishedAll
+@released
+
+Declares a function for testing object invariance.
+
+For complex classes, it is often useful to provide a function that can
+be called to check that the object is in a valid state.
+The __DECLARE_TEST macro supplies a standard prototype for such a function
+named __DbgTestInvariant(). A companion macro __TEST_INVARIANT is provided
+to call the function.
+
+For DLLs, as opposed to EXEs, __DbgTestInvariant() is exported,
+i.e. the macro expands to:
+
+@code
+public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+@endcode
+
+This macro should placed as the last item in a class declaration (as it 
+switches back to public access). Note that a terminating semi-colon must be used.
+
+You should define the __DbgTestInvariant() function to check that the object
+is in a healthy state. If it finds an error, it should call User::Invariant(),
+which will cause a panic. 
+
+If a class is derived from a base class, then the base class __DbgTestInvariant()
+should be called first, and then any further checking done. 
+
+The second function declared, __DbgTest(), is intended to allow test code a way
+of directly accessing non-public members of a class. The function is
+implemented by any test code that requires it, rather than in the class’s own
+source code. The function is therefore not exported.
+
+__DECLARE_TEST is defined for both debug and release builds. This point is
+particularly important for DLLs, as otherwise the exported interfaces would
+differ between the build versions, giving potential binary compatibility
+problems. To avoid using memory unnecessarily in release builds, you can,
+however, use preprocessor directives to define the code within
+__DbgTestInvariant() only for debug builds. __DbgTestInvariant() is never
+called in release builds.
+
+@see __TEST_INVARIANT
+*/
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+#else
+#define __ASSERT_DEBUG(c,p)
+#define __DECLARE_NAME(t)
+#define __TEST_INVARIANT
+#if defined(__DLL__)
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap)
+
+
+
+#define __DEBUGGER()
+#endif
+
+#if defined (__WINS__)
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVid,aVer,aFlags)	TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aSid,aVid,{aCap0,aCap1}},0,0,aVer,aFlags};
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)					TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aUid2,0,{aCap,0}},0,0,0x00010000u,aFlags};
+#else
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVer,aFlags)
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)
+#endif
+
+#if defined(__OPT__)
+/**
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_OPT(c,p) (void)((c)||(p,0))
+#else
+#define __ASSERT_OPT(c,p)
+#endif
+
+#if defined(_UNICODE)
+#if !defined(UNICODE)
+/**
+@publishedAll
+@deprecated
+*/
+#define UNICODE
+#endif
+#endif
+
+#if defined(_DEBUG)
+/**
+@internalComponent
+@deprecated
+*/
+#define __DECLARE_TEST_DEBUG __DECLARE_TEST
+#else
+#define __DECLARE_TEST_DEBUG
+#endif
+
+
+
+
+#if !defined(ASSERT)
+/**
+@publishedAll
+@released
+
+Generates _ASSERT_DEBUG code that calls User::Invariant() if the specified
+condition is not true.
+
+@param x A conditional expression which results in true or false.
+*/
+#define ASSERT(x) __ASSERT_DEBUG(x,User::Invariant())
+#endif
+
+
+
+
+#ifndef __VALUE_IN_REGS__ 
+/**
+@publishedPartner
+@released
+*/
+#define __VALUE_IN_REGS__ 
+#endif
+
+
+
+
+#if defined(_DEBUG)
+/**
+@publishedAll
+@released
+*/
+#define __DEBUG_ONLY(x) x
+#else
+#define __DEBUG_ONLY(x)
+#endif
+
+
+
+
+#ifdef __KERNEL_MODE__
+
+/** @internalComponent */
+#define	KIMPORT_C	IMPORT_C
+
+/** @internalComponent */
+#define	KEXPORT_C	EXPORT_C
+
+/** @internalComponent */
+#define	UIMPORT_C
+
+/** @internalComponent */
+#define	UEXPORT_C
+#else
+#define	KIMPORT_C
+#define	KEXPORT_C
+#define	UIMPORT_C	IMPORT_C
+#define	UEXPORT_C	EXPORT_C
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Asserts that a condition is true at compilation time.
+
+@param x Condition to assert
+*/
+#define __ASSERT_COMPILE(x)		void __compile_time_assert(int __check[(x)?1:-1])
+
+#ifdef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@publishedPartner
+@released
+*/
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#define __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#endif /*__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__*/
+#endif /*__REMOVE_PLATSEC_DIAGNOSTICS__*/
+
+/**
+@internalComponent
+*/
+static const char* const KSuppressPlatSecDiagnosticMagicValue = (const char*)1;
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) #l
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(f,l) f "(" __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) ")"
+/**
+@publishedPartner
+@released
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(__FILE__,__LINE__)
+
+/**
+@publishedPartner
+@released
+
+A macro that should be used to enclose a platform security diagnostic
+'C' style string that can be passed to a capability checking function such
+as RThread::HasCapability() and Kern::CurrentThreadHasCapability().
+
+The content of the string is emitted if the capability test finds that
+the capability is not present.
+
+The macro provides a convenient mechanism that allows the strings to
+be removed from future versions of Symbian OS.
+
+For example:
+
+@code
+if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
+    {
+    return KErrPermissionDenied;
+    }			
+@endcode
+
+In this example, the string:
+
+@code
+Checked by Hal function EDisplayHalSetState
+@endcode
+
+is emitted if the calling process does not have the ECapabilityPowerMgmt capability.
+
+@param s A C-style string.
+
+@see RProcess::HasCapability()
+@see RThread::HasCapability()
+@see RMessagePtr2::HasCapability()
+@see User::CreatorHasCapability()
+*/
+#define __PLATSEC_DIAGNOSTIC_STRING(s) s
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnosticText
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+// Note this value is the same as KSuppressPlatSecDiagnosticMagicValue
+// and used to be a set by it but that caused an error with GCCE compiler
+static const char* const KSuppressPlatSecDiagnostic = (const char*)1;
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+#define __PLATSEC_DIAGNOSTIC_STRING(s) NULL
+
+#ifndef __KERNEL_MODE__
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+#define KSuppressPlatSecDiagnostic		NULL, NULL
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTICS__ */
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@release
+*/
+#define KSuppressPlatSecDiagnostic		NULL
+
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTICS__ */
+#endif /* !__KERNEL_MODE__ */
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+/*
+ * MSVC operator new and operator new[] header guards
+ */
+#ifdef __PLACEMENT_NEW
+#define __PLACEMENT_NEW_INLINE
+#endif /* __PLACEMENT_NEW */
+
+#if defined(__VC32__) && (_MSC_VER < 1300)
+#define __PLACEMENT_VEC_NEW_INLINE
+#endif /* version of MSVC that doesn't support overloaded operator new[] */
+
+/**
+Calling convention qualifier for functions involving floating point 
+variables passed or returned by value.
+@publishedAll
+@released
+*/
+#ifndef __SOFTFP
+#define __SOFTFP
+#endif /* __SOFTFP */
+
+#endif /* __E32DEF_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+class fred {
+	public:
+	int something;
+	int aMethod(void);
+};
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+emulated_drives_export.mmp
+
+PRJ_EXPORTS
+emulated_drives_export1.mbm z:/private/10001234/policy/emulated_drives_export1.mbm
+emulated_drives_export2.mbm c:/private/10001234/policy/emulated_drives_export2.mbm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.dso
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			emulated_drives_export.cpp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export1.mbm has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export2.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class to test customised filtering
+# Will output a simple message when certain input text is found
+#
+
+import sys
+import filter_interface
+
+
+class TestFilter(filter_interface.Filter):
+	
+	def open(self, raptor_instance):
+		return True
+		
+		
+	def write(self, text):
+		"""Write a message to stdout to say the test passed"""
+		
+		if "<info>The make-engine exited successfully.</info>" in text:
+			sys.stdout.write("\nTest Passed!\n")
+		return True
+	
+	
+	def close(self):
+		return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter_exceptions.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for testing the filter framework by creatnig an exception
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+
+class FilterTestCrash(filter_interface.Filter):
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+		self.counter = 0
+		return True
+
+	def write(self, text):
+		"""Write text into the log file"""
+
+		self.counter += 1
+		if self.counter == 10:
+			raise Exception("A test exception in a filter was generated on line %d of the log\n" % self.counter)
+		
+
+		return True
+
+	def summary(self):
+		return False
+
+	def close(self):
+		return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+gnumakefile ../gnumakefile/master.mak
+gnumakefile slave.mak
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/master.mak	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+# Envoke CED to install correct CommDB
+#
+ 
+do_nothing :
+	rem do_nothing
+ 
+ #
+ # The targets invoked by abld 
+
+
+MAKMAKE : 
+	echo MASTER.MAK MAKMAKE > master_makmake_$(PLATFORM)_$(CFG).txt
+
+RESOURCE : 
+	echo MASTER.MAK RESOURCE > master_resource_$(PLATFORM)_$(CFG).txt
+
+SAVESPACE : BLD
+
+BLD : 
+	echo MASTER.MAK BLD > master_bld_$(PLATFORM)_$(CFG).txt
+ 
+FREEZE : 
+	echo MASTER.MAK FREEZE > master_freeze_$(PLATFORM)_$(CFG).txt
+
+LIB : 
+	echo MASTER.MAK LIB > master_lib_$(PLATFORM)_$(CFG).txt
+
+CLEANLIB : do_nothing
+	 
+FINAL : 
+	echo MASTER.MAK FINAL > master_final_$(PLATFORM)_$(CFG).txt
+
+CLEAN : 
+	rm -f *.txt
+ 
+RELEASABLES : 
+	@echo $(DIRECTORY)/master_makmake_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_resource_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_bld_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_lib_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_final_$(PLATFORM)_$(CFG).txt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/slave.mak	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+# Envoke CED to install correct CommDB
+#
+ 
+do_nothing :
+	rem do_nothing
+ 
+ #
+ # The targets invoked by abld 
+
+
+MAKMAKE : 
+	echo SLAVE.MAK MAKMAKE >> master_makmake_$(PLATFORM)_$(CFG).txt
+
+RESOURCE : 
+	echo SLAVE.MAK RESOURCE >> master_resource_$(PLATFORM)_$(CFG).txt
+
+SAVESPACE : BLD
+
+BLD : 
+	echo SLAVE.MAK BLD >> master_bld_$(PLATFORM)_$(CFG).txt
+ 
+FREEZE : 
+	echo SLAVE.MAK FREEZE >> master_freeze_$(PLATFORM)_$(CFG).txt
+
+LIB : 
+	echo SLAVE.MAK LIB >> master_lib_$(PLATFORM)_$(CFG).txt
+
+CLEANLIB : do_nothing
+ 
+FINAL : 
+	echo SLAVE.MAK FINAL >> master_final_$(PLATFORM)_$(CFG).txt
+
+CLEAN : 
+	rm -f *.txt
+ 
+RELEASABLES : 
+	@echo $(DIRECTORY)/master_makmake_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_resource_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_bld_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_lib_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_final_$(PLATFORM)_$(CFG).txt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Different platforms (e.g. tools2 and the rest) can use 
+   this to test that their FLMs
+   support the MACRO keyword and that they support
+   complex macros with quotes and parentheses.
+
+   Make your mmp include macrotest.mmh to declare the appropriate macros
+*/
+
+
+#if !defined(MACRO_ADDED_FOR_TESTING)
+#error Expected MACRO "MACRO_ADDED_FOR_TESTING" from the MMP but it is not defined
+#endif
+
+#define MULTIPLYBY100(x) x##00
+
+#if COMPLEXMACRO != 100 
+#error Expected  MACRO "##COMPLEXMACRO=MULTUPLYBY100(1)" from the MMP but it is not defined
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* For testing the MACRO keyword and for testing complex macros with parentheses etc.
+  use with macrotests.h */
+
+MACRO			MACRO_ADDED_FOR_TESTING COMPLEXMACRO=MULTIPLYBY100(1)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 
+
+PRJ_MMPFILES
+deftest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target		deftest
+targettype		dll
+
+source	test.cpp 
+source	test01.cpp 
+source	test02.cpp 
+source	test03.cpp 
+source	test04.cpp 
+source	test05.cpp 
+source	test06.cpp 
+source	test07.cpp 
+source	test08.cpp 
+source	test09.cpp 
+source	test10.cpp 
+source	test11.cpp 
+source	test12.cpp 
+source	test13.cpp 
+source	test14.cpp 
+source	test15.cpp 
+source	test16.cpp 
+source	test17.cpp 
+source	test18.cpp 
+source	test19.cpp 
+source	test20.cpp 
+source	test21.cpp 
+source	test22.cpp 
+source	test23.cpp 
+source	test24.cpp 
+source	test25.cpp 
+source	test26.cpp 
+source	test27.cpp 
+source	test28.cpp 
+source	test29.cpp 
+source	test30.cpp 
+source	test31.cpp 
+source	test32.cpp 
+source	test33.cpp 
+source	test34.cpp 
+source	test35.cpp 
+source	test36.cpp 
+source	test37.cpp 
+source	test38.cpp 
+source	test39.cpp 
+source	test40.cpp 
+source	test41.cpp 
+source	test42.cpp 
+source	test43.cpp 
+source	test44.cpp 
+source	test45.cpp 
+source	test46.cpp 
+source	test47.cpp 
+source	test48.cpp 
+source	test49.cpp 
+unpaged
+macro __TESTNAME__="deftest"
+
+deffile  deftest.def
+uid 0x1000008d 0x100039e5
+VENDORID 0x70000001
+capability		all
+unpaged
+epocallowdlldata
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftestu.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/e32def.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2870 @@
+/*
+* Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\e32def.h
+* NOTE: THIS FILE SHOULD BE ACCEPTABLE TO A C COMPILER
+*
+*/
+
+
+
+
+#ifndef __E32DEF_H__
+#define __E32DEF_H__
+
+/*
+ * __LEAVE_EQUALS_THROW__ requires the compiler to support C++ exceptions
+ */
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#undef __LEAVE_EQUALS_THROW__
+#endif
+
+
+
+
+
+#ifdef __PROFILING__
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_START(aBin) RDebug::ProfileStart(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_END(aBin)   RDebug::ProfileEnd(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_RESET(aNumberOfBins) RDebug::ProfileReset(0,aNumberOfBins)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_DISPLAY(aNumberOfBins) \
+			{	TFixedArray<TProfile, aNumberOfBins> result; \
+				RDebug::ProfileResult(result.Begin(), 0, aNumberOfBins); \
+				for (TInt i=0; i<aNumberOfBins; i++)   \
+				RDebug::Print(_L("Profile bin %d:  Calls: %d, Clock ticks: %d\n" ),i,res[i].iCount,result[i].iTime);  \
+			}
+#else /* __PROFILING__ */
+#define __PROFILE_START(aBin) 
+#define __PROFILE_END(aBin)   
+#define __PROFILE_RESET(aNumberOfBins) 
+#define __PROFILE_DISPLAY(aNumberOfBins)
+#endif
+
+
+
+#if defined(__VC32__)
+/**
+@publishedAll
+@released
+*/
+#define __NO_CLASS_CONSTS__
+#if (_MSC_VER >= 1200)
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN__ __declspec(noreturn)
+#else
+#define __NORETURN__
+#endif
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN_TERMINATOR()
+/**
+@publishedAll
+@released
+*/
+#define IMPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define EXPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_CLASS(x) class x
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_STRUCT(x) struct x
+/**
+@publishedAll
+@released
+*/
+#define __NO_THROW throw()
+/**
+@publishedAll
+@released
+*/
+#define __THROW(t) throw(t)
+#pragma warning( disable : 4355 )	/* 'this' used in base member initializer list */
+#pragma warning( disable : 4511 )	/* copy constructor could not be generated */
+#pragma warning( disable : 4512 )	/* assignment operator could not be generated */
+#pragma warning( disable : 4514 )	/* unreferenced inline function has been removed */
+#pragma warning( disable : 4699 )	/* Note: Using precompiled header %s */
+#pragma warning( disable : 4710 )	/* function not inlined */
+#pragma warning( disable : 4121 )	/* alignment sensitive to packing */
+#pragma warning( disable : 4273 )
+#pragma warning( disable : 4097 )	/* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
+#pragma warning( disable : 4291 )	/* 'TAny *CBase::operator new(TUint,TLeave)' : no matching operator delete found; memory will not be freed if initialization throws an exception */
+
+#if _MSC_VER  >= 1100
+/**
+@publishedAll
+@released
+*/
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#if defined(__CW32__)
+#undef __embedded_cplusplus
+/** @internalTechnology */
+#define __embedded_cplusplus	1
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__
+#define __NORETURN_TERMINATOR()
+#define IMPORT_C __declspec(dllexport)
+#define EXPORT_C __declspec(dllexport)
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW throw()
+#define __THROW(t) throw(t)
+
+#define TEMPLATE_SPECIALIZATION template<>
+/**
+@publishedAll
+@released
+*/
+#define _asm	asm
+#ifndef __int64
+#pragma longlong on
+/** @internalTechnology */
+#define __int64  long long
+#endif
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#pragma exceptions off    /* no support for C++ exception handling */
+#pragma RTTI off          /* no support for C++ runtime type information */
+#endif
+#if __MWERKS__ >= 0x3200
+#pragma warning off (10480)	/* deleteing void pointer is undefined */
+#pragma warning off (10350) /* N pad byte(s) inserted after data member */
+#endif
+#endif
+
+
+
+#if defined(__GCC32__)
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__  __attribute__ ((noreturn))
+#ifdef __GCCV3__
+#define __NORETURN_TERMINATOR()
+#else
+#define __NORETURN_TERMINATOR()		abort()
+#endif
+#define IMPORT_C
+#if !defined __WINS__ && defined _WIN32 /* VC++ Browser Hack */
+#define EXPORT_C
+/** @internalTechnology */
+#define asm(x)
+#else
+#define EXPORT_C __declspec(dllexport)
+#endif
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW
+#define __THROW(t)
+#ifdef __EABI__
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#ifdef __GCC32__
+/**
+@publishedAll
+@released
+*/
+#define __DOUBLE_WORDS_SWAPPED__
+#endif
+
+
+
+/** @internalTechnology */
+#define __NO_MUTABLE_KEYWORD
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define __MUTABLE
+#else
+#define __MUTABLE mutable
+#endif
+
+
+
+/**
+@publishedAll
+@deprecated
+*/
+#define CONST_CAST(type,exp) (const_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define STATIC_CAST(type,exp) (static_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define MUTABLE_CAST(type,exp) (const_cast<type>(exp))
+#else
+#define MUTABLE_CAST(type,exp) (exp)
+#endif
+
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_D extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_D
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_D static
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_C extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_C
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_C static
+/**
+@publishedAll
+@deprecated
+*/
+#define FOREVER for(;;)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a true value.
+*/
+#define TRUE 1
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a false value.
+*/
+#define FALSE 0
+#ifndef NULL
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a NULL value.
+*/
+#define NULL 0
+#endif
+
+
+
+
+#ifndef VA_START
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to point to the first of the variable arguments.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   // other code
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer points to the first argument in
+            the variable argument list.
+            This symbol is usually declared as a VA_LIST type. 
+
+@param pn   The argument that immediately precedes the variable argument list.
+
+@see VA_LIST
+@see VA_ARG
+*/
+#define VA_START(ap,pn) ((ap)[0]=(TInt8 *)&pn+((sizeof(pn)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(void)0)
+#endif
+
+
+
+
+#ifndef VA_ARG
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Increments a pointer to a variable argument list to point to the next argument
+in the list. The current argument is assumed to be of a type defined by
+the second parameter to this macro.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   ...
+   TInt x = VA_ARG(list,TInt);
+   ...
+   const TDesC *pS=VA_ARG(aList,const TDesC*);
+   ... 
+   etc
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. It is assumed to point to the current
+            argument in the variable argument list. After execution of the code
+            generated by this macro, the pointer points to the next argument in
+            the list. This symbol is usually declared as a VA_LIST type. 
+
+@param type The type of the current argument.
+            This can be any valid type, for example, TInt, const TDesC*, etc.
+            
+@see VA_LIST
+@see VA_START            
+*/
+#define VA_ARG(ap,type) ((ap)[0]+=((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(*(type *)((ap)[0]-((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)))))
+#endif
+
+
+
+
+#ifndef VA_END
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to zero.
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer is reset to 0.
+            This symbol is usually declared as a VA_LIST type. 
+            
+@see VA_LIST
+@see VA_START
+@see VA_ARG            
+*/
+#define VA_END(ap) ((ap)[0]=0,(void)0)
+#endif
+	
+
+
+/**
+@publishedAll
+@released
+
+Calculates the offset of member f within class c.
+
+This is used in the TSglQue and TDblQue constructors to set the offset of
+the link object from the start of a list element.
+
+@param c The name of the class.
+@param f The name of the member within the specified class.
+
+@see TSglQue
+@see TDblQue
+*/
+#ifndef _FOFF
+#define _FOFF(c,f)			(((TInt)&(((c *)0x1000)->f))-0x1000)
+#endif
+
+
+
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_DOWN(x,a)	((x)&~((a)-1))
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_UP(x,a)		_ALIGN_DOWN((x)+(a)-1, a)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Pointer to any type.
+
+TAny* is equivalent to void* in standard C or C++. TAny* is used in preference 
+to void* because it is more suggestive of the actual meaning,
+e.g. TAny* foo();.
+
+TAny is not used where it really means "nothing", as in the declaration of 
+functions which do not return a value; void is used instead, e.g. void Foo();.
+*/
+typedef void TAny;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit signed integer type, used in Symbian OS to mean an 8-bit
+signed integer, independent of the implementation.
+*/
+typedef signed char TInt8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned integer type; used in Symbian OS to mean an 8-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned char TUint8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit signed integer type, used in Symbian OS to mean a 16-bit
+signed integer, independent of the implementation.
+*/
+typedef short int TInt16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned integer type. used in Symbian OS to mean a 16-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned short int TUint16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit signed integer type, used in Symbian OS to mean a 32-bit
+signed integer, independent of the implementation.
+*/
+typedef long int TInt32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit unsigned integer type; used in Symbian OS to mean a 32-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned long int TUint32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Signed integer type of the natural machine word length.
+
+This is as defined by the C++ implementation's int type. In all
+implementations, this is guaranteed to be at least 32 bits.
+
+A TInt should be used in preference to a sized integer (TInt32, TInt16) for 
+all general use. Sized integers should only be used when packing is essential. 
+C++'s type conversion rules imply that all sized integers smaller than the 
+natural machine word are in any case broadened to the natural machine word 
+size when passed as function parameters.
+
+A TInt should be used in preference to an unsigned integer (TUint) for all 
+general use. Unsigned integers should only be used for flags (which use Boolean 
+operations but not arithmetic) and, in very rare cases, for numbers whose 
+range exceeds that available from signed integers. Although it is natural 
+to attempt to use unsigned integers for quantities which cannot by nature 
+be negative, the C++ language does not provide the support necessary to enforce 
+the "expected" behaviour in these circumstances, and experience has shown 
+that it is better to use signed integers unless there is good reason not to.
+
+@see TUint
+@see TInt32
+@see TInt16
+*/
+typedef signed int TInt;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Unsigned integer type of the natural machine word length. 
+
+This is guaranteed to be at least 32 bits in all implementations.
+
+In almost all circumstances, a TInt should be used in preference to a TUint. 
+The main exception is in flags bytes.
+
+@see TInt
+*/
+typedef unsigned int TUint;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit floating point number, providing IEEE754 single precision on all Symbian 
+OS implementations.
+
+TReal should normally be used in preference to TReal32.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+*/
+typedef float TReal32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number, providing IEEE754 double precision on all Symbian 
+OS implementations.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+This type is identical to TReal.
+
+@see TReal
+*/
+typedef double TReal64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number; identical to TReal64.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+Most serious floating-point calculations require double-precision. All standard 
+math functions (see Math class) take double-precision arguments. Single-precision 
+should only be used where space and performance are at a premium, and when 
+their limited precision is acceptable.
+
+@see TReal64
+@see Math
+*/
+typedef double TReal;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned character.
+
+Use instead of C++ built-in char type because it is guaranteed to be unsigned. 
+Use instead of TInt8 where the application is really for text rather than 
+8-bit arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText8. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText8 only when you are dealing explicitly with 
+8-bit text, regardless of build.
+
+@see TText */
+typedef unsigned char TText8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned character.
+
+Use instead of C++ wchar_t type because it is guaranteed to be unsigned. Use 
+instead of TInt16 where the application is really for text rather than 8-bit 
+arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText16. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText16 only when you are dealing explicitly with 
+16-bit text, regardless of build.
+
+@see TText
+*/
+typedef unsigned short int TText16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Boolean type which takes the value either ETrue or EFalse.
+
+Although only a single bit would theoretically be necessary to represent a 
+Boolean, a machine word is used instead, so that these quantities can be easily 
+passed. Also, TBool must map onto int because of C++'s interpretation of 
+operands in conditional expressions.
+
+On implementations of Symbian OS in which the compiler supports the ANSI-recommended 
+bool type, TBool will be typedef'ed to bool instead of int.
+*/
+typedef int TBool;
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Defines a linear (virtual) address type.
+*/
+typedef TUint32 TLinAddr;
+
+/**
+@internalTechnology
+
+A sorted list of all the code segments in ROM that contain an Exception Descriptor.
+
+*/
+typedef struct TRomExceptionSearchTable
+	{
+	/**
+	The number of entries in the following table.
+	*/
+	TInt32 iNumEntries;
+	
+	/**
+	Address of the code segment of each TRomImageHeader that has an Exception Descriptor.
+	*/
+	TLinAddr iEntries[1];
+	} TRomExceptionSearchTable;
+
+/**
+@internalComponent
+*/
+typedef struct TExceptionDescriptor 
+	{
+	TLinAddr iExIdxBase;
+	TLinAddr iExIdxLimit;
+	TLinAddr iROSegmentBase;
+	TLinAddr iROSegmentLimit;
+	} TExceptionDescriptor;
+
+
+#if defined(__GCC32__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+*/
+typedef long long Int64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit unsigned integer type.
+*/
+typedef unsigned long long Uint64;
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define	I64LIT(x)	x##LL
+/**
+@publishedAll
+@released
+*/
+#define	UI64LIT(x)	x##ULL
+
+#elif defined(__VC32__)
+typedef __int64 Int64;
+typedef unsigned __int64 Uint64;
+#define	I64LIT(x)	(__int64)##x
+#define	UI64LIT(x)	(unsigned __int64)##x
+
+#elif defined(__CW32__)
+#pragma longlong on
+typedef long long Int64;
+typedef unsigned long long Uint64;
+#define	I64LIT(x)	x##LL
+#define	UI64LIT(x)	x##ULL
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+
+NOTE: For those migrating from versions of Symbian OS before 8.1b (i.e. 8.1a, 7.0s etc)
+TInt64 is now defined as a built-in type instead of as a class type. This means
+that the member functions of the old TInt64 class are no longer exported
+from EUSER.LIB, and represents a compatibility break.
+
+To ease migration of source code, a number of macros are provided. Similar
+macros have also been defined in Symbian OS versions 7.0s and 8.1a, but
+implemented in terms of the old TInt64 class. This is important for code that
+is common to : one or both of these Symbian OS versions, and to 8.1b and
+subsequent versions.
+
+The following list shows the new macros and the functions that they replace.
+It also shows some alternative techniques.
+In this list: x, v and r are declared as TInt64, c is declared as TInt, High
+and Low are declared as TUint.
+
+@code
+OLD USAGE						REPLACEMENT
+
+TInt64(High,Low);				MAKE_TINT64(High,Low);
+x.Set(High,Low);				MAKE_TINT64(High,Low);
+x.Low();						I64LOW(x);
+x.High();						I64HIGH(x); 
+x.GetTInt();					I64INT(x); 
+x.GetTReal();					I64REAL(x); 
+x.Lsr(c);						I64LSR(x,c); 
+x.Mul10();						x*=10; 
+x.MulTop(a);					I64MULTOP(x,a); 
+x.DivMod(v,r);					r=x%v; x/=v;
+@endcode 
+*/
+typedef	Int64	TInt64;
+
+
+
+
+/**
+@publishedAll
+@released
+ 
+Defines a 64-bit unsigned integer type.
+*/
+typedef	Uint64	TUint64;
+
+
+
+
+/** @internalComponent */
+#define _MAKE_TINT64_ZX(x)	((TInt64)((TUint32)(x)))
+
+/** @internalComponent */
+#define _MAKE_TUINT64_ZX(x)	((TUint64)((TUint32)(x)))
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TINT64(h,l)	( (_MAKE_TINT64_ZX(h)<<32) | _MAKE_TINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TUINT64(h,l)	( (_MAKE_TUINT64_ZX(h)<<32) | _MAKE_TUINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the high order 32 bits of a 64 bit number.
+*/
+#define	I64HIGH(x)			( (TUint32)((x)>>32) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the low order 32 bits of a 64 bit number.
+*/
+#define	I64LOW(x)			( (TUint32)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as an signed integer.
+*/
+#define	I64INT(x)			( (TInt)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as a TReal type.
+*/
+#define	I64REAL(x)			( (TReal)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to logically shift a 64 bit integer right.
+*/
+#define	I64LSR(x, shift)	( *reinterpret_cast<TUint64*>(&(x)) >>= (shift) )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to multiply a 64 bit integer by 10.
+*/
+#define	I64MUL10(x)			( (x) *= 10 )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to divide a 64 bit integer by another and find the remainder.
+*/
+#define	I64DIVMOD(x, divisor, remainder)	( ((remainder) = (x) % (divisor), (x) /= (divisor)) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a double to a 64 bit integer.
+*/
+#define	I64DOUBLECAST(x)	( static_cast<TInt64>(x) )
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT8 instead.
+
+8-bit literal.
+
+The macro defines an explicit 8-bit constant literal which is suitable
+for non-Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT8
+@see _LIT
+*/
+#define _L8(a) (TPtrC8((const TText8 *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 8-bit string which is suitable when non-Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L8.
+*/
+#define _S8(a) ((const TText8 *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC8<TInt> with
+the specified name and text.
+
+The 8-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT8(name,s) const static TLitC8<sizeof(s)> name={sizeof(s)-1,s}
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT16 instead.
+
+16-bit literal.
+
+The macro defines an explicit 16-bit constant literal which is suitable
+for Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT16
+@see _LIT
+*/
+#define _L16(a) (TPtrC16((const TText16 *)L ## a))
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 16-bit string which is suitable when Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L16.
+*/
+#define _S16(a) ((const TText16 *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC16<TInt> with
+the specified name and text.
+
+The 16-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT16(name,s) const static TLitC16<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText16 TText;
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)L ## a))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#else
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText8 TText;
+
+
+
+/**
+@publishedAll
+@released
+
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(s)> name={sizeof(s)-1,s}
+#endif
+
+
+
+
+#ifndef __VA_LIST_defined
+/** 
+@publishedAll
+@released
+
+Defines a 'C' style array of pointers to TInt8 types.
+
+The type is most commonly used by code that needs to deal with a variable
+number of arguments passed to a function.
+
+@see TInt8
+*/
+typedef TInt8 *VA_LIST[1];
+#endif
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for all builds.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. Unlike __ASSERT_DEBUG
+it is defined in both release and debug builds.
+
+The most common use for this macro is to check that the external environment of
+a function or class is behaving as expected; for example, that parameters
+passed to a function are credible, or that called functions are behaving as
+expected; the macro is commonly placed at the beginning of a function.
+
+The effect of the macro is to generate code which tests
+the conditional expression c; if the expression is false, then
+function p is called. In the majority of cases, the function p is one that
+raises a panic.
+
+Note that the macro definition is, in effect, equivalent to: 
+
+@code
+if !(c)p;
+@endcode
+
+@param c a conditional expression which results in true or false.
+@param p a function which is called if the conditional expression c is false.
+
+@see __ASSERT_DEBUG
+*/
+#define __ASSERT_ALWAYS(c,p) (void)((c)||(p,0))
+
+
+
+#ifdef __WINS__
+#ifdef __CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { byte 0xcc };		\
+	}
+#else // !__CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { int 3 };			\
+	}
+#endif //__CW32__
+#else
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()
+#endif
+
+#if defined(_DEBUG)
+
+/** 
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_DEBUG_MB(aCond,aPanicNo) (void)((aCond)||(PanicMB(aPanicNo,_L(#aPanicNo),_L(#aCond)),0))
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for debug builds only.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. It is used in
+the same way as __ASSERT_ALWAYS, except that it is only defined for debug builds.
+
+The macro may be used to insert extra checks at various points in source code
+as desired; the code will only be generated in debug builds and not in release
+builds.
+
+@param c A conditional expression which results in true or false.
+@param p A function which is called if the conditional expression c is false.
+
+@see __ASSERT_ALWAYS
+*/
+#define __ASSERT_DEBUG(c,p) (void)((c)||(p,0))
+
+
+
+/** 
+@internalAll
+@removed
+*/
+#define __DECLARE_NAME(t)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Calls the function for testing object invariance.
+
+Classes can define a standard member function __DbgTestInvariant(),
+which checks that the object is in a valid state, and panics if it is not.
+In debug builds, this macro simply expands to call that function. For details on how
+to define __DbgTestInvariant(), and an example of its use, see __DECLARE_TEST.
+
+The macro is typically invoked at the beginning of all the member functions of
+the class. For non-const functions (those which can change the object’s state),
+you can ensure that the object has been left in a stable state by invoking
+the macro at the end of the function.
+
+In release builds, no code is generated for the macro. 
+*/
+#define __TEST_INVARIANT __DbgTestInvariant()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK User::__DbgMarkStart(FALSE)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount) User::__DbgMarkCheck(FALSE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount) User::__DbgMarkCheck(FALSE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND User::__DbgMarkEnd(FALSE,0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount) User::__DbgMarkEnd(FALSE,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(FALSE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(FALSE,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET User::__DbgSetAllocFail(FALSE,RAllocator::ENone,1)
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET User::__DbgSetAllocFail(FALSE,RAllocator::EReset,1)
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK User::__DbgMarkStart(TRUE)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount) User::__DbgMarkCheck(TRUE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount) User::__DbgMarkCheck(TRUE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND User::__DbgMarkEnd(TRUE,0)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount) User::__DbgMarkEnd(TRUE,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(TRUE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(TRUE,aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET User::__DbgSetAllocFail(TRUE,RAllocator::ENone,1)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET User::__DbgSetAllocFail(TRUE,RAllocator::EReset,1)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap) (aHeap)->__DbgMarkStart()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount) (aHeap)->__DbgMarkCheck(FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount) (aHeap)->__DbgMarkCheck(TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap) (aHeap)->__DbgMarkEnd(0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount) (aHeap)->__DbgMarkEnd(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount) (aHeap)->__DbgSetAllocFail(RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue) (aHeap)->__DbgSetAllocFail(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::ENone,1)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::EReset,1)
+
+
+
+
+#if defined (__WINS__) 
+
+/**
+@publishedAll
+@released
+*/
+#define __DEBUGGER() {if (User::JustInTime()) __BREAKPOINT()}
+
+#else
+#define __DEBUGGER()
+#endif
+
+
+#if defined(__DLL__)
+/**
+@publishedAll
+@released
+
+Declares a function for testing object invariance.
+
+For complex classes, it is often useful to provide a function that can
+be called to check that the object is in a valid state.
+The __DECLARE_TEST macro supplies a standard prototype for such a function
+named __DbgTestInvariant(). A companion macro __TEST_INVARIANT is provided
+to call the function.
+
+For DLLs, as opposed to EXEs, __DbgTestInvariant() is exported,
+i.e. the macro expands to:
+
+@code
+public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+@endcode
+
+This macro should placed as the last item in a class declaration (as it 
+switches back to public access). Note that a terminating semi-colon must be used.
+
+You should define the __DbgTestInvariant() function to check that the object
+is in a healthy state. If it finds an error, it should call User::Invariant(),
+which will cause a panic. 
+
+If a class is derived from a base class, then the base class __DbgTestInvariant()
+should be called first, and then any further checking done. 
+
+The second function declared, __DbgTest(), is intended to allow test code a way
+of directly accessing non-public members of a class. The function is
+implemented by any test code that requires it, rather than in the class’s own
+source code. The function is therefore not exported.
+
+__DECLARE_TEST is defined for both debug and release builds. This point is
+particularly important for DLLs, as otherwise the exported interfaces would
+differ between the build versions, giving potential binary compatibility
+problems. To avoid using memory unnecessarily in release builds, you can,
+however, use preprocessor directives to define the code within
+__DbgTestInvariant() only for debug builds. __DbgTestInvariant() is never
+called in release builds.
+
+@see __TEST_INVARIANT
+*/
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+#else
+#define __ASSERT_DEBUG(c,p)
+#define __DECLARE_NAME(t)
+#define __TEST_INVARIANT
+#if defined(__DLL__)
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap)
+
+
+
+#define __DEBUGGER()
+#endif
+
+#if defined (__WINS__)
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVid,aVer,aFlags)	TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aSid,aVid,{aCap0,aCap1}},0,0,aVer,aFlags};
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)					TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aUid2,0,{aCap,0}},0,0,0x00010000u,aFlags};
+#else
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVer,aFlags)
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)
+#endif
+
+#if defined(__OPT__)
+/**
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_OPT(c,p) (void)((c)||(p,0))
+#else
+#define __ASSERT_OPT(c,p)
+#endif
+
+#if defined(_UNICODE)
+#if !defined(UNICODE)
+/**
+@publishedAll
+@deprecated
+*/
+#define UNICODE
+#endif
+#endif
+
+#if defined(_DEBUG)
+/**
+@internalComponent
+@deprecated
+*/
+#define __DECLARE_TEST_DEBUG __DECLARE_TEST
+#else
+#define __DECLARE_TEST_DEBUG
+#endif
+
+
+
+
+#if !defined(ASSERT)
+/**
+@publishedAll
+@released
+
+Generates _ASSERT_DEBUG code that calls User::Invariant() if the specified
+condition is not true.
+
+@param x A conditional expression which results in true or false.
+*/
+#define ASSERT(x) __ASSERT_DEBUG(x,User::Invariant())
+#endif
+
+
+
+
+#ifndef __VALUE_IN_REGS__ 
+/**
+@publishedPartner
+@released
+*/
+#define __VALUE_IN_REGS__ 
+#endif
+
+
+
+
+#if defined(_DEBUG)
+/**
+@publishedAll
+@released
+*/
+#define __DEBUG_ONLY(x) x
+#else
+#define __DEBUG_ONLY(x)
+#endif
+
+
+
+
+#ifdef __KERNEL_MODE__
+
+/** @internalComponent */
+#define	KIMPORT_C	IMPORT_C
+
+/** @internalComponent */
+#define	KEXPORT_C	EXPORT_C
+
+/** @internalComponent */
+#define	UIMPORT_C
+
+/** @internalComponent */
+#define	UEXPORT_C
+#else
+#define	KIMPORT_C
+#define	KEXPORT_C
+#define	UIMPORT_C	IMPORT_C
+#define	UEXPORT_C	EXPORT_C
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Asserts that a condition is true at compilation time.
+
+@param x Condition to assert
+*/
+#define __ASSERT_COMPILE(x)		void __compile_time_assert(int __check[(x)?1:-1])
+
+#ifdef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@publishedPartner
+@released
+*/
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#define __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#endif /*__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__*/
+#endif /*__REMOVE_PLATSEC_DIAGNOSTICS__*/
+
+/**
+@internalComponent
+*/
+static const char* const KSuppressPlatSecDiagnosticMagicValue = (const char*)1;
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) #l
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(f,l) f "(" __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) ")"
+/**
+@publishedPartner
+@released
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(__FILE__,__LINE__)
+
+/**
+@publishedPartner
+@released
+
+A macro that should be used to enclose a platform security diagnostic
+'C' style string that can be passed to a capability checking function such
+as RThread::HasCapability() and Kern::CurrentThreadHasCapability().
+
+The content of the string is emitted if the capability test finds that
+the capability is not present.
+
+The macro provides a convenient mechanism that allows the strings to
+be removed from future versions of Symbian OS.
+
+For example:
+
+@code
+if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
+    {
+    return KErrPermissionDenied;
+    }			
+@endcode
+
+In this example, the string:
+
+@code
+Checked by Hal function EDisplayHalSetState
+@endcode
+
+is emitted if the calling process does not have the ECapabilityPowerMgmt capability.
+
+@param s A C-style string.
+
+@see RProcess::HasCapability()
+@see RThread::HasCapability()
+@see RMessagePtr2::HasCapability()
+@see User::CreatorHasCapability()
+*/
+#define __PLATSEC_DIAGNOSTIC_STRING(s) s
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnosticText
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+// Note this value is the same as KSuppressPlatSecDiagnosticMagicValue
+// and used to be a set by it but that caused an error with GCCE compiler
+static const char* const KSuppressPlatSecDiagnostic = (const char*)1;
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+#define __PLATSEC_DIAGNOSTIC_STRING(s) NULL
+
+#ifndef __KERNEL_MODE__
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+#define KSuppressPlatSecDiagnostic		NULL, NULL
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTICS__ */
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@release
+*/
+#define KSuppressPlatSecDiagnostic		NULL
+
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTICS__ */
+#endif /* !__KERNEL_MODE__ */
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+/*
+ * MSVC operator new and operator new[] header guards
+ */
+#ifdef __PLACEMENT_NEW
+#define __PLACEMENT_NEW_INLINE
+#endif /* __PLACEMENT_NEW */
+
+#if defined(__VC32__) && (_MSC_VER < 1300)
+#define __PLACEMENT_VEC_NEW_INLINE
+#endif /* version of MSVC that doesn't support overloaded operator new[] */
+
+/**
+Calling convention qualifier for functions involving floating point 
+variables passed or returned by value.
+@publishedAll
+@released
+*/
+#ifndef __SOFTFP
+#define __SOFTFP
+#endif /* __SOFTFP */
+
+#endif /* __E32DEF_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+class fred {
+	public:
+	int something;
+	int aMethod(void);
+};
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+longfilenames.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/longerfilenamethanyoumightnormallyexpecttobepresent.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/exception_crash.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+make_crash.flm /epoc32/tools/makefile_templates/tools/make_crash.flm
+make_crash.xml /epoc32/tools/makefile_templates/tools/make_crash.xml
+
+PRJ_EXTENSIONS
+
+start extension tools.make_crash
+option CRASH_TYPE exception_caught 
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,95 @@
+# Invokes different types of make crashes
+
+
+## Converting a list of source files to a list of object files without altering
+## their relative order. Also deals with multiple file types mapping to the same
+## object type e.g. .CPP and .cpp and .c++ all map to .o
+	
+# $1 - the list of suffixes to replace
+# $2 - the suffix to replace them with
+# $3 - the list of strings to perform the replacement on
+define allsuffixsubst_internal
+    $(if $1,$$(patsubst %$(firstword $1),%$2,$(call allsuffixsubst_internal,$(wordlist 2,$(words $1),$1),$2,$3)),$3)
+endef
+define allsuffixsubst
+    $(eval allsuffixsubst_RESULT:=$(call allsuffixsubst_internal,$1,$2,$3))$(allsuffixsubst_RESULT)
+endef
+
+
+x:=a b c d e f g h i j
+
+x100:=$(foreach i,$(x),$(x))
+x10000:=$(foreach i,$(x100),$(x100))
+x1000000:=$(foreach i,$(x10000),$(x100))
+
+
+ifeq ($(CRASH_TYPE), memory_exhausted)
+    mystring:= \
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+    $(foreach c,$(x100),$(eval mystring:=$$(mystring)$$(mystring)))
+endif
+
+
+ifeq ($(CRASH_TYPE), exception_caught)
+    manyfiles:=$(foreach f,$(x1000000),fred.cia fred.cpp fred.c++)
+    objects:=$(call allsuffixsubst,.Cia .CiA .cIA. .CpP .cPp .CC .C++ .cia .cpp .c++ .cc .CPP .CIA .Cpp,.o,$(manyfiles))
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!--  Extension interfaces : replacements for Template Extension Makefiles 
+  --> 
+
+ <interface name="tools.make_crash" extends="Symbian.UserFLM" flm="make_crash.flm">
+  <param name="CRASH_TYPE" /> 
+ </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/memory_crash.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+make_crash.flm /epoc32/tools/makefile_templates/tools/make_crash.flm
+make_crash.xml /epoc32/tools/makefile_templates/tools/make_crash.xml
+
+PRJ_EXTENSIONS
+
+start extension tools.make_crash
+option CRASH_TYPE memory_exhausted 
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/metadep.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+# Test SBSv2 Metadata dependency generation to see if
+# changing a metadata file would trigger a rebuild.
+
+export BASH_EPOCROOT=${EPOCROOT//\\//}
+export BASH_SBSHOME=${SBS_HOME//\\//}
+export BASH_SBSMINGW=${SBS_MINGW//\\//}
+export METAMAKEFILE=${BASH_EPOCROOT}/epoc32/build/metadata_all.mk 
+export SBSMAKEFILE=${SBSMAKEFILE:-${BASH_EPOCROOT}/epoc32/build/smoketests/metadep.mk}
+export SBSLOGFILE=${SBSLOGFILE:-${BASH_EPOCROOT}/epoc32/build/smoketests/metadep.log}
+export SBSCOMMAND="sbs -b smoke_suite/test_resources/simple/bld.inf -n -m $SBSMAKEFILE -f $SBSLOGFILE"
+
+# Ensure that the host type is set for Raptor:
+eval $($BASH_SBSHOME/bin/gethost.sh -e)
+
+if [ -z "$HOSTPLATFORM" ]; then
+	echo "Error: HOSTPLATFORM could not be determined." 1>&2
+	exit 1
+fi
+
+# N.B. The use of sleep 1 is required. If I build X, dependent on Y then
+# update Y too quickly, a subsequent attempt to make X won't notice the
+# change in Y.  It's not clear if this is make's fault or just the way that
+# file timestamps are recorded.
+
+if [ "$OSTYPE" = "cygwin" ]
+then
+export MAKECOMMAND="${BASH_SBSMINGW:-${BASH_SBSHOME}/${HOSTPLATFORM_DIR}/mingw}/bin/make"
+else
+export MAKECOMMAND="$BASH_SBSHOME/$HOSTPLATFORM_DIR/bin/make"
+fi
+
+echo "Step 1 - No changes, so there should be no need to rerun:"
+( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+)
+echo ""
+
+
+
+echo "Step 2 - Run sbs, change a bld inf, see the rerunning message"
+#( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+touch smoke_suite/test_resources/simple/bld.inf &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+#)
+echo ""
+
+echo "Step 3 - Run sbs, change an mmp, see the rerunning message twice"
+( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+touch smoke_suite/test_resources/simple/simple.mmp &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+)
+echo ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/eabi/shutdownsrvu.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+EXPORTS
+	_ZN19CServShutdownServer10ConstructLEv @ 1 NONAME
+	_ZN19CServShutdownServer10NotifySaveEN13MSaveObserver9TSaveTypeE @ 2 NONAME
+	_ZN19CServShutdownServer13ClientArrayLCEv @ 3 NONAME
+	_ZN19CServShutdownServer14CancelPowerOffEv @ 4 NONAME
+	_ZN19CServShutdownServer20HandleShutdownEventLEN13MSaveObserver9TSaveTypeEi11TPowerState @ 5 NONAME
+	_ZN19CServShutdownServer23HandlePowerNotifRequestERK7RThread @ 6 NONAME
+	_ZN19CServShutdownServer4NewLEv @ 7 NONAME
+	_ZN19CServShutdownServerC1Ei @ 8 NONAME
+	_ZN19CServShutdownServerC2Ei @ 9 NONAME
+	_ZN19CServShutdownServerD0Ev @ 10 NONAME
+	_ZN19CServShutdownServerD1Ev @ 11 NONAME
+	_ZN19CServShutdownServerD2Ev @ 12 NONAME
+	_ZN20CServShutdownSession8ServiceLERK9RMessage2 @ 13 NONAME
+	_ZN20CServShutdownSessionC1Ev @ 14 NONAME
+	_ZN20CServShutdownSessionC2Ev @ 15 NONAME
+	_ZN20CServShutdownSessionD0Ev @ 16 NONAME
+	_ZN20CServShutdownSessionD1Ev @ 17 NONAME
+	_ZN20CServShutdownSessionD2Ev @ 18 NONAME
+	_ZNK19CServShutdownServer10IsPowerOffEv @ 19 NONAME
+	_ZNK19CServShutdownServer12IsClientHungE9TThreadId @ 20 NONAME
+	_ZNK19CServShutdownServer16GetShutdownStateERiS0_ @ 21 NONAME
+	_ZTI19CServShutdownServer @ 22 NONAME ; #<TI>#
+	_ZTI20CServShutdownSession @ 23 NONAME ; #<TI>#
+	_ZTV19CServShutdownServer @ 24 NONAME ; #<VT>#
+	_ZTV20CServShutdownSession @ 25 NONAME ; #<VT>#
+	_ZThn104_N19CServShutdownServer13ClientArrayLCEv @ 26 NONAME ; #<thunk>#
+	_ZThn104_N19CServShutdownServer20HandleShutdownEventLEN13MSaveObserver9TSaveTypeEi11TPowerState @ 27 NONAME ; #<thunk>#
+	_ZThn104_NK19CServShutdownServer12IsClientHungE9TThreadId @ 28 NONAME ; #<thunk>#
+	_ZThn104_NK19CServShutdownServer16GetShutdownStateERiS0_ @ 29 NONAME ; #<thunk>#
+	KShtdwnTimeoutBase @ 30 NONAME DATA 4
+	KShtdwnTimeoutClient @ 31 NONAME DATA 4
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/shutdownsrv.h
+
+PRJ_MMPFILES
+../group/shutdownsrv.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/shutdownsrv.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET			shutdownsrv.dll
+CAPABILITY 		PowerMgmt TrustedUI ProtServ DiskAdmin
+TARGETTYPE		DLL
+TARGETPATH		/system/libs
+
+EXPORTLIBRARY		exportlibrary_shutdownsrv.lib
+
+UID			0x1000008D	0x10004903
+VENDORID 0x70000001
+
+SOURCEPATH		../src
+
+userinclude		.
+userinclude		../inc
+
+systeminclude		/epoc32/include
+
+#if defined(SYMBIAN_SSM_GRACEFUL_SHUTDOWN)
+systeminclude		/epoc32/include/ssm
+#endif
+
+source			shutdownsrv.cpp shutdowntimer.cpp shutdownsrvpatchdata.cpp
+
+library			euser.lib bafl.lib efsrv.lib hal.lib
+
+#if defined(SYMBIAN_SSM_GRACEFUL_SHUTDOWN)
+library			ssmcmn.lib	estor.lib
+#endif
+
+deffile 		shutdownsrv.def
+
+START WINS
+			copy_for_static_linkage
+END
+
+START MARM
+END
+
+LINKEROPTION armcc --verbose
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/inc/shutdownsrv.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(SHUTDOWNSRV_H)
+#define SHUTDOWNSRV_H
+
+#include <e32base.h>
+#include <savenotf.h>
+#include <e32power.h>
+#include <s32mem.h>
+
+class CShutdownTimer;
+
+/**
+This class describes an interface, which is used by LaF Shutdown Manager to notify the Shutdown Server of 
+device shutdown, so that the server can take appropriate power management steps. The concrete implementation 
+of this interface is provided by CServShutdownServer class.
+@publishedPartner
+@released
+*/
+class MShutdownEventObserver
+	{
+public:
+	/**
+	This method has to be called, when the observed object requires the Shutdown Server to notify registered 
+	clients about the shutdown event, such as MSaveObserver::ESaveData, MSaveObserver::ESaveAll, 
+	MSaveObserver::EReleaseRAM,...
+	@param aAction The type of the requested action
+	@param aPowerOff If it is non-zero, this is the beginning of a powerdown sequence.
+	@param aEvent The type of the powerdown event 
+	@leave KErrNotSupported Leaves if aEvent is invalid  
+	*/
+	virtual void HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent = EPwStandby)=0;
+	/**
+	This method creates an array of CArrayFix<TThreadId> type and appends to it the	thread id-s of 
+	all the registered clients. The created CArrayFix<TThreadId> instance will be pushed on the 
+	cleanup stack. The caller becomes responsible for the memory allocated for this array.
+	@return A pointer to a CArrayFix<TThreadId> array with the client thread id-s.
+	@leave Some system-wide error codes including KErrNoMemory.
+	*/
+	virtual CArrayFix<TThreadId>* ClientArrayLC()=0;
+	/**
+	Checks if a particular client is hung in that the client has not re-registered with the 
+	Shutdown Server indicating it is ready for the next stage of the shutdown.
+	@param aId Client's thread id.
+	@return Non-zero if the client with this thread id has no pending request.
+	*/
+	virtual TBool IsClientHung(TThreadId aId) const=0;
+	/**
+	This method returns information about the shutdown status.
+	@param aPowerOff An output parameter, where power-off status will be stored. 
+	                 It will be non-zero, if a powerdown sequence has been initiated.
+	@param aAllSessionsHavePendingRequest An output parameter. It will be non-zero, if all clients 
+	                 have pending requests to receive further events from the Shutdown Manager.
+	*/
+	virtual void GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const=0;
+	};
+
+/**
+This class describes an object, which handles requests, such as of MSaveObserver::TSaveType type.
+When CServShutdownServer::HandleShutdownEventL() gets called, the CServShutdownServer implementation
+will notify all registered clients, completing their asynchronous messages 
+(CServShutdownSession::iPtr), then it will wait until all clients re-register itself and
+if this is a beginning of a powerdown sequence, the method will store the locales and the HAL
+properties subsequently switching off the power.
+@internalTechnology
+*/
+class CServShutdownServer : public CServer2, public MShutdownEventObserver
+	{
+public:
+	IMPORT_C static CServShutdownServer* NewL();
+	IMPORT_C ~CServShutdownServer();
+	IMPORT_C void HandlePowerNotifRequest(const RThread& aClient);
+	IMPORT_C void NotifySave(MSaveObserver::TSaveType aSaveType);
+	IMPORT_C TBool IsPowerOff() const;
+	IMPORT_C void CancelPowerOff();
+	void SwitchOff();
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	TInt ClientArrayCount();
+	void ClientArrayL(const RMessage2& aMessage);
+#endif //SYMBIAN_SSM_GRACEFUL_SHUTDOWN	
+public:
+	IMPORT_C virtual void ConstructL();
+public: // from MShutdownEventObserver
+	IMPORT_C void HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent = EPwStandby);
+	IMPORT_C CArrayFix<TThreadId>* ClientArrayLC();
+	IMPORT_C TBool IsClientHung(TThreadId aId) const;
+	IMPORT_C void GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const;
+
+protected:
+	IMPORT_C CServShutdownServer(TInt aPriority);
+private:
+	TBool AllSessionsHavePendingRequest() const;
+	void DoSwitchOff();
+private: // from CServer
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+private:
+	TBool iPowerOff;
+	TPowerState iPowerEvent;	
+	CShutdownTimer* iShutdownTimer;	
+	};
+
+/**
+This class describes a server side session object, which handles reqistration requests
+of clients, which are interested in power down events.
+@internalTechnology
+*/
+class CServShutdownSession : public CSession2
+	{
+public:
+	IMPORT_C ~CServShutdownSession();
+protected:
+	IMPORT_C CServShutdownSession();
+public:
+	static CServShutdownSession* NewL();
+	TBool HasPendingRequest() const;
+	void NotifySave(MSaveObserver::TSaveType aSaveType);
+protected: // from CSession
+	IMPORT_C void ServiceL(const RMessage2& aMessage);
+private:
+	void RequestNotifyPowerDown(const RMessage2& aMessage);
+	void RequestNotifyPowerDownCancel();
+	void DoServiceL(const RMessage2& aMessage, TBool& aCompleteRequest);
+	void PowerOffL(const RMessage2& aMessage);
+	void PowerStateL(const RMessage2& aMessage) const;
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	void HandleShutdownEventL(const RMessage2& aMessage);
+	void ClientArrayL(const RMessage2& aMessage);
+	void IsClientHung(const RMessage2& aMessage) const;
+	void GetShutdownState(const RMessage2& aMessage) const;
+	void ClientArrayCount(const RMessage2& aMessage) const;
+#endif //SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+public:
+	TThreadId ClientThreadId() const;
+
+private:
+	RMessagePtr2 iPtr;
+	TInt iCurrentEvent;
+	TInt iOutstandingEvent;
+	};
+
+#endif// SHUTDOWNSRV_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrv.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,759 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "shutdownsrv.h"
+#include "savenotf.h"
+#include "savepriv.h"
+#include "shutdowntimer.h"
+#include <hal.h>
+#include <f32file.h>
+#include <bautils.h>
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+#include <s32mem.h>
+#include <ssmgracefulshutdown_patch.h>
+#endif
+
+//The function used to start the profiler, while profiling the shutdown.
+#ifdef __PROFILE_SHUTDOWN
+_LIT(KProfilerCmd,"start -noui");
+void StartProfiler()
+	{
+	RProcess p;
+	TInt r=p.Create(KProfilerName,KProfilerCmd);
+	if (r==KErrNone)
+		{
+		p.Resume();
+		p.Close();
+		}
+	}
+#endif
+
+//The function used to unload the profiler, while profiling the shutdown.
+#ifdef __PROFILE_SHUTDOWN
+void UnloadProfiler()
+	{
+	TFullName name;
+	TFindServer findSvr(KProfilerName);
+	Profiler::Unload();
+	while(findSvr.Next(name) == KErrNone)
+		{
+		User::After(1000000);
+		findSvr.Find(KProfilerName);
+		}
+	}
+#endif
+
+//
+// class CServShutdownServer
+//
+
+/**
+Standard phase-one factory method for creating CServShutdownServer instances.
+@return A newly-constructed shutdown server object.
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+EXPORT_C CServShutdownServer* CServShutdownServer::NewL()
+	{ // static
+	CServShutdownServer* self=new(ELeave) CServShutdownServer(CActive::EPriorityStandard);
+	return self;
+	}
+
+/**
+Destructor.
+Releases CShutdownTimer object if it has been allocated.
+*/
+EXPORT_C CServShutdownServer::~CServShutdownServer()
+	{
+	delete iShutdownTimer;
+	}
+
+/**
+This method iterates through all session instances and checks that all they have pending
+requests (which means that all clients have completed their powerdown related processing
+and re-registered itself back to the shutdown server).. If that's true (all sessions have
+pending requests) and iPowerOff flag is nonzero, the method will call SwitchOff() - the
+power will be switched off. 
+@see CServShutdownServer::SwitchOff()
+@see CServShutdownSession::HasPendingRequest()
+*/
+EXPORT_C void CServShutdownServer::HandlePowerNotifRequest(const RThread& /*aClient*/)
+	{
+	// if all sessions have a pending request then they've all saved their data and we can switch off
+	TBool completed=ETrue;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		if (!static_cast<CServShutdownSession*>(session)->HasPendingRequest())
+			{
+			completed=EFalse;
+			break;
+			}
+		}
+	if (completed && iPowerOff)
+		{
+		SwitchOff();
+		}
+	}
+
+/**
+This method will call SwitchOff(), if there are no sessions, so - no clients.
+If there are registered clients (sessions), the method will call CServShutdownSession::NotifySave()
+for each of them.
+If the timer object has been initialised, it calculates the shutdown timeout value 
+and adds the timer to the active scheduler.
+@param aSaveType The action, which will be given to the clients, when calling their 
+                 MSaveObserver::SaveL() implementations.
+@see CServShutdownServer::SwitchOff()
+@see CServShutdownSession::NotifySave()
+*/
+EXPORT_C void CServShutdownServer::NotifySave(MSaveObserver::TSaveType aSaveType)
+	{
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	CSession2* p=iter++;
+	if (p==NULL)
+		{
+		if (iPowerOff)
+			{
+			SwitchOff();
+			}
+		}
+	else
+		{
+		TInt numClients = 0;
+
+		iter.SetToFirst();
+	    for (CSession2* session=iter++; session!=NULL; session=iter++)
+			{
+			static_cast<CServShutdownSession*>(session)->NotifySave(aSaveType);
+			numClients++;  
+			}
+			
+		if(iShutdownTimer && !iShutdownTimer->IsActive())
+			{
+			iShutdownTimer->Start(numClients);
+			}
+		}
+	}
+
+/**
+@return Non-zero If the powerdown sequence has been initiated.
+*/
+EXPORT_C TBool CServShutdownServer::IsPowerOff() const
+	{
+	return iPowerOff;
+	}
+
+/**
+Cancels any power off request.
+*/
+EXPORT_C void CServShutdownServer::CancelPowerOff()
+	{
+	iPowerOff=EFalse;
+	
+	// Cancel the timer.
+	if (iShutdownTimer)
+		{
+		iShutdownTimer->Cancel();
+		}
+	}
+
+/**
+@param aPriority The active object priority.
+*/
+EXPORT_C CServShutdownServer::CServShutdownServer(TInt aPriority):
+	CServer2(aPriority), iShutdownTimer(0)
+	{
+    }
+
+/**
+Completes the server construction by adding the server to the active scheduler and initializing the
+CShutdownTimer object if applicable.
+@leave See CServer2::StartL() leave error codes.
+@see CServer2::StartL()
+@panic KErrNotSupported Incorrect patchable variables configuration.
+*/
+EXPORT_C void CServShutdownServer::ConstructL()
+	{
+	iShutdownTimer = CShutdownTimer::NewL(*this);
+	#ifdef TEST_SHUTDOWN_SERVER 
+	StartL(__TEST_SHUTDOWN_SERVER_NAME);
+	#else
+	StartL(__SHUTDOWN_SERVER_NAME);
+	#endif
+	}
+
+/**
+This method switches off the power using the Power API.
+If there is a defined SYSLIBS_TEST macro, the method does nothing.
+*/
+void CServShutdownServer::DoSwitchOff()
+	{
+	//Finalize the drives before shutting down
+	RFs fs;
+	TInt r=fs.Connect(); 
+	if (r==KErrNone) 
+		{
+		//Ignore the error code, as it is not a critical call
+		r=fs.FinaliseDrives();
+		fs.Close();
+		}
+#ifdef 	SYSLIBS_TEST 
+		// Test mode, only prints debug message.
+		RDebug::Printf("CServShutdownServer::SwitchOff() gets run in SYSLIBS_TEST mode.\n");
+#else 	//SYSLIBS_TEST
+	// restart or standby/shutdown using Power API 
+	if (Power::EnableWakeupEvents(iPowerEvent) == KErrNone)
+		{
+		// Prepare to wake up if power event is standby
+		TRequestStatus s;
+		Power::RequestWakeupEventNotification(s);
+		Power::PowerDown(); // if event is Restart, this function should never return
+		User::WaitForRequest(s);
+		}
+#endif //SYSLIBS_TEST
+	} 
+void CServShutdownServer::SwitchOff()
+	{
+	// If the timer has applied, cancel any outstanding requests, 
+	// no matter SwitchOff() has been triggered by the timer or the shutdown server.
+	if (iShutdownTimer)
+		{
+		iShutdownTimer->Cancel();
+		}
+
+	if (iPowerOff)
+		{
+#ifdef __PROFILE_SHUTDOWN
+		UnloadProfiler();
+#endif //__PROFILE_SHUTDOWN
+		}
+	//SSM shutdown is used only when patchable constant KSsmGracefulShutdown is true 
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	if (iPowerOff && !IsSsmGracefulShutdown())
+#else
+	if (iPowerOff)
+#endif
+		{
+		//Shutdown using old shutdownsrv, not SSM
+		DoSwitchOff();
+		}
+	iPowerOff = EFalse;
+	}
+
+/**
+This method creates a new server side session object.
+@param aVersion Shutdown server version number.
+@return A pointer to the created session object.
+@leave KErrNotSupported Unknown shutdown server version
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+CSession2* CServShutdownServer::NewSessionL(const TVersion& aVersion,const RMessage2& /*aMessage*/) const
+	{
+	TVersion v(KShutdownMajorVN,KShutdownMinorVN,KShutdownBuildVN);
+	if (!User::QueryVersionSupported(v,aVersion))
+		User::Leave(KErrNotSupported);
+
+	CSession2* pSession = CServShutdownSession::NewL();
+	return pSession;
+	}
+
+/**
+This method has to be called, when the registered clients have to be notified that a 
+particular action has to be done, such as MSaveObserver::ESaveData, MSaveObserver::ESaveAll, 
+MSaveObserver::EReleaseRAM,...
+If this is a beginning of a powerdown sequence, the method will store the locales and the HAL
+properties.
+If the requested action is not MSaveObserver::ESaveNone, the method will call 
+CServShutdownServer::NotifySave().
+@param aAction The type of the requested action
+@param aPowerOff If it is non-zero, this is the beginning of a powerdown sequence.
+@param aEvent The type of the powerdown event (power off or restart)
+@leave KErrNotSupported Leaves if aEvent is invalid  
+@see CServShutdownServer::NotifySave()
+@see TPowerState
+*/
+EXPORT_C void CServShutdownServer::HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent)
+	{
+	if( aPowerOff )
+		{
+		__ASSERT_ALWAYS((aEvent>EPwActive)&&(aEvent<EPwLimit), User::Leave(KErrNotSupported));
+#ifdef __PROFILE_SHUTDOWN
+		StartProfiler();
+#endif
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+		if (!IsSsmGracefulShutdown())
+			{
+			// Save the state of the HAL
+			// The state of the locale should be saved before the HAL
+			BaflUtils::PersistLocale();
+			BaflUtils::PersistHAL();
+			}
+#else
+		// Save the state of the HAL
+		// The state of the locale should be saved before the HAL
+		BaflUtils::PersistLocale();
+		BaflUtils::PersistHAL();
+#endif
+		}
+
+	iPowerOff=aPowerOff;
+	iPowerEvent = aEvent;
+	// add LAF setting for powering down screen (& keyboard??)
+	if (aAction != MSaveObserver::ESaveNone)
+		{
+		NotifySave(aAction);
+		}
+	}
+
+/**
+This method returns an information about the shutdown status.
+@param aPowerOff An output parameter, where iPowerOff value will be stored. 
+                 It will be non-zero, if a powerdown sequence has been initiated.
+@param aAllSessionsHavePendingRequest An output parameter. It will be non-zero, if
+                 all clients has pending requests.
+*/
+EXPORT_C void CServShutdownServer::GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const
+	{
+	aAllSessionsHavePendingRequest = AllSessionsHavePendingRequest();
+	aPowerOff = iPowerOff;
+	}
+
+/**
+This method creates an array of CArrayFix<TThreadId> type and appends to it the
+thread id-s of the all registered clients.
+The created CArrayFix<TThreadId> instance will be pushed on the cleanup stack.
+@return A pointer to a CArrayFix<TThreadId> array with the client thread id-s.
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+EXPORT_C CArrayFix<TThreadId>* CServShutdownServer::ClientArrayLC()
+	{
+	CArrayFix<TThreadId>* clientArray=new(ELeave) CArrayFixFlat<TThreadId>(2);
+	CleanupStack::PushL(clientArray);
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	TKeyArrayFix key(0,ECmpTInt);
+    for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+		TInt pos;
+		if (clientArray->Find(id,key,pos)!=0)
+			{
+			clientArray->AppendL(id);
+			}
+		}
+	return clientArray;
+	
+	
+	}
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+/**
+This method will write thread id-s of all clients that are registered for shutdown notification in to a streem.
+@param aMessage consists of buffer, clientside array count and server side array count 
+*/
+void CServShutdownServer::ClientArrayL(const RMessage2& aMessage)
+	{
+	const TInt arrayItemCount = ClientArrayCount();
+	//write all registered client array in a buffer only when client side 
+	//array count is equal to server side array count
+	if(arrayItemCount == aMessage.Int1())
+		{
+		const TInt sizeRequired = arrayItemCount * sizeof(TThreadId);
+		CBufFlat* const buf=CBufFlat::NewL(sizeRequired);
+		CleanupStack::PushL(buf);
+		RBufWriteStream writeStream(*buf);
+		CleanupClosePushL(writeStream); 
+		TDblQueIter<CSession2> iter(iSessionIter);
+		iter.SetToFirst();
+    	for (CSession2* session=iter++; session!=NULL; session=iter++)
+			{
+			TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+			//Thread id (which is TUint64) is broken in to two TUint32 and written as RWriteStream doesnt 
+			//support TUint64. Client API will recreate TUint64 value from these TUint32 values.
+			if(id.Id())
+				{
+				//RWriteStream there is no API to writes a TUint64 value as a 64 bit value to stream
+				writeStream.WriteUint32L(I64HIGH(id.Id()));
+				writeStream.WriteUint32L(I64LOW(id.Id()));
+				}
+			}
+		writeStream.CommitL();
+		aMessage.WriteL(0, buf->Ptr(0));
+		CleanupStack::PopAndDestroy(2,buf);	//writeStream, buf 
+		}
+	else
+		{
+		aMessage.Write(2, TPckg<TInt>(arrayItemCount));
+		}	
+	
+	}
+		
+/**
+This method will return the number of client that are registered for Shutdown notification with ShutDown server.
+@return Number of registered clients.
+*/
+TInt CServShutdownServer::ClientArrayCount()
+	{
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	TInt count =0;
+    for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+		//Clients which are not registered for notification will not have RMessage in the session and hence 
+		//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 		
+		if(id.Id())
+			{
+			++count;
+			}
+		}
+	return count;
+	}
+#endif	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN	
+/**
+@return Non-zero, if all registered clients have pending requests.
+*/
+TBool CServShutdownServer::AllSessionsHavePendingRequest() const
+	{
+	TBool ret=ETrue;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
+		if (!mySession->HasPendingRequest())
+			{
+			ret=EFalse;
+			break;
+			}
+		}
+	return ret;
+	}
+
+
+/**
+@param aId Client's thread id.
+@return Non-zero if the client with this thread id has no pending request.
+*/
+EXPORT_C TBool CServShutdownServer::IsClientHung(TThreadId aId) const
+	{
+	TBool ret=EFalse;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
+
+		if (mySession->ClientThreadId()==aId)
+			{
+			if (!mySession->HasPendingRequest())
+				{
+				ret=ETrue;
+				break;
+				}
+			}
+		}
+	return ret;
+	}
+
+//
+// class CServShutdownSession
+//
+
+/**
+*/
+EXPORT_C CServShutdownSession::CServShutdownSession()
+	: CSession2(),
+	iCurrentEvent(-1), iOutstandingEvent(-1)
+	{}
+
+/**
+*/
+EXPORT_C CServShutdownSession::~CServShutdownSession()
+	{
+	}
+
+/**
+Standard phase-one factor method for creating CServShutdownSession instances.
+@return A pointer to the created CServShutdownSession instance.
+@leave KErrNoMemory Not enough memory to complete the operation.
+*/
+CServShutdownSession* CServShutdownSession::NewL()
+	{
+	return new (ELeave) CServShutdownSession;
+	}
+
+/**
+@return Non-zero, if the client has a pending request.
+*/
+TBool CServShutdownSession::HasPendingRequest() const
+	{
+	return !iPtr.IsNull();
+	}
+
+/**
+This method will complete the pending asychronous client request, effectivelly notifying it
+about the action, which the client has to do.
+@param aSaveType The type of the requested save action.
+*/
+void CServShutdownSession::NotifySave(MSaveObserver::TSaveType aSaveType)
+	{
+	const TInt saveType=(TInt)aSaveType;
+	if (HasPendingRequest())
+		{
+		iPtr.Complete(saveType);
+		iCurrentEvent=saveType;
+		}
+	else
+		{
+		if (iCurrentEvent==(TInt)MSaveObserver::ESaveAll || 
+			(iCurrentEvent==(TInt)MSaveObserver::ESaveQuick && 
+			 aSaveType==MSaveObserver::ESaveData))
+            {
+			iOutstandingEvent=saveType;
+			}
+		}
+	}
+
+/**
+This method dispatches all client requests to the appropriate method calls.
+@param aMessage The client's message
+@param aCompleteRequest An output parameter. If zero, the client request
+                will be completed later.
+*/
+void CServShutdownSession::DoServiceL(const RMessage2& aMessage, TBool& aCompleteRequest)
+	{
+	switch (aMessage.Function())
+		{
+	case TSaveOpCodeNotify:
+		RequestNotifyPowerDown(aMessage);
+		// don't complete async message yet
+		aCompleteRequest=EFalse;
+		break;
+	case TSaveOpCodeNotifyCancel:
+		RequestNotifyPowerDownCancel();
+		break;
+	case TSaveOpCodeHandleError:
+		User::Leave(KErrNotSupported);
+		break;
+	case TSaveOpCodePowerOff:
+		PowerOffL(aMessage);
+		break;
+	case TSaveOpCodeQueryPowerState:
+		PowerStateL(aMessage);
+		break;
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	case EEventObsAdaptHandleShutdown:
+	case EEventObsAdaptClientArrayCount:
+	case EEventObsAdaptClientArray:
+	case EEventObsAdaptIsClientHung:
+	case EEventObsAdaptGetShutdownState:
+		{
+		if (IsSsmGracefulShutdown())	// SSM should be used for device shutdown
+			{
+			switch(aMessage.Function())
+				{
+				case EEventObsAdaptHandleShutdown:
+					HandleShutdownEventL(aMessage);
+					break;
+				case EEventObsAdaptClientArrayCount:
+					ClientArrayCount(aMessage);
+					break;
+				case EEventObsAdaptClientArray:
+					ClientArrayL(aMessage);
+					break;
+				case EEventObsAdaptIsClientHung:
+					IsClientHung(aMessage);
+					break;
+				case EEventObsAdaptGetShutdownState:
+					GetShutdownState(aMessage);
+					break;			
+				}
+			}
+		break;	
+		}
+#endif // SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	}
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+void CServShutdownSession::HandleShutdownEventL(const RMessage2& aMessage)
+	{
+	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
+	TBool powerOff = static_cast <TBool> (aMessage.Int1());
+	TPowerState powerEvent = static_cast <TPowerState> (aMessage.Int2());
+
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->HandleShutdownEventL(action, powerOff, powerEvent);
+	}
+
+void CServShutdownSession::ClientArrayCount(const RMessage2& aMessage) const
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	const TInt count = server->ClientArrayCount();
+	aMessage.Write(0, TPckg<TInt>(count));
+	}
+/*
+This function will write all registered client array in a buffer only when client side array count is equal to server side array count
+else aMessage will contain an empty buffer and server side array count .
+@param aMessage consists of buffer, clientside array count and server side array count 
+*/
+void CServShutdownSession::ClientArrayL(const RMessage2& aMessage)
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->ClientArrayL(aMessage);
+	}
+
+void CServShutdownSession::IsClientHung(const RMessage2& aMessage) const
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	TThreadId threadId = static_cast <TThreadId>(aMessage.Int0());
+	TBool clientHung = server->IsClientHung(threadId);
+
+	aMessage.Write(1, TPckg<TBool>(clientHung));
+	}
+
+void CServShutdownSession::GetShutdownState(const RMessage2& aMessage) const
+	{
+	TBool powerOff;
+	TBool allSessionsHavePendingRequest;
+
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->GetShutdownState(powerOff, allSessionsHavePendingRequest);
+	aMessage.Write(0, TPckg<TBool>(powerOff));
+	aMessage.Write(1, TPckg<TBool>(allSessionsHavePendingRequest));
+	}
+
+#endif 	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+/**
+Handles the servicing of client requests passed to the shutdown server.
+@param	aMessage The message containing the client request.
+*/
+EXPORT_C void CServShutdownSession::ServiceL(const RMessage2& aMessage)
+	{
+	TBool aCompleteRequest=ETrue;
+	TRAPD(error, DoServiceL(aMessage, aCompleteRequest));
+	if (aCompleteRequest)
+		{
+		aMessage.Complete(error);
+		}
+	}
+
+/**
+This method processes a client-side registration request. It is an asynchronous request,
+which will be completed later, when powerdown/low memory event occurs.
+@param	aMessage The message containing the client request.
+*/
+void CServShutdownSession::RequestNotifyPowerDown(const RMessage2& aMessage)
+	{
+	iCurrentEvent=-1;
+	iPtr = aMessage;
+
+	if (iOutstandingEvent!=-1)
+		{
+		NotifySave((MSaveObserver::TSaveType)iOutstandingEvent);
+		iOutstandingEvent=-1;
+		}
+	//The thread variable is just a dummy variable(input for CServShutdownServer::HandlePowerNotifRequest)
+	//and is not used inside the function at all, it is there to preserve BC.
+	RThread thread;
+	static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()))->HandlePowerNotifRequest(thread);
+	}
+
+/**
+This method cancels the client registration, completing the requests with 
+KErrCancel error code.
+*/
+void CServShutdownSession::RequestNotifyPowerDownCancel()
+	{
+	if (HasPendingRequest())
+		iPtr.Complete(KErrCancel);
+	}
+
+/**
+@return The client's thread id.
+*/
+TThreadId CServShutdownSession::ClientThreadId() const
+    {
+    TThreadId id = NULL;
+    RThread clientThread;
+    //Clients which are not registered for notification will not have RMessage in the session and hence 
+	//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 
+    if(!iPtr.IsNull() && KErrNone == iPtr.Client(clientThread))
+    	{	
+		id = clientThread.Id();	
+    	}
+    clientThread.Close();	
+    return id;
+    }
+
+
+/**
+This method should be used only with  SYSLIBS_TEST macro defined and can be used to 
+initiate a powerdown sequence.
+Without SYSLIBS_TEST macro defined the method will panic the client with 
+KErrNotSupported error code.
+@param	aMessage The message containing the client request.
+*/
+#ifdef SYSLIBS_TEST
+void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
+    {
+	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
+    TBool powerOff = static_cast <TBool> (aMessage.Int1());
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+    server->HandleShutdownEventL(action, powerOff);
+    }
+#else
+void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
+    {
+    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
+    }
+#endif//SYSLIBS_TEST
+
+/**
+This method should be used only with SYSLIBS_TEST macro defined and can be used to 
+get the power state of the server.
+Without SYSLIBS_TEST macro defined the method will panic the client with 
+KErrNotSupported error code.
+@param	aMessage The message containing the client request.
+*/
+#ifdef SYSLIBS_TEST
+void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
+    {
+    CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+    TBool powerOff = server->IsPowerOff();
+    TPckg<TBool> powerOffPckg(powerOff);
+    aMessage.WriteL(0,powerOffPckg);
+    }
+#else
+void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
+    {
+    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
+    }
+#endif//SYSLIBS_TEST
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32base.h>
+
+//all the constant value needs to be in a separate file
+//Care should be taken not to define the exported data in the same source file in which
+//they are referred, lest the compiler inline's it. If inlined, the data cannot be patched.
+//Hence, the definition of data must be put in a separate source file and they must be 
+//referred in other source files by using 'extern' qualifier
+
+
+/**
+Patchable constant used in the shutdown server. 
+Used to calculate the shutdown timer with KShtdwnTimeoutClient.
+It represents the base timeout value in microseconds.
+
+The timeout is calculated as:
+KShtdwnTimeoutBase + KShtdwnTimeoutClient * numClients,
+where numClients is the number of connecting clients.
+
+If the timeout value is;
+-1, the timer is not used, the server will wait for all client's registration 
+    before executing the shutdown;
+0,  the timer expires immediately, the server will execute the shutdown immediately, 
+    not waiting for any client's re-registration.
+other value greater than 0, the server will wait a certain period of time for the clients' registration 
+    and execute the shutdown if the timer expires or all clients re-register.
+    
+Licensees who wish to alter these patchable constants will need to define 
+these ROM build-time macros in their product HRH or IBY files.
+
+The new values must follow the rule:
+KShtdwnTimeoutBase >= -1 and
+KShtdwnTimeoutClient >= 0.
+
+Otherwise, the server panics with KErrNotSupported. 
+
+@internalComponent
+@see KShtdwnTimeoutClient
+*/
+EXPORT_C extern const TInt32 KShtdwnTimeoutBase = 1000000;
+
+/**
+Patchable data used in the shutdown server. 
+Used to calculate the shutdown timer with KShtdwnTimeoutBase.
+It represents the timeout value for each client in microseconds.
+@internalComponent
+@see KShtdwnTimeoutBase
+*/
+EXPORT_C extern const TInt32 KShtdwnTimeoutClient = 500000;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef SHUTDOWNSRVPATCHDATA_H
+#define SHUTDOWNSRVPATCHDATA_H
+
+#include <e32base.h>
+
+IMPORT_C extern const TInt32 KShtdwnTimeoutBase;
+IMPORT_C extern const TInt32 KShtdwnTimeoutClient;
+
+#endif // SHUTDOWNSRVPATCHDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "shutdowntimer.h"
+#include "savepriv.h"
+#include "shutdownsrv.h"
+#include "shutdownsrvpatchdata.h"
+
+/*
+Patchable data KShtdwnTimeoutBase can be configured as -1 not to apply the timer 
+as backward compatibility.
+*/
+const TInt32 KShtdwnTimeoutNoApply = -1;
+
+/**
+Standard phase-one factory method for creating CShutdownTimer instances.
+It might return a NULL pointer if the patchable constant KShtdwnTimeoutBase has been configured 
+as -1 which indicates no timer should be started.
+@param aShtdwnSrv The reference to CServShutdownServer.
+@return 0 if no timer should be started, otherwise a pointer to CShutdownTimer object.
+@leave Some system-wide error codes including KErrNoMemory.
+@panic KErrNotSupported Incorrect patchable variables configuration.
+*/
+CShutdownTimer* CShutdownTimer::NewL(CServShutdownServer& aShtdwnSrv)
+	{ 
+	__ASSERT_ALWAYS( (KShtdwnTimeoutBase >= KShtdwnTimeoutNoApply) && (KShtdwnTimeoutClient >= 0), \
+		User::Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported));
+
+	CShutdownTimer* self = 0;
+	if(KShtdwnTimeoutBase > KShtdwnTimeoutNoApply)
+		{
+		self = new(ELeave) CShutdownTimer(aShtdwnSrv);
+		CleanupStack::PushL(self);
+		self->ConstructL();
+		CleanupStack::Pop(self);
+		}
+	
+	return self;
+	}
+
+/**
+Constructor
+@param aShtdwnSrv The reference to CServShutdownServer
+*/
+CShutdownTimer::CShutdownTimer(CServShutdownServer& aShtdwnSrv):
+	CTimer(CActive::EPriorityStandard), iShtdwnSrv(aShtdwnSrv)
+	{
+	CActiveScheduler::Add(this);
+    }
+   
+/**
+Removes the timer object from the active scheduler's list if it has been added.
+*/
+void CShutdownTimer::DoCancel()
+	{
+	// Do nothing
+	}
+	
+/**
+Calculates the timeout value by the number of the clients and starts the timer.
+@param aNumClients The number of the clients.
+*/
+void CShutdownTimer::Start(TInt aNumClients)
+	{
+	TInt32 timeout = KShtdwnTimeoutBase + KShtdwnTimeoutClient * aNumClients;
+	After(timeout);
+	}
+
+	
+/**
+Gets called when the timeout expires.
+Calls CServShutdownServer::SwitchOff() to execute the switch off.
+*/
+void CShutdownTimer::RunL()
+	{
+	iShtdwnSrv.SwitchOff();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(SHUTDOWNTIMER_H)
+#define SHUTDOWNTIMER_H
+
+#include <e32base.h>
+
+class CServShutdownServer;
+/**
+This class describes a timer object. 
+Its RunL() implemantation calls CServShutdownServer::SwitchOff() to execute the switch off 
+when timeout expires.
+@internalTechnology
+*/
+NONSHARABLE_CLASS(CShutdownTimer): public CTimer
+	{
+public:
+	static CShutdownTimer* NewL(CServShutdownServer& aShtdwnSrv);
+	void DoCancel();
+	void Start(TInt aNumClients);
+protected:
+	virtual void RunL();
+private:
+	CShutdownTimer(CServShutdownServer& aShtdwnSrv);
+private:
+	CServShutdownServer& iShtdwnSrv;
+	};
+#endif//SHUTDOWNTIMER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ColorConverter.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <icl/imageprocessor.h>
+
+
+_LIT(KBitmapUtilPanicCategory, "TImageBitmapUtil");
+GLDEF_C void Panic(TImageBitmapUtilPanic aError)
+	{
+	User::Panic(KBitmapUtilPanicCategory, aError);
+	}
+
+/**
+@see TColorConvertor.
+*/
+class TGray2Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>7; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray2(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>7;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray4Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>6; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray4(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>6;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray16Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>4; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray16(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>4;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray256Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray256(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Color16(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->Color16();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor256Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Color256(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color256(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = (aColorBuffer++)->Color256();
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor4KConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color4K(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color4K(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->_Color4K();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor64KConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color64K(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color64K(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->_Color64K();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Internal(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16M(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MUConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color16MU(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16MU(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					// do a Mem::Copy as this ensures that top byte (which
+					// in a 16MA context is interpreted as the alpha value)
+					// is 0xFF (opaque) instead of 0x00 (transparent)
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MAConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color16MA(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16MA(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+	
+TColorConvertor* CreateColorConvertorL(TDisplayMode aDisplayMode)
+	{
+	switch (aDisplayMode)
+		{
+	case EGray2:		return new(ELeave) TGray2Convertor;
+	case EGray4:		return new(ELeave) TGray4Convertor;
+	case EGray16:		return new(ELeave) TGray16Convertor;
+	case EGray256:		return new(ELeave) TGray256Convertor;
+	case EColor16:		return new(ELeave) TColor16Convertor;
+	case EColor256:		return new(ELeave) TColor256Convertor;
+	case EColor4K:		return new(ELeave) TColor4KConvertor;
+	case EColor64K:		return new(ELeave) TColor64KConvertor;
+	case EColor16M:		return new(ELeave) TColor16MConvertor;
+	case EColor16MU:	return new(ELeave) TColor16MUConvertor;
+	case EColor16MA:	return new(ELeave) TColor16MAConvertor;
+	default:		
+		User::Leave(KErrNotSupported);
+		return NULL; //Keep the compiler happy!!
+		};	
+	}
+	
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ImageProcessor.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2535 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <icl/imageprocessor.h>
+#include "ImageProcessorPriv.h"
+#include "ImageUtils.h"
+#include "ImageClientMain.h"
+
+//Size of dynamically allocated buffers used by CPixelWriter & CMonochromePixelWriter
+const TInt KPixelWriterBufferSize = 1024;
+const TInt KPixelWriterBufferThreeQuarter = 768;
+
+/**
+Constructor for this class.
+*/
+EXPORT_C CImageProcessorExtension::CImageProcessorExtension()
+:iOperation(EDecodeNormal)
+	{
+	}
+
+/**
+Destructor for this class.
+*/
+EXPORT_C CImageProcessorExtension::~CImageProcessorExtension()
+	{
+	}
+
+/**
+Sets the area of interest of the image to be decoded.
+
+@param aRect
+	   A reference to a TRect that specifies the location and size of the region to be decoded.
+
+*/
+EXPORT_C void CImageProcessorExtension::SetClippingRect(const TRect& aRect)
+	{
+	iClippingRect = aRect;
+	}
+
+/**
+Sets the scaling coefficient for the decode.
+
+@param aScalingCoeff
+	   The scaling coefficient.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetScaling(TInt aScalingCoeff)
+	{
+	iScalingCoeff = aScalingCoeff;
+	}
+
+/**
+Sets the desired size of the destination image for the decode.
+
+@param aDesiredSize
+	   The desired size of the destination image.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetScaling(const TSize& aDesiredSize)
+	{
+	iDesiredSize = aDesiredSize;
+	}
+
+/**
+Sets the operation to be applied to the image.
+
+@param aOperation
+	   The operation to apply to the image.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetOperation(TTransformOptions aOperation)
+	{
+	iOperation = aOperation;
+	}
+
+/**
+Sets an initial one-off number of scanlines to be skipped.
+This must be called prior to calling SetYPosIncrement(),
+if it is to be used.
+
+@param  aNumberOfScanlines
+        The number of scanlines to skip.
+        
+@see CImageProcessor::SetYPosIncrement()
+*/
+EXPORT_C void CImageProcessorExtension::SetInitialScanlineSkipPadding(TInt aNumberOfScanlines)
+	{
+	iNumberOfScanlinesToSkip = aNumberOfScanlines;
+	}
+
+//
+// ImageProcessorUtility
+//
+
+//
+//	CColorImageProcessor
+//
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+void CColorImageProcessor::CreateBlockBufferL(TInt aBlockArea)
+	{
+	delete[] iBlockBuffer;
+	iBlockBuffer = NULL;
+
+	if(aBlockArea)
+		iBlockBuffer = new (ELeave) TRgb[aBlockArea];
+
+	iBlockArea = aBlockArea;
+	}
+
+/**
+ * Destructor.
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+CColorImageProcessor::~CColorImageProcessor()
+	{
+	delete[] iBlockBuffer;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	TBool returnValue = EFalse;
+
+	while(aCount--)
+		returnValue |= SetPixel(aColor);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetPixels(TRgb* aColorBuffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue |= SetPixel(*aColorBuffer++);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixel(TInt aGray256)
+	{
+	return SetPixel(TRgb(aGray256,aGray256,aGray256));
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	return SetPixelRun(TRgb(aGray256,aGray256,aGray256),aCount);
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		{
+		TUint32 gray256 = *aGray256Buffer++;
+		returnValue = SetPixel(TRgb(gray256,gray256,gray256));
+		}
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	ASSERT(iBlockBuffer);
+
+	TRgb* blockBufferPtr = iBlockBuffer;
+	TRgb* blockBufferPtrLimit = blockBufferPtr+iBlockArea;
+
+	while(blockBufferPtr<blockBufferPtrLimit)
+		{
+		TUint32 gray256 = *aGray256Buffer++;
+		*blockBufferPtr++ = TRgb(gray256,gray256,gray256);
+		}
+
+	return SetPixelBlock(iBlockBuffer);
+	}
+
+//
+//	CMonochromeImageProcessor
+//
+
+/**
+ * @see CImageProcessor.
+ */
+void CMonochromeImageProcessor::CreateBlockBufferL(TInt aBlockArea)
+	{
+	delete[] iBlockBuffer;
+	iBlockBuffer = NULL;
+
+	iBlockBuffer = new (ELeave) TUint32[aBlockArea];
+	iBlockArea = aBlockArea;
+	}
+
+/**
+ * Destructor.
+ * @see CImageProcessor.
+ */
+CMonochromeImageProcessor::~CMonochromeImageProcessor()
+	{
+	delete []iBlockBuffer;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	TBool returnValue = EFalse;
+
+	while(aCount--)
+		returnValue = SetMonoPixel(aGray256);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue = SetMonoPixel(*aGray256Buffer++);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixel(TRgb aColor)
+	{
+	return SetMonoPixel(TColorConvertor::RgbToMonochrome(aColor));
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	return SetMonoPixelRun(TColorConvertor::RgbToMonochrome(aColor),aCount);
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixels(TRgb* aColorBuffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue = SetMonoPixel(TColorConvertor::RgbToMonochrome(*aColorBuffer++));
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	ASSERT(iBlockBuffer);
+
+	TUint32* blockBufferPtr = iBlockBuffer;
+	TUint32* blockBufferPtrLimit = blockBufferPtr+iBlockArea;
+
+	while(blockBufferPtr<blockBufferPtrLimit)
+		*blockBufferPtr++ = TColorConvertor::RgbToMonochrome(*aColorBuffer++);
+
+	return SetMonoPixelBlock(iBlockBuffer);
+	}
+
+//
+// CPixelWriter
+//
+
+/**
+ *
+ * Static factory function to create CPixelWriter objects.
+ *
+ * @return  Pointer to a fully constructed CPixelWriter object. 
+ */
+CPixelWriter* CPixelWriter::NewL()
+	{
+	return new(ELeave) CPixelWriter;
+	}
+
+/**
+ *
+ * Default constructor for this class.
+ */
+CPixelWriter::CPixelWriter():
+	iYInc(1)
+	{}	
+	
+/**
+ *
+ * Destructor.
+ */
+CPixelWriter::~CPixelWriter()
+	{
+	Reset();
+	ASSERT(iColorConv==NULL);
+	ASSERT(iRgbBuffer==NULL);
+	ASSERT(iIndexBuffer==NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CPixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	DoPrepareL(aBitmap,aImageRect,NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CPixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	DoPrepareL(aBitmap,aImageRect,&aRgbBlockSize);
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc - iNumberOfScanlinesToSkip;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetLineRepeat(TInt aLineRepeat)
+	{
+	ASSERT(aLineRepeat>=0);
+	iLineRepeat = aLineRepeat;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixel(TRgb aColor)
+	{
+	*iRgbBufferPtr++ = aColor;
+
+	if (iRgbBufferPtr == iRgbBufferPtrLimit)
+		return FlushPixels();
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	while(aCount)
+		{
+		TRgb* ptr = iRgbBufferPtr;
+		TRgb* limit = ptr+aCount;
+		if(limit>iRgbBufferPtrLimit)
+			limit = iRgbBufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aCount -= n;
+
+		if(n&1)
+			*ptr++ = aColor;
+		if(n&2)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+		if(n&4)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+
+		iRgbBufferPtr = ptr;
+
+		if(ptr!=iRgbBufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixels(TRgb* aColorBuffer, TInt aBufferLength)
+	{
+	if (aBufferLength >= KPixelWriterBufferThreeQuarter)
+		{
+		TRgb* rgbBuffer = iRgbBuffer;
+
+		if (iRgbBufferPtr != rgbBuffer) 
+			{
+			// flush rest of the pixels 
+			if(FlushPixels())
+				{
+				return ETrue;
+				}
+			}
+
+		// use external buffer without copying data
+		TBool rValue = EFalse;
+
+		while (aBufferLength && !rValue)
+			{
+			TInt bufferLength = (aBufferLength>KPixelWriterBufferSize)?KPixelWriterBufferSize:aBufferLength;
+			iRgbBuffer = aColorBuffer;
+			iRgbBufferPtr = aColorBuffer+bufferLength;
+			iRgbBufferPtrLimit = aColorBuffer+bufferLength;
+
+			rValue = FlushPixels();
+			aBufferLength -= bufferLength;
+			aColorBuffer += bufferLength;
+			}
+		
+		// restore pointers to inner buffer
+		iRgbBuffer = rgbBuffer;
+		iRgbBufferPtr = rgbBuffer;
+		iRgbBufferPtrLimit = rgbBuffer+KPixelWriterBufferSize;
+		
+		return rValue;
+		}
+
+	while(aBufferLength)
+		{
+		TRgb* ptr = iRgbBufferPtr;
+		TRgb* limit = ptr+aBufferLength;
+		if(limit>iRgbBufferPtrLimit)
+			limit = iRgbBufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aBufferLength -= n;
+
+		if(n&1)
+			*ptr++ = *aColorBuffer++;
+		if(n&2)
+			{
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			}
+
+		iRgbBufferPtr = ptr;
+
+		if(ptr!=iRgbBufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	ASSERT(aColorBuffer);
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	if (iDisplayMode==EColor16M || iDisplayMode == EColor16MU || iDisplayMode == EColor16MA)
+		{
+		indexBufferPtr = reinterpret_cast<TUint32*>(aColorBuffer);
+		}
+	else
+		{
+		SetPixelBlockIndex(aColorBuffer);
+		}
+
+	TInt ySkip = 0;
+	if(iNumberOfScanlinesToSkip > 0)
+		{
+		ySkip = iNumberOfScanlinesToSkip * iBlockSize.iWidth;
+		indexBufferPtr += ySkip;
+		ySkip = iNumberOfScanlinesToSkip;
+		iNumberOfScanlinesToSkip = 0; // Only call this conditional once.
+		}
+	
+	TInt imageWidth = iImageRegion.iBr.iX;
+	TInt imageHeight = iImageRegion.iBr.iY;
+	TInt endOfImage = iDrawBottomUp ? -1 : imageHeight;
+	
+	// The minimum number of pixels to render horizontally
+	TInt minWidth = Min(iBlockSize.iWidth, imageWidth - iPos.iX);
+	
+	// The next vertical position.  Note that this is usually the height of the block, but 
+	// in the case of the first block when clipping is required, this will be reduced by ySkip.
+	TInt nextYPos = iDrawBottomUp ?	(iPos.iY - iBlockSize.iHeight) + ySkip :
+									(iPos.iY + iBlockSize.iHeight) - ySkip;
+	
+	TInt endPosition = iDrawBottomUp ? Max(nextYPos, endOfImage) : Min(nextYPos, endOfImage);
+	
+	// Once the first block has been processed, iYInc is set to block height
+	iYInc = iDrawBottomUp ? -iBlockSize.iHeight + ySkip : iBlockSize.iHeight - ySkip;
+				
+	// Skip unnecessary pixels (for cropping, or padding when rotated)
+	indexBufferPtr += iPixelPadding;
+	
+	TPoint pos(iPos);
+	iUtil.Begin();
+	for(;iDrawBottomUp ? pos.iY > endPosition : pos.iY < endPosition; iDrawBottomUp ? pos.iY-- : pos.iY++)
+		{
+		iUtil.SetPos(pos);
+		iUtil.SetPixels(indexBufferPtr, minWidth);
+		indexBufferPtr += iBlockSize.iWidth; // next line in block
+		}
+	iUtil.End();
+
+	iPos.iX += iBlockSize.iWidth;
+	
+	if (iPos.iX >= imageWidth)
+		{
+		return NewLine();
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::FlushPixels()
+	{
+	TRgb* rgbBufferPtrLimit = iRgbBufferPtr;
+	iRgbBufferPtr = iRgbBuffer;
+
+	if(iPos.iY < iImageRegion.iTl.iY || iPos.iY >= iImageRegion.iBr.iY)
+		return ETrue;
+
+	iUtil.Begin();
+
+	TBool finished = EFalse;
+	for (TRgb* rgbBufferPtr = iRgbBuffer; rgbBufferPtr < rgbBufferPtrLimit; )
+		{
+		TInt pixelsToSkip = Min(rgbBufferPtrLimit - rgbBufferPtr,iPixelsToSkip);
+		rgbBufferPtr += pixelsToSkip;
+		iPixelsToSkip -= pixelsToSkip;
+
+		if(iPixelsToSkip)
+			break;
+
+		TInt pixelsToFlush = Min(rgbBufferPtrLimit - rgbBufferPtr,iImageRegion.iBr.iX - iPos.iX);
+
+		if(!pixelsToFlush)
+			break;
+
+		SetPixelBufferIndex(rgbBufferPtr,pixelsToFlush);
+		rgbBufferPtr += pixelsToFlush;
+
+		TBool fillDown = iYInc > 0;
+		TPoint pos(iPos);
+		TInt posYLimit;
+		if(fillDown)
+			posYLimit = Min(pos.iY + iLineRepeat + 1 ,iImageRegion.iBr.iY);
+		else
+			posYLimit = Max(pos.iY - iLineRepeat - 1 ,iImageRegion.iTl.iY-1);
+
+		for(;fillDown ? pos.iY < posYLimit : pos.iY > posYLimit; fillDown ? pos.iY++ : pos.iY--)
+			{
+			if(!iUtil.SetPos(pos-iImageRegion.iTl))
+				{
+				iUtil.End();
+				return ETrue;
+				}
+			iUtil.SetPixels(iIndexBuffer,pixelsToFlush);
+			}
+
+		iPos.iX += pixelsToFlush;
+		if (iPos.iX >= iImageRegion.iBr.iX)
+			{
+			finished = NewLine();
+			if(finished)
+				break;
+			}
+		}
+
+	iUtil.End();
+
+	return finished;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition))
+		{
+		FlushPixels();
+		iPixelsToSkip = 0;
+		iPos = aPosition;
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CPixelWriter::Reset()
+	{
+	delete iColorConv;
+	iColorConv = NULL;
+
+	delete[] iRgbBuffer;
+	iRgbBuffer = NULL;
+
+	delete[] iIndexBuffer;
+	iIndexBuffer = NULL;
+
+	iPos.SetXY(0,0);
+	iPixelsToSkip = 0;
+	iImageRegion.SetRect(0,0,0,0);
+	iBlockSize.SetSize(0,0);
+	
+	iDrawBottomUp = EFalse;
+	}
+
+void CPixelWriter::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	if( (aImageRect.iTl.iX<0) || (aImageRect.iTl.iY<0) || (aImageRect.Size().iWidth>aBitmap.SizeInPixels().iWidth) || (aImageRect.Size().iHeight>aBitmap.SizeInPixels().iHeight) )
+		{
+		User::Leave(KErrArgument);
+		}
+
+	Reset();
+	
+	iDisplayMode = aBitmap.DisplayMode();
+
+	iImageRegion = aImageRect;
+
+	ASSERT(iColorConv==NULL);
+	iColorConv = TColorConvertor::NewL(aBitmap.DisplayMode());
+	iUtil.SetBitmapL(&aBitmap);
+
+	if (aBlockSize)
+		{
+		if (aBlockSize->iWidth <= 0 || aBlockSize->iHeight <= 0)
+			{
+			User::Leave(KErrArgument);
+			}
+
+		iBlockSize = *aBlockSize;
+		iBlockArea = iBlockSize.iWidth * iBlockSize.iHeight;
+		
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[iBlockArea];
+
+		iIndexBufferPtrLimit = iIndexBuffer + iBlockArea;
+		CreateBlockBufferL(iBlockArea);
+		
+		switch(iOperation)
+			{
+			case EDecodeRotate180:
+			case EDecodeRotate270:
+			case EDecodeHorizontalFlip:
+			case EDecodeVerticalFlipRotate90:
+				iDrawBottomUp = ETrue;
+				break;
+			default:
+				iDrawBottomUp = EFalse;
+			}
+		
+		iYInc = iDrawBottomUp ? -iBlockSize.iHeight : iBlockSize.iHeight;
+		iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? iImageRegion.iBr.iY - 1 : 0);
+		iEndPosition.SetXY(iImageRegion.iBr.iX, iDrawBottomUp ?
+							iImageRegion.iTl.iY - 1 : iImageRegion.iBr.iY);
+		iPos = iStartPosition;
+		}
+	else
+		{
+		iPos = iImageRegion.iTl;
+		iStartPosition = iPos;
+		iEndPosition = aImageRect.iBr;
+		
+		ASSERT(iRgbBuffer == NULL);
+		iRgbBuffer = new(ELeave) TRgb[KPixelWriterBufferSize];
+
+		iRgbBufferPtr = iRgbBuffer;
+		iRgbBufferPtrLimit = iRgbBuffer + KPixelWriterBufferSize;
+
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iIndexBufferPtrLimit = iIndexBuffer + KPixelWriterBufferSize;
+		}
+	}
+
+TBool CPixelWriter::NewLine()
+	{
+	iPos.iX = iStartPosition.iX;
+	iPos.iY += iYInc;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+	
+	iPixelsToSkip = iPixelPadding;
+	return EFalse;
+	}
+
+void CPixelWriter::SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	iColorConv->ColorToIndex(REINTERPRET_CAST(TInt*,iIndexBuffer),aColorBuffer,aCount);
+	}
+
+void CPixelWriter::SetPixelBlockIndex(TRgb* aColorBuffer)
+	{
+	iColorConv->ColorToIndex(REINTERPRET_CAST(TInt*,iIndexBuffer),aColorBuffer,iIndexBufferPtrLimit-iIndexBuffer);
+	}
+
+//
+//	CMonochromePixelWriter
+//
+
+/**
+ *
+ * Static factory function to create CMonochromePixelWriter objects.
+ *
+ * @return  Pointer to a fully constructed CMonochromePixelWriter object. 
+ */
+CMonochromePixelWriter* CMonochromePixelWriter::NewL()
+	{
+	return new(ELeave) CMonochromePixelWriter;
+	}
+
+/**
+ *
+ * Default constructor for this class.
+ */
+CMonochromePixelWriter::CMonochromePixelWriter():
+	iYInc(1)
+	{}
+
+/**
+ *
+ * Destructor
+ */
+CMonochromePixelWriter::~CMonochromePixelWriter()
+	{
+	Reset();
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CMonochromePixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	DoPrepareL(aBitmap,aImageRect,NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CMonochromePixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	DoPrepareL(aBitmap,aImageRect,&aRgbBlockSize);
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc - iNumberOfScanlinesToSkip;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetLineRepeat(TInt aLineRepeat)
+	{
+	ASSERT(aLineRepeat>=0);
+	iLineRepeat = aLineRepeat;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixel(TInt aGray256)
+	{
+	*iGray256BufferPtr++ = aGray256;
+
+	if (iGray256BufferPtr != iGray256BufferPtrLimit)
+		return EFalse;
+
+	return FlushPixels();
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	while(aCount)
+		{
+		TUint32* ptr = iGray256BufferPtr;
+		TUint32* limit = ptr+aCount;
+		if(limit>iGray256BufferPtrLimit)
+			limit = iGray256BufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aCount -= n;
+
+		if(n&1)
+			*ptr++ = aGray256;
+		if(n&2)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+		if(n&4)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+
+		iGray256BufferPtr = ptr;
+
+		if(ptr!=iGray256BufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+
+	if (aBufferLength >= KPixelWriterBufferThreeQuarter)
+		{
+		TUint32* gray256Buffer = iGray256Buffer;
+
+		if (iGray256BufferPtr != gray256Buffer) 
+			{
+			// flush rest of the pixels 
+			if(FlushPixels())
+				{
+				return ETrue;
+				}
+			}
+
+		// use external buffer without copying data
+		TBool rValue = EFalse;
+		
+		while (aBufferLength && !rValue)
+			{
+			TInt bufferLength = (aBufferLength>KPixelWriterBufferSize)?KPixelWriterBufferSize:aBufferLength;
+			iGray256Buffer = aGray256Buffer;
+			iGray256BufferPtr = aGray256Buffer+bufferLength;
+			iGray256BufferPtrLimit = aGray256Buffer+bufferLength;
+
+			rValue = FlushPixels();
+			aBufferLength -= bufferLength;
+			aGray256Buffer += bufferLength;
+			}
+		
+		// restore pointers to inner buffer
+		iGray256Buffer = gray256Buffer;
+		iGray256BufferPtr = gray256Buffer;
+		iGray256BufferPtrLimit = gray256Buffer+KPixelWriterBufferSize;
+		
+		return rValue;
+		}
+
+	while(aBufferLength)
+		{
+		TUint32* ptr = iGray256BufferPtr;
+		TUint32* limit = ptr+aBufferLength;
+		if(limit>iGray256BufferPtrLimit)
+			limit = iGray256BufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aBufferLength -= n;
+
+		if(n&1)
+			*ptr++ = *aGray256Buffer++;
+		if(n&2)
+			{
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			}
+
+		iGray256BufferPtr = ptr;
+
+		if(ptr!=iGray256BufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	SetPixelBlockIndex(aGray256Buffer);
+	
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TInt ySkip = 0;
+	if(iNumberOfScanlinesToSkip > 0)
+		{
+		ySkip = iNumberOfScanlinesToSkip * iBlockSize.iWidth;
+		indexBufferPtr += ySkip;
+		ySkip = iNumberOfScanlinesToSkip;
+		iNumberOfScanlinesToSkip = 0; // Only call this conditional once.
+		}
+	
+	TInt imageWidth = iImageRegion.iBr.iX;
+	TInt imageHeight = iImageRegion.iBr.iY;
+	TInt endOfImage = iDrawBottomUp ? -1 : imageHeight;
+	
+	// The minimum number of pixels to render horizontally
+	TInt minWidth = Min(iBlockSize.iWidth, imageWidth - iPos.iX);
+	
+	// The next vertical position.  Note that this is usually the height of the block, but 
+	// in the case of the first block when clipping is required, this will be reduced by ySkip.
+	TInt nextYPos = iDrawBottomUp ?	(iPos.iY - iBlockSize.iHeight) + ySkip :
+										(iPos.iY + iBlockSize.iHeight) - ySkip;
+	
+	TInt endPosition = iDrawBottomUp ? Max(nextYPos, endOfImage) : Min(nextYPos, endOfImage);
+	
+	// Once the first block has been processed, iYInc is set to block height
+	iYInc = iDrawBottomUp ? -iBlockSize.iHeight + ySkip : iBlockSize.iHeight - ySkip;
+				
+	// Skip unnecessary pixels (for cropping, or padding when rotated)
+	indexBufferPtr += iPixelPadding;
+	
+	TPoint pos(iPos);
+	iUtil.Begin();
+	for(;iDrawBottomUp ? pos.iY > endPosition : pos.iY < endPosition; iDrawBottomUp ? pos.iY-- : pos.iY++)
+		{
+		iUtil.SetPos(pos);
+		iUtil.SetPixels(indexBufferPtr, minWidth);
+		indexBufferPtr += iBlockSize.iWidth; // next line in block
+		}
+	iUtil.End();
+
+	iPos.iX += iBlockSize.iWidth;
+	
+	if (iPos.iX >= imageWidth)
+		{
+		return NewLine();
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::FlushPixels()
+	{
+	TUint32* gray256BufferPtrLimit = iGray256BufferPtr;
+	iGray256BufferPtr = iGray256Buffer;
+
+	if(iPos.iY < iImageRegion.iTl.iY || iPos.iY >= iImageRegion.iBr.iY)
+		return ETrue;
+
+	iUtil.Begin();
+
+	TBool finished = EFalse;
+	for (TUint32* gray256BufferPtr = iGray256Buffer; gray256BufferPtr < gray256BufferPtrLimit; )
+		{
+		TInt pixelsToSkip = Min(gray256BufferPtrLimit - gray256BufferPtr,iPixelsToSkip);
+		gray256BufferPtr += pixelsToSkip;
+		iPixelsToSkip -= pixelsToSkip;
+
+		if(iPixelsToSkip)
+			break;
+
+		TInt pixelsToFlush = Min(gray256BufferPtrLimit - gray256BufferPtr,iImageRegion.iBr.iX - iPos.iX);
+
+		if(!pixelsToFlush)
+			break;
+
+		SetPixelBufferIndex(gray256BufferPtr,pixelsToFlush);
+		gray256BufferPtr += pixelsToFlush;
+
+		TBool fillDown = iYInc > 0;
+		TPoint pos(iPos);
+		TInt posYLimit;
+		if(fillDown)
+			posYLimit = Min(pos.iY + iLineRepeat + 1 ,iImageRegion.iBr.iY);
+		else
+			posYLimit = Max(pos.iY - iLineRepeat - 1 ,iImageRegion.iTl.iY-1);
+
+		for(;fillDown ? pos.iY < posYLimit : pos.iY > posYLimit; fillDown ? pos.iY++ : pos.iY--)
+			{
+			if(!iUtil.SetPos(pos-iImageRegion.iTl))
+				{
+				iUtil.End();
+				return ETrue;
+				}
+			iUtil.SetPixels(iIndexBuffer,pixelsToFlush);
+			}
+
+		iPos.iX += pixelsToFlush;
+		if (iPos.iX >= iImageRegion.iBr.iX)
+			{
+			finished = NewLine();
+			if(finished)
+				break;
+			}
+		}
+
+	iUtil.End();
+
+	return finished;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition))
+		{
+		FlushPixels();
+		iPixelsToSkip = 0;
+		iPos = aPosition;
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CMonochromePixelWriter::Reset()
+	{
+	delete iColorConv;
+	iColorConv = NULL;
+
+	delete[] iGray256Buffer;
+	iGray256Buffer = NULL;
+
+	delete[] iIndexBuffer;
+	iIndexBuffer = NULL;
+
+	iPos.SetXY(0,0);
+	iPixelsToSkip = 0;
+	iImageRegion.SetRect(0,0,0,0);
+	iBlockSize.SetSize(0,0);
+	
+	iDrawBottomUp = EFalse;
+	}
+
+void CMonochromePixelWriter::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	if( (aImageRect.iTl.iX<0) || (aImageRect.iTl.iY<0) || (aImageRect.Size().iWidth>aBitmap.SizeInPixels().iWidth) || (aImageRect.Size().iHeight>aBitmap.SizeInPixels().iHeight) )
+		{
+		User::Leave(KErrArgument);
+		}
+
+	Reset();
+
+	iImageRegion = aImageRect;
+
+	iColorConv = TColorConvertor::NewL(aBitmap.DisplayMode());
+	iUtil.SetBitmapL(&aBitmap);
+
+	if (aBlockSize)
+		{
+		if (aBlockSize->iWidth <= 0 || aBlockSize->iHeight <= 0)
+			{
+			User::Leave(KErrArgument);
+			}
+
+		iBlockSize = *aBlockSize;
+		iBlockArea = iBlockSize.iWidth * iBlockSize.iHeight;
+		
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[iBlockArea];
+
+		iIndexBufferPtrLimit = iIndexBuffer + iBlockArea;
+		CreateBlockBufferL(iBlockArea);
+		
+		switch(iOperation)
+			{
+			case EDecodeRotate180:
+			case EDecodeRotate270:
+			case EDecodeHorizontalFlip:
+			case EDecodeVerticalFlipRotate90:
+				iDrawBottomUp = ETrue;
+				break;
+			default:
+				iDrawBottomUp = EFalse;		
+			}
+		
+		iYInc = iDrawBottomUp ? -iBlockSize.iHeight : iBlockSize.iHeight;
+		iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? iImageRegion.iBr.iY - 1 : 0);
+		iEndPosition.SetXY(iImageRegion.iBr.iX, iDrawBottomUp ?
+							iImageRegion.iTl.iY - 1 : iImageRegion.iBr.iY);
+		iPos = iStartPosition;
+		}
+	else
+		{
+		iPos = iImageRegion.iTl;
+		iStartPosition = iPos;
+		iEndPosition = aImageRect.iBr;
+
+		ASSERT(iGray256Buffer == NULL);
+		iGray256Buffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iGray256BufferPtr = iGray256Buffer;
+		iGray256BufferPtrLimit = iGray256Buffer + KPixelWriterBufferSize;
+
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iIndexBufferPtrLimit = iIndexBuffer + KPixelWriterBufferSize;
+		}
+	
+	for(TInt i=0; i<256; i++)
+		{
+		iIndexLookup[i] = iColorConv->ColorIndex(TRgb(i,i,i));	
+		}
+	}
+
+TBool CMonochromePixelWriter::NewLine()
+	{
+	iPos.iX = iStartPosition.iX;
+	iPos.iY += iYInc;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+	
+	iPixelsToSkip = iPixelPadding;
+	return EFalse;
+	}
+
+void CMonochromePixelWriter::SetPixelBlockIndex(TUint32* aGray256Buffer)
+	{
+	CMonochromePixelWriter::SetPixelBufferIndex(aGray256Buffer,iBlockArea);
+	}
+
+void CMonochromePixelWriter::SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount)
+	{
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+	TUint32* indexLookup = iIndexLookup;
+
+	if(aCount&1)
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+	if(aCount&2)
+		{
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		}
+	while (indexBufferPtr < indexBufferPtrLimit)
+		{
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		}
+	}
+
+//
+// CErrorDiffuser::TColorError
+//
+
+inline CErrorDiffuser::TColorError::TColorError():
+	iRedError(0),
+	iGreenError(0),
+	iBlueError(0)
+	{}
+
+inline CErrorDiffuser::TColorError::TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError):
+	iRedError(aRedError),
+	iGreenError(aGreenError),
+	iBlueError(aBlueError)
+	{}
+
+inline void CErrorDiffuser::TColorError::AdjustColor(TRgb& aColor) const
+	{
+	TInt red = ColorCcomponent::ClampColorComponent((iRedError >> 4) + aColor.Red());
+	TInt green = ColorCcomponent::ClampColorComponent((iGreenError >> 4) + aColor.Green());
+	TInt blue = ColorCcomponent::ClampColorComponent((iBlueError >> 4) + aColor.Blue());
+	aColor = TRgb(red,green,blue);
+	}
+
+inline void CErrorDiffuser::TColorError::SetError(TRgb aIdealColor,TRgb aActualColor)
+	{
+	iRedError = aIdealColor.Red() - aActualColor.Red();
+	iGreenError = aIdealColor.Green() - aActualColor.Green();
+	iBlueError = aIdealColor.Blue() - aActualColor.Blue();
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator+(const TColorError& aColorError) const
+	{
+	TInt redError = iRedError + aColorError.iRedError;
+	TInt greenError = iGreenError + aColorError.iGreenError;
+	TInt blueError = iBlueError + aColorError.iBlueError;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator-(const TColorError& aColorError) const
+	{
+	TInt redError = iRedError - aColorError.iRedError;
+	TInt greenError = iGreenError - aColorError.iGreenError;
+	TInt blueError = iBlueError - aColorError.iBlueError;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator<<(TInt aShift) const
+	{
+	TInt redError = iRedError << aShift;
+	TInt greenError = iGreenError << aShift;
+	TInt blueError = iBlueError << aShift;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError& CErrorDiffuser::TColorError::operator+=(const TColorError& aColorError)
+	{
+	iRedError += aColorError.iRedError;
+	iGreenError += aColorError.iGreenError;
+	iBlueError += aColorError.iBlueError;
+	return *this;
+	}
+
+CErrorDiffuser::CErrorDiffuser()
+	{
+	}
+
+CErrorDiffuser::~CErrorDiffuser()
+	{
+	Reset();
+	}
+
+void CErrorDiffuser::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	CPixelWriter::DoPrepareL(aBitmap,aImageRect,aBlockSize);
+
+	TInt scanlineErrorBufferLength = iImageRegion.iBr.iX+2;
+
+	if (iBlockArea > 0)
+		{
+		ASSERT(iEdgeErrorBuffer == NULL);
+		iEdgeErrorBuffer = new(ELeave) TColorError[iBlockSize.iHeight];
+
+		scanlineErrorBufferLength += iBlockSize.iWidth;
+		}
+
+	ASSERT(iScanlineErrorBuffer == NULL);
+	iScanlineErrorBuffer = new(ELeave) TColorError[scanlineErrorBufferLength];
+
+	if (iDisplayMode == EColor64K) 
+		{
+			ASSERT(iRedErrorLookupTable == NULL);
+			iRedErrorLookupTable = new(ELeave) TInt8[256];
+			ASSERT(iGreenErrorLookupTable == NULL);
+			iGreenErrorLookupTable = new(ELeave) TInt8[256];
+			
+			for (TInt i=0;i<256;i++) 
+				{
+					TInt tmp = i & 0xf8;
+					iRedErrorLookupTable[i] = i - (tmp | (tmp >> 5));
+					tmp = i & 0xfc;
+					iGreenErrorLookupTable[i] = i - (tmp | (tmp >> 6));
+				}
+		}
+	}
+
+void CErrorDiffuser::SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	// use optimized function for EColor64K mode
+	if (iDisplayMode == EColor64K) 
+		{
+		SetPixelBufferColor64KIndex(aColorBuffer, aCount);
+		return;
+		}
+
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		new(&iNextError) TColorError;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX)
+				{
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+				}
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		new(&iNextError) TColorError;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+	TColorError* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+	TColorError error;
+	TRgb color;
+
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		color = *aColorBuffer++;
+
+		iNextError.AdjustColor(color);
+		TUint32 index = iColorConv->ColorIndex(color);
+		*indexBufferPtr++ = index;
+
+		error.SetError(color, iColorConv->Color(index));
+
+		iNextError = (error << 3) - error; // Set right error for this pixel
+
+		*scanlineErrorBufferPtr++ += error + (error << 1); // Set left-down error for this pixel
+
+		*scanlineErrorBufferPtr += error + (error << 2); // Set down error for this pixel
+
+		iNextError += *(scanlineErrorBufferPtr+1);
+
+		*(scanlineErrorBufferPtr+1) = error; // Set right-down error for this pixel
+		}
+	}
+
+// faster function (see listing) then Bitmap Util ClampColorComponent
+inline TInt CErrorDiffuser::ClipColorComponent(TInt value)
+    {
+    if (TUint(value) > 0xFF)
+        {
+        value = value < 0 ? 0 : 0xFF;
+        }
+    return value;
+    }
+
+void CErrorDiffuser::SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		iNextRedError = 0;
+		iNextGreenError = 0;
+		iNextBlueError = 0;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX > 0) 
+				{
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+				}
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		iNextRedError = 0;
+		iNextGreenError = 0;
+		iNextBlueError = 0;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+
+	TColorError* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+
+	TInt redError = iNextRedError;
+	TInt greenError = iNextGreenError;
+	TInt blueError = iNextBlueError;
+	
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		// red			
+		register TInt red = aColorBuffer->Red();
+		red = ClipColorComponent(red + (redError >> 4));
+
+		register TInt error = iRedErrorLookupTable[red];
+		
+		// Set right error for red component
+		scanlineErrorBufferPtr->iRedError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iRedError += error + (error << 2); // Set down error for this pixel
+		redError = (scanlineErrorBufferPtr+2)->iRedError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iRedError = error; // Set right-down error for this pixel
+
+		// green			
+		register TInt green = aColorBuffer->Green();
+			
+		green = ClipColorComponent(green + (greenError >> 4));
+
+		error = iGreenErrorLookupTable[green];
+		
+		// Set right error for green component
+		scanlineErrorBufferPtr->iGreenError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iGreenError += error + (error << 2); // Set down error for this pixel
+		greenError = (scanlineErrorBufferPtr+2)->iGreenError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iGreenError = error; // Set right-down error for this pixel
+
+		// blue			
+		register TInt blue = aColorBuffer->Blue();
+			
+		blue = ClipColorComponent(blue + (blueError >> 4));
+		
+		*indexBufferPtr++ = ((red & 0xf8) << 8) | ((green & 0xfc) << 3) | ((blue & 0xf8) >> 3);
+		
+		error = iRedErrorLookupTable[blue];// use the same lookup table for blue color
+
+		// Set right error for blue component
+		scanlineErrorBufferPtr->iBlueError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iBlueError += error + (error << 2); // Set down error for this pixel
+		blueError = (scanlineErrorBufferPtr+2)->iBlueError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iBlueError = error; // Set right-down error for this pixel
+
+		scanlineErrorBufferPtr++;
+		aColorBuffer++;
+		}
+
+		iNextRedError = redError;
+		iNextGreenError = greenError;
+		iNextBlueError = blueError;
+
+
+	}
+
+void CErrorDiffuser::SetPixelBlockIndex(TRgb* aColorBuffer)
+	{
+	if(iPos.iY!=iLastPos.iY)
+		{
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TColorError) * iBlockSize.iHeight);
+		}
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TColorError error;
+	TColorError* edgeErrorBuffer = iEdgeErrorBuffer;
+
+	for (TInt row = 0; row < iBlockSize.iHeight; row++)
+		{
+		TColorError* errorValue = iScanlineErrorBuffer + iPos.iX;
+		TColorError nextError = *edgeErrorBuffer + *errorValue;
+		*edgeErrorBuffer = error;
+
+		for (TInt col = 0; col < iBlockSize.iWidth; col++)
+			{
+			TRgb bufferColor = *aColorBuffer++;
+			nextError.AdjustColor(bufferColor);
+
+			TUint32 index = iColorConv->ColorIndex(bufferColor);
+			*indexBufferPtr++ = index;
+
+			error.SetError(bufferColor,iColorConv->Color(index));
+
+			if (col > 0)
+				*(errorValue - 1) += error + (error << 1); // Set left-down error for this pixel
+			else
+				*errorValue = error + (error << 1);
+
+			*errorValue += error + (error << 2); // Set down error for this pixel
+			errorValue++;
+
+			nextError = (error << 3) - error; // Set right error for this pixel
+
+			if (col < iBlockSize.iWidth)
+				{
+				nextError += *errorValue;
+				*errorValue = error; // Set right-down error for this pixel
+				}
+
+			}
+
+		*edgeErrorBuffer++ += nextError;
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+iBlockSize.iWidth;
+	}
+
+void CErrorDiffuser::Reset()
+	{
+	CPixelWriter::Reset();
+
+	delete[] iScanlineErrorBuffer;
+	iScanlineErrorBuffer = NULL;
+
+	delete[] iEdgeErrorBuffer;
+	iEdgeErrorBuffer = NULL;
+	
+	delete iRedErrorLookupTable;
+	iRedErrorLookupTable = NULL;
+	
+	delete iGreenErrorLookupTable;
+	iGreenErrorLookupTable = NULL;
+
+	}
+
+//
+// CMonochromeErrorDiffuser
+//
+
+
+/**
+ *
+ * Static factory function to create CMonochromeErrorDiffuser objects.
+ *
+ * @return  Pointer to a fully constructed CMonochromeErrorDiffuser object. 
+ */
+CMonochromeErrorDiffuser* CMonochromeErrorDiffuser::NewL()
+	{
+	return new(ELeave) CMonochromeErrorDiffuser;
+	}
+
+CMonochromeErrorDiffuser::CMonochromeErrorDiffuser()
+	{}
+
+CMonochromeErrorDiffuser::~CMonochromeErrorDiffuser()
+	{
+	Reset();
+	}
+
+void CMonochromeErrorDiffuser::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	CMonochromePixelWriter::DoPrepareL(aBitmap,aImageRect,aBlockSize);
+
+	TInt scanlineErrorBufferLength = iImageRegion.iBr.iX+2;
+
+	if (iBlockArea > 0)
+		{
+		ASSERT(iEdgeErrorBuffer == NULL);
+		iEdgeErrorBuffer = new(ELeave) TInt[iBlockSize.iHeight];
+
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TInt) * iBlockSize.iHeight);
+		scanlineErrorBufferLength += iBlockSize.iWidth;
+		}
+
+	ASSERT(iScanlineErrorBuffer == NULL);
+	iScanlineErrorBuffer = new(ELeave) TInt[scanlineErrorBufferLength];
+
+	Mem::FillZ(iScanlineErrorBuffer,sizeof(TInt) * scanlineErrorBufferLength);
+	}
+
+void CMonochromeErrorDiffuser::SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount)
+	{
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		iNextError = 0;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX)
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TInt));
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		iNextError = 0;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TInt));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+
+	TInt* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+	TInt nextError = iNextError;
+
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		TInt gray256 = *aGray256Buffer++;
+
+		TInt error = gray256 + (nextError >> 4);
+		TUint32 index = iIndexLookup[ColorCcomponent::ClampColorComponent(error)];
+		*indexBufferPtr++ = index;
+
+		error -= TColorConvertor::RgbToMonochrome(iColorConv->Color(index));
+
+		nextError = (error << 3) - error; // Set right error for this pixel
+
+		*scanlineErrorBufferPtr++ += error + (error << 1); // Set left-down error for this pixel
+
+		*scanlineErrorBufferPtr += error + (error << 2); // Set down error for this pixel
+
+		nextError += *(scanlineErrorBufferPtr+1);
+
+		*(scanlineErrorBufferPtr+1) = error; // Set right-down error for this pixel
+		}
+
+	iNextError = nextError;
+	}
+
+void CMonochromeErrorDiffuser::SetPixelBlockIndex(TUint32* aGray256Buffer)
+	{
+	if(iPos.iY!=iLastPos.iY)
+		{
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TInt) * iBlockSize.iHeight);
+		}
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TInt error = 0;
+	TInt* edgeErrorBuffer = iEdgeErrorBuffer;
+
+	for (TInt row = 0; row < iBlockSize.iHeight; row++)
+		{
+		TInt* errorValue = iScanlineErrorBuffer + iPos.iX;
+		TInt nextError = *edgeErrorBuffer + *errorValue;
+		*edgeErrorBuffer = error;
+
+		for (TInt col = 0; col < iBlockSize.iWidth; col++)
+			{
+			TInt gray256 = *aGray256Buffer++;
+
+			error = gray256 + (nextError >> 4); // Same as /16
+			
+			TUint32 index = iIndexLookup[ColorCcomponent::ClampColorComponent(error)];
+			*indexBufferPtr++ = index;
+
+			error -= TColorConvertor::RgbToMonochrome(iColorConv->Color(index));
+
+			if (col > 0)
+				*(errorValue - 1) += error + (error << 1); // Set left-down error for this pixel
+			else
+				*errorValue = error + (error << 1);
+
+			*errorValue += error + (error << 2); // Set down error for this pixel
+			errorValue++;
+
+			nextError = (error << 3) - error; // Set right error for this pixel
+
+			if (col < iBlockSize.iWidth)
+				{
+				nextError += *errorValue;
+				*errorValue = error; // Set right-down error for this pixel
+				}
+			}
+
+		*edgeErrorBuffer++ += nextError;
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+iBlockSize.iWidth;
+	}
+
+void CMonochromeErrorDiffuser::Reset()
+	{
+	CMonochromePixelWriter::Reset();
+
+	delete[] iScanlineErrorBuffer;
+	iScanlineErrorBuffer = NULL;
+
+	delete[] iEdgeErrorBuffer;
+	iEdgeErrorBuffer = NULL;
+	}
+
+//
+// CThumbnailProcessor
+//
+
+/**
+ *
+ * Static factory function to create CThumbnailProcessor objects.
+ *
+ * @param	"aImageProc"
+ *          A pointer to an externally constructed CImageProcessorExtension object.
+ *          This will be deleted when the CThumbnailProcessor object is deleted.
+ * @param	"aReductionFactor"
+ *          The reduction factor to use.
+ * @return  Pointer to a fully constructed CThumbnailProcessor object. 
+ */
+CThumbnailProcessor* CThumbnailProcessor::NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor)
+	{
+	return new(ELeave) CThumbnailProcessor(aImageProc,aReductionFactor);
+	}
+
+CThumbnailProcessor::CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor):
+	iImageProc(aImageProc),
+	iYInc(1),
+	iReductionFactor(aReductionFactor)
+		{}
+
+CThumbnailProcessor::~CThumbnailProcessor()
+	{
+	delete iImageProc;
+	delete[] iReducedPixelBuffer;
+	delete[] iReducedSumBuffer;
+	}
+
+void CThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	PrepareCommonL(aImageRect);
+	iYInc = 1;
+
+	TInt bufferSize = (iImageRegion.iBr.iX + (1<<iReductionFactor) -1 ) >> iReductionFactor;
+
+	ASSERT(iReducedSumBuffer == NULL);
+	iReducedSumBuffer = new(ELeave) TColorSum[bufferSize];
+	Mem::FillZ(iReducedSumBuffer,bufferSize * sizeof(TColorSum));
+
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TRgb[iReducedImageRegion.iBr.iX];
+	}
+
+void CThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	PrepareCommonL(aImageRect);
+
+	CreateBlockBufferL(aRgbBlockSize.iWidth*aRgbBlockSize.iHeight);
+
+	iOriginalBlockSize = aRgbBlockSize;
+	iYInc = iDrawBottomUp ? -iOriginalBlockSize.iHeight : iOriginalBlockSize.iHeight;
+
+	iReducedBlockSize = aRgbBlockSize;
+	iReducedBlockSize.iWidth >>= iReductionFactor;
+	iReducedBlockSize.iHeight >>= iReductionFactor;
+
+	iImageProc->SetInitialScanlineSkipPadding(iNumberOfScanlinesToSkip >> iReductionFactor);
+	iImageProc->SetPixelPadding(iPixelPadding >> iReductionFactor);
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion,iReducedBlockSize);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TRgb[iReducedBlockSize.iWidth * iReducedBlockSize.iHeight];
+	}
+
+void CThumbnailProcessor::PrepareCommonL(const TRect& aImageRect)
+	{
+	ASSERT(iReductionFactor > 0);
+	iImageRegion = aImageRect;
+
+	TInt roundUp = (1<<iReductionFactor)-1;
+	iReducedImageRegion.iTl.iX = aImageRect.iTl.iX >> iReductionFactor;
+	iReducedImageRegion.iTl.iY = aImageRect.iTl.iY >> iReductionFactor;
+	
+	TSize size = aImageRect.Size();
+	size.iWidth = (size.iWidth + roundUp) >> iReductionFactor;
+	size.iHeight = (size.iHeight + roundUp) >> iReductionFactor;
+	iReducedImageRegion.iBr = iReducedImageRegion.iTl + size;
+
+	switch(iOperation)
+		{
+		case EDecodeRotate180:
+		case EDecodeRotate270:
+		case EDecodeHorizontalFlip:
+		case EDecodeVerticalFlipRotate90:
+			iDrawBottomUp = ETrue;
+			iImageProc->SetOperation(iOperation);
+			break;
+		default:
+			iDrawBottomUp = EFalse;
+		}
+	iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? aImageRect.iBr.iY - 1 : 0);
+	iEndPosition.SetXY(aImageRect.iBr.iX, iDrawBottomUp ? aImageRect.iTl.iY - 1 : aImageRect.iBr.iY);
+	iPos = iStartPosition;
+
+	iPositionChanged = ETrue;
+
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+
+	delete[] iReducedPixelBuffer;
+	iReducedPixelBuffer = NULL;
+
+	delete[] iReducedSumBuffer;
+	iReducedSumBuffer = NULL;
+	}
+
+TBool CThumbnailProcessor::SetPixel(TRgb aColor)
+	{
+	TInt x = iPos.iX;
+
+	if (x < iImageRegion.iBr.iX)
+		{
+		TColorSum* sumPtr = iReducedSumBuffer + (x >> iReductionFactor);
+		sumPtr->iRed += aColor.Red();
+		sumPtr->iGreen += aColor.Green();
+		sumPtr->iBlue += aColor.Blue();
+		sumPtr->iCount++;
+		}
+
+	x++;
+	iPos.iX = x;
+
+	if (x == iEndOfLineX)
+		return NewLine();
+
+	return EFalse;
+	}
+
+TBool CThumbnailProcessor::NewLine()
+	{
+	TInt newY = iPos.iY + iYInc;
+
+	TBool finished = (newY < iStartPosition.iY || newY >= iEndPosition.iY);
+	TBool outsideOfBuffer = ((newY ^ iPos.iY) >> iReductionFactor) != 0;
+
+	if(finished || outsideOfBuffer)
+		{
+		DoFlushPixels();
+		}
+
+	iPos.iX = iStartPosition.iX;
+	iPos.iY = newY;
+
+	if(iPositionChanged && outsideOfBuffer)
+		{
+		iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+		iPositionChanged = EFalse;
+		}
+
+	return finished;
+	}
+
+TBool CThumbnailProcessor::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	if ((iPos.iX >> iReductionFactor) < iReducedImageRegion.iBr.iX)
+		{
+		ASSERT(aColorBuffer);
+
+		if(iPositionChanged)
+			{
+			iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+			iPositionChanged = EFalse;
+			}
+
+		TInt xOuterStop = iReducedBlockSize.iWidth<<iReductionFactor;
+		TInt yOuterStop = iReducedBlockSize.iHeight<<iReductionFactor;
+
+		TInt outerStep = 1<<iReductionFactor;
+		TInt divisionFactor = 2*iReductionFactor;
+
+		TRgb* reducedPixelBuffer = iReducedPixelBuffer;
+
+		for (TInt yOuter = 0; yOuter < yOuterStop; yOuter += outerStep)
+			{
+			for (TInt xOuter = 0; xOuter < xOuterStop; xOuter += outerStep)
+				{
+				TRgb* colorBuffer = &aColorBuffer[yOuter * iOriginalBlockSize.iWidth + xOuter];
+				TInt red = 0;
+				TInt green = 0;
+				TInt blue = 0;
+
+				for (TInt yInner = 0; yInner < outerStep; yInner++)
+					{
+					for (TInt xInner = 0; xInner < outerStep; xInner++)
+						{
+						red += colorBuffer[xInner].Red();
+						green += colorBuffer[xInner].Green();
+						blue += colorBuffer[xInner].Blue();
+						}
+					colorBuffer += iOriginalBlockSize.iWidth;
+					}
+
+				red >>= divisionFactor;
+				green >>= divisionFactor;
+				blue >>= divisionFactor;
+
+				*reducedPixelBuffer++ = TRgb(red,green,blue);
+				}
+			}
+
+		iImageProc->SetPixelBlock(iReducedPixelBuffer);
+		}
+
+	iPos.iX += iOriginalBlockSize.iWidth;
+	if (iPos.iX >= iEndOfLineX)
+		{
+		iPos.iX = iStartPosition.iX;
+		iPos.iY += iYInc;
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+		}
+
+	return EFalse;
+
+	}
+
+TBool CThumbnailProcessor::FlushPixels()
+	{
+	DoFlushPixels();
+	iImageProc->FlushPixels();
+
+	iPositionChanged = ETrue;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CThumbnailProcessor::DoFlushPixels()
+	{
+	if(!iReducedSumBuffer)
+		return;
+
+	TColorSum* reducedSumPtr = iReducedSumBuffer + iReducedImageRegion.iTl.iX;
+	TColorSum* reducedSumPtrLimit = iReducedSumBuffer + iReducedImageRegion.iBr.iX;
+
+	while(reducedSumPtr < reducedSumPtrLimit)
+		{
+
+		while(reducedSumPtr->iCount==0)
+			{
+			reducedSumPtr++;
+			if(reducedSumPtr==reducedSumPtrLimit)
+				return;
+			}
+
+		if(iPositionChanged)
+			iImageProc->SetPos(TPoint(reducedSumPtr - iReducedSumBuffer,iPos.iY >> iReductionFactor));
+
+		TRgb* reducedPixelBufferPtr = iReducedPixelBuffer;
+		TInt fullCountFactor = 2*iReductionFactor;
+
+		while(reducedSumPtr < reducedSumPtrLimit)
+			{
+			TInt count = reducedSumPtr->iCount;
+			TUint32 red;
+			TUint32 green;
+			TUint32 blue;
+
+			if(count == (1<<fullCountFactor))
+				{
+				red = reducedSumPtr->iRed >> fullCountFactor;
+				green = reducedSumPtr->iGreen >> fullCountFactor;
+				blue = reducedSumPtr->iBlue >> fullCountFactor;
+				}
+			else if(count!=0)
+				{
+				red = reducedSumPtr->iRed / count;
+				green = reducedSumPtr->iGreen / count;
+				blue = reducedSumPtr->iBlue / count;
+				}
+			else
+				break;
+
+			*reducedPixelBufferPtr++ = TRgb(red,green,blue);
+
+			reducedSumPtr++;
+			}
+
+		TInt numPixels = reducedPixelBufferPtr-iReducedPixelBuffer;
+		iImageProc->SetPixels(iReducedPixelBuffer,numPixels);
+
+		Mem::FillZ(reducedSumPtr-numPixels,numPixels * sizeof(TColorSum));
+		}
+
+	}
+
+TBool CThumbnailProcessor::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition)==EFalse)
+		return EFalse;
+
+	if((aPosition.iY ^ iPos.iY) >> iReductionFactor)
+		DoFlushPixels();
+
+	iPositionChanged = ETrue;
+	iPos = aPosition;
+
+	return ETrue;
+	}
+
+void CThumbnailProcessor::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc;
+
+	TInt reducedYInc = aYInc >> iReductionFactor;
+	if(reducedYInc==0)
+		reducedYInc = 1;
+
+	iImageProc->SetYPosIncrement(reducedYInc);
+	}
+
+void CThumbnailProcessor::SetLineRepeat(TInt aLineRepeat)
+	{
+	TInt reducedLineRepeat = aLineRepeat >> iReductionFactor;
+	iImageProc->SetLineRepeat(reducedLineRepeat);
+	}
+
+void CThumbnailProcessor::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+	}
+
+//
+// CMonochromeThumbnailProcessor
+//
+
+/**
+ *
+ * Static factory function to create CMonochromeThumbnailProcessor objects.
+ *
+ * @param	"aImageProc"
+ *          A pointer to an externally constructed CImageProcessorExtension object.
+ *          This will be deleted when the CMonochromeThumbnailProcessor object is deleted.
+ * @param	aReductionFactor"
+ *          The reduction factor to use.
+ * @return  Pointer to a fully constructed CMonochromeThumbnailProcessor object. 
+ */
+CMonochromeThumbnailProcessor* CMonochromeThumbnailProcessor::NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor)
+	{
+	return new(ELeave) CMonochromeThumbnailProcessor(aImageProc,aReductionFactor);
+	}
+
+CMonochromeThumbnailProcessor::CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor):
+	iImageProc(aImageProc),
+	iYInc(1),
+	iReductionFactor(aReductionFactor)
+		{}
+
+CMonochromeThumbnailProcessor::~CMonochromeThumbnailProcessor()
+	{
+	delete iImageProc;
+	delete[] iReducedPixelBuffer;
+	delete[] iReducedSumBuffer;
+	}
+
+void CMonochromeThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	PrepareCommonL(aImageRect);
+	iYInc = 1;
+	
+	TInt bufferSize = (iImageRegion.iBr.iX + (1<<iReductionFactor) -1 ) >> iReductionFactor;
+
+	ASSERT(iReducedSumBuffer == NULL);
+	iReducedSumBuffer = new(ELeave) TMonochromeSum[bufferSize];
+	Mem::FillZ(iReducedSumBuffer,bufferSize * sizeof(TMonochromeSum));
+
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TUint32[iReducedImageRegion.iBr.iX];
+	}
+
+void CMonochromeThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	PrepareCommonL(aImageRect);
+
+	CreateBlockBufferL(aRgbBlockSize.iWidth*aRgbBlockSize.iHeight);
+
+	iOriginalBlockSize = aRgbBlockSize;
+	iYInc = iDrawBottomUp ? -iOriginalBlockSize.iHeight : iOriginalBlockSize.iHeight;
+
+
+	iReducedBlockSize = aRgbBlockSize;
+	iReducedBlockSize.iWidth >>= iReductionFactor;
+	iReducedBlockSize.iHeight >>= iReductionFactor;
+
+	iImageProc->SetInitialScanlineSkipPadding(iNumberOfScanlinesToSkip >> iReductionFactor);
+	iImageProc->SetPixelPadding(iPixelPadding >> iReductionFactor);
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion,iReducedBlockSize);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TUint32[iReducedBlockSize.iWidth * iReducedBlockSize.iHeight];
+	}
+
+void CMonochromeThumbnailProcessor::PrepareCommonL(const TRect& aImageRect)
+	{
+	ASSERT(iReductionFactor > 0);
+	iImageRegion = aImageRect;
+
+	TInt roundUp = (1<<iReductionFactor)-1;
+	iReducedImageRegion.iTl.iX = aImageRect.iTl.iX >> iReductionFactor;
+	iReducedImageRegion.iTl.iY = aImageRect.iTl.iY >> iReductionFactor;
+
+	TSize size = aImageRect.Size();
+	size.iWidth = (size.iWidth + roundUp) >> iReductionFactor;
+	size.iHeight = (size.iHeight + roundUp) >> iReductionFactor;
+	iReducedImageRegion.iBr = iReducedImageRegion.iTl + size;
+	
+	switch(iOperation)
+		{
+		case EDecodeRotate180:
+		case EDecodeRotate270:
+		case EDecodeHorizontalFlip:
+		case EDecodeVerticalFlipRotate90:
+			iDrawBottomUp = ETrue;
+			iImageProc->SetOperation(iOperation);
+			break;
+		default:
+			iDrawBottomUp = EFalse;
+		}
+	iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? aImageRect.iBr.iY - 1 : 0);
+	iEndPosition.SetXY(aImageRect.iBr.iX, iDrawBottomUp ? aImageRect.iTl.iY - 1 : aImageRect.iBr.iY);
+	iPos = iStartPosition;
+	
+	iPositionChanged = ETrue;
+
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+
+	delete[] iReducedPixelBuffer;
+	iReducedPixelBuffer = NULL;
+
+	delete iReducedSumBuffer;
+	iReducedSumBuffer = NULL;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixel(TInt aGray256)
+	{
+	TInt x = iPos.iX;
+
+	if (x < iImageRegion.iBr.iX)
+		{
+		TMonochromeSum* sumPtr = iReducedSumBuffer + (x >> iReductionFactor);
+		sumPtr->iLevel += aGray256;
+		sumPtr->iCount++;
+		}
+
+	x++;
+	iPos.iX = x;
+
+	if (x == iEndOfLineX)
+		return NewLine();
+
+	return EFalse;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	while (aCount != 0)
+		{
+		TInt x		= iPos.iX;
+		TInt xLimit = x+aCount;
+
+		iPos.iX = xLimit;
+
+		if (xLimit > iImageRegion.iBr.iX)
+			xLimit = iImageRegion.iBr.iX;
+
+		if (xLimit > x)
+			{
+			TInt numPixels = xLimit-x;
+
+			TInt reductionFactor = iReductionFactor;
+			TInt reductionCount = 1<<reductionFactor;	//number of horizontal pixel in a TMonochromeSum
+
+			TMonochromeSum* sumPtr = iReducedSumBuffer + (x >> reductionFactor);
+
+			TInt n = reductionCount-(x&(reductionCount-1));	//number of pixels to complete current TMonochromeSum
+
+			if(numPixels > n)
+				{
+				sumPtr->iCount += n;					//Complete first TMonochromeSum in run
+				sumPtr->iLevel += n * aGray256;
+				sumPtr++;
+				numPixels -= n;
+
+				while(numPixels > reductionCount)			//Complete middle TMonochromeSum(s) in run
+					{
+					sumPtr->iCount += reductionCount;
+					sumPtr->iLevel += aGray256 << reductionFactor;
+					sumPtr++;
+					numPixels -= reductionCount;
+					}
+				}
+
+			sumPtr->iCount += numPixels;				//Update last/only TMonochromeSum in run
+			sumPtr->iLevel += numPixels * aGray256;
+			}
+
+		if (iPos.iX < iEndOfLineX)
+			break;
+
+		aCount = iPos.iX - iEndOfLineX;
+
+		if(NewLine())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+TBool CMonochromeThumbnailProcessor::NewLine()
+	{
+	TInt newY = iPos.iY + iYInc;
+
+	TBool finished = (newY < iStartPosition.iY || newY >= iEndPosition.iY);
+	TBool outsideOfBuffer = ((newY ^ iPos.iY) >> iReductionFactor) != 0;
+
+	if(finished || outsideOfBuffer)
+		{
+		DoFlushPixels();
+		}
+
+	iPos.iX = iStartPosition.iX;
+	iPos.iY = newY;
+
+	if(iPositionChanged && outsideOfBuffer)
+		{
+		iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+		iPositionChanged = EFalse;
+		}
+
+	return finished;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	if ((iPos.iX >> iReductionFactor) < iReducedImageRegion.iBr.iX)
+		{
+		ASSERT(aGray256Buffer);
+
+		if(iPositionChanged)
+			{
+			iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+			iPositionChanged = EFalse;
+			}
+
+		TInt xOuterStop = iReducedBlockSize.iWidth<<iReductionFactor;
+		TInt yOuterStop = iReducedBlockSize.iHeight<<iReductionFactor;
+
+		TInt outerStep = 1<<iReductionFactor;
+		TInt divisionFactor = 2*iReductionFactor;
+
+		TUint32* reducedPixelBuffer = iReducedPixelBuffer;
+
+		for (TInt yOuter = 0; yOuter < yOuterStop; yOuter += outerStep)
+			{
+			for (TInt xOuter = 0; xOuter < xOuterStop; xOuter += outerStep)
+				{
+				TUint32* gray256Buffer = &aGray256Buffer[yOuter * iOriginalBlockSize.iWidth + xOuter];
+				TInt level = 0;
+
+				for (TInt yInner = 0; yInner < outerStep; yInner++)
+					{
+					for (TInt xInner = 0; xInner < outerStep; xInner++)
+						level += gray256Buffer[xInner];
+
+					gray256Buffer += iOriginalBlockSize.iWidth;
+					}
+
+				level >>= divisionFactor;
+				*reducedPixelBuffer++ = level;
+				}
+			}
+
+		iImageProc->SetMonoPixelBlock(iReducedPixelBuffer);
+		}
+
+	iPos.iX += iOriginalBlockSize.iWidth;
+	if (iPos.iX >= iEndOfLineX)
+		{
+		iPos.iX = iStartPosition.iX;
+		iPos.iY += iYInc;
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+		}
+
+	return EFalse;
+
+	}
+
+TBool CMonochromeThumbnailProcessor::FlushPixels()
+	{
+	DoFlushPixels();
+	iImageProc->FlushPixels();
+
+	iPositionChanged = ETrue;
+
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+
+	return EFalse;
+	}
+
+void CMonochromeThumbnailProcessor::DoFlushPixels()
+	{
+	if(!iReducedSumBuffer)
+		return;
+
+	TMonochromeSum* reducedSumPtr = iReducedSumBuffer + iReducedImageRegion.iTl.iX;
+	TMonochromeSum* reducedSumPtrLimit = iReducedSumBuffer + iReducedImageRegion.iBr.iX;
+
+	while(reducedSumPtr < reducedSumPtrLimit)
+		{
+
+		while(reducedSumPtr->iCount==0)
+			{
+			reducedSumPtr++;
+			if(reducedSumPtr==reducedSumPtrLimit)
+				return;
+			}
+
+		if(iPositionChanged)
+			iImageProc->SetPos(TPoint(reducedSumPtr - iReducedSumBuffer,iPos.iY >> iReductionFactor));
+
+		TUint32* reducedPixelBufferPtr = iReducedPixelBuffer;
+		TInt fullCountFactor = 2*iReductionFactor;
+		TInt fullCount = 1<<fullCountFactor;
+
+		do
+			{
+			TInt level = reducedSumPtr->iLevel;
+			TInt count = reducedSumPtr->iCount;
+
+			if(count==fullCount)
+				level >>= fullCountFactor;
+			else if(count!=0)
+				level /= count;
+			else
+				break;
+
+			*reducedPixelBufferPtr++ = level;
+
+			reducedSumPtr++;
+			}
+		while(reducedSumPtr < reducedSumPtrLimit);
+
+		TInt numPixels = reducedPixelBufferPtr-iReducedPixelBuffer;
+		iImageProc->SetMonoPixels(iReducedPixelBuffer,numPixels);
+
+		Mem::FillZ(reducedSumPtr-numPixels,numPixels * sizeof(TMonochromeSum));
+		}
+
+	}
+
+TBool CMonochromeThumbnailProcessor::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition)==EFalse)
+		return EFalse;
+
+	if((aPosition.iY ^ iPos.iY) >> iReductionFactor)
+		DoFlushPixels();
+
+	iPositionChanged = ETrue;
+	iPos = aPosition;
+
+	return ETrue;
+	}
+
+void CMonochromeThumbnailProcessor::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc;
+
+	TInt reducedYInc = aYInc >> iReductionFactor;
+	if(reducedYInc==0)
+		reducedYInc = 1;
+
+	iImageProc->SetYPosIncrement(reducedYInc);
+	}
+
+void CMonochromeThumbnailProcessor::SetLineRepeat(TInt aLineRepeat)
+	{
+	TInt reducedLineRepeat = aLineRepeat >> iReductionFactor;
+	iImageProc->SetLineRepeat(reducedLineRepeat);
+	}
+
+void CMonochromeThumbnailProcessor::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/ImageProcessorPerf.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* imageprocessorPerf.lib Performance-critical code of Image conversion library
+* It is just an "implementation" library of internal for ICL perofrmance-critical code.
+* Is not intended to be used outside the ICL except for testing purpose
+*
+*/
+
+
+
+TARGETTYPE	lib
+TARGET		imageprocessorperf.lib
+
+SOURCEPATH	../codecs
+SOURCE		ColorConverter.cpp
+SOURCE		ImageProcessor.cpp
+
+USERINCLUDE	../inc
+USERINCLUDE	../src
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/ecom
+
+ALWAYS_BUILD_AS_ARM
+
+OPTION ARMCC -Otime
+OPTION_REPLACE ARMCC -O2 -O3
+OPTION_REPLACE ARMCC --cpu 6
+OPTION_REPLACE ARMCC --export_all_vtbl
+
+OPTION ARMASM -Otime
+OPTION_REPLACE ARMASM -O2 -O3
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/icl/imageprocessor.h	/epoc32/include/icl/imageprocessor.h
+../inc/icl/icl_uids.hrh		/epoc32/include/icl/icl_uids.hrh
+
+PRJ_MMPFILES
+../group/ImageProcessorPerf.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/icl_uids.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#ifndef ICL_UIDS_HRH
+#define ICL_UIDS_HRH
+
+
+#define KICLCodecDllUidValue	0x101F45AC
+
+#define KDecoderInterfaceUidValue	0x101F45AD
+#define KEncoderInterfaceUidValue	0x101F45B4
+
+#define KBMPCodecDllUidValue		0x101F45AE
+#define KBMPImageDataUidValue		0x101F45BF
+#define KBMPCompressionUidValue		0x101F45E3
+#define KBMPDecoderImplementationUidValue	0x101F45AF
+#define KBMPEncoderImplementationUidValue	0x101F45BE
+
+#define KJPGCodecDllUidValue		0x101F45D6
+#define KJPGImageDataUidValue		0x101F45DA
+#define KJPGQTableUidValue			0x101F45E1
+#define KJPGCommentUidValue			0x101F45E2
+#define KJPGDecoderImplementationUidValue	0x101F45D7
+#define KJPGEncoderImplementationUidValue	0x101F45D9
+
+#define KGIFCodecDllUidValue		0x101F45B1
+#define KGIFBackgroundColorUidValue 0x101F45DE
+#define KGIFImageDescriptorUidValue 0x101F45E4
+#define KGIFLZWInfoUidValue			0x101F45E5
+#define KGIFImageControlUidValue	0x101F45E6
+#define KGIFCommentUidValue			0x101F45E7
+#define KGIFDecoderImplementationUidValue	0x101F45B2
+#define KGIFEncoderImplementationUidValue	0x101F45DD
+
+#define KMBMCodecDllUidValue		0x101F45CA
+#define KMBMDecodeDataUidValue		0x101F45E0
+#define KMBMEncodeDataUidValue		0x101F45E9
+#define KMBMDecoderImplementationUidValue	0x101F45CB
+#define KMBMEncoderImplementationUidValue	0x101F45DF
+
+#define KTIFFCodecDllUidValue		0x101F45C0
+#define KTIFFImageDataUidValue		0x101F45E8
+#define KTIFFDecoderImplementationUidValue	0x101F45C1
+#define KTIFFDecoderLittleEndianImplementationUidValue	0x101F45C2
+#define KTIFFDecoderBigEndianImplementationUidValue	0x101F45C3
+
+#define KWMFCodecDllUidValue		0x101F45B5
+#define KWMFDecoderImplementationUidValue	0x101F45B6
+#define KWMFDecoderStdImplementationUidValue	0x101F45B7
+#define KWMFDecoderApmImplementationUidValue	0x101F45B8
+#define KWMFDecoderClpImplementationUidValue	0x101F45B9
+
+#define KPNGCodecDllUidValue		0x101F45C7
+#define KPNGDecoderImplementationUidValue	0x101F45C8
+#define KPNGEncoderImplementationUidValue	0x101F45FE
+
+#define KWBMPCodecDllUidValue		0x101F45CD
+#define KWBMPDecoderImplementationUidValue	0x101F45CE
+
+#define KOTACodecDllUidValue		0x101F45D0
+#define KOTADecoderImplementationUidValue	0x101F45D1
+
+#define KICOCodecDllUidValue		0x101F45D3
+#define KICODecoderImplementationUidValue	0x101F45D4
+
+#define KMngMimeTypeUidValue 0x101F7C53
+#define KMngImageDisplayPluginUidValue 0x101F7C52
+#define KMngDllUidValue 0x101F7C51
+
+/**
+@publishedAll
+@released
+Class UID for a set of decoders which support the Exchangeable Image File Format. 
+
+When loading plugins by class UID, the first valid plugin from the list 
+of available plugins with the specified class UID will be loaded. Loading 
+the plugin in this way always allow a cast to the derived decoder or 
+encoder class to be made. 
+@see CJPEGExifDecoder
+*/
+#define KUidICLJpegEXIFInterface 	0x101F7C4F
+
+#define KUidTransformJpegPluginUidValue		0x101F7C2F
+#define KUidTransformJpegExtension	0x101F7C30
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Squeeze Transaformations
+*/
+#define KUidSqueezeTransformExtension	0x10285BD6
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Orientation Transaformations
+*/
+#define KUidOrientationTransformExtension	0x10285C33 
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Overlay Transaformations
+*/
+#define KUidOverlayTransformExtension	0x10285C34
+
+/**
+@publishedAll
+@released
+Class UID for the set of decoders which support operations through the CImageFrame. 
+
+When loading plugins by class UID, the first valid plugin from the list 
+of available plugins with the specified class UID will be loaded. Loading 
+the plugin in this way always allow a cast to the derived decoder or 
+encoder class to be made. 
+@see CJPEGImageFrameDecoder
+*/
+#define KUidICLJpegImageFrameInterface 	0x101F7C60
+
+#define KJPGDecoderImplementation2UidValue	0x101F7C61
+#define KJPGEncoderImplementation2UidValue	0x101F7C62
+
+#define KJPEGImageFramePluginDllUidValue	0x1027376E
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvOperation
+*/
+#define KUidImageConvExtOperationValue	0x102833DF
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvScaler
+*/
+#define KUidImageConvExtScalerValue		0x102833E0 	
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvStreamedDecode
+*/
+#define KUidImageConvExtStreamedDecodeValue	0x102833E1 	
+
+/**
+@publishedPartner
+@released
+
+Extension interface uid for TImageConvStreamedEncode
+*/
+#define KUidImageConvExtStreamedEncodeValue	0x102833E2 
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvPrepare
+*/
+#define KUidImageConvExtPrepareValue 0x1028346D 
+
+/**
+@publishedAll
+@released
+
+Uid that identifies encoders that maintain the alpha channel of the EColor16MA source CFbsBitmap.
+*/
+#define KUidAlphaChannelEncodeSupported 0x10285D1B
+
+#endif // ICL_UIDS_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/imageprocessor.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef ___IMAGEPROCESSOR_H__
+#define ___IMAGEPROCESSOR_H__
+
+#include <gdi.h>
+#include <fbs.h>
+
+/**
+@internalTechnology
+*/
+enum TImageBitmapUtilPanic
+	{
+	ECorrupt
+	};
+
+/**
+@publishedAll
+@released
+
+Interface to colour conversion classes for various display modes.
+Manages the mapping between RGB/Greyscale values and the index
+into the color palette for the given display mode.
+*/
+class TColorConvertor
+	{
+public:
+	IMPORT_C static	TColorConvertor* NewL(TDisplayMode aDisplayMode);
+
+	/**
+	Returns the colour index corresponding to the supplied RGB value.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColor
+	        The colour in RGB format.
+	
+	@return The colour index.
+	*/
+	virtual TInt ColorIndex(TRgb aColor) const = 0;
+
+	/**
+	Returns the RGB value corresponding to the supplied colour index.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColorIndex
+	        The colour in RGB format.
+
+	@return The RGB value.
+	*/
+	virtual TRgb Color(TInt aColorIndex) const = 0;
+
+	/**
+	Gets an array of colour indices from a corresponding array of RGB values.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aIndexBuffer
+	        A pointer to the first element in destination array.
+	@param  aColorBuffer
+	        A pointer to the first element in the source array.
+	@param  aCount
+	        The number of elements to get.
+	*/
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const = 0;
+
+	inline static TInt RgbToMonochrome(TRgb aRgb);
+	};
+
+
+/**
+@publishedAll
+@released
+
+Bitmap utility class.
+*/
+class TImageBitmapUtil
+	{
+public:
+	IMPORT_C TImageBitmapUtil();
+	IMPORT_C void Begin();
+	IMPORT_C TBool Begin(const TPoint& aPosition);
+	IMPORT_C void End();
+	IMPORT_C void SetBitmapL(CFbsBitmap* aBitmap);
+	IMPORT_C void SetPixel(TUint32 aPixelIndex);
+	IMPORT_C void SetPixels(TUint32* aPixelIndex,TInt aNumberOfPixels);
+	IMPORT_C TBool SetPos(const TPoint& aPosition);
+	
+private:
+	union TDataPointer
+		{
+		TUint32* iWordPos;
+		TUint8* iBytePos;
+		};
+private:
+	CFbsBitmap* iBitmap;
+	TSize iSize;
+	TPoint iPosition;
+	TDataPointer iData;
+	TDataPointer iBase;
+	TInt iBpp;
+	TInt iBppShift;
+	TInt iPixelShift;
+	TInt iPixelsPerWord;
+	TInt iBitShift;
+	TInt iScanlineWordLength;
+	TUint32 iMask;
+	TBool iWordAccess;
+	};
+
+
+class CImageProcessor;
+class CImageProcessorExtension;
+
+/**
+@publishedAll
+@released
+
+Utility class providing static factory functions for creating instances of
+CImageProcessor derived classes.
+*/
+class ImageProcessorUtility
+	{
+public:
+	IMPORT_C static TInt ReductionFactor(const TSize& aOriginalSize,const TSize& aReducedSize);
+	IMPORT_C static CImageProcessor* NewImageProcessorL(const CFbsBitmap& aBitmap,const TSize& aImageSize,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	IMPORT_C static CImageProcessor* NewImageProcessorL(const CFbsBitmap& aBitmap,TInt aReductionFactor,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	IMPORT_C static CImageProcessorExtension* ImageProcessorUtility::NewImageProcessorExtensionL(const CFbsBitmap& aBitmap,TInt aReductionFactor,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	
+private:
+	TBool static UseErrorDiffuser(const TDisplayMode& aBitmapDisplayMode, const TDisplayMode& aImageDisplayMode);
+	TBool static IsMonochrome(const TDisplayMode& aBitmapDisplayMode, const TDisplayMode& aImageDisplayMode);
+	};
+
+
+
+/**
+@publishedAll
+@released
+
+Interface to image processing classes used by CImageDecoder plugins. This is not a application client API.
+*/
+class CImageProcessor : public CBase
+	{
+public:
+	// Setup
+
+	/**
+	Initialises internal data structures prior to conversion.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aBitmap
+	        A reference to a fully constucted bitmap with the required
+	        display mode and size.
+	@param  aImageRect
+	        The region of the image to convert.
+	*/
+	virtual void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect) = 0;
+
+	/**
+	Initialises internal data structures prior to the manipulation of the specified pixel block.
+
+	This overloaded version allows specification of a block size
+	for those formats which support blocked pixel data eg. JPEG
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aBitmap
+	        A reference to a fully constucted bitmap with the required
+	        display mode and size.
+	@param  aImageRect
+	        The region of the image to convert.
+	@param  aRgbBlockSize
+	        The size of the block to use.
+	*/
+	virtual void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize) = 0;
+
+	/**
+	Sets the number of pixels by which to increment the current position in
+	the Y-axis. This is used when rendering images supporting interlacing.
+	eg GIF
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aYInc
+	        The number of pixels.
+	*/
+	virtual void SetYPosIncrement(TInt aYInc) = 0;
+
+	/**
+	Sets the number times the current line should be repeated. The lines
+	are repeated in the same direction as set by SetYPosIncrement(). This
+	is used to fill blank lines when rendering interlaced images. eg GIF.
+	@param aLineRepeat The number of times the current line should be repeated
+	*/
+	virtual void SetLineRepeat(TInt aLineRepeat) = 0;
+
+	/**
+	Sets the pixel padding to the value specified by aNumberOfPixels.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aNumberOfPixels
+	        The number of pixels to use for padding.
+	*/
+	virtual void SetPixelPadding(TInt aNumberOfPixels) = 0;
+
+	// Color pixel writing
+
+	/**
+	Sets the pixel at the current position to aColor.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post    
+	The current position is updated.
+
+	@param  aColor
+	        The RGB value to set the current pixel to.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+            otherwise EFalse.
+    */
+	virtual TBool SetPixel(TRgb aColor) = 0;
+
+	/**
+	Sets aCount number of pixels to the value given by aColor, starting at
+	the current position.
+
+	This is a virtual function that each derived class must implement.
+
+	@post    
+	On success, the current position is updated.
+
+	@param  aColor
+	        The RGB value to set the pixels to.
+	@param  aCount
+	        The number of pixels to set.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixelRun(TRgb aColor,TInt aCount) = 0;
+
+	/**
+	Updates the bitmap with colour information from the array of colour values.
+
+	Uses the array of colour values supplied by aColorBuffer, whose length
+	is specified by aBufferLength, to update successive pixels with values in the
+	buffer, starting at the current	position.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post   
+	The current position is updated.
+
+	@param  aColorBuffer
+	        A pointer to the first element in the array.
+	@param  aBufferLength
+	        The number of elements in the array.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength) = 0;
+
+    /**
+    Sets the current pixel block using the data supplied in aColorBuffer.
+
+	Note:
+	For use with image types that support blocking of pixels eg JPEG.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColorBuffer
+	        A pointer to a buffer representing a block of pixel color values.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixelBlock(TRgb* aColorBuffer) = 0;
+
+	// Monochrome pixel writing
+
+	/**
+	Sets the pixel at the current position to aGray256.
+
+	This is a virtual function that each derived class must implement.
+
+    @post   
+	The current position is updated.
+
+	@param  aGray256
+	        The greyscale value to set the current pixel to.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixel(TInt aGray256) = 0;
+
+	/**
+	Sets the number of pixels specified by aCount to the value given by aGray256, starting at
+	the current position.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post   
+	The current position is updated.
+
+	@param  aGray256
+	        The greyscale value to set the pixels to.
+	@param  aCount
+	        The number of pixels to set.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixelRun(TInt aGray256,TInt aCount) = 0;
+
+	/**
+	Updates the bitmap with greyscale information from the array of greyscale values.
+
+	The array of values supplied by aGray256Buffer, whose length
+	is specified in aBufferLength, is used to update successive pixels with the
+	greyscales values.
+
+	This is a virtual function that each derived class must implement.
+
+	@post
+	The current position is updated.
+
+	@param  aGray256Buffer
+	        A pointer to the first element in the array of greyscale values.
+	@param  aBufferLength
+	        The number of elements in the array.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength) = 0;
+
+    /**
+    Sets a specified number of pixels to the specified greyscale value.
+
+	For image types which support blocking of pixels eg JPEG, the current
+	pixel block is set using the data supplied in aGray256Buffer.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aGray256Buffer
+	        A pointer to a buffer representing a block of pixel color values.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixelBlock(TUint32* aGray256Buffer) = 0;
+
+	// Processor flow control
+
+	/**
+	Sets the current position in the bitmap to aPosition.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aPosition
+	        A reference to TPoint object defining the position to move to.
+
+	@return	A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPos(const TPoint& aPosition) = 0;
+
+	/**
+	Commits the changes made to the current bitmap by flushing the buffer.
+
+	This is a virtual function that each derived class must implement.
+
+	@post
+	The current position is updated.
+
+	@return	A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+    */
+	virtual TBool FlushPixels() = 0;
+	
+private:
+	// Future proofing
+	IMPORT_C virtual void ReservedVirtual1();
+	IMPORT_C virtual void ReservedVirtual2();
+	IMPORT_C virtual void ReservedVirtual3();
+	IMPORT_C virtual void ReservedVirtual4();
+	};
+
+/**
+@publishedAll
+@released
+
+Flag used to determine the type of transformation which is the result of 
+single or multiple transformation operations requested via calls to
+COperationExtension::AddOperationL.
+
+8 unique orientations:
+
+@code
+normal  90      180     270
+00 10   01 00   11 01   10 11
+01 11   11 10   10 00   00 01
+
+V flip  90      180     270
+10 00   11 10   =Hflip  =Hflip+90
+11 01   01 00
+
+H flip  90      180     270
+01 11   00 01   =Vflip  =Vflip+90
+00 10   10 11
+@endcode
+
+@see COperationExtension::AddOperationL
+*/
+enum TTransformOptions
+	{
+	/** Normal Decode
+	*/
+	EDecodeNormal = 0x11011000,
+
+	/** Rotate 90 degrees.
+	*/
+	EDecodeRotate90	= 0x10110001,
+
+	/** Rotate 180 degrees.
+	*/
+	EDecodeRotate180 = 0x00100111,
+
+	/** Rotate 270 degrees.
+	*/
+	EDecodeRotate270 = 0x01001110,
+	
+	/** Horizontal flip.
+	*/
+	EDecodeHorizontalFlip = 0x10001101,
+	
+	/** Horizontal flip and rotate 90 degrees.
+	*/
+	EDecodeHorizontalFlipRotate90 = 0x11100100,
+
+	/** Vertical flip.
+	*/
+	EDecodeVerticalFlip	= 0x01110010,
+
+	/** Vertical flip and rotate 90 degrees.
+	*/
+	EDecodeVerticalFlipRotate90 = 0x00011011
+	};
+
+
+/**
+@publishedAll
+@released
+
+Class that provides support for Framework Extensions.
+
+@see CImageProcessor
+@see CImageReadCodec
+@see CImageDecoderPlugin
+*/
+class CImageProcessorExtension : public CImageProcessor
+	{
+public:
+	IMPORT_C virtual ~CImageProcessorExtension();
+	IMPORT_C void SetClippingRect(const TRect& aRect);
+	IMPORT_C void SetScaling(TInt aScalingCoeff);
+	IMPORT_C void SetScaling(const TSize& aDesiredSize);
+	IMPORT_C void SetOperation(TTransformOptions aOperation);
+	IMPORT_C void SetInitialScanlineSkipPadding(TInt aNumberOfScanlines);
+
+protected:
+	IMPORT_C CImageProcessorExtension();
+
+protected:
+	/** Clipping rectangle */
+	TRect iClippingRect;
+	/** Scaling coefficient */
+	TInt iScalingCoeff;
+	/** Desired size after scaling */
+	TSize iDesiredSize;
+	/** Operations to apply to image */
+	TTransformOptions iOperation;
+	/** Position in destination at which start rendering */
+	TPoint iStartPosition;
+	/** Position in destination at which rendering is complete */
+	TPoint iEndPosition;
+	/** An initial one-off number of scanlines to be skipped */
+	TInt iNumberOfScanlinesToSkip;
+	};
+   
+inline TInt TColorConvertor::RgbToMonochrome(TRgb aRgb)
+	{
+	TInt value = aRgb.Internal();
+	TInt r = value&0xFF0000;
+	TInt g = value&0xFF00;
+	value  = (value&0xFF)<<16;	// blue<<16
+	value += r<<1;     		// + (red<<16)*2
+	value += g<<(16+2-8);	// + (green<<16)*4
+	value += g<<(16+0-8);	// + (green<<16)
+	return value>>(16+3);	// total/8
+	}
+
+#endif //___IMAGEPROCESSOR_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageClientMain.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __IMAGECLIENTMAIN_H__
+#define __IMAGECLIENTMAIN_H__
+
+#include <e32std.h>
+
+enum TIclPanic
+	{
+	ENoSourceBitmap = 0,
+	ENoDestinationBitmap = 1,
+	EResetDestinationBitmap = 2,
+	EConvertCalledWhileBusy = 3,
+	EIllegalContinueConvert = 4,
+	EDifferentDestinationBitmap = 5,
+	EDifferentDestinationMask = 6,
+	EModifiedDestination = 7,
+	EBitmapHasZeroDimension = 8,
+	ENoBitmapMask = 9,
+	EFrameNumberOutOfRange = 10,
+	EUndefinedSourceType = 11,
+	ECommentsNotSupported = 12,
+	EHeaderProcessingNotComplete = 13,
+	ECommentNumberOutOfRange = 14,
+	EBadDisplayMode = 15,
+	EUnknownHeaderState = 16,
+	ENonNullDescriptorPassed = 17,
+	EUndefinedMIMEType = 18,
+	EIllegalImageSubType = 19,
+	EIllegalImageType = 20,
+	EIllegalEncoderRestart = 21,
+	EChangeOptionWhileDecoding = 22,
+	EDecoderNotCreated = 23,
+	EFeatureNotYetImplemented = 24,
+	ERelaySubThreadPanicTimedOut = 25,
+	EInvalidThreadState = 26,
+	EInvalidFunctionLeave = 27,
+	EInvalidState = 28,
+	EDriveNotSupported = 29,
+	EReservedCall = 30,
+	EInvalidIndex = 31,
+	EInvalidValue = 32,
+#if defined(SYMBIAN_ENABLE_ENCODER_ASYNC_WRITES)
+	EBufPoolNoMoreBuffers = 33,
+	EBufPoolInvalidBuffer = 34,
+	EAsyncWrtrQOverflow = 35,
+#endif
+	ENullImageConvExtension = 36,
+	ENonNullImageConvExtension = 37,
+	EInvalidFwExtensionCall = 38,
+	EExtensionAlreadySet = 39,
+	EInvalidFwExtensionUid = 40,
+	EFwExtensionBusy = 41
+	};
+
+GLDEF_C void Panic(TIclPanic aError);
+
+#endif // __IMAGECLIENTMAIN_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageProcessorPriv.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef ___IMAGEPROCESSORPRIV_H__
+#define ___IMAGEPROCESSORPRIV_H__
+
+#include <icl/imageprocessor.h>
+#include "fwextconstants.h"
+
+//The size of the index lookup table
+const TInt KIndexLookupSize = 256;
+
+class CColorImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CColorImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CColorImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+protected:
+	// New - to facilitate default implementation of SetMonoPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetMonoPixelBlock()
+	TRgb*	iBlockBuffer;
+	TInt	iBlockArea;
+	};
+
+class CMonochromeImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CMonochromeImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+protected:
+	// New - to facilitate default implementation of SetPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetPixelBlock()
+	TUint32* iBlockBuffer;
+	TInt	 iBlockArea;
+	};
+
+class CPixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CPixelWriter ): public CColorImageProcessor
+	{
+public:
+	static CPixelWriter* NewL();
+	virtual ~CPixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer, TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CPixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TRgb* aColorBuffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TRgb* iRgbBuffer;
+	TRgb* iRgbBufferPtr;
+	TRgb* iRgbBufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TDisplayMode iDisplayMode;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromePixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromePixelWriter ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromePixelWriter* NewL();
+	virtual ~CMonochromePixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CMonochromePixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TUint32* aGray256Buffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TUint32* iGray256Buffer;
+	TUint32* iGray256BufferPtr;
+	TUint32* iGray256BufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TUint32 iIndexLookup[KIndexLookupSize];
+	TBool iDrawBottomUp;
+	};
+
+class CErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CPixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CErrorDiffuser ): public CPixelWriter
+	{
+public:
+	IMPORT_C static CErrorDiffuser* NewL();
+	virtual ~CErrorDiffuser();
+protected:
+	CErrorDiffuser();
+private:
+	class TColorError
+		{
+	public:
+		inline void AdjustColor(TRgb& aColor) const;
+	public:
+		inline TColorError();
+		inline TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError);
+		inline void SetError(TRgb aIdealColor,TRgb aActualColor);
+		inline TColorError operator+(const TColorError& aColorError) const;
+		inline TColorError operator-(const TColorError& aColorError) const;
+		inline TColorError operator<<(TInt aShift) const;
+		inline TColorError& operator+=(const TColorError& aColorError);
+	public:
+		TInt iRedError;
+		TInt iGreenError;
+		TInt iBlueError;
+		};
+private:
+	// From CPixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);
+	void SetPixelBlockIndex(TRgb* aColorBuffer);
+	void SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount);
+	// optimized version of ClampColorComponent
+	inline TInt ClipColorComponent(TInt value);
+	
+private:
+	TColorError* iScanlineErrorBuffer;
+	TColorError* iEdgeErrorBuffer;
+	TColorError iNextError;
+	TPoint iLastPos;
+	// for fast 64K mode
+	TInt8* iRedErrorLookupTable;
+	TInt8* iGreenErrorLookupTable;
+	TInt iNextRedError;
+	TInt iNextGreenError;
+	TInt iNextBlueError;
+	};
+
+class CMonochromeErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromePixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeErrorDiffuser ): public CMonochromePixelWriter
+	{
+public:
+	static CMonochromeErrorDiffuser* NewL();
+	virtual ~CMonochromeErrorDiffuser();
+protected:
+	CMonochromeErrorDiffuser();
+private:
+	// From CMonochromePixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);
+	void SetPixelBlockIndex(TUint32* aGray256Buffer);
+private:
+	TInt* iScanlineErrorBuffer;
+	TInt* iEdgeErrorBuffer;
+	TInt iNextError;
+	TPoint iLastPos;
+	};
+
+class CThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CThumbnailProcessor ): public CColorImageProcessor
+	{
+public:
+	static CThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TColorSum
+		{
+	public:
+		TInt iRed;
+		TInt iGreen;
+		TInt iBlue;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TRgb* iReducedPixelBuffer;
+	TColorSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromeThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeThumbnailProcessor ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromeThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CMonochromeThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TMonochromeSum
+		{
+	public:
+		TInt iLevel;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TUint32* iReducedPixelBuffer;
+	TMonochromeSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+#endif // ___IMAGEPROCESSORPRIV_H__
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageUtils.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __ImageUtils_h
+#define __ImageUtils_h
+
+/*Template class CleanupResetAndDestroy
+ *
+ * Shamelessly copied from CleanupClose to clean up
+ * the array of implementation information from the cleanup stack.
+ */
+
+template <class T>
+class CleanupResetAndDestroy
+	{
+public:
+	inline static void PushL(T& aRef);
+private:
+	static void ResetAndDestroy(TAny *aPtr);
+	};
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef);
+
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+	{(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+	{CleanupResetAndDestroy<T>::PushL(aRef);}
+
+//
+// PtrReadUtil - utility class with methods for standard 
+//            reading stuff from a TUint8* string
+//
+
+class PtrReadUtil
+	{
+public:
+	// This calls decode from TUint8*
+	static TInt8 ReadInt8(const TUint8* aPtr);
+	static TUint8 ReadUint8(const TUint8* aPtr);
+	static TInt16 ReadInt16(const TUint8* aPtr);
+	static TInt16 ReadBigEndianInt16(const TUint8* aPtr);
+	static TUint16 ReadUint16(const TUint8* aPtr);
+	static TUint16 ReadBigEndianUint16(const TUint8* aPtr);
+	static TInt32 ReadInt32(const TUint8* aPtr);
+	static TInt32 ReadBigEndianInt32(const TUint8* aPtr);
+	static TUint32 ReadUint32(const TUint8* aPtr);
+	static TUint32 ReadBigEndianUint32(const TUint8* aPtr);
+	// these calls also increment the pointer
+	static TInt8 ReadInt8Inc(const TUint8*& aPtr);
+	static TUint8 ReadUint8Inc(const TUint8*& aPtr);
+	static TInt16 ReadInt16Inc(const TUint8*& aPtr);
+	static TInt16 ReadBigEndianInt16Inc(const TUint8*& aPtr);
+	static TUint16 ReadUint16Inc(const TUint8*& aPtr);
+	static TUint16 ReadBigEndianUint16Inc(const TUint8*& aPtr);
+	static TInt32 ReadInt32Inc(const TUint8*& aPtr);
+	static TInt32 ReadBigEndianInt32Inc(const TUint8*& aPtr);
+	static TUint32 ReadUint32Inc(const TUint8*& aPtr);
+	static TUint32 ReadBigEndianUint32Inc(const TUint8*& aPtr);
+	};
+
+inline TUint8 PtrReadUtil::ReadUint8(const TUint8* aPtr)
+	{
+	return *aPtr ;
+	}
+
+inline TInt8 PtrReadUtil::ReadInt8(const TUint8* aPtr)
+	{
+	return TInt8(ReadUint8(aPtr));
+	}
+
+inline TUint16 PtrReadUtil::ReadUint16(const TUint8* aPtr)
+	{
+	return TUint16(aPtr[0] | (aPtr[1]<<8));
+	}
+
+inline TInt16 PtrReadUtil::ReadInt16(const TUint8* aPtr)
+	{
+	return TInt16(ReadUint16(aPtr));
+	}
+
+inline TUint32 PtrReadUtil::ReadUint32(const TUint8* aPtr)
+	{
+	return TUint32(aPtr[0] | (aPtr[1]<<8) | (aPtr[2]<<16) | (aPtr[3]<<24));
+	}
+
+inline TInt32 PtrReadUtil::ReadInt32(const TUint8* aPtr)
+	{
+	return TInt32(ReadUint32(aPtr));
+	}
+
+inline TUint16 PtrReadUtil::ReadBigEndianUint16(const TUint8* aPtr)
+	{
+	return TUint16((aPtr[0]<<8) | aPtr[1]);
+	}
+
+inline TInt16 PtrReadUtil::ReadBigEndianInt16(const TUint8* aPtr)
+	{
+	return TInt16(ReadBigEndianUint16(aPtr));
+	}
+
+inline TUint32 PtrReadUtil::ReadBigEndianUint32(const TUint8* aPtr)
+	{
+	return TUint32((aPtr[0]<<24) | (aPtr[1]<<16) | (aPtr[2]<<8) | aPtr[3]);
+	}
+
+inline TInt32 PtrReadUtil::ReadBigEndianInt32(const TUint8* aPtr)
+	{
+	return TInt32(ReadBigEndianInt32(aPtr));
+	}
+
+inline TInt8 PtrReadUtil::ReadInt8Inc(const TUint8*& aPtr)
+	{
+	TInt8 result = ReadInt8(aPtr);
+	aPtr += 1;
+	return result;
+	}
+
+inline TUint8 PtrReadUtil::ReadUint8Inc(const TUint8*& aPtr)
+	{
+	TUint8 result = ReadUint8(aPtr);
+	aPtr += 1;
+	return result;
+	}
+
+inline TInt16 PtrReadUtil::ReadInt16Inc(const TUint8*& aPtr)
+	{
+	TInt16 result = ReadInt16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TUint16 PtrReadUtil::ReadUint16Inc(const TUint8*& aPtr)
+	{
+	TUint16 result = ReadUint16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TInt16 PtrReadUtil::ReadBigEndianInt16Inc(const TUint8*& aPtr)
+	{
+	TInt16 result = ReadBigEndianInt16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TUint16 PtrReadUtil::ReadBigEndianUint16Inc(const TUint8*& aPtr)
+	{
+	TUint16 result = ReadBigEndianUint16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TInt32 PtrReadUtil::ReadInt32Inc(const TUint8*& aPtr)
+	{
+	TInt32 result = ReadInt32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TUint32 PtrReadUtil::ReadUint32Inc(const TUint8*& aPtr)
+	{
+	TUint32 result = ReadUint32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TInt32 PtrReadUtil::ReadBigEndianInt32Inc(const TUint8*& aPtr)
+	{
+	TInt32 result = ReadBigEndianInt32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TUint32 PtrReadUtil::ReadBigEndianUint32Inc(const TUint8*& aPtr)
+	{
+	TUint32 result = ReadBigEndianUint32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+class PtrWriteUtil
+	{
+public:
+	static void WriteInt8(TUint8* aPtr, TInt aData);
+	static void WriteInt16(TUint8* aPtr, TInt aData);
+	static void WriteInt32(TUint8* aPtr, TInt aData);
+	// Big endian version
+	static void WriteBigEndianInt32(TUint8* aPtr, TInt32 aData);
+	static void WriteBigEndianInt16(TUint8* aPtr, TInt aData);
+	};
+
+inline void PtrWriteUtil::WriteInt8(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	}
+
+inline void PtrWriteUtil::WriteInt16(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	aPtr[1] = TUint8(aData>>8);
+	}
+
+inline void PtrWriteUtil::WriteInt32(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	aPtr[1] = TUint8(aData>>8);
+	aPtr[2] = TUint8(aData>>16);
+	aPtr[3] = TUint8(aData>>24);
+	}
+
+inline void PtrWriteUtil::WriteBigEndianInt32(TUint8* aPtr, TInt32 aData)
+	{
+	aPtr[0] = TUint8(aData>>24);
+	aPtr[1] = TUint8(aData>>16);
+	aPtr[2] = TUint8(aData>>8);
+	aPtr[3] = TUint8(aData);
+	}
+
+inline void PtrWriteUtil::WriteBigEndianInt16(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData>>8);
+	aPtr[1] = TUint8(aData);
+	}
+
+class ColorCcomponent
+	{
+public:
+	static TInt ClampColorComponent(TInt value);
+	};
+
+inline TInt ColorCcomponent::ClampColorComponent(TInt value)
+	{
+	return (value < 0) ? 0 : (value > 255) ? 255 : value;
+	}
+
+
+//
+// The following routines have been copied from Graphics subsystem.
+// They deal with alpha to premultiplied alpha and viceversa conversions.
+// The original files are: blendingalgorithms.h and blendingalgorithms.inl
+//
+
+const TUint32 KRBMask = 0x00ff00ff;
+const TUint32 KAGMask = 0xff00ff00;
+const TUint32 KGMask  = 0x0000ff00;
+const TUint32 KAMask  = 0xff000000;
+const TUint32 KRBBias = 0x00800080;
+const TUint32 KGBias  = 0x00008000;
+
+
+/**
+Premultiplies the color channel values with the Alpha channel value.
+Alpha value remains unchanged. An approximation is used in the operation where the division
+by 255 is approximated by a shift-by-8-bits operation (i.e. division by 256).
+@param	aPixel	The 32 bit pixel value to be pre-multiplied.
+@return	The PMA value.
+@internalTechnology
+@released
+*/
+inline TUint32 NonPMA2PMAPixel(TUint32 aPixel)
+	{
+	TUint8 tA = (TUint8)(aPixel >> 24);
+	if (tA==0)
+		{ 
+		return 0;
+		}
+	if (tA==0xff) 
+		{
+		return aPixel;
+		}
+
+	// Use a bias value of 128 rather than 255, but also add 1/256 of the numerator 
+	// before dividing the sum by 256.
+
+	TUint32 scaledRB = (aPixel & KRBMask) * tA + KRBBias;
+	scaledRB = (scaledRB + ( (scaledRB >> 8) & KRBMask) ) >> 8;
+	TUint32 scaledG = (aPixel & KGMask ) * tA + KGBias;
+	scaledG = (scaledG + (scaledG >> 8)) >> 8;
+	
+	return (aPixel & KAMask) | (scaledRB & KRBMask) | (scaledG & KGMask);
+	}
+
+
+/**
+Divives the PMA pixel color channels with the Alpha value, to convert them to non-PMA format.
+Alpha value remains unchanged.
+@param	aPixel	the premultiplied 32 bit pixel value.
+@param	aNormTable	The lookup table used to do the normalisation (the table converts the division
+					to multiplication operation).
+					The table is usually obtainable by a call to the method:
+					PtrTo16BitNormalisationTable, which is defined in lookuptable.dll(.lib).
+					The lookup table for normalised alpha is compluted using this equation: 
+					Table[index] = (255*256) / index (where index is an 8 bit value).
+@return The NON-PMA 32 bit pixel value.
+@internalTechnology
+@released
+*/
+inline TUint32 PMA2NonPMAPixel(TUint32 aPixel, const TUint16* aNormTable)
+	{
+	TUint8 alpha = (TUint8)(aPixel >> 24);
+	if (alpha==0)
+		{ 
+		return 0;
+		}
+	if (alpha==0xff) 
+		{
+		return aPixel;
+		}
+	TUint16 norm = aNormTable[alpha];
+	TUint32 norm_rb = (((aPixel & KRBMask) * norm) >> 8) & KRBMask;
+	TUint32 norm_g =  (((aPixel & KGMask ) * norm) >> 8) & KGMask;
+	
+	return ((aPixel & KAMask) | norm_rb | norm_g);
+	}
+
+
+/**
+In-place version of NonPMA2PMAPixel.
+@see NonPMA2PMAPixel
+@internalTechnology
+@released
+*/
+inline void Convert2PMA(TUint32& aInOutValue)
+	{
+	aInOutValue = NonPMA2PMAPixel(aInOutValue);
+	}
+
+
+/**
+In-place version of PMA2NonPMAPixel
+@see PMA2NonPMAPixel
+@internalTechnology
+@released
+*/
+inline void Convert2NonPMA(TUint32& aInOutValue, const TUint16* aNormTable)
+	{
+	aInOutValue = PMA2NonPMAPixel(aInOutValue, aNormTable);
+	}
+
+
+#endif  // __ImageUtils_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/fwextconstants.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef FWEXTCONSTANTS_H
+#define FWEXTCONSTANTS_H
+
+#include <icl/icl_uids.hrh>
+
+const TUid KICLOperationUid 		= {KUidImageConvExtOperationValue};
+const TUid KICLScalerUid 			= {KUidImageConvExtScalerValue};
+const TUid KICLStreamedDecodeUid 	= {KUidImageConvExtStreamedDecodeValue};
+const TUid KICLStreamedEncodeUid 	= {KUidImageConvExtStreamedEncodeValue};
+const TUid KICLPrepareUid 			= {KUidImageConvExtPrepareValue};
+
+#endif // FWEXTCONSTANTS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+#ifdef WINSCW
+t_oom.mmp
+#else
+tbm.mmp
+t_oom.mmp
+dfpaeabi_vfpv2
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This function is simple a way to get these EXPORT statements into
+* the .in file. These symbols will therefore be referenced from
+* the export table and so **forced** into the DLL
+*
+*/
+
+
+__asm void __rt_exporter_dummy(void)
+{
+	AREA |.directive|, READONLY, NOALLOC
+
+	PRESERVE8
+
+	DCB "#<SYMEDIT>#\n"
+
+/// Standard double precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_dadd\n"
+	DCB "EXPORT __aeabi_ddiv\n"
+	DCB "EXPORT __aeabi_dmul\n"
+	DCB "EXPORT __aeabi_dneg\n"
+	DCB "EXPORT __aeabi_drsub\n"
+	DCB "EXPORT __aeabi_dsub\n"
+
+/// Standard double precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cdcmpeq\n"
+	DCB "EXPORT __aeabi_cdcmple\n"
+	DCB "EXPORT __aeabi_cdrcmple\n"
+	DCB "EXPORT __aeabi_dcmpeq\n"
+	DCB "EXPORT __aeabi_dcmplt\n"
+	DCB "EXPORT __aeabi_dcmple\n"
+	DCB "EXPORT __aeabi_dcmpge\n"
+	DCB "EXPORT __aeabi_dcmpgt\n"
+	DCB "EXPORT __aeabi_dcmpun\n"
+
+/// Standard single precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_fadd\n"
+	DCB "EXPORT __aeabi_fdiv\n"
+	DCB "EXPORT __aeabi_fmul\n"
+	DCB "EXPORT __aeabi_fneg\n"
+	DCB "EXPORT __aeabi_frsub\n"
+	DCB "EXPORT __aeabi_fsub\n"
+
+/// Standard single precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cfcmpeq\n"
+	DCB "EXPORT __aeabi_cfcmple\n"
+	DCB "EXPORT __aeabi_cfrcmple\n"
+	DCB "EXPORT __aeabi_fcmpeq\n"
+	DCB "EXPORT __aeabi_fcmplt\n"
+	DCB "EXPORT __aeabi_fcmple\n"
+	DCB "EXPORT __aeabi_fcmpge\n"
+	DCB "EXPORT __aeabi_fcmpgt\n"
+	DCB "EXPORT __aeabi_fcmpun\n"
+
+/// Standard floating-point to integer conversions
+
+	DCB "EXPORT __aeabi_d2iz\n"
+	DCB "EXPORT __aeabi_d2uiz\n"
+	DCB "EXPORT __aeabi_d2lz\n"
+	DCB "EXPORT __aeabi_d2ulz\n"
+	DCB "EXPORT __aeabi_f2iz\n"
+	DCB "EXPORT __aeabi_f2uiz\n"
+	DCB "EXPORT __aeabi_f2lz\n"
+	DCB "EXPORT __aeabi_f2ulz\n"
+
+/// Standard conversions between floating types
+
+	DCB "EXPORT __aeabi_d2f\n"
+	DCB "EXPORT __aeabi_f2d\n"
+
+/// Standard integer to floating-point conversions
+
+	DCB "EXPORT __aeabi_i2d\n"
+	DCB "EXPORT __aeabi_ui2d\n"
+	DCB "EXPORT __aeabi_l2d\n"
+	DCB "EXPORT __aeabi_ul2d\n"
+	DCB "EXPORT __aeabi_i2f\n"
+	DCB "EXPORT __aeabi_ui2f\n"
+	DCB "EXPORT __aeabi_l2f\n"
+	DCB "EXPORT __aeabi_ul2f\n"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_common.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGETTYPE		dll
+
+SOURCEPATH		.
+SOURCE			dfpaeabi.cpp
+
+SYSTEMINCLUDE		../../include
+
+START ARMCC
+
+ARMINC
+#ifdef MARM_ARMV5
+ARMLIBS			c_t__un.l
+#else
+ARMLIBS			c_a__un.l
+#endif
+END
+
+capability		all
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_vfpv2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "dfpaeabi_common.mmh"
+
+TARGET 			dfpaeabi_vfpv2.dll
+LINKAS			dfpaeabi.dll
+NOEXPORTLIBRARY
+START ARMCC
+ARMRT
+// we want the vfpv2 supporting versions
+#ifdef MARM_ARMV5
+ARMLIBS			f_tvp.l
+#else
+ARMLIBS			f_avp.l
+#endif
+END
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/exchange.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef EXCHANGE_H
+#define EXCHANGE_H
+
+#include <bt_sock.h>
+#include <btsdp.h>
+
+class CExchanger : public CBase
+/**
+Abstract base class for protocols that can locate compatible devices.
+@internalComponent
+*/
+{
+	public:
+		/**
+		@internalComponent
+		Begins a search for compatible devices.  Until successful
+		completion, no other function should be called as the data
+		may be invalid.
+		@param aStatus
+		A TRequestStatus object that is signalled when the search
+		completes.  It should be used from within an active object
+		*/
+		virtual void LookForPeersL(TRequestStatus& aStatus) = 0;
+		/**
+		@internalComponent
+		@return The number of compatible peer devices found
+		*/
+		virtual TInt Count() = 0;
+		/**
+		@internalComponent
+		Selects the first compatible device that was found
+		*/
+		virtual void First() = 0;
+		/**
+		@internalComponent
+		Retrieves the selected device, and selects the next device
+		that was found.
+		@param aPtr
+		A reference to a TNameEntry* pointer.  On success, it is filled
+		in with a pointer to a device that was found.  
+		@return KErrNotFound on failure, KErrNone on success.
+		*/
+		virtual TInt Next(TNameEntry*& aPtr) = 0;
+	protected:
+		RSocketServ iSockSession;
+	private:
+};
+
+class CBluetoothSeeker;
+class CBluetoothExchanger : public CExchanger
+/**
+@internalComponent
+Implementation of CExchanger for bluetooth.  Uses inquiry and the SDP 
+protocol to retrieve a filtered list of all devices in range that support
+the service, as defined by UUID
+*/
+{
+	public:
+		IMPORT_C static CBluetoothExchanger* NewL(const TUUID &aUUID);
+		IMPORT_C static CBluetoothExchanger* NewLC(const TUUID &aUUID);
+		~CBluetoothExchanger();
+		//virtual implementations
+		IMPORT_C virtual void LookForPeersL(TRequestStatus& aStatus);
+		IMPORT_C virtual TInt Count();
+		IMPORT_C virtual void First();
+		IMPORT_C virtual TInt Next(TNameEntry*& aPtr);
+	private:
+		void ConstructL(const TUUID &aUUID);
+		RSdp iSdpSession;
+		RSdpDatabase iSdpDb;
+		CBluetoothSeeker *iSeeker;
+		TInt iDeviceIndex;
+};
+
+#endif //EXCHANGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <s32file.h>
+#include <e32test.h>
+
+#define UNUSED_VAR(a) a = a
+
+const TInt KTestCleanupStack=0x20;
+const TPtrC KTestDir=_L("\\STOR-TST\\T_OOM\\");
+
+#ifdef _DEBUG
+const TPtrC desOriginalReverted2(_S("original/reverted A"),19);
+const TPtrC desOriginalReverted3(_S("original/reverted B"),19);
+const TPtrC desNewOverwritten2(_S("new/overwritten X"),17);
+const TPtrC desNewOverwritten3(_S("new/overwritten Y"),17);
+const TPtrC alphabet(_S("abcdefghijklmnopqrstuvwxyz"),26);
+LOCAL_D CFileStore* store;
+RStoreWriteStream out;
+RStoreReadStream in;
+TInt KMemoryAllocsInTestFunction=1;
+#endif
+
+LOCAL_D CTrapCleanup* TheTrapCleanup;
+LOCAL_D RTest test(_L("T_OOM"));
+LOCAL_D RFs TheFs;
+
+LOCAL_C void setupTestDirectory()
+    {// Prepare the test directory.
+	TInt r=TheFs.Connect();
+	test(r==KErrNone);
+//
+	r=TheFs.MkDirAll(KTestDir);
+	test(r==KErrNone||r==KErrAlreadyExists);
+	r=TheFs.SetSessionPath(KTestDir);
+	test(r==KErrNone);
+	}
+
+LOCAL_C void setupCleanup()
+    {// Initialise the cleanup stack
+	TheTrapCleanup=CTrapCleanup::New();
+	test(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	test(r==KErrNone);
+	}
+
+#ifdef _DEBUG
+LOCAL_D void CreateStoreSetRootAndDestroyStoreL()
+	{
+	TheFs.Delete(_L("pfs"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pfs"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+	}
+
+LOCAL_D void AlterStoreL()
+	{
+	RStoreWriteStream out2;
+	RStoreWriteStream out3;
+	RStoreWriteStream out4;
+	RStoreReadStream in;
+
+	TStreamId id2 = out.CreateLC(*store);
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id3 = out.CreateLC(*store);
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id4 = out.CreateLC(*store);
+	out << _L("mum");
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	out.ReplaceLC(*store,store->Root());
+	out << id2;
+	out << id3;
+	out << id4;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	in.OpenLC(*store,store->Root());// use the root for in and out streams
+	out.ReplaceLC(*store,store->Root());
+	out.WriteL(in);
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+
+	out.ReplaceLC(*store,store->Root());// swap the order
+	in.OpenLC(*store,store->Root());
+	out.WriteL(in);
+	out << _L("fromage");
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+
+	store->CommitL();
+
+	in.OpenLC(*store,store->Root());
+	TStreamId idX,idZ;
+	in >> idX;
+	in >> idX;
+	in >> idZ;// id4 "mum"
+	CleanupStack::PopAndDestroy();
+	out.OpenLC(*store,idZ);
+	in.OpenLC(*store,idZ);
+	out2.OpenLC(*store,idZ);
+	out3.OpenLC(*store,idZ);
+	out4.OpenLC(*store,idZ);
+	out4.WriteL(in);
+	out.CommitL();
+	CleanupStack::PopAndDestroy(5);
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1170
+@SYMTestCaseDesc	    Allocation failure in store test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for any memory errors during allocation of store
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void AllocFailInSampleStoreCodeL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1170 "));
+	test.Console()->Printf(_L("AllocFailInSampleStoreCodeL()\n"));
+	TRAPD(r,CreateStoreSetRootAndDestroyStoreL())
+    UNUSED_VAR(r);
+	const TInt KAllocFail=15;
+	for (TInt ii=1;ii<=20;++ii)
+		{
+		store=CPermanentFileStore::OpenLC(TheFs,_L("pfs"),EFileWrite|EFileRead);
+		__UHEAP_FAILNEXT(ii);
+		TRAPD(r,AlterStoreL());
+		if (ii<KAllocFail)
+			test(r==KErrNoMemory);
+		if (ii>=KAllocFail)
+			test(r==KErrNone);
+		__UHEAP_RESET;
+		CleanupStack::PopAndDestroy();
+		}
+	TheFs.Delete(_L("pfs"));
+	}
+
+LOCAL_D void InitialseStoreWithDataL()
+	{
+	TheFs.Delete(_L("pope"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	TStreamId id2 = out.CreateLC(*store);
+	out << desOriginalReverted2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id3 = out.CreateLC(*store);
+	out << desOriginalReverted3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	out.ReplaceLC(*store,store->Root());
+	out << id2;
+	out << id3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+	}
+
+LOCAL_D void AlterStoreDuringOutOfMemoryL(TInt aFail)
+	{
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	out.ReplaceLC(*store,id2);
+	out << desNewOverwritten2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	__UHEAP_FAILNEXT(aFail);// Out of memory
+
+	out.ReplaceLC(*store,id3);
+	out << desNewOverwritten3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+
+	__UHEAP_RESET;
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1346
+@SYMTestCaseDesc	    Streaming of data test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for RStoreReadStream::>> operator
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void TestStreamDataL(TInt aFail)
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1346 "));
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	TBuf<32> buf;
+
+	in.OpenLC(*store,id2);
+	in >> buf;
+	test(buf==desNewOverwritten2);
+
+	CleanupStack::PopAndDestroy();// in
+
+	in.OpenLC(*store,id3);
+	in >> buf;
+	if (aFail > KMemoryAllocsInTestFunction)
+		test(buf==desNewOverwritten3);
+	else if (aFail<=KMemoryAllocsInTestFunction)
+		test(buf==desOriginalReverted3);
+
+	CleanupStack::PopAndDestroy();// in
+
+	CleanupStack::PopAndDestroy();// store
+	}
+
+LOCAL_D void ResetStreamDataL()
+	{
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	out.ReplaceLC(*store,id2);
+	out << desOriginalReverted2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	out.ReplaceLC(*store,id3);
+	out << desOriginalReverted3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1171
+@SYMTestCaseDesc	    Out of memory errors test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for out of memory conditions before commiting to the store
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void OutOfMemoryBeforeStoreCommitL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1171 "));
+	test.Console()->Printf(_L("OutOfMemoryBeforeStoreCommitL()\n"));
+	InitialseStoreWithDataL();
+	for (TInt fail=1; fail<=5; ++ fail)
+		{
+		TRAPD(r,AlterStoreDuringOutOfMemoryL(fail));
+		if (fail<=KMemoryAllocsInTestFunction)
+			test(r==KErrNoMemory);// store saved when r!=KErrNone
+		else
+			test(r==KErrNone);
+		TestStreamDataL(fail);
+		ResetStreamDataL();
+		}
+	TheFs.Delete(_L("pope"));
+	}
+
+
+LOCAL_D void OpenCloseStoreL(TInt aFail)
+	{
+	__UHEAP_FAILNEXT(aFail);
+	TheFs.Delete(_L("pope"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	TStreamId id2 = out.CreateLC(*store);
+	out << desOriginalReverted2;
+	out << id2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1172
+@SYMTestCaseDesc	    Out of memory test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Test for memory errors during opening and closing of store operation.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+
+LOCAL_D void OutOfMemoryWhenOpeningClosingStoreL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1172 "));
+	test.Console()->Printf(_L("OutOfMemoryWhenOpeningClosingStoreL()\n"));
+	const TInt KAllocs=12;
+	for (TInt fail=1; fail<=20; ++ fail)
+		{
+		TRAPD(r,OpenCloseStoreL(fail))
+		if (fail<KAllocs)
+			test(r==KErrNoMemory);
+		else
+			test(r==KErrNone);
+		}
+	TheFs.Delete(_L("pope"));
+	__UHEAP_RESET;
+	}
+#endif
+
+GLDEF_C TInt E32Main()
+    {// Test permanent file store
+	test.Title();
+	setupTestDirectory();
+	setupCleanup();
+#ifdef _DEBUG
+	__UHEAP_MARK;
+//
+	test.Start(_L("Begin tests"));
+	TRAPD(r,AllocFailInSampleStoreCodeL());
+	test(r==KErrNone);
+	TRAP(r,OutOfMemoryBeforeStoreCommitL());
+	test(r==KErrNone);
+	TRAP(r,OutOfMemoryWhenOpeningClosingStoreL());
+	test(r==KErrNone);
+	test.End();
+
+	TheFs.Delete(_L("pope"));
+	TheFs.Delete(_L("pfs"));
+//
+	__UHEAP_MARKEND;
+#endif
+
+#ifndef _DEBUG
+	test.Start(_L("The tests are not valid in release mode"));
+	test.End();
+#endif
+	delete TheTrapCleanup;
+	TheFs.Close();
+	test.Close();
+	return 0;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target 		t_oom.exe 
+targettype 	exe 
+
+SOURCEPATH	.
+source 		t_oom.cpp
+
+systeminclude  	/epoc32/include 
+ 
+library 	euser.lib efsrv.lib 
+debuglibrary 	estor.lib
+library 	euser.lib
+
+VENDORID 	0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* BT incoming SCO notification test code
+*
+*/
+
+
+#include <e32test.h>
+#include <es_sock.h>
+#include <f32file.h>
+#include <bt_sock.h>
+#include <btextnotifiers.h>
+#include <c32comm.h>
+#include <btsdp.h>
+#include "exchange.h"
+
+#if defined (__WINS__)
+#define PDD_NAME _L("ECDRV")
+#define LDD_NAME _L("ECOMM")
+#else  // __GCC32__
+#define PDD_NAME _L("EUART4")	// port 0 on Assabet
+// don't use EUART2 - port 1 is IR
+#define ETNA_PDD_NAME _L("EUART3") // for port 2 on Assabet
+#define LDD_NAME _L("ECOMM")
+#endif
+
+GLDEF_D RTest test(_L("bluemeanie tests"));
+
+const TUint32 KServiceUID1 = 0x6D14AC98;
+const TUint32 KServiceUID2 = 0x7A8249bb;
+const TUint32 KServiceUID3 = 0xB885BE2E;
+const TUint32 KServiceUID4 = 0xF73C909E;
+
+//_LIT(KMenuText1, "A - Listen & Accept         F - Connect ACL");
+//_LIT(KMenuText2, "B - Await incoming SCO      G - Connect SCO");
+//_LIT(KMenuText3, "C - Await SCO disconnect    H - Disconnect SCO");
+//_LIT(KMenuText4, "D - Await ACL disconnect    I - Disconnect ACL");
+//_LIT(KMenuText5, "E - Receive Data            J - Send Data");
+//_LIT(KMenuText6, "K - Hard disconnect ACL");
+//_LIT(KMenuText7, "X - Exit");
+//_LIT(KNewLine, "\r\n");
+
+//const TBTDevAddr KDevAddr(MAKE_TINT64(0x0002, 0x5bff0a1e));
+
+class CTestBM : public CActive
+	{
+	public:
+		CTestBM();
+		void InitL();
+		void DoTestL();
+		void RunL();
+		void DoCancel();
+	private:
+	private:
+		CBluetoothExchanger* iExch;
+		CActiveScheduler* iSched;
+	};
+
+CTestBM::CTestBM() : CActive(CActive::EPriorityStandard)
+	{}
+
+void CTestBM::InitL()
+	{
+	TUUID uuid(KServiceUID1,KServiceUID2,KServiceUID3,KServiceUID4);
+	iSched = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(iSched);
+	iExch = CBluetoothExchanger::NewL(uuid);
+	iSched->Add(this);
+	}
+
+void CTestBM::DoTestL()
+	{
+	test.Printf(_L("Press a key to start search\r\n"));
+	test.Getch();
+	iExch->LookForPeersL(iStatus);
+	SetActive();
+	iSched->Start();
+	test(iStatus == KErrNone);
+	test.Printf(_L("Completed with status %d\r\n"), iStatus.Int());
+	TInt count;
+	TBTSockAddr addr;
+	THostName name;
+	TNameEntry* entry;
+	iExch->First();
+	count = iExch->Count();
+	test.Printf(_L("%d compatible devices found\r\n"), count);
+	while(iExch->Next(entry) == KErrNone)
+		{
+		addr = (*entry)().iAddr;
+		name = (*entry)().iName;
+		test.Printf(_L("Device address 0x%02x%02x%02x%02x%02x%02x\r\n"),
+			addr.BTAddr()[0],
+			addr.BTAddr()[1],
+			addr.BTAddr()[2],
+			addr.BTAddr()[3],
+			addr.BTAddr()[4],
+			addr.BTAddr()[5]);
+		test.Printf(_L("Device name: %S\r\n"), &name);
+		}
+	test.Getch();
+	}
+
+void CTestBM::RunL()
+	{
+	iSched->Stop();
+	}
+
+void CTestBM::DoCancel()
+	{
+	//iExch->Cancel();
+	}
+
+void LoadLDD_PDD()
+	{
+	TInt r;
+#ifdef __EPOC32__
+	r=StartC32();
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else
+		test.Printf(_L("Started C32\n"));
+#endif
+	test.Printf(_L("Loading PDD\n"));
+	r=User::LoadPhysicalDevice(PDD_NAME);
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else 
+		test.Printf(_L("Loaded LDD\n"));
+	test.Printf(_L("Loading LDD\n"));
+	r=User::LoadLogicalDevice(LDD_NAME);
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else
+		test.Printf(_L("Loaded PDD\n"));
+	}
+
+
+void RunTestL()
+	{
+	CTestBM *st = new(ELeave) CTestBM;
+	CleanupStack::PushL(st);
+	LoadLDD_PDD();
+	st->InitL();
+	st->DoTestL();
+	CleanupStack::PopAndDestroy(st);
+	}
+
+TInt E32Main()
+	{
+	CTrapCleanup* cleanupStack=CTrapCleanup::New();
+
+	TRAPD(err,RunTestL());
+
+	delete cleanupStack;
+   	
+	return err;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        tbm.exe
+TARGETTYPE    EXE
+
+SRCDBG
+
+SOURCEPATH .
+SOURCE	      tbm.cpp
+
+USERINCLUDE	    .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib bluetooth.lib
+LIBRARY       sdap.lib
+
+CAPABILITY ALL -TCB
+
+LIBRARY       c32.lib
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/buffer/t_rbuf.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,569 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\buffer\t_rbuf.cpp
+* Overview:
+* Test methods of the RBuf16, RBuf8, RBuf template class.
+* API Information:
+* RBuf16, RBuf8, RBuf.
+* Details:
+* For RBuf8, RBuf16 and RBuf objects:
+* - Test the Create and CreateMax methods by verifying the return value of
+* KErrNone, the initial length and max length. Perform basic write and read
+* operations and verify the results.
+* - Test the CreateL and CreateMaxL methods by verifying the return value of 
+* KErrNone. Also force a heap error and verify return value of KErrNoMemory.
+* - Test the Create(const TDesC_& aDesc) and Create(const TDesCX_ aDesc, 
+* TInt aMaxLength) methods by verifying the return value of KErrNone. Verify
+* initial length, max length and initialisation.
+* - Test the CreateL(const TDesC_& aDesc) and CreateMaxL(const TDesCX_ aDesc, 
+* TInt aMaxLength) methods by verifying the return value of KErrNone. Also 
+* force a heap error and verify return value of KErrNoMemory.
+* - Test the Swap method by creating two initialised objects, calling Swap 
+* and confirming the results as expected.
+* - Test the Assign method by performing an assign from a variety of sources
+* and verifying the results are as expected.
+* - Test the ReAlloc method in a variety of scenarios that decrease memory, 
+* increase memory and zero-length memory. Verify that the results are as
+* expected.
+* - Test the ReAllocL by verifying the return value of KErrNone. Also force 
+* a heap error and verify return value of KErrNoMemory. Verify that the
+* object is the same as before the failed ReAllocL call.
+* - Test the CleanupClosePushL method via CleanupStack::PopAndDestroy().
+* - Force the CleanupClosePushL to leave to check cleanup of RBuf.
+* Platforms/Drives/Compatibility:
+* All 
+* Assumptions/Requirement/Pre-requisites:
+* Failures and causes:
+* Base Port information:
+*
+*/
+
+
+#include <e32test.h>
+#include <e32math.h>
+#include <u32std.h>
+
+LOCAL_D RTest test(_L("T_RBUF"));
+
+#undef _TS
+#define _TS(a) ((const TTEXT*)RTest::String(sizeof(TTEXT),(TText8*)a,(TText16*)L ## a)) 
+
+/**
+Tests the following methods. 
+ - TInt Create(TInt aMaxLength);
+ - TInt CreateMax(TInt aMaxLength);
+*/
+template<class RBUF>	
+LOCAL_C void TestCreate(RBUF*)
+{
+	RBUF rBuf;
+	
+	test.Next(_L("Create(TInt aMaxLength) method"));
+
+	test(rBuf.Create(19)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==0);
+	test(rBuf.MaxLength()==19);
+	rBuf.SetLength(2);
+	rBuf[1] = 1;						//Try basic write & ...
+	test(rBuf[1] == 1);					//... read 
+	rBuf.Close();
+
+	test(rBuf.Create(0)==KErrNone);		//Create zero length RBuf as EPtr type
+	test(rBuf.Length()==0);
+	test(rBuf.MaxLength()==0);
+	rBuf.Close();
+	
+	test.Next(_L("CreateMax(TInt aMaxLength) method"));
+	
+	test(rBuf.CreateMax(20)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==20);
+	test(rBuf.MaxLength()==20);
+	rBuf[1] = 1;
+	test(rBuf[1] == 1);
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CreateL(TInt aMaxLength);
+ - void CreateMaxL(TInt aMaxLength);
+*/
+template<class RBUF>
+LOCAL_C void TestCreateLeaving(RBUF*)
+{
+	RBUF rBuf;
+
+	test.Next(_L("CreateL(TInt aMaxLength) method"));
+
+	TRAPD(ret, rBuf.CreateL(20));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);			//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(10));	
+	test(KErrNoMemory == ret);		// It fails due to __UHEAP_FAILNEXT(1);
+#endif //_DEBUG
+
+	test.Next(_L("CreateMaxL(TInt aMaxLength) method"));
+
+	TRAP(ret, rBuf.CreateMaxL(20));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);			//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateMaxL(10));	
+	test(KErrNoMemory == ret);		// It fails due to __UHEAP_FAILNEXT(1);
+#endif //_DEBUG
+}
+
+/**
+Tests the following methods. 
+ - TInt Create(const TDesC_& aDesc);
+ - TInt Create(const TDesC_& aDesc, TInt aMaxLength));
+*/
+template<class RBUF, class TBUF, class TTEXT>	
+LOCAL_C void TestCreateFromDes(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("012345"));
+
+	test.Next(_L("Create(const TDesC_& aDesc) method"));
+
+	test(rBuf.Create(des)==KErrNone);					//Create RBuf as EPtr type
+	test(rBuf == des);
+	rBuf.Close();
+
+	test.Next(_L("Create(const TDesCX_ aDesc, TInt aMaxLength) method"));
+
+	test(rBuf.Create(des, des.Length())==KErrNone);		//Create RBuf as EPtr type
+	test(rBuf==des);
+	rBuf.Close();
+
+	test(rBuf.Create(des, des.Length()-2)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==4);
+	test(rBuf.MaxLength()==4);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[3] == (TTEXT)('3'));
+	test(rBuf<des);
+	rBuf.Close();
+
+	test(rBuf.Create(des, des.Length()+2)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==6);
+	test(rBuf.MaxLength()==8);
+	test(rBuf==des);
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CreateL(const TDesC_& aDesc);
+ - void CreateMaxL(const TDesC_& aDesc, TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT>
+LOCAL_C void TestCreateFromDesLeaving(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("123456"));
+
+	test.Next(_L("CreateL(const TDesC_& aDesc) method"));
+
+	TRAPD(ret, rBuf.CreateL(des));				//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);						//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(des));	
+	test(KErrNoMemory == ret);					// This will fail due to __UHEAP_FAILNEXT(1);
+#endif //(_DEBUG)
+
+	test.Next(_L("CreateL(const TDesC_& aDesc, TInt aMaxLength) method"));
+
+	TRAP(ret, rBuf.CreateL(des, des.Length()));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);						//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(des, des.Length()));	
+	test(KErrNoMemory == ret);					// It fails due to __UHEAP_FAILNEXT(1);
+#endif //(_DEBUG)
+}
+
+/**
+Tests the following methods:
+ - TInt Assign(const RBuf_& rBuf);
+ - TInt Assign(TUint* aHeapCell, TInt aMaxLength);
+ - TInt Assign(TUint* aHeapCell, TInt aLength, TInt aMaxLength);
+ - TInt Assign(HBufC& aHBuf);
+ - RBuf(HBufC_&) constructor.
+*/
+template<class RBUF, class TBUF, class TTEXT, class HBUF>	
+LOCAL_C void TestAssign(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("123456"));
+	RBUF rBuf2;
+
+	test.Next(_L("Assign(const RBuf_& aRBuf) method"));
+
+	rBuf2.Create(des);
+	rBuf.Assign(rBuf2);
+	test(rBuf==rBuf2);
+	rBuf.Close();
+	
+	test.Next(_L("Assign(TUint* aHeapCell, TInt aLength, TInt aMaxLength ) method"));
+
+	TTEXT* heap = (TTEXT*)User::Alloc(24*(TInt)sizeof(TTEXT)); //Allocate 48 bytes for 24 long RBuf16
+	rBuf.Assign(heap, 12,24);
+	test(rBuf.Length() == 12);		
+	test(rBuf.MaxLength() == 24);		
+	rBuf.Close();
+
+	heap = NULL;
+	rBuf.Assign(heap, 0,0);
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 0);		
+	rBuf.Close();
+	
+	test.Next(_L("Assign(TUint* aHeapCell, TInt aMaxLength ) method"));
+	
+	heap = (TTEXT*)User::Alloc(24*(TInt)sizeof(TTEXT)); //Allocate 48 bytes for 24 long RBuf16
+	rBuf.Assign(heap, 24);
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 24);		
+	rBuf.Close();
+
+	test.Next(_L("Assign(HBufC_* aHBuf) method"));
+
+	HBUF* hBuf = HBUF::NewMax(11);
+	rBuf.Assign(hBuf);			//Create RBuf as EBufCPtr type
+	test(rBuf.Length() == 11);
+	test(rBuf.MaxLength() >= 11); //There could me more allocated memory - see HBufC8::Des()
+	rBuf.Close();
+
+	test.Next(_L("RBuf_(HBufC_* aHBuf) constructor"));
+
+	hBuf = HBUF::NewMax(12);	//Create RBuf as EBufCPtr
+	RBUF rBuf3(hBuf);
+	test(rBuf3.Length() == 12);
+	test(rBuf3.MaxLength() >= 12);
+	rBuf3.Close();
+
+	hBuf = HBUF::NewMax(0);
+	RBUF rBuf4(hBuf);			//The length of aHBuf is zero
+	test(rBuf4.Length() == 0);
+	rBuf4.Close();
+
+	hBuf = NULL;				//aHBuf is NULL
+	RBUF rBuf5(hBuf);
+	test(rBuf5.Length() == 0);
+	test(rBuf5.MaxLength() == 0);
+	rBuf5.Close();
+}
+
+/**
+Tests the following methods. 
+ - TInt ReAlloc(TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT, class HBUF>	
+LOCAL_C void TestReAlloc(RBUF*)
+{
+	RBUF rBuf;
+
+	TBUF des (_TS("0123456"));
+
+
+	test.Next(_L("ReAlloc(TInt aMaxLength) method"));
+
+	//reallocate EPtr type - decrease memory
+	test(rBuf.Create(des)==KErrNone);					//Create as EPtr
+	rBuf.SetLength(3);
+	test(rBuf.ReAlloc(3)==KErrNone);					//ReAlloc to EPtr
+	test(rBuf.MaxLength()>=3);
+	test(rBuf.Length()==3);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[2] == (TTEXT)('2'));
+	rBuf.Close();
+
+	//reallocate EPtr type - increase memory
+	test(rBuf.Create(des,des.MaxLength())==KErrNone);	//Create as EPtr
+	test(rBuf.ReAlloc(15)==KErrNone);					//ReAlloc to EPtr
+	test(rBuf.MaxLength()==15);
+	test(rBuf.Length()==7);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[6] == (TTEXT)('6'));
+	rBuf.Close();
+
+
+	//reallocate EBufCPtr type - decrease memory
+	HBUF* hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	rBuf.SetLength(5);
+	test(rBuf.ReAlloc(5)==KErrNone);		//ReAlloc to EBufCPtr
+	test(rBuf.MaxLength()>=5);//There could be more allocated memory - see HBufC8::Des()
+	test(rBuf.Length()==5);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[4] == (TTEXT)('4'));
+	rBuf.Close();
+
+	//reallocate EBufCPtr type - increase memory
+	hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	test(rBuf.ReAlloc(15)==KErrNone);		//ReAlloc to EBufCPtr
+	test(rBuf.MaxLength()>=15);//There could be more allocated memory - see HBufC8::Des()
+	test(rBuf.Length()==9);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[8] == (TTEXT)('8'));
+	rBuf.Close();
+
+	//reallocate EPtr type - to zero-length
+	test(rBuf.Create(des)==KErrNone);		//Create as EPtr
+	rBuf.SetLength(0);
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==0);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate EBufCPtr type to zero-length
+	hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	rBuf.SetLength(0);
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==0);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate from zero-length
+	rBuf.Create(0);							//Create as EPtr
+	test(rBuf.ReAlloc(9)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==9);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate from zero-length EBufCPtr to EPtr
+	struct dummy // make it look like RBuf16
+		{
+		TInt iLength;
+		TInt iMaxLength;
+		HBUF* iEBufCPtrType;	//Pointer to buffer data
+		};
+
+	// reference rBuf as our dummy.. 
+	dummy &drBuf = (dummy&) rBuf;
+	rBuf.Assign(HBUF::NewL(0)); 			//Create as EBufCPtr
+	test(EBufCPtr == (drBuf.iLength>>KShiftDesType));
+	rBuf.Close(); 	// the actual behavior causes memory leaks, so we should close it first.
+	test(rBuf.ReAlloc(13)==KErrNone);	// ReAlloc changes it from EBufCPtr to EPtr
+	test(EPtr == (drBuf.iLength>>KShiftDesType));
+	test(rBuf.MaxLength() == 13);		
+	test(rBuf.Length() == 0);		
+	rBuf.Close();
+
+	//reallocate from zero-length to zero-length
+	rBuf.Create(0);							//Create as EPtr
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 0);		
+	rBuf.Close();
+
+}
+
+/**
+Tests the following methods. 
+ - TInt ReAllocL(TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT>	
+LOCAL_C void TestReAllocLeaving(RBUF*)
+{
+	RBUF rBuf;
+
+	TBUF des(_TS("01"));
+
+	test.Next(_L("ReAllocL(TInt aMaxLength) method"));
+
+	test(rBuf.Create(des) ==KErrNone);
+	TRAPD(ret, rBuf.ReAllocL(6));	//ReAlloc buffer
+	test(KErrNone == ret);
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);
+	TRAP(ret, rBuf.ReAllocL(100));	//Realloc buffer. This should fail.
+	test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+
+	test(rBuf.MaxLength()==6);		//Check RBuf is the same as before ... 
+	test(rBuf.Length()==2);			//... ReAlloc that failed.
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[1] == (TTEXT)('1'));
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void Swap(RBuf_& aBuf);
+*/
+template<class RBUF, class TBUF, class TTEXT>
+LOCAL_C void TestSwap(RBUF*)
+{
+	RBUF rBuf1, rBuf2;
+	TBUF des1(_TS("12"));
+	TBUF des2 (_TS("345678"));
+
+	test.Next(_L("Swap(RBuf_& aRBuf) method"));
+
+	test(rBuf1.Create(des1) ==KErrNone);
+	test(rBuf2.Create(des2) ==KErrNone);
+
+	rBuf1.Swap(rBuf2);
+
+	test(rBuf1==des2);
+	test(rBuf2==des1);
+
+	rBuf1.Close();
+	rBuf2.Close();
+}
+
+/**
+Test assignemnt operator.
+*/
+template<class RBUF, class TBUF, class TBUFC, class TTEXT>
+LOCAL_C void TestAssignmentOperator()
+{
+	test.Next(_L("Assignment operator"));
+
+	TBUF tdes(_TS("Modifiable descriptor"));
+	TBUFC tdesc(_TS("Non-modifiable descriptor"));
+
+	RBUF rbuf, rbuf2;
+	rbuf.Create(32);
+	rbuf2.Create(32);
+	rbuf2.Copy(_TS("Buffer descriptor"), 17);
+
+	rbuf = tdesc;	test(rbuf == tdesc);
+	rbuf = tdes;		test(rbuf == tdes);
+	rbuf = rbuf2;	test(rbuf == rbuf2);
+
+	rbuf2.Close();
+	rbuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CleanupClosePushL();
+*/
+template<class RBUF> LOCAL_C void TestCleanupClosePushL(RBUF*)
+{
+	RBUF rBuf;
+	
+	test.Next(_L("CleanupClosePushL() method"));
+	test(KErrNone == rBuf.Create(10));
+	rBuf.CleanupClosePushL();
+	CleanupStack::PopAndDestroy();
+}
+
+/**
+This function will intentionally leave to check cleanup of RBuf.
+To be called in debug build only. Otherwise will panic.
+*/
+template<class RBUF> LOCAL_C void TestRBufCleanupL(RBUF*)
+{
+	RBUF rBuf;
+
+	test.Next(_L("Test cleanup of RBuf"));
+	test(KErrNone == rBuf.Create(10));
+	rBuf.CleanupClosePushL();
+
+	__UHEAP_FAILNEXT(1);
+	TInt* ptr = (TInt*)User::AllocL(20); //This should leave
+	*ptr = 0; //Avoid compiler warning
+	User::Panic(_L("Should not reach this line"),0);
+}
+
+GLDEF_C TInt E32Main()
+    {
+	RBuf8* r8=0;
+	RBuf16* r16=0;
+	RBuf* r=0;
+
+	CTrapCleanup* trapHandler=CTrapCleanup::New();
+	test(trapHandler!=NULL);
+
+	test.Title();
+	test.Start(_L("Testing RBuf8, RBuf16 & RBuf classes"));
+
+	__UHEAP_MARK;
+
+	test.Start(_L("Testing class RBuf8 ..."));
+	TestCreate<RBuf8>(r8);
+	TestCreateLeaving<RBuf8>(r8);
+	TestCreateFromDes<RBuf8,TBuf8<11>,TText8>(r8);
+	TestCreateFromDesLeaving<RBuf8,TBuf8<11>,TText8>(r8);
+	TestSwap<RBuf8,TBuf8<11>,TText8>(r8);
+	TestAssign<RBuf8,TBuf8<11>,TText8,HBufC8>(r8);
+	TestReAlloc<RBuf8,TBuf8<11>,TText8,HBufC8>(r8);
+	TestReAllocLeaving<RBuf8,TBuf8<11>,TText8>(r8);
+	TestAssignmentOperator<RBuf8,TBuf8<32>,TBufC8<32>,TText8>();
+	TRAPD(ret,TestCleanupClosePushL<RBuf8>(r8)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf8>(r8)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	test.Start(_L("Testing class RBuf16 ..."));
+	TestCreate<RBuf16>(r16);
+	TestCreateLeaving<RBuf16>(r16);
+	TestCreateFromDes<RBuf16,TBuf16<11>,TText16>(r16);
+	TestCreateFromDesLeaving<RBuf16,TBuf16<11>,TText16>(r16);
+	TestSwap<RBuf16,TBuf16<11>,TText16>(r16);
+	TestAssign<RBuf16,TBuf16<11>,TText16,HBufC16>(r16);
+	TestReAlloc<RBuf16,TBuf16<11>,TText16,HBufC16>(r16);
+	TestReAllocLeaving<RBuf16,TBuf16<11>,TText16>(r16);
+	TestAssignmentOperator<RBuf16,TBuf16<32>,TBufC16<32>,TText16>();
+	TRAP(ret,TestCleanupClosePushL<RBuf16>(r16)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf16>(r16)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	test.Start(_L("Testing class RBuf ..."));
+	TestCreate<RBuf>(r);
+	TestCreateLeaving<RBuf>(r);
+	TestCreateFromDes<RBuf,TBuf<11>,TText>(r);
+	TestCreateFromDesLeaving<RBuf,TBuf<11>,TText>(r);
+	TestSwap<RBuf,TBuf<11>,TText>(r);
+	TestAssign<RBuf,TBuf<11>,TText,HBufC>(r);
+	TestReAlloc<RBuf,TBuf<11>,TText,HBufC>(r);
+	TestReAllocLeaving<RBuf,TBuf<11>,TText>(r);
+	TestAssignmentOperator<RBuf,TBuf<32>,TBufC<32>,TText>();
+	TRAP(ret,TestCleanupClosePushL<RBuf>(r)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf>(r)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	__UHEAP_MARKEND;
+
+	test.End();
+
+	delete trapHandler;
+	return(KErrNone);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddturnaoundtimertest.cpp
+* LDD for getting the timer count & ticks for testing turnaround timer implementation.
+*
+*/
+
+
+#include <kernel.h>
+#include "d_lddturnaroundtimertest.h"
+
+class DTest1;
+class DTestFactory : public DLogicalDevice
+//
+// Test LDD factory
+//
+	{
+public:
+	DTestFactory();
+	virtual TInt Install(); 					//overriding pure virtual
+	virtual void GetCaps(TDes8& aDes) const;	//overriding pure virtual
+	virtual TInt Create(DLogicalChannelBase*& aChannel); 	//overriding pure virtual
+	};
+
+class DTest1 : public DLogicalChannelBase
+//
+// Test logical channel
+//
+	{
+public:
+	virtual ~DTest1();
+protected:
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+	virtual TInt Request(TInt aReqNo, TAny* a1, TAny* a2);
+	};
+
+
+
+DECLARE_STANDARD_LDD()
+	{
+	return new DTestFactory;
+	}
+
+//
+// Constructor
+//
+DTestFactory::DTestFactory()
+	{
+
+	}
+
+TInt DTestFactory::Create(DLogicalChannelBase*& aChannel)
+	{
+//
+// Create new channel
+//
+	aChannel=new DTest1;
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	return SetName(&KLddName);
+	}
+
+void DTestFactory::GetCaps(TDes8& /*aDes*/) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	}
+
+TInt DTest1::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& /*aVer*/)
+//
+// Create channel
+//
+	{
+	return KErrNone;
+	}
+
+DTest1::~DTest1()
+//
+// Destructor
+//
+	{
+	}
+
+TInt DTest1::Request(TInt aReqNo, TAny* a1, TAny* /*a2*/)
+	{
+//
+// Get the timer tick count & ticks
+//
+    TUint temp = 0;
+	switch(aReqNo)
+		{
+		case (RLddTest1::EGET_TIMERTICKS):
+			{
+			temp = (TInt)(*(TInt *)a1);
+			temp = NKern::TimerTicks(temp);
+			kumemput(a1, &temp, sizeof(temp));
+			return KErrNone;
+			}
+		case (RLddTest1::EGET_TIMERTICKCOUNT):
+			{
+			temp = NKern::TickCount();
+       		kumemput(a1, &temp, sizeof(temp));
+			return KErrNone;
+			}
+		}
+	return KErrNone;	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddturnaroundtimetest.h
+*
+*/
+
+
+#if !defined(__DLDDTURNAROUNDTIMETEST_H__)
+#define __DLDDTURNAROUNDTIMETEST_H__
+
+#include <e32cmn.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#endif
+
+_LIT(KLddName,"TurnarountTimeTest");
+
+class RLddTest1 : public RBusLogicalChannel
+	{
+public:
+	enum TControl
+		{
+		EGET_TIMERTICKCOUNT = 0,
+		EGET_TIMERTICKS = 1
+		};
+
+public:
+	inline TInt Open();
+	inline TInt Test_getTimerTicks(TUint &time);
+	inline TInt Test_getTimerCount(TUint &time);
+	static inline TInt Unload();
+	};
+
+#include "d_lddturnaroundtimertest.inl"
+
+#endif   //__DLDDTURNAROUNDTIMETEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.inl	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddtunraroundtimetest.inl
+*
+*/
+
+
+#ifndef __KERNEL_MODE__
+inline TInt RLddTest1::Open()
+	{ return DoCreate(KLddName,TVersion(0,1,1),KNullUnit,NULL,NULL); }
+inline TInt RLddTest1::Test_getTimerTicks(TUint &time)
+	{ return DoControl(EGET_TIMERTICKS, (TAny *)&time); }
+inline TInt RLddTest1::Test_getTimerCount(TUint &time)
+    { return DoControl(EGET_TIMERTICKCOUNT, (TAny *)&time); }
+inline TInt RLddTest1::Unload()
+	{ return User::FreeLogicalDevice(KLddName); }
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <kern_priv.h>
+#include "d_newldd.h"
+#include "t_newldd.h"
+
+TInt DOperatorNewTest::Request(TInt aReqNo, TAny* /*a1*/, TAny* /*a2*/)
+	{
+	switch(aReqNo)
+		{
+		//new
+		case RNewLddTest::ENew:
+			{
+			return TestNew();
+			}
+		//placement new
+		case RNewLddTest::EPlacementVectorNew:
+			{
+			return TestPlacementVectorNew();
+			}
+		//vector new
+		case RNewLddTest::EVectorNew:
+			{
+			return TestVectorNew();
+			}
+		case RNewLddTest::EPlacementNew:
+			{
+			return TestPlacementNew();
+			}
+		default:
+			break;
+		}
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestNew()
+	{
+	Kern::Printf("::TestNew()");
+	NKern::ThreadEnterCS();
+
+	#define TEST_KERN_NEW_OOM(CLASS)\
+		{\
+		Kern::Printf("new " #CLASS);\
+		CLASS* p##CLASS=NULL;\
+		XTRAPD(r,XT_DEFAULT, p##CLASS = new CLASS);\
+		if(r!=KErrNone)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return r;\
+			}\
+		if(p##CLASS)\
+			{\
+			delete p##CLASS;\
+			NKern::ThreadLeaveCS();\
+			return KErrGeneral;\
+			}\
+		}
+
+	//OOM tests: should(must) not throw
+	Kern::Printf("OOM Tests;");
+
+	TEST_KERN_NEW_OOM(XVeryLargeClassCtorAndDtor);
+	TEST_KERN_NEW_OOM(XVeryLargeClassCtorOnly);
+	TEST_KERN_NEW_OOM(XVeryLargeClassDtorOnly);
+	TEST_KERN_NEW_OOM(XVeryLargeClassNoTors);
+
+	Kern::Printf("non-OOM Tests;");
+	//Non-OOM:
+	
+	#define TEST_KERN_NEW(CLASS, TEST_CTOR)\
+		{\
+		Kern::Printf("new " #CLASS);\
+		CLASS* p##CLASS=NULL;\
+		XTRAPD(r,XT_DEFAULT, p##CLASS = new CLASS);\
+		if(r!=KErrNone)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return r;\
+			}\
+		if(p##CLASS==NULL)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return KErrGeneral;\
+			}\
+		volatile TBool testCtor=(TEST_CTOR);\
+		if(testCtor && (p##CLASS->iState!=EConstructed) )\
+			{\
+			r=KErrGeneral;\
+			}\
+		delete p##CLASS;\
+		p##CLASS=NULL;\
+		if(r!=KErrNone)\
+			return r;\
+		}
+
+	TEST_KERN_NEW(XCtorAndDtor, ETrue);
+	TEST_KERN_NEW(XCtorOnly, ETrue);
+	TEST_KERN_NEW(XDtorOnly, EFalse);
+	TEST_KERN_NEW(XNoTors, EFalse);
+	
+	NKern::ThreadLeaveCS();
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestPlacementNew()
+	{
+	Kern::Printf("::TestPlacementNew");
+
+	#define TEST_KERN_PLACEMENT_NEW(CLASS, POST_CTOR, POST_DTOR) \
+		{\
+		Kern::Printf("new(someram) " #CLASS);\
+		NKern::ThreadEnterCS();\
+		void* someram = Kern::AllocZ(sizeof(CLASS));\
+		NKern::ThreadLeaveCS();\
+		if(!someram)\
+			return KErrNoMemory;\
+		\
+		CLASS* p##CLASS = new (someram) CLASS;\
+		TInt r=KErrNone;\
+		if(p##CLASS->iState != POST_CTOR)\
+			{\
+			r=KErrGeneral;\
+			}\
+		if(r==KErrNone)\
+			{\
+			p##CLASS->~CLASS();\
+			if(p##CLASS->iState != POST_DTOR)\
+				{\
+				r=KErrGeneral;\
+				}\
+			}\
+		NKern::ThreadEnterCS();\
+		Kern::Free(someram);\
+		NKern::ThreadLeaveCS();\
+		if(r != KErrNone)\
+			return r;\
+		}
+
+	TEST_KERN_PLACEMENT_NEW(XCtorAndDtor, EConstructed, EDeconstructed);
+	TEST_KERN_PLACEMENT_NEW(XCtorOnly, EConstructed, EConstructed);
+	TEST_KERN_PLACEMENT_NEW(XDtorOnly, ENull, EDeconstructed);
+	TEST_KERN_PLACEMENT_NEW(XNoTors, ENull, ENull);
+	
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestPlacementVectorNew()
+	{
+	
+	Kern::Printf("::TestPlacementVectorNew");
+	
+	//for vector placement new, emulator compilers 
+	//allocate a cookie at start of buffer.
+	//this seems wrong since the cookie is an internal compiller
+	//detail which the user should not need to know about
+	#if defined(__WINSCW__) || defined(__VC32__)
+	Kern::Printf("Not running on emulator. WINSCW and Visual studio\n insert a cookie for placement vector new"); 
+
+	#else
+
+	#define TEST_KERN_PLACEMENT_VECTOR_NEW(CLASS, ARRAY_LENGTH, POST_CTOR, POST_DTOR) \
+		{\
+		NKern::ThreadEnterCS();\
+		void* someram = Kern::AllocZ(sizeof(CLASS) * (ARRAY_LENGTH));\
+		NKern::ThreadLeaveCS();\
+		if(someram==NULL)\
+			return KErrNoMemory;\
+		\
+		TInt r = KErrNone;\
+		Kern::Printf("new (someram) " #CLASS "[%d]", ARRAY_LENGTH);\
+		\
+		CLASS* p##CLASS = new (someram) CLASS[ARRAY_LENGTH];\
+		for(TInt i=0; i<(ARRAY_LENGTH); ++i)\
+			{\
+			if(p##CLASS[i].iState != POST_CTOR)\
+				{\
+				r=KErrGeneral;\
+				break;\
+				}\
+			p##CLASS[i].~CLASS();\
+			if(p##CLASS[i].iState != POST_DTOR)\
+				{\
+				r=KErrGeneral;\
+				break;\
+				}\
+			}\
+		NKern::ThreadEnterCS();\
+		Kern::Free(someram);\
+		NKern::ThreadLeaveCS();\
+		if(r!=KErrNone)\
+			return r;\
+		}\
+	
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XCtorAndDtor, KTestArrayLength, EConstructed, EDeconstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XCtorOnly, KTestArrayLength, EConstructed, EConstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XDtorOnly, KTestArrayLength, ENull, EDeconstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XNoTors, KTestArrayLength, ENull, ENull);
+
+	#endif
+
+	return KErrNone;
+	}
+TInt DOperatorNewTest::TestVectorNew()
+	{
+	//OOM testing
+	Kern::Printf("::TestVectorNew()");
+	Kern::Printf("OOM test");
+	
+	TInt r=KErrNone;
+
+	#define TEST_KERN_VECTOR_NEW_OOM(CLASS, ARRAY_LENGTH)\
+	{\
+		Kern::Printf("new " #CLASS "[%d]", ARRAY_LENGTH);\
+		CLASS* p##CLASS = NULL;\
+		NKern::ThreadEnterCS();\
+		XTRAP(r,XT_DEFAULT,p##CLASS = new CLASS[ARRAY_LENGTH]; );\
+		if(p##CLASS)\
+			{\
+			r=KErrGeneral;\
+			delete p##CLASS;\
+			}\
+		NKern::ThreadLeaveCS();\
+		if(r!=KErrNone)\
+			{\
+			return r;\
+			}\
+	}\
+
+	TEST_KERN_VECTOR_NEW_OOM(XCtorAndDtor, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XCtorOnly, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XDtorOnly, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XNoTors, KOOMArraySize);
+
+	
+	//non-OOM:
+	Kern::Printf("non-OOM test");
+
+	#define TEST_KERN_VECTOR_NEW(CLASS, ARRAY_LENGTH, TEST_CTOR)\
+	{\
+		Kern::Printf("new " #CLASS "[%d]", ARRAY_LENGTH);\
+		CLASS* p##CLASS = NULL;\
+		NKern::ThreadEnterCS();\
+		XTRAP(r,XT_DEFAULT,p##CLASS = new CLASS[ARRAY_LENGTH]; );\
+		NKern::ThreadLeaveCS();\
+		if(p##CLASS == NULL)\
+			{\
+			return KErrNoMemory;\
+			}\
+		\
+		TBool testCtor=(TEST_CTOR);\
+		if(testCtor)\
+			{\
+			for(TInt i=0; i<(ARRAY_LENGTH); ++i)\
+				{\
+				if(p##CLASS[i].iState!=	EConstructed)\
+					{\
+					r=KErrGeneral;\
+					break;\
+					}\
+				}\
+			}\
+		\
+		NKern::ThreadEnterCS();\
+		delete[] p##CLASS;\
+		NKern::ThreadLeaveCS();\
+		p##CLASS=NULL;\
+		if(r!=KErrNone)\
+			{\
+			return r;\
+			}\
+	}\
+
+	TEST_KERN_VECTOR_NEW(XCtorAndDtor, KTestArrayLength, ETrue);
+	TEST_KERN_VECTOR_NEW(XCtorOnly, KTestArrayLength, ETrue);
+	TEST_KERN_VECTOR_NEW(XDtorOnly, KTestArrayLength, EFalse);
+	TEST_KERN_VECTOR_NEW(XNoTors, KTestArrayLength, EFalse);
+
+	return KErrNone;
+	}
+
+TInt DOperatorNewTestFactory::Create(DLogicalChannelBase*& aChannel)
+//
+// Create a new DTest on this logical device
+//
+	{
+	aChannel=new DOperatorNewTest();
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DOperatorNewTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	iVersion = TVersion(0,1,1);
+	return SetName(&KLddName);
+	}
+
+void DOperatorNewTestFactory::GetCaps(TDes8& /*aDes*/) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	//not supported
+	}
+
+
+
+DECLARE_STANDARD_LDD()
+	{
+	//create factory here.
+	return new DOperatorNewTestFactory;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* LDD for testing operator new kernel side
+*
+*/
+
+
+#ifndef __D_NEWLDD_H
+#define __D_NEWLDD_H
+
+#include <kernel.h>
+#include <e32cmn.h>
+
+#include "t_new_classes.h"
+
+
+
+class DOperatorNewTestFactory : public DLogicalDevice
+{
+public:
+	TInt Install();
+	void GetCaps(TDes8& aDes) const;
+	TInt Create(DLogicalChannelBase*& aChannel);
+};
+
+class DOperatorNewTest : public DLogicalChannelBase
+{
+public:
+	virtual TInt Request(TInt aReqNo, TAny* a1, TAny* a2);
+private:
+	TInt TestNew();
+	TInt TestPlacementNew();
+	TInt TestPlacementVectorNew();
+	TInt TestVectorNew();
+};
+
+
+#endif //__D_NEWLDD_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "t_new_classes.h"
+
+XCtorAndDtor::XCtorAndDtor()
+	{
+	iState = EConstructed;
+	}
+XCtorAndDtor::~XCtorAndDtor()
+	{
+	iState = EDeconstructed;
+	}
+
+
+XCtorOnly::XCtorOnly()
+	{
+	iState = EConstructed;
+	}
+
+
+XDtorOnly::~XDtorOnly()
+	{
+	iState = EDeconstructed;
+	}
+
+
+XVeryLargeClassCtorAndDtor::XVeryLargeClassCtorAndDtor()
+	{
+	iBust[0] = EConstructed;
+	}
+XVeryLargeClassCtorAndDtor::~XVeryLargeClassCtorAndDtor()
+	{
+	iBust[0] = EDeconstructed;
+	}
+
+
+XVeryLargeClassCtorOnly::XVeryLargeClassCtorOnly()
+	{
+	iBust[0] = EConstructed;
+	}
+
+
+XVeryLargeClassDtorOnly::~XVeryLargeClassDtorOnly()
+	{
+	iBust[0] = EDeconstructed;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef T_NEW_CLASSES
+#define T_NEW_CLASSES
+
+#include <e32cmn.h>
+
+/**
+A flag to record what part of lifecylce an object is in
+*/
+enum TObjState
+	{
+	ENull = 0,
+	EConstructed = 1,
+	EDeconstructed = 2
+	};
+
+class XCtorAndDtor
+	{
+public:
+	XCtorAndDtor();
+	~XCtorAndDtor();
+	TObjState iState;
+	};
+
+class XCtorOnly
+	{
+public:
+	XCtorOnly();
+	TObjState iState;
+	};
+
+class XDtorOnly
+	{
+public:
+	~XDtorOnly();
+	TObjState iState;
+	};
+
+class XNoTors
+	{
+public:
+	TObjState iState;
+	};
+
+//A buffer length for an object so large that we always
+//expect allocation to fail.
+const TInt KOOMBufferLength=10000000;
+
+class XVeryLargeClassCtorAndDtor
+	{
+public:
+	XVeryLargeClassCtorAndDtor();
+	~XVeryLargeClassCtorAndDtor();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassCtorOnly
+	{
+public:
+	XVeryLargeClassCtorOnly();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassDtorOnly
+	{
+public:
+	~XVeryLargeClassDtorOnly();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassNoTors
+	{
+public:
+	TInt iBust[KOOMBufferLength];
+	};
+
+#endif //T_NEW_CLASSES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_newldd.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __T_NEWLDD_H
+#define __T_NEWLDD_H
+
+_LIT(KLddName,"OperatorNewTest");
+_LIT(KKInstallLddName,"d_newldd");
+
+
+const TInt KErrException = -99;
+const TInt KTestArrayLength = 100; ///< A sensible array length to test vector new with
+const TInt KOOMArraySize = 100000000; ///<An array size so big that array allocation should always fail
+
+class RNewLddTest : public RBusLogicalChannel
+{
+public:
+	enum TControl
+         {
+         ENew=0,
+         EPlacementVectorNew=1,
+         EVectorNew=2,
+         EPlacementNew=3
+         };
+	
+	TInt DoControl(TInt aFunction);
+	TInt Open();
+};
+
+#endif // __T_NEWLDD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+BASEDEFAULT
+
+PRJ_MMPFILES
+d_newldd
+d_lddturnaroundtimertest
+t_sharedio3
+t_rbuf
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_lddturnaroundtimertest.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\d_lddturnaroundtimertest.mmp
+*
+*/
+
+
+#include "kernel/kern_ext.mmh"
+
+TARGET         d_lddturnaroundtimertest.ldd
+TARGETTYPE     LDD
+SOURCEPATH     ../device
+SOURCE         d_lddturnaroundtimertest.cpp
+
+
+EPOCALLOWDLLDATA
+
+UID		0x100000af
+VENDORID 0x70000001
+
+
+capability		all
+
+start wins
+win32_headers
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_newldd.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\d_newldd.mmp
+*
+*/
+
+ 
+#include "kernel/kern_ext.mmh"
+
+TARGET         d_newldd.ldd
+TARGETTYPE     LDD
+SOURCEPATH      ../device
+SOURCE         d_newldd.cpp t_new_classes.cpp
+ 
+start wins
+
+win32_library			kernel32.lib user32.lib gdi32.lib
+#if defined(VC32)
+win32_library			msvcrt.lib
+#endif
+
+
+end
+
+EPOCALLOWDLLDATA
+
+UID             0x100000af
+VENDORID 0x70000001
+ 
+capability              all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_rbuf.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\t_rbuf.mmp
+*
+*/
+
+
+TARGET         t_rbuf.exe        
+TARGETTYPE     EXE
+SOURCEPATH	../buffer
+SOURCE         t_rbuf.cpp
+LIBRARY        euser.lib
+SYSTEMINCLUDE  /epoc32/include
+EPOCSTACKSIZE  0x3000
+
+capability		all
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_sharedio3.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\t_sharedio3.mmp
+*
+*/
+
+
+target			t_sharedio3.exe        
+targettype		exe
+sourcepath		../mmu
+source			t_sharedio.cpp
+library			euser.lib
+systeminclude	/epoc32/include
+epocfixedprocess
+
+epocheapsize	0x1000 0x00010000
+
+capability		all
+macro			__SECOND_FIXED__
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/d_sharedio.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\d_sharedio.h
+*
+*/
+
+
+#ifndef __D_SLDD_H__
+#define __D_SLDD_H__
+#include <e32cmn.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#endif
+
+const TInt KSizeGlobalBuffer=0x2000;
+const TInt KMagic1=12345;
+const TInt KMagic2=54321;
+
+class RTestLdd : public RBusLogicalChannel
+	{
+public:
+	enum TControl
+		{
+		ECreateBuffer,
+		EMapInGlobalBuffer,
+		EMapOutGlobalBuffer,
+		EDestroyGlobalBuffer,
+		ECreateBufferPhysAddr,
+		EDestroyBufferPhysAddr,
+		EMapInBuffer,
+		EMapOutBuffer,
+		EDestroyBuffer,
+		ECheckBuffer,
+		EFillBuffer,
+		EThreadRW
+		};
+public:
+	inline TInt Open();
+	inline TInt CreateBuffer(TInt aLength);
+	inline TInt MapInGlobalBuffer(TUint aProcessId,TAny*& aAddress,TUint32& aLength);
+	inline TInt MapOutGlobalBuffer();
+	inline TInt DestroyGlobalBuffer();
+	inline TInt CreateBufferPhysAddr(TInt aLength);
+	inline TInt DestroyBufferPhysAddr();
+	inline TInt MapInBuffer(TAny** aAddress,TUint32* aLength);
+	inline TInt MapOutBuffer();
+	inline TInt DestroyBuffer();
+	inline TInt CheckBuffer(TUint32 key);
+	inline TInt FillBuffer(TUint32 key);
+	inline TInt ThreadRW(TDes8& aDes,TInt aThreadId=-1);
+	};
+
+_LIT(KSharedIoTestLddName,"D_SHAREDIO");
+
+#ifndef __KERNEL_MODE__
+inline TInt RTestLdd::Open()
+	{ return DoCreate(KSharedIoTestLddName,TVersion(),KNullUnit,NULL,NULL); }
+inline TInt RTestLdd::CreateBuffer(TInt aLength)
+	{ return DoControl(ECreateBuffer,(TAny*)aLength); }
+inline TInt RTestLdd::MapInGlobalBuffer(TUint aProcessId,TAny*& aAddress,TUint32& aLength)
+	{
+	TUint a = aProcessId;
+	TInt r=DoControl(EMapInGlobalBuffer,&a,&aLength);
+	aAddress = (TAny*)a;
+	return r;
+	}
+inline TInt RTestLdd::MapOutGlobalBuffer()
+	{ return DoControl(EMapOutGlobalBuffer); }
+inline TInt RTestLdd::DestroyGlobalBuffer()
+	{ return DoControl(EDestroyGlobalBuffer); }
+inline TInt RTestLdd::CreateBufferPhysAddr(TInt aLength)
+	{ return DoControl(ECreateBufferPhysAddr,(TAny*)aLength);	}
+inline TInt RTestLdd::DestroyBufferPhysAddr()
+	{ return DoControl(EDestroyBufferPhysAddr); }
+inline TInt RTestLdd::MapInBuffer(TAny** aAddress,TUint32* aLength)
+	{ return DoControl(EMapInBuffer,aAddress,aLength); }
+inline TInt RTestLdd::MapOutBuffer()
+	{ return DoControl(EMapOutBuffer); }
+inline TInt RTestLdd::DestroyBuffer()
+	{ return DoControl(EDestroyBuffer); }
+inline TInt RTestLdd::CheckBuffer(TUint32 key)
+	{ return DoControl(ECheckBuffer,(TAny*)key); }
+inline TInt RTestLdd::FillBuffer(TUint32 key)
+	{ return DoControl(EFillBuffer,(TAny*)key); }
+inline TInt RTestLdd::ThreadRW(TDes8& aDes,TInt aThreadId)
+	{ return DoControl(EThreadRW,(TAny*)&aDes,(TAny*)aThreadId); }
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/freeram.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\freeram.h
+*
+*/
+
+
+#ifndef __FREERAM_H__
+#define __FREERAM_H__
+
+//
+// returns the free RAM in bytes
+//
+inline TInt FreeRam()
+	{
+	// wait for any async cleanup in the supervisor to finish first...
+	UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, 0, 0);
+
+	TMemoryInfoV1Buf meminfo;
+	UserHal::MemoryInfo(meminfo);
+	return meminfo().iFreeRamInBytes;
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/t_sharedio.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,665 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\t_sharedio.cpp
+* Overview:
+* Verifies the correct implementation of Shared IO Buffers
+* API information:
+* DSharedIoBuffer
+* Details:
+* 1. Loading the shared IO buffer test device driver
+* 2. Create buffer of a specified size
+* - it passes a request to the device driver to create a buffer
+* - the driver creates a shared io buffer and it zero fills it
+* - it checks the size is as specified
+* 3. Map in buffer
+* - it passes a request to the device driver to map the buffer created at
+* step 1 into this user process
+* - the driver maps the buffer into this user process
+* - checks if UserToKernel and KernelToUser methods work as expected
+* - fills a buffer
+* - returns the user address and size to the user process
+* - using the address and size returned by the driver, the user process
+* checks the buffer is filled as expected
+* 4. Fill and check shared buffer
+* - user process fills the buffer and driver checks it
+* - driver fills the buffer and user process checks it
+* 5. Map Out Buffer
+* - requests to the driver that the buffer should be unmapped from this
+* process' address space
+* - the driver checks that iUserAddress becomes NULL after unmapping
+* 6. Destroy Buffer
+* - requests to the driver to destroy the buffer
+* 7. Create a buffer with a physical address
+* (not performed on WINS)
+* - requests to the driver to create a buffer by specifying a physical address
+* - the driver allocates a physical address
+* - creates a shared IO buffer over that physical address
+* - fills the buffer with a pattern
+* - destroys the buffer
+* - creates a hardware chunk over the same physical address
+* - checks the buffer contains the pattern
+* - closes the chunk
+* 8. Check using the same buffer by 2 different user processes
+* (not performed on WINS)
+* - process 1 maps a global buffer (the global buffer will be
+* created in the context of process 1)
+* - fills it
+* - unmaps it
+* - process 2 maps the global buffer
+* - checks if it's filled accordingly
+* - unmaps it
+* - destroys the global buffer
+* 9. Checking buffers are protected at context switching
+* (not relevant on WINS)
+* - creates a shared buffer and map it into this process
+* - creates a new process
+* - the new process tries to access the buffer mapped into the first process
+* by zeroing the raw buffer passed from the first process. This relies on the
+* fact that each shared buffer is created in the Home Section, so they will be
+* available at the same address
+* - tests if the new process was panicked due to access violation
+* - tests if the contents of the buffer haven't been changed
+* 10.Checking writing to unmapped buffer
+* (not performed on WINS)
+* - creates a new process
+* - the new process creates a buffer, maps it and unmaps it
+* - the new process tries to use the buffer after unmapping
+* - the parent process logs the exit type and reason and checks
+* these are EExitPanic and 3 (Kern 3 - access violation)
+* 11.Checking address lookup is implemented
+* (not relevant on WINS)
+* - creates a new process
+* - the new process will ask the device driver to read and write a descriptor
+* in the old process, the kernel will perform an address lookup before
+* reading or writing the descriptor, to make sure the address location does
+* belong to the old process. The descriptor is a TPtr pointing to a buffer
+* located in a shared io buffer.
+* - device driver will return an error in case address lookup fails or ThreadRead
+* or ThreadWrite fail
+* - the new process returns the error code returned by the device driver
+* - the old process tests for the exit code for the new process being KErrNone and
+* that the thread is not panicked, and also that the values written and read
+* are those expected.
+* 12.Closing test driver
+* - Trivial, but it will test if a created & mapped shared io buffer gets released
+* successfully when the logical channel is closed (which in turn will delete the
+* shared io buffer associated with the channel)
+* The test comes in 4 flavours, in order to test memory protection when context switching
+* between different types of processes.
+* T_SHAREDIO:
+* Main process is a moving process which creates another moving process.
+* T_SHAREDIO2:
+* Main process is a fixed process which creates a moving process.
+* T_SHAREDIO3:
+* Main process is a fixed process which creates another fixed process.
+* T_SHAREDIO4:
+* Main process is a moving process which creates a fixed process.
+* Platforms/Drives/Compatibility:
+* All (some steps will not be performed on emulator)
+* Assumptions/Requirement/Pre-requisites:
+* The test needs D_SHAREDIO.LDD, the device driver that actually operates the API. 
+* Failures and causes:
+* Failures of this test will indicate defects in the implementation of Shared Io Buffers.
+* Base Port information:
+* No?
+*
+*/
+
+
+#define __E32TEST_EXTENSION__
+
+#include <e32test.h>
+#include <e32math.h>
+#include "d_sharedio.h"
+#include <e32hal.h>
+#include <u32std.h>
+#include <u32hal.h>
+#include <e32svr.h>
+#include <f32dbg.h>
+#include "freeram.h"
+
+LOCAL_D RTest test(_L("T_SHAREDIO"));
+
+const TInt KTestBufferSize = 0x100000;
+
+TUint MemModelAttributes;
+TBool PhysicalCommitSupported;
+
+RTestLdd ldd;
+
+TUint32 TestBufferSizes[]={0x1000, 0x10453, 0x100000, 0x100001, 0x203000, 0};
+
+TInt checkBuffer(TAny* buffer, TUint32 aSize, TUint32 key)
+	{
+	TInt r=KErrNone;
+	TUint8* m=(TUint8*)buffer;
+	for(TUint32 size=0;size<aSize;size++,key+=5,m++)
+		{
+		if(*m!=(TUint8)(key%256))
+			{
+			r=KErrCorrupt;
+			break;
+			}
+		}
+	return r;
+	}
+
+TInt fillBuffer(TAny* buffer, TUint32 aSize, TUint32 key)
+	{
+	TUint8* m=(TUint8*)buffer;
+	for(TUint32 size=0;size<aSize;size++,key+=5,m++)
+		{
+		*m=(TUint8)(key%256);
+		}
+	return KErrNone;
+	}
+
+TBool CheckBuffer(TAny* aBuffer,TInt aSize)
+	{
+	TAny** p = (TAny**)aBuffer;
+	TAny** end = (TAny**)((TInt)p+aSize);
+	while(p<end)
+		{
+		if(*p!=p)
+			return EFalse;
+		++p;
+		}
+	return ETrue;
+	}
+
+enum TTestProcessFunctions
+	{
+	ETestProcess1,
+	ETestProcess2,
+	ETestProcess3,
+	};
+
+class RTestProcess : public RProcess
+	{
+public:
+	void Create(TTestProcessFunctions aFunction,TInt aArg1=-1,TInt aArg2=-1);
+	};
+
+void RTestProcess::Create(TTestProcessFunctions aFunction,TInt aArg1,TInt aArg2)
+	{
+	if(aArg1==-1)
+		aArg1 = RProcess().Id();
+	TBuf<512> commandLine;
+	commandLine.Num((TInt)aFunction);
+	commandLine.Append(_L(" "));
+	commandLine.AppendNum(aArg1);
+	commandLine.Append(_L(" "));
+	commandLine.AppendNum(aArg2);
+#ifdef __FIXED__
+	//fixed process creating a moving process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+#ifdef __SECOND_FIXED__
+	//fixed process creating another fixed process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO2.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+#ifdef __MOVING_FIXED__
+	//moving process creating a fixed process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO2.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+	//moving process creating a moving process
+	TInt r = RProcess::Create(RProcess().FileName(),commandLine);
+#endif
+#endif
+#endif
+	test(r==KErrNone);
+	SetJustInTime(EFalse);
+	}
+
+const TInt KProcessRendezvous = KRequestPending+1;
+
+TInt DoTestProcess(TInt aTestNum,TInt aArg1,TInt aArg2)
+	{
+	(void)aArg1;
+	(void)aArg2;
+
+	RTestLdd ldd;
+	TInt r;
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	if(r!=KErrNone && r!=KErrAlreadyExists)
+		return KErrGeneral;
+	r=ldd.Open();
+	if(r!=KErrNone)
+		return r;
+
+	switch(aTestNum)
+		{
+	case ETestProcess1:
+		{
+		TAny* gbuffer;
+		TUint32 gsize;
+		r=User::GetTIntParameter(1,(TInt&)gbuffer);
+		if(r!=KErrNone)
+			return r;
+		r=User::GetTIntParameter(2,(TInt&)gsize);
+		if(r!=KErrNone)
+			return r;
+
+		r=checkBuffer(gbuffer,gsize,23454);
+		if(r!=KErrNone)
+			return r;
+		r=ldd.MapOutGlobalBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.CreateBuffer(KTestBufferSize);
+		if(r!=KErrNone)
+			return r;
+
+		TAny* buffer;
+		TUint32 size;
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		r=ldd.MapOutBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		RProcess::Rendezvous(KProcessRendezvous);
+
+		*(TInt*)buffer = 0;   // Should cause exception
+		break;
+		}
+	case ETestProcess2:
+		{
+		TInt size=aArg2;
+		TUint8* p=(TUint8*)aArg1;
+
+		RProcess::Rendezvous(KProcessRendezvous);
+		for(TInt i=0;i<size;i++)
+			p[i]=0; // Should cause exception
+		break;
+		}
+	case ETestProcess3:
+		{
+		TAny* buffer;
+		TUint32 size;
+
+		r=ldd.CreateBuffer(KTestBufferSize);
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		*(TInt*)buffer=KMagic1;
+		TPckg<TInt> buf(*(TInt*)buffer);
+		r=ldd.ThreadRW(buf);
+		if(r!=KErrNone)
+			return r;
+
+		if(*(TInt*)buffer!=KMagic2)
+			return KErrCorrupt;
+
+		r=ldd.ThreadRW(*(TDes8*)aArg1,aArg2);
+		if(r!=KErrNone)
+			return r;
+		
+		r=ldd.MapOutBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		break;
+		}
+	default:
+		User::Panic(_L("T_SHAREDIO"),1);
+		}
+
+	ldd.Close();	
+	return KErrNone;
+	}
+
+void CreateWithOOMCheck(TInt aSize, TBool aPhysicalAddress)
+	{
+	TInt failResult=KErrGeneral;
+
+	TInt freeRam = FreeRam(); //This will also add a delay
+
+	for(TInt failCount=1; failCount<1000; failCount++)
+		{
+		test.Printf(_L("alloc fail count = %d\n"),failCount);
+
+		User::__DbgSetAllocFail(ETrue,RAllocator::EFailNext,failCount);
+		__KHEAP_MARK;
+		
+		if (aPhysicalAddress)
+			failResult=ldd.CreateBufferPhysAddr(aSize);
+		else
+			failResult=ldd.CreateBuffer(aSize);
+
+		if(failResult==KErrNone)
+			break;
+
+		test(failResult==KErrNoMemory);
+		__KHEAP_MARKEND;
+
+		test(freeRam == FreeRam());  //This will also add a delay
+		}
+	User::__DbgSetAllocFail(ETrue,RAllocator::ENone,0);
+	__KHEAP_RESET;
+
+	test.Next(_L("Destroy buffer"));
+	if (aPhysicalAddress)
+		ldd.DestroyBufferPhysAddr();
+	else
+		ldd.DestroyBuffer();
+	
+	test(freeRam == FreeRam());  //This will also add a delay
+	}
+
+GLDEF_C TInt E32Main()
+    {
+	TBuf16<512> cmd;
+	User::CommandLine(cmd);
+	if(cmd.Length() && TChar(cmd[0]).IsDigit())
+		{
+		TInt function = -1;
+		TInt arg1 = -1;
+		TInt arg2 = -1;
+		TLex lex(cmd);
+		lex.Val(function);
+		lex.SkipSpace();
+		lex.Val(arg1);
+		lex.SkipSpace();
+		lex.Val(arg2);
+		return DoTestProcess(function,arg1,arg2);
+		}
+
+	MemModelAttributes=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemModelInfo, NULL, NULL);
+	TUint mm=MemModelAttributes&EMemModelTypeMask;
+	PhysicalCommitSupported = mm!=EMemModelTypeDirect && mm!=EMemModelTypeEmul;
+
+// Turn off lazy dll unloading
+	RLoader l;
+	test(l.Connect()==KErrNone);
+	test(l.CancelLazyDllUnload()==KErrNone);
+	l.Close();
+
+	test.Title();
+
+	test.Start(_L("Loading test driver..."));
+
+	TInt r;
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrAlreadyExists);
+	r=ldd.Open();
+	test(r==KErrNone);
+
+	TAny* buffer;
+	TUint32 size;
+	TUint32 key;
+
+	TInt testBufferSize=0;
+	for(; TestBufferSizes[testBufferSize]!=0; ++testBufferSize)
+		{
+		test.Printf(_L("Test buffer size = %08x\n"),TestBufferSizes[testBufferSize]);
+
+		test.Next(_L("Create buffer"));
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		if(r!=KErrNone)
+			test.Printf(_L("Creating buffer failed client r=%d"), r);
+		test(r==KErrNone);
+
+		test.Next(_L("Map In Buffer"));
+		r=ldd.MapInBuffer(&buffer,&size);
+		
+		test.Next(_L("CheckBuffer"));
+		test(CheckBuffer(buffer,size));
+		test(r==KErrNone);
+		test.Next(_L("Fill and check shared buffer"));
+		key=Math::Random();
+		fillBuffer(buffer,size,key);
+		test(ldd.CheckBuffer(key)==KErrNone);
+
+		key=Math::Random();
+		test(ldd.FillBuffer(key)==KErrNone);
+		test(checkBuffer(buffer,size,key)==KErrNone);
+
+		test.Next(_L("Map Out Buffer"));
+		r=ldd.MapOutBuffer();
+		test(r==KErrNone);
+
+		test.Next(_L("Destroy Buffer"));
+		r=ldd.DestroyBuffer();
+		test(r==KErrNone);
+
+		test.Next(_L("Create a buffer under OOM conditions"));
+		CreateWithOOMCheck(TestBufferSizes[testBufferSize], EFalse);
+
+		if(PhysicalCommitSupported)
+			{
+			test.Next(_L("Create a buffer with a physical address under OOM conditions"));
+			CreateWithOOMCheck(TestBufferSizes[testBufferSize], ETrue);
+
+			test.Next(_L("Create a buffer with a physical address"));
+			r=ldd.CreateBufferPhysAddr(0x1000);
+			test(r==KErrNone);
+
+			test.Next(_L("Map In physical address Buffer"));
+			r=ldd.MapInBuffer(&buffer,&size);
+			test(r==KErrNone);
+
+			test.Next(_L("Fill and check physical address shared buffer"));
+			key=Math::Random();
+			fillBuffer(buffer,size,key);
+			test(ldd.CheckBuffer(key)==KErrNone);
+
+			key=Math::Random();
+			test(ldd.FillBuffer(key)==KErrNone);
+			test(checkBuffer(buffer,size,key)==KErrNone);
+
+			test.Next(_L("Map Out physical address Buffer"));
+			r=ldd.MapOutBuffer();
+			test(r==KErrNone);
+
+			test.Next(_L("Destroy a buffer with a physical address"));
+			r=ldd.DestroyBufferPhysAddr();
+			test(r==KErrNone);
+		}
+
+		test.Next(_L("Check using the same buffer by 2 different user processes"));
+		TAny* gbuffer;
+		TUint32 gsize;
+		r=ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize);
+		test(r==KErrNone);
+
+		fillBuffer(gbuffer,gsize,23454);
+
+		r=ldd.MapOutGlobalBuffer();
+		test(r==KErrNone);
+
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		test(r==KErrNone);
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		test(r==KErrNone);
+
+		test(CheckBuffer(buffer,size));
+
+		key=Math::Random();
+		fillBuffer(buffer,size,key);
+		test(ldd.CheckBuffer(key)==KErrNone);
+
+		RTestProcess rogueP;
+		TRequestStatus rendezvous;
+		TRequestStatus logon;
+
+		if(MemModelAttributes&EMemModelAttrProcessProt)
+			{
+			test.Next(_L("Checking buffers are protected at context switching"));
+			rogueP.Create(ETestProcess2,(TInt)buffer,(TInt)size);
+			rogueP.Logon(logon);
+			rogueP.Rendezvous(rendezvous);
+			rogueP.Resume();
+			User::WaitForRequest(rendezvous);
+			test(rendezvous==KProcessRendezvous);
+			User::WaitForRequest(logon);
+			test(rogueP.ExitType()==EExitPanic);
+			test(logon==3);
+			test(ldd.CheckBuffer(key)==KErrNone);
+			}
+
+		r=ldd.MapOutBuffer();
+		test(r==KErrNone);
+
+		r=ldd.DestroyBuffer();
+		test(r==KErrNone);
+
+		RTestProcess process;
+
+		if((MemModelAttributes&EMemModelAttrKernProt) && (MemModelAttributes&EMemModelTypeMask)!=EMemModelTypeDirect)
+			{
+			test.Next(_L("Checking writing to unmapped buffer"));
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			process.Rendezvous(rendezvous);
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test(process.SetParameter(1,(TInt)gbuffer)==KErrNone);
+			test(process.SetParameter(2,(TInt)gsize)==KErrNone);
+			process.Resume();
+			User::WaitForRequest(rendezvous);
+			test(rendezvous==KProcessRendezvous);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitPanic);
+			test(logon==3);
+			process.Close();
+			}
+
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		*(TInt*)buffer=KMagic1;
+		TPckg<TInt> buf(*(TInt*)buffer);
+
+		RTestProcess proc;
+		test.Next(_L("Checking address lookup is implemented"));
+		proc.Create(ETestProcess3,(TInt)&buf,RThread().Id());
+		proc.Logon(logon);
+		proc.Resume();
+		User::WaitForRequest(logon);
+
+		test(proc.ExitType()==EExitKill);
+		test(logon==0);
+		test(*(TInt*)buffer==KMagic2);
+
+		ldd.DestroyBuffer();
+
+		// Check process death whilst buffer is mapped in
+		// Test case for defect DEF051851 - Shared IO Buffer fault when process dies
+		test.Next(_L("Checking process death whilst buffer is mapped in"));
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			test.Start(_L("Map buffer into another process"));
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Kill other process"));
+			process.Kill(99);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitKill);
+			test(logon==99);
+			process.Close();
+			test.Next(_L("Map out buffer"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+
+			test.Next(_L("Map buffer into this process"));
+			test(ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Map out buffer from this process"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			test.Next(_L("Map buffer into another process"));
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Kill other process"));
+			process.Kill(99);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitKill);
+			test(logon==99);
+			process.Close();
+			test.Next(_L("Map out buffer"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+			test.End();
+	} // loop for next buffer size
+
+	test.Next(_L("Create and map in buffer"));
+	r=ldd.CreateBuffer(KTestBufferSize);
+	test(r==KErrNone);
+	r=ldd.MapInBuffer(&buffer,&size);
+	test(r==KErrNone);
+
+//  Test for DEF053512 - Can't delete SharedIo buffers in DLogicalDevice destructor 
+
+	test.Next(_L("Map in global buffer"));
+	TAny* gbuffer;
+	TUint32 gsize;
+	test(ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize)==KErrNone);
+
+	test.Next(_L("Closing channel (with a buffer still mapped in)"));
+	ldd.Close();
+
+//  Test for DEF053512 - Can't delete SharedIo buffers in DLogicalDevice destructor 
+
+	test.Next(_L("Unload driver (whilst global buffer still mapped in)"));
+	r=User::FreeLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrNone);
+
+	test.End();
+
+
+
+	return(0);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\ldrplatsec.inf
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+fuzzlib
+fuzzv5	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzlib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\fuzzlib.mmp
+*
+*/
+
+
+target			fuzzlib.lib
+targettype		lib
+sourcepath		.
+#ifdef MARM
+source			uc_exe.cia
+#else
+#ifdef X86
+source			uc_exex86.cia
+#endif
+#endif
+userinclude		.
+systeminclude		/epoc32/include
+capability		all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\fuzzv5.cpp
+* yes this file is empty, we don't need any code :)
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* \f32test\loader\security\fuzzv5.mmp
+*
+*/
+
+
+target			fuzzv5.exe
+targettype		exe
+sourcepath		.
+source			fuzzv5.cpp
+firstlib		fuzzlib.lib
+systeminclude		/epoc32/include
+nocompresstarget
+capability		NONE
+
+VERSION			2.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/u32std.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,812 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\u32std.h
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef __U32STD_H__
+#define __U32STD_H__
+#include <e32cmn.h>
+#include <e32hal.h>
+#include <e32lmsg.h>
+#include <e32event.h>
+#include <e32ldr.h>
+#include <e32power.h>
+#include <e32property.h>
+#include <u32property.h>
+#include <u32hal.h>
+
+#include <cpudefs.h>
+
+#ifdef __MARM__
+#define	EKA2_ENTRY_POINT_VERSION_IDENTIFIER	\
+	asm("tst pc, #%a0" : : "i" ((TInt)0) )
+#endif
+
+struct TUnicodeDataSet;                 // forward declaration
+struct TCollationDataSet;               // forward declaration
+
+/*
+The LCharSet structure is used in Unicode builds to supply locale-specific
+character attribute and collation data.
+
+The structure is defined in both builds to avoid having to have a dummy ExecHandler::GetLocaleCharSet function
+with a different signature in the 8-bit build.
+*/
+struct LCharSet
+	{
+	const TUnicodeDataSet* iCharDataSet;			// if non-null, character data overriding standard Unicode data
+	const TCollationDataSet* iCollationDataSet;		// if non-null, locale-specific collation data
+	};
+
+extern const LCharSet* GetLocaleCharSet();
+
+/** @internalTechnology */
+const TInt KNumLocaleExports = 22;
+
+//
+// The bits in the type table (non-Unicode build only)
+//
+#ifndef _UNICODE
+
+/** @internalTechnology */
+const TUint __U=0x01; // Uppercase letter
+
+/** @internalTechnology */
+const TUint __L=0x02; // Lowercase letter
+
+/** @internalTechnology */
+const TUint __D=0x04; // Decimal digit
+
+/** @internalTechnology */
+const TUint __S=0x08; // Space
+
+/** @internalTechnology */
+const TUint __P=0x10; // Punctuation
+
+/** @internalTechnology */
+const TUint __C=0x20; // Control character
+
+/** @internalTechnology */
+const TUint __X=0x40; // Hex digit
+
+/** @internalTechnology */
+const TUint __B=0x80; // A blank character
+
+#endif
+
+//
+// Time set mode parameters for setting system time and offset
+// 
+enum TTimeSetMode
+	{
+	ETimeSetTime = 1,    // set the time to the value given, else leave it unchanged
+	ETimeSetOffset = 2,  // set the offset to the value given, else leave it unchanged
+	ETimeSetAllowTimeReversal = 4,  // allow time to go backwards
+	ETimeSetNoTimeUpdate = 8,       // Don't restart second queue or notify changes - not valid with ESetTime, used early in boot only
+	ETimeSetLocalTime = 16,			// Set time in local time, instead of UTC
+	ETimeSetSecure = 32,  // use when setting the secure hardware clock
+	};
+
+//
+enum TMatchType {EMatchNormal,EMatchFolded,EMatchCollated};
+
+//
+// Constants for descriptor implementation code
+//
+enum TDesType {EBufC,EPtrC,EPtr,EBuf,EBufCPtr};
+const TUint KMaskDesLength=0xfffffff;
+const TInt KShiftDesType=28;
+
+//
+// Constants for iFlags in DProcess and DThread
+//
+const TUint KThreadFlagProcessCritical		= 0x00000001;	// thread panic panics process
+const TUint KThreadFlagProcessPermanent		= 0x00000002;	// thread exit of any kind causes process to exit (=main)
+const TUint KThreadFlagSystemCritical		= 0x00000004;	// thread panic reboots entire system
+const TUint KThreadFlagSystemPermanent		= 0x00000008;	// thread exit of any kind reboots entire system
+const TUint KThreadFlagOriginal				= 0x00000010;
+const TUint KThreadFlagLastChance			= 0x00000020;
+const TUint KThreadFlagRealtime				= 0x00000040;	// thread will be panicked when using some non-realtime functions
+const TUint KThreadFlagRealtimeTest			= 0x00000080;	// non-realtime functions only warn rather than panic
+const TUint KThreadFlagLocalThreadDataValid	= 0x00000100;	// thread has valid local thread data
+const TUint KProcessFlagPriorityControl		= 0x40000000;
+const TUint KProcessFlagJustInTime			= 0x80000000;
+const TUint KProcessFlagSystemCritical		= KThreadFlagSystemCritical;	// process panic reboots entire system
+const TUint KProcessFlagSystemPermanent		= KThreadFlagSystemPermanent;	// process exit of any kind reboots entire system
+//
+const TUint KThreadHandle=0x40000000;
+//
+struct SPtrC8 {TInt length;const TUint8 *ptr;};
+struct SBufC8 {TInt length;TUint8 buf[1];};
+struct SPtr8 {TInt length;TInt maxLength;TUint8 *ptr;};
+struct SBuf8 {TInt length;TInt maxLength;TUint8 buf[1];};
+struct SBufCPtr8 {TInt length;TInt maxLength;SBufC8 *ptr;};
+
+struct SPtrC16 {TInt length;const TUint16 *ptr;};
+struct SBufC16 {TInt length;TUint16 buf[1];};
+struct SPtr16 {TInt length;TInt maxLength;TUint16 *ptr;};
+struct SBuf16 {TInt length;TInt maxLength;TUint16 buf[1];};
+struct SBufCPtr16 {TInt length;TInt maxLength;SBufC16 *ptr;};
+
+//
+// Flags used for IPC copy functions
+//
+const TInt KChunkShiftBy0=0;
+const TInt KChunkShiftBy1=KMinTInt;
+const TInt KIpcDirRead=0;
+const TInt KIpcDirWrite=0x10000000;
+
+class TChunkCreate
+	{
+public:
+	// Attributes for chunk creation that are used by both euser and the kernel 
+	// by classes TChunkCreateInfo and SChunkCreateInfo, respectively.
+	enum TChunkCreateAtt
+		{
+		ENormal				= 0x00000000,
+		EDoubleEnded		= 0x00000001,
+		EDisconnected		= 0x00000002,
+		ECache				= 0x00000003,
+		EMappingMask		= 0x0000000f,
+		ELocal				= 0x00000000,
+		EGlobal				= 0x00000010,
+		EData				= 0x00000000,
+		ECode				= 0x00000020,
+		EMemoryNotOwned		= 0x00000040,
+
+		// Force local chunk to be named.  Only required for thread heap 
+		// chunks, all other local chunks should be nameless.
+		ELocalNamed 		= 0x000000080,
+		
+		// Paging attributes for chunks.
+		EPagingUnspec		= 0x00000000,
+		EPaged				= 0x80000000,
+		EUnpaged			= 0x40000000,
+		EPagingMask 		= EPaged | EUnpaged,
+
+		EChunkCreateAttMask =	EMappingMask | EGlobal | ECode |
+								ELocalNamed | EPagingMask,
+		};
+public:
+	TUint iAtt;
+	TBool iForceFixed;
+	TInt iInitialBottom;
+	TInt iInitialTop;
+	TInt iMaxSize;
+	TUint8 iClearByte;
+	};
+
+enum TChunkRestrictions
+	{
+	// Keep this in sync with definitions in RChunk
+	EChunkPreventAdjust = 0x01,  // Disallow Adjust, Commit, Allocate and Decommit
+	};
+
+class TChannelDoCreate
+	{
+public:
+	TVersion iVer;
+	const TDesC *iName;
+	const TDesC *iPhysicalDevice;
+	const TDesC8 *iInfo;
+	};
+
+class TCreateSession
+	{
+public:
+	TVersion iVer;
+	TInt iMessageSlots;
+	};
+
+enum TObjectType
+	{
+	EThread=0,
+	EProcess,
+	EChunk,
+	ELibrary,
+	ESemaphore,
+	EMutex,
+	ETimer,
+	EServer,
+	ESession,
+	ELogicalDevice,
+	EPhysicalDevice,
+	ELogicalChannel,
+	EChangeNotifier,
+	EUndertaker,
+	EMsgQueue,	
+	EPropertyRef,
+	ECondVar,
+	ENumObjectTypes,	// number of DObject-derived types
+	EObjectTypeAny=-1,
+
+	EIpcMessageD=0x20,	// lookup IPC message handle, allow disconnect
+	EIpcMessage=0x21,	// lookup IPC message handle, don't allow disconnect
+	EIpcClient=0x22,	// lookup IPC message client, don't allow disconnect
+	};
+
+class TObjectOpenInfo
+	{
+public:
+	TObjectType iObjType;
+	TBool isReadOnly;
+	};
+
+class TChannelCreateInfo
+	{
+public:
+	TVersion iVersion;
+	TInt iUnit;
+	const TDesC* iPhysicalDevice;
+	const TDesC8* iInfo;
+	};
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+class TChannelCreateInfo8
+	{
+public:
+	TVersion iVersion;
+	TInt iUnit;
+	const TDesC8* iPhysicalDevice;
+	const TDesC8* iInfo;
+	};
+#else
+typedef TChannelCreateInfo TChannelCreateInfo8;
+#endif
+
+const TInt KMaxThreadCreateInfo = 256;
+struct SThreadCreateInfo
+	{
+	TAny* iHandle;
+	TInt iType;
+	TThreadFunction iFunction;
+	TAny* iPtr;
+	TAny* iSupervisorStack;
+	TInt iSupervisorStackSize;
+	TAny* iUserStack;
+	TInt iUserStackSize;
+	TInt iInitialThreadPriority;
+	TPtrC iName;
+	TInt iTotalSize;	// Size including any extras (must be a multiple of 8 bytes)
+	};
+
+enum TThreadCreationFlags
+	{
+	ETraceHeapAllocs 				= 0x00000001,
+	EMonitorHeapMemory				= 0x00000002,
+
+	EThreadCreateFlagPaged			= 0x00000004,
+	EThreadCreateFlagUnpaged		= 0x00000008,
+	EThreadCreateFlagPagingUnspec	= 0x00000000,
+	EThreadCreateFlagPagingMask	= EThreadCreateFlagPaged | EThreadCreateFlagUnpaged,
+
+	EThreadCreateFlagMask = ETraceHeapAllocs | EMonitorHeapMemory | EThreadCreateFlagPagingMask,
+	};
+
+struct SStdEpocThreadCreateInfo : public SThreadCreateInfo
+	{
+	SStdEpocThreadCreateInfo()
+		: iFlags(0)	// Must be clear on creation.
+		{
+		};
+	RAllocator* iAllocator;
+	TInt iHeapInitialSize;
+	TInt iHeapMaxSize;
+	TUint iFlags;
+	};
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+struct SThreadCreateInfo8
+	{
+	TAny* iHandle;
+	TInt iType;
+	TThreadFunction iFunction;
+	TAny* iPtr;
+	TAny* iSupervisorStack;
+	TInt iSupervisorStackSize;
+	TAny* iUserStack;
+	TInt iUserStackSize;
+	TInt iInitialThreadPriority;
+	TPtrC8 iName;
+	TInt iTotalSize;	// size including any extras
+	};
+
+struct SStdEpocThreadCreateInfo8 : public SThreadCreateInfo8
+	{
+	SStdEpocThreadCreateInfo8()
+		: iFlags(0) // Must be clear on creation.
+		{
+		};
+	RAllocator* iAllocator;
+	TInt iHeapInitialSize;
+	TInt iHeapMaxSize;
+	TUint iFlags;
+	};
+#else
+typedef SThreadCreateInfo SThreadCreateInfo8;
+typedef SStdEpocThreadCreateInfo SStdEpocThreadCreateInfo8;
+#endif
+
+struct SIpcCopyInfo
+	{
+	TUint8* iLocalPtr;
+	TInt iLocalLen;
+	TInt iFlags;
+	};
+
+enum TChunkAdjust
+	{
+	EChunkAdjust=0,
+	EChunkAdjustDoubleEnded=1,
+	EChunkCommit=2,
+	EChunkDecommit=3,
+	EChunkAllocate=4,
+	EChunkUnlock=5,
+	EChunkLock=6
+	};
+
+enum TMemModelAttributes
+	{
+	EMemModelTypeMask=0xf,					// bottom 4 bits give type of memory model
+	EMemModelTypeDirect=0,					// direct memory model on hardware
+	EMemModelTypeMoving=1,					// moving memory model on hardware
+	EMemModelTypeMultiple=2,				// multiple memory model on hardware
+	EMemModelTypeEmul=3,					// emulation using single host process
+	EMemModelTypeFlexible=4,				// flexible memory model on hardware
+
+	EMemModelAttrRomPaging=0x10,			// Demand paging of XIP ROM
+	EMemModelAttrCodePaging=0x20,			// Demand paging of RAM loaded code
+	EMemModelAttrDataPaging=0x40,			// Demand paging of all RAM
+	EMemModelAttrPagingMask=0xf0,			// Mask for demand paging attributes
+
+	EMemModelAttrNonExProt=(TInt)0x80000000,// accesses to nonexistent addresses are trapped
+	EMemModelAttrKernProt=0x40000000,		// accesses to kernel memory from user mode are trapped
+	EMemModelAttrWriteProt=0x20000000,		// addresses can be marked as read-only; writes to these are trapped
+	EMemModelAttrVA=0x10000000,				// system supports virtual addresses
+	EMemModelAttrProcessProt=0x08000000,	// accesses to other processes' memory are trapped
+	EMemModelAttrSameVA=0x04000000,			// different processes map the same virtual address to different physical addresses
+	EMemModelAttrSupportFixed=0x02000000,	// 'fixed' processes are supported
+	EMemModelAttrSvKernProt=0x01000000,		// unexpected accesses to kernel memory within an executive call are trapped
+	EMemModelAttrIPCKernProt=0x00800000,	// accesses to kernel memory via IPC are trapped
+	EMemModelAttrIPCFullProt=0x00400000,	// accesses via IPC have same protection as user mode
+	EMemModelAttrRamCodeProt=0x00200000,	// RAM-loaded code is only visible to processes which have loaded it
+	};
+
+/** @test */
+enum TKernelHeapDebugFunction {EDbgMarkStart,EDbgMarkCheck,EDbgMarkEnd,EDbgSetAllocFail,EDbgSetBurstAllocFail,EDbgCheckFailure};
+
+/** @test */
+class TKernelHeapMarkCheckInfo
+	{
+public:
+	TBool iCountAll;
+	const TDesC8* iFileName;
+	TInt iLineNum;
+	};
+//
+class TTrapHandler;
+class CActiveScheduler;
+class TLocale;
+
+//
+//
+//
+// Handler below is used by test prints to trucate rather than panic the caller.
+//
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+NONSHARABLE_CLASS(TestOverflowTruncate) : public TDes16Overflow
+	{
+public:
+	virtual void Overflow(TDes16 &aDes);
+	};
+#else
+NONSHARABLE_CLASS(TestOverflowTruncate) : public TDes8Overflow
+	{
+public:
+	virtual void Overflow(TDes8 &aDes);
+	};
+#endif
+//
+
+/********************************************
+ * Thread local storage entry
+ ********************************************/
+struct STls
+	{
+	TInt	iHandle;
+	TInt	iDllUid;
+	TAny*	iPtr;
+	};
+
+const TInt KDllUid_Default = 0;		// for ROM DLLs and direct calls to UserSvr::DllTls
+const TInt KDllUid_Special = -1;	// used on emulator to instruct the kernel to get the DLL UID from the module handle
+
+/********************************************
+ * Entry point call values
+ ********************************************/
+const TInt	KModuleEntryReasonProcessInit		=0;		// Process start
+const TInt	KModuleEntryReasonThreadInit		=1;		// Start new thread
+const TInt	KModuleEntryReasonProcessAttach		=2;		// Process attach (init static data)
+const TInt	KModuleEntryReasonProcessDetach		=3;		// Process detach (destroy static data)
+const TInt	KModuleEntryReasonException			=4;		// Handle exception
+const TInt	KModuleEntryReasonVariantInit0		=-3;	// Call variant static constructors
+
+/** @publishedPartner
+	@released
+*/
+const TInt	KModuleEntryReasonExtensionInit0	=-2;	// Extension early initialisation check
+
+/** @publishedPartner
+	@released
+*/
+const TInt	KModuleEntryReasonExtensionInit1	=-1;	// Extension initialisation
+
+/**
+	Flags returned by Exec::KernelConfigFlags()
+*/
+enum TKernelConfigFlags
+	{
+	EKernelConfigIpcV1Available = 1<<0,
+	EKernelConfigPlatSecEnforcement = 1<<1,
+	EKernelConfigPlatSecDiagnostics = 1<<2,
+	EKernelConfigPlatSecProcessIsolation = 1<<3,
+	EKernelConfigPlatSecEnforceSysBin = 1<<4,
+
+	// paging policy values use by 2-bit code and data paging policy enums...
+	EKernelConfigPagingPolicyNoPaging = 0,
+	EKernelConfigPagingPolicyAlwaysPage = 1,
+	EKernelConfigPagingPolicyDefaultUnpaged = 2,
+	EKernelConfigPagingPolicyDefaultPaged = 3,
+
+	EKernelConfigCodePagingPolicyShift			= 5,
+	EKernelConfigCodePagingPolicyMask			= 3<<5,
+	EKernelConfigCodePagingPolicyNoPaging		= EKernelConfigPagingPolicyNoPaging<<5,
+	EKernelConfigCodePagingPolicyAlwaysPage		= EKernelConfigPagingPolicyAlwaysPage<<5,
+	EKernelConfigCodePagingPolicyDefaultUnpaged	= EKernelConfigPagingPolicyDefaultUnpaged<<5,
+	EKernelConfigCodePagingPolicyDefaultPaged	= EKernelConfigPagingPolicyDefaultPaged<<5,
+
+	EKernelConfigPlatSecLocked = 1<<7,					// Primarily used by __PLATSEC_UNLOCKED__ (q.v.) test code
+
+	EKernelConfigCrazyScheduling = 1<<8,				// Enables thread priority/timeslice craziness
+
+	EKernelConfigDataPagingPolicyShift			= 9,
+	EKernelConfigDataPagingPolicyMask			= 3<<9,
+	EKernelConfigDataPagingPolicyNoPaging		= EKernelConfigPagingPolicyNoPaging<<9,
+	EKernelConfigDataPagingPolicyAlwaysPage		= EKernelConfigPagingPolicyAlwaysPage<<9,
+	EKernelConfigDataPagingPolicyDefaultUnpaged	= EKernelConfigPagingPolicyDefaultUnpaged<<9,
+	EKernelConfigDataPagingPolicyDefaultPaged	= EKernelConfigPagingPolicyDefaultPaged<<9,
+
+	EKernelConfigSMPUnsafeCompat = 1<<12,				// Enables compatibility mode for SMP-unsafe processes
+
+	EKernelConfigDisableAPs = 1u<<30,
+
+	EKernelConfigTest = 1u<<31,							// Only used by test code for __PLATSEC_UNLOCKED__
+	};
+
+/**
+	If __PLATSEC_UNLOCKED__ is not defined, these flags must always
+	be considered to be set.  See KernelConfigFlags() in kern_priv.h.
+
+	@see KernelConfigFlags()
+
+	@internalTechnology
+*/
+#ifdef __PLATSEC_UNLOCKED__
+#define __PLATSEC_FORCED_FLAGS__	 0
+#else
+#define __PLATSEC_FORCED_FLAGS__	(EKernelConfigPlatSecEnforcement|EKernelConfigPlatSecProcessIsolation|EKernelConfigPlatSecEnforceSysBin)
+#endif
+
+/**
+@internalTechnology
+*/
+enum TGlobalUserData
+	{
+	ELocaleDefaultCharSet,
+	ELocalePreferredCharSet,
+	EMaxGlobalUserData
+	};
+
+typedef void (*TGlobalDestructorFunc)(void);
+
+// This must not conflict with any possible valid TLS keys
+const TInt KGlobalDestructorTlsKey = -1;
+
+GLREF_C void ExitCurrentThread(TExitType, TInt, const TDesC8*);
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@internalTechnology
+*/
+class TPlatSecDiagnostic
+	{
+public:
+	enum TType
+		{
+		ELoaderCapabilityViolation1,
+		ELoaderCapabilityViolation2,
+		EThreadCapabilityCheckFail,
+		EProcessCapabilityCheckFail,
+		EKernelSecureIdCheckFail,
+		EKernelObjectPolicyCheckFail,
+		EHandleCapabilityCheckFail,
+		ECreatorCapabilityCheckFail,
+		EMessageCapabilityCheckFail,
+		EKernelProcessIsolationFail,
+		EKernelProcessIsolationIPCFail,
+		ECreatorPolicyCheckFail,		
+		};
+public:
+	inline TPlatSecDiagnostic();
+	inline TPlatSecDiagnostic(TType aType);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, const SSecurityInfo& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt, const TDesC8& aString, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, const TDesC8& aString1, const TDesC8& aString2, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1);
+	inline const TDesC8* String1();
+	inline const TDesC8* String2();
+public:
+	TType iType;
+	TInt iArg1;
+	TInt iArg2;
+	const char* iContextText;
+	TInt iContextTextLength;
+	SSecurityInfo iSecurityInfo;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic()
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType)
+	: iType(aType)
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType,TInt aInt1)
+	: iType(aType), iArg1(aInt1)
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1(aInt1), iArg2(aInt2), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, const SSecurityInfo& aInfo)
+	: iType(aType), iArg1(aInt1), iArg2(ECapability_None), iContextText(0), iSecurityInfo(aInfo) 
+	{
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt, const TDesC8& aString, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1(aInt), iArg2((TInt)&aString), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, const TDesC8& aString1, const TDesC8& aString2, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1((TInt)&aString1), iArg2((TInt)&aString2), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2)
+	: iType(aType), iArg1(aInt1), iArg2(aInt2) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps[0] = 0;
+	iSecurityInfo.iCaps[1] = 0;
+	};
+
+inline const TDesC8* TPlatSecDiagnostic::String1()
+	{ return (const TDesC8*)iArg1; }
+
+inline const TDesC8* TPlatSecDiagnostic::String2()
+	{ return (const TDesC8*)iArg2; }
+
+inline TInt PlatSec::LoaderCapabilityViolation(const TDesC8& aImporterName, const TDesC8& aFileName, const SCapabilitySet& aMissingCaps)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ELoaderCapabilityViolation2,aImporterName,aFileName,aMissingCaps);
+	return EmitDiagnostic(d, NULL);
+	}
+
+#ifdef __KERNEL_MODE__
+
+inline TInt PlatSec::CapabilityCheckFail(const DProcess* aViolatingProcess, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EProcessCapabilityCheckFail,(TInt)aViolatingProcess,(TInt)aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(const DThread* aViolatingThread, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EThreadCapabilityCheckFail,(TInt)aViolatingThread,(TInt)aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::SecureIdCheckFail(const DProcess* aViolatingProcess, TSecureId aSid, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelSecureIdCheckFail,(TInt)aViolatingProcess,(TInt)aSid);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(const DProcess* aProcess, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelObjectPolicyCheckFail,(TInt)aProcess,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(const DThread* aThread, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelObjectPolicyCheckFail,(TInt)aThread,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::ProcessIsolationFail(const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelProcessIsolationFail);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::ProcessIsolationIPCFail(RMessageK* aMessage, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelProcessIsolationIPCFail,(TInt)aMessage);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+#else // !__KERNEL_MODE__
+
+inline TInt PlatSec::LoaderCapabilityViolation(RProcess aLoadingProcess, const TDesC8& aFileName, const SCapabilitySet& aMissingCaps)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ELoaderCapabilityViolation1,aLoadingProcess.Handle(),aFileName,aMissingCaps);
+	return EmitDiagnostic(d, NULL);
+	}
+
+inline TInt PlatSec::CreatorCapabilityCheckFail(TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorCapabilityCheckFail,(TInt)0,aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CreatorCapabilityCheckFail(const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorCapabilityCheckFail,(TInt)0,ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(TInt aHandle, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(TInt aHandle, const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(TInt aHandle, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(RMessagePtr2 aMessage, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(RMessagePtr2 aMessage, const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(RMessagePtr2 aMessage, const SSecurityInfo& aMissing, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),(const SSecurityInfo&)aMissing);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CreatorPolicyCheckFail(const SSecurityInfo& aMissing, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorPolicyCheckFail,(TInt)0,(const SSecurityInfo&)aMissing);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+#endif //__KERNEL_MODE__
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+const TInt KTlsArrayGranularity=2;
+
+#ifdef __CPU_HAS_CP15_THREAD_ID_REG
+
+#define __USERSIDE_THREAD_DATA__
+
+class TLocalThreadData
+	{
+public:
+	void Close();
+#ifndef __KERNEL_MODE__
+	TAny* DllTls(TInt aHandle, TInt aDllUid);
+	TInt DllSetTls(TInt aHandle, TInt aDllUid, TAny* aPtr);
+	void DllFreeTls(TInt aHandle);
+#endif
+public:
+	RAllocator* iHeap;				///< The thread's current heap
+	CActiveScheduler* iScheduler;	///< The thread's current active scheduler
+	TTrapHandler* iTrapHandler;		///< The thread's current trap handler
+private:
+	RAllocator* iTlsHeap; 			///< The heap that the DLL TLS data is stored on
+	RArray<STls> iTls; 				///< DLL TLS data
+	};
+
+const TInt KLocalThreadDataSize = _ALIGN_UP(sizeof(TLocalThreadData), 8);
+
+#endif
+
+#ifdef __WINS__
+
+enum TWin32RuntimeReason
+	{
+	// Same values as passed to DllMain
+	EWin32RuntimeProcessAttach = 1,
+	EWin32RuntimeThreadAttach = 2,
+	EWin32RuntimeThreadDetach = 3,
+	EWin32RuntimeProcessDetach = 4,
+	};
+
+typedef TBool (*TWin32RuntimeHook)(TWin32RuntimeReason);
+
+#endif
+
+struct SAtomicOpInfo64
+	{
+	TAny*		iA;
+	TAny*		iQ;
+	TUint64		i1;
+	TUint64		i2;
+	TUint64		i3;
+	};
+
+struct SAtomicOpInfo32
+	{
+	TAny*		iA;
+	union
+		{
+		TAny*	iQ;
+		TUint32	i0;
+		};
+	TUint32		i1;
+	TUint32		i2;
+	};
+
+#endif //__U32STD_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exe.cia	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\uc_exe.cia
+*
+*/
+
+
+#include <e32cia.h>
+#include "u32std.h"
+
+extern "C" {
+
+// Minimal entry point which won't cause any code relocations to be included
+__NAKED__ TInt _E32Startup()
+	{
+	EKA2_ENTRY_POINT_VERSION_IDENTIFIER;	// DUMMY INSTRUCTION TO INDICATE EKA2 ENTRY POINT
+	asm("mov r0, #0 ");
+	__JUMP(,lr);
+
+	asm(".word 0 ");			// loader will replace with code seg unique ID
+								// for RAM-loaded code segment
+								// MUST BE AT OFFSET 12 FROM ENTRY POINT
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exex86.cia	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\uc_exex86.cia
+*
+*/
+
+
+#include "u32std.h"
+#include "x86hlp.inl"
+
+extern "C" {
+
+// Minimal entry point which won't cause any code relocations to be included
+__NAKED__ TInt _E32Startup()
+	{
+	BYTE(0xeb)			// JMP .+16
+	BYTE(0x0e)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)			// need zero word at offset 12 from entry point
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+
+	BYTE(0xcb) //asm("retf"); GCC doesn't recognise retf
+	}
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/x86hlp.inl	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\common\x86\x86hlp.inl
+*
+*/
+
+
+#ifdef __GCC32__
+#include <x86hlp_gcc.inl>
+#else
+
+/**** MSVC helpers ****/
+
+/*static void DivisionByZero()
+	{
+	_asm int 0;
+	}*/
+
+#pragma warning ( disable : 4414 )  // short jump to function converted to near
+
+extern "C" {
+__NAKED__ void _allmul()
+//
+// Multiply two 64 bit integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = arg 1
+//		[esp+12], [esp+16] = arg 1
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm mov eax, [esp+4]			// eax = low1
+	_asm mul dword ptr [esp+16]		// edx:eax = low1*high2
+	_asm mov ecx, eax				// keep low 32 bits of product
+	_asm mov eax, [esp+8]			// eax = high1
+	_asm mul dword ptr [esp+12]		// edx:eax = high1*low2
+	_asm add ecx, eax				// accumulate low 32 bits of product
+	_asm mov eax, [esp+4]			// eax = low1
+	_asm mul dword ptr [esp+12]		// edx:eax = low1*low2
+	_asm add edx, ecx				// add cross terms to high 32 bits
+	_asm ret 16
+	}
+
+void udiv64_divby0()
+	{
+	_asm int 0						// division by zero exception
+	_asm ret
+	}
+
+__NAKED__ void UDiv64()
+	{
+	// unsigned divide edx:eax by edi:esi
+	// quotient in ebx:eax, remainder in edi:edx
+	// ecx, ebp, esi also modified
+	_asm test edi, edi
+	_asm jnz short UDiv64a				// branch if divisor >= 2^32
+	_asm test esi, esi
+//	_ASM_j(z,DivisionByZero)			// if divisor=0, branch to error routine
+	_asm jz udiv64_divby0
+	_asm mov ebx, eax					// ebx=dividend low
+	_asm mov eax, edx					// eax=dividend high
+	_asm xor edx, edx					// edx=0
+	_asm div esi						// quotient high now in eax
+	_asm xchg eax, ebx					// quotient high in ebx, dividend low in eax
+	_asm div esi						// quotient now in ebx:eax, remainder in edi:edx
+	_asm ret
+	UDiv64e:
+	_asm xor eax, eax					// set result to 0xFFFFFFFF
+	_asm dec eax
+	_asm jmp short UDiv64f
+	UDiv64a:
+	_asm js short UDiv64b				// skip if divisor msb set
+	_asm bsr ecx, edi					// ecx=bit number of divisor msb - 32
+	_asm inc cl
+	_asm push edi						// save divisor high
+	_asm push esi						// save divisor low
+	_asm shrd esi, edi, cl				// shift divisor right so that msb is bit 31
+	_asm mov ebx, edx					// dividend into ebx:ebp
+	_asm mov ebp, eax
+	_asm shrd eax, edx, cl				// shift dividend right same number of bits
+	_asm shr edx, cl
+	_asm cmp edx, esi					// check if approx quotient will be 2^32
+	_asm jae short UDiv64e				// if so, true result must be 0xFFFFFFFF
+	_asm div esi						// approximate quotient now in eax
+	UDiv64f:
+	_asm mov ecx, eax					// into ecx
+	_asm mul edi						// multiply approx. quotient by divisor high
+	_asm mov esi, eax					// ls dword into esi, ms into edi
+	_asm mov edi, edx
+	_asm mov eax, ecx					// approx. quotient into eax
+	_asm mul dword ptr [esp]			// multiply approx. quotient by divisor low
+	_asm add edx, esi					// edi:edx:eax now equals approx. quotient * divisor
+	_asm adc edi, 0
+	_asm xor esi, esi
+	_asm sub ebp, eax					// subtract dividend - approx. quotient *divisor
+	_asm sbb ebx, edx
+	_asm sbb esi, edi
+	_asm jnc short UDiv64c				// if no borrow, result OK
+	_asm dec ecx						// else result is one too big
+	_asm add ebp, [esp]					// and add divisor to get correct remainder
+	_asm adc ebx, [esp+4]
+	UDiv64c:
+	_asm mov eax, ecx					// result into ebx:eax, remainder into edi:edx
+	_asm mov edi, ebx
+	_asm mov edx, ebp
+	_asm xor ebx, ebx
+	_asm add esp, 8						// remove temporary values from stack
+	_asm ret
+	UDiv64b:
+	_asm mov ebx, 1
+	_asm sub eax, esi					// subtract divisor from dividend
+	_asm sbb edx, edi
+	_asm jnc short UDiv64d				// if no borrow, result=1, remainder in edx:eax
+	_asm add eax, esi					// else add back
+	_asm adc edx, edi
+	_asm dec ebx						// and decrement quotient
+	UDiv64d:
+	_asm mov edi, edx					// remainder into edi:edx
+	_asm mov edx, eax
+	_asm mov eax, ebx					// result in ebx:eax
+	_asm xor ebx, ebx
+	_asm ret
+	}
+
+__NAKED__ void _aulldvrm()
+//
+// Divide two 64 bit unsigned integers, returning a 64 bit result
+// and a 64 bit remainder
+//
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+//
+// Return (dividend / divisor) in edx:eax
+// Return (dividend % divisor) in ebx:ecx
+//
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm mov eax, [esp+16]
+	_asm mov edx, [esp+20]
+	_asm mov esi, [esp+24]
+	_asm mov edi, [esp+28]
+	_asm call UDiv64
+	_asm mov ecx, edx
+	_asm mov edx, ebx
+	_asm mov ebx, edi
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _alldvrm()
+//
+// Divide two 64 bit signed integers, returning a 64 bit result
+// and a 64 bit remainder
+//
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+//
+// Return (dividend / divisor) in edx:eax
+// Return (dividend % divisor) in ebx:ecx
+//
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm mov eax, [esp+16]
+	_asm mov edx, [esp+20]
+	_asm mov esi, [esp+24]
+	_asm mov edi, [esp+28]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov ebp, [esp+20]
+	_asm mov ecx, edx
+	_asm xor ebp, [esp+28]
+	_asm mov edx, ebx
+	_asm mov ebx, edi
+	_asm jns quotient_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	quotient_nonnegative:
+	_asm cmp dword ptr [esp+20], 0
+	_asm jns rem_nonnegative
+	_asm neg ebx
+	_asm neg ecx
+	_asm sbb ebx, 0
+	rem_nonnegative:
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _aulldiv()
+//
+// Divide two 64 bit unsigned integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm call UDiv64
+	_asm mov edx, ebx
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _alldiv()
+//
+// Divide two 64 bit signed integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov ecx, [esp+24]
+	_asm mov edx, ebx
+	_asm xor ecx, [esp+32]
+	_asm jns quotient_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	quotient_nonnegative:
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _aullrem()
+//
+// Divide two 64 bit unsigned integers and return 64 bit remainder
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm call UDiv64
+	_asm mov eax, edx
+	_asm mov edx, edi
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _allrem()
+//
+// Divide two 64 bit signed integers and return 64 bit remainder
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov eax, edx
+	_asm mov edx, edi
+	_asm cmp dword ptr [esp+24], 0
+	_asm jns rem_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	rem_nonnegative:
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _allshr()
+//
+// Arithmetic shift right EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae asr_count_ge_64
+	_asm cmp cl, 32
+	_asm jae asr_count_ge_32
+	_asm shrd eax, edx, cl
+	_asm sar edx, cl
+	_asm ret
+	asr_count_ge_32:
+	_asm sub cl, 32
+	_asm mov eax, edx
+	_asm cdq
+	_asm sar eax, cl
+	_asm ret
+	asr_count_ge_64:
+	_asm sar edx, 32
+	_asm mov eax, edx
+	_asm ret
+	}
+
+__NAKED__ void _allshl()
+//
+// shift left EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae lsl_count_ge_64
+	_asm cmp cl, 32
+	_asm jae lsl_count_ge_32
+	_asm shld edx, eax, cl
+	_asm shl eax, cl
+	_asm ret
+	lsl_count_ge_32:
+	_asm sub cl, 32
+	_asm mov edx, eax
+	_asm xor eax, eax
+	_asm shl edx, cl
+	_asm ret
+	lsl_count_ge_64:
+	_asm xor edx, edx
+	_asm xor eax, eax
+	_asm ret
+	}
+
+__NAKED__ void _aullshr()
+//
+// Logical shift right EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae lsr_count_ge_64
+	_asm cmp cl, 32
+	_asm jae lsr_count_ge_32
+	_asm shrd eax, edx, cl
+	_asm shr edx, cl
+	_asm ret
+	lsr_count_ge_32:
+	_asm sub cl, 32
+	_asm mov eax, edx
+	_asm xor edx, edx
+	_asm shr eax, cl
+	_asm ret
+	lsr_count_ge_64:
+	_asm xor edx, edx
+	_asm xor eax, eax
+	_asm ret
+	}
+
+
+}
+
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+diagsuppress.mmp
+diagsuppress_noarmlibs.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This function is simple a way to get these EXPORT statements into
+* the .in file. These symbols will therefore be referenced from
+* the export table and so **forced** into the DLL
+*
+*/
+
+
+__asm void __rt_exporter_dummy(void)
+{
+	AREA |.directive|, READONLY, NOALLOC
+
+	PRESERVE8
+
+	DCB "#<SYMEDIT>#\n"
+
+/// Standard double precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_dadd\n"
+	DCB "EXPORT __aeabi_ddiv\n"
+	DCB "EXPORT __aeabi_dmul\n"
+	DCB "EXPORT __aeabi_dneg\n"
+	DCB "EXPORT __aeabi_drsub\n"
+	DCB "EXPORT __aeabi_dsub\n"
+
+/// Standard double precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cdcmpeq\n"
+	DCB "EXPORT __aeabi_cdcmple\n"
+	DCB "EXPORT __aeabi_cdrcmple\n"
+	DCB "EXPORT __aeabi_dcmpeq\n"
+	DCB "EXPORT __aeabi_dcmplt\n"
+	DCB "EXPORT __aeabi_dcmple\n"
+	DCB "EXPORT __aeabi_dcmpge\n"
+	DCB "EXPORT __aeabi_dcmpgt\n"
+	DCB "EXPORT __aeabi_dcmpun\n"
+
+/// Standard single precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_fadd\n"
+	DCB "EXPORT __aeabi_fdiv\n"
+	DCB "EXPORT __aeabi_fmul\n"
+	DCB "EXPORT __aeabi_fneg\n"
+	DCB "EXPORT __aeabi_frsub\n"
+	DCB "EXPORT __aeabi_fsub\n"
+
+/// Standard single precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cfcmpeq\n"
+	DCB "EXPORT __aeabi_cfcmple\n"
+	DCB "EXPORT __aeabi_cfrcmple\n"
+	DCB "EXPORT __aeabi_fcmpeq\n"
+	DCB "EXPORT __aeabi_fcmplt\n"
+	DCB "EXPORT __aeabi_fcmple\n"
+	DCB "EXPORT __aeabi_fcmpge\n"
+	DCB "EXPORT __aeabi_fcmpgt\n"
+	DCB "EXPORT __aeabi_fcmpun\n"
+
+/// Standard floating-point to integer conversions
+
+	DCB "EXPORT __aeabi_d2iz\n"
+	DCB "EXPORT __aeabi_d2uiz\n"
+	DCB "EXPORT __aeabi_d2lz\n"
+	DCB "EXPORT __aeabi_d2ulz\n"
+	DCB "EXPORT __aeabi_f2iz\n"
+	DCB "EXPORT __aeabi_f2uiz\n"
+	DCB "EXPORT __aeabi_f2lz\n"
+	DCB "EXPORT __aeabi_f2ulz\n"
+
+/// Standard conversions between floating types
+
+	DCB "EXPORT __aeabi_d2f\n"
+	DCB "EXPORT __aeabi_f2d\n"
+
+/// Standard integer to floating-point conversions
+
+	DCB "EXPORT __aeabi_i2d\n"
+	DCB "EXPORT __aeabi_ui2d\n"
+	DCB "EXPORT __aeabi_l2d\n"
+	DCB "EXPORT __aeabi_ul2d\n"
+	DCB "EXPORT __aeabi_i2f\n"
+	DCB "EXPORT __aeabi_ui2f\n"
+	DCB "EXPORT __aeabi_l2f\n"
+	DCB "EXPORT __aeabi_ul2f\n"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE		dll
+SOURCEPATH		.
+SOURCE			diagsuppress.cpp
+
+SYSTEMINCLUDE		../../include
+
+capability		all
+
+VENDORID 0x70000001
+
+TARGET 			diagsuppress_test.dll
+LINKAS			diagsuppress.dll
+NOEXPORTLIBRARY
+
+start armcc
+    armrt
+    arminc
+
+    #if defined(ARMCC_3_1)
+    armlibs     c_5.l cpprt_5.l h_5.l
+
+    #elif defined(ARMCC_2_2)
+    #ifdef MARM_ARMV5
+	ARMLIBS		c_t__un.l cpprt_t__u.l
+    #else
+	ARMLIBS		c_a__un.l cpprt_a__u.l
+    #endif
+
+    #endif
+end
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress_noarmlibs.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE		dll
+SOURCEPATH		.
+SOURCE			diagsuppress.cpp
+
+SYSTEMINCLUDE		../../include
+
+capability		all
+
+VENDORID 0x70000001
+
+TARGET 			diagsuppress_noarmlibs_test.dll
+LINKAS			diagsuppress_noarmlibs.dll
+NOEXPORTLIBRARY
+
+start armcc
+    armrt
+    arminc
+end
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+test_mmp_version.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,9 @@
+
+#include "e32def.h"
+
+char test[] = "test mmp keyword VERSION";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,12 @@
+
+TARGET			test_mmp_version
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+SOURCE			test_mmp_version.cpp
+
+VERSION			6
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/non_ascii/cmd.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,1 @@
+-c armv5_urel åäö
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/bwins/t_oedll.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+EXPORTS
+	??0CMessenger@@AAE@AAVCConsoleBase@@@Z @ 1 NONAME ; CMessenger::CMessenger(class CConsoleBase &)
+	??1CMessenger@@UAE@XZ @ 2 NONAME ; CMessenger::~CMessenger(void)
+	??_ECBase@@UAE@I@Z @ 3 NONAME ; CBase::~CBase(unsigned int)
+	??_ECMessenger@@UAE@I@Z @ 4 NONAME ; CMessenger::~CMessenger(unsigned int)
+	?ConstructL@CMessenger@@AAEXABVTDesC16@@@Z @ 5 NONAME ; void CMessenger::ConstructL(class TDesC16 const &)
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 6 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 7 NONAME ; void CMessenger::ShowMessage(void)
+	?bar@@YAHXZ @ 8 NONAME ; int bar(void)
+	myfoo @ 9 NONAME
+	??_R0?AVCBase@@@8~ @ 10 NONAME ; class CBase `MW RTTI Type Descriptor'
+	?uid@@3UTEmulatorImageHeader@@A @ 11 NONAME ; struct TEmulatorImageHeader uid
+	??_7CBase@@6B@~ @ 12 NONAME ; const CBase::`vftable'
+	??_7CMessenger@@6B@~ @ 13 NONAME ; const CMessenger::`vftable'
+	??_R0?AVCMessenger@@@8~ @ 14 NONAME ; class CMessenger `MW RTTI Type Descriptor'
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/eabi/t_oedll.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+EXPORTS
+	_Z3barv @ 1 NONAME
+	_ZN10CMessenger10ConstructLERK7TDesC16 @ 2 NONAME
+	_ZN10CMessenger11ShowMessageEv @ 3 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 4 NONAME
+	_ZN10CMessengerC1ER12CConsoleBase @ 5 NONAME
+	_ZN10CMessengerC2ER12CConsoleBase @ 6 NONAME
+	_ZN10CMessengerD0Ev @ 7 NONAME
+	_ZN10CMessengerD1Ev @ 8 NONAME
+	_ZN10CMessengerD2Ev @ 9 NONAME
+	_ZTI10CMessenger @ 10 NONAME
+	_ZTV10CMessenger @ 11 NONAME
+	myfoo @ 12 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+t_oedll
+t_oeexe
+t_oelib
+symbian_lib
+symbian_exe
+symbian_exe_with_stdcpp
+oe_exe_without_stdcpp
+
+// Trying to use lib with symbian new() and delete() in a STD exe
+wrong_newlib_oe_exe
+
+// Trying to use lib with open environment new() and delete() in a symbian c++ exe
+wrong_newlib_symbian_exe
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/oe_exe_without_stdcpp.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			oe_exe_without_stdcpp.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+NOSTDCPP
+
+LIBRARY			euser.lib efsrv.lib 
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			symbian_newlib.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe_with_stdcpp.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			symbian_exe_with_stdcpp.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+STDCPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_lib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			symbian_test.lib
+TARGETTYPE		LIB
+UID			0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE		/epoc32/include
+SOURCEPATH		..
+SOURCE			symbian_lib.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oedll.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET			t_oedll.dll
+TARGETTYPE		stddll
+CAPABILITY		all
+romtarget
+ramtarget 		sys/bin/
+
+VENDORID 		0x70000001
+
+SOURCEPATH    	..
+SOURCE        	t_oedll.cpp
+
+USERINCLUDE   	..
+SYSTEMINCLUDE 	/epoc32/include
+
+LIBRARY       	euser.lib
+nostrictdef
+nocompresstarget
+epocallowdlldata
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oeexe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			t_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib efsrv.lib t_oedll.lib
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oelib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			t_oelib.lib
+TARGETTYPE		stdlib
+SOURCEPATH		..
+STDCPP
+
+SOURCE			t_oelib.cpp
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_oe_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			wrong_newlib_test_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+STDCPP
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib t_oedll.lib
+
+// Standard Symbian Library Created by Simple_lib\simple.mmp
+STATICLIBRARY		symbian_test.lib
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_symbian_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			wrong_newlib_seexe.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+// Open Environment Library Created by oe\group\t_oelib.mmp
+STATICLIBRARY		t_oelib.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/symbian_lib.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test_lib
+*
+*/
+
+
+#ifndef __SYMBIAN32__
+#define EXPORT __declspec(export)
+#else
+#define EXPORT 
+#endif
+
+EXPORT int test_oe_function_A(int arg)
+{
+	return (arg + 1);
+}
+
+int test_oe_function_B(int arg)
+{
+	return (arg + 2);
+}
+
+int test_oe_function_C(int arg)
+{
+	return (arg + 3);
+}
+
+
+int test_oe_allocator(int arg)
+{
+	int *p = new int;
+	delete p;
+
+	return 0;
+}
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+
+#include "t_oedll.h"
+
+
+
+// construct/destruct
+
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+
+	{
+
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+
+	CleanupStack::PushL(self);
+
+	self->ConstructL(aString);
+
+	return self;
+
+	}
+
+
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+
+	{
+
+	delete iString;
+
+	}
+
+
+
+EXPORT_C void CMessenger::ShowMessage()
+
+	{
+
+	_LIT(KFormat1,"%S\n");
+
+	iConsole.Printf(KFormat1, iString); // notify completion
+
+	}
+
+
+
+// constructor support
+
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+
+	: iConsole(aConsole)
+
+	{
+
+	}
+
+
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+
+	{
+
+	iString=aString.AllocL(); // copy given string into own descriptor
+
+    }
+
+
+
+class MY_MY
+
+{
+
+public:
+
+	MY_MY(int aA){iA = aA;}
+
+	int iA;
+
+	int get() { return iA;}
+
+};
+
+
+
+class MY_TYPE
+
+{
+
+public:
+
+	MY_TYPE(MY_MY& aA){memcpy(&iA, &aA, sizeof(iA));}
+
+	int iA;
+
+	int get() { return iA;}
+
+};
+
+
+
+EXPORT_C int bar()
+
+{
+
+	MY_MY amymy(0x1234);
+
+	static MY_TYPE mytype(amymy);
+
+	myfoo();
+
+	return mytype.get();
+
+}
+
+
+
+extern "C" {
+
+EXPORT_C int myfoo()
+
+{
+
+	return 0x1234;
+
+}
+
+
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h*
+*/
+
+
+ 
+
+
+
+#include <e32cons.h>
+
+extern "C" {
+
+extern int IMPORT_C myfoo();
+
+}
+
+
+
+IMPORT_C int bar();
+
+class CMessenger : public CBase
+
+  	{
+
+public:
+
+		// Construction
+
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+
+		// Destructor - virtual and class not intended
+
+		// for derivation, so not exported
+
+	~CMessenger();
+
+		// general functions - exported
+
+	IMPORT_C void ShowMessage();
+
+private:
+
+		// C++ constructor - not exported;
+
+		// implicitly called from NewLC()
+
+	CMessenger(CConsoleBase& aConsole);
+
+		// 2nd phase construction, called by NewLC()
+
+	void ConstructL(const TDesC& aString); // second-phase constructor
+
+private:
+
+	CConsoleBase& iConsole; // Use the console (but not owned)
+
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\dll\t_oeexport.cpp*
+*/
+
+
+/**
+
+Overview:
+
+	Tests it is possible to retrieve the 0th ordinal from exes and dlls
+
+	that are marked as having named symbol export data.  This is loaded
+
+	as non-XIP so loader fixups of 0th ordinal imports can be tested
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EpocExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test attempts to get the 0th ordinal from a dll without the named symbol 
+
+		data returns NULL
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EpocExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test import fixups has correctly fixed up the 0th ordinal of the static
+
+		dependencies to this stdexe
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EpocExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+
+
+
+
+namespace std 
+
+{
+
+
+
+	 bool uncaught_exception() 
+
+		 {
+
+			 return false;
+
+		 }
+
+}
+
+
+
+
+
+#include <t_oedll.h>
+
+
+
+TInt E32Main()
+
+	{
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe_wins.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\dll\t_oeexport_wins.cpp*
+*/
+
+
+/**
+
+Overview:
+
+	Emulator version that tests it is possible to retrieve the 0th 
+
+	ordinal from exes and dlls that are marked as having named 
+
+	symbol export data.
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EmulExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test NULL is returned on attempts to get the 0th ordinal from a 
+
+		dll without the named symbol data
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EmulExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EmulExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <t_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+LOCAL_D void VerifyHdr(E32EmulExpSymInfoHdr& aExpectedHdr, E32EmulExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EmulExpSymInfoHdr tmpHdr;
+
+	E32EmulExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x0;
+
+	tmpHdr.iDllCount = 0x3;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	test.Next(_L("Verify export data of t_oedll.dll is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x3;
+
+	tmpHdr.iDllCount = 0x5;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data 0th ordinal data of this exe is that expected"));
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x;\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+/*
+
+On Emulator can't examine fixups & depdencies via export data as data not included
+
+in E32EmulExpSymInfoHdr.  This is all handled by the MS loader.
+
+
+
+*/
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oelib.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __SYMBIAN32__
+#define EXPORT __declspec(export) 
+#else
+#define EXPORT  
+#endif
+
+EXPORT int test_oe_function_A(int arg)
+{
+	return (arg + 1);
+}
+
+int test_oe_function_B(int arg)
+{
+	return (arg + 2);
+}
+
+int test_oe_function_C(int arg)
+{
+	return (arg + 3);
+}
+
+
+int test_oe_allocator(int arg)
+{
+	int *p = new int;
+	delete p;
+
+	return 0;
+}
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/wrong_newlib_symbian.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Test bad OE-symbian newlib mix";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+mmh/my.mmh	/epoc32/include/my.mmh
+mmh/nonexistent /epoc32/include/nevertobe.mmh
+mmh/my.mmh	/epoc32/include/second.mmh
+
+
+// check that the __GNUC__ macro is defined
+
+PRJ_MMPFILES
+#if __GNUC__ >= 3
+missing1.mmp
+simple.mmp
+missing2.mmp
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/mmh/my.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/* to be included in an mmp file */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <my.mmh>
+
+TARGET					petest
+TARGETTYPE				EXE
+UID						0x100039ce 0x00000001
+LIBRARY					euser.lib
+SECUREID				0x10003a5c
+SYSTEMINCLUDE			/epoc32/include
+SOURCE					test.cpp
+MACRO					TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 			8192
+EPOCHEAPSIZE 			0x5000 65535
+EPOCPROCESSPRIORITY 	low
+
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/Makefile_broken.log	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,646 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- This is a Test Logfile used in test_terminal_filter.py to test the terminal filter's handling of invalid 'recipe' tags (Could be extended to include more test cases) -->
+<buildlog sbs_version="2.9.2-alpha [2009-09-02 sf release]" xmlns="http://symbian.com/xml/build/log" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build/log http://symbian.com/xml/build/log/1_0.xsd">
+<info>sbs: version 2.9.2-alpha [2009-09-02 sf release]
+</info>
+<info>SBS_HOME G:/tcl-personal/iainw/fix2/raptor</info>
+<info>Set-up G:/tcl-personal/iainw/fix2/raptor/sbs_init.xml</info>
+<info>Command-line-arguments </info>
+<info>Current working directory G:\tcl-personal\iainw\fix2\raptor\test\smoke_suite\test_resources\simple</info>
+<info>Environment TMP=C:\DOCUME~1\IAINW\LOCALS~1\Temp</info>
+<info>Environment COMPUTERNAME=D063576</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_ALL_Static_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment LIB=C:\apps\MSVC6\VC98\mfc\lib;C:\apps\MSVC6\VC98\lib</info>
+<info>Environment USERDOMAIN=SYMBIAN</info>
+<info>Environment __PYTHON__=G:\tcl-personal\iainw\fix2\raptor\\win32\python252\python.exe</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files\Common Files</info>
+<info>Environment PROCESSOR_IDENTIFIER=x86 Family 15 Model 6 Stepping 5, GenuineIntel</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment PROCESSOR_REVISION=0605</info>
+<info>Environment PATH=G:\tcl-personal\iainw\fix2\raptor\\win32\mingw\bin;G:\tcl-personal\iainw\fix2\raptor\\win32\cygwin\bin;G:\tcl-personal\iainw\fix2\raptor\\win32\bin;g:\tcl-personal\iainw\fix2\raptor\bin;G:\tcl-personal\iainw\fix2\raptor\win32\mingw\bin;D:\apps\Python\2.6.2.2\;d:\apps\ECloud\i686_win32\bin;C:\Program Files\Common Files\Symbian\Tools;d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;;d:\apps\2.83.1013;d:\apps\python\2.4;C:\Program Files\PC Connectivity Solution\;D:\APPS\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\i386;c:\Program Files\Novell\ZENworks\;C:\Program Files\Symantec\pcAnywhere\;d:\apps\Perforce;C:\apps\MSVC6\VC98\bin;C:\apps\MSVC6\Common\Tools;C:\apps\MSVC6\Common\Tools\WinNT;C:\apps\MSVC6\Common\MSDev98\Bin;C:\Apps\Metrowerks\OEM3.1\Symbian_Tools\Command_Line_Tools;C:\Apps\Metrowerks\OEM3.1\Bin\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs\MSL_All-Dlls;d:\apps\WinSCP\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Tools\Command_Line_Tools;d:\apps\TortoiseHg</info>
+<info>Environment SYSTEMROOT=C:\WINDOWS</info>
+<info>Environment USERPROFILE=C:\Documents and Settings\IAINW</info>
+<info>Environment OLD_PATH=D:\apps\Python\2.6.2.2\;d:\apps\ECloud\i686_win32\bin;C:\Program Files\Common Files\Symbian\Tools;d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;;d:\apps\2.83.1013;d:\apps\python\2.4;C:\Program Files\PC Connectivity Solution\;D:\APPS\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\i386;c:\Program Files\Novell\ZENworks\;C:\Program Files\Symantec\pcAnywhere\;d:\apps\Perforce;C:\apps\MSVC6\VC98\bin;C:\apps\MSVC6\Common\Tools;C:\apps\MSVC6\Common\Tools\WinNT;C:\apps\MSVC6\Common\MSDev98\Bin;C:\Apps\Metrowerks\OEM3.1\Symbian_Tools\Command_Line_Tools;C:\Apps\Metrowerks\OEM3.1\Bin\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs\MSL_All-Dlls;d:\apps\WinSCP\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Tools\Command_Line_Tools;d:\apps\TortoiseHg</info>
+<info>Environment RVCT22LIB=C:\Apps\ARM\RVCT\Data\2.2\349\lib</info>
+<info>Environment INCLUDE=C:\apps\MSVC6\VC98\atl\include;C:\apps\MSVC6\VC98\mfc\include;C:\apps\MSVC6\VC98\include</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment ARMROOT=C:\Program Files\ARM</info>
+<info>Environment SBS_HOME=G:\tcl-personal\iainw\fix2\raptor\</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment __MINGW__=G:\tcl-personal\iainw\fix2\raptor\\win32\mingw</info>
+<info>Environment SESSIONNAME=Console</info>
+<info>Environment HOMEPATH=\</info>
+<info>Environment MWSYM2LIBRARIES=C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment USERDNSDOMAIN=PROD.AD.SYMBIAN.INTRA</info>
+<info>Environment __CYGWIN__=G:\tcl-personal\iainw\fix2\raptor\\win32\cygwin</info>
+<info>Environment MSDEVDIR=C:\apps\MSVC6\Common\msdev98</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment USERNAME=iainwilliamson</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment FLEXLM_TIMEOUT=5000000</info>
+<info>Environment LOGONSERVER=\\UKLONDCS03</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment COMSPEC=C:\WINDOWS\system32\cmd.exe</info>
+<info>Environment CLASSPATH=D:\apps\Symbian\SITK\aura\log4j-1.2.8.jar;</info>
+<info>Environment DTEXT_PATH=C:\Apps\ARM\Documentation\DynaText\4.1.1\release\win_32-pentium\bin</info>
+<info>Environment RVCT22INC=C:\Apps\ARM\RVCT\Data\2.2\349\include\windows</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw</info>
+<info>Environment FOO=bar</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment WINDIR=C:\WINDOWS</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment TEMP=C:\DOCUME~1\IAINW\LOCALS~1\Temp</info>
+<info>Environment HOMEDRIVE=U:</info>
+<info>Environment ARMLMD_LICENSE_FILE=27001@lon-flexlm02;27001@lon-flexlm01;27001@cam-flexlm02;27001@cam-flexlm01</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment MWCSYM2INCLUDES=C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_Win32\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_X86\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C++\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;+C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment NUMBER_OF_PROCESSORS=2</info>
+<info>Environment APPDATA=C:\Documents and Settings\IAINW\Application Data</info>
+<info>Environment HOMESHARE=\\lonfiler01\uiainwilliamson</info>
+<info>Environment PROCESSOR_LEVEL=15</info>
+<info>Environment NOKIA_LICENSE_FILE=1700@lon-flexlm02;1700@cam-flexlm01; 1700@ban-flexlm01</info>
+<info>Environment EPOCROOT=G:\tcl-personal\iainw\fix2\raptor\test\epocroot\</info>
+<info>Environment RVCT22BIN=C:\Apps\ARM\RVCT\Programs\2.2\349\win_32-pentium</info>
+<info>Environment SITK_PATHS=d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;</info>
+<info>Environment PROGRAMFILES=C:\Program Files</info>
+<info>Duplicate variant 'v95' (the one from 'G:/tcl-personal/iainw/fix2/raptor/lib/config\variants.xml' was replaced by the one in 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/sbs_config\overrides.xml')</info>
+<info>Duplicate variant 'root.changes' (the one from 'G:/tcl-personal/iainw/fix2/raptor/lib/config\root.xml' was replaced by the one in 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/sbs_config\overrides.xml')</info>
+<info>Buildable configuration 'armv5_urel'</info>
+<info>Buildable configuration 'armv5_udeb'</info>
+<info>Buildable configuration 'winscw_udeb'</info>
+<info>Buildable configuration 'winscw_urel'</info>
+<info>Loaded toolcheck cache: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/toolcheck_cache_.tmp
+</info>
+<info>Buildable specification group 'CONFIG_WIDE'</info>
+<info>Buildable specification 'config_wide'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_urel".</info>
+<info>'armv5_urel' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_udeb".</info>
+<info>'armv5_udeb' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_udeb".</info>
+<info>'winscw_udeb' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_urel".</info>
+<info>'winscw_urel' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp for platform winscw_udeb + winscw_urel</info>
+<info>Buildable specification group 'ALL'</info>
+<info>Buildable specification 'export_0'</info>
+<info>Buildable specification 'build_0'</info>
+<info>Buildable specification 'build_1'</info>
+<info>Running G:/tcl-personal/iainw/fix2/raptor/win32/bin/talonctl.exe start</info>
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.export</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.export" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `EXPORT'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.bitmap</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.bitmap" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `BITMAP'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource_deps</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource_deps" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `RESOURCE_DEPS'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `RESOURCE'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.default</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.default" -j 4  TALON_DESCRAMBLE=1 '</info>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test{000a0000}.def"</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test{000a0000}.dso"</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_urel_objects.via</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test{000a0000}.def"</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test{000a0000}.dso"</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_udeb_objects.via</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map</build>
+</whatlog>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
+
+]]><time start='1253890703.95062' elapsed='1.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
+
+]]><time start='1253890703.95062' elapsed='1.406' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
+
+]]><time start='1253890703.95062' elapsed='1.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.fake' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'> <!-- Fake recipe, nested in ther CDATA of a real one -->
+<status exit='ok' attempt='1' />
+</recipe>
+]><time start='1253890705.41936' elapsed='0.500' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -E -O2 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -M -E -O2 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+
+]]><time start='1253890703.95062' elapsed='2.016' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
+
+]]><time start='1253890705.38811' elapsed='0.641' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
+
+]]><time start='1253890705.38811' elapsed='0.750' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
+
+]]><time start='1253890705.96623' elapsed='0.656' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
+
+]]><time start='1253890706.18498' elapsed='0.562' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
+
+]]><time start='1253890706.04435' elapsed='0.719' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
+
+]]><time start='1253890706.66935' elapsed='0.672' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -E -O0 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -M -E -O0 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+
+]]><time start='1253890706.05998' elapsed='1.281' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
+
+]]><time start='1253890706.77872' elapsed='0.656' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
+
+]]><time start='1253890706.84122' elapsed='0.703' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
+
+]]><time start='1253890707.41935' elapsed='0.625' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
+
+]]><time start='1253890707.37247' elapsed='0.672' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+mwccsym2.exe: warning: No file mapping matches 'test.cia' (unrecognized file contents or filename extension); treating as source text
+test.cia:3: warning: variable / argument 'i' is not used in function
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.dep
+
+]]><time start='1253890707.55997' elapsed='4.016' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.dep
+
+]]><time start='1253890708.05997' elapsed='3.547' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.dep
+
+]]><time start='1253890708.05997' elapsed='3.609' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.dep
+
+]]><time start='1253890707.48185' elapsed='4.328' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.dep
+
+]]><time start='1253890711.71619' elapsed='0.516' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.dep
+
+]]><time start='1253890711.62244' elapsed='0.625' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.dep
+
+]]><time start='1253890711.70057' elapsed='0.578' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.dep
+
+]]><time start='1253890711.84119' elapsed='0.484' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32generateUIDcpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ echo '// SBS-generated uid source file'
++ echo '#include <e32cmn.h>'
++ echo '#pragma data_seg(".SYMBIAN")'
++ echo '__EMULATOR_IMAGE_HEADER2(0x1000007a,0x100039ce,0x00000001,EPriorityLow,0x00000b07u,0x00000000u,0x10003a5c,0x00000000,0x00010000,0)'
++ echo '#pragma data_seg()'
+
+]]><time start='1253890712.27869' elapsed='0.281' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+mwccsym2.exe: warning: No file mapping matches 'test.cia' (unrecognized file contents or filename extension); treating as source text
+test.cia:3: warning: variable / argument 'i' is not used in function
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.dep
+
+]]><time start='1253890712.32557' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.dep
+
+]]><time start='1253890712.27869' elapsed='0.516' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.dep
+
+]]><time start='1253890712.38807' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.dep
+
+]]><time start='1253890712.57556' elapsed='0.453' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.dep
+
+]]><time start='1253890712.77869' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.dep
+
+]]><time start='1253890712.84119' elapsed='0.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.dep
+
+]]><time start='1253890712.82556' elapsed='0.484' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32generateUIDcpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ echo '// SBS-generated uid source file'
++ echo '#include <e32cmn.h>'
++ echo '#pragma data_seg(".SYMBIAN")'
++ echo '__EMULATOR_IMAGE_HEADER2(0x1000007a,0x100039ce,0x00000001,EPriorityLow,0x00000b07u,0x00000000u,0x10003a5c,0x00000000,0x00010000,0)'
++ echo '#pragma data_seg()'
+
+]]><time start='1253890713.23181' elapsed='0.203' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.dep
+
+]]><time start='1253890713.10681' elapsed='0.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.dep
+
+]]><time start='1253890713.52868' elapsed='0.875' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.dep
+
+]]><time start='1253890713.45056' elapsed='0.953' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='tranasm' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ CPPFILT=G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/c++filt.exe
++ perl.exe G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/tranasm.pl --suppress-check --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre
+
+]]><time start='1253890713.26306' elapsed='2.062' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='tranasm' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ CPPFILT=G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/c++filt.exe
++ perl.exe G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/tranasm.pl --suppress-check --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre
+
+]]><time start='1253890713.32556' elapsed='2.000' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp2o' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o
+
+]]><time start='1253890715.34117' elapsed='0.437' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ MWSym2LibraryFiles='msl_all_static_mse_symbian_d.lib;gdi32.lib;user32.lib;kernel32.lib'
++ mwldsym2.exe -msgstyle gcc -stdlib -subsystem windows -g -heapreserve=64 -heapcommit=20 -m '?_E32Bootstrap@@YGXXZ' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/eexe.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/scppnwdl.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/euser.lib -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe -noimplib -l G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb -search @G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_udeb_objects.lrf
+mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+mwldsym2.exe: warning: files uc_cwhelp.obj (eexe.lib), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
+mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
+
+]]><time start='1253890714.71618' elapsed='1.156' />
+<status exit='ok' attempt='1' />
+</recipe>
+<status exit='failed' attempt='1' />
+</recipe> <!-- Repeated closure - what status do we get? -->
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ MWSym2LibraryFiles='msl_all_static_mse_symbian_d.lib;gdi32.lib;user32.lib;kernel32.lib'
++ mwldsym2.exe -msgstyle gcc -stdlib -subsystem windows -heapreserve=64 -heapcommit=20 -m '?_E32Bootstrap@@YGXXZ' -map G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/eexe.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/scppnwdl.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/euser.lib -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe -noimplib -l G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel -search @G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_urel_objects.lrf
+mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+mwldsym2.exe: warning: files uc_cwhelp.obj (eexe.lib), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
+mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
+
+]]><time start='1253890714.68493' elapsed='1.203' />
+<status exit='ok' attempt='1' />
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''> <!-- Repeated opening - will this hide the warnings above? -->
+</recipe>
+<recipe name='cia2cpp2o' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o
+
+]]><time start='1253890715.34117' elapsed='0.547' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='link' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname --soname 'test{000a0000}[00000001].exe' --entry _E32Startup 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym --symbols --list G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map --via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_urel_objects.via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/usrt2_2.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/euser.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/scppnwdl.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfpaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfprvct2_2.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib/h_t__uf.l(switch8.o)'
+
+]]><time start='1253890716.15367' elapsed='0.891' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='link' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname --soname 'test{000a0000}[00000001].exe' --entry _E32Startup 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym --symbols --list G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map --via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_udeb_objects.via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/usrt2_2.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/euser.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/scppnwdl.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfpaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfprvct2_2.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib/h_t__uf.l(switch8.o)'
+
+]]><time start='1253890716.15367' elapsed='1.219' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='postlink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/elf2e32.exe --sid=0x10003a5c --version=10.0 --uid1=0x1000007a --uid2=0x100039ce --uid3=0x00000001 --capability=TCB+ProtServ+DiskAdmin+AllFiles+PowerMgmt+CommDD --fpu=softvfp --codepaging=paged --datapaging=paged --targettype=EXE --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe --elfinput=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym '--linkas=test{000a0000}[00000001].exe' --priority=Low --stack=0x2000 --heap=0x5000,0xffff --debuggable '--libpath=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/;C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib'
+
+]]><time start='1253890717.05991' elapsed='0.641' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='postlink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/elf2e32.exe --sid=0x10003a5c --version=10.0 --uid1=0x1000007a --uid2=0x100039ce --uid3=0x00000001 --capability=TCB+ProtServ+DiskAdmin+AllFiles+PowerMgmt+CommDD --fpu=softvfp --codepaging=paged --datapaging=paged --targettype=EXE --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe --elfinput=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym '--linkas=test{000a0000}[00000001].exe' --priority=Low --stack=0x2000 --heap=0x5000,0xffff --debuggable '--libpath=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/;C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib'
+
+]]><time start='1253890717.38803' elapsed='0.312' />
+<status exit='ok' attempt='1' />
+</recipe>
+<info>Running G:/tcl-personal/iainw/fix2/raptor/win32/bin/talonctl.exe stop</info>
+<info>The make-engine exited successfully.</info>
+<info>Run time 16 seconds</info>
+<info>Created/Updated toolcheck cache: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/refilter.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+class Refilter:
+	"""
+	Refilters an existing logfile with a specified filter
+	
+	Parameters:
+			filtermodule: 	The name of the filter file to use for refiltering
+			filtername:		The name of the filter class
+			logfilename: 	The logfile to be parsed
+	"""
+	class Dummy_raptor:
+		def __init__(self, logfile, targets):
+			self.logFileName = logfile
+			self.quiet = False
+			self.dummy = False
+			self.targets = targets
+
+	def __init__(self, filtermodule, filtername, logfilename):
+		dummy_raptor = Refilter.Dummy_raptor(logfilename, [])
+		
+		module=__import__(filtermodule)
+		self.filter=eval("module."+filtername+"()")
+
+		self.filter.open(dummy_raptor)
+
+	def refilter(self, inputlog):
+		file=open(inputlog)
+
+		while True:
+			line=file.readline()
+			if not line:
+				break
+			self.filter.write(line)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+# Kicks off the Terminal Filter refiltering for use with terminal_filter_tests.py 
+
+export PYTHONPATH=$SBS_HOME/python:$SBS_HOME/python/plugins
+
+python $SBS_HOME/test/smoke_suite/test_resources/refilter/testfilterterminal.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.bat	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+@rem Kicks off the Terminal Filter refiltering for use with terminal_filter_tests.py
+
+@SETLOCAL
+
+@SET HOSTPLATFORM=win 32
+@SET HOSTPLATFORM_DIR=win32
+
+@set PYTHONPATH=%SBS_HOME%/python;%SBS_HOME%/python/plugins
+
+@python %SBS_HOME%\test\smoke_suite\test_resources\refilter\testfilterterminal.py
+
+@endlocal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+import refilter
+
+refilter = refilter.Refilter("filter_terminal","FilterTerminal","foo")
+
+refilter.refilter(os.environ["SBS_HOME"]
+		+ "/test/smoke_suite/test_resources/refilter/Makefile_broken.log")
Binary file sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF2M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_EXPORTS
+../inc/testresource.hrh /epoc32/include/testresource.hrh
+testresource_badef.rh /epoc32/include/testresource_badef.rh
+
+
+PRJ_MMPFILES
+testresource.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET                  testresource
+TARGETTYPE              EXE
+LIBRARY                 euser.lib
+SECUREID                0x10003a5c
+SYSTEMINCLUDE   /epoc32/include
+SOURCEPATH              ../
+SOURCE                  test.cpp 
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+UID     0x1000008d 0x10005342
+VENDORID 0x70000001
+USERINCLUDE     ../inc
+SYSTEMINCLUDE   /epoc32/include
+
+MACRO SHOULD_BE_DEFINED
+
+
+START RESOURCE          testresource.rss
+// Test backslash to forward slash conversion here:
+TARGETPATH              resource\testresource
+HEADER
+LANG SC 01
+END
+
+START RESOURCE          testresource.rss
+TARGETPATH              resource/testresource2
+HEADERONLY
+LANG 01 sc
+END
+
+START RESOURCE          testresource.rss
+TARGETPATH              resource/testresource3
+LANG 02 sc
+END
+
+START BITMAP	testresource.mbm
+HEADER
+
+TARGETPATH		resource/apps
+SOURCEPATH		../aifsrccl
+SOURCE			c8,1 DEF24.BMP DEF2M.BMP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource_badef.rh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* BADEF.RH
+*
+*/
+
+
+#if !defined(__BADEF_RH__)
+#define __BADEF_RH__
+
+STRUCT BA_RSS_SIGNATURE
+    {
+    LONG signature=0; // this value must be changed if the resource file is loaded by an environment
+    SRLINK self;
+    }
+
+STRUCT TBUF
+    {
+    BUF buf; // non-zero terminated text string
+    }
+
+STRUCT LBUF
+    {
+    LTEXT txt; // leading-byte counted text string
+    }
+
+STRUCT ARRAY
+    {
+    STRUCT items[];
+    }
+
+STRUCT UID_NAME_PAIR
+	{
+	LONG uid;
+	STRUCT name; // an LBUF
+	}
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(__LOGWRAP_HRH__)
+#define __LOGWRAP_HRH__
+
+// Event Uid's
+#define KLogCallEventType 0x1000550D
+#define KLogDataEventType 0x10005566
+#define KLogFaxEventType 0x10005567
+#define KLogShortMessageEventType 0x10005568
+#define KLogMailEventType 0x10005569
+#define KLogTaskSchedulerEventType  0x1000585E
+#define KLogPacketDataEventType  0x10008F8E
+#define KLogLbsSelfLocateEventType 0x102822B2
+#define KLogLbsExternalLocateEventType 0x102822B3
+#define KLogLbsTransmitLocationEventType 0x102822B4
+#define KLogLbsNetworkLocateEventType 0x102822B5
+#define KLogLbsAssistanceDataEventType 0x102822B6
+
+// Recent lists (Make consecutive)
+#define KLogRecentIncomingCalls 1
+#define KLogRecentOutgoingCalls 2
+#define KLogRecentMissedCalls 3
+
+// Filter fields
+#define ELogFirstFilterField 0x1
+#define ELogContactField 0x1
+#define ELogDirectionField 0x2
+#define ELogDurationTypeField 0x4
+#define ELogEventTypeField 0x8
+#define ELogNumberField 0x10
+#define ELogRemotePartyField 0x20
+#define ELogStatusField 0x40
+#define ELogStartTimeField 0x80
+#define ELogEndTimeField 0x100
+#define ELogFlagsField 0x200
+#define ELogSubjectField 0x400
+#define ELogLinkField 0x800
+#define ELogDataField 0x1000
+#define ELogLastFilterField 0x200
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.rh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#define ELogEnable 1
+#define ELogDisable 0
+#define ELogUnique 1
+#define ELogUndefined -1
+
+STRUCT CONFIG
+	{
+	WORD size;
+	BYTE recent;
+	LONG age;
+	}
+
+
+STRUCT CAPABILITY
+	{
+	LONG cap;
+	}
+	
+STRUCT SECURITY
+	{
+	LONG uid;
+	STRUCT read_caps[];
+	STRUCT write_caps[];
+	}	
+
+STRUCT ETYPE
+	{
+	LONG uid;
+	LTEXT description;
+	BYTE enabled = ELogEnable;
+	}
+	
+ENUM {EAsc,EDesc};
+
+STRUCT KEY
+	{
+	LTEXT col;
+	WORD order = EAsc;
+	WORD len = ELogUndefined;
+	}
+
+ENUM { EDbCompareNormal, EDbCompareFolded, EDbCompareCollated };
+
+STRUCT INDEX
+	{
+	LTEXT name;
+	LTEXT table;
+	STRUCT keys[];
+	BYTE unique = 0;
+	BYTE compare = EDbCompareNormal;
+	}
+
+STRUCT RECENT
+	{
+	BYTE id;
+	WORD duplicate = 0;
+	STRUCT conditions[];
+	}
+
+STRUCT MATCH
+	{
+	WORD field;
+	LTEXT string = "";
+	LONG value = 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rls	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+rls_string LOG_CALL_EVENT_TYPE	"Voice call"
+rls_string LOG_DATA_EVENT_TYPE	"Data call"
+rls_string LOG_FAX_EVENT_TYPE	"Fax"
+rls_string LOG_SHORT_MESSAGE_EVENT_TYPE	"Short message"
+rls_string LOG_MAIL_EVENT_TYPE	"Mail"
+rls_string LOG_TASK_SCHEDULER_EVENT_TYPE  "Task scheduler"
+rls_string LOG_PACKET_DATA_EVENT_TYPE	"Packet Data"
+rls_string LOG_LBS_SELF_LOCATE_EVENT_TYPE	"Location Requested by On Board Application"
+rls_string LOG_LBS_EXTERNAL_LOCATE_EVENT_TYPE	"Location Requested by Remote Party"
+rls_string LOG_LBS_TRANSMIT_LOCATION_EVENT_TYPE	"Location Sent to Remote Party"
+rls_string LOG_LBS_NETWORK_LOCATE_EVENT_TYPE	"Location Determined by Network"
+rls_string LOG_LBS_ASSISTANCE_DATA_EVENT_TYPE	"Location Data Obtained from Network"
+
+// Direction
+rls_string LOG_DIR_IN	"Incoming"
+rls_string LOG_DIR_OUT	"Outgoing"
+rls_string LOG_DIR_IN_ALT	"Incoming on alternate line"
+rls_string LOG_DIR_OUT_ALT	"Outgoing on alternate line"
+rls_string LOG_DIR_FETCHED	"Fetched"
+rls_string LOG_DIR_MISSED	"Missed call"
+rls_string LOG_DIR_MISSED_ALT	"Missed call on alternate line"
+
+// Delivery
+rls_string LOG_DEL_PENDING	"Pending"
+rls_string LOG_DEL_SENT		"Sent"
+rls_string LOG_DEL_FAILED	"Failed"
+rls_string LOG_DEL_NONE		"No delivery"
+rls_string LOG_DEL_DONE		"Delivered"
+rls_string LOG_DEL_NOT_SENT	"Not sent"
+rls_string LOG_DEL_SCHEDULED	"Scheduled"
+
+// Other
+rls_string LOG_REMOTE_UNKNOWN	"Unknown"
+rls_string LOG_REMOTE_MULTIPLE	"Multiple Parties"
+rls_string LOG_SUBJECT_NONE	"No subject"
+rls_string LOG_SUBJECT_DATA_MESSAGE	"Data Message"
+
+// Connection
+rls_string LOG_CON_CONNECTED		"Connected"
+rls_string LOG_CON_CONNECTING		"Connecting"
+rls_string LOG_CON_DISCONNECTING	"Disconnecting"
+rls_string LOG_CON_DISCONNECTED 	"Disconnected"
+rls_string LOG_CON_SUSPENDED		"Suspended"
+
+// Delivery
+rls_string LOG_DEL_NOTIFIED		"Notified"
+rls_string LOG_DEL_EXPIRED		"Expired"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* LOGWRAP.RSS
+*
+*/
+
+
+#include <testresource_badef.rh>
+#include <e32capability.h>
+
+#include "../inc/testresource.rh"
+#include "../inc/testresource.hrh"
+#include "testresource.rls"
+
+#include "testresource.mbg"
+
+// MACRO statements in .mmp files should be reflected in resource preprocessing
+#ifndef SHOULD_BE_DEFINED
+#error "mmp MACRO SHOULD_BE_DEFINED is not defined!"
+#endif
+
+// Initial configuration
+RESOURCE CONFIG r_log_initial_config
+	{
+	size = 1000; // Maximum number of events
+	recent = 20; // Maximum size of recent lists
+	age = 2592000; // 30 days
+	}
+
+  RESOURCE ARRAY r_log_initial_events
+   	{
+   	items = 
+   		{
+  		ETYPE { uid = KLogCallEventType; description = LOG_CALL_EVENT_TYPE; },
+  		ETYPE { uid = KLogDataEventType; description = LOG_DATA_EVENT_TYPE; },
+  		ETYPE { uid = KLogFaxEventType; description = LOG_FAX_EVENT_TYPE; },
+  		ETYPE { uid = KLogShortMessageEventType; description = LOG_SHORT_MESSAGE_EVENT_TYPE; },
+  		ETYPE { uid = KLogTaskSchedulerEventType; description = LOG_TASK_SCHEDULER_EVENT_TYPE; },
+  		ETYPE { uid = KLogPacketDataEventType; description = LOG_PACKET_DATA_EVENT_TYPE; },
+
+
+  		ETYPE { uid = KLogLbsSelfLocateEventType; description = LOG_LBS_SELF_LOCATE_EVENT_TYPE; },
+  		ETYPE { uid = KLogLbsExternalLocateEventType; description = LOG_LBS_EXTERNAL_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsTransmitLocationEventType; description = LOG_LBS_TRANSMIT_LOCATION_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsNetworkLocateEventType; description = LOG_LBS_NETWORK_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsAssistanceDataEventType; description = LOG_LBS_ASSISTANCE_DATA_EVENT_TYPE; }
+
+   		};
+   	}
+
+
+
+RESOURCE ARRAY r_log_security
+//
+// [See logwrap.rh for the definitions of SECURITY and CAPABILITY.]
+//
+// This structure defines settings for platform security in the Log engine.
+// All event types defined above in 'r_log_initial_events' need to be policed.
+// The server must always determine whether a client thread has the required
+// capability to read/write a log event(s) of a built-in type.  Each operation
+// may have from one to seven capabilities defined for it.  All operations on 
+// built in types _MUST_ have an associated security policy defined here.  If no
+// security is required, then use 'cap=ECapability_None'.  The CAPABILITY values
+// defined here will provide constructor arguments for TSecurityPolicy objects.
+// The maximum number of CAPABILITY(s) for each read or write operation is 7.
+// ( a read_caps or a write_caps { contains <= 7 CAPABILITY{}   statements }  )
+// Note that SID-based security isn't supported in the Log Engine.
+//
+	{
+	items = 
+		{
+		SECURITY 
+			{ 
+			uid = KLogCallEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogFaxEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogShortMessageEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogTaskSchedulerEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapability_None; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogPacketDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsSelfLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsExternalLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsTransmitLocationEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsNetworkLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsAssistanceDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			}
+		};
+	}
+
+
+// Index entries
+RESOURCE ARRAY r_log_indexes
+	{
+	items =
+		{
+		INDEX
+			{
+			name = "Index1"; // do not translate
+			table = "Event"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index2"; // do not translate
+			table = "Event"; // do not translate
+			keys =
+				{
+				KEY { col = "ETime"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index3"; // do not translate
+			table = "String"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			}
+		};
+	}
+
+// Recent list setup
+RESOURCE ARRAY r_log_recent
+	{
+	items =
+		{
+		RECENT
+			{
+			id = KLogRecentIncomingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentOutgoingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentMissedCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED_ALT; }
+				};
+			}
+		};
+	}
+
+
+// Direction
+RESOURCE LBUF r_log_dir_in { txt = LOG_DIR_IN; }
+RESOURCE LBUF r_log_dir_out { txt = LOG_DIR_OUT; }
+RESOURCE LBUF r_log_dir_in_alt { txt = LOG_DIR_IN_ALT; }
+RESOURCE LBUF r_log_dir_out_alt { txt = LOG_DIR_OUT_ALT; }
+RESOURCE LBUF r_log_dir_fetched { txt = LOG_DIR_FETCHED; }
+RESOURCE LBUF r_log_dir_missed { txt = LOG_DIR_MISSED; }
+RESOURCE LBUF r_log_dir_missed_alt { txt = LOG_DIR_MISSED_ALT; }
+
+
+// Delivery
+RESOURCE LBUF r_log_del_pending { txt = LOG_DEL_PENDING; }
+RESOURCE LBUF r_log_del_sent { txt = LOG_DEL_SENT; }
+RESOURCE LBUF r_log_del_failed { txt = LOG_DEL_FAILED; }
+RESOURCE LBUF r_log_del_none { txt = LOG_DEL_NONE; }
+RESOURCE LBUF r_log_del_done { txt = LOG_DEL_DONE; }
+RESOURCE LBUF r_log_del_not_sent { txt = LOG_DEL_NOT_SENT; }
+RESOURCE LBUF r_log_del_scheduled { txt = LOG_DEL_SCHEDULED; }
+
+// Other
+RESOURCE LBUF r_log_remote_unknown { txt = LOG_REMOTE_UNKNOWN; }
+RESOURCE LBUF r_log_remote_multiple { txt = LOG_REMOTE_MULTIPLE; }
+RESOURCE LBUF r_log_subject_none { txt = LOG_SUBJECT_NONE; }
+RESOURCE LBUF r_log_subject_data_message { txt = LOG_SUBJECT_DATA_MESSAGE; }
+
+// Connection
+RESOURCE LBUF r_log_con_connected { txt = LOG_CON_CONNECTED; }
+RESOURCE LBUF r_log_con_connecting { txt = LOG_CON_CONNECTING; }
+RESOURCE LBUF r_log_con_disconnecting { txt = LOG_CON_DISCONNECTING; }
+RESOURCE LBUF r_log_con_disconnected{ txt = LOG_CON_DISCONNECTED; }
+RESOURCE LBUF r_log_con_suspended{ txt = LOG_CON_SUSPENDED; }
+
+// Delivery
+RESOURCE LBUF r_log_del_notified { txt = LOG_DEL_NOTIFIED; } 
+RESOURCE LBUF r_log_del_expired { txt = LOG_DEL_EXPIRED; }  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this FLM will fail FAILURES times and then succeed
+//
+// (each instance needs its own COUNTER as they may be run in parallel)
+
+PRJ_EXPORTS
+retry_test.xml /epoc32/tools/makefile_templates/
+retry_test.flm /epoc32/tools/makefile_templates/
+
+PRJ_EXTENSIONS
+
+start EXTENSION retry.test
+OPTION FAILURES 1
+OPTION COUNTER  retry_1
+end
+
+start EXTENSION retry.test
+OPTION FAILURES 2
+OPTION COUNTER  retry_2
+end
+
+start EXTENSION retry.test
+OPTION FAILURES 3
+OPTION COUNTER  retry_3
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+
+# This FLM is for testing the retry mechanism in our rules.
+# It will fail on the first FAILURES invocations and then succeed.
+
+MY_COUNTER:=$(EPOCROOT)/epoc32/build/$(COUNTER)
+
+define retry_test
+ALL::
+	$(call startrule,retry_test) \
+	(TRY=1; \
+	while (( $$$$TRY <= $(FAILURES) )); do \
+		if [ ! -f $(MY_COUNTER).$$$$TRY ]; then \
+			touch $(MY_COUNTER).$$$$TRY; \
+			echo DELIBERATE FAILURE $$$$TRY for $(COUNTER); \
+			exit 1; \
+		fi; \
+		(( TRY=$$$$TRY + 1 )); \
+	done) && \
+	echo SUCCESS for $(COUNTER) && \
+	touch $(MY_COUNTER).ok \
+	$(call endrule,retry_test)
+endef
+$(eval $(retry_test))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../../schema/build/2_0.xsd">
+	<!-- utility interfaces : handy FLMs for simple things -->
+
+	<interface name="retry.test" extends="base.flm" flm="retry_test.flm">
+		<param name='EPOCROOT'/>
+		<param name='FAILURES'/>
+		<param name='COUNTER'/>
+	</interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			always_build_as_arm
+TARGETTYPE		EXE
+
+// Always build as arm
+ALWAYS_BUILD_AS_ARM
+
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+always_build_as_arm.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/build_spec.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test build specification -->
+
+    <spec name="simple">
+        <interfaceRef ref="Symbian.EXE"/>
+	<var>
+	    <set name="SIMPLE" value="$(SBS_HOME)/test/simple"/>
+
+	    <set name="SOURCEFILES" value="$(SIMPLE)/test.cpp"/>
+	    <set name="EXENAME" value="test"/>
+	    <set name="TARGETTYPE" value="EXE"/>
+	    <set name="UID1" value="0x1000007a"/>
+	    <set name="UID2" value="0x100039ce"/>
+	    <set name="UID3" value="0x00000001"/>
+	    <set name="SID" value="0x10003a5c"/>
+	</var>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/commands-v7.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+
+-b smoke_suite/test_resources/simple/bld.inf
+
+-c
+
+armv7_urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			debuggable
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+DEBUGGABLE
+DEBUGGABLE_UDEBONLY
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable_bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+debuggable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test.cia test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+OPTION GCCE -O2
+PAGED
+DEBUGGABLE
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cia	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Some random assembler or a "straight" dummy function
+
+#ifndef __WINSCW__
+EXPORT_C __NAKED__ void dummy()
+	{
+	asm("stmia	r0, {r4-r11, sp, lr}	");
+	asm("mov  r0, #0"); 
+	}
+#else
+int fred(int i)
+	{
+	return 1;
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+#include "test.h"
+
+char test[]="Simple test";
+
+TInt test1();
+TInt test2();
+TInt test3();
+TInt test4();
+TInt test5();
+TInt test6();
+
+TInt E32Main()
+{
+	test1();
+	test2();
+	test3();
+	test4();
+	test5();
+	test6();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Blank header file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test1.c++	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test1()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test2.cxx	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test2()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+
+TInt test3()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test4.cc	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test4()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test5.CC	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test5()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test6.C++	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test6()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_crash/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+\\this_line_is_not_acceptable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLARM.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLWINS.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CommonFramework.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+void sbs_test()
+	{
+	__ARM_switch8();
+	}
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET        createstaticdll.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL.cpp
+
+#ifdef ARMV6
+SOURCE        armv6_specific.cpp
+#endif
+#ifdef ARMV7
+SOURCE        armv7_specific.cpp
+#endif
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+#if defined(WINS)
+    deffile ./CREATESTATICDLLWINS.def
+#elif defined(MARM)
+    deffile ./CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv6_specific.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int armv6_specific()
+	{
+#ifndef __ARMV6__
+#error __ARMV6__ macro expected but was not set
+#endif
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv7_specific.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int armv7_specific()
+	{
+#ifndef __ARMV7__
+#error __ARMV7__ macro expected but was not set
+#endif
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 ARMV6 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+
+CreateStaticDLL.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+win32resourcedll.mmp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/epoc32.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/gui.rc	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,79 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+EPOC_ICON               ICON    DISCARDABLE     "epoc32.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Cursor
+//
+
+OVERKEY                 CURSOR  DISCARDABLE     "hand.cur"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/hand.cur has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/resource.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+ //{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by gui.rc
+//
+#define EPOC_ICON                       102
+#define OVERKEY                         104
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        105
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/win32resourcedll.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "../CreateStaticDLL.mmp"
+
+START WINS
+WIN32_RESOURCE gui.rc
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
+
+PRJ_EXPORTS
+simple_exp1.h exported_1.h
+simple_exp2.h exported_2.h
+simple_exp3.h exported_3.h
+"file with a space.doc" "exportedfilewithspacesremoved.doc"
+"file with a space.doc" "exported file with a space.doc"
+
+simple_exp1.h /tmp/$$(USER)/  //
+simple_exp2.h \tmp\$$(USER)/  //
+simple_exp3.h /tmp/$$(USER)/simple_exp3.h 
+simple_exp4.h //
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.dso
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp1.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp2.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp3.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp4.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+clean.mk /epoc32/tools/makefile_templates/sbsv2test/clean.mk
+clean.meta /epoc32/tools/makefile_templates/sbsv2test/clean.meta
+build.mk /epoc32/tools/makefile_templates/sbsv2test/build.mk
+build.meta /epoc32/tools/makefile_templates/sbsv2test/build.meta
+
+PRJ_EXTENSIONS
+
+start extension sbsv2test/clean
+option FRED=1
+end
+
+start extension sbsv2test/build
+option CONTENT Stuff
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.meta	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+platform	win32
+makefile	gnumake
+techstream	sbsv2test
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Simple TEM that generates trivial release tree files
+
+BLD:
+	echo "simple_extension $(PLATFORM) $(CFG) $(CONTENT)" > $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+	
+CLEAN:
+	rm -f $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+
+RELEASABLES:
+	@echo $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+
+SAVESPACE: BLD
+
+MAKMAKE RESOURCE LIB CLEANLIB FINAL FREEZE:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.meta	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+platform	win32
+makefile	gnumake
+techstream	sbsv2test
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# SBSv2 test TEM that creates a file and cleans it
+# This helps to test the REALLYCLEAN mechanism 
+
+blah:
+
+
+MAKMAKE:
+
+RESOURCE:
+	
+SAVESPACE: BLD
+
+BLD:
+	echo "HI" > $(EPOCROOT)/epoc32/build/tem_export_test
+
+FREEZE:
+
+LIB:
+
+CLEANLIB:
+
+FINAL:
+
+CLEAN:
+	rm -f $(EPOCROOT)/epoc32/build/tem_export_test
+
+RELEASABLES:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+flm_export.flm /epoc32/tools/makefile_templates/tools/flm_export.flm
+flm_export.xml /epoc32/tools/makefile_templates/tools/flm_export.xml
+
+PRJ_EXTENSIONS
+
+start extension tools/flm_test
+option FLM_EXPORT_1 1
+option FLM_EXPORT_2 2
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+# SBSv2 test flm
+# This helps to test flm exports mechanism
+
+ALL::
+	echo " "  > $(EPOCROOT)/epoc32/build/flm_test_${FLM_EXPORT_1}_${FLM_EXPORT_2}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!--  Extension interfaces : replacements for Template Extension Makefiles 
+  --> 
+
+ <interface name="tools.flm_test" extends="middle_man" flm="flm_export.flm">
+  <param name="FLM_EXPORT_1" /> 
+ </interface>
+
+ <interface name="middle_man" extends="Symbian.UserFLM" abstract="true">
+  <param name="FLM_EXPORT_2" />
+ </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/BldVar2.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorldVar2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorldstdcpp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/DISTRIBUTION.policy	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __HELLOWORLD_H
+#define __HELLOWORLD_H
+
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikmenup.h>
+
+#include <eikon.hrh>
+
+#include <helloworld.rsg>
+#include "HelloWorld.hrh"
+
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleApplication
+//
+////////////////////////////////////////////////////////////////////////
+
+class CExampleApplication : public CEikApplication
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppView
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppView : public CCoeControl
+    {
+public:
+	static CExampleAppView* NewL(const TRect& aRect);
+	CExampleAppView();
+	~CExampleAppView();
+    void ConstructL(const TRect& aRect);
+
+private:
+	           // Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+	HBufC*  iExampleText;
+    };
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppUi
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CExampleAppUi();
+
+private:
+              // Inherirted from class CEikAppUi
+	void HandleCommandL(TInt aCommand);
+
+private:
+	CCoeControl* iAppView;
+	};
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleDocument
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleDocument : public CEikDocument
+	{
+public:
+	static CExampleDocument* NewL(CEikApplication& aApp);
+	CExampleDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.pkg	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: 
+;
+;
+; Basic install file for HelloWorld application
+;
+
+; List of languages supported.
+; Here, only UK English is supported.
+&EN
+
+; List of localised vendor names.
+; Here, only UK English version is specified.
+%{"Symbian Software Ltd."}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd."
+
+; Installation header.
+; Only specifies one component name as we only support English.
+; The UID is the package UID - this is not the same as the app's UID, 
+; which is specified in HelloWorld.mmp.
+
+#{"Hello World"},(0xE8000091),1,0,0
+
+; Four files to install for the minimal application
+"HelloWorld.exe"-"!:\sys\bin\HelloWorld.exe"
+"HelloWorld.rsc"-"!:\resource\apps\HelloWorld.rsc"
+"HelloWorld.mbm" - "!:\resource\apps\HelloWorld.mbm"
+"HelloWorld_reg.rsc" - "!:\private\10003a3f\import\apps\HelloWorld_reg.rsc"
+
+; Required files
+; None
+
+; Component .sis files
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+NAME HEWO
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+#include "HelloWorld.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	hotkeys=r_example_hotkeys;
+	menubar=r_example_menubar;
+	}
+
+RESOURCE HOTKEYS r_example_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_example_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_example_first_menu; txt="HelloWld"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_example_first_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EExampleItem0; txt="Item 0"; },
+		MENU_ITEM { command=EExampleItem1; txt="Item 1"; },
+		MENU_ITEM { command=EExampleItem2; txt="Item 2"; },
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+
+RESOURCE TBUF r_example_text_Hello { buf="Hello World!"; }
+RESOURCE TBUF r_example_text_Item0 { buf="Item 0"; }
+RESOURCE TBUF r_example_text_Item1 { buf="Item 1"; }
+RESOURCE TBUF r_example_text_Item2 { buf="Item 2"; }
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = "HW";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = "helloworld";
+			number_of_icons = 3; // each icon must be a bitmap/mask pair
+			icon_file = "z:\\resource\\apps\\helloworld.mbm";
+			}
+		};							
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldVar2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    var2
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppUi.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppUi.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The second phase constructor of the application UI class.
+//             The application UI creates and owns the one and only view.
+// 
+void CExampleAppUi::ConstructL()
+    {
+	           // BaseConstructL() completes the UI framework's
+	           // construction of the App UI.
+    BaseConstructL();
+	           // Create the single application view in which to
+	           // draw the text "Hello World!", passing into it
+	           // the rectangle available to it.
+	iAppView = CExampleAppView::NewL(ClientRect());
+	}
+
+
+//             The app Ui owns the two views and is. 
+//             therefore, responsible for destroying them
+//
+CExampleAppUi::~CExampleAppUi()
+	{
+	delete iAppView;
+	}
+
+
+//             Called by the UI framework when a command has been issued.
+//             In this example, a command can originate through a 
+//             hot-key press or by selection of a menu item.
+//             The command Ids are defined in the .hrh file
+//             and are 'connected' to the hot-key and menu item in the
+//             resource file.
+//             Note that the EEikCmdExit is defined by the UI
+//             framework and is pulled in by including eikon.hrh
+//
+void CExampleAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		      // Just issue simple info messages to show that
+		      // the menu items have been selected
+	case EExampleItem0:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM0);
+		break;
+
+	
+	case EExampleItem1:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM1);
+		break;
+	
+	case EExampleItem2:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM2);
+		break;
+               // Exit the application. The call is
+		       // implemented by the UI framework.
+
+	case EEikCmdExit: 
+		Exit();
+		break;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppView.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppView.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//
+//             Constructor for the view.
+//
+CExampleAppView::CExampleAppView()
+	{
+	}
+
+
+//             Static NewL() function to start the standard two
+//             phase construction.
+//
+CExampleAppView* CExampleAppView::NewL(const TRect& aRect)
+	{
+	CExampleAppView* self = new(ELeave) CExampleAppView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//             Destructor for the view.
+//
+CExampleAppView::~CExampleAppView()
+	{
+	delete iExampleText;
+	}
+
+
+//             Second phase construction.
+//
+void CExampleAppView::ConstructL(const TRect& aRect)
+    {
+			   // Fetch the text from the resource file.
+	iExampleText = iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);
+	           // Control is a window owning control
+	CreateWindowL();
+	           // Extent of the control. This is
+	           // the whole rectangle available to application.
+	           // The rectangle is passed to us from the application UI.
+	SetRect(aRect);
+			   // At this stage, the control is ready to draw so
+	           // we tell the UI framework by activating it.
+	ActivateL();
+	}
+
+
+//             Drawing the view - in this example, 
+//             consists of drawing a simple outline rectangle
+//             and then drawing the text in the middle.
+//             We use the Normal font supplied by the UI.
+//
+//             In this example, we don't use the redraw
+//             region because it's easier to redraw to
+//             the whole client area.
+//
+void CExampleAppView::Draw(const TRect& /*aRect*/) const
+	{
+               // Window graphics context
+	CWindowGc& gc = SystemGc();
+	           // Area in which we shall draw
+	TRect      drawRect = Rect();
+			   // Font used for drawing text
+	const CFont*     fontUsed;
+	
+	           // Start with a clear screen
+	gc.Clear();
+			   // Draw an outline rectangle (the default pen
+	           // and brush styles ensure this) slightly
+	           // smaller than the drawing area.
+	drawRect.Shrink(10,10);		   	
+	gc.DrawRect(drawRect);
+               // Use the title font supplied by the UI
+	fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+			   // Draw the text in the middle of the rectangle.
+	TInt   baselineOffset=(drawRect.Height() - fontUsed->HeightInPixels())/2; 
+	gc.DrawText(*iExampleText,drawRect,baselineOffset,CGraphicsContext::ECenter, 0);
+               // Finished using the font
+	gc.DiscardFont();
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Application.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleApplication.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+const TUid KUidHelloWorld = { 0xE800005A };
+
+//             The function is called by the UI framework to ask for the
+//             application's UID. The returned value is defined by the
+//             constant KUidHelloWorlde and must match the second value
+//             defined in the project definition file.
+//
+TUid CExampleApplication::AppDllUid() const
+	{
+	return KUidHelloWorld;
+	}
+
+//             This function is called by the UI framework at
+//             application start-up. It creates an instance of the
+//             document class.
+//
+CApaDocument* CExampleApplication::CreateDocumentL()
+	{
+	return new (ELeave) CExampleDocument(*this);
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleDocument.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The constructor of the document class just passes the
+//             supplied reference to the constructor initialisation list.
+//             The document has no real work to do in this application.
+//
+CExampleDocument::CExampleDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+
+//             This is called by the UI framework as soon as the 
+//             document has been created. It creates an instance
+//             of the ApplicationUI. The Application UI class is
+//             an instance of a CEikAppUi derived class.
+//
+CEikAppUi* CExampleDocument::CreateAppUiL()
+	{
+    return new(ELeave) CExampleAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Main.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include "HelloWorld.h"
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CExampleApplication.
+//
+
+#if defined(EKA2)
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+	
+#endif
+
+#if defined(__WINS__) && !defined(EKA2)
+//             This function is required by all Symbian OS DLLs. In this 
+//             example, it does nothing.
+
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+
+GLDEF_C TInt E32Dll(TDllReason)
+	{
+	return KErrNone;
+	}
+	
+EXPORT_C TInt WinsMain(TDesC* aCmdLine)
+	{
+	return EikStart::RunApplication(NewApplication, aCmdLine);
+	}
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_reg.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <appinfo.rh>
+#include <helloworld.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE800005A // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "HelloWorld";
+	localisable_resource_file = "\\resource\\apps\\HelloWorld";
+	localisable_resource_id = R_LAI;	
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldstdcpp.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+STDCPP
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5 ARMV5SMP
+
+PRJ_MMPFILES
+simple_implib.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        simple_implib.lib
+TARGETTYPE    implib
+
+#ifdef WINSCW
+DEFFILE ./simple_implib_emulator.def
+#else
+DEFFILE ./simple_implib_target.def
+#endif
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_emulator.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_target.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+
+    ARMV5 ARMV7
+
+PRJ_MMPFILES
+
+    kdll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+void foo()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET          test_kdll.dll
+TARGETTYPE      KDLL
+
+UID             0xE800004C
+CAPABILITY      All
+
+VENDORID        0x70000001
+
+SOURCE          kdll.cpp
+
+SYSTEMINCLUDE   /epoc32/include
+
+STATICLIBRARY   ekll.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			etest.lib
+TARGETTYPE		LIB
+UID			0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE		/epoc32/include
+SOURCE			test_lib.cpp
+
+// list of long names to provoke shell stackdump defect
+
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_1.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_10.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_11.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_12.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_13.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_14.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_15.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_16.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_17.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_18.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_19.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_2.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_20.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_21.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_22.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_23.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_24.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_25.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_26.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_27.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_28.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_29.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_3.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_30.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_31.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_32.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_33.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_34.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_35.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_36.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_37.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_38.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_39.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_4.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_40.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_41.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_42.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_43.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_44.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_45.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_46.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_47.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_48.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_49.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_50.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_51.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_52.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_53.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_54.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_55.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_56.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_57.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_58.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_59.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_6.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_60.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_61.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_62.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_63.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_64.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_65.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_66.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_67.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_68.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_69.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_7.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_70.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_71.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_72.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_73.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_74.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_75.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_76.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_77.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_78.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_79.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_8.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_80.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_81.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_82.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_83.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_84.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_85.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_86.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_87.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_88.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_89.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_9.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_90.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_91.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_92.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_93.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_94.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_95.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_96.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_97.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_98.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_99.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib1.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib2.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/test_lib.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+extern int f(void);
+
+TInt E32Main()
+{
+	return f();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/a.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+
+    ARMV5
+
+PRJ_MMPFILES
+
+    default.mmp
+    unpaged.mmp
+    paged.mmp
+
+    unpagedcode_pageddata.mmp
+    pagedcode_unpageddata.mmp
+    pagedcode_defaultdata.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/default.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          default.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGED
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_defaultdata.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged_code_default_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGEDCODE
+//PAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_unpageddata.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged_code_unpaged_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGEDCODE
+UNPAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpaged.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          unpaged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+UNPAGED
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpagedcode_pageddata.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          unpaged_code_paged_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+UNPAGEDCODE
+PAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+plugin.mmp
+plugin_with_deffile.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+#include <eikenv.h>
+#include <implementationproxy.h>
+
+// User include
+#include "plugin.h"
+
+const TInt KNumDataTypes = 1;
+const TUid KExampleDllUid = {0xE8000002};
+const TInt KImplementationUid = 0x101F7DA1;
+
+// An example mime type
+_LIT8(KExampleTextMimeType, "text/example");
+
+/*
+Constructor - sets the number of supported mime types,
+the recognizer's priority and its UID.
+*/
+CExampleNewRecognizer::CExampleNewRecognizer():CApaDataRecognizerType(KExampleDllUid, CApaDataRecognizerType::EHigh)
+	{
+    iCountDataTypes = KNumDataTypes;
+	}
+
+/*
+Specifies this recognizer's preferred data buffer size passed to DoRecognizeL().
+The actual value used will be the maximum of all recognizers.
+*/
+TUint CExampleNewRecognizer::PreferredBufSize()
+	{
+    return 24;
+	}
+
+
+/*
+Returns the indexed data type that the recognizer can recognize.
+In this case, only 1 is supported.
+*/
+TDataType CExampleNewRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const
+	{
+	return TDataType(KExampleTextMimeType);
+	}
+
+/*
+Attempts to recognize the data type, given the filename and data buffer.
+*/
+void CExampleNewRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
+	{
+	_LIT8(KExampleData, "example");
+	_LIT(KDotExample, ".Example");
+
+	TParse parse;
+	parse.Set(aName,NULL,NULL);
+	TPtrC ext=parse.Ext(); // extract the extension from the filename
+
+	if (ext.CompareF(KDotExample)==0 && aBuffer.FindF(KExampleData)!=KErrNotFound)
+		{
+		iConfidence=ECertain;
+		iDataType=TDataType(KExampleTextMimeType);
+		}
+    }
+
+/*
+The ECom implementation creation function.
+*/
+CApaDataRecognizerType* CExampleNewRecognizer::CreateRecognizerL()
+	{
+	return new (ELeave) CExampleNewRecognizer;
+	}
+
+/*
+Standard ECom framework code
+*/
+const TImplementationProxy ImplementationTable[] =
+    {
+	IMPLEMENTATION_PROXY_ENTRY(KImplementationUid,CExampleNewRecognizer::CreateRecognizerL)
+	};
+
+/*
+Standard ECom framework code
+*/
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+#if !defined(__EXAMPLERECOGNIZER_H__)
+#define __EXAMPLERECOGNIZER_H__
+
+#if !defined(__APMREC_H__)
+#include <apmrec.h>
+#endif
+
+/*
+CExampleNewRecognizer is a concrete data recognizer.
+It implements CApaDataRecognizerType, the abstract base
+class for recognizers.
+*/
+class CExampleNewRecognizer: public CApaDataRecognizerType
+	{
+public:
+    CExampleNewRecognizer();
+    TUint PreferredBufSize();
+	TDataType SupportedDataTypeL(TInt) const;
+    static CApaDataRecognizerType* CreateRecognizerL();
+private:
+    void DoRecognizeL(const TDesC&, const TDesC8&);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+TARGET			plugin.dll
+TARGETTYPE		plugin
+CAPABILITY		Protserv
+UID				0x10009d8d 0xE8000002
+VENDORID		0x70000001
+SOURCEPATH		.
+SOURCE			plugin.cpp
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+LIBRARY			euser.lib apmime.lib efsrv.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin_with_deffile.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin with explicit DEFFILE
+*
+*/
+
+
+
+TARGET			plugin2.dll
+TARGETTYPE		plugin
+CAPABILITY		Protserv
+UID				0x10009d8d 0xE8000002
+VENDORID		0x70000001
+SOURCEPATH		.
+SOURCE			plugin.cpp
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+LIBRARY			euser.lib apmime.lib efsrv.lib
+DEFFILE			~/plugin2.def	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/CommonFramework.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW
+
+PRJ_MMPFILES
+simple_stringtable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test.cpp
+* Test the use of a string pool
+*
+*/
+
+
+#include "CommonFramework.h"
+#include <strconsts.h>
+
+
+// do the example
+LOCAL_C void doExampleL()
+{
+        RStringPool pool;
+	RString helloString;
+	TBuf<100> wideHello;
+
+
+        pool.OpenL(strconsts::Table);
+	helloString = pool.String(strconsts::EHelloWorld,strconsts::Table);
+	wideHello.Copy(helloString.DesC());
+	console->Printf(wideHello);
+        pool.Close();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET        stringtabletest
+TARGETTYPE    exe
+//UID           0x1000008d 0x101F5D46
+
+SOURCE       simple_stringtable.cpp
+
+SOURCEPATH    strings
+
+START STRINGTABLE strconsts.st
+	  EXPORTPATH /epoc32/include
+END
+
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+LIBRARY       bafl.lib
+LIBRARY       estor.lib
+LIBRARY       charconv.lib
+
+VENDORID 0x101FB657
+
+CAPABILITY All -Tcb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/strings/strconsts.st	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+# Test String table
+fstringtable strconsts
+# Strings are case-sensitive
+#
+#
+!// test
+EEmpty
+Exx xx
+Eyy 3.0
+Ezz Thing/3.0
+Eaa Astring
+!// test
+EPlace PLACE
+EHelloWorld Hello World
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_TESTMMPFILES
+../simple_test/simple_test_auto.mmp
+../simple_test/simple_test_manual.mmp manual
+
+PRJ_TESTEXPORTS
+testexportheader.h /epoc32/include/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_auto.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			simple_test_auto
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_manual.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			simple_test_manual
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/testexportheader.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Test Export header, does nothing
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/archive.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+:zip archive.zip	/epoc32/testunzip/ overwrite
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5SMP
+
+PRJ_MMPFILES
+#ifdef SMP
+smp.mmp
+#else
+error_smp_not_defined.mmp
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/smp.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="SMP test";
+
+#ifdef __SMP__
+
+TInt E32Main()
+{
+	return 0;
+}
+
+#else
+
+This will not compile if __SMP__ is undefined
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+NAME HEWO
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+#include "HelloWorld.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	hotkeys=r_example_hotkeys;
+	menubar=r_example_menubar;
+	}
+
+RESOURCE HOTKEYS r_example_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_example_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_example_first_menu; txt="HelloWld"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_example_first_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EExampleItem0; txt="Item 0"; },
+		MENU_ITEM { command=EExampleItem1; txt="Item 1"; },
+		MENU_ITEM { command=EExampleItem2; txt="Item 2"; },
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+
+RESOURCE TBUF r_example_text_Hello { buf="Hello World!"; }
+RESOURCE TBUF r_example_text_Item0 { buf="Item 0"; }
+RESOURCE TBUF r_example_text_Item1 { buf="Item 1"; }
+RESOURCE TBUF r_example_text_Item2 { buf="Item 2"; }
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = "HW";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = "helloworld";
+			number_of_icons = 3; // each icon must be a bitmap/mask pair
+			icon_file = "z:\\resource\\apps\\helloworld.mbm";
+			}
+		};							
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "exported.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/build_gen_source.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "exported.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/Bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __HELLOWORLD_H
+#define __HELLOWORLD_H
+
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikmenup.h>
+
+#include <eikon.hrh>
+
+#include <helloworld.rsg>
+#include "HelloWorld.hrh"
+
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleApplication
+//
+////////////////////////////////////////////////////////////////////////
+
+class CExampleApplication : public CEikApplication
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppView
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppView : public CCoeControl
+    {
+public:
+	static CExampleAppView* NewL(const TRect& aRect);
+	CExampleAppView();
+	~CExampleAppView();
+    void ConstructL(const TRect& aRect);
+
+private:
+	           // Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+	HBufC*  iExampleText;
+    };
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppUi
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CExampleAppUi();
+
+private:
+              // Inherirted from class CEikAppUi
+	void HandleCommandL(TInt aCommand);
+
+private:
+	CCoeControl* iAppView;
+	};
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleDocument
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleDocument : public CEikDocument
+	{
+public:
+	static CExampleDocument* NewL(CEikApplication& aApp);
+	CExampleDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppUi.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppUi.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The second phase constructor of the application UI class.
+//             The application UI creates and owns the one and only view.
+// 
+void CExampleAppUi::ConstructL()
+    {
+	           // BaseConstructL() completes the UI framework's
+	           // construction of the App UI.
+    BaseConstructL();
+	           // Create the single application view in which to
+	           // draw the text "Hello World!", passing into it
+	           // the rectangle available to it.
+	iAppView = CExampleAppView::NewL(ClientRect());
+	}
+
+
+//             The app Ui owns the two views and is. 
+//             therefore, responsible for destroying them
+//
+CExampleAppUi::~CExampleAppUi()
+	{
+	delete iAppView;
+	}
+
+
+//             Called by the UI framework when a command has been issued.
+//             In this example, a command can originate through a 
+//             hot-key press or by selection of a menu item.
+//             The command Ids are defined in the .hrh file
+//             and are 'connected' to the hot-key and menu item in the
+//             resource file.
+//             Note that the EEikCmdExit is defined by the UI
+//             framework and is pulled in by including eikon.hrh
+//
+void CExampleAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		      // Just issue simple info messages to show that
+		      // the menu items have been selected
+	case EExampleItem0:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM0);
+		break;
+
+	
+	case EExampleItem1:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM1);
+		break;
+	
+	case EExampleItem2:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM2);
+		break;
+               // Exit the application. The call is
+		       // implemented by the UI framework.
+
+	case EEikCmdExit: 
+		Exit();
+		break;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppView.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppView.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//
+//             Constructor for the view.
+//
+CExampleAppView::CExampleAppView()
+	{
+	}
+
+
+//             Static NewL() function to start the standard two
+//             phase construction.
+//
+CExampleAppView* CExampleAppView::NewL(const TRect& aRect)
+	{
+	CExampleAppView* self = new(ELeave) CExampleAppView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//             Destructor for the view.
+//
+CExampleAppView::~CExampleAppView()
+	{
+	delete iExampleText;
+	}
+
+
+//             Second phase construction.
+//
+void CExampleAppView::ConstructL(const TRect& aRect)
+    {
+			   // Fetch the text from the resource file.
+	iExampleText = iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);
+	           // Control is a window owning control
+	CreateWindowL();
+	           // Extent of the control. This is
+	           // the whole rectangle available to application.
+	           // The rectangle is passed to us from the application UI.
+	SetRect(aRect);
+			   // At this stage, the control is ready to draw so
+	           // we tell the UI framework by activating it.
+	ActivateL();
+	}
+
+
+//             Drawing the view - in this example, 
+//             consists of drawing a simple outline rectangle
+//             and then drawing the text in the middle.
+//             We use the Normal font supplied by the UI.
+//
+//             In this example, we don't use the redraw
+//             region because it's easier to redraw to
+//             the whole client area.
+//
+void CExampleAppView::Draw(const TRect& /*aRect*/) const
+	{
+               // Window graphics context
+	CWindowGc& gc = SystemGc();
+	           // Area in which we shall draw
+	TRect      drawRect = Rect();
+			   // Font used for drawing text
+	const CFont*     fontUsed;
+	
+	           // Start with a clear screen
+	gc.Clear();
+			   // Draw an outline rectangle (the default pen
+	           // and brush styles ensure this) slightly
+	           // smaller than the drawing area.
+	drawRect.Shrink(10,10);		   	
+	gc.DrawRect(drawRect);
+               // Use the title font supplied by the UI
+	fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+			   // Draw the text in the middle of the rectangle.
+	TInt   baselineOffset=(drawRect.Height() - fontUsed->HeightInPixels())/2; 
+	gc.DrawText(*iExampleText,drawRect,baselineOffset,CGraphicsContext::ECenter, 0);
+               // Finished using the font
+	gc.DiscardFont();
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Application.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleApplication.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+const TUid KUidHelloWorld = { 0xE800005A };
+
+//             The function is called by the UI framework to ask for the
+//             application's UID. The returned value is defined by the
+//             constant KUidHelloWorlde and must match the second value
+//             defined in the project definition file.
+//
+TUid CExampleApplication::AppDllUid() const
+	{
+	return KUidHelloWorld;
+	}
+
+//             This function is called by the UI framework at
+//             application start-up. It creates an instance of the
+//             document class.
+//
+CApaDocument* CExampleApplication::CreateDocumentL()
+	{
+	return new (ELeave) CExampleDocument(*this);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Document.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleDocument.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The constructor of the document class just passes the
+//             supplied reference to the constructor initialisation list.
+//             The document has no real work to do in this application.
+//
+CExampleDocument::CExampleDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+
+//             This is called by the UI framework as soon as the 
+//             document has been created. It creates an instance
+//             of the ApplicationUI. The Application UI class is
+//             an instance of a CEikAppUi derived class.
+//
+CEikAppUi* CExampleDocument::CreateAppUiL()
+	{
+    return new(ELeave) CExampleAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Main.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include "HelloWorld.h"
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CExampleApplication.
+//
+
+#if defined(EKA2)
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+	
+#endif
+
+#if defined(__WINS__) && !defined(EKA2)
+//             This function is required by all Symbian OS DLLs. In this 
+//             example, it does nothing.
+
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+
+GLDEF_C TInt E32Dll(TDllReason)
+	{
+	return KErrNone;
+	}
+	
+EXPORT_C TInt WinsMain(TDesC* aCmdLine)
+	{
+	return EikStart::RunApplication(NewApplication, aCmdLine);
+	}
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_reg.rss	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <appinfo.rh>
+#include <helloworld.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE800005A // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "HelloWorld";
+	localisable_resource_file = "\\resource\\apps\\HelloWorld";
+	localisable_resource_id = R_LAI;	
+	}
+	
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+dependent_on_exports.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/dependent_on_exports.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "metadata_export_pre1.mmh"
+#include "metadata_export_pre2.mmh"
+
+SOURCE					test.cpp
+SYSTEMINCLUDE			/epoc32/include
+LIBRARY					euser.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+
+TInt E32Main()
+	{
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+exported.inf |../build_gen_source/exported.inf
+exported.mmh |../build_gen_source/exported.mmh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+build_gen_source.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET helloworld
+TARGETTYPE none
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+metadata_export_pre1.mmh |../dependent_on_exports/metadata_export_pre1.mmh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/metadata_export_pre1.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET					dependent_on_exports.exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+metadata_export_pre2.mmh |../dependent_on_exports/metadata_export_pre2.mmh
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/metadata_export_pre2.mmh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE				exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_dud.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+
+<I have invalid contents, and nothing good will *ever* come of me!/>
+
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="First Exporting Component">
+			<component name="first_exporting">
+				<unit bldFile="metadata_export_pre1" mrp="test/sysdef/metadata_export_pre1/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Component Dependent On Exports">
+			<component name="dependent_on_exports">
+				<unit bldFile="dependent_on_exports" mrp="test/sysdef/dependent_on_exports/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Second Exporting Component">
+			<component name="second_exporting">
+				<unit bldFile="metadata_export_pre2" mrp="test/sysdef/metadata_export_pre2/test.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="Component with Layer Dependencies">
+			<component name="dependent">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/dependent" root="SBS_HOME" mrp="test/sysdef/dependent/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Build Generated Source">
+			<component name="build generated source">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/build_gen_source" root="SBS_HOME" mrp="test/sysdef/build_gen_source/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Metadata Export">
+			<component name="metadata export">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/metadata_export" root="SBS_HOME" mrp="test/sysdef/metadata_export/test.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/talon_test/README.FIRST.txt	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+README.FIRST.txt
+
+The file "script" in the same directory as this file contains a "talon script", i.e. a string that can be
+passed to talon's -c option, as well as some intentional blank lines.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/talon_test/script	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+|name=scriptfiletest;COMPONENT_META=scriptfile/group/bld.inf;PROJECT_META=scriptfile.mmp;|echo Script file output
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/README	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+A very simple TEM test
+
+This is more aimed at the TEM mechanism rather than TEMs themselves.
+
+There are several bld infs:
+bld.inf      - is expected to build without errors
+bad_bld.inf  - is expected to generate duplicate TEM calls
+bad2_bld.inf - is expected to ensure that options are passing through to TEM unchanged
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bad2_bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 2$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 2aonetwothree
+OPTION NAME 2/otherstuff/
+OPTION PREFIX 2yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 2$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 2aonetwothree
+OPTION NAME 2/otherstuff/
+OPTION PREFIX 2yetanother
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bad_bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 1$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 1aonetwothree
+OPTION NAME 1/otherstuff/
+OPTION PREFIX 1yetanother
+end
+
+// A repetition - should cause the tem.mk to complain
+// Not easy to test automatically though. needs
+// cleanup and teardown TEMS to work (i.e. not done yet)
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME otherstuff
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 1aonetwothree
+OPTION NAME 1otherstuff
+OPTION PREFIX 1yetanother
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bldclean.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+// Cleanup to enable duplicate detection
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/cleantems
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/cleantems.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,83 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# Clean up any output files from temex.mk
+# prior to it being executed.
+# no other way to do this!
+
+
+#find works properly on Samba in case insensitive mode 
+# with -iname whereas shell globbing doesn't  
+# i.e. rm TARGETNAME* doesn't work but this does
+
+#find  $(EPOCROOT)/epoc32/build/ -iname 'TEMTEST_*.out' -exec rm \{\} \; ; true
+define clean
+rm $(EPOCROOT)/epoc32/build/TEMTEST_*  $(EPOCROOT)/epoc32/build/temtest_* $(EPOCROOT)/epoc32/raptor_smoketest_tem_failed $(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded ; true
+endef
+
+DO_NOTHING: 
+	@echo "DO_NOTHING"
+
+
+MAKMAKE:
+	@echo "MAKMAKE"
+	$(clean)
+
+BLD:
+	@echo "BLD"
+	$(clean)
+
+
+SAVESPACE:
+	@echo "SAVESPACE"
+	$(clean)
+
+
+FREEZE:
+	@echo "FREEZE"
+	$(clean)
+
+
+LIB:
+	@echo "LIB"
+	$(clean)
+
+
+CLEANLIB :
+	@echo "CLEANLIB"
+	$(clean)
+
+
+RESOURCE :
+	@echo "RESOURCE"
+	$(clean)
+
+
+CLEAN :
+	@echo "CLEAN"
+	$(clean)
+
+
+RELEASABLES :
+	@echo "RELEASABLES"
+	$(clean)
+
+
+FINAL :
+	@echo "FINAL"
+	$(clean)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/temex.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,138 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# A test-template extension makefile
+# supposed to demonstrate that different calls
+# to the same template extension makefile will
+# get different variable values.
+# i.e. it's supposed to show target specific variables 
+# working properly for template extension makefiles.
+
+# The test is by manual comparison at the moment.
+
+
+
+define print
+echo ""
+echo ""
+@echo ""
+@echo "EPOCROOT=$(EPOCROOT)"
+@echo "PLATFORM=$(PLATFORM)"
+@echo "CFG=$(CFG)"
+@echo "TO_ROOT=$(TO_ROOT)"
+@echo "TO_BLDINF=$(TO_BLDINF)"
+@echo "EPOCBLD=$(EPOCBLD)"
+@echo "EXTENSION_ROOT=$(EXTENSION_ROOT)"
+@echo "HOST_SHELL=$(HOST_SHELL)"
+@echo "/=$(/)"
+@echo ";=$(;)"
+@echo "RMDIR=$(RMDIR)"
+@echo "RM=$(RM)"
+@echo "ERASE=$(ERASE)"
+@echo "MKDIR=$(MKDIR)"
+@echo "CP=$(CP)"
+@echo "PLATFORM_PATH=$(PLATFORM_PATH)"
+@echo "CFG_PATH=$(CFG_PATH)"
+@echo "TARGET=$(TARGET)"
+@echo "SOURCE=$(SOURCE)"
+@echo "TEMTARGET=$(TEMTARGET)"
+@echo "TEMPLATE_EXTENSION_MAKEFILE=$(TEMPLATE_EXTENSION_MAKEFILE)"
+@echo ""
+@echo "Options:"
+@echo "PREFIX=$(PREFIX)"
+@echo "MEMMODEL=$(MEMMODEL)"
+@echo "NAME=$(NAME)"
+@echo ""
+@echo "TEMCALLVALUE=$(TEMCALLVALUE)"
+@echo "TEMCALL_TESTUNIQ_FILENAME=$(TEMCALL_TESTUNIQ_FILENAME)"
+endef
+
+# Test for duplicate calls (bad_bld.inf)
+BLANK:=
+SPACE:=$(BLANK) $(BLANK)
+COLON:=:
+TESTUNIQ:=TEMTEST_$(MEMMODEL)$(NAME)$(TARGET)$(CFG)$(PLATFORM)$(TEMTARGET)
+TESTUNIQ:=$(subst /,_,$(TESTUNIQ))
+TESTUNIQ:=$(subst $(SPACE),_,$(TESTUNIQ))
+TESTUNIQ:=$(subst $(COLON),_,$(TESTUNIQ))
+TEMCALL_TESTUNIQ_FILENAME:=$(EPOCROOT)/epoc32/build/$(TESTUNIQ).out
+
+$(info TEMCALL_TESTUNIQ_FILENAME=$(TEMCALL_TESTUNIQ_FILENAME))
+$(info TEMTARGET=$(TEMTARGET))
+TEMCALLVALUE:=$(shell if [ ! -e "$(TEMCALL_TESTUNIQ_FILENAME)" ]; then echo "$(TEMCALL_TESTUNIQ_FILENAME)" > "$(TEMCALL_TESTUNIQ_FILENAME)"; echo "1";else echo "0"; fi)
+
+ifneq ($(TEMCALLVALUE),1)
+$(shell touch $(EPOCROOT)/epoc32/raptor_smoketest_tem_failed)
+$(error repeated call to TEM with same values, tested with file $(TEMCALL_TESTUNIQ_FILENAME), resulting in '$(TEMCALLVALUE)' at $(shell date; cat $(TEMCALL_TESTUNIQ_FILENAME)))
+else
+$(shell touch $(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded)
+endif
+
+PARS:=$(PREFIX)$(MEMMODEL)$(NAME)
+ifneq ($(PARS),yetanotheraonetwothreeotherstuff)
+ifneq ($(PARS),1yetanother1aonetwothree1otherstuff)
+$(error Unexpected TEM call parameters for this test: $(PARS))
+endif
+endif
+
+
+
+
+DO_NOTHING : 
+	@echo "DO_NOTHING"
+	$(print)
+
+
+MAKMAKE :
+	@echo "MAKMAKE"
+	$(print)
+
+BLD :
+	@echo "BLD"
+	$(print)
+
+SAVESPACE :
+	@echo "SAVESPACE"
+	$(print)
+
+FREEZE :
+	@echo "FREEZE"
+	$(print)
+
+LIB :
+	@echo "LIB"
+	$(print)
+
+CLEANLIB :
+	@echo "CLEANLIB"
+	$(print)
+
+RESOURCE :
+	@echo "RESOURCE"
+	$(print)
+
+CLEAN :
+	@echo "CLEAN"
+	$(print)
+
+RELEASABLES :
+	@echo "RELEASABLES"
+	$(print)
+
+FINAL :
+	@echo "FINAL"
+	$(print)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+tem_conflicts.meta /epoc32/tools/makefile_templates/test/
+tem_conflicts.mk /epoc32/tools/makefile_templates/test/
+tem_conflicts.sh /epoc32/tools/makefile_templates/test/
+
+PRJ_EXTENSIONS
+start extension test/tem_conflicts
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.meta	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+#
+# Description:
+# Meta information for the GNU makesis extension template
+#
+
+platform	win32
+makefile 	gnumake
+techstream	tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+do_nothing:
+
+MAKMAKE : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+	
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+
+FINAL: 
+	bash $(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.sh
+
+BLD : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES: do_nothing
+
+CLEAN: do_nothing
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,10 @@
+i=0
+while [ $i -lt 50 ]
+do
+    echo abcdefghijklmnopqrstuvwxyz > $EPOCROOT/A
+    cp $EPOCROOT/A $EPOCROOT/B
+    rm $EPOCROOT/A
+    rm $EPOCROOT/B
+    i=$[i + 1]
+done
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// test the ordering of MMP and TEM stages
+
+PRJ_EXPORTS
+tem.mk		/epoc32/tools/makefile_templates/test/tem_stages.mk
+tem.meta	/epoc32/tools/makefile_templates/test/tem_stages.meta
+
+PRJ_MMPFILES
+test_exe.mmp
+test_lib.mmp
+
+PRJ_EXTENSIONS
+START EXTENSION test/tem_stages
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.meta	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,86 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# check that the 5 stages happen in the right order relative to each other
+# and relative to the MMP LIBRARY (LIB) and TARGET (BLD) stages.
+
+
+VARIANT:=$(PLATFORM_PATH)_$(CFG_PATH)
+
+GENERATED_C:=$(EPOCROOT)/epoc32/build/generated/tem_stages_generated.cpp
+GENERATED_H:=$(EPOCROOT)/epoc32/include/tem_stages_generated.h
+GENERATED_R:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).rsg
+GENERATED_L:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).lib
+GENERATED_B:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).bin
+GENERATED_F:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).final
+
+GENERATED:=$(GENERATED_C) $(GENERATED_H) $(GENERATED_R) $(GENERATED_L) $(GENERATED_B) $(GENERATED_F)
+
+BUILT_LIB:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.lib
+BUILT_EXE:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.exe
+COPY_LIB:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.lib2
+COPY_EXE:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.exe2
+
+COPIED:=$(COPY_LIB) $(COPY_EXE)
+
+DIRS:=$(dir $(GENERATED_H)) $(dir $(GENERATED_C))
+$(DIRS):
+	mkdir -p $@
+
+# a header that is used by the EXE and LIB
+# and a source file used by the EXE and LIB
+#
+MAKMAKE: | $(DIRS)
+	echo "// dummy" > $(GENERATED_H)
+	echo "// dummy" > $(GENERATED_C)
+
+
+# check that our MAKMAKE happens before RESOURCE
+#
+RESOURCE: | $(DIRS)
+	$(CP) $(GENERATED_H) $(GENERATED_R)
+
+
+# check that our RESOURCE happens before LIB
+#
+LIB: | $(DIRS)
+	$(CP) $(GENERATED_R) $(GENERATED_L)
+
+
+# check that our LIB happens before BLD
+# check that MMP LIB happens before BLD
+#
+BLD: | $(DIRS)
+	$(CP) $(GENERATED_L) $(GENERATED_B)
+	$(CP) $(BUILT_LIB) $(COPY_LIB)
+
+
+# check that our BLD happens before FINAL
+# check that MMP BLD happens before FINAL
+#
+FINAL: | $(DIRS)
+	$(CP) $(GENERATED_B) $(GENERATED_F)
+	$(CP) $(BUILT_EXE) $(COPY_EXE)
+
+RELEASABLES:
+	@echo $(BUILT_EXE) $(COPY_EXE) $(BUILT_LIB) $(COPY_LIB)
+
+
+CLEAN:
+	$(RM) $(GENERATED) $(COPIED)
+
+CLEANLIB: ;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+#include "tem_stages_generated.h"
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tem_stages
+TARGETTYPE		EXE
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test_exe.cpp
+SOURCEPATH		/epoc32/build/generated
+SOURCE			tem_stages_generated.cpp
+EPOCCALLDLLENTRYPOINTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+#include "tem_stages_generated.h"
+
+char test[]="Simple test";
+
+int f(void)
+{
+	return 999;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tem_stages.lib
+TARGETTYPE		LIB
+UID				0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test_lib.cpp
+SOURCEPATH		/epoc32/build/generated
+SOURCE			tem_stages_generated.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// component with a recipe that deliberately times out
+
+PRJ_EXPORTS
+sleeper.flm	/epoc32/tools/makefile_templates/test/sleeper.flm
+sleeper.xml	/epoc32/tools/makefile_templates/test/sleeper.xml
+
+PRJ_EXTENSIONS
+START EXTENSION test.sleeper
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.flm	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# sleeper.flm - cause a timeout 
+
+# change the timeout to 2 seconds
+TALON_TIMEOUT:=2000
+
+ALL:: dosomethinglong
+
+# this recipe takes longer than 2 seconds to run
+$(call raptor_recipe,sleeper,dosomethinglong,,sleep 4)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- for the timeout.py test -->
+
+	<interface name="test.sleeper" flm="sleeper.flm"/>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <var name="toolcheck"> 
+  <env name="TOOLCHECK1" default="toolcheck1$(DOTEXE)" type="tool" versionCommand="$(TOOLCHECK1)" versionResult="Version 12\.[0-9]{2}\.[0-9]{4}" /> 
+  <env name="TOOLCHECK2" default="toolcheck2$(DOTEXE)" type="tool" versionCommand="$(TOOLCHECK2)" versionResult="toolcheck2$(DOTEXE): command not found" />
+  <env name="TOOLCHECK3" default='mwccsym2$(DOTEXE)' type='tool' versionCommand='$(TOOLCHECK3) -version' versionResult='something you would never see'/>
+  <env name='TOOLCHECK4' default='$(SBS_GNUCPP)' type='tool' versionCommand='$(GNUCPP) --version' versionResult='something you would never see'/>
+  <env name='TOOLCHECK5' default='$(SBS_PYTHON)' type='tool' versionCommand='$(PYTHON) -V' versionResult='something you would never see'/>
+  <env name='TOOLCHECK6' default='$(SBS_HOME)/test/smoke_suite/test_resources/toolcheck/toolcheck6.py' type='tool' versionCommand='$(PYTHON) $(TOOLCHECK6)' versionResult='something toolcheck6 would print out to match tool check result'/>
+ </var>  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck6.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+print "something toolcheck6 would print out to match tool check result"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+TOOLS
+
+PRJ_MMPFILES
+tool_lib1.mmp
+tool_lib2.mmp
+tool_exe.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_exe.exe
+TARGETTYPE		EXE
+SOURCEPATH		../tools2
+SOURCE			tool_exe_a.cpp
+SOURCE			tool_exe_b.cpp
+USERINCLUDE		../tools2/inc1
+USERINCLUDE		../tools2/inc2
+SYSTEMINCLUDE		../tools2/sys1
+SYSTEMINCLUDE		../tools2/sys2
+STATICLIBRARY		tool_lib1.lib
+STATICLIBRARY		tool_lib2.lib
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib1.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_lib1.lib
+TARGETTYPE		LIB
+SOURCEPATH		../tools2
+SOURCE			tool_lib1_a.cpp
+SOURCE			tool_lib1_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_lib2.lib
+TARGETTYPE		LIB
+SOURCEPATH		../tools2
+SOURCE			tool_lib2_a.cpp
+SOURCE			tool_lib2_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_MMPFILES
+tool_lib1.mmp
+tool_lib2.mmp
+tool_exe.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/build_spec.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test tool build specification -->
+
+    <spec name="tool">
+	    <var>
+	        <set name="T2" value="$(SBS_HOME)/test/tools2"/>
+	        <set name="USERINCLUDE" value="$(T2)/inc1 $(T2)/inc2"/>
+	        <set name="SYSTEMINCLUDE" value="$(T2)/sys1 $(T2)/sys2"/>
+		</var>
+
+		<spec name="tool_executable">
+            <interfaceRef ref="Tools.EXE"/>
+	        <var>
+	            <set name="TARGET" value="tool_exe"/>
+	            <set name="TARGETTYPE" value="EXE"/>
+	            <append name="SOURCE" value="$(T2)/tool_exe_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_exe_b.cpp"/>
+	            <append name="STATICLIBRARY" value="tool_lib1"/>
+	            <append name="STATICLIBRARY" value="tool_lib2"/>
+			</var>
+		</spec>
+
+		<spec name="tool_library_1">
+            <interfaceRef ref="Tools.LIB"/>
+	        <var>
+	            <set name="TARGET" value="libtool_lib1"/>
+	            <set name="TARGETTYPE" value="LIB"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib1_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib1_b.cpp"/>
+			</var>
+		</spec>
+
+		<spec name="tool_library_2">
+            <interfaceRef ref="Tools.LIB"/>
+	        <var>
+	            <set name="TARGET" value="libtool_lib2"/>
+	            <set name="TARGETTYPE" value="LIB"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib2_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib2_b.cpp"/>
+			</var>
+		</spec>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/header_abc.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in the same directory as the source files
+
+const int A = 1;
+const int B = 2;
+const int C = 3;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc1/header_def.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int D = 4;
+const int E = 5;
+const int F = 6;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc2/header_ghi.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int G = 7;
+const int H = 8;
+const int I = 9;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys1/header_jkl.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int J = 10;
+const int K = 11;
+const int L = 12;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys2/header_mno.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int M = 13;
+const int N = 14;
+const int O = 15;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_exe.exe
+TARGETTYPE		EXE
+SOURCE			tool_exe_a.cpp
+SOURCE			tool_exe_b.cpp
+USERINCLUDE		./inc1
+USERINCLUDE		./inc2
+SYSTEMINCLUDE	./sys1
+SYSTEMINCLUDE	./sys2
+STATICLIBRARY	tool_lib1
+STATICLIBRARY	tool_lib2
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_a.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// the product HRH file
+#ifdef __PRODUCT_INCLUDE__
+#include __PRODUCT_INCLUDE__
+#endif
+
+// in the current directory
+#include "header_abc.h"
+
+// USERINCLUDES
+#include "header_def.h"
+#include "header_ghi.h"
+
+// SYSTEMINCLUDES
+#include <header_jkl.h>
+#include <header_mno.h>
+
+int tool_exe_b(int);
+int tool_lib1_a(int);
+int tool_lib1_b(int);
+int tool_lib2_a(int);
+int tool_lib2_b(int);
+
+
+#include "../inc/macrotests.h"
+
+int main(int argc, char *argv[])
+{
+    // use all the functions
+
+	int a = tool_lib1_a(argc) + tool_lib2_a(argc);
+	int b = tool_lib1_b(argc) + tool_lib2_b(argc);
+
+	// defined in the headers
+	int caps = A + B + C + D + E + F + G + H + I + J + K + L + M + N + O;
+
+	return tool_exe_b(a + b + caps);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_b.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_exe_b(int input)
+{
+	return input * input;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			libtool_lib1.a
+TARGETTYPE		LIB
+SOURCE			tool_lib1_a.cpp
+SOURCE			tool_lib1_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_a.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "../inc/macrotests.h"
+
+int tool_lib1_a(int input)
+{
+	return input + 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_b.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib1_b(int input)
+{
+	return input + 2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			libtool_lib2.a
+TARGETTYPE		LIB
+SOURCE			tool_lib2_a.cpp
+SOURCE			tool_lib2_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_a.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib2_a(int input)
+{
+	return input - 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_b.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib2_b(int input)
+{
+	return input - 2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun1.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler runs as the userinclude path matches
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE		../traces_autorun1
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler does not run as userinclude path does not match
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE		./tracesnotmatch
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun3.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler does NOT run as there is neither UID2 nor UID3
+ 
+TARGET			test
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+userinclude		../traces
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+autorun1.mmp
+autorun2.mmp
+autorun3.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/HelloWorld.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+============================================================================
+ Name		: HelloWorld.mmp
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : This is the project specification file for HelloWorld.
+============================================================================
+*/
+
+TARGET		HelloWorld.exe
+TARGETTYPE	exe
+UID		0 0xE78A5AA3
+
+USERINCLUDE	..\inc  
+USERINCLUDE	..\traces
+SYSTEMINCLUDE	\epoc32\include
+SYSTEMINCLUDE	\epoc32\include\internal
+
+SOURCEPATH	..\src
+SOURCE		HelloWorld.cpp
+
+LIBRARY		euser.lib
+
+featurevariant
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+/*
+============================================================================
+ Name		: bld.inf
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : This file provides the information required for building the
+				whole of a HelloWorld.
+============================================================================
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/inc/HelloWorld.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+ ============================================================================
+ Name		: HelloWorld.h
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : Exe header file
+ ============================================================================
+ */
+
+#ifndef __HELLOWORLD_H__
+#define __HELLOWORLD_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOWORLD_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/src/HelloWorld.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,86 @@
+/*
+ ============================================================================
+ Name		: HelloWorld.cpp
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : Exe source file
+ ============================================================================
+ */
+
+//  Include Files  
+
+#include "HelloWorld.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloWorldTraces.h"
+#endif
+			// Console
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    //
+    // add your program code here, example code below
+    //
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+    OstTrace0( TRACE_NORMAL, _DOSTARTL, "Hello World" );
+    
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    
+    
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/HelloWorldTraces.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+// Created by TraceCompiler 1.3.0
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __HELLOWORLDTRACES_H__
+#define __HELLOWORLDTRACES_H__
+
+#define KOstTraceComponentID 0xe78a5aa3
+
+#define _DOSTARTL 0x30001
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/fixed_id.definitions	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_NORMAL=0x3
+[TRACE]TRACE_NORMAL[0x3]__DOSTARTL=0x1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+tc_variants.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/tc_variants.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+
+TARGET			tc_variants
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000004
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+
+SOURCEPATH		../src
+SOURCE			tc_main.cpp
+#if defined(MACRO_TC_A)
+SOURCE			tc_a.cpp
+#endif
+#if defined(MACRO_TC_B)
+SOURCE			tc_b.cpp
+#endif
+#if defined(MACRO_TC_C)
+SOURCE			tc_c.cpp
+#endif
+
+USERINCLUDE		../traces
+
+featurevariant
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_A
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_B
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_C
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_a.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_aTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_a()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "source tc_a" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_b.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_bTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_b()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "source tc_b" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_c.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_cTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_c()
+{
+	OstTrace0( TRACE_NORMAL, PLACE4, "source tc_c" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_main.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_mainTraces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "source tc_main";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "source tc_main" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/variants.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<var name="feature_variant_base">
+		<set name='USE_TRACE_COMPILER' value='1' />       
+		<set name='FEATURELISTFILES' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/list.txt'/>
+		<env name='JAVA_HOME' default='C:/APPS/jdk_1.6.0_11' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+
+	<var name="phone1" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone1'/>
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh'/> 
+	</var>
+
+	<var name="phone2" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone2'/> 
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh'/> 
+	</var>
+
+	<var name="phone3" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone3'/> 
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh'/> 
+	</var>
+
+</build>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5
+ 
+PRJ_MMPFILES
+mum.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child1.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+
+TARGET			child1
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100001
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+
+SOURCEPATH		../src
+SOURCE			child1.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces_child1_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child2.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+
+TARGET			child2
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+
+SOURCEPATH		../src
+SOURCE			child2.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces_child2_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child3.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+TARGET			child3
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+
+SOURCEPATH		../src
+SOURCE			child3.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces_child3_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/mum.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,20 @@
+
+#include <var.hrh>
+  
+targettype		None
+
+#ifdef CHILD1
+  #include "child1.mmp"
+  #warning "Child 1 selected"
+#endif
+#ifdef CHILD2
+  #include "child2.mmp"
+  #warning "Child 2 selected"
+#endif
+#ifdef CHILD3
+  #include "child3.mmp"
+  #warning "Child 3 selected"
+#endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child1.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child1Traces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "Child 1";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "Child 1" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child2.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child2Traces.h"
+#endif
+
+#include "e32def.h"
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "Child 2" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child3.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child3Traces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "Child 3" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/common.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "commonTraces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt common()
+{
+	OstTrace0( TRACE_NORMAL, PLACE0, "Common file shared by all mmp files" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/use_tc.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+	<!-- test trace compiler -->
+	<var name="tc_var_base">
+		<set name='USE_TRACE_COMPILER' value='1' />
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+	<var name="tc_var1" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1' />
+	</var>
+	<var name="tc_var2" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2' />
+	</var>
+	<var name="tc_var3" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3' />
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1/var.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+#define CHILD1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2/var.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+#define CHILD2
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3/var.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+#define CHILD3
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/eabi/testTCu.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+EXPORTS
+	_ZN11CWlanHwInit13GetHwInitDataEPPKhRjS2_S3_ @ 1 NONAME
+	_ZN11CWlanHwInit13GetHwTestDataEjR5TDes8 @ 2 NONAME
+	_ZN11CWlanHwInit13GetMacAddressER8TMacAddr @ 3 NONAME
+	_ZN11CWlanHwInit13SetHwTestDataEjR6TDesC8 @ 4 NONAME
+	_ZN11CWlanHwInit17GetHwTestInitDataEPPKhRjS2_S3_ @ 5 NONAME
+	_ZN11CWlanHwInit4NewLEv @ 6 NONAME
+	_ZN11CWlanHwInitD0Ev @ 7 NONAME
+	_ZN11CWlanHwInitD1Ev @ 8 NONAME
+	_ZN11CWlanHwInitD2Ev @ 9 NONAME
+	_ZThn4_N11CWlanHwInit13GetHwInitDataEPPKhRjS2_S3_ @ 10 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13GetHwTestDataEjR5TDes8 @ 11 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13GetMacAddressER8TMacAddr @ 12 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13SetHwTestDataEjR6TDesC8 @ 13 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit17GetHwTestInitDataEPPKhRjS2_S3_ @ 14 NONAME ; #<thunk>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+/*
+*  You need tracecompiler to run this test.
+*
+*  If you run this test from Raptor test frame you need to zip your tracecompiler
+*  and put it under "$(SBS_HOME)/test/manual_tests/test_resources/" first, then Raptor will unzip it later. 
+*  This is because Raptor test frame removes tracecompiler from epoc32/tools/ at the very beginning, 
+*  so you have to export to put it "back there" again.
+*
+*  If you run this test NOT from Raptor test frame you do not need to do the above.
+*  Please just remove PRJ_EXPORTS and its contents below.    
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+testTC.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/testTC.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET          testTC.dll
+TARGETTYPE      dll
+UID             0x1000008d
+
+CAPABILITY      all
+
+DEFFILE         ../eabi/
+
+SOURCEPATH      ../src 
+SOURCE          wlanhwinit.cpp
+SOURCE          wlanhwinitmain.cpp
+SOURCE          wlanhwinitpermparser.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../traces
+OS_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   /epoc32/include/libc
+SYSTEMINCLUDE   /epoc32/include/internal
+
+LIBRARY         euser.lib
+LIBRARY		iscapi.lib
+LIBRARY         isimessage.lib
+LIBRARY		efsrv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/bcmnvmem.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,135 @@
+/*
+ * Broadcom implementation of Nokia WLAN Hardware Abstraction layer
+ *
+ * Copyright (C) 2008, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * $Id: bcmnvmem.h,v 1.2.2.4.4.1 2008/09/08 22:53:16 Exp $
+ */
+
+#ifndef BCMNVMEM_H
+#define BCMNVMEM_H
+
+#include <wlanwhanamespace.h>
+
+// Values larger than 8 bits are stored in little-endian format
+// Total size: 320 bytes
+
+NAMESPACE_BEGIN_WHA
+
+#define BCM_NVMEM_MAGIC1                (TUint8)'N'     // 78
+#define BCM_NVMEM_MAGIC2                (TUint8)'V'     // 86
+#define BCM_NVMEM_MAGIC3                (TUint8)'M'     // 77
+#define BCM_NVMEM_VERSION               3
+
+#define BCM_NVMEM_FLAG_VERIFY           0x00000001
+
+#ifndef BCM_NVMEM_PACKED
+#define BCM_NVMEM_PACKED                // For packed-ness testing only
+#endif
+
+struct SNvMem {
+    TUint8      magic1;
+    TUint8      magic2;
+    TUint8      magic3;
+    TUint8      version;
+
+    // Broadcom WHA section
+    TUint32     whaflags;
+    TUint8      whaspiclklo;
+    TUint8      whaspiclkhi;
+    TUint8      whamac[6];
+
+    // Broadcom device section
+    TUint16     xtalfreq;
+    TUint16     manfid;
+    TUint16     prodid;
+    TUint16     sromrev;
+    TUint16     vendid;
+    TUint16     devid;
+    TUint16     boardtype;
+    TUint16     boardrev;
+    TUint32     boardflags;
+    TUint32     boardflags2;
+    TUint16     opo;
+    TUint16     pa0b0;
+    TUint16     pa0b1;
+    TUint16     pa0b2;
+    TUint16     pa0b3;
+    TUint16     pa0b4;
+    TUint16     pa0b5;
+    TUint16     pa0b6;
+    TUint16     pa0b7;
+    TUint16     pa0b8;
+    TUint8      rssismf2g;
+    TUint8      rssismc2g;
+    TUint8      rssisav2g;
+    TUint8      rssismf2g_low0;
+    TUint8      rssismc2g_low1;
+    TUint8      rssisav2g_low2;
+    TUint8      rssismf2g_hi1;
+    TUint8      rssismc2g_hi2;
+    TUint8      rssisav2g_hi3;
+    TUint8      pa0itssit;
+    TUint8      tri2g;
+    TUint8      rxpo2g;
+    TUint16     pa0maxpwr;
+    TUint16     aa2g;
+    TUint16     ag0;
+    TUint16     cctl;
+    TUint32     boardnum;
+    TUint8      bxa2g;
+    TUint8      _pad2[43];
+
+    // Bob WLAN NW Memory device section (based on Draft 0.3)
+    TUint8      PL_2G_hdb;              /* Table 1 */
+    TUint8      PL_5G_hdb;
+    TUint16     rfq_2G;
+    TUint16     rfq_4G;
+    TUint16     rfq_5G_l;
+    TUint16     rfq_5G_m;
+    TUint16     rfq_5G_h;
+    TUint16     pd_2G;
+    TUint16     pd_4G;
+    TUint16     pd_5G_l;
+    TUint16     pd_5G_m;
+    TUint16     pd_5G_h;
+    TUint8      txg_2G;
+    TUint8      txg_4G;
+    TUint8      txg_5G_l;
+    TUint8      txg_5G_m;
+    TUint8      txg_5G_h;
+    TUint8      P2G_PL1_hdb[9];         /* Table 2a (bumped to 9 entries for 11n) */
+    TUint8      P2G_PL2_hdb[9];
+    TUint8      P2G_PL3_hdb[9];
+    TUint8      P2G_PL4_hdb[9];
+    TUint8      P5G_PL1_hdb[8];         /* Table 2b */
+    TUint8      P5G_PL2_hdb[8];
+    TUint8      P5G_PL3_hdb[8];
+    TUint8      P5G_PL4_hdb[8];
+    TUint8      cga_cck_2G[14];         /* Table 4 */
+    TUint8      cga_ofdm_2G[13];
+    TUint8      cga_j_4G[4];
+    TUint8      cga_j_5G[3];
+    TUint8      cga_5G_l[8];
+    TUint8      cga_5G_m[4];
+    TUint8      cga_5G_u1[11];
+    TUint8      cga_5G_u11[4];
+    TUint8      pab_2G[6];              /* Table 5 */
+    TUint8      pab_5G[6];
+    TUint8      rssi_adj_2G;            /* Table 6 */
+    TUint8      rssi_adj_j_5G;
+    TUint8      rssi_adj_5G_l;
+    TUint8      rssi_adj_5G_m;
+    TUint8      rssi_adj_5G_h;
+    TUint8      _pad3[19];
+} BCM_NVMEM_PACKED;
+
+NAMESPACE_END_WHA
+
+#endif  // BCMNVMEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/gendebug.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Contains methods for debug traces both in user space and kernel.
+*
+*/
+
+
+// @todo andreh - this file isn't needed in project, 
+//                cause belongs to wlaneng and is already exported there
+
+#ifndef GENDEBUG_H
+#define GENDEBUG_H
+
+#ifndef __KERNEL_MODE__
+#include <e32svr.h>
+#endif
+
+/** @file gendebug.h
+    @brief Common helper file for debugging. 
+
+    The file contains methods for adding traces and hardcoded breakpoint.
+
+    @page page1 A documentation for general helper module for doing debugging and tracing.
+
+    @subsection subsec1 This subsection describes the usage of hardcoded breakpoints.
+
+    Hardcoded breakpoints are usefull for allowing the execution to stop in right places
+    without bringing the OS down like using general assertions would do. Hardcoded breakpoints
+    must be used together with debugger. The hardcoded breakpoints are used by inserting
+    macro _DBG_MUST_BREAK into source code.
+
+    @note This feature has not been implemented yet.
+
+    @subsection subsec2 This subsection describes the usage of trace utilities.
+
+    Tracing is the most important way of doing HW level debugging (after looking the source of course).
+    Most of times users don't have access to debuggers and doing debugging in the field can be greatly
+    improved if there are great variety of configurable traces available.
+
+    In order to use the macro in kernel space, ALWAYS_KERNEL must be defined in the MMP-file of the module.
+
+    To use static tracing the module using these utilities must have defined DEBUG_LEVEL (this is integer constant) in
+    MMP-file. This constant defines the bit-mask for the set of traces, which are put into code at the compile time. See
+    the macro definitions for details.
+
+    The other way to do tracing is to use run-time tracing, which requires from user to put class member variable iDbgLevel
+    into their class. This variable is used the same way as the static flag by using bit-mask to define enabled traces. See
+    the macro definitions for details.
+*/
+
+/// @todo Implement this after checking the ARM manual
+#if defined(_DEBUG)
+#define _DBG_MUST_BREAK
+#else
+#define _DBG_MUST_BREAK
+#endif
+
+/** Critical trace-level is used when system is about to down very soon because of critical error. 
+    In most cases this trace level can be replaced by using assert with trace but in some cases
+    more information can be provided by using this debug level
+*/
+#define CRIT_LEVEL              0x00000001
+
+/** Serious trace-level is used when something bad and unexpected has happened but system might be
+    able to recover. In another words, software is not going to bring system forcefully down but
+    that's exactly what might happen due to an error.
+*/
+#define SERIOUS_LEVEL           0x00000002
+
+/* Error level is used to trace various errors, which are due to legal errors in normal operation. */
+#define ERROR_LEVEL             0x00000004
+
+/* Warning level is used to trace various warning, which are due to abnormal behaviour. */
+#define WARNING_LEVEL           0x00000008
+
+/* Info level is used to trace all general information. */
+#define INFO_LEVEL              0x00000010
+
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_1          0x000010000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_2          0x000020000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_3          0x000040000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_4          0x000080000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_5          0x000100000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_6          0x000200000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_7          0x000400000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_8          0x000800000
+
+#define DEVICE_1_MASK           0x0000f000
+#define DEVICE_2_MASK           0x000f0000
+#define DEVICE_3_MASK           0x00f00000
+#define DEVICE_4_MASK           0x0f000000
+
+// Override debug-level definition for your own in MMP file
+#ifndef DEBUG_LEVEL
+#define DEBUG_LEVEL 0x000000FF
+#endif
+
+/// @todo find the right macro for debug builds
+
+#pragma warning(disable : 4127)    // conditional expression is constant
+
+#if defined(_DEBUG) || defined(TRACES)
+
+// Do not directly use this macro
+//lint -emacro({717}, UtilDump)   do while(0)
+//lint -emacro({774}, UtilDump)   conditional expression is constant
+#define UtilDump(PFUNCTION,SRCLEVEL,TRGLEVEL,STRING) \
+        do { \
+            TUint32 _level = (TRGLEVEL); \
+            if (SRCLEVEL & _level) { \
+            PFUNCTION STRING; \
+            } \
+        } while (0)
+
+#ifdef __KERNEL_MODE__
+	#define TraceDump(LEVEL,STRING) UtilDump(Kern::Printf,DEBUG_LEVEL,LEVEL,STRING)
+	#define RTraceDump(LEVEL,STRING) UtilDump(Kern::Printf,iDbgLevel,LEVEL,STRING)
+#else
+	#define TraceDump(LEVEL,STRING) UtilDump(RDebug::Print,DEBUG_LEVEL,LEVEL,STRING)
+	#define RTraceDump(LEVEL,STRING) UtilDump(RDebug::Print,iDbgLevel,LEVEL,STRING)
+#endif
+
+#else  // it is release mode
+//lint -emacro({717}, TraceDump) do while(0)
+#define TraceDump(LEVEL,STRING) do {} while (0)
+//lint -emacro({717}, RTraceDump) do while(0)
+#define RTraceDump(LEVEL,STRING) do {} while (0)
+
+#endif // _DEBUG
+
+
+
+
+#endif // GENDEBUG_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/lmac_firmware.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,8466 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Binary image file name: init_lmac.dat */
+
+const unsigned int normal_firmware[] = {
+0x19171513,0x00000001,0x00000140,0x034d564e,0x00000000,0xa1003030,
+0x5544332f,0x02d09600,0x00030492,0x432f14e4,0x002104b9,0x00000000,
+0x00000000,0x17cc0000,0xfebbfa3a,0xfa3a17cc,0x1737febb,0xfea3fa48,
+0x0a030d0a,0x0b0a030d,0xf65e3e03,0x0002005a,0x000000ff,0x00000800,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x098a1d1e,
+0x14501360,0x164415a4,0x04000400,0x04000400,0x50500400,0x08505050,
+0x00030707,0xfefefefe,0x00000000,0x00000000,0xfafafa00,0xfafafafa,
+0xf2f2fafa,0xf2f2f2f2,0x07f2f2f2,0xfe000307,0x00fefefe,0xfe000000,
+0xfafefefe,0xfafafafa,0xf2fafafa,0xf2f2f2f2,0x00f2f2f2,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x20202428,0x24002020,0x20202020,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,
+0x00031658,0x00000000,0x00000971,0x0000081d,0x0000081d,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x47004803,0x00000000,0x53485244,
+0x00000000,0x00000971,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000961,
+0x00000919,0x000005fd,0x0000487d,0x0001d3d1,0x00004f69,0x0001de8d,
+0x00004e0d,0x0000b841,0x0000b5c9,0x000099b1,0x0000b979,0x0001c2f5,
+0x00013d05,0x00013d15,0x00013d21,0x00013d35,0x00013d49,0x00014755,
+0x0000096d,0x0000096d,0x0000096d,0x0000096d,0x0000096d,0x0000096d,
+0x0000096d,0x1e0091a1,0x1e002bc5,0x1e003759,0x1e006861,0x1e005aa5,
+0x1e000d35,0x1e000f51,0x1e0060a9,0x1e005d75,0x1e00004d,0x1e00705d,
+0x1e0002cd,0x1e007d85,0x1e00614d,0x1e0062ed,0x1e0004f5,0x1e004461,
+0x1e000749,0x1e003161,0x1e0032a1,0x1e0046e9,0x1e0044d1,0x1e0001a5,
+0x1e007e7d,0x1e0091d5,0x1e006221,0x1e00578d,0x1e005075,0x1e005a11,
+0x1e0040b9,0x1e004b1d,0x1e000ff1,0x1e003039,0x1e004a11,0x1e008099,
+0x1e006331,0x1e005fd5,0x1e005c41,0x0001fccd,0x1e0037cd,0x1e002fc9,
+0x1e001bfd,0x1e005939,0x1e004449,0x1e005195,0x1e0058c1,0x1e004c7d,
+0x1e004249,0x1e003e21,0x1e007e8d,0x1e005cdd,0x0001f861,0x1e0009e1,
+0x0001f8f1,0x1e007415,0x1e0052a5,0x1e00234d,0x1e006fcd,0x1e008025,
+0x1e00458d,0x0001ecf1,0x1e007e59,0x1e002431,0x1e007d55,0x1e0069c9,
+0x1e0045c1,0x1e0040a9,0x1e007b0d,0x1e001d55,0x1e0047d5,0x1e005c25,
+0x1e0021dd,0x1e004719,0x1e001af5,0x1e005d41,0x1e000a85,0x1e002851,
+0x1e005201,0x1e004d05,0x1e000f9d,0x1e006611,0x1e004041,0x1e003505,
+0x0001fcdd,0x1e0044d9,0x1e006b05,0x1e005a49,0x1e0006c1,0x1e000b4d,
+0x1e000109,0x1e005ec1,0x1e00629d,0x1e00a17d,0x1e0040f9,0x1e006b6d,
+0x1e001015,0x1e000949,0x0001fcc9,0x1e007559,0x1e0059d5,0x1e003981,
+0x1e00348d,0x1e007d5d,0x1e003e11,0x1e009f8d,0x1e003f65,0x1e0072c5,
+0x1e001271,0x1e005e9d,0x1e009275,0x1e005e51,0x1e000611,0x1e001edd,
+0x1e001e39,0x1e002d3d,0x1e006ded,0x1e000f61,0x1e000e89,0x1e002489,
+0x1e006abd,0x1e005c15,0x1e004569,0x1e000e79,0x1e0061f9,0x1e005da1,
+0x1e000c6d,0x1e003075,0x1e004b35,0x1e0005d9,0x1e0057b1,0x1e00917d,
+0x1e005959,0x1e0036f9,0x1e0062d1,0x0001e73d,0x1e001d25,0x1e004865,
+0x1e004075,0x1e000e11,0x1e001f01,0x1e001cf1,0x1e0024dd,0x1e005ddd,
+0x1e005a21,0x00000020,0x0000001f,0x00000050,0x00000001,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x681a4b03,0xf8c22300,
+0xf8d23644,0x47703644,0x000003e8,0x46c04770,0x6801b537,0xf1a14605,
+0x2b0f0310,0xf000d802,0xe026f90b,0x4c1368c3,0x686a9300,0x481268ab,
+0x69eb47a0,0x93006929,0x69ab696a,0x47a0480f,0x6a296aeb,0x6a6a9300,
+0x480d6aab,0x6beb47a0,0x93006b29,0x6bab6b6a,0x47a0480a,0x480a6ceb,
+0x6c299300,0x6cab6c6a,0xf24047a0,0xf00010e3,0xbd3efa69,0x1e004461,
+0x000203de,0x0002040f,0x00020441,0x00020473,0x000204a5,0xf04fb510,
+0xf0004000,0xbd10fa15,0xf04fb510,0xf0004000,0xbd10f9f1,0xf001b510,
+0xbd10fbdd,0xb5104b10,0xf8d2681a,0xf0133644,0xd0187f00,0x4c0d2340,
+0x3608f8c2,0x3608f8d2,0xff96f7ff,0xb1636823,0x47984b09,0x681b4b09,
+0x0300ebc3,0x42986820,0x1ac0d903,0x47984b06,0xf000e001,0xbd10f8d1,
+0x000003e8,0x000003bc,0x1e005aa5,0x000003b8,0x1e005cdd,0x41f0e92d,
+0x783b4f19,0x4e19b9b3,0xb9997831,0x4d194b18,0xd0071b5c,0x46224628,
+0xf924f001,0x46214628,0x47984b15,0x48164b15,0x47984621,0x703b2301,
+0xe0177033,0x783e4f13,0x4b13b9a6,0x1b5c4d13,0x4631d008,0x46224628,
+0xf90cf001,0x46214628,0x47984b09,0x480e4b09,0x47984621,0x701e4b02,
+0x703b2301,0x81f0e8bd,0x00023af6,0x00023af5,0x00028c76,0x00023c5c,
+0x1e005829,0x1e004461,0x000204e3,0x00023af4,0x00031654,0x00028c78,
+0x00020515,0x46c04770,0x48094b08,0xebc04909,0x4b090003,0xebc14a09,
+0x4b090103,0xebc2b510,0x4c080203,0x5300f44f,0xbd1047a0,0x00022d98,
+0x00000000,0x00022d98,0x00023af4,0x00023af4,0x00023c5c,0x1e005ac1,
+0x4603b510,0x4622460c,0x48034619,0x47984b03,0xf0004620,0xbd10f9a7,
+0x000206c4,0x1e004461,0xf7ffb510,0xbd10ff4f,0x4604b510,0xff44f7ff,
+0xf7ff4620,0x4620fefb,0xfff2f7ff,0x46c0e7fb,0xb5104b03,0x4b036818,
+0xf0016819,0xbd10f8df,0x00023afc,0x000003e8,0xb5704b09,0xf0006818,
+0x4b08fadf,0x681c4605,0x68e3e007,0xd003421d,0xb10b6863,0x479868a0,
+0x2c006824,0xbd70d1f5,0x00023afc,0x00023b08,0x4b07b570,0x681c4605,
+0x4620e005,0x4b054629,0xb1104798,0x2c006b24,0x4620d1f7,0x46c0bd70,
+0x00023b00,0x1e004041,0x4c08b510,0x70232300,0x47984b07,0xb9437823,
+0x681b4b06,0x6858b11b,0x47984b05,0xf7ffe001,0xbd10fea3,0x000003e4,
+0x1e005905,0x000003f4,0x1e005cdd,0x4605b570,0x6a83b1b8,0x6ac3b1ab,
+0x6283b90b,0xf100e006,0x6a690010,0x462b4a07,0x47a04c07,0xb10b68ab,
+0x47984628,0x3030f895,0xd1022b01,0x4b034628,0xbd704798,0x000006e1,
+0x1e005959,0x1e005a11,0xb5702901,0x6850d941,0x220a2100,0x47984b22,
+0x46044b22,0x4290681a,0x4921d91e,0xb10b684b,0xe7fb4619,0x0504ebc2,
+0xe012460c,0x6080f44f,0x4b1c2100,0x60604798,0xd0262800,0x6280f44f,
+0xf0012100,0x4a15f80f,0x68136864,0x33013d01,0x2d006013,0xe018d1ea,
+0x4b11d217,0x0502ebc4,0xe00a6858,0x4c0e6843,0x60633d01,0x47984b0e,
+0x68604a0a,0x3b016813,0xb10d6013,0xd1f12800,0x681a4b06,0x4b06b90a,
+0x4b04605a,0x68194807,0x47984b07,0x46c0bd70,0x1e004195,0x00023b04,
+0x00023b10,0x1e00578d,0x1e0057b1,0x000206eb,0x1e004461,0x40998983,
+0x5cc86883,0x46c04770,0xb2d28983,0x68834099,0x477054ca,0xf8d0b510,
+0xe00440a0,0x48036821,0x47984b03,0x2c0068e4,0xbd10d1f8,0x00020fa1,
+0x1e004461,0x4b01b510,0xbd104798,0x1e005ee5,0xb5004668,0xf3ef6982,
+0x21038305,0xd10d428b,0x68194b17,0x4b176019,0xd0074219,0x68194b16,
+0x4b166019,0xd0014219,0x61823202,0x30206941,0x3820b407,0xb4024661,
+0xb4f0b084,0xb40ec80e,0xb402c802,0x69c13810,0xf3efb402,0xb4028103,
+0xb4026981,0x8105f3ef,0x4809b402,0x29006801,0x4668d0fe,0xf802f000,
+0xbd00b014,0x00004708,0xe000ed2c,0x40000000,0xe000ed28,0x00008080,
+0x00000940,0x4208490a,0xb662d002,0x400843c9,0x42084908,0xb661d002,
+0x400843c9,0x40084906,0xd0032800,0x680a4905,0x600a4302,0x00004770,
+0x80000000,0x40000000,0x0000ffff,0xe000e100,0x4208490a,0xb672d002,
+0x400843c9,0x42084908,0xb671d002,0x400843c9,0x40084906,0xd0042800,
+0x680a4905,0x400243c0,0x4770600a,0x80000000,0x40000000,0x0000ffff,
+0xe000e180,0x68094902,0x58882290,0x00004770,0x00000948,0x68094902,
+0x5088229c,0x00004770,0x00000948,0xbbadbadd,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x68114a02,0x1c086010,0x00004770,
+0x00000940,0x60084901,0x0000e7fe,0x00000938,0xe7f74670,0x68014873,
+0x400f4f73,0xd132423f,0x46982300,0x4a71469a,0x2118400a,0x497040ca,
+0x4c705843,0x4d70401c,0xd10442ac,0x4d6f4680,0x46a91945,0x4d6ee00e,
+0xd10b42ac,0x4d6b4682,0x46ab1945,0x1c1d240f,0x4c6a4023,0x0a2d4025,
+0x469c432b,0x45982300,0x459ad001,0x4b66d104,0x3a0118c0,0xe005d1dc,
+0x42004650,0x4640d002,0xd1294200,0x21fce7fe,0x680a5841,0x4013230f,
+0xd0f12b0f,0xd0012b01,0xe7f63104,0x4b5b3108,0x4c5b4013,0xd10642a3,
+0xf8dcf000,0xf0004680,0x4681f8e5,0x4c57e7e9,0xd1e642a3,0x681b1f0b,
+0x40234c55,0x40e32418,0xf000469c,0x4682f8cb,0xf8d4f000,0xe7d84683,
+0x22214950,0x4a415042,0x5889494f,0x421923ff,0x6851d022,0x42194b4d,
+0x6811d01e,0x40194b4c,0x24036ad3,0x4c4b4023,0x240342a1,0xe013d000,
+0xd01142a3,0x4c474b48,0xd00042a1,0x4947e00c,0x42195889,0x4946d008,
+0x40195889,0xd1fa4299,0x69114b37,0xd0fc4219,0x423f4649,0x2398d104,
+0x241058cb,0xe00140e3,0x58cb4b3e,0x4023241c,0xd0012b00,0xf8a4f000,
+0x493b4640,0x46486008,0x6008493a,0x600f493a,0x46514660,0x588a2200,
+0x21f01c13,0x091b400b,0xd3072803,0x49351c16,0x2114400e,0x2e0040ce,
+0x3b01d000,0x400a210f,0x2401320e,0x1c254094,0x2803435d,0x2e00d306,
+0x3e01d004,0x2401360e,0x192d40b4,0xd0fe2d00,0x600d4929,0x46ad3d04,
+0x43ec9d00,0x41dd2310,0xd10942ac,0x00a40c24,0x602c4d24,0x1b1b466b,
+0x602b4d23,0x469d3b04,0x49234822,0xc0042200,0xd8fc4281,0xff60f01b,
+0x0000e7fe,0x18000000,0xf0000000,0x0f000000,0x00000ffc,0x00008ff0,
+0x000082a0,0x00000f00,0x000080e0,0x00007000,0x00001000,0x000fff00,
+0x00082a00,0x00080e00,0xff000000,0x000001e0,0x00000604,0x00380000,
+0x0000ffff,0x00004329,0x00000400,0x00000618,0x0000060c,0x00000408,
+0x00000948,0x0000094c,0x00000944,0x00f00000,0x00022d98,0x00022da0,
+0x00022d9c,0x00023af4,0x00023c5c,0x220f6808,0x40023104,0xd1f92a05,
+0x40104a01,0x000046f7,0xfffff000,0x220f6808,0x40023104,0xd1f92a05,
+0x42102280,0x4a01d0f6,0x46f74010,0xfffff000,0x0000e7fe,0x47706cc0,
+0x6642b510,0xf8d06683,0xf8d02080,0x9c02308c,0x0382eb03,0x3080f8d3,
+0x660165c4,0xbd106583,0x308cf8d0,0x31c0f8d3,0x0fe8f8d3,0x46c04770,
+0x308cf8d0,0x2080f8d0,0x0382eb03,0x0080f8d3,0x46c04770,0x0080f8d0,
+0x46c04770,0xf3c06980,0x477060c0,0x30fff04f,0x46c04770,0xf0006bc0,
+0x28030003,0x2000bf14,0x47702001,0xb5706fc3,0xf8d04604,0xb1135080,
+0x0d1b051b,0x480cb123,0x3181f240,0xfcbcf7ff,0xf7ff4620,0x4601ffd1,
+0x46022000,0xf8d4e009,0xeb03308c,0xf8d30382,0x428b3080,0x3001bf08,
+0x42aa3201,0xbd70d1f3,0x0002070c,0x4604b510,0xffa0f7ff,0x46204601,
+0xfdecf000,0x46c0bd10,0x4604b510,0x2200b330,0x108cf8d4,0x3022f851,
+0x2300b113,0x3022f841,0x2a103201,0xf8d4d1f4,0xf893308c,0x1e4a12c4,
+0xf8832901,0xd10922c4,0x7232f44f,0x6ce04b08,0x108cf8d4,0x4b074798,
+0x601a2200,0x429c4b06,0x6ce0d004,0x22904621,0x47984b01,0x46c0bd10,
+0x1e005c15,0x00023b30,0x00023b3c,0xf000b510,0xbd10f9bd,0xf000b510,
+0xbd10f9bb,0xf000b510,0xbd10fba1,0xf000b510,0xbd10faed,0x9c04b513,
+0xf0009400,0xbd1cfa7d,0x4604b573,0xf7ff460d,0x462aff4d,0x46204601,
+0xfe68f000,0x2b146963,0x266ddd23,0x200ae003,0x47984b12,0x21003e0a,
+0x460b2210,0x91004620,0xffe0f7ff,0xbf142d00,0x5380f44f,0xf4002300,
+0x42985080,0x2e09d001,0x2d00d1e9,0xf44fbf14,0x23005380,0xd0044298,
+0xf6404805,0xf7ff5183,0xf44ffc23,0x4b01707a,0xbd7c4798,0x1e005d75,
+0x0002070c,0xb5132b02,0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,
+0xe004401c,0xea446812,0xea230302,0x40210402,0x22649100,0x46232100,
+0xffa8f7ff,0x46c0bd1c,0x00023b2c,0xb5132b02,0x4611460c,0xb902d00c,
+0x4a09b154,0x6813b113,0xe004401c,0xea446812,0xea230302,0x40210402,
+0x22689100,0x46232100,0xff8cf7ff,0x46c0bd1c,0x00023b2c,0xb5132b02,
+0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,0xe004401c,0xea446812,
+0xea230302,0x40210402,0x226c9100,0x46232100,0xff70f7ff,0x46c0bd1c,
+0x00023b2c,0xf000b510,0xbd10f907,0xf000b510,0xbd10f985,0xf000b510,
+0xbd10f9b7,0xf000b510,0xbd10f95f,0x4b06b510,0x47984604,0x4601280f,
+0x2000d901,0x4620e002,0xf952f000,0x46c0bd10,0x0001cd15,0x41f0e92d,
+0x5080f8d0,0x2d0f4604,0x4617460e,0x480dd904,0x6106f640,0xfb98f7ff,
+0xf44f4620,0x22006100,0xffdcf7ff,0xf8c02300,0x33053658,0x665cf8c0,
+0xf8c04629,0xf8c03658,0x4620765c,0xffcaf7ff,0x81f0e8bd,0x0002070c,
+0x41f0e92d,0x5080f8d0,0x2d0f4604,0x4617460e,0x4812d904,0x51e9f640,
+0xfb72f7ff,0xf44f4620,0x22006100,0xffb6f7ff,0xf8c02300,0xf8d03658,
+0x4629365c,0xf0436033,0xf8c00301,0x2305365c,0x3658f8c0,0x365cf8d0,
+0xf043603b,0xf8c04300,0x4620365c,0xff9af7ff,0x81f0e8bd,0x0002070c,
+0x41f0e92d,0x5080f8d0,0x2d0f4604,0x4617460e,0x480dd904,0x51d2f640,
+0xfb42f7ff,0xf44f4620,0x22006100,0xff86f7ff,0xf8c02300,0xf8d03650,
+0x46293654,0x0306ea23,0xf8c0433b,0x46203654,0xff74f7ff,0x81f0e8bd,
+0x0002070c,0xf2446b02,0x429a3319,0x4605b573,0xd11b460e,0xb9cc6b44,
+0x2302b1d9,0x46219300,0x33fff04f,0x72f0f44f,0xfebcf7ff,0xf6404622,
+0x4628011a,0xff5af7ff,0x21014628,0xfeaef7ff,0xf44f4628,0x46226100,
+0xff50f7ff,0xbf082e01,0x46282602,0xf2402100,0xf04f6234,0x960033ff,
+0xfea0f7ff,0x46c0bd7c,0xb5104b03,0xfb03681b,0xf7fff101,0xbd10ffc7,
+0x00023b38,0xf000b510,0xbd10f821,0xf000b510,0xbd10f813,0x47706808,
+0x4770600a,0xb5106fc1,0x6170f501,0xf7ff31fc,0xf648fff5,0xea0073f0,
+0x09180303,0x46c0bd10,0xb5106fc1,0x6170f501,0xf7ff3118,0xf000ffe7,
+0xbd10003f,0xb5106fc1,0x6170f501,0xf7ff31fc,0xf400ffdd,0xf00043e0,
+0xea40000f,0xbd102013,0xb5106fc1,0x6170f501,0xf7ff3198,0x4b04ffcf,
+0x0303ea00,0x3f80f5b3,0x2000bf14,0xbd102001,0x00010007,0x47702000,
+0x46c04770,0x0303f000,0xb5102b03,0xd1054604,0xf2404813,0xf7ff41cf,
+0xe014fa9b,0xf020b913,0xe01c00ff,0xd10c2b01,0x6f00f410,0x480cd004,
+0x41d6f240,0xfa8cf7ff,0x607ef424,0x001ff020,0x2b02e00d,0x2000d001,
+0xf410e009,0xd0046f00,0xf2404803,0xf7ff41d9,0x0c20fa7b,0xbd100400,
+0x00020754,0x460cb570,0x108cf8d0,0xeb014605,0xf8d30384,0xf85121c0,
+0xb9533024,0x2024f841,0x0513b112,0xb1230d1b,0xf2404804,0xf7ff2161,
+0xf8d5fa5f,0xf853308c,0xbd700024,0x00020754,0x3084f8d0,0x4299b570,
+0x460d4604,0x2000d301,0x6e83e010,0x6dc0b13b,0xb1204798,0xf2404806,
+0xf7ff214b,0x4620fa45,0xf7ff4629,0xf8c4ffcb,0x67e05080,0x46c0bd70,
+0x00020754,0xe92d6fc3,0xf50341f0,0xea326870,0x46060301,0x4617460d,
+0x4814d004,0x113bf240,0xfa2af7ff,0x637ef425,0x031ff023,0x480fb123,
+0x719ef44f,0xfa20f7ff,0xb17fb905,0x049cf108,0x46304621,0xff32f7ff,
+0x4305ea6f,0x0203ea00,0x46304621,0x4207ea42,0xff2af7ff,0xf1084630,
+0xf7ff019c,0x0c00ff23,0x81f0e8bd,0x00020754,0xe92d6fc3,0xf50341f0,
+0xea326870,0x46060301,0x4617460d,0x480fd004,0x1121f240,0xf9f4f7ff,
+0xb17fb905,0x0498f108,0x46304621,0xff06f7ff,0x4305ea6f,0x0203ea00,
+0x46304621,0x4207ea42,0xfefef7ff,0xf1084630,0xf7ff0198,0x0c00fef7,
+0x81f0e8bd,0x00020754,0x47f0e92d,0x4680290f,0x4615460c,0xf8dd469a,
+0xd9049020,0xf44f482e,0xf7ff71b6,0xf5b5f9c9,0xd3045f80,0xf240482a,
+0xf7ff116d,0xea6ff9c1,0xea19070a,0xd0040f07,0xf44f4825,0xf7ff71b7,
+0xf8d8f9b7,0xf852208c,0xb9733024,0x0384eb02,0x31c0f8d3,0x3024f842,
+0x051bb113,0xb1230d1b,0xf240481b,0xf7ff1177,0xf8d8f9a3,0xf853308c,
+0x192e4024,0x4816d104,0x119bf240,0xf998f7ff,0x0f00f1ba,0xf1b9d102,
+0xd0150f00,0x6f70f5b5,0x4631d30c,0xf7ff4640,0xea00fea5,0x46310207,
+0xea424640,0xf7ff0209,0xe008fe9f,0x403b592b,0x0309ea43,0xe007512b,
+0x6f70f5b5,0x4640d304,0xf7ff4631,0xe000fe8f,0xe8bd6830,0x46c087f0,
+0x00020754,0xe92d6fc3,0x460541f3,0xb1134688,0x0d1b051b,0x4850b123,
+0x31edf240,0xf960f7ff,0x46286feb,0x6670f503,0x0498f106,0xf7ff4621,
+0xf010fe71,0xf0400f01,0x4628808c,0xf7ff4621,0xf410fe69,0xd0783f80,
+0x46284621,0xfe62f7ff,0xf0404621,0x46280202,0xfe5ef7ff,0x46284621,
+0xfe58f7ff,0x90014b3d,0x47982001,0xe0034f3c,0x4b3a200a,0x3f0a4798,
+0x049cf106,0x46214628,0xfe48f7ff,0x0f04f010,0x2f09d001,0x4621d1f0,
+0xf7ff4628,0x4628fe3f,0x01f8f106,0xfe3af7ff,0x0f80f010,0xf106d023,
+0x46210490,0xf7ff4628,0x4621fe31,0x7200f040,0xf7ff4628,0x4621fe2d,
+0xf7ff4628,0x4b25fe27,0x20019001,0x4c244798,0x200ae003,0x47984b21,
+0x46283c0a,0x0190f106,0xfe18f7ff,0x7fc0f010,0x2c09d001,0xf106d1f1,
+0xea4f0498,0xf0424208,0x46281203,0xf7ff4621,0x4621fe0b,0xf7ff4628,
+0x4b14fe05,0x200a9001,0x46284798,0x01f8f106,0xfdfcf7ff,0x0f80f010,
+0xf106d00b,0x46210490,0xf7ff4628,0x4621fdf3,0x7200f020,0xf7ff4628,
+0xea4ffdef,0x46284208,0x0198f106,0x0203f042,0xfde6f7ff,0x4b032001,
+0xe8bd4798,0x46c081fc,0x00020754,0x1e005d75,0x000186a9,0xe92d6fc3,
+0x460647f3,0x4614468a,0x051bb113,0xb1230d1b,0xf2404830,0xf7ff412a,
+0xf8d6f8af,0xea44807c,0x4621040a,0x6570f508,0x0403f044,0x0798f105,
+0xea4f4630,0xf7ff4904,0xf049ff31,0x46300201,0xf7ff4639,0x4639fdb5,
+0xf7ff4630,0x359cfdaf,0x4c219001,0x47a02001,0x46294630,0xfda6f7ff,
+0x0f01f010,0x4630d004,0x22004629,0xfda0f7ff,0x6579f508,0x46294630,
+0xfd98f7ff,0x9b019001,0x2fc0f413,0x4629d009,0xf7ff4630,0x4629fd8f,
+0x22c0f420,0xf7ff4630,0x464afd8b,0x46394630,0xfd86f7ff,0x46304639,
+0xfd80f7ff,0x20019001,0xf04a47a0,0x46300201,0x04124639,0xfd78f7ff,
+0x46394630,0xfd72f7ff,0x20019001,0xe8bd47a0,0x46c087fc,0x00020754,
+0x1e005d75,0x60c26042,0x60816001,0x46c04770,0xf04fb500,0xe00a0e00,
+0x3000f81e,0xb2db18d3,0xf80e4293,0xd2043000,0x0e01f10e,0x458e2201,
+0xbd00dbf2,0x1e53b510,0x18891884,0xf814e009,0xf8112d01,0x42820d01,
+0xebc0d002,0xe0040002,0xf1b33b01,0xd1f23fff,0xbd102000,0xe92d4b10,
+0x468841f0,0xbf142800,0x46194601,0x4b0e480d,0x47984617,0x462c2500,
+0x480ce00a,0x1008f815,0x47b03401,0xd1022c10,0x47b04809,0x35012400,
+0x4e0542bd,0x4806dbf1,0xe8bd47b0,0x46c081f0,0x0002196b,0x0002075e,
+0x1e004461,0x00020767,0x00021250,0xb533b40e,0x4605ab05,0x2b04f853,
+0x68696800,0x93014c0a,0xf1b047a0,0xd0033fff,0x4298686b,0xb910da00,
+0x606b2300,0x1a1be004,0x682b606b,0x602b181b,0x403ce8bd,0x4770b003,
+0x1e004249,0x7842b530,0x7803b087,0x78829200,0x9201460d,0x4c0678c2,
+0x79029202,0x79429203,0x92044608,0x4a032112,0x462847a0,0xbd30b007,
+0x1e003fc9,0x0002098e,0x4604b570,0xb1e9460e,0x4b0f4608,0x46054798,
+0xe00fb1c0,0x46314620,0x4b0c462a,0xb9284798,0x2b3d5d63,0x1c63d102,
+0xe00c1958,0x3b01f814,0xd1fb2b00,0x7823b114,0xd1eb2b00,0xf0014630,
+0xe000ff6d,0xbd702000,0x1e0040a9,0x1e00d671,0xf7ffb510,0xb118ffd5,
+0x460a2100,0x47984b01,0x46c0bd10,0x1e0037cd,0x47f0e92d,0x230c4698,
+0x1303fb02,0x4681689d,0x4617460e,0x240ce012,0x6404fb07,0x4629686b,
+0x230060a3,0x4648606b,0x46424b0c,0x8a234798,0x3b0168a5,0x88f38223,
+0x80f33b01,0xd1ea2d00,0xfb07230c,0x8a236403,0x4805b123,0x7194f44f,
+0xff5ef7fe,0xe8bd60e5,0x46c087f0,0x1e005c41,0x00020783,0x41f0e92d,
+0x460c4607,0x25004616,0x462ae006,0x46214638,0xf7ff4633,0x3501ffc1,
+0x429d8823,0x88e3dbf5,0x4803b123,0x71e9f44f,0xff3ef7fe,0x81f0e8bd,
+0x00020783,0xb5002a07,0xf010d90f,0xd10c0f03,0x460bb909,0xb2cbe004,
+0x2303ea43,0x4303ea43,0x2a033a04,0x3b04f840,0x4613d8fa,0x0e00f04f,
+0xf80ee004,0x3b011000,0x0e01f10e,0xd1f82b00,0xbd001880,0xb5002a03,
+0xd90c4684,0x0f03f011,0xf01cd109,0xd1060f03,0x3b04f851,0x2a033a04,
+0x3b04f840,0xf04fd8f8,0xe0060e00,0x3001f81e,0xf80e3a01,0xf10e3000,
+0x2a000e01,0x4660d1f6,0x46c0bd00,0xb5706943,0xdc012b14,0xe0042541,
+0x6a0b4a0a,0xea036812,0x4c090502,0x2c04f854,0xf854b132,0xea153c08,
+0xd0010103,0x47906820,0x340c4b04,0xd1f1429c,0x46c0bd70,0x00023c0c,
+0x00023bd8,0x00023c14,0x460eb573,0xf89d2400,0x46151018,0x469e4684,
+0x20014622,0xf302fa10,0x0f0eea13,0xf8c5d004,0xf8d52620,0x431c3624,
+0x2a1f3201,0x4623d1f1,0xb13cb149,0x46319000,0x462a4660,0xffe0f7ff,
+0x0300ea44,0x4620461c,0x46c0bd7c,0x4605b570,0xf9d0f7ff,0x46062100,
+0xf7ff4628,0x4604faef,0x4807b920,0x1111f640,0xfea2f7fe,0x46314628,
+0x460cf8d4,0xfae2f7ff,0x2080f3c4,0x46c0bd70,0x000209c5,0xe92d6983,
+0xf01341f0,0x46065f80,0x483ed104,0x0152f640,0xfe8af7fe,0xf7ff4630,
+0x2100f9a9,0x46304607,0xfac8f7ff,0xb9204605,0xf6404836,0xf7fe0157,
+0x2301fe7b,0x3650f8c5,0x3654f8d5,0xf0234c32,0xf8c50304,0xf8d53654,
+0xf0433654,0xf8c50304,0xe0033654,0x4b2d200a,0x3c0a4798,0xf0136aeb,
+0xd1010f08,0xd1f52c09,0xf0136aeb,0xd1040f08,0xf6404824,0xf7fe01b1,
+0x2000fe57,0xf8c56aea,0xf8d50658,0xf3c2365c,0xf0231247,0x21014360,
+0x7342ea43,0x365cf8c5,0x1658f8c5,0x365cf8d5,0x040ff002,0x0301f023,
+0x03d4ea43,0x365cf8c5,0x0650f8c5,0x3654f8d5,0x4340f023,0x7382ea43,
+0x3654f8c5,0x1650f8c5,0x3654f8d5,0x0303f023,0x0394ea43,0x3654f8c5,
+0x0650f8c5,0x3654f8d5,0xf0434630,0xf8c55300,0xf8c53654,0xf8d51650,
+0x46393654,0x0304f023,0x3654f8c5,0xfa5af7ff,0x81f0e8bd,0x000209c5,
+0x00989689,0x1e005d75,0x4616b570,0x460d6b42,0x2312f240,0x490d2000,
+0xbf8c2a01,0x2412461c,0xfe42f7ff,0x2100b120,0x4b09460a,0x46044798,
+0x49082000,0xfe38f7ff,0x4807b908,0x2100e003,0x4b03460a,0x602c4798,
+0xbd706030,0x000209ce,0x1e0037cd,0x000209d3,0x003ff63e,0x43f0e92d,
+0xb0856983,0x5f80f013,0x460c4607,0xd1044690,0xf6404831,0xf7fe0115,
+0x4638fdd3,0xf8fef7ff,0x28004606,0x4638d155,0xf8ecf7ff,0x46814631,
+0xf7ff4638,0x4605fa0b,0x4827b920,0x6102f44f,0xfdbef7fe,0x46212301,
+0x462a9300,0x6380f44f,0xf7ff4638,0xaa02fedd,0xa9034604,0x96034638,
+0xf7ff9602,0x9b03ffa1,0x0203ea24,0x0f00f1b8,0xf8d5d023,0xf44f3618,
+0xf443707a,0x43136380,0x3618f8c5,0x47984b15,0x24a1f643,0x200ae003,
+0x47984b12,0xf8d53c0a,0xf413360c,0xd1016f80,0xd1f42c09,0x360cf8d5,
+0x6f80f413,0x480ad10d,0x013ff640,0xfd84f7fe,0xf8d5e007,0xf4423618,
+0xea236280,0xf8c50302,0x46383618,0xf7ff4649,0xb005f9bd,0x83f0e8bd,
+0x000209c5,0x1e005d75,0x30b4f890,0xf8d0b1a3,0xb10b30c0,0xe0024618,
+0x00c4f8d0,0x6803b160,0x6300f443,0x68036003,0x6f00f413,0xf423d004,
+0x60036300,0xe0002001,0x47702000,0x4604b510,0xffe2f7ff,0x2301b110,
+0x3140f8c4,0x46c0bd10,0x477020a4,0xf890b510,0xb10b30b4,0xe0004903,
+0x22904903,0xfe26f7ff,0x46c0bd10,0x000209e4,0x00020a74,0x4604b570,
+0xf7ff460e,0x2100f833,0x460a4605,0xf7ff4620,0xf410f96d,0xd00f5f80,
+0xf7ff4620,0xb108f84f,0xe00a2040,0x46314628,0x47984b04,0x4804b920,
+0x01c3f640,0xfd1cf7fe,0xbd702020,0x1e004569,0x00020b04,0x4604b570,
+0xe004460d,0x00acf8d4,0x4b052201,0x46294798,0x4b044620,0x46014798,
+0xd1f32800,0x46c0bd70,0x1e005c41,0x1e004d89,0x4604b570,0xe004460d,
+0x00acf8d4,0x4b052201,0x46294798,0x4b044620,0x46014798,0xd1f32800,
+0x46c0bd70,0x1e005c41,0x1e004e11,0x4604b510,0xf8d4e004,0x220000ac,
+0x47984b04,0x46202101,0x47984b03,0x28004601,0xbd10d1f3,0x1e005c41,
+0x1e005195,0x4b08b510,0x46084604,0x47984907,0xf104b910,0xe0050090,
+0xf44f4805,0xf7fe6190,0x2000fcc7,0x46c0bd10,0x1e004041,0x00020b0d,
+0x00020b04,0x4770bf30,0x69c06942,0x40186a13,0x47706210,0x22006943,
+0x6a9b629a,0x47706182,0x694369c2,0x629a6182,0x46c04770,0x30fcf8d0,
+0xf8904319,0xf8c03177,0xb1e310fc,0x0f04f011,0xf890d005,0xea413178,
+0xf8c06303,0xf8d030fc,0x694230fc,0x0f0af013,0xf443bf1c,0xf8c02380,
+0xf8d030fc,0x64d330fc,0xf8c02300,0xf88030fc,0x33083177,0x47706453,
+0x43f7e92d,0x6028f89d,0x4680460f,0x21004699,0x5dcbe002,0x3101b113,
+0xd1fa4291,0xb1135c7b,0x0001f06f,0xb15ee075,0x1c4c1d4b,0xd9024293,
+0x000df06f,0xa801e06d,0x22041939,0xfd4af7ff,0x46201d3c,0x4d354934,
+0xb92847a8,0xd04d2e00,0x2b0f9b01,0xe043d858,0x49314620,0xb90847a8,
+0xe03c3001,0x492f4620,0xb90847a8,0xe0363002,0x492d4620,0xb99847a8,
+0x3003b90e,0x9a01e037,0xd02b2a00,0x300cf8d8,0xf0136bdb,0xd13e0f04,
+0xd8392a07,0x40932301,0x0f83f013,0xe033d11e,0x49224620,0xb90847a8,
+0xe0183004,0x49204620,0xb90847a8,0xe0123005,0x491e4620,0xb90847a8,
+0xe00c3006,0x491c4620,0xb90847a8,0xe0063007,0x491a4620,0xb9d047a8,
+0xe0003008,0xb1362003,0xeb089b01,0xf8c20280,0xe00b3194,0xeb084630,
+0xf5010180,0x463871ca,0xf7ff2204,0x2304fceb,0x3000f8c9,0xe0042000,
+0x001cf06f,0xf06fe001,0xe8bd0016,0x46c083fe,0x00020b7c,0x1e004041,
+0x00020b89,0x00020b95,0x00020ba1,0x00020ba8,0x00020bb1,0x00020bb8,
+0x00020bc3,0x00020bcf,0xb5106a03,0xb9234604,0xf2404805,0xf7fe415f,
+0x4620fbdb,0xff1cf7ff,0x43036a23,0xbd106223,0x00020bd6,0x4604b570,
+0xff12f7ff,0xb1804605,0x3175f894,0x4807b923,0x4135f240,0xfbc4f7fe,
+0xb1236a23,0xf2404803,0xf7fe4137,0x6225fbbd,0xbd702001,0x00020bd6,
+0x4b0ab570,0x460d4604,0xb9184798,0x214d4808,0xfbaef7fe,0x68e26923,
+0x429318eb,0x4804d903,0xf7fe214e,0x82a5fba5,0x46c0bd70,0x1e005ec1,
+0x00020bd6,0x4b0bb570,0x460d4604,0xb9184798,0x21434809,0xfb94f7fe,
+0x429d8aa3,0x4806d903,0xf7fe2144,0x6920fb8d,0x19408aa3,0x61201b5b,
+0xbd7082a3,0x1e005ec1,0x00020bd6,0x4b0cb570,0x460d4604,0xb9184798,
+0x2139480a,0xfb78f7fe,0x68a26923,0x42931b5b,0x4806d203,0xf7fe213a,
+0x6920fb6f,0x1b408aa3,0x612018eb,0xbd7082a3,0x1e005ec1,0x00020bd6,
+0x4604b570,0xe00f2500,0xf8d4b16d,0x42ab30f8,0x4817d104,0x61f8f44f,
+0xfb56f7fe,0x462968a0,0x4b142201,0x46354798,0x21006a60,0x47986ac3,
+0x28004606,0xb1d5d1e8,0x20f4f8d4,0xf8d4b172,0x429330f8,0x480ad104,
+0x71d7f240,0xfb3cf7fe,0xf8d468a0,0x220110f4,0x47984b06,0x30f8f8d4,
+0x50f4f8c4,0xd10242ab,0xf8c42300,0xbd7030f8,0x00020bd6,0x1e005c41,
+0x41f0e92d,0x27004605,0xf895e055,0xb12331b9,0x31b8f895,0x4620b10b,
+0x4b3be00a,0x463168a8,0xf8d54798,0x681b30f0,0xd9064298,0x0028f105,
+0x46322100,0x47984b35,0x6a68e04a,0x47986e03,0xf8956a68,0xf8d04105,
+0x47983084,0xf8851824,0x69344106,0x71a32300,0x3178f895,0x72234631,
+0x3106f895,0xf8852201,0xb2db3107,0xf8d57263,0x6a6831c4,0xf8c53301,
+0x6a0331c4,0xb9d04798,0x10f8f8d5,0x29007963,0xf013d033,0xd0300f0f,
+0x78237862,0x2302ea43,0x091b330f,0x690a0a1a,0x2300bf18,0xf8957193,
+0x72133178,0x2301e021,0x31b8f885,0xf8d5461f,0x681b30f0,0xf105b143,
+0x46200428,0x4b122100,0x46064798,0xd19c2800,0x696ab117,0x64532304,
+0x2b0c8deb,0x6928d903,0xf88cf001,0x2b07e00d,0x6928d80b,0xf888f001,
+0xf895e007,0xf8c531b9,0x2b0060f8,0x2701d1d7,0xe8bde7d9,0x46c081f0,
+0x1e003f55,0x1e003a4d,0x1e003ac5,0xf8d0b570,0x461531a4,0x46048dc2,
+0x468e429a,0x2d02d30c,0x6880d10a,0x22014b0c,0xf8d44798,0x200031a8,
+0xf8c43301,0xe00e31a8,0xf1042100,0x46720028,0x47984b06,0xd1022d02,
+0x31a0f8d4,0x4620b913,0xff52f7ff,0xbd702001,0x1e005c41,0x1e0039cd,
+0x4ff0e92d,0xb0876a43,0x460e4607,0xf8d09201,0xb9238008,0xf2404856,
+0xf7fe6139,0x2400fa65,0x94039404,0xa174f897,0x0f00f1ba,0x6933d117,
+0xf00368b2,0xf1050501,0x1a9b0b0c,0xd225455b,0x9014f8b6,0xf240484a,
+0xf7fe614e,0xf109fa4d,0x4640010c,0x4b471949,0x46044798,0x4640b930,
+0x22014631,0x47984b44,0xe07d4620,0xf7ff4659,0x6931fe9d,0x6920464a,
+0xfb1cf7ff,0x46316833,0x46406023,0x4b3c4652,0x46264798,0x2101b145,
+0xf7ff4630,0x6930fea7,0x22012100,0xfaeaf7ff,0x4630210c,0xfe9ef7ff,
+0x46404b34,0xf8d64631,0x47989010,0xf8ad68fb,0xf8d30016,0xf1baa034,
+0xd1240f02,0xf0136bdb,0xd0200f04,0x31baf897,0xd11c2b01,0x46404631,
+0x47984b29,0x3016f8bd,0x330f8a84,0xf0234605,0xa905030f,0x46524648,
+0x3014f8ad,0xfadef7ff,0x3014f8bd,0x18e44628,0x3016f8bd,0xb2a11ae4,
+0xfe36f7ff,0x4648e005,0x0116f10d,0xf7ff2202,0xf8bdfacd,0xa9063016,
+0xf82143db,0x22023d02,0x0002f109,0xfac2f7ff,0xa9039a01,0xf8970213,
+0xf4032104,0x43136370,0x630bea43,0xf1092208,0x93030004,0xfab2f7ff,
+0x46314638,0xf7ff9a01,0xb128ff29,0x3104f897,0x33012001,0x3104f887,
+0xe8bdb007,0x46c08ff0,0x00020bd6,0x1e005c25,0x1e005c41,0x1e003e11,
+0x1e003e21,0x2200b510,0xff3af7ff,0x46c0bd10,0x690bb510,0xf002791a,
+0x2a6002f0,0x2201bf14,0xf7ff2202,0xbd10ff2d,0xb5708dc3,0xbb4b4605,
+0x211c6880,0x47984b14,0xb3184606,0xf7ff210c,0x6a68fddb,0x47986e03,
+0xf8956a68,0xf8d04105,0x47983084,0x210c1824,0x4106f885,0xf7ff4630,
+0x4628fde5,0x22014631,0xff0af7ff,0xf8d5b928,0x330131cc,0x31ccf8c5,
+0xf8d5e004,0x330131c8,0x31c8f8c5,0x46c0bd70,0x1e005c25,0xf890b510,
+0xb90b3178,0xffc8f7ff,0x46c0bd10,0x3ffff1b2,0xd101b510,0xe00723ff,
+0xd0002a02,0xf082b90a,0x23010202,0xb2db4093,0xf8902901,0xd1012178,
+0xe0014313,0x0303ea22,0x3178f880,0xffacf7ff,0x46c0bd10,0x4604b570,
+0x25006a40,0x47986c83,0x68836a60,0x6a604798,0x47986e43,0x21016a60,
+0x47986a83,0x460a2100,0xf7fe68e0,0x68e0fcd3,0xfcccf7fe,0x10f4f8d4,
+0x5105f884,0x5104f884,0x50fcf8c4,0x68a0b129,0x4b052201,0xf8c44798,
+0xf8c450f4,0x622550f8,0x5174f884,0x46c0bd70,0x1e005c41,0xe92d68c2,
+0x6b5341f3,0x2b024604,0x690e460d,0x6bd3d112,0x0f04f013,0xf890d00e,
+0x2b0131ba,0x8833d10a,0xb29b4628,0xb29b009b,0x8a898033,0x39180089,
+0xfd46f7ff,0x46282108,0xfd5cf7ff,0x0f03f016,0x487fd004,0x61a6f240,
+0xf8f2f7fe,0xb2998873,0x020ff011,0xf011d021,0xd0040f01,0x3154f8d4,
+0xf8c43301,0xf0113154,0xd0040f02,0x3158f8d4,0xf8c43301,0xf0113158,
+0xd0040f04,0x315cf8d4,0xf8c43301,0xf011315c,0xf0000f08,0xf8d4808c,
+0x33013160,0x3160f8c4,0x8aabe085,0xd8082b03,0x3144f8d4,0x330168a0,
+0x3144f8c4,0x4b654629,0x2202e0c3,0xf10d6929,0xf7ff0006,0x6929f99f,
+0x31022202,0xf7ffa801,0x68e2f999,0x2b026b53,0x6bd3d129,0x0f04f013,
+0xf894d025,0x2b0131ba,0x8833d121,0x2006f8bd,0x429ab29b,0xf8d4d004,
+0x33013148,0x3148f8c4,0x3004f8bd,0x43db6928,0xfe83fa1f,0xf10e8801,
+0xf64f020f,0xea0273f0,0x42990303,0xfa1fd107,0xf8a0f38e,0x8033e000,
+0xf8ad8833,0x88333006,0x1006f8bd,0x428bb29b,0x43cbd106,0xf8bd041b,
+0x0c1b2004,0xd015429a,0xb29b8833,0xd004428b,0x3148f8d4,0xf8c43301,
+0x43cb3148,0xf8bd041b,0x0c1b2004,0xd022429a,0x314cf8d4,0xf8c43301,
+0xe01c314c,0x46282104,0xfcc0f7ff,0x2b078aab,0x692bd915,0x78de2108,
+0xf8934628,0x781f8001,0xfcb4f7ff,0xd8042e0b,0xf240482b,0xf7fe710c,
+0xf1a6f84b,0xb2d9030c,0x428b8aab,0x68a0d203,0x22004629,0x4628e77f,
+0xfca0f7ff,0x3105f894,0xd006429f,0x3150f8d4,0x7105f884,0xf8c43301,
+0xf8943150,0xf0083105,0x3301060f,0x3105f884,0x31b9f894,0xf018b1e3,
+0xd1010f40,0xd1172e01,0x31b4f8d4,0x2e013301,0x31b4f8c4,0xf8d4d105,
+0x330131bc,0x31bcf8c4,0xf8d4e004,0x330131c0,0x31c0f8c4,0xf8842300,
+0x462031b8,0xfce4f7ff,0x6920b926,0xf0004629,0xe00bfe2d,0xd1042e02,
+0x46296920,0xfe2cf000,0x68a0e004,0x46294b03,0x47982200,0x81fce8bd,
+0x00020bd6,0x1e005c41,0x4605b570,0x6c836a40,0xe0024798,0xf7ff4628,
+0x6a68fed1,0x47986dc3,0x28004601,0x6a68d1f6,0x47986e43,0x6c436a68,
+0x6a684798,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0xf8851824,
+0x46284106,0xfe30f7ff,0x46c0bd70,0xf8d0b5f0,0xb0e521a4,0x2101460d,
+0x18524606,0x46684c3c,0x47a0af32,0x21014638,0x47a02210,0xf7ff4630,
+0x6a70fc57,0xf8c62400,0x688340f8,0xb1ad4798,0x20f4f8d6,0x4638b192,
+0x4b324621,0xf8c64798,0xe00b40f4,0x20cef8bd,0x30ccf8bd,0xbf2c429a,
+0xa8324668,0x21004b2b,0x47984622,0x21016a70,0x47986ac3,0x28004604,
+0xe00ed1ec,0x88c24668,0x429a8883,0x2100d204,0x4b224622,0xe0044798,
+0x462168b0,0x4b202201,0xf1064798,0x46280528,0x4b1e2100,0x46044798,
+0xd1e72800,0x68436a70,0xe0064798,0x4630690b,0xf002795a,0xf7ff020f,
+0x2100fcd5,0x4b15a832,0x46014798,0xd1f12800,0x8df2e014,0x31a4f8d6,
+0xd90a429a,0x68b04b0e,0x22014621,0xf8d64798,0x330131a8,0x31a8f8c6,
+0x4628e004,0x46222100,0x47984b06,0x21004668,0x47984b06,0x28004604,
+0xb065d1e3,0x46c0bdf0,0x1e003bcd,0x1e0039cd,0x1e005c41,0x1e003ac5,
+0x4605b570,0x68436a40,0x6a684798,0x47986c43,0x6e036a68,0x6a684798,
+0x4105f895,0x3084f8d0,0x18244798,0xf8856a68,0x49264106,0x47986f03,
+0x1180f8d5,0x00f0f8c5,0xf8d5b1c9,0x23022184,0x0202ea81,0xf7fe68e8,
+0xf8d5fb05,0x23021180,0x460a68e8,0xfb1af7fe,0xf8852300,0xf895317c,
+0xb123317b,0xf44f4818,0xf7fd713d,0xf895ff0d,0xb10b3176,0xe0004b15,
+0x68ea4b15,0x6b5361eb,0xd8052b01,0xf0136bd3,0xd0010f04,0xe0002301,
+0xf8852300,0x696a31b9,0xf8852301,0xf8853175,0xf04f3177,0xf8c27380,
+0xf1033100,0x4628437f,0x317af885,0xfa38f7ff,0x21084628,0xfa3af7ff,
+0x46c0bd70,0x00020b0d,0x00020bd6,0xc701ff0f,0x0701ff0f,0x41f0e92d,
+0xb9204605,0xf2404894,0xf7fd3129,0x6a2cfed1,0xf0142600,0x622e4780,
+0x4628d007,0xfd7ef7ff,0xf7ff4628,0x4634ff81,0x2c00e14a,0x696bda2f,
+0xf013685b,0xd0180604,0x3174f895,0x4628b933,0xf7ff4639,0x4628fee7,
+0xfebef7ff,0xf8856928,0xf0007174,0x696afc87,0x68134628,0xf0432102,
+0x60130304,0xf9faf7ff,0x2301e011,0x3174f885,0xf0006928,0x4628fc79,
+0xf7ff4631,0x4628fecb,0xfea2f7ff,0x6813696a,0x0304f023,0xf8956013,
+0xb10e6174,0xe1132400,0x0f01f014,0x4628d007,0xf7ff2101,0x4628feb7,
+0xf7ff2101,0xf014f9d7,0xd0090f02,0xf8852301,0xf8d53177,0xb11b30fc,
+0x46314628,0xf9caf7ff,0x7f80f414,0xf8d5d004,0x33013164,0x3164f8c5,
+0x7f00f414,0xf8d5d01d,0xf8d53168,0x330120f4,0x3168f8c5,0xf8d5b18a,
+0x429330f8,0x4858d104,0x7165f44f,0xfe58f7fd,0x68a84b56,0x10f4f8d5,
+0x47982201,0xf8c52300,0x462830f4,0xf7ff2100,0xf014fe7d,0xd0047f00,
+0x316cf8d5,0xf8c53301,0xf014316c,0xd0046f80,0x3170f8d5,0xf8c53301,
+0x48493170,0x0000ea04,0x4604b908,0xf414e0b4,0xd06e4f7c,0x6080f414,
+0x4607d102,0xe00b4606,0x6d036a68,0x1e074798,0x2701bf18,0x6a436a68,
+0x1e064798,0x2601bf18,0x6f00f414,0x6a68d00b,0x47986d03,0xbf182800,
+0x6a682701,0x47986a43,0xbf182800,0xf4142601,0xd00b5f80,0x6d036a68,
+0x28004798,0x2701bf18,0x6a436a68,0x28004798,0x2601bf18,0x5f00f414,
+0xf8d5d004,0x33013138,0x3138f8c5,0x4f80f414,0xf8d5d009,0x2701313c,
+0xf8c53301,0xf8d5313c,0xf8d5313c,0xf4143138,0xd01a4f00,0x3140f8d5,
+0x20f4f8d5,0xf8c53301,0xb18a3140,0x30f8f8d5,0xd1044293,0xf2404818,
+0xf7fd41b9,0x4b17fdd9,0xf8d568a8,0x220110f4,0x23004798,0x30f4f8c5,
+0xb90f2601,0xe008b90e,0x4628b126,0xf7ff2100,0xb117fdf9,0xf7ff4628,
+0xf014fdcf,0xd0027f80,0xf7ff4628,0xf414fa59,0xd1133390,0xe033461e,
+0x36014628,0xfc9af7ff,0xd10c2e08,0xf4436a2b,0x622b3380,0x46c0e00d,
+0x00020bd6,0x1e005c41,0x0101fc00,0x6a682600,0x47986dc3,0x28004601,
+0x6a68d1e6,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0x2107f895,
+0xb2e31824,0xf8854293,0xd0094106,0x3105f895,0x0302ebc3,0x2b02b2db,
+0x4628d802,0xfbe4f7ff,0xbf942e07,0x24012400,0xb12b8deb,0x31a0f8d5,
+0x4628b913,0xfa50f7ff,0xe8bd4620,0x46c081f0,0xb5702901,0xdd074605,
+0xf8c02300,0xf8c031b4,0xf8c031bc,0xe02331c0,0xf8d54c12,0x8de921a4,
+0x47a04811,0x11a8f8d5,0x47a04810,0x31c0f8d5,0x21bcf8d5,0x11b4f8d5,
+0x47a0480d,0x113cf8d5,0x47a0480c,0x1106f895,0x2107f895,0x47a0480a,
+0xf8d5480a,0xf8d511c4,0xf8d521c8,0x47a031cc,0x46c0bd70,0x1e004461,
+0x00020be1,0x00020bf7,0x00020c0a,0x00020c35,0x00020c51,0x00020c7a,
+0x30fff04f,0x46c04770,0xb5106a83,0xf0006998,0xbd10fbaf,0x4604b510,
+0xf7ff6880,0xb158fe4b,0xf1042100,0x460a001c,0x47984b05,0x4805b938,
+0xf7fd2154,0xe002fd19,0xf7ff68a0,0xbd10f865,0x1e005a21,0x00020d06,
+0x6a84b510,0xb91b68a3,0x21684807,0xfd08f7fd,0xf7ff68a0,0xb128f933,
+0xf7ff68a0,0x4620f84b,0xffd4f7ff,0x46c0bd10,0x00020d06,0xb5106a83,
+0xf0006998,0xbd10fb7f,0xb5106a8b,0x46116998,0xfb44f000,0x46c0bd10,
+0x6844b510,0xf7ff68a0,0x4620f903,0xffbaf7ff,0x46c0bd10,0x4b06b510,
+0x47984604,0x4805b918,0xf7fd2175,0x8ae0fcd9,0x1000f3c0,0x46c0bd10,
+0x1e005ec1,0x00020d41,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,
+0xfcc6f7fd,0x0507f004,0xd00342a5,0x215d4806,0xfcbef7fd,0xf0238af3,
+0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x00020d41,0x4b06b510,
+0x47984604,0x4805b918,0xf7fd2155,0x8ae0fca9,0x0007f000,0x46c0bd10,
+0x1e005ec1,0x00020d41,0x4b0bb570,0x460d4604,0xb9184798,0x21434809,
+0xfc96f7fd,0x429d8aa3,0x4806d903,0xf7fd2144,0x6920fc8f,0x19408aa3,
+0x61201b5b,0xbd7082a3,0x1e005ec1,0x00020d41,0xe92d8a8b,0x2b0341f0,
+0x6880460c,0x690dd934,0x091b782b,0xd12f2b01,0x460878ab,0xf0034f1a,
+0x47b8060f,0x4819b918,0xf7fd218f,0x8ae3fc6d,0x621ff64f,0x0202ea03,
+0xb11682e2,0x1346ea42,0x786982e3,0xf0014620,0xf7ff0107,0x782bff8d,
+0x0f08f013,0x4620d00a,0xb91847b8,0x216b480b,0xfc52f7fd,0xf0438ae3,
+0x82e30308,0x21044620,0xffaaf7ff,0xe0042000,0x22004621,0x47984b04,
+0xe8bd2001,0x46c081f0,0x1e005ec1,0x00020d41,0x1e005c41,0x688a690b,
+0x41f0e92d,0x2b031a9b,0x6887460c,0xf8b1dc37,0x46388014,0x0104f108,
+0x47984b39,0xb9304605,0x46384621,0x4b372201,0x462c4798,0x4620e065,
+0xff6cf7ff,0x46284601,0xff4af7ff,0xf7ff4620,0x4b31ff35,0x46284606,
+0xb9184798,0x217c482f,0xfc0ef7fd,0xb1168aeb,0x0310f043,0xf023e001,
+0x69280310,0x82eb6921,0x30044642,0xfce6f7fe,0x46384621,0x4b232201,
+0x462c4798,0x4608e016,0x47984b21,0x4821b918,0xf7fd2139,0x6923fbf1,
+0x3b0468a2,0xd2034293,0x213a481c,0xfbe8f7fd,0x3b046923,0x8aa36123,
+0x82a33304,0x23106925,0x4620702b,0xfefaf7ff,0x782bb118,0x0304f043,
+0x4620702b,0xff22f7ff,0x70684f0f,0x78ae4620,0xb91847b8,0x2187480d,
+0xfbcaf7fd,0x46208ae3,0x1343f3c3,0x0303ea46,0x47b870ab,0x4807b918,
+0xf7fd21ab,0x8b63fbbd,0x462070eb,0x81f0e8bd,0x1e005c25,0x1e005c41,
+0x1e005ec1,0x00020d41,0xb5104601,0x4b022234,0x47986880,0x46c0bd10,
+0x1e005c15,0x4ff0e92d,0x4688690e,0x7014f8b8,0xb08d68b2,0x2f0f2100,
+0x46826835,0x910b9204,0x9106d803,0x91079105,0x6874e01b,0x041b0c23,
+0xb16b940b,0x04230c1a,0x42970c1b,0xd206930b,0x040df06f,0x9106910b,
+0x91079105,0x4614e0b3,0xf5b0980b,0xd9075f00,0x930b2300,0x93059306,
+0xf06f9307,0xe0a60417,0xbf284284,0x90074620,0x2100b160,0x47984b85,
+0xb1089005,0xe0089006,0xf06f9b05,0x930b041a,0xe0949306,0x92059a07,
+0xb14c9206,0x0210f1a7,0xf1069805,0x42940110,0x4622bf38,0xfc3af7fe,
+0x429d4b79,0x462ed001,0x2c07e00a,0x9b05d9d5,0x685e9a04,0x0202f042,
+0x93053308,0x92043c08,0x19754d72,0x7f99f5b5,0x4635bf88,0x7f83f5b5,
+0xd804d035,0xd0412d02,0xd0102dfd,0xf240e044,0x429d1307,0x3304d01c,
+0xd13d429d,0x0000f8da,0x4a672100,0x737af44f,0x47a04c66,0x9a05e032,
+0x0000f8da,0x78537891,0xea410409,0x78132103,0x43192400,0xea4178d3,
+0xf0006103,0xe046f8f3,0x495d9805,0x4b5d2204,0x46074798,0x2301b9e0,
+0x0004f8da,0x93009905,0x463b4622,0x9805e00b,0x22044955,0x47984b55,
+0x9000b970,0xf8da9905,0x9a0b0004,0xf7feab0b,0xe003fe73,0x0000f8da,
+0xf8def000,0xe0224604,0x93092300,0x9b04930a,0xf013a90a,0xd00a0202,
+0x9300ab09,0x0000f8da,0x9a052301,0x93029101,0x46234631,0xab0be008,
+0x92029300,0x0000f8da,0x9b0b9a05,0x46319101,0xf8d2f000,0xb1084604,
+0x930b9b0a,0x46414635,0x0008f8da,0x4b3a2200,0xf8dd4798,0xf240b02c,
+0x2c007343,0x465fbf0c,0xf1072700,0x429a022c,0x46b8bf94,0x68e3f44f,
+0x0008f8da,0x012cf108,0x47984b30,0xb9204606,0x2153482f,0xfaacf7fd,
+0x4b2ee073,0x091cf108,0xb9184798,0x214d482a,0xfaa2f7fd,0x68f26933,
+0x4293444b,0x4826d903,0xf7fd214e,0xf8a6fa99,0x46309014,0xf7ff210c,
+0x9a04fdf3,0x0c136930,0xf8c06005,0x041bb004,0xf043b10c,0x60830301,
+0x60c49b05,0xf1b8b163,0xd0090f00,0x30104642,0xf7fe4619,0x9a05fb63,
+0x0707ebc8,0x92054442,0xe03546b0,0x7344f240,0xbf34429f,0x461d463d,
+0x0008f8da,0x4b0d4629,0x46044798,0xf8dab9e0,0x46310008,0x4b082201,
+0xe02a4798,0x1e00578d,0xfffeda3e,0x001bebe0,0x000031c5,0x1e005a65,
+0x00020d4a,0x1e0040b9,0x1e005c41,0x1e005c25,0x00020d41,0x1e005ec1,
+0x99056900,0xf7fe462a,0x9b05fb2d,0x4000f8c8,0x9305195b,0x46a01b7f,
+0xb10a9a05,0xd1c52f00,0x0004f8da,0xf7ff4631,0x9b06f885,0x4619b12b,
+0x0008f8da,0x4b029a07,0xb00d4798,0x8ff0e8bd,0x1e005c15,0x46c04770,
+0x46c04770,0x46c04770,0x46c04770,0x6880b510,0xff26f7fd,0x46c0bd10,
+0xb5106803,0x21016898,0xfeecf7fd,0x46c0bd10,0xb5106c03,0xb9234604,
+0xf44f4806,0xf7fd7193,0x6c20fa0b,0x685b6a03,0xb9104798,0xf8842301,
+0xbd103045,0x00020d4f,0x41ffe92d,0x6c034698,0x460f4604,0xf89d4615,
+0xb91b6030,0x2132480c,0xf9f2f7fd,0x0f03f015,0x4809d003,0xf7fd2134,
+0x6c20f9eb,0x6a029b0a,0x9b0b9300,0x93019602,0x46396954,0x4643462a,
+0xb00447a0,0x81f0e8bd,0x00020d4f,0x68c0b510,0xfe30f7ff,0x46c0bd10,
+0xb5704b11,0x4604681b,0x460d4298,0x480fd003,0xf7fd21b1,0x68e0f9c9,
+0xf7ff4629,0xb988fd41,0x4b0b4629,0x47986860,0x46026c21,0x6be06a0b,
+0x479868db,0x6aa3b118,0x62a33301,0x6923e002,0x61233301,0x46c0bd70,
+0x00023c58,0x00020d4f,0x1e005cb1,0xb5704b13,0x4604681b,0x460d4298,
+0x4811d003,0xf7fd2196,0x4629f99f,0x68604b0f,0x46014798,0xf7ff68e0,
+0x4605fd5d,0x6820b178,0xf7fe4629,0xb138ffe5,0x69e28aab,0x696318d2,
+0x330161e2,0xe0026163,0x33016ae3,0x200062e3,0x46c0bd70,0x00023c58,
+0x00020d4f,0x1e005c9d,0x6800b510,0xf80af7ff,0x46c0bd10,0x6800b510,
+0xf80cf7ff,0x46c0bd10,0x00408900,0x46c04770,0xb5108983,0xfbb2460c,
+0xfb03f1f3,0x02092311,0x03fff003,0x4300f043,0x417ff401,0x2200430b,
+0xe00061a3,0x69a03201,0xda032800,0x429a4b07,0xe008d1f8,0x429a4b06,
+0xf010d805,0xd1025f80,0x7040f3c0,0xf04fe001,0xbd1030ff,0x00989680,
+0x0098967f,0xb5708903,0x460d429a,0xd3034614,0x21df4807,0xf938f7fd,
+0x4805b91d,0xf7fd21e0,0x0063f933,0x6300f503,0xb2805ae8,0x46c0bd70,
+0x00020d5e,0x4ff0e92d,0xb0874607,0x91016800,0x461d4614,0xfc42f7fd,
+0x46832100,0xf7fd6838,0x4681fd61,0x4828b920,0x21ddf240,0xf914f7fd,
+0xf7ff4638,0x4621ffa1,0x462a4682,0xf7fea802,0x2600f8bd,0xf016e02d,
+0xd1040f03,0x491fa802,0xf7fe0072,0x9b01f90b,0x4638b933,0x46324649,
+0xffb8f7ff,0xe0164604,0xea4f2400,0x46251806,0x46494638,0x0208eb05,
+0xff82f7ff,0x3ffff1b0,0xf64fd102,0xe00674ff,0xf305fa10,0x43233501,
+0xb29c2d10,0xa802d1ec,0x4622490d,0xf8e6f7fe,0xebb63601,0xd3ce0f5a,
+0x490aa802,0xf8def7fe,0x46596838,0xfd16f7fd,0x98049b02,0x0003ebc0,
+0xe8bdb007,0x46c08ff0,0x00020d5e,0x00020d67,0x00020d70,0x00021250,
+0xe92d6943,0x2b1441f0,0xf3404605,0xf7fd8083,0x4606fbe5,0xd17d2800,
+0xf7fd4628,0x2800fc0b,0x4c3ed078,0x46312224,0xf7fe4620,0x4628f96f,
+0xf7fd6025,0x69abfba3,0xf3c36060,0x2b0143c2,0x2b05d002,0xe065d009,
+0x0320f04f,0xf04f8163,0x81a30340,0x0380f04f,0xf04fe007,0x81630360,
+0x0340f04f,0xf44f81a3,0x462873c0,0xf7fd8123,0x2100fba9,0x46284607,
+0xfcc8f7fd,0xb9184606,0x21ce4827,0xf87cf7fd,0x4a246933,0x68136113,
+0x2b15695b,0x2b18d003,0x2b1bd001,0x4b1fd103,0x621a220c,0x2b17e005,
+0x2b18d001,0x2314dd01,0x4c1a6213,0x6a228923,0x692382e3,0xf4131d11,
+0x82a17f80,0x4620d008,0xf7ff4631,0xf3c0ff17,0x82e0100f,0xe0008320,
+0x4c108321,0x83638923,0xf4136923,0xd00a7f00,0x46206a22,0x32014631,
+0xff04f7ff,0x100ff3c0,0x83a08360,0x8b23e001,0x4c0683a3,0x89234628,
+0x83e34639,0xfc7ef7fd,0xe0004620,0xe8bd2000,0x46c081f0,0x00023c28,
+0x00020d5e,0x41f0e92d,0x46804b13,0xe01e681e,0x68f468b3,0x18e74640,
+0x47984b10,0xe0104605,0x46414620,0x4b0e462a,0xb9304798,0x2b3d5d63,
+0x1c63d103,0xd10d1958,0xf814e008,0x2b003b01,0x42bcd1fb,0x7823d202,
+0xd1e92b00,0x2e006836,0x4630d1de,0x81f0e8bd,0x00023c4c,0x1e0040a9,
+0x1e00d671,0x4ff0e92d,0x9301b0d1,0x03e6f640,0x4604429a,0x92024689,
+0xf06fbf88,0xf2000003,0xf01481f5,0xf0400f03,0x68218259,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93486311,0xf4016861,
+0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,0x6311ea43,0x68a19349,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x934a6311,
+0xf40268e2,0x0e13017f,0x2311ea43,0x6302ea43,0x427ff402,0x2302ea43,
+0x4ad1934b,0xf10d9b48,0x40530c10,0x3000f8cc,0x4ace9b49,0xe344f8df,
+0xf8cc4053,0x9b4a3004,0x4ecc4acb,0xf8cc4053,0x9b4b3008,0xf50d4aca,
+0x40537a94,0x7b96f50d,0x300cf8cc,0x25004667,0x08a0f10d,0x68b8687b,
+0x405868fa,0x100ef855,0x40484050,0x027ff400,0xf4000c12,0x0a1b437f,
+0x5cf45cb1,0x03fff000,0x04095cf2,0xea410e00,0x43112104,0xf8555c32,
+0xea41300c,0xea816102,0xea830303,0xea8343f1,0x613b2371,0x3008f845,
+0x37043504,0xd1d52d80,0x0f03f019,0x81c2f040,0x1000f8d9,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93486311,0x1004f8d9,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93496311,
+0x1008f8d9,0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,
+0x934a6311,0x100cf8d9,0x007ff401,0xea430e0b,0xf4012310,0xea43427f,
+0xea432302,0x934b6301,0x09009802,0xf0009003,0x9f01809a,0x0900f04f,
+0x46659b48,0x3000f8cc,0xf04f9a49,0xf8cc0e00,0xf8da2004,0xf8cc3000,
+0xf8db3008,0xf8cc2000,0x686b200c,0x68ea68a8,0x1008f85e,0x40504058,
+0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,
+0x0e000409,0x2104ea41,0x5c324311,0x300cf85e,0x6102ea41,0x0303ea81,
+0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x0e04f10e,0x3504612b,
+0x0f80f1be,0x9827d1d1,0x9a259b26,0x90489349,0x2000f8ca,0x0e029b24,
+0x3000f8cb,0x0c039949,0x2130f88d,0x3131f88d,0x0e0b0a02,0x0133f88d,
+0xf88d984a,0x0a0b3134,0x2132f88d,0x3136f88d,0x0e030c0a,0x1137f88d,
+0xf88d994b,0x0a033138,0x2135f88d,0x313af88d,0x0e0b0c02,0x2139f88d,
+0x313cf88d,0x0a0b0c0a,0x0f03f017,0x013bf88d,0x213df88d,0x313ef88d,
+0x113ff88d,0x80b5f040,0x683b9a4c,0x603b4053,0x687a9b4d,0x607a405a,
+0x68bb9a4e,0x60bb4053,0x9b4f68fa,0x60fa405a,0xf1099a03,0x37100901,
+0xf47f4591,0x9c01af6d,0x18e40113,0x98029401,0x0e0ff010,0x8091f000,
+0x46659b48,0x3000f8cc,0x27009a49,0x2004f8cc,0x3000f8da,0x3008f8cc,
+0x2000f8db,0x200cf8cc,0x68a8686b,0xf85768ea,0x40581008,0x40484050,
+0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,
+0xea410e00,0x43112104,0xf8575c32,0xea41300c,0xea816102,0xea830303,
+0xea8373b1,0xea8353b1,0xea8333b1,0x37042331,0x3504612b,0xd1d32f80,
+0x9b269827,0x93499a25,0xf8ca9048,0x9b242000,0xf8cb0e02,0x99493000,
+0xf88d0c03,0xf88d2130,0x0a023131,0xf88d0e0b,0x984a0133,0x3134f88d,
+0xf88d0a0b,0xf88d2132,0x0c0a3136,0xf88d0e03,0x994b1137,0x3138f88d,
+0xf88d0a03,0xf88d2135,0x0c02313a,0xf88d0e0b,0xf88d2139,0x0c0a313c,
+0xf88d0a0b,0xf88d113f,0xf88d013b,0xf88d213d,0x2100313e,0x46c0e00c,
+0xa3b1bac6,0x56aa3350,0x677d9197,0x00020df8,0xb27022dc,0x00020d78,
+0xf5019a01,0x5c8b7098,0x2000f81d,0x4053466c,0x548b9a01,0x45713101,
+0x2000d1f2,0xe8bdb051,0xf89d8ff0,0x783b2130,0x703b4053,0x3131f89d,
+0x405a787a,0xf89d707a,0x78bb2132,0x70bb4053,0x3133f89d,0x405a78fa,
+0xf89d70fa,0x793b2134,0x713b4053,0x3135f89d,0x405a797a,0xf89d717a,
+0x79bb2136,0x71bb4053,0x3137f89d,0x405a79fa,0xf89d71fa,0x7a3b2138,
+0x723b4053,0x3139f89d,0x405a7a7a,0xf89d727a,0x7abb213a,0x72bb4053,
+0x313bf89d,0x405a7afa,0xf89d72fa,0x7b3b213c,0x733b4053,0x313df89d,
+0x405a7b7a,0xf89d737a,0x7bbb213e,0x73bb4053,0xf89d7bfa,0x405a313f,
+0xe70973fa,0x24004648,0x7843af48,0x1009f814,0x041b78c2,0x6301ea43,
+0x43137881,0x2301ea43,0x340451e3,0x2c103004,0xe661d1ef,0x25004620,
+0x7843af48,0x78c25d29,0xea43041b,0x78816301,0xea434313,0x51eb2301,
+0x30043504,0xd1f02d10,0x46c0e5c7,0x4ff0e92d,0x9202b0d5,0x18d29301,
+0x3c01f812,0xf812468c,0xf6401c02,0xea4302e6,0x42912101,0xf8dd4604,
+0x9103a178,0xf06fbf88,0xf2000002,0xf014826a,0xf0400f03,0x682183d2,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93506311,
+0xf4016861,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,0x6311ea43,
+0x68a19351,0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,
+0x93526311,0xf40168e1,0x060b407f,0x2300ea43,0x027ff401,0x2312ea43,
+0x6311ea43,0x4ab19353,0xf10d9b50,0x40530810,0x3000f8c8,0x4aae9b51,
+0xe2c4f8df,0xf8c84053,0x9b523004,0x4eac4aab,0xf8c84053,0x9b533008,
+0x46474aaa,0xf8c84053,0x2500300c,0x09a0f10d,0x68b8687b,0x405868fa,
+0x100ef855,0x40484050,0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,
+0x03fff000,0x04095cf2,0xea410e00,0x43112104,0xf8555c32,0xea413008,
+0xea816102,0xea830303,0xea8343f1,0x613b2371,0x3009f845,0x37043504,
+0xd1d52d80,0x0f03f01c,0x833af040,0x1000f8dc,0x407ff401,0xf401060b,
+0xea43027f,0xea432300,0xea432312,0x93506311,0x1004f8dc,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93516311,0x1008f8dc,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93526311,
+0x100cf8dc,0x407ff401,0xea43060b,0xf4012300,0xea43027f,0xea432312,
+0x93536311,0x46459b50,0x3000f8c8,0x27009a51,0x2004f8c8,0xf8c89b52,
+0x9a533008,0x200cf8c8,0x68a8686b,0xf85768ea,0x40581009,0x40484050,
+0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,
+0xea410e00,0x43112104,0xf8575c32,0xea413008,0xea816102,0xea830303,
+0xea8373b1,0xea8353b1,0xea8333b1,0x37042331,0x3504612b,0xd1d32f80,
+0x99029b27,0x9b26934c,0x1b11ea5f,0x9b25934d,0x9b24934e,0xf000934f,
+0x9f018093,0x0c00f04f,0x0f03f017,0x8299f040,0xf4016839,0x060b407f,
+0x027ff401,0x2300ea43,0x2312ea43,0xea439a4c,0x405a6311,0x68799250,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0x9a4d2312,0x6311ea43,
+0x9251405a,0xf40168b9,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,
+0xea439a4e,0x405a6311,0x68f99252,0xf4019a4f,0x021b437f,0x6311ea43,
+0x6301ea43,0x017ff401,0x2311ea43,0x9253405a,0x37109b50,0x3000f8c8,
+0x46459a51,0x2004f8c8,0xf04f9b52,0xf8c80e00,0x9a533008,0x200cf8c8,
+0x68a8686b,0xf85e68ea,0x40581009,0x40484050,0x027ff400,0xf4000c12,
+0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,0xea410e00,0x43112104,
+0xf85e5c32,0xea413008,0xea816102,0xea830303,0xea8373b1,0xea8353b1,
+0xea8333b1,0xf10e2331,0x612b0e04,0xf1be3504,0xd1d10f80,0x9a269b27,
+0x924d934c,0x9a249b25,0x0c01f10c,0x934e45dc,0xf47f924f,0x9a01af75,
+0x130bea4f,0x920118d2,0xf0139b02,0xf040040f,0xe00b8160,0xa3b1bac6,
+0x56aa3350,0x677d9197,0x00020df8,0xb27022dc,0x00020d78,0xea5f9903,
+0xf0001c11,0x27008090,0x0f03f01a,0x81d4f040,0x1000f8da,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0x9a4c2312,0x6311ea43,0x9250405a,
+0x1004f8da,0x407ff401,0xf401060b,0xea43027f,0xea432300,0x9a4d2312,
+0x6311ea43,0x9251405a,0x1008f8da,0x407ff401,0xf401060b,0xea43027f,
+0xea432300,0x9a4e2312,0x6311ea43,0x9252405a,0x100cf8da,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0x9a4f2312,0x6311ea43,0x9253405a,
+0xf10a9b50,0xf8c80a10,0x9a513000,0xf8c84645,0x9b522004,0x0e00f04f,
+0x3008f8c8,0xf8c89a53,0x686b200c,0x68ea68a8,0x1009f85e,0x40504058,
+0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,
+0x0e000409,0x2104ea41,0x5c324311,0x3008f85e,0x6102ea41,0x0303ea81,
+0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x0e04f10e,0x3504612b,
+0x0f80f1be,0x9b27d1d1,0x934c9a26,0x9b25924d,0x37019a24,0x934e45bc,
+0xf47f924f,0x9a03af71,0x0b0ff012,0x994cd12c,0x0004f10a,0xf88a0e0b,
+0x0c0a3000,0xf88a0a0b,0xf88a2001,0xf88a3002,0x994d1003,0x0e0b1d04,
+0x3004f88a,0x0a0b0c0a,0x70837042,0x994e70c1,0x71030e0b,0x0a0b0c0a,
+0x70a37062,0x994f70e1,0x0e0b1d20,0x0c0a7123,0x70420a0b,0x70c17083,
+0xb0552000,0x8ff0e8bd,0x4628ad48,0x465a4651,0xfbd8f7fd,0x000beb05,
+0xf1cb2100,0xf7fd0210,0x9948fbb1,0xf4014645,0x060b407f,0x027ff401,
+0x2300ea43,0x2312ea43,0xea439a4c,0x99496311,0xf4014053,0x9350407f,
+0xf401060b,0xea43027f,0xea432300,0x9a4d2312,0x6311ea43,0x4053994a,
+0x407ff401,0x060b9351,0x027ff401,0x2300ea43,0x2312ea43,0xea439a4e,
+0x994b6311,0x93524053,0x407ff401,0xf401060b,0xea43027f,0xea432300,
+0x9a4f2312,0x6311ea43,0x9a504053,0xf8c89353,0x9b512000,0xf8c82700,
+0x9a523004,0x2008f8c8,0xf8c89b53,0x686b300c,0x68ea68a8,0x1009f857,
+0x40504058,0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,
+0x5cf203ff,0x0e000409,0x2104ea41,0x5c324311,0x3008f857,0x6102ea41,
+0x0303ea81,0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x612b3704,
+0x2f803504,0x9b27d1d3,0x934c9a26,0x9b25924d,0x44da9a24,0x924f934e,
+0xad48e745,0x99014628,0xf7fd4622,0x1928fb4b,0xf1c42100,0xf7fd0210,
+0x9948fb25,0xf4014645,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,
+0xea439a4c,0x99496311,0xf4014053,0x9350407f,0xf401060b,0xea43027f,
+0xea432300,0x9a4d2312,0x6311ea43,0x4053994a,0x407ff401,0x060b9351,
+0x027ff401,0x2300ea43,0x2312ea43,0xea439a4e,0x994b6311,0x93524053,
+0x007ff401,0xf4010e0b,0xea43427f,0xea432310,0x9a4f2302,0x6301ea43,
+0x9a504053,0xf8c89353,0x9b512000,0xf8c82700,0x9a523004,0x2008f8c8,
+0xf8c89b53,0x686b300c,0x68ea68a8,0x1009f857,0x40504058,0xf4004048,
+0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,0x0e000409,
+0x2104ea41,0x5c324311,0x3008f857,0x6102ea41,0x0303ea81,0x73b1ea83,
+0x53b1ea83,0x33b1ea83,0x2331ea83,0x612b3704,0x2f803504,0x9b27d1d3,
+0x934c9a26,0x9b25924d,0x934e9a24,0xe621924f,0x46212400,0x7ea0f50d,
+0x0089ad4c,0x000aeb01,0x200af811,0x784178c3,0x6302ea43,0xea437882,
+0xf8554301,0xea431024,0x404b2302,0x3024f84e,0x2c043401,0xd1e84621,
+0x2400e64e,0xf50d4621,0xad4c7ea0,0x19c80089,0x78c35dca,0xea437841,
+0x78826302,0x4301ea43,0x1024f855,0x2302ea43,0xf84e404b,0x34013024,
+0x46212c04,0xe587d1ea,0x46212400,0x7ea0f50d,0xeb010089,0xf811000c,
+0x78c3200c,0xea437841,0x78826302,0x4301ea43,0x2302ea43,0x3024f84e,
+0x2c043401,0xd1eb4621,0x2500e4e4,0xf50d4629,0x00897ea0,0x5d0a1908,
+0x784178c3,0x6302ea43,0xea437882,0xea434301,0xf84e2302,0x35013025,
+0x46292d04,0xe44ad1ed,0x4ff0e92d,0xf10db09b,0x461c0826,0x460f4606,
+0x21004615,0x46402222,0xfa30f7fd,0x78227863,0x2003ea42,0x010cf000,
+0xd0042908,0x0001f06f,0xe8bdb01b,0xf4108ff0,0xd0f74f80,0x0380f000,
+0xbf0c2b00,0x2202461a,0x92079206,0x7240f400,0x212abf0c,0xf5b2212c,
+0xbf147f40,0x0900f04f,0x0901f04f,0x0f00f1b9,0x46cabf0c,0x0a06f04f,
+0x0b01eb0a,0x0210f10b,0xd2d742aa,0x738ff24c,0x0303ea00,0x3026f88d,
+0x0a1b1d21,0xa80a220c,0x3027f88d,0xfa12f7fd,0xf10d7da3,0xf0030036,
+0xf88d030f,0xf1043034,0x0a1b0110,0xf88d2206,0xf7fd3035,0xf1b9fa03,
+0xd15e0f00,0x0918f104,0x2b009b06,0xf10dd161,0x92050242,0x0c43f10d,
+0x0e44f10d,0x0145f10d,0xeb099b07,0xf8120203,0xeb02300a,0x9a05000a,
+0x0901f04f,0x78427013,0x2000f88c,0x0c05ebcb,0x0210f1ac,0xf88e0a13,
+0x700a3000,0xf88d7883,0xab123057,0x9a039303,0x0302ebc9,0x0209eb00,
+0xf1097891,0xf1b90901,0x73d90f10,0xeb04d1f3,0x46300a0b,0xf10ca912,
+0x46530210,0xf8def7ff,0xf47f2800,0x1964af77,0x4621ad16,0x4628464a,
+0xf9b8f7fd,0x46389b06,0x0220f103,0x4643a912,0xa000f8cd,0xfb4af7ff,
+0xf47f2800,0x4620af63,0x464a4629,0x47984b10,0xbf182800,0x0002f06f,
+0xf104e75a,0xa80f0918,0x22064649,0xf99af7fd,0xf819e79a,0xeb0a300a,
+0xf88d0204,0x7e533042,0x0c45f10d,0x3043f88d,0x0e46f10d,0xf10dab11,
+0x93050147,0x46c0e794,0x1e00d671,0x4ff0e92d,0xf10db095,0x461c071e,
+0x460e4680,0x21004615,0x46382222,0xf956f7fd,0x78227863,0x2003ea42,
+0x010cf000,0xd0042908,0x30fff04f,0xe8bdb015,0xf4108ff0,0xd0f74f80,
+0x0380f000,0xbf0c2b00,0x2202461a,0x92059204,0x7240f400,0x212abf0c,
+0xf5b2212c,0xbf147f40,0x0900f04f,0x0901f04f,0x0f00f1b9,0x46cabf0c,
+0x0a06f04f,0x0b01eb0a,0xd2d945ab,0x738ff24c,0x0303ea00,0x301ef88d,
+0x0a1b1d21,0xa808220c,0x301ff88d,0xf93af7fd,0xf10d7da3,0xf003002e,
+0xf88d030f,0xf104302c,0x0a1b0110,0xf88d2206,0xf7fd302d,0xf1b9f92b,
+0xd1460f00,0x0918f104,0x2b009b04,0xf10dd149,0x9203023a,0x0c3bf10d,
+0xf10da80f,0x9b05013d,0x0505ebcb,0x0203eb09,0x300af812,0x0e0aeb02,
+0xf10d9a03,0x70130940,0x2001f89e,0xf88c0a2b,0x70032000,0xf89e700d,
+0x20013002,0x304ff88d,0x0200eb0e,0x0309ebc0,0x30017891,0x73d92810,
+0x9b04d1f6,0xf103445c,0x46300220,0x463b4649,0xf7ff9400,0x2800fa8b,
+0xaf7ef47f,0x46494640,0x0210f105,0xf7ff4623,0x2800f801,0xaf76f43f,
+0xf104e772,0xa80d0918,0x22064649,0xf8daf7fd,0xf819e7b2,0xeb0a300a,
+0xf88d0204,0x7e53303a,0x0c3df10d,0x303bf88d,0x003ef10d,0xf10dab0f,
+0x9303013f,0x46c0e7ab,0x47702000,0x47706880,0xb5106883,0xb1206b58,
+0x699b6a03,0x4798b10b,0x4803e004,0x3172f240,0xffcef7fb,0x46c0bd10,
+0x00020ef8,0xb5106803,0xb9234604,0xf44f4807,0xf7fb71e2,0x68e3ffc1,
+0x4804b923,0x71e2f44f,0xffbaf7fb,0x686068e3,0xbd104798,0x00020ef8,
+0x6803b510,0x7c584604,0x6860b118,0xf0062101,0x6823f97d,0xb1837c5b,
+0x2100b160,0x0038f104,0x4b06460a,0xb9404798,0xf2404805,0xf7fb219b,
+0xe002ff9b,0xf0006860,0xbd10fe81,0x1e005a21,0x00020ef8,0x6a84b513,
+0x0107f10d,0xf0026860,0xb128f9e9,0x3007f89d,0x4620b113,0xffd0f7ff,
+0x46c0bd1c,0x6840b510,0xfe68f000,0x46c0bd10,0x6a83b507,0x92002200,
+0x21026858,0xf0074613,0xbd0ef931,0x47ffe92d,0xf46f4699,0x440b4309,
+0x46174688,0x468a6a85,0xd80a2b0a,0xf003e8df,0x2c29130d,0x64615c57,
+0x00200667,0x08a2f04f,0x2000e074,0x3afff04f,0x2200e071,0xf8cd9700,
+0x92029004,0x2301e005,0xf8cd9700,0x93029004,0x92032200,0x49386868,
+0xf0074613,0xe05ef867,0x97002200,0x9004f8cd,0x92039202,0x49336868,
+0xf240e7f2,0xe02d53dc,0x7c5b682b,0x6868b113,0x47984b2f,0x2400682a,
+0x33e0f8d2,0x612b62ac,0x33a4f8d2,0x616b62ec,0x33e4f8d2,0x61ab4638,
+0x33a8f8d2,0x0110f105,0xf8d261eb,0x622b33e8,0x33b0f8d2,0xf8d2626b,
+0xf1b93570,0xbf340f24,0x2224464a,0xf7fc632b,0x4620fff5,0x682be027,
+0x3022f893,0xe021603b,0x683b682a,0x3022f882,0xf04fe01c,0xe0190809,
+0x080af04f,0x682ae016,0x24002306,0xf3f3fb99,0xf8c24626,0xe0083114,
+0xfb042206,0x19f11002,0xf7fc3052,0x3401ffd3,0x68293606,0x3114f8d1,
+0xd3f1429c,0x45d02000,0x2300d007,0x68689300,0x463a4641,0xf007464b,
+0xb004f899,0x87f0e8bd,0x00020f01,0x00020f0f,0x0001d585,0x6a8cb510,
+0x68234611,0x4b056c98,0x68624798,0x43ecf243,0x58d04601,0xf9faf00c,
+0x46c0bd10,0x1e005c9d,0xe92d6883,0x460641f0,0x69106b5f,0x89824615,
+0xd04a2f00,0x036cf648,0xd026429a,0xf0136afb,0xd0220f01,0xb3027b72,
+0x0f01f012,0x7803d005,0x0f01f013,0x2301d101,0xf012e011,0xd00e0302,
+0x78427803,0x401a7901,0x40137883,0x401a78c2,0x40117943,0x2bff400b,
+0x2300bf14,0x461a2301,0x6833b91b,0x6c984629,0x6833e028,0x6c984629,
+0x47984b14,0x46044b14,0x5027f895,0xb9184798,0x21b34812,0xfe7cf7fb,
+0xb26b8b62,0x02fff022,0x83634313,0x68b06a3b,0x463968db,0x47984622,
+0x4620b170,0x47984b0a,0x4808e00a,0x3131f240,0xfe66f7fb,0x46296833,
+0x463a6c98,0x47984b05,0x81f0e8bd,0x1e005cb1,0x1e005ec1,0x00020ef8,
+0x1e005e51,0x1e005c41,0x4a06b507,0x92006803,0x46084a05,0x681a9201,
+0x4b054904,0xfe52f7fc,0x46c0bd0e,0x00020fb1,0x00020f59,0x00020f8d,
+0x00020fa5,0x6803b510,0xb1137c5b,0xf0026840,0xbd10fe3d,0x6a80b510,
+0xfff4f7ff,0xbd102000,0x6803b510,0x7c5c6842,0x2400b10c,0x4b08e00e,
+0xb11b781b,0xf0024610,0xe007fb6d,0x43ecf243,0xf02158d0,0x4604fbd9,
+0xfdacf7fb,0xbd104620,0x00023af6,0x6840b510,0xfb0ef000,0x46c0bd10,
+0x6840b510,0xfa98f001,0x46c0bd10,0x4b09b510,0x78194604,0x2238b969,
+0x0038f100,0xfec6f7fc,0x63e44b05,0x46206423,0xfbccf020,0xf0216860,
+0xbd10f835,0x00023af6,0x00004a19,0x6844b510,0x7c5b6823,0x6860b12b,
+0xf86cf002,0xf7ff4620,0xbd10fe33,0x03fff000,0xea400a00,0x47702003,
+0xf4004602,0x0600437f,0x2003ea40,0x037ff402,0x2013ea40,0x6012ea40,
+0x46c04770,0x78007843,0x2003ea40,0x46c04770,0x78434602,0x04007880,
+0x2003ea40,0x43187813,0xea4078d3,0x47706003,0x3d68f890,0xf8d0bb0b,
+0x789b37f8,0xf890b9eb,0xb9d33d5f,0x13dcf243,0xb9b358c3,0x3d5cf890,
+0xf890b99b,0xb9833d62,0x43abf243,0xb9635cc3,0x381df890,0xf641b94b,
+0x58c3030c,0xf890b92b,0x1e183d65,0x2001bf18,0x2001e000,0x46c04770,
+0x47702000,0x43ecf243,0xf89358c3,0x4770021d,0xf890b510,0xb31b3d5e,
+0x3d5df890,0xf890bb03,0xb1eb3023,0x3024f890,0xf243b1d3,0x5ac353d2,
+0xf243b163,0x58c253c8,0x5352f5a3,0xea023b41,0xb11b0303,0x2390f642,
+0xb14b5cc3,0x3d67f890,0xf890b133,0xf1d33d3c,0xbf380301,0xe0002300,
+0xb2dc2300,0x3d68f890,0xf8d0bb23,0x789b37f8,0xf890bb03,0xb9eb3d5f,
+0x13dcf243,0xb9cb58c3,0x3d5cf890,0xf890b9b3,0xb99b3d62,0x43abf243,
+0xb97b5cc3,0x381df890,0xf641b963,0x58c3030c,0xf890b943,0xb92b3d65,
+0x37c8f8d0,0xbf181e19,0xe0002101,0xf8d02101,0xf8d3380c,0xf3c00120,
+0x429c6340,0x2200bf14,0xb1242201,0xf010b119,0xbf086380,0x4610461a,
+0x46c0bd10,0x47702001,0xf6422200,0xb5104314,0x2dbcf8c0,0x460454c2,
+0xfff4f7ff,0x0d11f884,0x46c0bd10,0xd9022902,0x001cf06f,0xb139e00e,
+0x3848f8d0,0x4299685b,0xf06fd002,0xe005000c,0xbf181e0b,0xf8802301,
+0x20003cfc,0x46c04770,0x0df2f8b0,0x46c04770,0x41f0e92d,0x549af500,
+0x46072600,0x46353410,0xb1136823,0x47986860,0x35011836,0x2d083414,
+0xf8d7d1f6,0xf9b22844,0xf9b23024,0x18c00026,0x3028f9b2,0xf9b218c0,
+0x18c0302a,0xe8bd1830,0x46c081f0,0xf44169d1,0x61d17100,0x180cf8d0,
+0x1180f8d1,0x6293185b,0x46c04770,0x03f3f248,0xd1014299,0xe0052001,
+0x1337f248,0xbf144299,0x20012000,0x46c04770,0x468cb530,0x461d4604,
+0x460ab10a,0xf8d0e027,0x7b0b1848,0xf642b19b,0x5cc333dc,0xf01cb17b,
+0xd1096f00,0x037ff00c,0xd0082b02,0xd0062b04,0xd0042b0b,0xd0022b16,
+0x20b6f891,0xf01ce00f,0xf00c6f00,0xd0060e7f,0x23144a1a,0x2303fb0e,
+0x18cb7c5b,0xeb01e001,0xf893030e,0xf3cc20a0,0x3b042302,0xf4222b01,
+0xd80f60e0,0x6f00f012,0xf002d109,0x2b02037f,0x2b04d008,0x2b0bd006,
+0x2b16d004,0xf440d002,0xe00160a0,0x2005ea40,0x6f00f010,0x4a08d10d,
+0x037ff000,0x2b0056d3,0xf8d4da07,0xf4202848,0xf8925360,0xea432045,
+0xbd3020c2,0x1e00c744,0x1e00c634,0x380cf8d0,0x72a0f503,0xf0136813,
+0xd1fb0f08,0x0302f04f,0x47708013,0x46c04770,0x46c04770,0xf241b570,
+0xf24134ef,0x5d4335f0,0x46065d02,0x2203ea42,0x0301f011,0x2320bf18,
+0x0260f022,0x0102f011,0x2140bf18,0x43194313,0x0a095501,0x7c435541,
+0xf7ffb12b,0x4630ffdf,0xf7ff2101,0xbd70ffdd,0x30fff04f,0x46c04770,
+0xb5102a2f,0xd8024696,0x000df06f,0xf8b0e02d,0x600b3826,0x3828f8b0,
+0xf8d0604b,0x681c3848,0x8a227ca3,0xea43071b,0x68823302,0x6b53608b,
+0x0f3bf1be,0x684360cb,0x6a53610b,0x6a93614b,0xf8b0618b,0x61cb3384,
+0x382cf8d0,0x4b07624b,0x6853620b,0x6b13628b,0xd90562cb,0x630b6823,
+0x634b6863,0x638b68e3,0xbd102000,0x04da0000,0x46c04770,0x46c04770,
+0x43a9f243,0xb94256c2,0x54c23b01,0x41a0f243,0x50c23b04,0xb1035c43,
+0x47705442,0xe92d6b43,0x469641f0,0x2507f3c2,0xf002460e,0xf3ce027f,
+0xb18317c0,0x2d03b17f,0x2a20d840,0xf8b0d107,0xf4033324,0xf5b36340,
+0xd1376f40,0x2a07e009,0x2503d907,0x4b1be016,0x047ff002,0x2b00571b,
+0x2d01da02,0xe00cd82a,0xd0052c02,0xd0032c04,0xd0012c0b,0xd1212c16,
+0x2b026873,0xb9edd11e,0xb125e005,0x4319f642,0x2b015cc3,0x4611d016,
+0xf042b10f,0xea416100,0xf41e25c5,0xbf180f00,0x0500f445,0x4629b12a,
+0x23016872,0x47a04c06,0xf045b120,0x20004300,0xe00163f3,0x001cf06f,
+0x81f0e8bd,0x1e00c634,0x0001d375,0x0810f8d0,0x46c04770,0xb18b6b43,
+0xf8802901,0xd005103c,0x3ffff1b1,0xf890d106,0xb11b3b98,0x52a1f500,
+0xe0022301,0x52a1f500,0x70132300,0x46c04770,0xb17b69c3,0x5c9a4b08,
+0x5c9a4b08,0x02c2eb00,0x3658f8d2,0xf8c23301,0xf8d23658,0x18cb365c,
+0x365cf8c2,0x46c04770,0x000238e6,0x00021010,0xb5102806,0xd9014614,
+0xe0082000,0xf8134b04,0xeb032020,0x885b0380,0x2001700a,0xbd108023,
+0x00020ff4,0x3848f8d0,0x47706858,0x3848f8d0,0x47706818,0x3848f8d0,
+0x280cf8d0,0x1134f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020003,
+0xb1a9b510,0x1328f8d0,0xe00d2200,0xf8931883,0xf003332c,0x2b02037f,
+0x2b04d005,0x2b0bd003,0x2b16d001,0x3201d104,0xd1ef428a,0xe000211f,
+0xf7ff210f,0xbd10ffd7,0x3848f8d0,0x280cf8d0,0x1136f8a3,0xf8c24b02,
+0xf8c23160,0x47701164,0x00020004,0x0830f8d0,0x40c6f3c0,0x47700240,
+0x3844f8d0,0xb12b7a1b,0x380cf8d0,0x1d04f8c0,0x112cf8c3,0x46c04770,
+0x0381eb00,0x4604b570,0x0778f8d3,0x6983460d,0xb1484798,0x380cf8d4,
+0x2150f8d3,0x40ab2301,0xbf144213,0x20012000,0x46c0bd70,0x2101b510,
+0xffe6f7ff,0x46c0bd10,0x375cf8d0,0x4770711a,0xf243b510,0x5cc343d9,
+0xe045f891,0xf642b93b,0x5cc34319,0xd0022b01,0x2044f891,0x2200e000,
+0xf8814596,0xd0022045,0xf7ff6889,0x2000ffe5,0x46c0bd10,0x380cf8d0,
+0x0180f8d3,0xf8d36008,0x60133184,0x46c04770,0x460cb513,0xa901466a,
+0xfff0f7ff,0x0c139a01,0x041b0412,0xea440c12,0x42940003,0xf5a0bf88,
+0xbd1c3080,0x0f01f011,0x460cb570,0xf8d04616,0xd004580c,0xf24b4808,
+0xf7fb519f,0x08a3fa95,0x3380f443,0x0f02f014,0x3160f8c5,0xf8a5bf14,
+0xf8a56166,0xbd706164,0x00021040,0x0f01f011,0x41f0e92d,0x460e4680,
+0x461d4617,0x480dd004,0x51e4f24b,0xfa78f7fb,0x0f01f015,0x4809d004,
+0x51e5f24b,0xfa70f7fb,0xdd082d00,0x19a12400,0x463a4640,0xf7ff3402,
+0x42acffc5,0xe8bddbf7,0x46c081f0,0x00021040,0x0f01f011,0x41f0e92d,
+0x460f4680,0x461d4616,0x480fd004,0x51b5f24b,0xfa52f7fb,0x0f01f015,
+0x480bd004,0x51b6f24b,0xfa4af7fb,0xdd0c2d00,0x19332400,0x785b5da2,
+0x464019e1,0x2203ea42,0xf7ff3402,0x42acff9b,0xe8bddbf3,0x46c081f0,
+0x00021040,0x2208b573,0x460d4606,0x49074668,0xfb14f7fc,0xf83d2400,
+0x5b621004,0x34024630,0xff84f7ff,0xd1f62c08,0x46c0bd7c,0x0002186c,
+0x460cb570,0xbf0c2a00,0x21b421a4,0x46062c64,0x46184615,0xf06fd902,
+0xe016001c,0x4622b90c,0xf1c4e004,0x011b0364,0xf2f4fb93,0x4630b118,
+0xf7ffb292,0xb125ff63,0x635cf243,0x52f42000,0xf243e003,0x52f4635e,
+0xbd704628,0x41f0e92d,0x460c4606,0x0725f101,0xe00d2500,0xf893192b,
+0x5d7a3026,0x71b0f505,0x2203eb02,0xb2924630,0xff44f7ff,0xb29d1cab,
+0x2024f894,0xd3ed4295,0x21484630,0xff3af7ff,0x81f0e8bd,0xf890b510,
+0xf8904d6b,0x21b62d6a,0x2204ea42,0xff2ef7ff,0x46c0bd10,0x41f0e92d,
+0x22004616,0x4607460d,0x1018f99d,0x469862f2,0xf8d0b133,0xeb022844,
+0x8c930245,0x849318cb,0xd1092d04,0x21a86933,0x404cf893,0x204df893,
+0x2202ea44,0xff0ef7ff,0x0385eb07,0x0778f8d3,0x6a034631,0x47984642,
+0x81f0e8bd,0xf890b510,0xf8d02023,0x2a00380c,0x2202bf0c,0xf8a322fa,
+0x21962612,0xfef6f7ff,0x46c0bd10,0xf8d0b510,0xb131380c,0x2207f240,
+0x2684f8a3,0x22092110,0xf240e005,0xf8a32212,0x21102684,0xf7ff2214,
+0xbd10fee1,0x0f01f011,0x460cb570,0x580cf8d0,0x4809d004,0x518cf24b,
+0xf976f7fb,0xf44308a3,0xf8c53380,0xf0143160,0xbf140f02,0x3166f8b5,
+0x3164f8b5,0xbd70b298,0x00021040,0xb510680b,0x460c2b34,0x2192d80b,
+0xffdcf7ff,0xb2800040,0x6823b128,0x0343eb00,0x60232001,0x2000e000,
+0x46c0bd10,0x2154b510,0xf7ff4604,0xf243ffcb,0x58e3137c,0xf0134602,
+0xd0056f00,0x33e4f241,0xf0035ce3,0xe00f0303,0x037ff003,0xd0082b02,
+0xd0062b04,0xd0042b0b,0x0016f1b3,0x2001bf18,0x2000e000,0x0303f000,
+0x0003f002,0xbf144298,0x20012000,0x46c0bd10,0xf642b570,0x2154431a,
+0x5ac44605,0xff9ef7ff,0x7070f420,0x21544304,0xb2a24628,0xfe76f7ff,
+0x46c0bd70,0x3d08f8d0,0x4604b510,0x4807b923,0x31b7f24b,0xf90cf7fb,
+0x2d08f8d4,0x380cf8d4,0x2d04f8c4,0x212cf8c3,0x46c0bd10,0x00021040,
+0xb570290e,0x460e4604,0xdd074615,0x2b046843,0x480fd004,0x5144f64a,
+0xf8f2f7fb,0xf8d4786b,0x782c080c,0xea4478a9,0x78eb2403,0xea41792a,
+0x796b2103,0x2203ea42,0x0320f046,0xf8a0b29b,0xf8a03420,0xf8a04422,
+0xf8a01422,0xbd702422,0x00021040,0x5354f500,0x42993334,0x460ab510,
+0x2103d103,0xf7ff32d4,0xbd10ffcb,0x2103b510,0xf7ff4a01,0xbd10ffc5,
+0x00021016,0xb5706843,0x460e2b04,0xf8d04614,0xd804580c,0xf64a4814,
+0xf7fb5127,0x2e31f8b5,0x4811d904,0x5128f64a,0xf8aef7fb,0x78e178a2,
+0x04127823,0xea427860,0x431a6201,0x2200ea42,0x79207963,0x2003ea40,
+0xf4430073,0x33012180,0x2380f443,0x1160f8c5,0x2164f8c5,0x3160f8c5,
+0x0164f8a5,0x46c0bd70,0x00021040,0x3088f8d0,0x4219b570,0x460d4604,
+0x480ad104,0x41e4f64a,0xf882f7fb,0x3088f8d4,0x0305ea23,0x3088f8c4,
+0xf8d4b93b,0xf0133084,0xd1026f80,0x4b024620,0xbd704798,0x00021040,
+0x0001d459,0x0381eb00,0x4604b570,0x0778f8d3,0xb108460d,0x47986943,
+0x17c1f894,0x2301b159,0xea2140ab,0xf8840303,0xb92337c1,0x60e8f504,
+0xf7ff2108,0xbd70ffc7,0x43cdb570,0x4604422a,0xd0044616,0xf64a4809,
+0xf7fb41aa,0xf8d4f849,0xea0527c4,0xea430302,0x42910106,0xf8c4d005,
+0xf50417c4,0x4b0260e8,0xbd704798,0x00021040,0x0001d459,0xf8d0b570,
+0x4606580c,0x4120f8d5,0x0f04f014,0x4823d004,0x6177f24b,0xf828f7fb,
+0x0f01f014,0x481fd004,0x6178f24b,0xf820f7fb,0x0f02f014,0x481bd104,
+0x6179f24b,0xf818f7fb,0x46302101,0xf7ff460a,0x2301ffbf,0x3128f8c5,
+0x4120f8d5,0x0f04f014,0x4812d004,0x6186f24b,0xf806f7fb,0x0f01f014,
+0x480ed104,0x6187f24b,0xfffef7fa,0x0f02f014,0x480ad104,0x6188f24b,
+0xfff6f7fa,0x3128f8d5,0x0f01f013,0x4805d004,0x618bf24b,0xffecf7fa,
+0x60e8f506,0xf7ff2104,0xbd70ff59,0x00021040,0x380cf8d0,0xf8d3b510,
+0xf0233120,0xf8904280,0xf4223023,0xb11b22c0,0x4280f042,0x3200f442,
+0x30e4f8d1,0x0f40f013,0xf891d007,0xb1133046,0x6200f042,0xf022e001,
+0xf04f6200,0xf7ff31ff,0xbd10ff6f,0xb5107c03,0xf890b12b,0xb9133d50,
+0x7280f04f,0x2200e000,0x71a0f04f,0xff60f7ff,0x46c0bd10,0xf8d0b510,
+0xf0333d3c,0xbf1a02ff,0x1180f44f,0xf44f460a,0xf7ff1180,0xbd10ff51,
+0xb5102300,0x3d3df880,0xf7ff4604,0xf44fffeb,0x46203100,0xf7ff460a,
+0xbd10ff43,0x41f3e92d,0x461d4616,0x46042208,0x4668460f,0xf8dd4930,
+0xf7fc8020,0xea35f86f,0xd0040206,0xf64a482d,0xf7fa4163,0x2f03ff81,
+0x482ad904,0x4164f64a,0xff7af7fa,0x0f03f1b8,0xe8dfd80d,0x0502f008,
+0xf8d40208,0xe00c1848,0x613cf504,0xf504e009,0x31046128,0x481fe005,
+0x4175f64a,0xff64f7fa,0xb1f1e01f,0x0c47ea4f,0x0201eb0c,0x0070f8b2,
+0x0306ea20,0x0e05ea43,0x3844f8d4,0xe070f8a2,0xb1737a1b,0xd00c4586,
+0x3848f8d4,0xd1084299,0xeb0caa02,0x46200302,0x1c08f833,0xf7ff4672,
+0xf1b8fca1,0xd1100f03,0x0147eb04,0x3af4f8b1,0xb29243f2,0x0303ea02,
+0xf8a1432b,0xf8b13af4,0x401a3c30,0xf8a1432a,0xe8bd2c30,0x46c081fc,
+0x00021874,0x00021040,0x3814f8d0,0x2b03b513,0xd112460c,0xf990b151,
+0xf44f3326,0x21027202,0xbf0c2b00,0x46132308,0xe0049100,0x91002102,
+0x7202f44f,0xf7ff4623,0xbd1cff79,0x4602b507,0xb159468e,0xf8802300,
+0x33013d44,0x3d43f880,0x33022280,0x21029300,0xe0064613,0xf8822303,
+0x93001d43,0x22802102,0xf7ff4673,0xbd0eff5f,0x7c43b570,0x460d4604,
+0x480ab123,0x0168f24a,0xfeeaf7fa,0xf06fb115,0xe00a0001,0x338cf8d4,
+0xf0132203,0xf8c40080,0xbf1c2814,0xf8c44628,0xbd702814,0x00021040,
+0x4ff7e92d,0x0a1cf101,0xf89a9201,0x46804008,0xd0402c00,0xd8072c40,
+0xfb04230c,0xf6420303,0x589b4248,0xd12f2b00,0xf249481c,0xf7fa01f5,
+0xe029febf,0x0b0cf04f,0x860bfb04,0x5530f506,0x786b3550,0xb12346a1,
+0xf2494814,0xf7fa01fa,0xf642feaf,0x59f34748,0x4810b923,0x01fbf249,
+0xfea6f7fa,0x706b2301,0x434cf642,0x59f458f2,0x46409901,0xfb0947a0,
+0x2200810b,0x4350f642,0x51f2782c,0x54ca706a,0xb2db1e63,0xd9d12b3f,
+0xf88a2300,0xe8bd3008,0x46c08ffe,0x00021040,0x4615b570,0x5230f500,
+0x3254469c,0x0e01f04f,0xb1a46814,0x0301f10e,0xfe83fa5f,0xf1be320c,
+0xd1f50f41,0x3460f8d0,0x01d6f249,0xf8c03301,0x480e3460,0xfe6cf7fa,
+0x30fff04f,0x220ce014,0x0202fb0e,0x4348f642,0x330450d1,0xf50250d5,
+0x33505330,0xf10c705c,0x7a01001c,0x4350f642,0xf88054d1,0x4620e008,
+0x46c0bd70,0x00021040,0xb5102301,0xf8804604,0xf7ff3d3d,0x4620fe97,
+0xfcf4f7ff,0x4806b920,0x711af648,0xfe40f7fa,0xf44f4620,0x22003100,
+0xfde6f7ff,0x46c0bd10,0x00021040,0x41f0e92d,0x460e4607,0x2828f8b7,
+0x3321f244,0xd011429a,0x429a3b0e,0x3307d00e,0xd00b429a,0x429a3310,
+0x3b14d008,0xd005429a,0x429a3307,0x2500bf14,0xe0002501,0xf44f2501,
+0xfb05739e,0xf8d47403,0x2a012a88,0x1e73d106,0x2b01b2db,0xf884d80e,
+0xe00e2b98,0xd0042a02,0xf647480c,0xf7fa619c,0x2e01fe03,0xf884d102,
+0xe0026b98,0xf8842300,0xf1b53b98,0xd0c53fff,0x33e5f241,0x463854fe,
+0x103cf997,0xfa66f7ff,0x81f0e8bd,0x00021040,0x47f0e92d,0x46054c27,
+0x4827b924,0x614af647,0xfde2f7fa,0xf8d47923,0xf0039000,0x2700087f,
+0x4b20e03b,0x791b18fb,0x007ff003,0x3848f8d5,0x027ff000,0xf893189b,
+0xf00010a0,0x29006400,0x4641bf08,0x6f00f011,0x4a18d108,0x037ff001,
+0x2b0056d3,0xf44fda02,0xe00172e0,0x7200f44f,0x4b12b934,0x2b00561b,
+0xf44fda02,0xe00176f0,0x7608f44f,0x37014b0d,0x5c1c5c59,0x010ff001,
+0x0141eb02,0xf7ff4628,0xf004fc25,0x4602040f,0x0144eb06,0xf7ff4628,
+0x454ffafd,0xe8bdd1c1,0x46c087f0,0x1e00c5e4,0x00021040,0x1e00c634,
+0xb5106843,0x46042b02,0x4805d804,0x2184f646,0xfd8af7fa,0x280cf8d4,
+0x61932300,0x46c0bd10,0x00021040,0xb5102300,0x3d82f880,0x3d7ef8b0,
+0xf8a04604,0x68433d80,0xd8042b02,0xf6464805,0xf7fa217d,0xf8d4fd71,
+0xf44f280c,0x61935320,0x46c0bd10,0x00021040,0xf8d0b510,0x00494844,
+0x8ca3190c,0x1a9b1809,0xf8b084a3,0xf8b13dc0,0x43132dc2,0x3dc0f8a0,
+0x3024f9b4,0xda042b00,0xf6464802,0xf7fa01c1,0xbd10fd4f,0x00021040,
+0x47f3e92d,0x7a0c4698,0x46077a4b,0xa80cf8d0,0x460d4608,0x2403ea44,
+0xf7fe4616,0x9001ff71,0xf7fe1d28,0xf89dff6d,0x90009028,0xbf142c00,
+0xf44f4625,0xb9766580,0x3d5cf897,0x4641b15b,0x4633464a,0x46384c11,
+0xa90147a0,0x46324603,0x4c0f4668,0x9c0147a0,0x46224628,0x4b0d9900,
+0x1a244798,0xf897b936,0xb11b3d5c,0x2b140a83,0x1824bf88,0x02aa4b08,
+0x189b18c3,0xf3f2fbb3,0x4303fb02,0x318cf8ca,0x87fce8bd,0x0001dac5,
+0x0001d425,0x0001d17d,0x00018fff,0x4777e92d,0x680cf8d0,0x46084680,
+0xf7fe460d,0x4682ff29,0xf7fe1d28,0x7a6bff25,0xf04f7a2c,0xea545180,
+0xbf082403,0x6480f44f,0x460a4681,0x04244640,0xfc8ef7ff,0xa180f8c6,
+0x9184f8c6,0x4188f8c6,0x46402400,0x22014629,0x94004623,0xff88f7ff,
+0xf04f4640,0x46225180,0xfc7af7ff,0x877ee8bd,0xf642b570,0x5cc44316,
+0x2c014605,0x2c03d906,0x4810d011,0x616df644,0xfcbef7fa,0xf642b924,
+0xf04f431a,0xe00a0240,0xd1042c01,0x431af642,0x0280f04f,0xf642e003,
+0xf04f431a,0x52ea0200,0xb12b7c6b,0x431af642,0x46285ae9,0x47984b02,
+0x46c0bd70,0x00021040,0x0001d4fd,0xf890b510,0x46043d11,0x4814b923,
+0x01c7f642,0xfc94f7fa,0x3024f894,0xf8d4b9f3,0x789b37f8,0xf243b9d3,
+0x58e313dc,0xf8b4b9b3,0xb99b3d12,0x3d14f8d4,0xf243b983,0x58e353f8,
+0xf243b963,0x58e353fc,0xf894b943,0xb92b3d1a,0xf1d37ce3,0xbf380001,
+0xe0002000,0xbd102000,0x00021040,0xb5702901,0x460d4604,0x480fd904,
+0x5149f641,0xfc64f7fa,0x31eff241,0x30f0f241,0x5c225c63,0x2302ea43,
+0x7340f423,0x2305ea43,0x5463b29b,0x54230a1b,0xb1337c63,0xf7fe4620,
+0x4620fff5,0xf7fe2101,0xbd70fff3,0x00021040,0xb5103901,0xd828290e,
+0xf001e8df,0x120f0b08,0x27272727,0x1b181527,0x0024211e,0x33dcf642,
+0xf642e001,0x54c233dd,0xf642e01c,0xe7fa33de,0x33dff642,0xf642e7f7,
+0xe7f433e0,0x33e1f642,0xf642e7f1,0xe7ee33e2,0x33e3f642,0xf642e7eb,
+0xe7e833e4,0x33e5f642,0x4803e7e5,0x510ff641,0xfc16f7fa,0x46c0bd10,
+0x00021040,0xf8d0b570,0xf8904328,0x2200532c,0x1883e009,0x132cf893,
+0x0f80f011,0xf001d002,0xe004057f,0x42a23201,0xf005d1f3,0x6b43057f,
+0xf015b173,0xd10b6f00,0xf0054a10,0x56d3037f,0xda052b00,0x3848f8d0,
+0x3045f893,0x25c3ea45,0x2324f8b0,0xf4024629,0xf5b24270,0xbf145f00,
+0x22022201,0x4c062301,0xb92047a0,0xf44f4805,0xf7fa51d4,0x4628fbd9,
+0x46c0bd70,0x1e00c634,0x0001d375,0x00021040,0xb5702910,0x460c4605,
+0x4804d904,0x115af641,0xfbc6f7fa,0x13dcf243,0xbd7050ec,0x00021040,
+0xb510301c,0xb11c6904,0x88c38822,0xd004429a,0xf2404803,0xf7fa11a7,
+0x4620fbb3,0x46c0bd10,0x00021040,0x7c43b570,0xb1234604,0xf24b4818,
+0xf7fa7166,0xf894fba5,0xb14d5d10,0x3710f8d4,0xf8d4b323,0x21003848,
+0xf00d6818,0xe01dfff1,0x3848f8d4,0x68184629,0xffeaf00d,0x3848f8d4,
+0x68184629,0x47984b0b,0x0310f641,0xb13358e3,0xf04f68a0,0x462a31ff,
+0xf7fa462b,0xf8d4ff9f,0x46293844,0x68a0721d,0xff1cf7fa,0x46c0bd70,
+0x00021040,0x0001ea19,0xf8d0b570,0x46053844,0xb9087a18,0xe0124606,
+0x380cf8d5,0xf8d52400,0xf8c36d04,0xf8d3412c,0x2001312c,0x47984b05,
+0x3d00f8d5,0x4d04f8c5,0xbf1842a3,0x46304626,0x46c0bd70,0x1e005d75,
+0xf8d0b570,0x46043844,0x460e7a1b,0xd0482b00,0xf8d0bb29,0x2021380c,
+0x21e0f8d3,0x25a1f643,0x0202f042,0x21e0f8c3,0x47984b21,0x200ae003,
+0x47984b1f,0xf8d43d0a,0xf8d2280c,0xf41331e0,0xd1013f00,0xd1f22d09,
+0x31e0f8d2,0x3f00f413,0x4818d127,0x31ecf64a,0xfb26f7fa,0x6883e021,
+0xb9b369db,0x380cf8d0,0x31e0f8d3,0x0f12f013,0xf643d00f,0xe00325a1,
+0x4b0d200a,0x3d0a4798,0x380cf8d4,0x31e0f8d3,0x3f00f413,0x2d09d101,
+0xf8d4d1f2,0xf8d2280c,0xf02331e0,0xf8c20302,0xf1d631e0,0xbf380301,
+0xf8842300,0xbd70381d,0x1e005d75,0x00021040,0x4b10b570,0x20284605,
+0xf8b54798,0xf1033824,0xe0030409,0x4b0b200a,0x3c0a4798,0x46282140,
+0xf964f7ff,0xd1012804,0xd8f32c09,0x46282140,0xf95cf7ff,0xd1042804,
+0xf64a4803,0xf7fa319b,0xbd70fad7,0x1e005d75,0x00021040,0x37c8f8d0,
+0x4219b570,0x460d4604,0x480ed004,0x41d2f64a,0xfac6f7fa,0x17c8f8d4,
+0xf8d4b921,0xf01337c4,0xd0046f80,0x0301ea45,0x37c8f8c4,0xf504e008,
+0xf8c460e8,0x4b0457c8,0x46204798,0xffb8f7ff,0x46c0bd70,0x00021040,
+0x0001d459,0xf8d0b570,0x2104580c,0xf7ff4606,0xf8d5ffd1,0xf1b44120,
+0xd03d3fff,0x0f04f014,0x482cd004,0x6121f24b,0xfa96f7fa,0x0f02f014,
+0x4828d104,0x6122f24b,0xfa8ef7fa,0x0f01f014,0x4824d104,0x6123f24b,
+0xfa86f7fa,0x3128f8d5,0x3ffff1b3,0xf013d020,0xd0040f01,0xf24b481d,
+0xf7fa612b,0x4630fa79,0x22002101,0xfa20f7ff,0xe0034c19,0x4b19200a,
+0x3c0a4798,0x3128f8d5,0x0f01f013,0x2c09d101,0xf8d5d1f4,0xf8d53128,
+0xf1b44120,0xd1043fff,0x073cf8d6,0xfc1ef7fe,0xf014e017,0xd0040f04,
+0xf24b480a,0xf7fa6143,0xf014fa53,0xd1040f02,0xf24b4806,0xf7fa6144,
+0xf014fa4b,0xd0040f01,0xf24b4802,0xf7fa6145,0xbd70fa43,0x00021040,
+0x00014441,0x1e005d75,0xf8d0b570,0x46043848,0x460d7b1b,0x4817b923,
+0x41ecf640,0xfa30f7fa,0x33cbf642,0xf1b356e3,0xd0033fff,0xbf142b01,
+0x25012500,0x31c7f642,0x42ab5c63,0xf8b4d018,0xf64f3352,0xea0332ff,
+0xb2eb0202,0xf8a45465,0xb11b2352,0x6380f442,0x3352f8a4,0xf7ff4620,
+0x4620ff65,0xf7ff4629,0x4620f875,0xf9d2f7ff,0x46c0bd70,0x00021040,
+0x408b2301,0xf890b570,0xb2dc27c1,0x0302ea04,0x460542a3,0xd010460e,
+0x2108b912,0xff22f7ff,0x37c1f895,0x0303ea44,0x37c1f885,0x0386eb05,
+0x0778f8d3,0x6903b108,0xbd704798,0xf10db573,0x460d0602,0x21004604,
+0x22064630,0xfaa2f7fb,0x4620b175,0xf7ff2101,0x4620ffd3,0xf7ff2103,
+0x4620ffcf,0x46322100,0xf8cef7ff,0xe0142301,0x3dcef894,0x4620b91b,
+0xf7ff2101,0x4620f957,0xf7ff2103,0x4620f953,0xf1044629,0xf7ff024c,
+0xf8d4f8bb,0xb16b37cc,0xf8c42300,0xf8d437cc,0xf40337c4,0xf5b323c0,
+0xd0033f00,0x60e8f504,0x47984b01,0x46c0bd7c,0x0001d459,0xb5102101,
+0x1dcef880,0xff9cf7ff,0x46c0bd10,0xf890b570,0x46043d5e,0xf890b31b,
+0xbb033d5d,0x3023f890,0xf890b1eb,0xb1d33024,0x53d2f243,0xb1635ac3,
+0x53c8f243,0xf5a358c2,0x3b415352,0x0303ea02,0xf642b11b,0x5cc32390,
+0xf894b14b,0xb1333d67,0x3d3cf894,0x0301f1d3,0x2300bf38,0x2300e000,
+0xb322b2da,0x3d68f894,0xf8d4bb0b,0x789b37f8,0xf894b9eb,0xb9d33d5f,
+0x13dcf243,0xb9b358e3,0x3d5cf894,0xf894b99b,0xb9833d62,0x43abf243,
+0xb9635ce3,0x381df894,0xf641b94b,0x58e3030c,0xf894b92b,0x3b003d65,
+0x2301bf18,0x2301e000,0xf8d4b2dd,0x0652380c,0x6120f8d3,0xf042b10d,
+0x46206280,0x61c0f04f,0xf8eaf7ff,0xf006b13d,0xf1b363c0,0xd1027f00,
+0xf7ff4620,0xbd70fe3d,0xe92d69cb,0xf01347f0,0x46040f04,0x4691460d,
+0x482dd104,0x0132f648,0xf926f7fa,0x4628692f,0x306ff897,0x206ef897,
+0x2803ea42,0x304cf897,0x0607f003,0xfd58f7ff,0x6000f8c9,0x460569e3,
+0xf894b303,0xb1eb3d5e,0xd81b2e03,0xf8904a1f,0x5d923183,0xf0134113,
+0xd0130f01,0x0381f3c8,0xd10f2b02,0x0f80f018,0xf243d00c,0x5ca342ab,
+0x3301b923,0x462054a3,0xff58f7ff,0xf043686b,0x606b6300,0x3844f8d4,
+0x0386eb03,0x681b68db,0xd80c2b02,0x0346eb04,0x2dc2f8b3,0x3dc0f8b4,
+0x000ff06f,0x0302ea23,0x3dc0f8a4,0x793be00a,0x0381f3c3,0xd0042b02,
+0x33b4f8d4,0xf8c43301,0x200033b4,0x87f0e8bd,0x00021040,0x00021010,
+0x41f0e92d,0x681cf890,0xb9164604,0x4b162101,0xf8d44798,0x7a1d3844,
+0x68a0b955,0x462a4629,0xfc58f7fa,0x6180f44f,0x460a4620,0xf860f7ff,
+0x380cf8d4,0x7158f8d3,0x68a0b91d,0xf7fa4629,0xb91efc4d,0x46314620,
+0x47984b07,0x3710f8d4,0x3f80f417,0xf043bf14,0xf0230302,0xf8c40302,
+0xe8bd3710,0x46c081f0,0x0001d47d,0xf243b570,0x5cc25314,0xbb124604,
+0x5354f500,0x4610781d,0x1823e006,0x5201f243,0x4299569b,0x3001dd02,
+0xd1f642a8,0x520cf243,0x42985ca3,0xf243d00f,0x58e543fc,0xb15554a0,
+0x33182201,0x3b0454e2,0xf8d458e1,0x462a073c,0x4c012300,0xbd7047a0,
+0x1e0061f9,0x4604b570,0x481d460e,0x51adf64a,0xf862f7fa,0xb9336b63,
+0xd0042e14,0xf64a4818,0xf7fa51af,0xf894f859,0xb91d581d,0x46294620,
+0xfcfef7ff,0x3848f8d4,0x6818b271,0xfcfaf00d,0x3844f8d4,0xb9237a1b,
+0xf64a480d,0xf7fa51b8,0xf8d4f843,0x68a13848,0xf00e6818,0xf8d4f9a1,
+0x68183848,0xf89ef020,0x0848f8d4,0x30784631,0xfbbaf012,0x4620b91d,
+0xf7ff2102,0xbd70fcd9,0x00021040,0x0f03f011,0x460cb5f7,0x461f4615,
+0xd0046986,0xf64a4816,0xf7fa5168,0xf015f81d,0xd0040f03,0xf64a4812,
+0xf7fa5169,0x0c23f815,0xb123041b,0xf64a480e,0xf7fa516a,0xf8c6f80d,
+0xf8d64130,0xf4033120,0xe00e3480,0x4639a801,0xf7fb2204,0xb11cf8e7,
+0xf7fe9801,0x9001fa1d,0x37049b01,0x3134f8c6,0x2d003d04,0xbdfedcee,
+0x00021040,0x4614b570,0x460b3203,0xf44f4605,0xf500618d,0xf02260e8,
+0x69860203,0xffbaf7ff,0x3f80f5b4,0x4808db04,0x51e4f64a,0xffdcf7f9,
+0x211a4628,0xf7feb2a2,0xf8d6fd35,0xf0433124,0xf8c60302,0xbd703124,
+0x00021040,0x4614b570,0x460b3203,0x21684605,0x60e8f500,0x0203f022,
+0xf7ff6986,0xf5b4ff97,0xdb043f80,0xf64a4808,0xf7f951d6,0x4628ffb9,
+0xb2a22118,0xfd12f7fe,0x3124f8d6,0x0301f043,0x3124f8c6,0x46c0bd70,
+0x00021040,0x41f0e92d,0x460e4605,0xf8d04617,0xb12b480c,0xffd2f7ff,
+0x46314628,0xe00c463a,0x3124f8d4,0x0f01f013,0xf7ffd102,0xe00cffc7,
+0x3124f8d4,0x0f02f013,0xf7ffd102,0xe004ff9b,0xf64a4803,0xf7f951fb,
+0xe8bdff87,0x46c081f0,0x00021040,0xf8d0b570,0xb19557d0,0x22006884,
+0x46294613,0xf7fa4620,0x4629fb95,0x2300462a,0xf7fa4620,0x2200fb73,
+0x46294620,0xf7fa4613,0xbd70fb51,0x41f0e92d,0xf8d0461d,0x46043848,
+0x460e6818,0xf0114690,0xf8d4fda3,0x46293848,0x46326818,0xfc1cf00d,
+0x3848f8d4,0x31fff04f,0x22006818,0xfe2cf00e,0x46414620,0xfd66f7ff,
+0x81f0e8bd,0x4605b570,0xf8d0460c,0xf8d5073c,0x4b0a1d38,0xb17c4798,
+0x3d5ef895,0xf895b163,0xb14b3de0,0x2d69f895,0xf8d5b132,0xf8d5073c,
+0x23011d38,0x47a04c02,0x46c0bd70,0x1e006221,0x1e0061f9,0xf890b510,
+0x46043d0d,0x2001b90b,0xf8d0e012,0xf0133394,0xd0040f04,0xf6424807,
+0xf7f911ad,0x2300ff19,0x3d0df884,0x073cf8d4,0x1d34f8d4,0x47984b02,
+0x46c0bd10,0x00021040,0x1e006221,0x4b0cb570,0x460c4606,0xb9184798,
+0x215c480a,0xff00f7f9,0x0507f004,0xd00342a5,0x215d4806,0xfef8f7f9,
+0xf0238af3,0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x00021040,
+0x4b06b510,0x47984604,0x4805b918,0xf7f92155,0x8ae0fee3,0x0007f000,
+0x46c0bd10,0x1e005ec1,0x00021040,0x4b0ab570,0x460d4604,0xb9184798,
+0x214d4808,0xfed0f7f9,0x68e26923,0x429318eb,0x4804d903,0xf7f9214e,
+0x82a5fec7,0x46c0bd70,0x1e005ec1,0x00021040,0x4b0bb570,0x460d4604,
+0xb9184798,0x21434809,0xfeb6f7f9,0x429d8aa3,0x4806d903,0xf7f92144,
+0x6920feaf,0x19408aa3,0x61201b5b,0xbd7082a3,0x1e005ec1,0x00021040,
+0x4b0cb570,0x460d4604,0xb9184798,0x2139480a,0xfe9af7f9,0x68a26923,
+0x42931b5b,0x4806d203,0xf7f9213a,0x6920fe91,0x1b408aa3,0x612018eb,
+0xbd7082a3,0x1e005ec1,0x00021040,0x7c43b530,0x4605b085,0xb11b460c,
+0xf06fb111,0xe09d0004,0xd9022c03,0x0001f06f,0xf8d5e098,0x3b023814,
+0xd9042b01,0xf24a484a,0xf7f90111,0x2c03fe6d,0xf8d5d107,0x2b023814,
+0x2400d101,0x2402e012,0xb17ce000,0x3814f8d5,0xd1042b02,0x3388f8d5,
+0x0f01f013,0x2b03e005,0xf8d5d104,0xf0133834,0xd0715f00,0x4810f8c5,
+0x2100a802,0xf7fa2208,0xf8bdff11,0x2c003008,0xf043d03f,0xf8ad0310,
+0xf8d53008,0x2b023814,0x3830f8d5,0xf023d120,0xf8c55300,0xf8d53830,
+0xf4133388,0xf8bd4f80,0xd008300a,0x7380f443,0x300af8ad,0xf8c52330,
+0x232037d0,0xf423e009,0xf8ad7380,0xf44f300a,0xf8c573c0,0xf44f37d0,
+0xf8c57380,0xe00937d4,0x5300f043,0x3830f8c5,0x300cf8bd,0x5380f423,
+0x300cf8ad,0x300af8bd,0xbf0c2c02,0x7300f443,0x7300f423,0x300af8ad,
+0xf023e009,0xf8ad0310,0xf8d53008,0xf0233830,0xf8c55300,0x24023830,
+0x3008f8bd,0x21004628,0x94002210,0xfe5ef7fe,0x300af8bd,0x21014628,
+0x7240f44f,0xf7fe9400,0x4628fe55,0x300cf8bd,0xf2414621,0x94001208,
+0xfe4cf7fe,0xe0012000,0x0002f06f,0xbd30b005,0x00021040,0x41f0e92d,
+0x680cf8d0,0xf8d64604,0xf1b22128,0xd1013fff,0xe0282700,0xf8d0b111,
+0xe0013d04,0x3d08f8d0,0x0702ea13,0xf8d4d01f,0x2500380c,0x512cf8c3,
+0x0f80f417,0x312cf8d3,0x5d04f8c4,0x2301d00a,0xf8844629,0x46203d44,
+0xff2cf7ff,0x46294620,0xfea0f7fe,0x4f00f417,0xf44fbf18,0xf8c63380,
+0xbf187128,0x46386233,0x81f0e8bd,0x41f0e92d,0x700b2300,0x46047c43,
+0xb1ab460d,0x3d04f8d0,0x2101b193,0xffbaf7ff,0xb1684606,0x702f2701,
+0x3d00f8d4,0x4806b123,0x511df24b,0xfd88f7f9,0xf8c44638,0xe0006d00,
+0xe8bd2000,0x46c081f0,0x00021040,0x3d00f8d0,0x4604b510,0x480ab923,
+0x41eaf24b,0xfd74f7f9,0x46202100,0xff96f7ff,0x3ffff1b0,0x3001d101,
+0xf8d4e005,0x43033d00,0x3d00f8c4,0xbd102001,0x00021040,0xf6422100,
+0x50c17358,0x503cf500,0x305cb510,0x7200f44f,0xfe1cf7fa,0x46c0bd10,
+0x3848f8d0,0x47f0e92d,0x05a0f103,0x4680226d,0x4628460c,0xf7fa2100,
+0x2200fe0d,0x18a3e00a,0xf013791b,0xd0040f80,0x037ff003,0xbf982b6c,
+0x320154eb,0x429a6823,0x2700d3f1,0x463e46b9,0x18b3e039,0x407cf893,
+0xd9042c6c,0xf647481d,0xf7f951d9,0x5d2bfd29,0xf0041928,0xb14b6100,
+0xd1262900,0xf0044a18,0x56d3037f,0xda202b00,0xe01f46a1,0x4a14b939,
+0x037ff004,0x2b0056d3,0x464bda01,0x463be000,0xb99b7003,0x4a0eb971,
+0x037ff004,0x2b0056d3,0x2c2fda08,0x2330d901,0x2c17e005,0x230cbf94,
+0xe0002318,0x70034623,0x4627e000,0xf8d83601,0x6f932848,0xd3c0429e,
+0x87f0e8bd,0x00021040,0x1e00c634,0x4ff7e92d,0x46074c29,0xb9244689,
+0xf6474828,0xf7f961ca,0xf8d7fce3,0xf8d43848,0x685ba000,0x0800f04f,
+0xbf142b01,0x0b0af04f,0x0b10f04f,0x4b1ee038,0x44434638,0x4b1e791d,
+0x057ff005,0x47984629,0x46064c1c,0x46384629,0xf10d464a,0x47a00302,
+0x22004629,0x4c18464b,0x47a04638,0x3003f89d,0x2002f89d,0xeb02b284,
+0x46382203,0x010af106,0xf7feb292,0xf89dfa0f,0xf89d3005,0x46382004,
+0x2203eb02,0x010cf106,0x445cb292,0xfa02f7fe,0xf1064638,0xb2a20110,
+0xf9fcf7fe,0x0801f108,0xd1c445d0,0x8ffee8bd,0x1e00c5e4,0x00021040,
+0x0001d839,0x0001dce1,0x0001d299,0x43f0e92d,0x3844f8d0,0x7a1bb089,
+0x46894605,0xf0002b00,0xb1098098,0xf9d6f7ff,0xf8d52100,0xf885280c,
+0xf8b21d87,0xf5053688,0x051b6658,0x36180d1b,0x3688f8a2,0x21004688,
+0x46682220,0xfd32f7fa,0xf3c37833,0x2c031441,0x483fd904,0x213af242,
+0xfc62f7f9,0xf0137833,0xd0060f10,0x40a32301,0x2d87f895,0xf8854313,
+0x78f23d87,0xea4378b3,0x015b2302,0xeb05b29b,0xf8ad0244,0xf8a23000,
+0x78333d88,0x000ff003,0xb29b1e43,0xf8ad2b0e,0xd8410008,0x22017871,
+0x030ff001,0xfa120909,0x408af303,0x3a013b01,0xf8adb29b,0xf8d52004,
+0xf8ad280c,0xf8ad3002,0xf8b23006,0x4013265a,0x300af8ad,0xf8ad181b,
+0x4b20300c,0x5d1b4628,0x015f2400,0x7112f507,0xf7fe3106,0xf440fa9b,
+0xf8ad7080,0xf507000e,0x19097110,0x2004f83d,0x34024628,0xf96ef7fe,
+0xd1f42c20,0x380cf8d5,0x2688f8b3,0xea42b292,0xb2923208,0x2688f8a3,
+0x2008f8bd,0x269cf8a3,0x0801f108,0x0f04f1b8,0x3604d001,0xf8d5e787,
+0xf8b2280c,0x051b3688,0xf8a20d1b,0xf1b93688,0xd0020f00,0xf7fe4628,
+0xb009fbb5,0x83f0e8bd,0x00021040,0x00021024,0xb5706b43,0x46052400,
+0x4dcef880,0xd0702b00,0x3848f8d0,0xf00d6818,0xf400f88b,0xf5b06040,
+0xd1666f40,0x3848f8d5,0x56a2f505,0xf00d6818,0xb2c0f87f,0x28023634,
+0x4620d801,0xf8d5e009,0x68183848,0xf874f00d,0x3802b2c0,0xfb902308,
+0xf8d5f0f3,0x5c343848,0xf00d6818,0xb2c0f869,0xd8012802,0xe0142001,
+0x3848f8d5,0xf00d6818,0x4a2ef85f,0x3802b2c0,0x0202ea00,0xda052a00,
+0xea6f3a01,0xea6f7242,0x32017252,0xfa132301,0x4004f002,0xf8d5d12a,
+0x68183848,0xf848f00d,0x28ddb2c0,0x4620d901,0xf8d5e007,0x68183848,
+0xf83ef00d,0x3002b2c0,0xf8d510c0,0x5c343848,0xf00d6818,0xb2c0f835,
+0xd90128dd,0xe0092301,0x3848f8d5,0xf00d6818,0x3002f82b,0x0007f000,
+0x40832301,0xd1014223,0xe0002401,0xb2e42400,0xf8d5e016,0x68183848,
+0xf81af00d,0x00c4f3c0,0xf2411828,0x5cc44374,0x3848f8d5,0xf00d6818,
+0xf000f80f,0x41040007,0x0401f084,0x0401f004,0x4628b11c,0xf7fe2101,
+0xbd70fae1,0x80000007,0xf890b570,0x46053024,0xf8d0b1eb,0xf8b03848,
+0x68184324,0xfff4f00c,0xd1144284,0x5154f505,0x31344628,0xfa62f7fe,
+0x3326f995,0x4628b11b,0xfb8ef7fe,0xf243e013,0x5ceb5338,0x4628b17b,
+0xfcdaf7fe,0x4628e00b,0xfa5cf7fe,0xf44f2300,0xf8853100,0x46283d3d,
+0xf7fe460a,0x4628fac9,0xfb68f7fe,0xf7fe4628,0xbd70fb55,0xf011b570,
+0x460c6500,0x007ff001,0x4a10d009,0xfb002314,0x7c1b2303,0x2107f3c1,
+0x2303ea41,0x4b0ce011,0xb2804798,0xf1b3b203,0xd1053fff,0xf6454809,
+0xf7f901de,0x4628faf9,0x021bb203,0x0302f043,0xf3c4b29b,0xea4320c2,
+0xbd7000c0,0x1e00c744,0x0001ed4d,0x00021040,0x460db570,0x46042154,
+0xf960f7fe,0x6f00f015,0xf241d005,0x5ce333e4,0x0303f003,0xf005e00e,
+0x2b02037f,0x2b04d008,0x2b0bd006,0xf1b3d004,0xbf180216,0xe0002201,
+0x46132200,0x0203f020,0x0202ea43,0x21544620,0xf7feb292,0x4629f81f,
+0xf7ff4620,0x21b0ffa7,0x46204602,0xf816f7fe,0x46c0bd70,0x4605b570,
+0xf7f96880,0xb340feeb,0x3714f895,0xd0242b01,0x3848f8d5,0x68182101,
+0x47984b11,0x3848f8d5,0x68182101,0xfef8f00c,0xf8d52401,0xf885280c,
+0xf8d24714,0x462831e0,0x0320f023,0x31e0f8c2,0xfa5cf7fe,0x46214628,
+0xfb44f7ff,0x46214628,0x47984b04,0x746c2000,0xf04fe001,0xbd7030ff,
+0x0001ea19,0x0001de2d,0x4604b510,0xf7f96880,0xb320feb5,0x3714f894,
+0x4620b30b,0xf7ff2100,0x2100fb29,0x46204b0e,0x46204798,0xffc2f7fe,
+0x280cf8d4,0xf8d22100,0xf04331e0,0xf8c20320,0xf8d431e0,0x68183848,
+0xfeb6f00c,0x3848f8d4,0x68182100,0x47984b03,0xf8842300,0xbd103714,
+0x0001de2d,0x0001ea19,0x3710f8d0,0x4605b570,0xf7ffb113,0xe029ffc9,
+0xf7f96880,0xb328fe7f,0x3714f895,0xd0212b01,0x3848f8d5,0x68182101,
+0x47984b0f,0x3848f8d5,0x68182101,0xfe8cf00c,0xf8d52401,0xf885280c,
+0xf8d24714,0x462831e0,0x0320f023,0x31e0f8c2,0xf9f0f7fe,0x46214628,
+0xfad8f7ff,0x46214628,0x47984b02,0x46c0bd70,0x0001ea19,0x0001de2d,
+0xf890b570,0x46043d11,0x2710f8d0,0xb322b943,0x0304f022,0x3710f8c0,
+0xf7ffb9fb,0xe01cfadf,0x0304f082,0x0680f3c3,0xfd64f7fe,0xbf181e45,
+0xb12e2501,0xf894b98d,0xf8843d18,0xe00c3d1a,0xb155b95e,0x3710f8d4,
+0xf0234620,0xf8c40304,0xf7ff3710,0xf884ff9d,0xbd705d18,0x7c43b570,
+0xb30b4605,0x3718f890,0xf890b1f3,0xb1713d6c,0xf8d5b1d3,0x4b0d1d1c,
+0x073cf8d0,0x23004798,0x3d6cf885,0x47984b0a,0x0d70f8c5,0xb95be00c,
+0xf8d03301,0xf8d5073c,0xf44f1d1c,0x4c05727a,0x230147a0,0x3d6cf885,
+0x46c0bd70,0x1e006221,0x1e005aa5,0x1e0061f9,0xf880b510,0xb1211de0,
+0x3d63f890,0xbf181e19,0xf7ff2101,0xbd10ffc7,0xb5706a81,0x7f00f411,
+0xd01e4604,0x7100f421,0xb9316281,0x073cf8d0,0x32fff04f,0xf9c4f7fd,
+0xf890e013,0xb183303f,0x03fff021,0x2507b96b,0x40ab2301,0xea136aa2,
+0xd1040102,0x073cf8d4,0xf7fd462a,0x3d01f9b1,0xbd70d2f2,0x2207b510,
+0x47984b01,0x46c0bd10,0x0001fa51,0x4ff7e92d,0xb004f8d1,0xf02b4699,
+0x688b7446,0x24b8f424,0x460d4607,0x604c9300,0x2a004692,0x80b5f000,
+0x21cff891,0x81cef891,0x92014650,0xfb96f7fd,0x01d0f8a5,0x3002f89a,
+0xf8854606,0xf44431d2,0x606b3380,0x302ef897,0xf444b17b,0x606b23a0,
+0x3244f895,0xf8d5b973,0x2b0430f4,0xb94bd000,0x46384b66,0x22064629,
+0x4b65e003,0x46294638,0x47982206,0x46382204,0x4b614629,0xf3c64798,
+0x2a010281,0x2a03d006,0xb942d009,0xf8852301,0xe00131ce,0x21cef885,
+0x21cff885,0x2300e004,0x31cef885,0x31cff885,0x31cef895,0xd0024543,
+0x0801f04f,0xf895e007,0x9a0131cf,0x0802ebb3,0xf04fbf18,0xf4160801,
+0xd0037f40,0xf043686b,0x606b4380,0x0f20f016,0x68abd003,0x0301f043,
+0xf01660ab,0xd0030f40,0xf04368ab,0x60ab0302,0xf0039b00,0x68ab0203,
+0x0303f003,0xbf18429a,0x0801f04f,0x0f10f016,0x686bd103,0x1380f443,
+0xf416606b,0xd0034f80,0xf043686b,0x606b7300,0x0402f006,0x0f00f1b9,
+0xf507d03c,0x300950a0,0x22164649,0xf9caf7fa,0xf899b11c,0xf0033001,
+0xf8990404,0xf0133001,0xd0030f08,0xf043686b,0x606b7380,0x0002f109,
+0xfb00f7fd,0x0008f010,0xf8b7d00f,0xf6413324,0xf4030210,0xf6404370,
+0xf5b34108,0xbf085f80,0xf241460a,0x52fa33ea,0xf241e010,0x52f833ea,
+0x4c1de00c,0x47a02204,0x46294638,0x47a02206,0x46294638,0x47a02205,
+0x465446d0,0xf3cb686b,0xf4034200,0xf3c33180,0x429a4300,0xf897d011,
+0xb9733023,0x7086f505,0xb1293001,0x0103f10a,0xf7fa2210,0xe002f97f,
+0xf7fa2210,0xf04ff95b,0xb1340801,0xf41b686b,0xf4432f00,0x606b2300,
+0xf1b8d002,0xd0030f00,0x46294638,0xffbcf014,0x8ffee8bd,0x0001fa51,
+0x0001f9d5,0x4ff7e92d,0x9decf8b0,0xfb09230c,0xf503f303,0xf500635f,
+0x18c3665e,0x360c4607,0x0804f103,0x0a00f04f,0xe01f9101,0x46594b14,
+0x47984630,0xf7fe4604,0x9b01fca3,0xd0084298,0x46594630,0x4b0f4622,
+0xbf082d00,0x47984625,0x6cb8e004,0x22014621,0x47984b0b,0x3c0cf858,
+0xd1e342ab,0x0a01f10a,0x080cf1a8,0x0309ebca,0xf10345ca,0xd0013bff,
+0xe7ef2500,0x8ffee8bd,0x1e003ac5,0x1e0039cd,0x1e005c41,0xf243b570,
+0x594315dc,0x2b004604,0xf8d0d033,0x788307f8,0x2104b113,0xfb76f014,
+0x2b065963,0x2b08d005,0x2b09d003,0x2b0ad001,0xf243d106,0x58e113d4,
+0x073cf8d4,0x47984b0f,0x51baf504,0x311c4620,0xff46f014,0x210cb110,
+0xfe8ef014,0x5148f504,0x4b093114,0x47984620,0xf7ff4620,0x2100fe59,
+0x13d8f243,0x50e14620,0xfc32f7fe,0xf7fe4620,0xbd70fe61,0x1e006221,
+0x0001dec9,0x7c43b510,0xb9134604,0x0003f06f,0x6880e045,0xfc2af7f9,
+0xd03e2800,0x3714f894,0xd03a2b00,0x07f8f8d4,0xf0142104,0x4620fb2f,
+0xffa8f7ff,0x5339f243,0xb14b5ce3,0x5154f504,0x31344620,0xf8baf008,
+0x607af44f,0x47984b14,0x21004620,0xf886f7ff,0x4b122100,0x47984620,
+0xf7fe4620,0xf8d4fd1f,0x2100280c,0x31e0f8d2,0x0320f043,0x31e0f8c2,
+0x3848f8d4,0xf00c6818,0xf8d4fc13,0x21003848,0x4b076818,0x23004798,
+0xf8844618,0x74633714,0xf04fe001,0xbd1030ff,0x1e005d75,0x0001de2d,
+0x0001ea19,0xb5702908,0x460e4605,0xb169d00d,0x62b4f241,0x2b025883,
+0x3301d102,0xe01d5083,0xf2412203,0x50c263b0,0x2601e018,0x54acf505,
+0x4628342c,0x4b0a4621,0xf5054798,0x302450a4,0x46214b08,0xf2414798,
+0x58ab62b4,0xd0042b02,0x62b0f241,0x2b0258ab,0x50aed100,0x46c0bd70,
+0x0001dec9,0x0001dc9d,0x4170e92d,0x3848f8d0,0x68184602,0x4688b085,
+0x6805685e,0xf00c6b54,0x23fffc11,0x3c00b2c0,0x2401bf18,0x93012100,
+0x462a9003,0x46334640,0x94029100,0xfb52f011,0xe8bdb005,0x46c08170,
+0x43f0e92d,0xf8954605,0xf5ad1024,0xf8d07d1b,0xb9090848,0xe00d4607,
+0x2324f8b5,0x6328f505,0x4270f402,0x5f00f5b2,0xf44fbf14,0x2200729e,
+0x189f3304,0xb1bc6bfc,0x6f00f014,0x8096f000,0xf8b5b131,0xf4033324,
+0xf5b36340,0xe0066f40,0xf00c6800,0xf400fbdd,0xf5b06040,0xf0406f40,
+0xf4448085,0xe0816480,0xf44f4621,0xa80272da,0xffe0f7f9,0x4621a86f,
+0xf7f92284,0xf505ffdb,0x365c563c,0x46a046a1,0xf8d66830,0xf010c004,
+0xf0006f00,0xd00a0e7f,0xea4fa96f,0x588b028e,0x45434463,0xd90c508b,
+0x46984604,0xa902e009,0x028eea4f,0x4463588b,0x508b4543,0x4698bf84,
+0xf1094674,0x36080901,0x0f40f1b9,0x2c00d1dc,0xf8d5d14c,0x6b693d4c,
+0xbf181e1a,0xf8952201,0xb18b3024,0x4621b909,0xf8b5e008,0xf4033324,
+0xf5b36340,0xbf146f40,0x21012100,0x704af505,0xf9bef011,0xe0314604,
+0x4621b909,0xf241e012,0x5ceb33ef,0x0f02f013,0xf897d00a,0xf0133047,
+0xd1050f08,0x3114f897,0xbf181e18,0xe0002001,0xb2c12000,0x0678f107,
+0xf0114630,0x687bf9a1,0x2b024604,0x7b3ad112,0x33fdb982,0x6b6b9300,
+0x3b004c09,0x2301bf18,0x46309301,0xa9902301,0x9b9047a0,0x18d3aa9a,
+0x4c25f813,0xf50d4620,0xe8bd7d1b,0x46c083f0,0x0001ed85,0x0f02f011,
+0x4605b573,0x4611d01d,0xfdbef014,0xb1c04606,0x3024f895,0xf505b113,
+0xe002704a,0x50bcf505,0x237f3010,0x88f39300,0xf0032200,0x93010301,
+0x01f8f106,0x4c034613,0x462847a0,0xf0144631,0xbd7cfdab,0x0001ed85,
+0x2600b5f0,0xf8d04605,0xf880780c,0xf5006d5d,0xb08b5058,0x22064631,
+0xf7f93008,0x4631ff27,0xf5052206,0xf7f9703d,0xf505ff21,0x463150be,
+0x30322206,0xff1af7f9,0x4320f243,0x462850ee,0x47984b61,0xf7fe4628,
+0x6b6bfba1,0xd0742b00,0x3848f8d5,0xf00c6818,0xf400faf7,0xf5b06040,
+0xd16a6f40,0x3848f8d5,0x54a2f505,0xf00c6818,0xb2c0faeb,0x28023434,
+0x4631d801,0xf8d5e009,0x68183848,0xfae0f00c,0x3802b2c0,0xfb902308,
+0xf8d5f1f3,0x5c643848,0xf00c6818,0xb2c0fad5,0xd8012802,0xe0142001,
+0x3848f8d5,0xf00c6818,0x4a46facb,0x3802b2c0,0x0202ea00,0xda052a00,
+0xea6f3a01,0xea6f7242,0x32017252,0xfa132301,0xea10f002,0xd12d0604,
+0x3848f8d5,0x54a2f505,0xf00c6818,0xb2c0fab1,0x28dd3434,0x4630d901,
+0xf8d5e007,0x68183848,0xfaa6f00c,0x3002b2c0,0xf8d510c0,0x5c243848,
+0xf00c6818,0xb2c0fa9d,0xd90128dd,0xe0092301,0x3848f8d5,0xf00c6818,
+0x3002fa93,0x0007f000,0x40832301,0xd1014023,0xe000461c,0xb2e42401,
+0xf8d5e014,0xf5053848,0x681854a2,0xfa80f00c,0x3848f8d5,0x00c4f3c0,
+0x5c243434,0xf00c6818,0xf000fa77,0x41040007,0x0401f004,0x4628b11c,
+0xf7fe2101,0x4628fbd3,0xfcecf7fd,0x4300f04f,0x3188f8c7,0x4628210f,
+0xfa6cf7fd,0xf2404628,0xf7fd31ff,0xf8d5fa91,0x685b3848,0xd1052b02,
+0x33c7f642,0x5ce94628,0xfc08f7fd,0xf7fd4628,0x4628f9a7,0xfd62f7fd,
+0x46282300,0x93004669,0xf83ef7ff,0xf7fd4628,0xb00bffa3,0x46c0bdf0,
+0x0001e951,0x80000007,0x3324f8b0,0xf403b570,0x460d4370,0xf5b34611,
+0xbf145f80,0x22012200,0xf0144604,0x4606fc93,0xf015b158,0xd10403fe,
+0x3d62f884,0xf7fe4620,0x6873fbd1,0x0300f423,0xbd706073,0x9c04b513,
+0xf2439400,0x590044ec,0xfdeaf008,0x46c0bd1c,0x2400b573,0x4623461a,
+0x460e4605,0xf7ff9400,0x4603ffed,0x4628b120,0x46324902,0xfec8f7fd,
+0x46c0bd7c,0x000078d1,0x9c04b513,0x9c059400,0xf2439401,0x590044ec,
+0xfdd4f008,0x46c0bd1c,0x47f0e92d,0x9909460f,0x46994604,0x0518f101,
+0x31c46c80,0x46904b1f,0x46064798,0xf8d4b928,0x330133c0,0x33c0f8c4,
+0x6903e031,0x0f03f013,0x4819d004,0x6150f248,0xfd22f7f8,0x463021ac,
+0xfe5ef7fe,0x46304629,0xfe40f7fe,0x0a3b6934,0x70632500,0x70a57027,
+0x1d2070e5,0x22064641,0xfdf4f7f9,0x000af104,0x22064649,0xfdeef7f9,
+0x0010f104,0x22069908,0xfde8f7f9,0x75e575a5,0x34189b0a,0x4630601c,
+0xf7fe2107,0x4630fdef,0x87f0e8bd,0x1e005c25,0x00021040,0x4605b570,
+0xb921460e,0xf2484814,0xf7f8610a,0x6ca8fce9,0x01acf106,0x47984b11,
+0xb9284604,0x33c0f8d5,0xf8c53301,0xe01433c0,0xf0136903,0xd0040f03,
+0xf2484809,0xf7f86113,0x21acfcd3,0xf7fe4620,0x4620fe0f,0xf7fe4631,
+0x4620fdf1,0xf7fe2100,0x4620fdbd,0x46c0bd70,0x00021040,0x1e005c25,
+0x47ffe92d,0xa048f8d0,0x46084607,0x4691460e,0xfdcaf7fe,0x68b26933,
+0x1a9b4680,0xd8412bab,0x21ac4650,0x47984b50,0xb9304605,0x33c0f8d7,
+0x33014606,0x33c0f8c7,0x21ace092,0xfde0f7fe,0xd10442ae,0xf2454849,
+0xf7f80185,0xf106fc99,0x7a0b011c,0x001cf105,0x23007203,0x7a4b720b,
+0x72434a43,0x6103690b,0xea0369f3,0x69eb0202,0x61eb4313,0x72837a8b,
+0x4641698b,0x46286183,0xfd74f7fe,0x46306934,0xf7fe210e,0x210efdb9,
+0xf7fe4628,0x6928fdd1,0x220e4621,0xfd56f7f9,0x462e602e,0xf1b86934,
+0xd03c0f00,0x2004f8d9,0xea024b30,0x2b000303,0xf8d7d135,0xb3533dbc,
+0x7b607b23,0x2000ea43,0xfe74f7fc,0x4f01f5b0,0xf10dd021,0x46210502,
+0x4628220c,0xfd36f7f9,0x46302104,0xfda8f7fe,0x220c4629,0xf7f94604,
+0xf44ffd2d,0xf7fc4001,0x7320fe5d,0x200ff3c0,0xea4f7360,0xf4003048,
+0xf7fc4060,0x73a0fe53,0x200ff3c0,0x69fb73e0,0xf897b12b,0xb9111da8,
+0xf7fe4630,0x6934fd23,0x7b607b23,0x2000ea43,0xfe40f7fc,0x53dcf240,
+0xd9114298,0x038ef648,0xd1034298,0xf04369f3,0x61f30310,0x462269f3,
+0x0308f043,0x463861f3,0x46334651,0x47a04c06,0xb0044630,0x87f0e8bd,
+0x1e005c25,0x00021040,0x03804460,0x00010040,0x0001db75,0x2600b573,
+0x6007f88d,0x6006f88d,0x6007f88d,0x3d46f890,0x5430f500,0x34244605,
+0xf89db12b,0xf0433006,0xf88d0301,0x4b123006,0x79a34798,0xd10b4283,
+0x2007f89d,0x429379e3,0xf89dd106,0x7a232006,0xd1014293,0xe0114630,
+0xf89d71a0,0x71e33007,0x3006f89d,0xf6427223,0x5ceb4325,0xdd042b1d,
+0xf2484804,0xf7f85138,0x2001fbcb,0x46c0bd7c,0x0001e0bd,0x00021040,
+0xf890b570,0x46043d5e,0xb133460d,0x0f80f011,0xf8d0d003,0xf01307f8,
+0xf894ff13,0xb1133d5f,0x0f80f015,0xf243d004,0x58e043ec,0xfd1ef009,
+0x46c0bd70,0x4604b573,0xf884460d,0xb3191d5e,0x3d5df890,0xf890bb03,
+0xb1eb3023,0x3024f890,0xf243b1d3,0x5ac353d2,0xf243b163,0x58c253c8,
+0x5352f5a3,0xea023b41,0xb11b0303,0x2390f642,0xb14b5cc3,0x3d67f894,
+0xf894b133,0xf1d33d3c,0xbf380301,0xe0002300,0xf8842300,0x7c633d5f,
+0xd0322b00,0xf7fe4620,0xf894f9d9,0x2b003d5f,0x2680bf14,0xf8942600,
+0xb1f33023,0x3024f894,0xf504b1db,0x31085158,0x784a788b,0x780b431a,
+0x78ca4313,0x790b431a,0x794a4313,0xd008431a,0x33fff04f,0x93002200,
+0x46134620,0xfdeaf7ff,0x4620b918,0xf7ff4631,0x4620ff8b,0xf7fe4629,
+0x4620fc01,0x4b014629,0xbd7c4798,0x0001de2d,0xf890b510,0x46043d53,
+0x4b0db1b3,0xf8944798,0x21003d50,0x18634318,0x532bf503,0x3102881a,
+0x1329f640,0xbf98429a,0x0001f040,0xd1f2290c,0x0301f1d0,0x2300bf38,
+0x3d52f884,0x46c0bd10,0x0001e66d,0x4ff0e92d,0xb0a32400,0x460d4607,
+0xf8dd461e,0xf8dda0c0,0x941fb0c4,0x9204941e,0x4894b922,0x1159f645,
+0xfb0ef7f8,0x2805982e,0x4890d904,0x115af645,0xfb06f7f8,0x2e006929,
+0x2602bf0c,0xf1052603,0x9107021c,0x92159611,0x784b780a,0xea426cb8,
+0x93052303,0x0381f3c3,0xbf082b02,0x930a9c05,0x4623bf14,0x13c0f3c4,
+0x9313b2db,0x4b804629,0x30044798,0xf1ba9009,0xd0030f00,0x300ff99a,
+0x900918c0,0x3830f8d7,0xda212b00,0x0f00f1ba,0xf89ad01e,0x2b023008,
+0xf642d11a,0x5cfb2391,0xf8d7b9b3,0xf8d33dd0,0xf0133094,0xd10f0f08,
+0x3006f89a,0xd80b2b35,0xd9092b03,0xd8072b0b,0x2801982d,0x9909d104,
+0x31089016,0xe0019109,0x92162200,0x46282106,0xfc0ef7fe,0x90082168,
+0xf7fe4628,0x2100fc09,0x46062268,0xfb6ef7f9,0x68239c15,0x6f80f413,
+0x88a4d001,0x9804e02f,0x68424b5c,0x0303ea02,0x9905b313,0x03fcf001,
+0xd11d2b88,0x79139a07,0x0f01f013,0x4628d118,0xfba2f7fe,0x992c9b04,
+0x0040eb03,0x4170f8b0,0x1e43982d,0xd1124299,0xf7fe4628,0x9a04fb95,
+0x0040eb02,0x3170f8b0,0xf8a03301,0xe0063170,0x2b019b0a,0x2400d013,
+0x0910f04f,0x9d0ae004,0xd00c2d01,0x0900f04f,0x9907982c,0x030ff000,
+0x1304ea43,0x758bb29b,0x75cb0a1b,0xf04fe001,0x9a2e0900,0xd1172a04,
+0x204df896,0x74fcf241,0x304cf896,0xea435b38,0xf2482302,0xea030218,
+0x01410202,0x73e0f647,0x0204f042,0x0303ea01,0x431a3001,0xe0175338,
+0x9d2c9c2d,0xf2411e63,0x429d71fa,0xd1015a7a,0x527b1c53,0x992e982c,
+0x030ff000,0x1302ea43,0xf647015b,0xea0372e0,0xf0010202,0x431a0307,
+0x2084f8ad,0x4b229a05,0x02fcf002,0xea0b2a80,0x92190303,0xf049bf08,
+0xb91b0920,0x3848f8d7,0xb03cf8d3,0xea0b491a,0xb1210101,0xb078f8cd,
+0xb07cf8cd,0xf8d7e023,0x6c1a3848,0xea024b14,0xb13b0303,0x79239c07,
+0x0f01f013,0x921ed002,0xe04b921f,0x792b9d07,0x0f01f013,0x980ad108,
+0x2801b130,0x9915d004,0xf013680b,0xd0110f10,0xf8929a04,0xf00330fc,
+0x931e037f,0x2300931f,0xe034930f,0x00021040,0x1e003e11,0x00010040,
+0x0800007f,0x9300ab1e,0x0387f10d,0xf10d9301,0x93020386,0x0382f10d,
+0xf8d79303,0xab1f07f0,0xaa219904,0xff24f010,0x3082f8bd,0x0f01f013,
+0x9c15d004,0xf4436823,0x60235300,0x682b9d15,0x0f10f013,0x9804d005,
+0x30fcf890,0x037ff003,0x992c931e,0x0101f1d1,0x2100bf38,0x68bb910f,
+0xb98b6b5b,0x3008f89a,0xd10d2b02,0xf0129a1f,0xd1096f00,0x037ff002,
+0xd9052b30,0x037ff022,0x0330f043,0x931e931f,0x3848f8d7,0xf8936b7c,
+0x991f5045,0xf0002c00,0xf01181b0,0xf0016f00,0xd004027f,0xd9062a07,
+0xd0042a20,0x4ba1e036,0x2b00569b,0x2900da32,0xf421db30,0xf4201040,
+0xf0115060,0x901f6f00,0x9a04d025,0xf0136853,0xd0064f80,0x3848f8d7,
+0x3046f993,0x3ffff1b3,0xf8d7d005,0xf9933848,0x2b013046,0x4a92d113,
+0x5180f440,0xf0002314,0xfb00007f,0x7c1a2303,0x4319f642,0xeba35cfb,
+0x3b011392,0xea41b2db,0x911f5103,0xea40e002,0x931f23c5,0xf011991e,
+0xf0016f00,0xd004027f,0xd9062a07,0xd0042a20,0x4b80e037,0x2b00569b,
+0x9b1fda33,0xdb302b00,0x1040f421,0x5060f420,0x6f00f011,0xd025901e,
+0x68639c04,0x4f80f013,0xf8d7d006,0xf9933848,0xf1b33046,0xd0053fff,
+0x3848f8d7,0x3046f993,0xd1132b01,0xf4404a70,0x23145180,0x007ff000,
+0x2303fb00,0xf6427c1a,0x5cfb4319,0x1392eba3,0xb2db3b01,0x5103ea41,
+0xe002911e,0x23c5ea40,0xf8d7931e,0x68183848,0xfdb8f00b,0x2828b240,
+0xf8d7d141,0x68183848,0xfdbaf00b,0xf4009b1f,0xf5b07040,0xbf147f00,
+0x24032402,0x6f00f013,0x027ff003,0x2a20d012,0x46a0d102,0xe03f2405,
+0x33eef241,0xf1b356fb,0xd1213fff,0x686b9d04,0x2f00f413,0x46a0d033,
+0xe0312404,0x569b4b4d,0xda022b00,0x33edf241,0x2a02e00e,0x2a04d00a,
+0x2a0bd008,0x2a16d006,0x4848d004,0x2135f645,0xf8d2f7f8,0x33ecf241,
+0xf1b356fb,0xd0163fff,0xb29c46a0,0x9b1fe014,0x0802f04f,0x037ff003,
+0xbf042b20,0x6300f04f,0x9b1e931f,0xf0034644,0x2b20037f,0xf04fbf04,
+0x931e6300,0x46a0e000,0x02219b1f,0x63e0f423,0x0303ea41,0x9b1e931f,
+0x62e0f423,0x6f00f013,0xea41bf14,0xea420302,0x921e2308,0x931e9a1f,
+0x6100f012,0x910ed103,0x9117910d,0xf642e075,0x56fb33e1,0xd1132b03,
+0x98119904,0xf000684b,0xf01300fd,0x90110f40,0x9a13d01b,0x4b22b1ca,
+0x5d1b9c2e,0x0343eb07,0x3d88f8b3,0xe013b18b,0xd1052b02,0x2302f3c2,
+0x2b013b04,0xe008d80c,0xd1092b01,0x20009d11,0x05fdf005,0x900e9511,
+0x2101e004,0xe001910e,0x920e2200,0x68639c04,0x1388f403,0x1f88f5b3,
+0xf642d003,0x5cfb33e3,0x9d11b11b,0x05fdf005,0xf8d79511,0x68183848,
+0xfc0af00b,0xf1b0b240,0xd0133fff,0xd10d2801,0xf0409811,0xb2db0302,
+0xe00b9311,0x1e00c634,0x1e00c744,0x00021040,0x00021010,0xf0019911,
+0x911101fd,0xf0039b1f,0x2b07037f,0x2b20d90c,0x9a04d00a,0x31cef892,
+0xf892b133,0xb11b31cf,0x930d2301,0xe0029317,0x940d2400,0x9d119417,
+0x0302f015,0x2303bf18,0x9a1f9311,0x6f00f012,0xf8d7d003,0x2b013d4c,
+0xf41bd002,0xd0020f00,0x0300f442,0xf8d7e004,0xb9133d4c,0x0300f422,
+0x9a1e931f,0x6f00f012,0xf8d7d006,0x2b013d4c,0xf442d102,0xe0040300,
+0x3d4cf8d7,0xf422b913,0x931e0300,0xf4139b1f,0xd0340f00,0x027ff003,
+0xd9012a07,0xd12e2a20,0x6400f013,0x2000d002,0xe0289011,0xf645488b,
+0xf7f7218d,0x9411ffe9,0xf011e021,0xd0046f00,0xf6454886,0xf7f72195,
+0x9b1effdf,0x6f00f013,0x4882d004,0x2196f645,0xffd6f7f7,0x9a1e9b1f,
+0x63e0f423,0x62e0f422,0x7300f443,0x7200f442,0x921e931f,0x940d940e,
+0x0802f04f,0x990f9417,0xf642b189,0x593a7458,0xeb07991f,0xf64200c2,
+0x50c1735c,0x32019b2d,0xf002b2d9,0xf642023f,0x50c17360,0x981f513a,
+0x6400f010,0xf410d02c,0xf4000f00,0xd01363e0,0x3b040a1b,0xf8df2b01,
+0xf000e1a4,0xd805017f,0xfb012314,0xf8d3e303,0xe01bb00c,0xfb012314,
+0xf8d3e303,0xe015b008,0x3b040a1b,0xf8df2b01,0xf000e17c,0xd805017f,
+0xfb012314,0xf8d3e303,0xe007b004,0xfb012314,0xf853f303,0xe001b00e,
+0x0b7ff000,0x2d029d0a,0xb96dd000,0x23ccf642,0x99095afb,0xdd074299,
+0x79139a07,0x0f01f013,0xbf089b0d,0x930d2301,0x3848f8d7,0xb1517b19,
+0x33dcf642,0xb1335cfb,0x4a47b92c,0x037ff000,0x2b0056d3,0x6b7bdb06,
+0xb304b30b,0x33e1f642,0xb1e356fb,0x2d019d2d,0xf642d909,0x5cfb33dc,
+0x2316b10b,0x2330e000,0x931f931e,0xb171e00f,0x33dcf642,0xb1535cfb,
+0x4a37b94c,0x037ff000,0x980e56d3,0x0023ea30,0x2001bf28,0x9a1e900e,
+0x6f00f012,0xf412d029,0xf4020f00,0xd01163e0,0x3b040a1b,0xf8df2b01,
+0xf002e0b4,0xd804027f,0xfb022314,0x68d9e303,0x2314e01d,0xe303fb02,
+0xe0186899,0x3b040a1b,0xf8df2b01,0xf002e090,0xd804027f,0xfb022314,
+0x6859e303,0x2314e00b,0xf303fb02,0x100ef853,0xf002e005,0xf44f027f,
+0xfb0273fa,0x9a1ff103,0x6f00f012,0xf412d030,0xf4020f00,0xd01163e0,
+0x3b040a1b,0xf8df2b01,0xf002e04c,0xd804027f,0xfb022314,0x68dae303,
+0x2314e024,0xe303fb02,0xe01f689a,0x3b040a1b,0xf8df2b01,0xf002e028,
+0xd804027f,0xfb022314,0x685ae303,0x2314e012,0xf303fb02,0x200ef853,
+0x46c0e00c,0x00021040,0x1e00c634,0x1e00c744,0x027ff002,0x73faf44f,
+0xf203fb02,0xd9044291,0xf645487e,0xf7f721f6,0x991efec3,0x910c4638,
+0x991f2200,0x4c7a2301,0xb92047a0,0xf6454877,0xf7f721f9,0x4638feb5,
+0x2200991e,0x47a02301,0x4872b920,0x21faf645,0xfeaaf7f7,0x9c049b1e,
+0x027ff003,0x6f00f013,0xbf189b1f,0x4200f442,0x017ff003,0x6000f013,
+0x4201ea42,0xbf189b15,0x4200f042,0x6863615a,0x3f80f413,0xf897d02e,
+0x2b003d45,0xf897d02a,0xb33b3d48,0x33e1f642,0x2b0356fb,0xb938d022,
+0xd01f2902,0xd01d2904,0xd01b290b,0xd0192916,0x792b9d07,0x0f01f013,
+0x9819d114,0xd1112888,0x8b2a9915,0xf449680b,0xf4434980,0x600b5380,
+0x739ff64f,0x0303ea02,0x0320f043,0x832b2201,0xe0019210,0x93102300,
+0x991f4638,0x9b089a09,0xf10d4c4a,0x47a00572,0x4638462b,0x9a09991e,
+0x220647a0,0x0036f106,0xf7f84629,0x9b1eff33,0x6f00f013,0xf003d110,
+0x2b02037f,0x2b04d005,0x2b0bd003,0x2b16d001,0x9c09d106,0x2307f3c4,
+0x403af886,0x303bf886,0x682a9d15,0x6f80f412,0x9b1fd01a,0x6f00f013,
+0x9b1ed016,0x6f00f013,0xf1bad012,0xd0030f00,0x3008f89a,0xd10b2b04,
+0xf4429815,0x60036300,0x33e7f241,0x990d5cfb,0xbf182b00,0x910d2101,
+0xf011991f,0xd10a6f00,0xf0014a27,0x56d3037f,0xda042b00,0x78139a08,
+0x030ff003,0x9b08e001,0x9c05781b,0x2ca4930b,0x9d07d010,0xf013792b,
+0xd10b0f01,0xb9589810,0x9a114638,0x4c1b9b2f,0x70a847a0,0x200ff3c0,
+0xe01970e8,0xb15a9a10,0xf6409a11,0x4638132a,0x47a04c15,0x30029b07,
+0x7098b280,0x70d80a00,0x2ca49c05,0x9d07d108,0x78ea78ab,0x2302ea43,
+0x303cf886,0xe0090a1b,0x79039807,0x0f01f013,0x9910d101,0x2300b191,
+0x303cf886,0x303df886,0x46c0e018,0x00021040,0x0001d375,0x0001dce1,
+0x1e00c634,0x0001d929,0x0001d299,0x991e4638,0x9b2f9a11,0x47a04cac,
+0x003cf886,0x200ff3c0,0x003df886,0x68139a15,0x7f00f413,0x8993d00d,
+0x5900f449,0x3042f886,0xf8860a1b,0x89d33043,0x3044f886,0xf8860a1b,
+0x9b2c3045,0xf049b90b,0x9c070908,0x34049d07,0x792b9418,0x0f01f013,
+0x9815d114,0xf4126802,0xd10f5f80,0x3d47f897,0xf012b113,0xd1090f40,
+0x6f80f412,0x9913d104,0xf897b111,0xb90b3d83,0x0901f049,0x2a029a0a,
+0xf897d109,0xb1333d45,0x0f04f1bb,0x9b17d903,0xf449b90b,0xf8d75980,
+0x68183848,0xfa20f00b,0xf4009c16,0xf5b06040,0xbf086f40,0x7980f449,
+0xf449b10c,0xea4f4900,0xf8862319,0x70739000,0x0f00f1ba,0xf642d01a,
+0x5cfb2391,0xf0402b00,0xf8d78481,0xf8d33dd0,0xf0133094,0xf0400f08,
+0xf89a8479,0x2a352006,0x8474f200,0x300cf89a,0x0307f003,0x1202ea43,
+0xbc6df000,0x0a132200,0x70f370b2,0x1d302400,0x22029907,0xfe1af7f8,
+0x71f471b4,0x402cf886,0x402df886,0x0f00f1ba,0xf642d039,0x5cfb2391,
+0xd1342b00,0x3dd0f8d7,0x3094f8d3,0x0008f013,0xf89ad12d,0x2b353006,
+0x9a05d829,0xf4029d07,0xf5b37340,0x9b137f40,0x0118f105,0xf105bf08,
+0xb103011e,0xf89a3102,0x2b023008,0x4632d111,0x0300eb0a,0x30bcf8b3,
+0xf3c37593,0x75d32307,0x32021c83,0x46182b0a,0xf106d1f2,0x22030020,
+0xf99ae003,0xf106200e,0xf7f80016,0x2206fdd7,0x0026f106,0xf7f89918,
+0xf89dfdd1,0x22003084,0x304cf886,0x3085f89d,0x204ef886,0x304df886,
+0x204ff886,0xb10c9c0d,0xe003920e,0x2d009d0e,0x8165f000,0x2200991f,
+0x46384643,0xf80cf7fc,0x46432200,0x991e4683,0xf7fc4638,0x4681f805,
+0x7832980e,0xb1207873,0x2303ea42,0x6300f443,0xea42e003,0xf0432303,
+0xf1060306,0x70330a50,0xf01a0a1b,0x70730f01,0x482ad004,0x4107f645,
+0xfcaef7f7,0x4c28990e,0xbf0c2900,0x0814f04f,0x080ef04f,0x4638ad1b,
+0x46424659,0x47a04653,0x4638462b,0x46424649,0x462947a0,0xf1062206,
+0xf7f8002e,0x9b11fd7b,0xf1069c09,0x25000256,0x93009212,0x990e9401,
+0x9b1f465a,0x95024c17,0x47a04638,0x0058f886,0x200ff3c0,0x0059f886,
+0x99099811,0x91019000,0x9502464a,0x990e4638,0x47a09b1e,0x0034f886,
+0x200ff3c0,0x0035f886,0xf1069a0e,0xb19a005a,0x033bf06f,0x3056f886,
+0x5057f886,0x22069b07,0x010af103,0x46c0e011,0x0001d929,0x00021040,
+0x0001dce1,0x0001d9d5,0x034bf06f,0x3056f886,0x220c9c0e,0x4057f886,
+0xf7f89918,0xf01bfd33,0xd10a6400,0xf00b4ab5,0x56d3037f,0xda042b00,
+0x3000f89a,0x030ff003,0xf896e001,0x9d0b3050,0xea43021b,0x950b0505,
+0x6500f019,0xf419d029,0xf4090f00,0xd01163e0,0x3b040a1b,0xf8df2b01,
+0xf009e2a4,0xd804017f,0xfb012314,0x68d8e303,0x2314e019,0xe303fb01,
+0xe0146898,0x3b040a1b,0xf8df2b01,0xf009e280,0xd804017f,0xfb012314,
+0x6858e303,0x2314e007,0xf303fb01,0x000ef853,0xf009e001,0xb34c007f,
+0x0f00f41b,0x63e0f40b,0x0a1bd011,0x2b013b04,0xe248f8df,0x017ff00b,
+0x2314d804,0xe303fb01,0xe01968da,0xfb012314,0x689ae303,0x0a1be014,
+0x2b013b04,0xe224f8df,0x017ff00b,0x2314d804,0xe303fb01,0xe007685a,
+0xfb012314,0xf853f303,0xe001200e,0x027ff00b,0xd9044290,0xf645487e,
+0xf7f74139,0x980cfbd5,0x6f00f010,0xf410d02a,0xf4000f00,0xd01163e0,
+0x3b040a1b,0xf8df2b01,0xf000e1dc,0xd804017f,0xfb012314,0x68d8e303,
+0x2314e01b,0xe303fb01,0xe0166898,0x3b040a1b,0x2b019a0c,0xe1b4f8df,
+0x017ff002,0x2314d804,0xe303fb01,0xe0086858,0xfb012314,0xf853f303,
+0xe002000e,0xf0039b0c,0xb34d007f,0x0f00f419,0x63e0f409,0x0a1bd011,
+0x2b013b04,0xe17cf8df,0x017ff009,0x2314d804,0xe303fb01,0xe01968da,
+0xfb012314,0x689ae303,0x0a1be014,0x2b013b04,0xe158f8df,0x017ff009,
+0x2314d804,0xe303fb01,0xe007685a,0xfb012314,0xf853f303,0xe001200e,
+0x027ff009,0xd91c4290,0x9030f8cd,0x990ee019,0xf1062206,0xf7f80050,
+0x990efc31,0xf1062210,0xf7f80056,0xf106fc2b,0x990e002e,0xf7f82206,
+0x9c0efc25,0x4034f886,0x4035f886,0x941246a3,0x9d1546a1,0xf413682b,
+0xd00b6f80,0xf0129a1f,0xd0076f00,0x07e8f8d7,0x9b099904,0xfe5cf002,
+0x0033f886,0x0a03980b,0x74f374b0,0xf0139b1e,0xd0046f00,0x33e4f241,
+0x8003f817,0xf003e00e,0x2b02037f,0x2b04d007,0x2b0bd005,0x3b16d003,
+0x2301bf18,0x2300e000,0xf883fa1f,0x6f00f01b,0xf241d004,0x5cfb33e4,
+0xe00e009d,0x037ff00b,0xd0072b02,0xd0052b04,0xd0032b0b,0xbf183b16,
+0xe0002301,0x009b2300,0xf019b29d,0xd0046f00,0x33e4f241,0x011c5cfb,
+0xf009e00e,0x2b02037f,0x2b04d007,0x2b0bd005,0x3b16d003,0x2301bf18,
+0x2300e000,0xb29c011b,0x3848f8d7,0xf00a6818,0xf8d7ffab,0xb2c03848,
+0x6819681b,0xffa6f00a,0x0308ea45,0xea434323,0xb29b2300,0x0a1b7533,
+0x991f7573,0x6f00f011,0xf241d00a,0xf81733e4,0xe0148003,0x1e00c634,
+0x00021040,0x1e00c744,0x037ff001,0xd0072b02,0xd0052b04,0xd0032b0b,
+0xbf183b16,0xe0002301,0xfa1f2300,0x9a11f883,0x0201f012,0xd05e9206,
+0xf0139b0c,0xd1536500,0x037ff003,0xd0042b02,0x4314f642,0x2b0156fb,
+0x9c07d14a,0x78e378a2,0x2303ea52,0x4638d009,0x9b2f462a,0x47a04c91,
+0x70889907,0x200ff3c0,0xf89670c8,0xf896203c,0xea52303d,0xd00b2303,
+0x991e4638,0x9b2f462a,0x47a04c88,0x003cf886,0x200ff3c0,0x003df886,
+0x2a009a12,0x9c12d02b,0x78e37892,0x2303ea52,0x9809d025,0x9001990e,
+0x9b1f465a,0x95004c7e,0x46389502,0x991247a0,0xf3c07088,0x70c8200f,
+0x95009a09,0x95029201,0x990e4638,0x9b1e464a,0xf88647a0,0xf3c00034,
+0xf886200f,0xe0060035,0x33b8f8d7,0x0810f048,0xf8c73301,0xf64233b8,
+0x5afb431a,0xf4034638,0xea487370,0xf3c50503,0x7273230f,0x991f7235,
+0xff40f7fd,0xf3c072b0,0x72f0200f,0x4638991e,0xff38f7fd,0xf3c07330,
+0x7370200f,0xb90b9b0d,0xb17c9c0e,0x46384659,0xff2cf7fd,0xf3c073b0,
+0x73f0200f,0x46384649,0xff24f7fd,0xf3c07430,0x7470200f,0xf011991f,
+0xd0126f00,0x0f10f015,0x9a09d10f,0x46384b53,0xf3c04798,0xf886230f,
+0xf886003e,0xb920303f,0xf645484f,0xf7f7419d,0x991efa1f,0x6f00f011,
+0xf015d012,0xd10f0f10,0x4b489a09,0x47984638,0x230ff3c0,0x0040f886,
+0x3041f886,0x4844b920,0x41a2f645,0xfa08f7f7,0xf011991f,0xd0276f00,
+0x3848f8d7,0x017ff001,0xf00a6818,0xf8d7feb5,0x991f3848,0xf001b2c4,
+0x6818017f,0xfeb4f00a,0xb240b264,0xb2a21a24,0x291fb211,0x221fdd01,
+0xf64fe005,0xf11173e0,0xbfb80f20,0x0292461a,0xf40205ab,0x0d9b427c,
+0x7232431a,0x72720a12,0x686b9d04,0x0f40f013,0x810cf000,0x28009813,
+0x8108f000,0x992e4b27,0x93145c5b,0x0343eb07,0x3d88f8b3,0xf0002b00,
+0x9a1880fd,0xf0137813,0xd0040f01,0xf645481e,0xf7f741bf,0x9c15f9bd,
+0xf4136823,0xf0406f80,0x9d2c80ed,0xf0402d00,0x9c1f80e9,0x46214638,
+0x9b099a11,0x47a84d16,0x98124682,0x4659b1c0,0x4c149a11,0x47a04638,
+0x46054649,0x46389a11,0x991247a0,0x788b78ca,0x2302ea43,0x0803eb05,
+0x2035f896,0x3034f896,0x2302ea43,0xe02a18c0,0xb18a9a10,0x46d09812,
+0x46c0e025,0x0001d929,0x0001d9d5,0x0001d225,0x00021040,0x00021010,
+0x0001d299,0x0001d91d,0x9a114621,0xf8df9b10,0x4638b17c,0x9d1e47d8,
+0x9b099a11,0xeb004629,0x4c57080a,0x47a04638,0x46814629,0x46389a11,
+0x47d89b10,0xfa1f4448,0x71b3f388,0x71f30a1b,0xf886b283,0x0a1b302c,
+0x302df886,0xebca9d14,0xeb070008,0xf8b30345,0x42833d88,0x8086f0c0,
+0xebc09c1f,0xf0140003,0xf0046f00,0xd016017f,0x23144a44,0x2303fb01,
+0xf3c47c1a,0xeb035301,0xf06f1392,0xfb030203,0x3b18f302,0xf8d7181d,
+0xf4043848,0x685b0600,0xd0052b02,0x4b3ae005,0x2b00565b,0xe02fda39,
+0xf4043d06,0xb17e63e0,0x3b040a1b,0xf8df2b01,0xd804e0cc,0xfb012314,
+0x68dbe303,0x2314e014,0xe303fb01,0xe00f689b,0x3b040a1b,0xf8df2b01,
+0xd804e0ac,0xfb012314,0x685be303,0x2314e004,0xf303fb01,0x300ef853,
+0x08ab0098,0xf300fb03,0x43aaf5a3,0xf44f3bf0,0xfbb352fa,0xe010f0f2,
+0x0314f1a0,0x089b004a,0xf302fb03,0x08d83b16,0x9a06e007,0x3860b10a,
+0x38c0e000,0xf300fb01,0x28ff0918,0xf44fd802,0xe0057080,0x23bef642,
+0x42985afb,0x4618bf28,0xb2809c2e,0x0344eb07,0x512bf503,0x4283880b,
+0x8008d00c,0xf7fe4638,0xe007fd8f,0xf89a2200,0x2b0b3008,0xab8ef43f,
+0xbb8df7ff,0xf8bd9d15,0x682b0084,0x0304f043,0xb023602b,0x8ff0e8bd,
+0x0001d299,0x1e00c744,0x1e00c634,0x0001d929,0x41f0e92d,0x4698b088,
+0x460d9b0e,0x93014614,0x9200ab07,0x21089302,0x4623462a,0xf7fe4606,
+0x4607fb67,0x3801b908,0x2401e01a,0xf8d62500,0x95002848,0x94029401,
+0x95049503,0x8014f8cd,0x33c6f642,0x46395cf3,0x46306912,0xfd6ef7fe,
+0x46214630,0x4623463a,0xf7fb9400,0x4628febb,0xe8bdb008,0x46c081f0,
+0x4ff0e92d,0x9000f8d1,0x4606b099,0x92079108,0xf1b9461d,0xd1040f00,
+0xf24848b1,0xf7f77101,0xf8b9f873,0x7c730014,0xb1a3900b,0x3de8f896,
+0xd1352b00,0xf7fc4648,0xf8b6fca7,0x6a823324,0x4370f403,0x5f80f5b3,
+0x2300bf14,0x429a2301,0x69444682,0xf8d6d005,0x330133c4,0x33c4f8c6,
+0x4648e12e,0xf964f7fd,0xf8134b9e,0xf8d6b000,0xea4f3844,0x18cb014b,
+0x2024f9b3,0x36fcf8b6,0xb000f8c5,0xdb0e429a,0x0f03f1bb,0x198bd80b,
+0x2dc2f8b3,0x3dc0f8b6,0x0302ea23,0x3dc0f8a6,0x000ff06f,0xf8d6e12f,
+0xf8d933d0,0x33018010,0x33d0f8c6,0x2000f898,0x3001f898,0x2703ea42,
+0x4280f417,0x8118f040,0xe00d9209,0x30acf8d4,0x3ffff1b3,0x80f4f000,
+0x0383eb04,0x30b0f8d3,0x2b009309,0x80ecf000,0x3844f8d6,0x038beb03,
+0x681b68db,0xd8022b03,0x034beb06,0xf3c7e7c8,0x2d020581,0x2200d001,
+0xf3c7e001,0xf40712c0,0xf5b37340,0xf1087f40,0xbf080418,0x041ef108,
+0x920ab90a,0x4620e006,0xfa1cf7fb,0x0007f000,0x3402900a,0xd0002d02,
+0xf417b9fd,0xd01c4f00,0x0404ebc8,0xad0cb2e4,0x46414622,0xf7f84628,
+0x2104f8c1,0xf7fd4648,0x4622f917,0x0010f8d9,0xf7f84629,0xf8d9f8b7,
+0x047b8010,0xf8880c5b,0x0a1b3000,0x3001f888,0xf8964444,0x25013d5e,
+0x5d82f886,0xf8d6b363,0x4b572d60,0x0303ea02,0x7f00f1b3,0x4630d106,
+0xf7fe2100,0x4630fc0b,0xfa30f7fc,0xb1db69f3,0x0f03f1bb,0x4b4dd818,
+0xf89a980a,0x5c192183,0x5c5b4b4c,0xf012411a,0xd00d0f01,0x42abf243,
+0xb91b5cb3,0x463054b5,0xfdfcf7fc,0x3004f8da,0x6300f043,0x3004f8ca,
+0x29009909,0x2301d02c,0x46309300,0x9a094623,0x1014f8da,0x47a04c3e,
+0x980b9a09,0x300ff992,0x900b1ac0,0x2b027a13,0xf1b0d103,0x910b0108,
+0x2b0be012,0x9a09d110,0xf1029b0b,0xf1020014,0xf1a30124,0x46430210,
+0xfed0f7fa,0x482cb120,0x0107f648,0xff68f7f6,0x990b4648,0xf88af7fd,
+0x3004f8da,0x25009809,0x90042401,0xf3c34649,0x46300380,0x95004652,
+0xf8cd9401,0x9503b008,0xf7fe9505,0x9908fc2f,0x454b680b,0x6cb0d004,
+0x46224649,0x47984b1f,0x980b9a07,0xf8d66014,0x330133a4,0x33a4f8c6,
+0x33a8f8d6,0x69f0181b,0x33a8f8c6,0xd0362800,0x990a4b12,0x5c5a980b,
+0x5c9a4b12,0x02c2eb06,0x3638f8d2,0xf8c23301,0xf8d23638,0x18c3363c,
+0xf8c24628,0xe022363c,0x22009907,0x4630600a,0xf7fb990b,0x6cb0fba9,
+0x22014649,0x47984b07,0x30fff04f,0x46c0e013,0x00021040,0x000238e6,
+0xff0000ff,0x00021010,0x0001e859,0x1e005c41,0x2010f8da,0x2a009209,
+0xaef2f47f,0xb019e6e2,0x8ff0e8bd,0x47f0e92d,0x4604680e,0x4690460f,
+0xb9264699,0xf2454817,0xf7f621c4,0x69f3fef1,0x0f04f013,0x4813d004,
+0x21c5f245,0xfee8f7f6,0xb1357c65,0x46394620,0x464b4642,0xfe5cf7ff,
+0xf8d4e016,0x463133c4,0xf8c43301,0x6ca033c4,0xf8c84b09,0x47985000,
+0x4601462a,0xf7fb4620,0x6ca0fb5b,0x22014631,0x47984b04,0x30fff04f,
+0x87f0e8bd,0x00021040,0x1e003e11,0x1e005c41,0x43ecf243,0x58c0b510,
+0xf8ecf009,0x46c0bd10,0x4a44b5f0,0x7813b097,0x460f4604,0xd17e2b00,
+0x70133301,0x6dc0f8b0,0x69cbe039,0x6f80f413,0xf8d4d006,0xa90307e8,
+0xf0049a15,0xe021f979,0x0f04f013,0xd006ad13,0x46202301,0x9314462a,
+0xfd62f7fc,0x4620e005,0xaa14a903,0xf7ff462b,0xb978ff91,0xe0094605,
+0x93002301,0xf852aa03,0x46202025,0xf7fb9913,0x3501fcb5,0x429d9b14,
+0xe00cdbf2,0x0f10f110,0x4b27d109,0x99154638,0x47989a03,0x3dc0f8b4,
+0xd00a429e,0xb146461e,0x46384631,0x4b21aa15,0x46014798,0x28009003,
+0x69e3d1bb,0x6aa1b983,0xf8b4b371,0x2b0f3df2,0xf421d82a,0x62a17180,
+0xf8d4bb31,0xf04f073c,0xf7fa32ff,0xe01ffe79,0x303ff894,0x2507b1e3,
+0xfa132301,0x6aa0f105,0xd0134201,0x5cea4b10,0xfb02230c,0xf8b34303,
+0x2b0f3dfc,0xea20d80a,0xf0330301,0x62a301ff,0xf8d4d104,0x462a073c,
+0xfe5af7fa,0xd2e33d01,0x22004b02,0xb017701a,0x46c0bdf0,0x00023c54,
+0x1e003a4d,0x1e003d3d,0x0002101c,0x3df0f8b0,0x47f0e92d,0x46062b1f,
+0x46154689,0x4882d804,0x71b3f644,0xfe18f7f6,0x0f00f1b9,0x487ed104,
+0x71b4f644,0xfe10f7f6,0x0f1cf119,0x487ad104,0x71c5f644,0xfe08f7f6,
+0xf506b91d,0x34345454,0x682be0e2,0xd1012b01,0xe0dd68ac,0x5454f506,
+0x35083434,0xf104e00f,0x788b01d4,0x431a784a,0x30d4f894,0x78ca4313,
+0x790b431a,0x794a4313,0xd01d431a,0xf8962500,0xf8d93023,0xb1eb1010,
+0x01d4f104,0x780bb9d5,0x0f01f013,0xf8b6d116,0x46302324,0x4270f402,
+0x5f80f5b2,0x2200bf14,0xf0122201,0x4607fceb,0x6943b110,0xd02c42a3,
+0x33c4f8d6,0xf8c63301,0xe07f33c4,0xf8b6780b,0xf0132324,0xd0080f01,
+0x4370f402,0x5f80f5b3,0x2350bf14,0x58e72354,0xf402e011,0x46304270,
+0x5f80f5b2,0x2200bf14,0xf0122201,0x4607fe47,0xf8d6b928,0x330133c0,
+0x33c0f8c6,0xb125e05e,0xf2454845,0xf7f60127,0x4630fd9f,0x463a4649,
+0xf8daf7fe,0x28004680,0xf8d4d050,0xf2402094,0xea021307,0xb1830303,
+0xf01369c3,0xd10c0f10,0xb953693b,0x30acf8d4,0x3ffff1b3,0xeb04d03d,
+0xf8d30383,0x2b0030b0,0xf894d037,0x2c034058,0x4831d904,0x0140f245,
+0xfd76f7f6,0x031cf108,0x611f725c,0xf013687b,0xd0060340,0xf7fc4640,
+0x4b2afe7f,0x4b2a5c1a,0xeb065c9b,0xf8d30383,0xb1233eb8,0x46394630,
+0xf7fb4642,0x4640f87f,0x91f4f8d7,0x41f8f8d7,0xfe6af7fc,0xf0004b21,
+0x46390507,0x46424620,0x47c85d5b,0x615ef506,0x310c4630,0xfe90f7ff,
+0x46c1e02b,0xb1eb69f3,0xf7fc4648,0x4c15fe55,0x5c234d15,0x5cea4648,
+0x02c2eb06,0x3658f8d2,0xf8c23301,0xf7fc3658,0x5c23fe47,0x5cec4649,
+0xeb066cb0,0x4b0e04c4,0x565cf8d4,0x19404798,0x065cf8c4,0x46496cb0,
+0x4b0a2201,0xe0044798,0x2b007923,0xaf50f43f,0x2000e721,0x87f0e8bd,
+0x00021040,0x000238e6,0x00021010,0x0002101c,0x1e003e11,0x1e005c41,
+0x3df0f8b0,0x41f0e92d,0x46062b1f,0x46144688,0x485cd804,0x7140f644,
+0xfcfef7f6,0x0f00f1b8,0x4858d104,0x7141f644,0xfcf6f7f6,0x4855b124,
+0x7143f644,0xfcf0f7f6,0xf7fc4640,0xb2c4fe01,0x0010f8d8,0x78437802,
+0x2303ea42,0x0281f3c3,0xd1052a02,0x7f40f413,0x2200bf14,0xe0082201,
+0x2200b10a,0xf3c3e005,0x2b091303,0x2200bf14,0x79032201,0xf0131d01,
+0xd00d0f01,0x2324f8b6,0x5384f243,0x4270f402,0x5f80f5b2,0xf44fbf18,
+0x18f35356,0xe025685f,0xf8b6b19a,0x46302324,0x4270f402,0x5f80f5b2,
+0x2200bf14,0xf0122201,0x4607fd4d,0xf8d6b9b0,0x330133c0,0x33c0f8c6,
+0x4630e042,0xfbd8f012,0xb1284607,0x5354f506,0x33346942,0xd005429a,
+0x33c4f8d6,0xf8c63301,0xe03133c4,0x5d1a4b28,0x5c9b4b28,0x0383eb06,
+0x3eb8f8d3,0xf243b91b,0x58f343dc,0x4630b123,0x46424639,0xffaaf7fa,
+0x538cf243,0x2d035cf5,0x481cd904,0x717cf644,0xfc7ef7f6,0x031cf108,
+0x611f725d,0xf0044b1a,0xf8d70407,0x463901f8,0x51f4f8d7,0x5d1b4642,
+0xf50647a8,0x4630615e,0xf7ff310c,0xe01afdb1,0xb19b69f3,0x6cb04b0e,
+0x4b0e5d1a,0x5c9c4641,0x04c4eb06,0x3658f8d4,0x565cf8d4,0xf8c43301,
+0x4b0a3658,0x19404798,0x065cf8c4,0x46416cb0,0x4b072201,0x20004798,
+0x81f0e8bd,0x00021040,0x000238e6,0x00021010,0x0002101c,0x1e003e11,
+0x1e005c41,0x43f0e92d,0x7c434698,0x4606b087,0x4615460f,0x903cf89d,
+0x482db923,0x61bdf248,0xfc2ef7f6,0x482ab925,0x61c0f248,0xfc28f7f6,
+0xf7fc4638,0x2807fd39,0xdd044604,0xf2484824,0xf7f661c3,0x686afc1d,
+0xea024b22,0xb1230303,0xb11369f3,0xf8134b20,0x22018004,0x9a0e9201,
+0x92052300,0x462a4630,0x93004639,0x93049303,0x8008f8cd,0xf8e2f7fe,
+0xf0044b18,0x5c980207,0xf50662fd,0x350c655e,0xdd01280d,0xe000230f,
+0x4c131c43,0x46294630,0x47a0463a,0xb1404604,0x0f00f1b9,0x4630d103,
+0xf7ff4629,0x2001fd31,0x6cb0e00a,0x46394b0b,0x47982201,0x33c0f8d6,
+0x33014620,0x33c0f8c6,0xe8bdb007,0x46c083f0,0x00021040,0x00010040,
+0x000238e6,0x0002101c,0x0001e1ad,0x1e005c41,0x43f7e92d,0x5458f500,
+0x46213408,0xf0124605,0x4606faf3,0xd0312800,0xf4136843,0xd0010700,
+0xe02c2001,0x43ecf243,0xf00658e8,0x4680fc43,0xf04fb320,0x46280901,
+0x9d62f885,0xfa0ef7fc,0x46414628,0x23034632,0x97019700,0xff66f7ff,
+0x4628b160,0x4622490b,0xf7fb4643,0xb928fd15,0x46486873,0x0300f443,
+0xe0086073,0x46282400,0x4d62f885,0xf9f2f7fc,0xe0004620,0xe8bd2000,
+0x46c083fe,0x00007aed,0x4ff0e92d,0x468a4680,0x1048f8d8,0x9102b08b,
+0x302af892,0x8b904617,0x9303b90b,0xf892e002,0x92032022,0x402cf897,
+0xf410b9a4,0xd0116f00,0x683a9b03,0x0143eb0a,0x7dd27d93,0x1160f8b1,
+0x2302ea43,0xd1054299,0x355cf8d8,0xf8c83301,0xe1ff355c,0x3d62f898,
+0x2b80f3c0,0xb9acb1b3,0x0f00f1bb,0xf89ad112,0x6a7a3184,0xf0134113,
+0xd10b0f01,0x5f00f410,0x4640d003,0xff7cf7ff,0xf888e004,0x4640bd62,
+0xf9a4f7fc,0x301cf8d8,0xf243b183,0xf81842ab,0xb15b3002,0x302af897,
+0xf897b143,0xb12b3028,0xf8082300,0x46403002,0xf990f7fc,0xf0138c3b,
+0xf0400404,0xf8da81cb,0xb9233014,0xf246486f,0xf7f6010a,0x8bbbfb21,
+0x1014f8da,0x4380f403,0xb94b637b,0x2094f8d1,0x1307f240,0x0303ea02,
+0xf891b19b,0xb183309c,0x63bc9803,0x90009902,0x46404652,0x4c62463b,
+0xb93047a0,0x43ecf243,0x0003f858,0x22024639,0xf897e17f,0x2c00402c,
+0x811ef040,0xeb0a9903,0x68390041,0x5160f8b0,0x7d8b7dca,0x2302ea43,
+0x3160f8a0,0x7d8a7dcb,0xea429903,0xf0122203,0xea4f000f,0xd14b0381,
+0x050aeb03,0x1120f8d5,0x9802b149,0x4b4d4622,0xf8c54798,0xf8c54120,
+0xf8c54140,0xf1bb4254,0xf0000f00,0x697b80f5,0xf8c54847,0x68fb3120,
+0xf5c36879,0xf8c563e4,0x22083140,0x47984b43,0x3004f8da,0xf023b110,
+0xe0010308,0x0308f043,0x3004f8ca,0x43ecf243,0x2003f858,0x4b3c9803,
+0x4b3c5c19,0xeb025c5b,0x6b130283,0xf243b933,0xf83843e0,0x2b003003,
+0x80caf000,0x464069bb,0x7c597c1a,0x2101ea42,0xffeaf7fa,0xeb0a9903,
+0xf8c30381,0xe0bb0254,0x060aeb03,0x1120f8d6,0xf022b1a1,0xf025020f,
+0x429a030f,0xf005d104,0x3301030f,0xd00f4298,0x46229802,0x47984b21,
+0x4120f8c6,0x4140f8c6,0x4254f8c6,0x3400f8d8,0xf8c83301,0xe1193400,
+0xf8d668ba,0x429a3140,0xf243d8ea,0xf85843ec,0x98032003,0x5c194b18,
+0x5c5b4b18,0x0283eb02,0xb9258e15,0x43e0f243,0x5003f838,0x69bbb345,
+0x7c1a4640,0xea427c59,0xf7fa2101,0xf8d6ffa5,0x1ac03254,0xd31b42a8,
+0xf8d69802,0x46221120,0x47984b06,0x4120f8c6,0x4140f8c6,0x4254f8c6,
+0x46c0e0e8,0x00021040,0x0001ff11,0x1e005c41,0x1e00d668,0x1e00d671,
+0x000238e6,0x00021010,0x68bd9903,0x0681eb0a,0x4120f8d6,0xf8b4462a,
+0x69209014,0x44486879,0xfb10f7f7,0xeb094620,0xf7fc0105,0xf8d6fb4b,
+0x98023140,0xf8c61b5b,0x69793140,0x4b742200,0xf1bb4798,0xd13b0f00,
+0x3120f8d6,0xb140f8c6,0xf8c6617b,0x697bb120,0xb254f8c6,0x8a99691a,
+0x0318f102,0xf1a1607b,0x60bb0318,0x3029f897,0x60f9603a,0xf102b12b,
+0x607b031e,0x031ef1a1,0xf89760bb,0xb143302a,0x9a03687b,0x607b3302,
+0xf88768bb,0x3b022022,0x683a60bb,0x78527813,0x2302ea43,0x6b7b83bb,
+0x6bb9b153,0xf991687b,0x189b200e,0xf991607b,0x68bb200e,0x60bb1a9b,
+0xb1736bbb,0x2b047a1b,0x4640d103,0x4b514639,0x6bbb4798,0x2b0b7a1b,
+0x4640d103,0xf0124639,0xf1bbfba7,0xf0400f00,0x6839808f,0x0622f10d,
+0x22063104,0xf7f74630,0x6839faa5,0x310aad07,0x46282206,0xfa9ef7f7,
+0xf10d6839,0x46200416,0x22063110,0xfa96f7f7,0x3029f897,0x6839b12b,
+0x3118a804,0xf7f72206,0x8bbbfa8d,0x7f80f413,0x7300f403,0x2b00d105,
+0x4623bf14,0x677e462b,0x677ce004,0x673db90b,0xab04e001,0x683b673b,
+0x6bbb66fb,0x7a1bb1a3,0xd0112b01,0xd00f2b03,0x99024640,0x463b4652,
+0xfa6af012,0xf243b940,0xf85843ec,0x46390003,0xf0062203,0xe043fa1b,
+0x781b6f7b,0x0f01f013,0xf8d8d004,0x33013570,0x3570f8c8,0xb1336bbb,
+0x2b027a1b,0x4640d103,0x4b1c4639,0xf8d84798,0x4639370c,0x3020f8ca,
+0x43ecf243,0x0003f858,0xe7de2200,0x301cf8d8,0x6978b1eb,0xfa6cf7fc,
+0x4d144c13,0x69785c23,0xeb085cea,0xf8d202c2,0x33013698,0x3698f8c2,
+0xfa5ef7fc,0x69795c23,0x98025cec,0x04c4eb08,0xf8d44b0b,0x4798569c,
+0xf8c41940,0x9802069c,0x22006979,0x47984b02,0xe8bdb00b,0x46c08ff0,
+0x1e005c41,0x1e008225,0x000238e6,0x00021010,0x1e003e11,0x4ff0e92d,
+0xb0a32400,0x4026f88d,0x402ff88d,0x402cf88d,0x4064f88d,0x9306461d,
+0x46068a9b,0x468a2b21,0x94214690,0x940a940f,0xd95c9207,0x9010f8d5,
+0xa81f2206,0xf7f74649,0xf109f9f1,0x92010206,0x3006f899,0xea437852,
+0xf8ad2302,0xf3c33020,0xf8ad0381,0xf8bd3022,0xf3c33020,0xf8ad1303,
+0xf8bd3024,0x2b023022,0x4888d004,0x51c0f645,0xf8eef7f6,0x3020f8bd,
+0x7340f403,0x7f40f5b3,0x2300bf14,0xf88d2301,0xf8bd302d,0x2b023022,
+0xf8bdbf0a,0x46233024,0x03c0f3c3,0x302ef88d,0x3004f898,0x0303f003,
+0xd1082b02,0x3020f9bd,0xda042b00,0x3024f8bd,0x03c0f3c3,0x2300e000,
+0xf89db2d9,0xf89d002d,0xf88d302e,0x2800102f,0x2222bf0c,0xb1032228,
+0xb1013202,0x9b063204,0x42938a9b,0xf8d6d205,0x33013404,0x3404f8c6,
+0x9901e244,0xf003790b,0x7c330201,0x2030f88d,0xd0452b00,0x3024f896,
+0xb118b103,0xf88d2300,0xe0153034,0x3020f8bd,0x7f80f413,0x3104d001,
+0xf413e005,0xd0017f00,0xe000310a,0x46303110,0xf0052201,0x3800f903,
+0x2001bf18,0x0034f88d,0xf1069801,0x3004014c,0x4b512206,0xb3384798,
+0x3020f8bd,0x7f80f413,0xf89dd105,0xb1133030,0x3034f89d,0xf89db9e3,
+0xb113302d,0x3030f89d,0x7c33b9b3,0xf89db133,0x2b003034,0x81fef000,
+0xe00e2701,0xf6454841,0xf7f66128,0xe1f5f861,0x4630b932,0xf0053104,
+0x2800f8d1,0x81eef000,0x98062700,0xf7fc2106,0x9a01f993,0x0318f102,
+0xf89d9302,0xb113302d,0x031ef102,0x23009302,0x3031f88d,0x302ef89d,
+0x9802b363,0xfa6ef7fa,0x13c0f3c0,0x3031f88d,0xf896b14b,0x2b003d46,
+0x81ccf000,0x69d39a06,0x0340f043,0x4b2961d3,0x0207f000,0x2026f88d,
+0x4b275c9a,0x930a5c9b,0x1300f3c0,0x302cf88d,0x33029b02,0xf89d9302,
+0x2b0f3026,0x3064f88d,0x481cd904,0x6153f645,0xf816f7f6,0x3031f89d,
+0x9806b90b,0x4650e003,0x4b1a9906,0x8a814798,0xf7fc3904,0x9a06f92f,
+0x8a939c02,0x93046912,0x1b1b1aa4,0x46509303,0x4b134629,0x1b004798,
+0xbb1f9005,0x43ecf243,0x990158f0,0xab219a07,0xfe86f005,0xf0402800,
+0xe1ac8185,0x7200f44f,0x7340f403,0xd0114293,0x33f8f8d6,0xf8c63301,
+0xe17733f8,0x00021040,0x1e00d671,0x000238e6,0x00021010,0x1e003e21,
+0x1e003e11,0x3848f8d6,0x68189907,0xfd72f009,0x3848f8d6,0x46214604,
+0xf0096818,0xf105fd43,0xf6420b1c,0x460125d8,0x46305170,0xff2af7fb,
+0xf88bb10c,0xf896400b,0xb17b3023,0x3024f896,0x9901b163,0x5058f506,
+0x310a3008,0x4b9f2206,0xb9184798,0x59714630,0xf8eaf7ff,0x3023f896,
+0xb95fb163,0xb11b9b21,0xf0137b1b,0xd1250f02,0xf44f4897,0xf7f541be,
+0xe01fff9b,0xb9eb9b21,0x2012f898,0x3013f898,0xea429901,0xf3c22203,
+0x463002c7,0x2a0e310a,0x2200bfd4,0xf0122201,0x9021f821,0xf896b950,
+0x2b003023,0x8116f040,0x340cf8d6,0xf8c63301,0xe10f340c,0xf8b39b21,
+0xf8ad20f0,0xb923206c,0xf6454881,0xf7f57118,0xf896ff6f,0xb1433023,
+0x3030f89d,0xb927b92b,0x1394f243,0x330154f7,0xf89d54f7,0x2b003030,
+0xf896d03c,0xb14b3023,0xf1069801,0x3010014c,0x4b722206,0x28004798,
+0x80e8f000,0x1d0c9901,0x786278a3,0x790b401a,0x40137921,0x401a78e2,
+0x40117963,0x2bff400b,0xf896d020,0xb9eb3022,0xe008461d,0xfb052206,
+0x46206102,0x4b633152,0xb1684798,0xf8d63501,0x429d3114,0xf243d3f2,
+0x58f343f0,0x8822b133,0x3333f243,0xd101429a,0xe0002300,0x2b002301,
+0x80b8f040,0x46404b59,0x47984649,0x0014f8cb,0x3030f89d,0xf0402b00,
+0xf0108092,0xd0266f00,0x0f00f410,0x63e0f400,0x0a1bd010,0x2b013b04,
+0xf0004a4f,0xd804007f,0xfb002314,0x68d82303,0x2314e017,0x2303fb00,
+0xe0126898,0x3b040a1b,0x4a472b01,0x007ff000,0x2314d804,0x2303fb00,
+0xe0066858,0xfb002314,0x5898f303,0xf000e001,0x2816007f,0xd80cd03a,
+0xd025280b,0x2802d804,0x2804d016,0xe05ad01a,0xd023280c,0xd0272812,
+0x2830e055,0xd804d03c,0xd02d2818,0xd0312824,0x2860e04d,0x286cd040,
+0x2848d044,0xe046d036,0x35d8f8d6,0xf8c63301,0xe04035d8,0x35dcf8d6,
+0xf8c63301,0xe03a35dc,0x35e0f8d6,0xf8c63301,0xe03435e0,0x35e4f8d6,
+0xf8c63301,0xe02e35e4,0x35e8f8d6,0xf8c63301,0xe02835e8,0x35ecf8d6,
+0xf8c63301,0xe02235ec,0x35f0f8d6,0xf8c63301,0xe01c35f0,0x35f4f8d6,
+0xf8c63301,0xe01635f4,0x35f8f8d6,0xf8c63301,0xe01035f8,0x35fcf8d6,
+0xf8c63301,0xe00a35fc,0x3600f8d6,0xf8c63301,0xe0043600,0x3604f8d6,
+0xf8c63301,0x99213604,0xf413684b,0xd0082f80,0x3030f89d,0xf8d6b92b,
+0xaa0107e8,0xfad6f002,0x4630e03d,0xf7ffaa01,0xe038faeb,0x1e00d671,
+0x00021040,0x0001edf9,0x1e00c744,0xb30369f3,0x3030f89d,0x9806b9eb,
+0xff76f7fb,0x4d164c15,0x98065c23,0xeb065cea,0xf8d202c2,0x33013698,
+0x3698f8c2,0xff68f7fb,0x99065c23,0x46505cec,0x04c4eb06,0xf8d44b0d,
+0x4798569c,0xf8c41940,0x4650069c,0x22009906,0x47984b09,0xf896e007,
+0xf8bd2023,0x2a003020,0xae4cf47f,0xb023e64c,0x8ff0e8bd,0x000238e6,
+0x00021010,0x1e003e11,0x1e005c41,0x4ff0e92d,0x2d00f8d0,0x9105b0a5,
+0x180cf8d0,0xf4122300,0x46070f00,0x92069107,0x3d00f8c0,0x2192d031,
+0xfc98f7fa,0xb2850040,0x4638b35d,0x0108f105,0xfc90f7fa,0xb3204681,
+0xf8d39b07,0xf105a180,0x46210418,0xf7fa4638,0xf105fc85,0x4680011a,
+0xf7fa4638,0x4621fc7f,0x46384606,0xfc7af7fa,0xd1ec4580,0x4306ea48,
+0x020aebc3,0xf2f9fbb2,0xfb093201,0x46383202,0x011cf105,0xf7fab292,
+0x9906fb49,0x1f80f411,0x48bad004,0x4154f246,0xfde2f7f5,0xf0129a06,
+0xd0020f40,0xf7fa4638,0x9b06f975,0x5f00f013,0x82e1f000,0x22009905,
+0xbf0c2900,0x31fff04f,0x91082108,0xe2b59209,0x3174f8d3,0x2086f8ad,
+0x308af8ad,0x4307f3c3,0xf8ad0c12,0xf04f308c,0xf8ad0300,0xb2933088,
+0x0307f003,0x2b056cb9,0x2084f8ad,0x93119110,0x48a0d904,0x61e0f246,
+0xfdaef7f5,0xb086f8bd,0x0360f00b,0xd1062b40,0x3568f8d7,0x331beb03,
+0x3568f8c7,0x9a11e284,0xeb072100,0xf8d30382,0x6ac30778,0x46824798,
+0x9b11b950,0xf2402b05,0x489084f8,0x5162f246,0xfd8ef7f5,0xbcf1f000,
+0x5010f8da,0x786b782a,0x2803ea42,0x204df895,0x304cf895,0x2302ea43,
+0x2084f8bd,0xd004429a,0xf2464884,0xf7f57118,0xf105fd77,0x910c016e,
+0x306ef895,0xf10a784a,0xea43091c,0x920b2202,0x3026f895,0x0f01f013,
+0xf999d018,0xeb073009,0xf8d30383,0xb9244dd0,0xf2464876,0xf7f5712a,
+0xf8b7fd5b,0xf4033324,0xf5b34370,0xbf145f80,0x23012300,0x0383eb04,
+0xe0076d1e,0xf1054638,0xf3c80126,0xf01112c0,0x4606fc61,0xf8cab10e,
+0xf8d9602c,0xf4133000,0xd00f6f80,0x6fc0f418,0x07e8f8d7,0xd104ab20,
+0x46524631,0xfbf8f001,0x4631e004,0xf0024652,0xe211fc07,0xf003782b,
+0x930f0304,0x3086f8bd,0x2203f3c3,0x3813ea5f,0xd005920e,0x33acf8d7,
+0x44433b01,0x33acf8c7,0xb1339b0e,0x33acf8d7,0x3b01990e,0xf8c7185b,
+0x9a0b33ac,0xf4824651,0xf3c36380,0x930d2380,0x4b4d6cb8,0xf8bd4798,
+0xf8971086,0xf3c12d61,0x429a13c0,0x0080f001,0x4638d001,0xf897e00a,
+0xb14b3d5f,0x4638b140,0xf7fd2100,0xf8bdf931,0x46381086,0xf92cf7fd,
+0x2086f8bd,0x13c0f3c2,0x3d61f887,0x3d5ff897,0xf002b14b,0x2b820382,
+0x2300d105,0x3d5ff887,0xf7fb4638,0xf8bdfb3f,0xf00b3086,0xf0130b1c,
+0xd0390f02,0x3000f8d9,0x1300f3c3,0x0401f083,0x3548f8d7,0xf8c73301,
+0xf8d73548,0x3b013568,0xf1b84443,0xf8c70f01,0xdd053568,0x7254f642,
+0x3b0158bb,0x50bb4443,0xb1ab9b0d,0x3578f8d7,0x7254f642,0xf8c73301,
+0x58bb3578,0xf8d7b123,0x33013554,0x3554f8c7,0x2b0158bb,0xf8d7d904,
+0x33013558,0x3558f8c7,0xf0002e00,0xf8d7840e,0x6233370c,0xbc0ff000,
+0x02fef013,0xf8d9d118,0xf4133000,0xd0135f82,0x3548f8d7,0x3301990d,
+0x3548f8c7,0xf8d7b121,0x33013578,0x3578f8c7,0xf0002e00,0xf8d783f1,
+0x4614370c,0xe3f26233,0x0f0cf1bb,0x80b5f000,0x0f10f1bb,0xf8d7d10a,
+0x330135b0,0x35b0f8c7,0x46c0e0ab,0x00021040,0x1e003e11,0x0f14f1bb,
+0x69fbd115,0x4650b133,0xfd7af7fb,0x5c1a4b8d,0x5c9b4b8d,0x02c3eb07,
+0x36d8f8d2,0x33012501,0x36d8f8c2,0x462c2200,0x920a4691,0xf1bbe097,
+0xf0000f04,0xf1bb808a,0xd1080f08,0xf2464883,0xf7f571de,0x2500fc49,
+0x950a462c,0xf1bbe080,0xd07a0f18,0x308cf8bd,0xf8d7b12b,0x330133d8,
+0x33d8f8c7,0xf895e071,0xf0133026,0xd01d0201,0x0f00f1b8,0xf8d7d004,
+0x33013548,0x3548f8c7,0x2b009b0d,0xf897d05b,0x2a002023,0xf8d7d157,
+0x33013578,0x3578f8c7,0x0f00f1b8,0xf8d7d04f,0x4614354c,0xf8c73301,
+0xe049354c,0x3023f897,0x990cb1cb,0xf0137c0b,0xd0140f01,0x2b009b0d,
+0xf8d7d048,0x33013578,0x3578f8c7,0x0f00f1b8,0xf8d7d040,0x2501354c,
+0x462c3301,0xf8c746a9,0x920a354c,0x990fe03b,0xf642b911,0xe00723ce,
+0x23cef642,0x9a0e5afb,0xd004429a,0x23d0f642,0x45985afb,0xf8d7d115,
+0x44433568,0x3568f8c7,0xb91b9b0d,0x462c2501,0xe0084699,0x3550f8d7,
+0x33012501,0x3550f8c7,0xf04f462c,0x950a0900,0xf8d7e015,0x330133bc,
+0x33bcf8c7,0x2400e005,0x0901f04f,0x940a464d,0x2400e009,0x940a2501,
+0xe00446a1,0x21002501,0x46a9462c,0xb176910a,0xf4136873,0xd00a4f80,
+0xf3c29a0b,0x2b020381,0xf8d7d105,0x463107e0,0xf0044652,0x990bf921,
+0x0381f3c1,0xd91d2b01,0xb1deb1e4,0x3086f8bd,0x0f40f013,0xf013d009,
+0xd006031c,0xd0042b14,0xf646482a,0xf7f5014d,0xf642fb97,0x5afc23d2,
+0x5afb3302,0x07f0f8d7,0x93004631,0x4623aa20,0xfe9cf00e,0x99114638,
+0xf7fa2201,0xf243fe1d,0x58f843ec,0x9b0e990f,0x2900ac20,0x2300bf08,
+0x23009301,0x46519302,0x4622465b,0x8000f8cd,0xfc14f005,0x3024f89a,
+0x4638b12b,0xf8bd4651,0xf7fa2086,0xf243fc91,0xf8571898,0x2b003008,
+0xf897d03a,0x2b003023,0xf897d036,0x2b003024,0x9a0cd032,0x5058f507,
+0x30081d11,0x4b082206,0xbb484798,0x0f00f1b9,0xf243d00c,0x54f8139c,
+0x46c0e022,0x000238e6,0x00021010,0x00021040,0x1e00d671,0xb1bb9b0a,
+0x07f0f8d7,0x46224631,0xf87cf00e,0xf243b180,0x5d3b149c,0xb2da3301,
+0xf857553b,0x429a3008,0x4638d906,0x01c7f06f,0xfc6af7fe,0x9004f807,
+0x9810b125,0x22014651,0x47984b79,0xb119990d,0xf6422200,0x50fa7354,
+0x9b089a09,0x429a3201,0xd2079209,0x380cf8d7,0x2170f8d3,0x0f01f012,
+0xad42f47f,0x43ecf243,0x210058f8,0xfa04f005,0x3df2f8b7,0xf507b12b,
+0x4638615e,0xf7fe310c,0x9909fc47,0x42919a08,0xf8d7d305,0xf0433d00,
+0xf8c75300,0x9b063d00,0x0f04f013,0xf8d7d00a,0x99073458,0xf8c73301,
+0xf2433458,0x58f843ec,0xf976f005,0xf0119906,0xd00b0f20,0xf6429b07,
+0xf8d34144,0x587b2124,0x9a074313,0x3124f8c2,0x507b2300,0xf4139b06,
+0xd0046f00,0x33d8f8d7,0xf8c73301,0x990633d8,0x4f00f411,0x80b4f000,
+0x25009a05,0xbf0c2a00,0x3bfff04f,0x0b08f04f,0x46a9462c,0xb90ce008,
+0xe000461d,0xf1096063,0x45d90901,0x461cd207,0x0778f8d7,0x47986dc3,
+0x28004603,0xf8d7d1ef,0x6e030778,0xe0884798,0xf8d5686b,0x93178010,
+0x606b2300,0x4628211e,0xa048f8d7,0xfbdcf7fb,0x300cf898,0x0f04f013,
+0x8aabd006,0xd91b2b01,0x21024628,0xfbd0f7fb,0x300cf898,0xf013692c,
+0x8aae0f01,0x482dd004,0x4149f647,0xfa84f7f5,0xd9092e07,0x79e279a3,
+0x2202ea43,0x300ef898,0x0f01f013,0xe02bd006,0x3404f8d7,0xf8c73301,
+0xe04c3404,0x0081f3c2,0xd0012802,0xd12f2800,0x0110f104,0x784a788b,
+0x431a7c24,0xea4478cb,0x43130202,0x431a790a,0x4313794b,0xf014d002,
+0xd0050f01,0x3414f8d7,0xf8c73301,0xe02e3414,0x356cf8d7,0x28023301,
+0x356cf8c7,0xe00fd009,0x3d46f897,0xf8d7b31b,0x4b0d07e0,0x462a4641,
+0x4638e021,0x46424651,0xf7ff462b,0xe01bf913,0xd80f2801,0x43ecf243,
+0x6cb958f8,0x462b4642,0xfaccf005,0x46c0e010,0x1e005c41,0x00021040,
+0x0001e491,0x3410f8d7,0xf8c73301,0x4b9b3410,0x46294650,0x47982200,
+0x2d009d17,0xaf74f47f,0xd30545d9,0x3d00f8d7,0x4300f443,0x3d00f8c7,
+0xf4119906,0xd0083f80,0x21014638,0xff14f7f9,0xf8d7b118,0xf01007f8,
+0x9a06f995,0x2f80f412,0xf8d7d004,0x68183848,0xff46f008,0xf4139b06,
+0xf0005f00,0xf8df80c6,0x68398254,0x270cf8d7,0x47c04883,0x680cf8d7,
+0xf8d76839,0x4881270c,0xf8d647c0,0xf8d62154,0xf8b63158,0xb2891434,
+0xf8b69116,0xb2891436,0xf8b69115,0xf8b613e8,0xb28993ea,0xb50ef8b6,
+0xf8b69114,0xf8d6a3ee,0xf8b61180,0x91120490,0x17c0f8b6,0x57d0f8b6,
+0x47d2f8b6,0xf8adb280,0xb2891012,0xb2ad9113,0xb2a46839,0x486c9000,
+0x462a47c0,0x99134623,0x47c0486a,0xf989fa1f,0x48699912,0xfa1f47c0,
+0x9b14fb8b,0x9a159916,0xfa8afa1f,0x9000f8cd,0x47c04864,0x46594652,
+0x47c04863,0x380cf8d7,0xf8b34862,0xb28914d0,0xf8d747c0,0x4860380c,
+0x14d2f8b3,0x47c0b289,0x380cf8d7,0xf8b3485d,0xb28914d4,0x217e47c0,
+0xf7fa4638,0x21a2f80b,0x46384604,0xf806f7fa,0x46024621,0x47c04856,
+0x311af241,0xf7f94638,0xf241fffd,0x46053116,0xf7f94638,0xf241fff7,
+0x46043118,0xf7f94638,0x4622fff1,0x46294603,0x47c0484c,0x3126f241,
+0xf7f94638,0x4601ffe7,0x47c04849,0x47c04849,0x0800f04f,0xf8d6e0c3,
+0xab182154,0x310450ca,0xd1f82920,0xab182400,0x484358e1,0x34044d43,
+0x2c2047a8,0x4842d1f7,0x0801f108,0xf1b847a8,0xf0400f08,0x68b980ac,
+0x3321f244,0x429a6b0a,0x6b4bd101,0x483bb123,0x41c9f246,0xf93cf7f5,
+0x35b4f8d7,0x073cf8d7,0xf8c73301,0xf7f935b4,0x9a06fb29,0xda742a00,
+0x380cf8d7,0x61992100,0x3d63f897,0xd16c2b02,0x2d80f8b7,0xd05b2a00,
+0x3d82f897,0xf8b7b133,0xf8873d7e,0xf8a71d82,0xe0513d80,0xf8a71e53,
+0xb29b3d80,0xd14b2b00,0x37f8f8d7,0xb993789b,0xf7f94638,0xb970fc0d,
+0x3d63f897,0xd10a2b02,0x3de0f897,0xf243b13b,0x58fb13dc,0x4638b91b,
+0xf7fc2101,0xf897fd53,0xb13b3d5f,0x0100f04f,0x1d80f8a7,0xf7fa4638,
+0xe036fb5f,0xf7fa4638,0xe032fb6d,0x1e005c41,0x00021046,0x00021086,
+0x000210ba,0x000210f2,0x00021125,0x00021138,0x00021181,0x000211a0,
+0x000211b2,0x000211c4,0x000211d6,0x000211f3,0x00021236,0x0002124b,
+0x00021252,0x1e004461,0x00021250,0x00021040,0x2b02687b,0x4823d804,
+0x21b0f646,0xf8c0f7f5,0x280cf8d7,0x5320f44f,0xf8b76193,0xb12b3df2,
+0x615ef507,0x310c4638,0xf9faf7fe,0xf7f94638,0xb920fb1f,0xf2464817,
+0xf7f541f6,0x9a05f8a9,0xd01e2a01,0x3d00f8d7,0x4812b1db,0x41f9f246,
+0xf89ef7f5,0x2100e015,0x480ee739,0x7108f246,0xf896f7f5,0xbb08f7ff,
+0xf04f4634,0x23000901,0x930a464d,0xf04fe4df,0x21000901,0x910a464d,
+0xf8d7e4ca,0x38000d00,0x2001bf18,0xe8bdb025,0x46c08ff0,0x00021040,
+0x41f0e92d,0x7c434698,0x4606b086,0x4615460f,0x4827b923,0x6177f248,
+0xf86ef7f5,0xf8d6b915,0x691d3848,0xf7fb4638,0x2807f97b,0xdd044604,
+0xf248481f,0xf7f5617e,0x2301f85f,0x93012200,0x92004b1c,0x46305d1b,
+0x9b0c9302,0x93049203,0x462a9b0d,0x46399305,0xf7fc4643,0x4b16fd2b,
+0x0207f004,0x62fd5c98,0x655ef506,0x280d350c,0x230fdd01,0x1c43e000,
+0x46304c10,0x463a4629,0x460447a0,0x4630b128,0xf7fe4629,0x2001f97d,
+0x6cb0e00a,0x46394b0a,0x47982201,0x33c0f8d6,0x33014620,0x33c0f8c6,
+0xe8bdb006,0x46c081f0,0x00021040,0x000238e6,0x0002101c,0x0001e1ad,
+0x1e005c41,0xb087b5f0,0x468e4605,0x7030f8bd,0xb10b461e,0xe002695c,
+0x5454f500,0x23023434,0xab059301,0x93029200,0xf1044628,0x21c003da,
+0xf7fc4672,0x4604fac1,0x9b05b160,0x801f4621,0x23004628,0x93004632,
+0xf7ff9301,0x2800ff79,0x2400bf08,0xb0074620,0x46c0bdf0,0x43f0e92d,
+0x790b4698,0xf013b087,0x46050401,0x4617460e,0xf500d125,0x33085358,
+0x9000f892,0xab059300,0xf1069302,0x21d0020a,0x034cf100,0x8004f8cd,
+0xfa92f7fc,0xb1904606,0x46424639,0xf7f69805,0x9a05f8b1,0x6349ea6f,
+0x6353ea6f,0x46287013,0x46224631,0x94004623,0xf7ff9401,0xb007ff41,
+0x83f0e8bd,0x41f0e92d,0x46104605,0x4616461c,0xf8c6f7fb,0x3df0f8b5,
+0x2b1f4607,0x4820d804,0x7105f644,0xffa8f7f4,0x615ef505,0x46284623,
+0x4632310c,0x47a04c1b,0x6ca8b920,0x22014631,0x47984b19,0xb97369eb,
+0xbb336aab,0x3df2f8b5,0xd9222b1f,0x073cf8d5,0x7380f44f,0xf04f2101,
+0x62ab32ff,0xf895e017,0xb1b3303f,0xfa112101,0x6aacf007,0xd1104220,
+0x5dda4b0c,0xfb02230c,0xf8b35303,0x2b1f3dfc,0xea40d907,0xf8d50304,
+0x62ab073c,0xf7f8463a,0xe8bdff93,0x46c081f0,0x00021040,0x0001e1ad,
+0x1e005c41,0x0002101c,0xf89db5f7,0x460e5020,0x88c94617,0xb165461a,
+0x0f80f011,0x7c43d001,0xf011b98b,0xd0010f40,0xb1637c43,0x7f80f411,
+0xf411e013,0xd0016f00,0xb9237c43,0x6f80f411,0x7c43d009,0x7c43b93b,
+0xbf0c2b00,0x0403f06f,0x0404f06f,0xf411e059,0xd0045f80,0x3844f8d0,
+0x2b007a1b,0x2300d04f,0x4c299301,0x46394630,0x47a0462b,0x28004604,
+0x2d00d147,0x8933d045,0x2b063b01,0x4639d841,0x2204a801,0xf806f7f6,
+0x99018933,0x2b053b02,0xe8dfd837,0x0305f003,0x22070a0c,0xe0222200,
+0xe0092300,0x4300f06f,0x2300e002,0x2300e017,0x33d3ea6f,0x33c3ea6f,
+0xf04388f0,0xf010027f,0xd0010320,0xe0032301,0x0f10f010,0x43d3bf08,
+0xdb114299,0xdc0f4291,0xf04fe013,0xea6f33ff,0xea6f4213,0x88f34202,
+0x0f20f013,0xb119d000,0x03fff042,0xd9044299,0x041cf06f,0xf06fe001,
+0x4620040a,0x46c0bdfe,0x1e003891,0x4ff0e92d,0x4617b089,0x2050f89d,
+0x469a4680,0x468b9207,0x4845b921,0x3176f643,0xfecef7f4,0x2b009b13,
+0x4841da04,0x3178f643,0xfec6f7f4,0xb9529a07,0xb1139b12,0x2a009a13,
+0x483bd16e,0x317bf643,0xfebaf7f4,0xb917e068,0x0f00f1ba,0x4836d00c,
+0x317ef643,0x9b12e006,0x0f03f013,0x4832d004,0x3184f643,0xfea8f7f4,
+0x646ef508,0xf04f3408,0x68250900,0x4658b195,0x4b2c213a,0xb9084798,
+0xe006465e,0xe0041c46,0x4b294631,0xb1204798,0x6828350c,0xd1f72800,
+0xb945e000,0x0901f109,0xf1b93434,0xd1e40f16,0x0416f06f,0xb917e038,
+0xf8dd9f12,0x892ba04c,0x4619b90b,0x9913e003,0xbf182b08,0x9b072104,
+0xb11388aa,0x1c5e0053,0x0056e000,0x23349a12,0x9a139202,0x8303fb09,
+0x9a159203,0x92059104,0xf8cd9700,0xf8d3a004,0xf8d34ef4,0x46290eec,
+0x465b4632,0xf01647a0,0x46040f01,0x4640d00c,0xfb12f7fc,0x3d58f8d8,
+0xf8c83301,0xe0033d58,0x2b049b13,0xe7a3d09b,0xb0094620,0x8ff0e8bd,
+0x00021040,0x1e00411d,0x1e004041,0x43f7e92d,0x46062934,0x4617460d,
+0xf8dd4698,0xd0159028,0x2902dc05,0x2903db0e,0x291bdd10,0x29d6e009,
+0xdc01d00c,0xe00429a3,0xd00729fb,0x130bf240,0xd0034299,0xf1b8b1e7,
+0xdd190f00,0x46294630,0x4643463a,0x9000f8cd,0xfd70f003,0x0f17f110,
+0xd10b4604,0x43ecf243,0x462958f0,0x4643463a,0x9000f8cd,0xfec8f004,
+0xe0184604,0xe009b910,0x0401f06f,0x0325f104,0xd9012b25,0xe0012400,
+0x4708f8c6,0x381cf896,0x68b0b14b,0xf7f52101,0xb120f98d,0xf6434803,
+0xf7f411ff,0x4620fdf1,0x83fee8bd,0x00021040,0x7c43b510,0xf8d0b11b,
+0xf7f8073c,0xbd10ffcf,0x4603b510,0xb1187c40,0x073cf8d3,0xffccf7f8,
+0x46c0bd10,0x2201b530,0x4604b093,0xf004460d,0xb960fc2f,0x46294620,
+0xf0042201,0x2800fc29,0x4831d15f,0x5175f640,0xfdc6f7f4,0x4b2fe059,
+0x46294620,0x0203f10d,0x6b634798,0xd0322b00,0x6340f405,0x6f40f5b3,
+0xf504d12d,0xb2e950a2,0x29023034,0xf5a3d802,0xe0016340,0x10db1e8b,
+0xf8102902,0xd801e003,0xe0042201,0xf0031e8b,0x22010307,0xea12409a,
+0xd001030e,0xe01d2201,0xd80129dd,0x10db1c8b,0x5cc029dd,0x2201d901,
+0x1c8be004,0x0307f003,0x409a2201,0xbf0c4202,0x22012200,0xb2eae00a,
+0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,0x0201f003,0x46294620,
+0x0303f10d,0xfe0ef7fa,0x23bcf642,0x462052e5,0xfa26f7fb,0xb1236b63,
+0x3d58f8d4,0xf8c43301,0xb0133d58,0x46c0bd30,0x00021040,0x0001e2f1,
+0x5354f500,0x42993334,0x460ab510,0xd1034604,0x32da2100,0xfc58f7f9,
+0xf0004620,0x2000fcc1,0x46c0bd10,0x0a007008,0x47707048,0x78007843,
+0x2003ea40,0x46c04770,0x7d98690b,0xea407ddb,0x09002003,0x46c04770,
+0x4684b500,0x0e00f04f,0x0300f04f,0x3218f8a0,0xfb0e2324,0xf503f303,
+0x44637306,0x22001c99,0xf04f3201,0x2a1033ff,0x3b01f801,0x3301d1f8,
+0x0e01f10e,0x3238f8c0,0x3230f8c0,0x322af8a0,0x322cf8c0,0xf1be3024,
+0xd1dd0f04,0x46c0bd00,0x47702001,0x6804b570,0xf8842600,0x460d602e,
+0x4608b909,0x6b63e00a,0xf7ffb133,0xb118fff1,0xf8844630,0xe001502e,
+0x0016f06f,0x46c0bd70,0x6804b510,0x31f1f241,0xf8905c63,0xf023202d,
+0xf002031f,0x431a0203,0x3027f890,0xf003009b,0x431a031c,0xbd105462,
+0x41f0e92d,0x46154606,0x460c461f,0x4837b921,0x71e2f640,0xfce0f7f4,
+0xf4136863,0xd1042f80,0xf6404832,0xf7f471e3,0x6873fcd7,0xd10418e4,
+0xf640482e,0xf7f471e6,0x7924fccf,0xd0522c00,0xf8d36833,0x2b033814,
+0x2407d101,0x2c07e006,0x4826d904,0x71f9f640,0xfcbef7f4,0x6f00f015,
+0xf415d026,0xf4050f00,0xd01063e0,0x3b040a1b,0x491f2b01,0x027ff005,
+0x2314d804,0x1303fb02,0xe01768d9,0xfb022314,0x68991303,0x0a1be012,
+0x2b013b04,0xf0054916,0xd804027f,0xfb022314,0x68591303,0x2314e006,
+0xf303fb02,0xe0015859,0x017ff005,0x0311f1c4,0x409a2201,0x185b1e53,
+0xf2f2fbb3,0xdd0e42ba,0x0303f1c7,0x2204189b,0xf4f2fb93,0xdd042cff,
+0xf6404804,0xf7f471ff,0xb2e0fc7b,0x2000e000,0x81f0e8bd,0x00021928,
+0x1e00c744,0xb5706843,0x230818cc,0xf8b07163,0x46053218,0x7f7af5b3,
+0x2310d901,0xf8b57163,0xf5b3323c,0xd9017f7a,0x71632310,0x3260f8b5,
+0x7f7af5b3,0x2310d901,0xf8b57163,0xf5b33284,0xd9017f7a,0x71632310,
+0x3028f895,0xbf182bff,0x79637163,0xbf282b14,0x71a32314,0xb92368e3,
+0xf240480e,0xf7f4314b,0x68e3fc3f,0xf44f79a1,0xfbb362c8,0x4299f3f2,
+0x4619bf28,0x71a1b2c9,0x324df895,0xbf28428b,0x71a3460b,0x4803b923,
+0x3156f240,0xfc28f7f4,0x46c0bd70,0x00021928,0xb510301c,0xb11c6904,
+0x88c38822,0xd004429a,0xf2404803,0xf7f411a7,0x4620fc17,0x46c0bd10,
+0x00021928,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,0xfc08f7f4,
+0x0507f004,0xd00342a5,0x215d4806,0xfc00f7f4,0xf0238af3,0xea450307,
+0x82f30303,0x46c0bd70,0x1e005ec1,0x00021928,0x4b06b510,0x47984604,
+0x4805b918,0xf7f42155,0x8ae0fbeb,0x0007f000,0x46c0bd10,0x1e005ec1,
+0x00021928,0x41f0e92d,0x46802300,0x700b460e,0xf7ffe015,0x78f3ffe5,
+0xd0044298,0xf640480d,0xf7f451be,0x78f4fbd1,0x4b0b6d71,0x0407f004,
+0x523cf8d1,0x0240f8d1,0x5d1b463a,0xf10847a8,0x78f10010,0x47984b05,
+0x28004607,0xe8bdd1e1,0x46c081f0,0x00021928,0x0002101c,0x1e003ac5,
+0x4ff7e92d,0x46164604,0x9101461d,0x485ab921,0x61e6f501,0xfba8f7f4,
+0x4857b926,0x7131f240,0xfba2f7f4,0x2b017833,0x80a1f040,0x990178f3,
+0xfb03220c,0x79891202,0x8bf78c12,0xbf34428a,0x460b4613,0xbfa8429f,
+0x2f00461f,0x808ff000,0xf89478b2,0x429a302f,0x428fd303,0xb92dd006,
+0xf8d4e085,0x19db3084,0x3084f8c4,0x79939a01,0xd10442bb,0x3088f8d4,
+0xf8c419db,0x78f23088,0x8bf16d73,0x0342eb03,0x2170f8b3,0x33018b73,
+0x05121ad2,0x18bb0d12,0xdc6a428b,0x0301ebc2,0x83f31bdb,0x19db78b3,
+0x9b0170b3,0xf10378f1,0x4b320010,0x46824798,0x482fb920,0x716ef240,
+0xfb52f7f4,0xf7ff4650,0x78f3ff5b,0xd0044298,0xf2404829,0xf7f4716f,
+0xf8dafb47,0x6d72301c,0x6380f443,0x301cf8ca,0xf10678f3,0xeb020514,
+0xf8b20243,0xea4f1170,0x1c4b5801,0x5818ea4f,0x090ff001,0x3170f8a2,
+0x04d9ea4f,0x8020f8aa,0xf0015d2b,0xfa430b07,0xf013f30b,0xd0040f01,
+0xf2404815,0xf7f47179,0xeb06fb1f,0x791b0309,0x4811b123,0x717af240,
+0xfb16f7f4,0xfa022201,0x5d2bf20b,0x552b4313,0x6d7178f4,0xf0044b0c,
+0x5d1b0407,0x801af8a6,0x523cf8d1,0x0240f8d1,0x47a84652,0xb29f1e7b,
+0xd19e2f00,0x2000e001,0x2001e000,0x8ffee8bd,0x00021928,0x1e003ac5,
+0x0002101c,0x41f0e92d,0x46067853,0x4614460f,0xd03c2b00,0x8b108b53,
+0x1a1b3301,0x5c03ea4f,0x5c1cea4f,0x020ff000,0xe0042500,0xb29d1c6b,
+0xf0031c53,0x4565020f,0xeb04d00f,0x7d0b01d2,0x0e07f002,0xf30efa43,
+0x0f01f013,0x7d8bd105,0xf30efa43,0x0f01f013,0x182bd0e8,0x0d1b051b,
+0x8be38323,0x83e318eb,0x2301b115,0x304af884,0x46222300,0x46394630,
+0xff02f7ff,0x78638be2,0xd904429a,0xf6404803,0xf7f42133,0xe8bdfaad,
+0x46c081f0,0x00021928,0x41f0e92d,0x5049f892,0x460e4680,0xf8d04614,
+0xb1e577e8,0x463a2100,0x6bd34608,0xd10442a3,0x0280eb07,0x63d32300,
+0x1c4be00a,0x3001b299,0x290a3204,0x482fd1f1,0x2148f640,0xfa88f7f4,
+0x0048f8d8,0x22584621,0x47984b2b,0xf892e04f,0xb9233048,0xf6404827,
+0xf7f4214d,0xf016fa79,0xf8840f02,0xd03c5048,0xf0038b23,0x8c230c0f,
+0x060ff003,0xf104e02c,0xea4f0e16,0xf81e00dc,0xf00c2000,0xfa520107,
+0xf013f301,0xd01b0f01,0x408b2301,0xb2dd43db,0x0305ea02,0x3000f80e,
+0x0e14f104,0x2000f81e,0xf301fa52,0x0f01f013,0xea02d00a,0xf80e0305,
+0xeb043000,0x2300020c,0x78a37113,0x70a33b01,0x0301f10c,0x0c0ff003,
+0xd1d045b4,0x68796d63,0x18594638,0xf7ff4622,0xf8d8ff45,0x462107e8,
+0xf0002200,0xe8bdf807,0x46c081f0,0x00021928,0x1e005c15,0x4ff0e92d,
+0x3048f891,0x4680b085,0x4614460d,0xf0402b00,0x780a80da,0xf0402a01,
+0xf89180d6,0x2b31304c,0x80d1f200,0xd1052b19,0xf8813301,0xf881304c,
+0xe0c8204b,0xb10c8b08,0xe0279003,0x8beb786a,0x010ff000,0x0702ebc3,
+0x36fff04f,0x2308e010,0xf3f3fb91,0x7d9a18eb,0xea014b5c,0x411a0303,
+0x0f01f012,0x4626bf18,0xf0031c4b,0x3401010f,0xdbec42bc,0x3ffff1b6,
+0x2300d103,0x304cf885,0x1c43e0a1,0x051b199b,0x93030d1b,0xf8d86d6b,
+0x189b2004,0x484eb923,0x11f6f640,0xf9d8f7f4,0x3009f898,0xd16f2b00,
+0xa000f8d8,0x9054f8d5,0xb003f895,0x0f00f1ba,0x4845d104,0x11adf241,
+0xf9c6f7f4,0x0f00f1b9,0x4841d104,0x11aef241,0xf9bef7f4,0x3014f8d9,
+0x483db923,0x11aff241,0xf9b6f7f4,0x0f07f1bb,0x4839d904,0x11b0f241,
+0xf9aef7f4,0x6de8f89a,0xd1392e00,0x21144650,0xfcb4f7fb,0x28004607,
+0x6904d032,0x037bf06f,0x70667023,0x70e670a6,0xf1091d20,0x22060119,
+0xfa7cf7f5,0x1014f8d9,0x000af104,0x220631da,0xfa74f7f5,0x330bea4f,
+0xf043b29b,0x74230304,0x0210f104,0x70530a1b,0x46389903,0xb29b010b,
+0x0a1b7093,0x465970d3,0xfd68f7ff,0x46502401,0x464a4639,0x96002303,
+0xf7fd9401,0xbb00fd33,0xf8852301,0xe026304b,0x404bf885,0xf8d8e023,
+0x330130b0,0x30b0f8c8,0x304cf895,0xf8853301,0x2301304c,0x3048f885,
+0x842b9b03,0x3009f898,0xd1102b01,0x0000f8d8,0x462a2102,0xfea8f7ff,
+0xf8d8e009,0x49070000,0x463b462a,0xfac0f7f9,0xd1d92800,0xb005e7db,
+0x8ff0e8bd,0x80000007,0x00021928,0x0000c0ad,0x41f0e92d,0x69d34698,
+0xf4134607,0x460d6f80,0xd1044616,0xf44f483c,0xf7f46127,0x2d00f92d,
+0x686bd070,0x2f80f413,0x687bd06c,0xd10418ec,0xf6404835,0xf7f42176,
+0x4630f91f,0xfd28f7ff,0x0080eb04,0x40d8f8d0,0xd05b2c00,0x2b027823,
+0x6d63d058,0xd00442ab,0xf640482b,0xf7f4217e,0x6932f90b,0x3084f892,
+0x2085f892,0x2302ea43,0x8b230918,0xebc37862,0x051b0300,0x42930d1b,
+0xf000da40,0xf104050f,0xea4f0114,0xf8110ed5,0xf000200e,0xfa520007,
+0xf013f300,0xd1050f01,0xf6404819,0xf7f4218e,0xe02bf8e7,0x3006f898,
+0x0602f013,0x2301d013,0xea224083,0xf8010303,0x1962300e,0x71132300,
+0x463878a3,0x70a33b01,0x6d636879,0x18594622,0xfddcf7ff,0x2201e012,
+0xf8d74082,0xf10430a4,0x33010116,0x30a4f8c7,0x300ef811,0x43134638,
+0x300ef801,0x46214632,0xfe90f7ff,0x81f0e8bd,0x00021928,0x6804b510,
+0x302ef894,0xf890b1d3,0xf003302d,0x2b030303,0x4620d109,0xf64f21ba,
+0xf7f872ff,0x4620fe03,0x220a213c,0x4620e008,0xf44f21ba,0xf7f84200,
+0x4620fdf9,0x2205213c,0xfdf4f7f8,0x46c0bd10,0x4605b537,0x22082100,
+0xf7f54668,0xf105f953,0x2206014c,0xf7f54668,0xf505f96d,0x214860e8,
+0x466b2208,0xf7fa466c,0xbd3ef855,0x47f0e92d,0x461e4614,0x46884607,
+0x21004610,0xf8dd2280,0xf7f59020,0x6931f937,0x60216166,0x780b784a,
+0xea432000,0x83a32302,0xf3c38ba2,0x83e30381,0x1303f3c2,0x790b8423,
+0x7240f402,0x0301f003,0x302cf884,0xf5b28ab3,0xbf147f40,0x22012200,
+0x8be360e3,0xbf0c4282,0x251e2518,0x2b021949,0x8c23bf0a,0xf3c34603,
+0xb2db03c0,0x002ff884,0x2029f884,0xf8846061,0xb1c3302a,0xf7ff6860,
+0xf3c0faed,0xf00013c0,0xf8840207,0x4b1e302d,0x2022f884,0x4b1d5c9a,
+0x1000f3c0,0xf8845c9b,0x62630028,0x33026863,0x1cab6063,0xf899b29d,
+0xf0033004,0x2b020303,0xf9b4d107,0x2b00301c,0x8c23da03,0x03c0f3c3,
+0x2300e000,0xf884b2db,0xb123302b,0x33046863,0x1d2b6063,0x68e3b29d,
+0x1b5b6cb8,0x463160a3,0x47984b09,0x30f0f8b8,0xf8a41b40,0x23003068,
+0xf8c46120,0x63639018,0xe8bd63a3,0x46c087f0,0x000238e6,0x00021010,
+0x1e003e11,0x47f0e92d,0xeb014699,0xf8d30382,0xb0a240f8,0x460f4680,
+0x2c004692,0x4825d143,0x212df240,0xffe0f7f3,0x88e3e040,0x030ff003,
+0x0583eb04,0xb32668ae,0x60ab2300,0x464078a3,0x70a33b01,0xf7ff4631,
+0x88e3fa87,0xd0044283,0xf2404818,0xf7f32136,0x6cabffc7,0x9300ac02,
+0x46334622,0x68394640,0xff40f7ff,0x46404622,0xf7fd6839,0xeb07fc31,
+0xf8d3038a,0xb1ac40f8,0xf8d8e006,0xf8d227e8,0x330130e0,0x30e0f8c2,
+0x71232301,0x330188e3,0x0d1b051b,0xf10980e3,0xfa1f33ff,0xf1b9f983,
+0xd1be0f00,0xe8bdb022,0x46c087f0,0x00021928,0x4ff0e92d,0x0382eb01,
+0x50f8f8d3,0x4681b0a3,0x4693460c,0xd0362d00,0xe02d88eb,0x60b32300,
+0x464878ab,0x70ab3b01,0xf7ff4639,0x88ebfa39,0xd0044283,0xf2404815,
+0xf7f32111,0x6cb3ff79,0x0a08f10d,0x46489300,0x46526821,0xf7ff463b,
+0x2301fef1,0x88eb712b,0x33014648,0x0d1b051b,0x682180eb,0xf7fd4652,
+0xeb04fbdb,0xf8d3038b,0xb14550f8,0x0301f108,0x080ff003,0x0688eb05,
+0x2f0068b7,0xb023d1ca,0x8ff0e8bd,0x00021928,0x41f0e92d,0x46164604,
+0xf8bd461d,0x29000018,0x684bd051,0x2f80f413,0x2884d04d,0x2d03d136,
+0x6863dd44,0x8000f8d4,0xd10418cf,0xf6404823,0xf7f37114,0x7832ff35,
+0xea427873,0x0b1d2303,0xd8332d07,0x0f02f013,0xeb07d130,0xf8d30385,
+0xb35910f8,0x30fcf8d4,0xf8c43301,0x78f330fc,0xea4278b2,0x88cb2203,
+0x1312ebc3,0x0d1b051b,0x6f00f5b3,0x4640d81f,0x462a4639,0xff1ef7ff,
+0x46394640,0xf7ff462a,0xe014ff73,0xd1072894,0xdd0b2d0b,0x30b4f8d4,
+0xf8c43301,0xe00a30b4,0xf6404806,0xf7f351a9,0xe004fefb,0x3104f8d4,
+0xf8c43301,0xe8bd3104,0x46c081f0,0x00021928,0xeb01b570,0xf8d60682,
+0x460530f8,0x6800b30b,0xf7ff2310,0xf8d6fef3,0xb17c40f8,0xb12378a3,
+0xf640480c,0xf7f351d1,0x682bfedb,0x6c984621,0x4b092288,0x23004798,
+0x30f8f8c6,0x3b018eeb,0x86ebb29b,0x682bb92b,0xf8d36ba9,0x4b03073c,
+0xbd704798,0x00021928,0x1e005c15,0x1e006221,0x4ff0e92d,0x469ab089,
+0x3048f8bd,0x4693460e,0xf8bd9305,0x4607904c,0x4828b920,0x1155f241,
+0xfeaef7f3,0x4825b926,0x1156f241,0xfea8f7f3,0xb9236973,0xf2414821,
+0xf7f31157,0xf897fea1,0xb1155de8,0x0018f06f,0x6973e034,0xf1034638,
+0x920002d4,0x92012209,0x9202aa07,0xf10621d0,0x33da0219,0xf94cf7fb,
+0xb9104680,0x001af06f,0x9c07e020,0x70232303,0x70632301,0x1ce14658,
+0xa002f884,0xf92af7ff,0x1d614648,0xf926f7ff,0x1de19805,0xf922f7ff,
+0xf3c94640,0xf7ff0183,0x4638fa5d,0x46324641,0x9500462b,0xf7fe9501,
+0x4628fdeb,0xe8bdb009,0x46c08ff0,0x00021928,0x0282eb01,0x47f0e92d,
+0x40d8f8d2,0x46884606,0x2c004699,0x8082f000,0x70232303,0x3048f894,
+0x461fbb6b,0x0516f104,0x00ccf3c7,0xf0075c2a,0xfa520107,0xf013f301,
+0xd01d0f01,0x408b2301,0xfa5f43db,0xea02fe83,0x542b030e,0x0514f104,
+0xfa525c2a,0xf013f301,0xd0080f01,0x030eea02,0x19e2542b,0x71132300,
+0x3b0178a3,0x463070a3,0x46224641,0xfb32f7ff,0x2f103701,0x78a3d1d2,
+0xf1b9b11b,0xd0490f00,0x8be2e008,0x429a7863,0x4823d004,0x51fdf640,
+0xfe12f7f3,0x6d626873,0x78e318d5,0x0383eb05,0x30d8f8d3,0xd004429c,
+0xf640481b,0xf7f36101,0x78e3fe03,0xeb052700,0xf8c30383,0x683370d8,
+0x0110f105,0x78e26c98,0xf7f42301,0xf894fe6d,0xb9333048,0x46216833,
+0x22586c98,0x47984b0f,0xf896e018,0xeb063030,0x6be90583,0x6833b121,
+0x6c982258,0x47984b09,0x3030f896,0x2b0963ec,0x463bd101,0x3301e001,
+0xf886b2db,0x23013030,0x3049f884,0x87f0e8bd,0x00021928,0x1e005c15,
+0x4ff0e92d,0x4680b087,0x469a4617,0xb040f8bd,0xb921460c,0xf6404843,
+0xf7f37189,0x6823fdbd,0x4840b923,0x718af640,0xfdb6f7f3,0x685b6823,
+0x2f80f413,0x483bd104,0x718bf640,0xfdacf7f3,0xd9042f07,0xf6404837,
+0xf7f3718c,0xf1bafda5,0xd0060f00,0x46214640,0x2300463a,0xff3cf7ff,
+0x4640e004,0x463a4621,0xfea6f7ff,0x6000f8d8,0xb9266825,0xf241482b,
+0xf7f31181,0xb925fd8d,0xf2414828,0xf7f31182,0x696bfd87,0x4825b923,
+0x1183f241,0xfd80f7f3,0xd9042f07,0xf2414821,0xf7f31184,0xf896fd79,
+0x2c004de8,0x696bd132,0xf1034630,0x920002d4,0x92012206,0x9202aa05,
+0xf10521d0,0x33da0219,0xf826f7fb,0xb3084681,0x23039905,0x3b01700b,
+0xea4f704b,0x033b22ca,0x4370f403,0x6200f402,0xf002431a,0x708b03ff,
+0xea4f0a12,0x70ca231b,0xf881714b,0x4639b004,0xf938f7ff,0x46494630,
+0x4623462a,0x94019400,0xfcc6f7fe,0x3108f8d8,0xf8c83301,0xb0073108,
+0x8ff0e8bd,0x00021928,0x4ff0e92d,0x781b461c,0xf003b085,0x2b03037f,
+0x46894605,0x9e0e4690,0x48aad004,0x6156f44f,0xfd26f7f3,0x0f00f1b9,
+0x815df000,0xf3402e01,0x7867814f,0xf0002f01,0xd30380bf,0xf0002f02,
+0xe1458113,0xf3402e08,0x686b8143,0xeb196828,0x90030b03,0x489bd104,
+0x6125f640,0xfd08f7f3,0xf7fe1d60,0x4606ffb7,0xf7fe1de0,0x9002ffb3,
+0xf7fe1ce0,0xf3c0ffaf,0xf1b80883,0x46070f07,0x202ef895,0x8106f200,
+0x3000f994,0xda0c2b00,0x0388eb0b,0x10d8f8d3,0xf0002900,0x780b80fb,
+0xf0402b02,0x465880f7,0x42b2e0ba,0x4613bf34,0xfa1f4633,0x682bfa83,
+0x302ef893,0xeb08b123,0xf8930305,0xb93b32a8,0x980378a3,0x22254649,
+0xa000f8cd,0xe00b9701,0xf3c07caa,0x429a0340,0x78a3d00e,0x98039001,
+0xa000f8cd,0x22264649,0xfdfef7ff,0x30f8f8d5,0xf8c53301,0xe0f230f8,
+0x46594628,0xf7ff4642,0xeb0bfdc3,0xf8d30388,0xb12330f8,0xf640486b,
+0xf7f36161,0x2088fca9,0x4b692100,0x46064798,0x78a3b938,0x46499803,
+0xf8cd2201,0x9701a000,0x2288e7da,0xf7f42100,0xf3c7fd5d,0x7d2a1387,
+0x429ab123,0x4611bf34,0xe0004619,0x98024611,0x023ff007,0x0388eb0b,
+0xf8c32701,0x707160f8,0x09037037,0xf8d580f3,0xea4230f4,0x19db1281,
+0x30f4f8c5,0x0201f022,0x980378a3,0x46499201,0xf8cd2200,0xf7ffa000,
+0xf8d5fdaf,0x19db30f8,0x30f8f8c5,0xb93b8eeb,0x6ba99b03,0x073cf8d3,
+0x463b2264,0x47a04c47,0x33018eeb,0xe09686eb,0xf3402e08,0x686b8089,
+0xa000f8d5,0x0603eb19,0x483ed104,0x619df640,0xfc4ef7f3,0x3000f994,
+0xdb5b2b00,0xf7fe1ce0,0x4680fef9,0xf7fe1d60,0xf3c0fef5,0x29070183,
+0xeb06d850,0xf8d30381,0x2c0040d8,0x7823d04a,0xd1472b02,0x0f00f1b8,
+0x7caad108,0x0340f3c0,0xd103429a,0x1087f3c0,0xd9042810,0x46214630,
+0xf844f7ff,0x7060e036,0xeb0983e0,0xf8b30341,0x70273170,0x0d1b051b,
+0x83a38323,0x051b3b01,0x83630d1b,0x30acf8d5,0x07e8f8da,0xf8c53301,
+0x462130ac,0xf7ff463a,0x4628f9e1,0x46224631,0xf7ff4643,0xe03ef851,
+0xdd312e05,0xeb19686b,0xd1040603,0xf6404813,0xf7f361e4,0xf994fbf9,
+0x2b003000,0x78a2db06,0xea4278e3,0x0b022003,0xd9052a07,0x3104f8d5,
+0xf8c53301,0xe0223104,0x23c0f3c0,0x4628b123,0xf7ff4631,0xe003fcf1,
+0x46314628,0xfd7cf7ff,0x310cf8d5,0xf8c53301,0xe010310c,0x00021928,
+0x1e00578d,0x1e0061f9,0x3104f8d5,0x33016828,0x3104f8c5,0x46224641,
+0xf7fe4633,0xb005fbd7,0x8ff0e8bd,0xe92d6843,0x18cf41f0,0xd1044605,
+0xf240480b,0xf7f3311b,0x2600fbb7,0x4628b2f4,0x46224639,0xfcc0f7ff,
+0x23003601,0x46394628,0xf7ff4622,0x2e08fd49,0xe8bdd1f0,0x46c081f0,
+0x00021928,0x4ff0e92d,0xb0858c13,0x2b089103,0x46174606,0xb022f892,
+0x9000f8d0,0x4648d001,0x9a03e048,0x489fb922,0x41d9f640,0xfb8cf7f3,
+0x68539a03,0x2f80f413,0x489ad104,0x41daf640,0xfb82f7f3,0x0f07f1bb,
+0x4896d904,0x41dcf640,0xfb7af7f3,0x302cf897,0x4892b123,0x41ddf640,
+0xfb72f7f3,0x9a036873,0x0a03eb12,0x488dd104,0x614ef44f,0xfb68f7f3,
+0x038beb0a,0x50f8f8d3,0x69bb6839,0x791bb9cd,0x0303f003,0xd10e2b02,
+0x3c03f811,0x0f08f013,0x2301d009,0x024beb0a,0x3118f882,0x30dcf8d6,
+0xf8c63301,0x990330dc,0x463a4648,0xffc0f7fc,0x791be0f0,0x0303f003,
+0xd1382b02,0x3c03f811,0x0f08f013,0xf8d6d01e,0x330130c4,0x30c4f8c6,
+0x30c8f8d6,0xf8c63301,0xf91130c8,0x2b003c03,0xf8d6da04,0x330130d4,
+0x30d4f8c6,0x3c03f811,0x0330f003,0xd11f2b10,0x30d8f8d6,0xf8c63301,
+0xe01930d8,0x2c04f811,0x3c05f811,0xf8114313,0x431a2c06,0xf8d6d105,
+0x330130c8,0x30c8f8c6,0xf8d6e00a,0x330130cc,0x30ccf8c6,0xf8d6e004,
+0x330130d0,0x30d0f8c6,0x7d9a683b,0xea427ddb,0xf0132303,0xf0400f0f,
+0x091c8092,0xf00488eb,0x429c080f,0x4648d125,0xf7fe6979,0x4284fda9,
+0x484ed004,0x5112f640,0xfaeaf7f3,0x0388eb05,0xb123689b,0xf6404849,
+0xf7f35113,0x4648fae1,0x463a9903,0xff54f7fc,0x712b2301,0x464888eb,
+0x051b3301,0x80eb0d1b,0x465a4651,0xfb38f7ff,0xebc3e078,0x051a0304,
+0x0d127869,0xd203428a,0x0388eb05,0xb913689b,0x6f00f5b2,0x4648d916,
+0xf7fe6979,0x4284fd75,0x4834d004,0x5127f640,0xfab6f7f3,0xf8d94b32,
+0x69790048,0x47982200,0x30e8f8d6,0xf8c63301,0xe05330e8,0xd328428a,
+0x0301f1c1,0xb29b18d3,0x46514648,0xf7ff465a,0xeb0afaad,0xf8d3038b,
+0xb17d50f8,0x0488eb05,0xb12368a3,0xf6404821,0xf7f3513a,0x697bfa91,
+0x69bb60a3,0x78ab64a3,0x70ab3301,0x46514648,0xf7ff465a,0xf8d6faed,
+0x330130f0,0x30f0f8c6,0xeb05e028,0x68a30488,0x4814b123,0x5148f640,
+0xfa76f7f3,0x60a3697b,0x64a369bb,0x330178ab,0xf8d670ab,0x330130e4,
+0x30e4f8c6,0xf8d9e012,0x69790048,0x4b0a2200,0xf8d64798,0x46303104,
+0xf8c63301,0x23013104,0x46519300,0x3b01465a,0xfc8af7ff,0xe8bdb005,
+0x46c08ff0,0x00021928,0x1e005c41,0x47f0e92d,0x68077913,0x460d4680,
+0xf0034616,0xe0230907,0xf41369eb,0xd1046f80,0xf640482f,0xf7f321ce,
+0x692bfa3b,0x781c2201,0x6cb8785b,0x2403ea44,0x30c0f8d8,0x33014629,
+0x30c0f8c8,0x2441f3c4,0x47984b26,0xd0092c03,0x0389eb07,0x0778f8d3,
+0x6ac32100,0x46054798,0xd1d92d00,0x79f379b2,0x2203ea42,0x0f02f012,
+0xf012d02d,0xd1120f40,0xf6404819,0xf7f321e2,0xe00cfa0f,0x4b182001,
+0x1c6b4798,0x2d0bb2dd,0x4813d106,0x21eaf640,0xfa02f7f3,0x2500e01d,
+0x380cf8d7,0x4170f8d3,0x0f01f014,0xf014d0ea,0xd0040f40,0xf640480a,
+0xf7f321ef,0xf014f9f1,0xd1040f20,0xf44f4806,0xf7f3612f,0x4638f9e9,
+0xf9984649,0xf7f8202c,0xe8bdfc7b,0x46c087f0,0x00021928,0x1e005c41,
+0x1e005d75,0x47f3e92d,0x8000f8d0,0x445cf241,0x3004f858,0x68194606,
+0xf00fa801,0xf858f8a5,0x681f3004,0x687be060,0x2f80f413,0x6873d058,
+0x0900f04f,0x46aa18fd,0x20f8f8d5,0xfc89fa5f,0xd0472a00,0xb11b7913,
+0x71132300,0xe04170d3,0x2b007893,0x78d3d03e,0xb2d93301,0x687b70d1,
+0x7f80f413,0x8e72bf14,0x23648eb2,0xf2f3fbb2,0xd32f4291,0x30ecf8d6,
+0x40f8f8d5,0xf8c63301,0xb92c30ec,0xf240481a,0xf7f32152,0xe021f995,
+0xf04f88e0,0x46020e00,0xf0024601,0xeb04030f,0x689b0383,0xbf182b00,
+0xf10e4611,0xfa1f0301,0xf1befe83,0xd0030f10,0x051a1c53,0xe7ec0d12,
+0x0301ebc0,0x0d1b051b,0x46514640,0x33014662,0xf980f7ff,0x0901f109,
+0xf1b93504,0xd1ab0f08,0xf00fa801,0x4607f82f,0xd19c2f00,0x87fce8bd,
+0x00021928,0x6803b537,0x445cf241,0x4605591b,0xa8016819,0xf830f00f,
+0x591b682b,0x68182400,0x6843e00a,0x2f80f413,0x686bd003,0x8adb18c3,
+0xa80118e4,0xf80ef00f,0xd1f22800,0xbd3e4620,0x6803b537,0x445cf241,
+0x4605591b,0xa8016819,0xf812f00f,0x591b682b,0xe00a6819,0xf413684b,
+0xd0022f80,0xf7fe4628,0xa801fcbd,0xfff2f00e,0x29004601,0xbd3ed1f2,
+0x4ff0e92d,0x9309b0a3,0x900c69d3,0x6f80f413,0x920a910b,0xf1026806,
+0xd104071c,0xf64048b3,0xf7f321fe,0x9809f915,0xf0137983,0xd1040f20,
+0xf44f48ae,0xf7f36130,0x990bf90b,0xf0002900,0x684b80a4,0x2f80f413,
+0x809ff000,0x9d0b9a0c,0x18ec6853,0x48a5d104,0x310cf640,0xf8f8f7f3,
+0xf7fe980a,0xb2c0fd01,0x0080eb04,0x20d8f8d0,0xf0002a00,0x7813808a,
+0xf0002b02,0x6d538086,0x4283980b,0x4899d004,0x3115f640,0xf8e0f7f3,
+0xf7fe980a,0x990bfcb9,0xd0044288,0xf6404893,0xf7f33116,0xf8d6f8d5,
+0x9a0b370c,0x62139d09,0xf01379ab,0xd10f0302,0x461d461e,0x2001e028,
+0x47984b8b,0xb2dc1c63,0xd1062c0b,0xf6404887,0xf7f33128,0xe058f8bd,
+0xf8d62400,0xf8d3380c,0xf0155170,0xd0ea0f01,0x0f40f015,0x487fd004,
+0x3131f640,0xf8acf7f3,0x0f20f015,0x487bd104,0x3132f640,0xf8a4f7f3,
+0x380cf8d6,0x6174f8d3,0x980c683b,0x6f80f413,0x8000f8d0,0x4873d104,
+0x3164f640,0xf894f7f3,0x798b9909,0x0f20f013,0x486ed104,0x3166f640,
+0xf88af7f3,0x68539a0b,0x2f80f413,0x980cd021,0x6843990b,0x931c18cb,
+0x4866d104,0x3172f640,0xf87af7f3,0xf7fe980a,0x9a1cfc83,0x990cb2c0,
+0x0380eb02,0xf8d3901d,0x1843b0d8,0x920e7dda,0x930d7fdb,0x0f00f1bb,
+0xf89bd003,0x2b023000,0x980cd105,0x9a09990a,0xfe10f7ff,0xf8dbe32a,
+0x980b3054,0xd0044283,0xf6404852,0xf7f3317e,0x980af853,0xfc2cf7fe,
+0x4288990b,0x484dd004,0x317ff640,0xf848f7f3,0x370cf8d8,0x21009a0b,
+0xa8206213,0xf7f42208,0x9809f905,0xf0037903,0x931b0307,0x79c37982,
+0x2103ea42,0x021cf001,0xf8989213,0xf3c12d61,0x429a13c0,0x0080f001,
+0x4640d001,0xf898e00d,0xb1633d5f,0x4640b158,0xf7fa2100,0x9809fc5d,
+0x79c17983,0xea434640,0xf7fa2101,0x9909fc55,0x09db798b,0x3d61f888,
+0x3d5ff898,0x798bb153,0x0382f003,0xd1052b82,0xf8882300,0x46403d5f,
+0xfe68f7f8,0x799a9b09,0xea4279db,0xf0132303,0xd04f0902,0x0f40f013,
+0x4824d104,0x31adf640,0xfff6f7f2,0x7ac39809,0xea427a82,0x79c32403,
+0xf015091b,0xf88d0f40,0xd0043080,0xf640481b,0xf7f231b1,0xf015ffe5,
+0xd1040f20,0xf6404817,0xf7f231b2,0xf89dffdd,0xf0053080,0xea43021e,
+0xf88d03c2,0x0a2b3080,0x3081f88d,0xf88d0c2b,0x0e2b3082,0xf88d9913,
+0x0a333083,0x3085f88d,0x39180c33,0x2101bf18,0xf88d0924,0xf04f3086,
+0x0e330901,0x91122200,0xf88d941a,0xf88d6084,0xf8cd3087,0x92109044,
+0x46c0e243,0x00021928,0x1e005d75,0x98139d0c,0x30b8f8d5,0xf8c53301,
+0x280030b8,0x80edf000,0xd10b2810,0x35b0f8d8,0x9068f8cd,0xf8c83301,
+0xf8cd35b0,0xf8cd9048,0xe0f99044,0x290c9913,0x80cef040,0x9a1d4b98,
+0x3130f8d3,0x931e4640,0xf8d84b96,0xf81367e8,0xea4fa002,0x31ec014a,
+0xfe00f7f7,0xfb0a2324,0xf8b46403,0xebc3322a,0xb29d0300,0xf0002d00,
+0xf8d680b3,0xf8a43210,0x2b00022a,0x80aff000,0x3844f8d8,0x7214f8d6,
+0xf8136b1b,0xea4f300a,0x45be2e03,0x80a3f240,0x322cf8d4,0x18eb6e71,
+0xf8d42b09,0xf8c42234,0xf240322c,0x1a898095,0xf2f3fbb1,0x3210f8d6,
+0xd905429a,0x3387f241,0xf2404299,0xe00d8089,0x0229f894,0x63e1f44f,
+0xbf342810,0x22104602,0xf503fb02,0x1218f8b4,0xdb0542a9,0xf8c46e73,
+0xf8c4922c,0xe0733234,0x030eebc7,0x4291b29a,0xf501d21c,0xb29b737a,
+0xf8a44293,0x46303218,0xf8a4bf88,0xf7ff2218,0xf8b4fde3,0x981e3218,
+0xebc32164,0xfbb00305,0xfb02f2f1,0xfbb2f203,0xfb02f2f5,0xf8c4f201,
+0xe0482238,0xd9462801,0xd10128ff,0xe000230f,0x21241e43,0xf101fb0a,
+0x3229f884,0x7306f501,0xf8911989,0x18f70229,0xbf282810,0xf44f2010,
+0xfb0063e1,0x9d1ef003,0x2218f8b1,0xfbb52464,0xebc2f3f4,0xfb030200,
+0xfbb3f302,0xfb03f3f0,0x2000f304,0x3238f8c1,0x460409dd,0x18e34b44,
+0x09da685b,0xd90f42aa,0xf44f883b,0xfb0261e1,0x1b52f303,0xf201fb02,
+0xf3f2fbb3,0x183a3301,0xbf282bff,0x709323ff,0x34143001,0xd1e5280f,
+0xf7ff4630,0x2324fd89,0x6303fb0a,0xf8c36e72,0x22002234,0x222cf8c3,
+0x0900f04f,0xf04fe01e,0x21010900,0x9068f8cd,0x9048f8cd,0x91119110,
+0x9b09e147,0x7b5b7b1a,0x2303ea52,0xf8ddd107,0x2501904c,0x9068f8cd,
+0x95119512,0xf8d8e00c,0xf8dd33d8,0x3301904c,0x33d8f8c8,0xf8cd2001,
+0xf8cd9068,0x90119048,0x9040f8cd,0x9a0ae129,0x69d3990a,0xf413311c,
+0x911f6f80,0x481ad104,0x31eef640,0xfe8cf7f2,0x9d0f9b0a,0xf1b56919,
+0x780a3fff,0xea42784b,0x93192303,0x0268f101,0x980ad107,0x1068f891,
+0x911869c3,0x3340f3c3,0x7f139316,0xea437f52,0xea4f2302,0xf8bb1a13,
+0xf89b3018,0xebc32001,0x051b030a,0x42930d1b,0xf8d8db0e,0x990a0048,
+0x4b042201,0xe0d54798,0x1e00c744,0x000238e6,0x00021928,0x1e005c41,
+0x040ff00a,0xf10b08e5,0x5d7b0714,0x0607f00a,0xf0134133,0xd1040f01,
+0xf640488e,0xf7f24109,0xeb0bfe47,0x790a0104,0xf1b9920f,0xd0450f00,
+0xebc0981a,0xb29a030a,0x0d1b0513,0xd83d2b0f,0xeb00a822,0xf81303d3,
+0xf0023c08,0x41130207,0x0f01f013,0x5d7ad032,0xf306fa52,0x0f01f013,
+0x2301d00b,0xea2240b3,0x557b0303,0x710b2300,0x3002f89b,0xf88b3b01,
+0x990f3002,0x43ecf243,0x0003f858,0x91002300,0x93029301,0x9b139a09,
+0xf002990a,0x9a1ffeaf,0xb1237a13,0x990a4640,0xf7f72202,0x4b6cff2d,
+0x0048f8d8,0x2201990a,0x9d154798,0xb2db1c6b,0xe06f9315,0x981f990b,
+0x61019a11,0xd04d2a00,0x980e9b0f,0xda494283,0xf891990c,0xb14b302b,
+0xb13a9a16,0x0204eb0b,0x9d0d7913,0xd20142ab,0xe0047115,0x0204eb0b,
+0x33017913,0xf8bb7113,0x2b0f3046,0x4855d904,0x4144f640,0xfdd4f7f2,
+0x3044f8bb,0x0343eb0b,0xb1238c5b,0xf640484f,0xf7f24145,0xf8bbfdc9,
+0x991d3044,0x0243eb0b,0xf0033301,0xf8ab030f,0xf8bb3044,0xf8a23046,
+0x3301a022,0x3046f8ab,0xf0014b46,0x5c9b0207,0x2b0d980b,0x523cf8d0,
+0x0240f8d0,0x230fdd01,0x3301e000,0x9a0a990b,0xe01b47a8,0xfa142401,
+0xf10bf206,0x5d4b0116,0x554b4313,0xf2439a0e,0xf85843ec,0x990a0003,
+0x92002300,0x93019a09,0xf0029402,0xf8d8fe33,0x990a0048,0x4b304622,
+0x94174798,0x98199d14,0xb2db1c6b,0xf3c09314,0x2b032341,0x991bd01e,
+0x0381eb08,0x0778f8d3,0x6ac32100,0x900a4798,0xf47f2800,0x4823aedc,
+0x4166f640,0xfd70f7f2,0x9d0ae00c,0xf04f2200,0x921833ff,0x92169217,
+0x92149215,0x2d00930f,0xaec9f47f,0xb1209817,0x4659980c,0xf7fe2200,
+0x9912fb31,0x9a10b909,0x9d0fb1c2,0x0301f1d9,0x2300bf38,0x07f0f8d8,
+0x9301b2ea,0x99149b18,0x9a0d9202,0x9d109304,0x91002300,0x93069203,
+0x9a09990b,0x95059b15,0xfde0f00c,0x46409b0c,0xf993991b,0xf7f7202c,
+0x980cffcf,0x465a991c,0xfa40f7fe,0xe8bdb023,0x46c08ff0,0x00021928,
+0x1e005c41,0x0002101c,0x4ff0e92d,0xb000f8d0,0xf8db4607,0xb0c90048,
+0x68089008,0x92049105,0xf7fe9047,0xb2c0f925,0x90092807,0x48a9d904,
+0x010af640,0xfd10f7f2,0x4ba79909,0x5c5b9847,0xf7fe9306,0x9016f8e5,
+0x48a2b920,0x6101f44f,0xfd02f7f2,0x68539a16,0x2f80f413,0x489dd104,
+0x0111f640,0xfcf8f7f2,0x9d16687b,0x931718eb,0x4898d104,0x0114f640,
+0xfceef7f2,0x98179909,0x0381eb00,0x60d8f8d3,0x7fdb19cb,0xb1169321,
+0x2b027833,0xf8d7d10f,0x220130c0,0xf8c73301,0x980830c0,0x99474b8d,
+0x9a054798,0x60132300,0xf000930a,0xf89bbd83,0x2b003de8,0x8563f040,
+0x9d166d73,0xd11542ab,0xf04f2100,0x220230ff,0x910d900b,0x910e910c,
+0x9110910f,0x91139112,0x91189114,0x911b911a,0x911d911c,0x911f911e,
+0xe3f09220,0xf6404877,0xf7f20124,0xe7e3fcad,0xf41369c3,0xd1046f80,
+0xf6404872,0xf7f20129,0x9947fca3,0x8c0d69cb,0x0f04f013,0xd004ab46,
+0x461a4658,0xfb64f7f8,0x4658e004,0xaa45a947,0xfd94f7fb,0x9b0a900a,
+0xd0342b00,0x0f10f113,0xf8d7d10b,0x9d05308c,0xf8c73301,0xf8dd308c,
+0x9b47a03c,0x602b2000,0xf8d7e3c4,0x8bb43090,0x42ac3301,0x3090f8c7,
+0x2308d116,0x010ff004,0xf1f3fb91,0xf0042201,0x409a0307,0x0016f106,
+0x43135c43,0x22005443,0x46314638,0xfa3af7fe,0x051b1c63,0x83b30d1b,
+0xf8dd9905,0x2300a03c,0x9319600b,0xf8dbe39f,0x9a463844,0xeb039808,
+0x68db0382,0x681c9947,0x47984b49,0xf2404284,0x9b4784e2,0xf01369db,
+0xd1040f04,0xf6404841,0xf7f20153,0x9b47fc41,0xf41369db,0xd1046f80,
+0xf640483c,0xf7f20154,0x9b47fc37,0x9010f8d3,0x0268f109,0xf1099215,
+0x7d93026e,0xf1097dd2,0xea430172,0xea4f2302,0xf0081813,0x9311030f,
+0x784a788b,0xf899431a,0x43133072,0x431a78ca,0x4313790b,0xea52794a,
+0xd12a0403,0x3094f8d7,0xf8c73301,0x8bb33094,0xd1144543,0x0307f008,
+0x409a2201,0xf1069d11,0x08e90016,0x43135c43,0x9a0a5443,0x46314638,
+0xf9d4f7fe,0x0301f108,0x0d1b051b,0x980883b3,0x22019947,0x47984b1b,
+0x9805990a,0xa03cf8dd,0x32fff04f,0x920a6001,0x9d11e0ee,0x791b1973,
+0xd1472b00,0x45418bb1,0xebc1d03e,0x051d0308,0xf5b50d2d,0xd8076f00,
+0x78728b33,0x0308ebc3,0x0d1b051b,0xdb064293,0x30a0f8d7,0xf8c73301,
+0x9b0a30a0,0xf8d7e0c2,0xf8dd3098,0x195be028,0x040ff001,0x3098f8c7,
+0x46c0e017,0x00021928,0x000238e6,0x1e005c41,0x1e003f55,0x0307f004,
+0x409a2201,0xf10608e1,0x5c430016,0x0e01f10e,0x54434313,0xf0031c63,
+0x45ae040f,0x4638d1ee,0x22004631,0xf97af7fe,0x0301f108,0x0d1b051b,
+0xe08583b3,0x0046f8b6,0xf8b6b1c0,0xeb061042,0x8c530241,0xd1114543,
+0x84539b0a,0xf0031c4b,0xf8a6030f,0x1e433042,0x2b10b29b,0x3046f8a6,
+0x8433f240,0xf44f48ad,0xe05861f6,0x2042f8b6,0xe0082100,0x0342eb06,
+0x45438c5b,0x1c53d02b,0xf0033101,0x4281020f,0xf000d1f4,0xf002bc17,
+0x2308010f,0xf1f3fb91,0x0307f002,0x409a2201,0x0016f106,0xf04f5c43,
+0x43130500,0xf8d75443,0x3301309c,0x309cf8c7,0x3042f8b6,0x0243eb06,
+0xf0033301,0xf8a6030f,0xf8b63042,0x84553046,0xf8a63b01,0xf8b63046,
+0xeb063042,0x8c5a0343,0xd1d44542,0x46382200,0xf7fe4631,0xf8b6f917,
+0xf04f3042,0xeb060000,0x33010243,0x030ff003,0x3042f8a6,0x3046f8b6,
+0x3b018450,0x2b0fb29b,0x3046f8a6,0x83d9f240,0xf2404880,0xf7f271cf,
+0xe3d2fb27,0x21089a11,0xf1f1fb92,0x0307f008,0x409a2201,0x0016f106,
+0x43135c43,0xe3c25443,0x78728b33,0x0308ebc3,0x0d1b051b,0xdb044293,
+0xf2404872,0xf7f271dc,0x2301fb0b,0xb96cb2dc,0x98084b6f,0x22019947,
+0x9b054798,0x35fff04f,0xa03cf8dd,0x950a601c,0xe2409419,0xeb069811,
+0x7d1b03d0,0x0207f000,0xf0134113,0xd1040f01,0xf6404862,0xf7f20175,
+0x9911faeb,0x18739a21,0x4293791b,0x9b0dd20c,0x2501b913,0xe013950c,
+0xf640485a,0xf7f20178,0x2001fadb,0xe00b900c,0xb911990c,0x920d2201,
+0x4854e006,0x017bf640,0xfacef7f2,0x930d2301,0xf1b59d0b,0xd1083fff,
+0x18339811,0x930b791b,0x69db9b47,0x3340f3c3,0xf899930e,0xf8992001,
+0xf64f3000,0xea4311ff,0xea032302,0x9b470101,0xf41369db,0xd0156200,
+0x2b037833,0xb18ad120,0xd10f2b03,0x78d39a15,0x0308f023,0xf89970d3,
+0xf8992038,0x9d153037,0x2302eb03,0x706bb29b,0x70ab0a1b,0x0a0b2200,
+0x1000f889,0x3001f889,0x2048f889,0x2049f889,0xa03cf8dd,0xe1d12001,
+0xb99a9a0f,0x3056f899,0x7202f441,0x03fcf003,0xd1042bb4,0xf0422301,
+0x931a0204,0x2bc4e00c,0x2501d10a,0x6200f442,0xe005951b,0x6380f441,
+0x72f3f24f,0x0202ea03,0xf8890a13,0xf8892000,0xf8993001,0xf8992038,
+0x99173037,0x2302eb03,0xf64f3303,0xea0372fc,0xf8990202,0x98133033,
+0xeb023301,0x68cb0283,0x42981880,0xd9049013,0xf6404814,0xf7f201c5,
+0x9947fa4f,0x98084b13,0x9a124798,0x18104b12,0x9012b280,0x98089947,
+0x9d0f4798,0x9a474680,0xab259811,0x2025f843,0x791b1833,0x0a01f105,
+0x6ebbb113,0x66bb3301,0x0f01f1ba,0x80bff040,0xb159990c,0x78139a15,
+0xe00b78d2,0x00021928,0x1e005c41,0x1e003e11,0x1e003f55,0x3036f899,
+0x2039f899,0xf00309dc,0x09d5037f,0x93182b20,0x4897d904,0x01e1f640,
+0xfa12f7f2,0x4a95b16d,0x9818b12c,0xfb002314,0x68da2303,0x9918e012,
+0xfb012314,0x689a2303,0x4a8ee00c,0x9818b12c,0xfb002314,0x685a2303,
+0x9918e004,0xfb012314,0x589af303,0x3029f897,0xfb039817,0x68c2f302,
+0x429308db,0x4613bf28,0x93149909,0x5c5a4b82,0x5c9b4b82,0x0343eb0b,
+0x1d88f8b3,0xf241b141,0xf83b33ea,0xb11b3003,0xbf284299,0xe0064619,
+0x33eaf241,0x3003f83b,0xbf182b00,0xb3214619,0x4a74b16d,0x9d18b12c,
+0xfb052314,0x68db2303,0x9818e012,0xfb002314,0x689b2303,0x4a6de00c,
+0x9d18b12c,0xfb052314,0x685b2303,0x9818e004,0xfb002314,0x589bf303,
+0x08cb0a9a,0xf302fb03,0x42999914,0x4619bf28,0xb1649114,0x3848f8db,
+0xf0056818,0xf400fe59,0xf5b07040,0xbf147f00,0x20032002,0x9b159020,
+0x781a9d1a,0x0380f022,0x6300f043,0x0f80f012,0xbf1c931c,0x6380f443,
+0xf899931c,0xf0222036,0xf0430380,0xf0126300,0x931d0f80,0xf443bf1c,
+0x931d6380,0x981bb90d,0x991cb168,0x9b202200,0xf7f64658,0x991dfcb5,
+0x2200901e,0x9b204658,0xfcaef7f6,0x4b45901f,0x22149918,0xfb019d06,
+0x23243202,0xf103fb05,0x685219cb,0x3238f8d3,0xd307429a,0x180b9818,
+0xf89319db,0x459a321a,0x80a4f000,0xb121990e,0x302bf897,0xf000459a,
+0x9a17809d,0x459a7953,0x8098f000,0x210c9d04,0xb301fb05,0x2df4f8d3,
+0xf8979247,0xb15b302a,0xf015b952,0xd0070f01,0x0501f025,0xb301fb05,
+0x3df4f8d3,0x93479504,0x44409810,0x98479010,0xd06e2800,0xf41369c3,
+0xd0686f80,0xfd08f7fd,0x42889916,0x9847d163,0xfd32f7fd,0xb2c09a09,
+0xd15c4290,0x4b209947,0x47989808,0x303b9d17,0x9913892b,0x9a14b280,
+0xbf2c4283,0x180918c9,0xd84c4291,0x3844f8db,0x98089a46,0x0382eb03,
+0x994768db,0x4b15681c,0x9b104798,0x428418c0,0x9d0cd93d,0x980db115,
+0xe006b910,0xb921990d,0xf6404809,0xf7f2113c,0x9b47f8f7,0x202af897,
+0xf0038c1b,0x18f3030f,0x791bb1aa,0x42939a21,0x9b0dd20e,0xe014bb1b,
+0x00021928,0x1e00c744,0x000238e6,0x00021010,0x1e003e11,0x1e003f55,
+0xb1359d0c,0x791be013,0x4298980b,0x9247d001,0xf50be00f,0x300c605e,
+0x4bb59904,0x90474798,0x48b4b938,0x114ef640,0xf8c6f7f2,0x2300e001,
+0xf8cd9347,0x9847a03c,0xf47f2800,0xf8ddac11,0x900aa03c,0x990f9019,
+0xe12cb911,0x92192200,0xf10a6e7b,0x330135ff,0x6f3b667b,0x4453a848,
+0x9b18673b,0xeb079507,0xf8d20283,0x24003110,0xf8c23301,0xeb073110,
+0xf8d2028a,0x33013190,0x3190f8c2,0x0385eb00,0x3c8cf853,0x784b6919,
+0xf891780a,0xea420033,0xf64f2203,0xea0213ff,0xf4430303,0x700b63c0,
+0x704b0a1b,0x4033f881,0xf8919a13,0xeba23037,0xf8910080,0xeb032038,
+0xb29b2302,0x10921cda,0x0382ebc3,0x0800ebc3,0x691e9b25,0x0368f106,
+0xf8839323,0x9d238001,0x2318ea4f,0x006bf106,0x902270ab,0x306bf896,
+0x203ef896,0x0308f043,0x306bf886,0x303ff896,0x2303ea52,0xf04fd102,
+0xe00b0903,0x991c4658,0x4b794642,0xf8864798,0xf3c0003e,0xf886200f,
+0x46a1003f,0x2040f896,0x3041f896,0x2303ea52,0xf1b9d012,0xd0040f00,
+0xf640486e,0xf7f21178,0x4658f83b,0x4642991d,0x47984b6b,0x0040f886,
+0x200ff3c0,0x0041f886,0x99184b68,0x9d062214,0x3202fb01,0xfb052324,
+0x68527103,0x3238f8d1,0xd30a429a,0x3218f8b1,0x42839812,0x4603bf28,
+0x3048f886,0x230ff3c3,0x2300e002,0x3048f886,0x3049f886,0xb911991a,
+0x2a009a1b,0x2501d034,0x9a1e991b,0x4c569b1c,0x9000f8cd,0x8004f8cd,
+0x46589502,0xf88647a0,0xf3c00058,0xf886200f,0x9a1f0059,0xf8cd9b1d,
+0xf8cd9000,0x95028004,0x991b4658,0xf89647a0,0xf8962059,0xf8863058,
+0xea430034,0x71b32302,0xf3c00a1b,0x71f3200f,0x3034f896,0xea43b2c2,
+0xf8862302,0x0a1b302c,0x0035f886,0x302df886,0xb1c39b0d,0x44536fbb,
+0x6ffb67bb,0x67fb3301,0x78f278b3,0x2302ea43,0x5380f443,0x0a1b70b3,
+0x9d2370f3,0x3036f896,0xf896702b,0x98223039,0x0308f043,0x990b7003,
+0x6efbb111,0x66fb3301,0xf9929a22,0x2b003000,0xf8d7da04,0x33013080,
+0x3080f8c7,0x204cf896,0x304df896,0x2203ea42,0x4f00f412,0x9d0bd008,
+0xb2eb9916,0xf8db9300,0x230107f0,0xfdaef00a,0xf9972400,0x9d07302c,
+0xab259300,0x2024f853,0x42ac4658,0x2300bf14,0x99462301,0xf7f63401,
+0x4554fdbd,0x9819d3ed,0xd0372800,0x691b9b47,0x204cf893,0x304df893,
+0x2203ea42,0x4f00f412,0x2300d006,0xf8db9300,0x991607f0,0xfd86f00a,
+0x46586f7b,0x677b3301,0x23019946,0x93009a47,0xfd9cf7f6,0xf06fe01a,
+0x910a010f,0x46c0e016,0x1e003ac5,0x00021928,0x0001d225,0x1e00c744,
+0x0001d9d5,0x30a0f8d7,0xf8c73301,0x230030a0,0x7833e448,0xf43f2b03,
+0xe435ac29,0xb049980a,0x8ff0e8bd,0xe92d6843,0x18ce41f0,0xd1044605,
+0xf240480e,0xf7f13109,0x2700ff3f,0x4628b2fc,0x46224631,0xf848f7fe,
+0x23013701,0x46314628,0xf7fe4622,0x2f08f8d1,0x682bd1f0,0x0110f106,
+0x22016c98,0xffd2f7f2,0x81f0e8bd,0x00021928,0x6803b537,0x445cf241,
+0x4605591b,0xa8016819,0xfdf2f00d,0x591b682b,0xe00b681c,0xf4136863,
+0xd0032f80,0x46214628,0xffc4f7ff,0xf00da801,0x4604fdd1,0xd1f12c00,
+0xf7fd4628,0x4620f9c5,0x46c0bd3e,0x4ff0e92d,0x469ab089,0x3048f89d,
+0x9305460f,0x304cf89d,0x93044690,0xb9204606,0xf241484c,0xf7f11110,
+0xb927feef,0xf2414849,0xf7f11111,0x697bfee9,0x4846b923,0x1112f241,
+0xfee2f7f1,0x0f07f1b8,0x4842d904,0x1113f241,0xfedaf7f1,0x0f10f1ba,
+0x483ed904,0x1114f241,0xfed2f7f1,0x5de8f896,0xf06fb115,0xe06d0018,
+0xf107697b,0xf1030b19,0x920002d4,0x92012209,0x9202aa07,0x21d04630,
+0x33da465a,0xf97cf7f9,0xb9104681,0x001af06f,0x9c07e058,0x70232303,
+0xf2417065,0x5cb372fa,0xb92b70a3,0x33015ab3,0x78a352b3,0x70a33301,
+0x138aea4f,0x72c0f64f,0x0202ea03,0x0388ea4f,0x033cf003,0x9b05431a,
+0x00581ce1,0x0002f000,0x0000ea42,0xf942f7fd,0x1d619804,0xf93ef7fd,
+0x0348eb07,0x0170f8b3,0x05001de1,0x01000d00,0xf934f7fd,0x46414648,
+0xfa70f7fd,0x4630462b,0x463a4649,0x95019500,0xfdfef7fc,0x3023f896,
+0xf896b1bb,0xb1a33d63,0xf8974b0d,0xf8132184,0x4b0c1008,0x411a5c5b,
+0x0f01f012,0x4630d009,0x462a4659,0xf8cd462b,0xf7f98000,0x4628f8f7,
+0x2000e000,0xe8bdb009,0x46c08ff0,0x00021928,0x000238e6,0x00021010,
+0x41f3e92d,0x46904606,0x460d461c,0x4839b921,0x6175f501,0xfe48f7f1,
+0xb923682b,0xf6404835,0xf7f17151,0x682bfe41,0xf413685b,0xd1042f80,
+0xf6404830,0xf7f17152,0xf1b8fe37,0xd9040f07,0xf640482c,0xf7f17153,
+0x7a33fe2f,0x2c00b10b,0xeb08d04b,0x7a9b0306,0xd0462b00,0xf8966829,
+0xf8912027,0x463031d2,0x0382f3c3,0xbf384293,0x712b4613,0xf1c32201,
+0x409a0311,0xeb054b1e,0x18d30788,0xf3f2fb93,0xf891812b,0xf44f21d2,
+0xf0025300,0x40930203,0xf7fd60eb,0xf8d7f993,0xb93c40d8,0x46212058,
+0x47984b14,0x4604b1f0,0x00d8f8c7,0x22582100,0xf7f24620,0x2302febb,
+0xf8847023,0x68298003,0x65616830,0x7cf37cb2,0xf8969200,0x9201202e,
+0xf7ff4642,0xf8d6fee3,0x330130a8,0x30a8f8c6,0x2400e000,0xe8bd4620,
+0x46c081fc,0x00021928,0x000493df,0x1e00578d,0x4ff8e92d,0x4691460d,
+0x4607469b,0x4834b920,0x61e6f240,0xfdc8f7f1,0x3010f8d9,0xa000f8d7,
+0xf3c3781b,0x2b020381,0x4648d10a,0xf9c8f7fd,0x2c07b2c4,0x482ad94c,
+0x61fbf240,0xfdb4f7f1,0x423cf8d5,0x0240f8d5,0x464a4629,0x47a0465b,
+0x4823e043,0x7101f240,0xfda6f7f1,0xeb15687b,0xd1040803,0xf240481e,
+0xf7f17103,0xeb08fd9d,0xf8d30384,0xb94660d8,0x46384633,0x46224641,
+0xff3ef7ff,0x28004606,0x7833d0da,0xd0d72b00,0x68384623,0x0110f108,
+0x4c12464a,0xb13047a0,0x46414638,0x23004632,0xf9caf7fd,0x4b0ee015,
+0x0048f8da,0x22014649,0xf8da4798,0x330133c0,0x33c0f8ca,0x3094f8d7,
+0xf8c73301,0xe0043094,0xf413686b,0xd0bc2f80,0xe8bde7c0,0x46c08ff8,
+0x00021928,0x0001e1ad,0x1e005c41,0x4ff0e92d,0xb000f8d0,0x445cf241,
+0x3004f85b,0x6819b087,0xa8054605,0xfc28f00d,0x3004f85b,0x9000f8d3,
+0xf8d9e0d6,0xf4133004,0xf0002f80,0xf8db80cd,0x685b37e8,0x0703eb19,
+0x4869d104,0x7175f44f,0xfd3af7f1,0x46b82200,0x920346ba,0xb2de9b03,
+0x30f8f8da,0x2300b123,0x3119f888,0x3118f888,0x3118f898,0xf898b1a3,
+0x24003119,0xb2db3301,0xf8882b02,0xf8884118,0xd9093119,0xf8882326,
+0x46284119,0x46399300,0x46234632,0xff48f7fd,0x40d8f8da,0xf0002c00,
+0x7823808d,0xf2002b03,0xe8df8089,0x0276f003,0x46225e41,0x46394628,
+0xf7fd2301,0xf894f94d,0xb13a204b,0xf8842200,0x4628204b,0xf7fd4621,
+0xe073facd,0x304cf894,0xd9082b31,0x93002327,0x46394628,0x23014632,
+0xff1ef7fd,0xf894e066,0xb123304a,0x204af884,0x204ff884,0x78a3e05e,
+0xf894b123,0x3301304f,0x304ff884,0x304ff894,0xd1532b02,0x30bcf8d5,
+0x33014628,0x30bcf8c5,0x93002327,0x46324639,0xf7fd2301,0xe028fefd,
+0x204df894,0x2a091c53,0x304df884,0x4638d904,0xf7fd4621,0xe039f8db,
+0x7ceb7caa,0xf8959200,0x6828202e,0x46499201,0xf7ff4632,0xf8d5fdaf,
+0x330130a8,0x30a8f8c5,0xf894e028,0x1c53204e,0xf8842a01,0xd909304e,
+0x30bcf8d5,0xf8c53301,0x462830bc,0x46324639,0xe0032301,0x46394628,
+0x23004632,0xfe34f7fd,0xf894e010,0x1c532050,0xf8842a3b,0xd9093050,
+0x46394628,0x23004632,0xfe32f7ff,0x230ab110,0x304df880,0xf10a9b03,
+0x33010a04,0x93032b08,0x0802f108,0xaf42f47f,0xf00da805,0x4681fb3b,
+0x0f00f1b9,0xaf25f47f,0xb0074648,0x8ff0e8bd,0x00021928,0xb5102901,
+0xdd086804,0x68502100,0x460a4b06,0x28064798,0xf8a4bfd8,0xf8b406fc,
+0x4b0316fc,0x47984803,0x46c0bd10,0x1e0037cd,0x1e004461,0x00021951,
+0xe92d4603,0x480d41f0,0x4619460f,0x46164b0c,0x24004798,0x480be00b,
+0xf8574621,0x47a82024,0xf014b124,0xd1010f07,0x47a84807,0x42b43401,
+0xdbf04d03,0x47a84804,0x81f0e8bd,0x0002195f,0x1e004461,0x00021964,
+0x00021250,0xe92d2901,0x460541f0,0x2200dd12,0x320418ab,0x2a402100,
+0x1110f8c3,0x186bd1f8,0x22003104,0xf8c32980,0xd1f82190,0x66ea66aa,
+0x666a672a,0xf5054819,0x22087188,0xffbcf7ff,0x48172210,0x71c8f505,
+0xffb6f7ff,0x6ea94c15,0x47a04815,0x48156ee9,0x6e6947a0,0x48146f2a,
+0x481447a0,0x260047a0,0x7aa2462c,0x32a8f894,0x3a004631,0x2201bf18,
+0xbf183b00,0x480e2301,0x36014f08,0x340147b8,0xd1ee2e08,0x480b7ce9,
+0x7d2947b8,0x47b8480a,0x81f0e8bd,0x0002196c,0x000219fa,0x1e004461,
+0x00021978,0x00021977,0x00021988,0x000219a1,0x000219ac,0x000219c1,
+0x000219d8,0x47ffe92d,0x9e0e2300,0xf0029303,0x93000301,0x46144605,
+0x46326800,0xf8dd9b0f,0xf7fca030,0x4680fc55,0xf0402800,0x9b0d8106,
+0xd9042b03,0x4651a803,0xf7f22204,0x682ffc93,0x900cf8dd,0x37e8f8d7,
+0xd004429d,0xf240487d,0xf7f1414c,0x2c0cfba1,0x80c0f000,0x2c03d814,
+0xd803d047,0xd02b2c01,0xe026d833,0xf0002c07,0xd8028093,0xd0682c05,
+0x2c08e0dd,0x80a9f000,0xf0002c09,0xe0d680a8,0xd0492c1f,0x2c18d80d,
+0x80b1f000,0x2c0dd803,0x80a4f000,0x2c19e0cb,0x80b5f000,0xd0382c1e,
+0x2c21e0c5,0xd340d044,0xd00e2c3a,0xd01c2c3b,0xf897e0bd,0xe08f302e,
+0xf1b94628,0xbf180100,0xf7fc2101,0x4680fe4f,0xf89ae0b3,0x28070000,
+0x80a4f200,0x2c024428,0x7a83bf0c,0x32a8f890,0x46304651,0x3001f88a,
+0x7830e089,0xf2002807,0x2c038095,0x0200eb05,0xd1047870,0xbf181e03,
+0x72932301,0x1e03e095,0x2301bf18,0x32a8f882,0xf895e08f,0xe05f3027,
+0x2b079b03,0x8081f300,0xdd7e2b05,0x3027f885,0xf895e007,0xe053302d,
+0x2b039b03,0xf885dc75,0x4628302d,0xfe28f7fc,0x682be077,0x302ef893,
+0xd0672b00,0x2b0779b3,0x4638d864,0xf00d4631,0x2800fa4b,0x686bd064,
+0xd06418c1,0xf4136843,0xd0602f80,0xeb0179b2,0xf8d30382,0xb11330d8,
+0x0818f06f,0x4628e059,0xf7ff2301,0x2800fcb1,0xf04fd153,0xe05038ff,
+0xf893682b,0x2b00302e,0x79b3d040,0xd83d2b07,0x46314638,0xfa24f00d,
+0xd03d2800,0x18c1686b,0x6843d03d,0x2f80f413,0x2325d039,0x462879b2,
+0x23019300,0xfd18f7fd,0x7a2be033,0x9b03e004,0xe02e722b,0x3028f995,
+0xe02a6033,0x2b209b03,0xf885dc1f,0x46283028,0xf98ef7fe,0x7cebe021,
+0xf8884630,0x7d2b3000,0xf8884641,0x22023001,0xfbacf7f2,0x7833e015,
+0x7870b143,0x2b10b130,0x2810d804,0x74ebd802,0xe00a7528,0x0801f06f,
+0xf06fe007,0xe004081c,0x081df06f,0xf06fe001,0x46400816,0xe8bdb004,
+0x46c087f0,0x00021928,0x6845b570,0x194e460c,0x4807d104,0x21faf240,
+0xfa9ef7f1,0xf1065164,0x21080010,0x6280f44f,0x47984b02,0x46c0bd70,
+0x00021928,0x1e003bcd,0x477089c0,0x47702001,0x4803b510,0x21f3f240,
+0xfa86f7f1,0x46c0bd10,0x00021aec,0xb5106e41,0xb1214604,0x22006843,
+0x4b036c98,0x23004798,0x66a36623,0xbd106663,0x1e005c41,0xf7ffb510,
+0x2000ffed,0x46c0bd10,0x47ffe92d,0x9e0e2300,0xf0029303,0x93000301,
+0x46174605,0x46326840,0xf8dd9b0f,0xf7fca040,0x4681faf7,0xd16e2800,
+0x2b039b0d,0xa803d904,0x2204990c,0xfb36f7f2,0x682c9b03,0x0800f1b3,
+0xf04fbf18,0xf8d40801,0x429d37e0,0x4830d004,0x11c1f240,0xfa40f7f1,
+0x030af1a7,0xd8092b0e,0xf003e8df,0x08082114,0x08080808,0x08080808,
+0x000b110e,0x0916f06f,0xf894e045,0xe00a302f,0x3d47f894,0xf884e007,
+0xe03c8d47,0x33f0f241,0xf3c35ce3,0xa90403c0,0x3d04f841,0x46524630,
+0xfb00f7f2,0xf241e02f,0xf24136ef,0x5de237f0,0x46285da3,0x2302ea43,
+0x6300f423,0x55a3b29b,0x55e30a1b,0xff78f7ff,0x63faf640,0xd8044298,
+0xf240480f,0xf7f12159,0xf1b8f9ff,0xd0120f00,0xf7ff4628,0xf641ff69,
+0x429863fe,0xf06fd802,0xe008091c,0x5de25da3,0x2302ea43,0x6300f443,
+0x0a1b55a3,0x464855e3,0xe8bdb004,0x46c087f0,0x00021aec,0x41f3e92d,
+0xf1be468e,0x46150f3e,0x461a4604,0xf8dd9908,0x9f0a8024,0x680cf8d0,
+0x808df000,0xf1bedc10,0xd0500f1e,0xf1bedc03,0xd0240f1d,0xf1bee01c,
+0xf0000f20,0xf1be80fb,0xf0000f22,0xe01380eb,0x0f62f1be,0xdc08d013,
+0x0f3ff1be,0x8093f000,0x0f40f1be,0x80abf000,0xf1bee006,0xf0000f7f,
+0xf1be80b7,0xd02b0f8e,0x0016f06f,0x4629e0f5,0xfd76f7f5,0x2b04e0f1,
+0x4879dc04,0x111ff240,0xf99ef7f1,0x3848f8d4,0xf0046818,0xb2c0fe4d,
+0xf8946028,0xb1133024,0x3324f894,0xf241e002,0x5ce363fc,0xf8d42600,
+0x606b07f8,0x788360ae,0xf0002b00,0xf00c80cb,0xb2c0f90b,0xe03860a8,
+0xfc64f7f5,0x290ee0c9,0xf44fbfcc,0xf44f5280,0x29e05200,0xf06fd902,
+0xe0be0012,0x6330f441,0x0303ea42,0x4629b29d,0xf0002201,0xb910ffc5,
+0x0013f06f,0xf241e0b1,0x52e563fc,0x2b007c63,0x80a4f000,0x6024f894,
+0xf0402e00,0xf8d4809f,0x68183848,0xfe08f004,0xf00042a8,0x46208097,
+0xfea4f7f6,0x46294620,0xfb70f7fc,0xf7f64620,0x4630f911,0x1c4be091,
+0xf2002b04,0xe8df8089,0x0403f003,0x00038704,0xf6422103,0x54e14316,
+0x2b007c63,0x4620d07a,0xfe88f7f6,0xf7f64620,0xf243fc63,0x4620137c,
+0xf7f658e1,0x4620f801,0xf8f0f7f6,0x7c40e06a,0xf642b928,0x5ce34315,
+0x3000f8c8,0xf8d4e069,0xf10d3848,0x68180107,0xfbc8f005,0xb1204602,
+0x3007f89d,0x3000f8c8,0xf642e054,0x5ce34315,0x3000f8c8,0x1c4be029,
+0xd84d2b04,0x3ffff1b1,0x2103bf08,0xf642b2c9,0x54c14315,0x3848f8d0,
+0xf0056818,0xe03dfbb5,0xd0402f00,0xd1162b0c,0x1d39793b,0x0501f013,
+0xf00dd139,0x4602f81d,0xf241b138,0x58e2435c,0x23014628,0x603d7113,
+0xf642e02f,0x58e323d8,0x4610603b,0x2b04e029,0xf642d125,0x58c323d8,
+0xe01b603b,0x2bfe1e4b,0xf642d81a,0xf8d420d0,0x52213844,0xb18b7a1b,
+0xe00a4b0e,0x2bfe1e4b,0xf642d80e,0xf8d420ce,0x52213844,0xb12b7a1b,
+0xf8c64b09,0xb28b3160,0x3164f8c6,0xe0042000,0x001cf06f,0xf06fe001,
+0xe8bd0001,0x46c081fc,0x00021bc4,0x00020007,0x00020006,0x41f0e92d,
+0x4614b088,0x46059a0e,0x461e4688,0xf8d0b91a,0xf1033dd0,0x68130208,
+0xbf0c2b01,0xf8d56897,0xb13c7dd0,0xd9052e03,0x4621a807,0xf7f22204,
+0xe001f975,0x93072300,0x46289b07,0x6cab9300,0x93034641,0x46334622,
+0x94029401,0xf7ff9704,0xf110fe9d,0xd1080f17,0x94019b07,0x46229300,
+0x46414628,0x4c024633,0xb00847a0,0x81f0e8bd,0x0001e5e9,0x41f0e92d,
+0x6805b088,0xf8dd9f10,0x23008044,0xf0029307,0x93000301,0x46284614,
+0x4643463a,0xf8f8f7fc,0x28004606,0x80bbf040,0x2b039b0f,0xa807d904,
+0x2204990e,0xf936f7f2,0x2c169a07,0x80adf200,0xf004e8df,0x6e3e3b38,
+0xab75ab7d,0xab32ab81,0xab8c1b18,0xabababab,0x000cabab,0x4620ac03,
+0x46424639,0xffeaf7f1,0x073cf8d5,0xf7f54621,0xe094f9df,0x3d11f895,
+0x1e14e063,0x2401bf18,0x4628b12c,0xfafef7f5,0xf0002800,0xf8858086,
+0x46284d11,0xfe08f7f7,0x3d11f895,0xd17e2b00,0xf7f74628,0xe07afdc9,
+0x493f4638,0x4b3f2204,0xe0744798,0x0bfcf8d5,0x4628e004,0xe0312101,
+0x0ac0f8d5,0x6f00f010,0xf410d026,0xf4000f00,0xd01063e0,0x3b040a1b,
+0x49352b01,0x007ff000,0x2314d804,0x1303fb00,0xe01768d8,0xfb002314,
+0x68981303,0x0a1be012,0x2b013b04,0xf000492c,0xd804007f,0xfb002314,
+0x68581303,0x2314e006,0xf303fb00,0xe0015858,0x007ff000,0xe03e6038,
+0x21024628,0x4c232300,0x460647a0,0x4638e037,0x4a212140,0x3708f8d5,
+0x47a04c20,0xf8d5e02f,0x603b3708,0x4628e02b,0x47984b1d,0xf5054638,
+0xf44f7168,0xf7f27225,0xe020f8a5,0xf7f168a8,0x4604fb15,0x68a8b918,
+0xf7f12101,0x68a8fb61,0xfef2f7f3,0xf06fb910,0xe008061d,0x463a9907,
+0xf7f34643,0x2800fe7f,0xf06fbfd8,0xb934060d,0x462168a8,0xfb4cf7f1,
+0xf06fe001,0x46300616,0xe8bdb008,0x46c081f0,0x00021be1,0x1e0040f9,
+0x1e00c744,0x0001dc01,0x00020798,0x1e003fc9,0x0001d585,0x41f0e92d,
+0x460f4680,0x25004616,0x0305eb08,0x4dd0f8d3,0xb116b154,0x01d4f104,
+0xf104e001,0x463801da,0x4b052206,0xb1184798,0x2d103504,0x2400d1ec,
+0xe8bd4620,0x46c081f0,0x1e00d671,0x4605b570,0xb921460c,0xf2404813,
+0xf7f03135,0xf44fff61,0x46207294,0xf7f22100,0x2201f821,0x33fff04f,
+0x30acf8c4,0xf8c4189b,0xf8843094,0xf8a4309d,0xf8d4309e,0x60a230e4,
+0x0303f003,0x0360f043,0x60256124,0x209cf884,0x30e4f8c4,0x20a0f884,
+0x46c0bd70,0x00021c25,0x4605b570,0xb921460c,0xf240480a,0xf7f01175,
+0x7923ff33,0x4628b163,0xfef4f7f7,0x26006ce1,0xb1297126,0xf44f6ca8,
+0x4b037200,0x64e64798,0xbd702000,0x00021c25,0x1e005c15,0x4604b570,
+0xb921460d,0xf2404822,0xf7f011c1,0x4620ff15,0xf7ff4629,0x792bffd5,
+0x481db123,0x11d9f240,0xff0af7f0,0x3de0f894,0x7c61b193,0x2200b131,
+0x21014620,0xf7f54613,0xe009facb,0xf7f74620,0xf8d4fd3f,0x3b003de4,
+0x2301bf18,0x3024f884,0x13d4f243,0xf8d458e1,0x4b0e073c,0xf8d54798,
+0xf02330e4,0xf8c50301,0x230030e4,0x4619716b,0x18a3461a,0x3dd0f8d3,
+0x795bb113,0x3101b103,0x2a103204,0xb911d1f5,0x4b034620,0xbd704798,
+0x00021c25,0x1e006221,0x0001fc75,0xb5702935,0x460c4605,0xdd044616,
+0xf2404808,0xf7f071c1,0x2c03fec3,0x4805dc04,0x71c2f240,0xfebcf7f0,
+0x1f214628,0xf7f54632,0xbd70fdf5,0x00021c38,0x4ff0e92d,0xb0872935,
+0x46884607,0xdd049203,0xf2404881,0xf7f07125,0xf897fea7,0xb923381c,
+0xf240487d,0xf7f07127,0xf642fe9f,0x5cfb2391,0xf8d7b9c3,0xf8d33dd0,
+0xf0133094,0xd1110108,0x0288eb07,0x0358f641,0xb16658d6,0xb14b6933,
+0x0f03f1b8,0x7a33dc04,0xd1012b02,0xe012460d,0xe0017b35,0x46352600,
+0x0f03f1b8,0xf10ddd0b,0x21000412,0x46202206,0xff3cf7f1,0x46414638,
+0xf7ff4622,0xea4fffa3,0xea4f0148,0xea451a08,0xf501020a,0x310461ba,
+0xb2924638,0xfbc2f7f5,0x51a3f507,0xd06d2e00,0xf1066809,0x23100b14,
+0x44514638,0xf7f5465a,0xf8d7fbf7,0x2b003830,0x7a33da6b,0xd1682b02,
+0x2391f642,0x2b005cfb,0xf8d7d163,0xf8d33dd0,0xf0133094,0xd15c0008,
+0x293579b1,0x2903d859,0x290bd957,0xf1b8d855,0xdc010f03,0xe0254681,
+0x787278b3,0x7833431a,0x78f24313,0x7933431a,0x79724313,0xd10c431a,
+0x3324f8b7,0xf4039a03,0xf5b34370,0xbf145f80,0x23542350,0x9003f852,
+0x4638e004,0xf00c4631,0x4681fd4b,0x0f00f1b9,0x4837d104,0x717ef240,
+0xfe12f7f0,0x4564f241,0x464a9903,0x4b334638,0x4798597c,0xeb0b4454,
+0x46210200,0x23084638,0xfba2f7f5,0x464a9903,0x4b2d4638,0x4798597c,
+0x44543408,0x0200eb0b,0x46384621,0xf7f52308,0xe00afb93,0x23106809,
+0x44514638,0xf7f54632,0xf1b8fb65,0xdd2f0f03,0xf1b8e03a,0xdd2b0f03,
+0x2b027a33,0x330cd122,0xf503fb08,0xf1a52400,0xf0240938,0x199b0301,
+0x7138f505,0x46381909,0x20e0f8b3,0xf7f53402,0x2c0afb2d,0xf509d1f1,
+0x46387148,0xf8b63102,0xf7f52104,0x4638fb23,0x7149f509,0x2106f8b6,
+0xfb1cf7f5,0x46414638,0xf7ff4632,0xe00bfeeb,0x46384b0a,0x22034798,
+0x92004603,0x21004638,0x4280f44f,0xfe16f7f5,0xe8bdb007,0x46c08ff0,
+0x00021c38,0x0001fccd,0x1e0085d1,0x0001e709,0xf642b513,0x5cc32391,
+0x46964604,0xd1332b00,0x3dd0f8d0,0x3094f8d3,0x0f08f013,0xeb00d12c,
+0xf6410281,0x58d20358,0x6913b122,0x7a13b113,0xd0212b0b,0xdd1c2935,
+0x6913b14a,0x2303b13b,0x93002100,0xf44f4620,0x460b4280,0x4b0be009,
+0x47984620,0x46032203,0x46209200,0xf44f2100,0xf7f54280,0xe007fdd7,
+0x46724620,0xfeb4f7ff,0x7c63e002,0xd1f72b00,0x46c0bd1c,0x0001e709,
+0xf500b57f,0x681953a3,0xf44f2200,0x46057358,0xfad0f7f5,0xf2402400,
+0x012256d4,0xb2924631,0x34014628,0xfaaaf7f5,0x2c363602,0xf10dd1f5,
+0x2100000a,0xf7f12206,0x2400fe09,0x46284621,0x020af10d,0xf7f53401,
+0x2c32fc79,0xf8d5d1f6,0x2100380c,0x443cf8a3,0x93002303,0x460b4628,
+0x4280f44f,0xfd96f7f5,0x2391f642,0xb9cb5ceb,0x3dd0f8d5,0x3094f8d3,
+0x0108f013,0x460cd112,0x0284eb05,0x0358f641,0xb14358d3,0xb133691b,
+0x5254f505,0x46214628,0xf7ff3234,0x3401fe5d,0xd1ed2c36,0x46c0bd7f,
+0xe92d2a35,0x460441f0,0x46174688,0x4854dd04,0x21bef240,0xfd00f7f0,
+0x0287eb04,0x0358f641,0x2e0058d6,0x809af000,0x2b006933,0x8096f000,
+0x3d5ef894,0xf894b31b,0xbb033d5d,0x3023f894,0xf894b1eb,0xb1d33024,
+0x53d2f243,0xb1635ae3,0x53c8f243,0xf5a358e2,0x3b415352,0x0303ea02,
+0xf642b11b,0x5ce32390,0xf894b14b,0xb1333d67,0x3d3cf894,0x0101f1d3,
+0x2100bf38,0x2100e000,0xf6422200,0x54e22390,0xf894b309,0xb1d91d5e,
+0x3d5df894,0xf894b9c3,0xb1ab3023,0x3024f894,0xf243b193,0x5ae353d2,
+0xf243b143,0x58e253c8,0x5352f5a3,0xea023b41,0xb92b0303,0x3d67f894,
+0xf894b113,0xb1133d3c,0xf7f84620,0x78b3f8fb,0x431a7872,0x43137833,
+0x431a78f2,0x43137933,0x431a7972,0xf8d4d01a,0x46203848,0x689a4631,
+0xfbacf00c,0xb1d04605,0x429e6903,0x4630d117,0x0119f105,0x4b172206,
+0xb1204798,0xf2404814,0xf7f021e5,0x2300fc81,0xe008612b,0x30acf8d8,
+0x429a79f2,0xf04fbf04,0xf8c833ff,0x462030ac,0x4b0d4631,0x2f034798,
+0x4631dd0b,0x628bf44f,0x6ca04b0a,0xeb044798,0x22000187,0x0358f641,
+0x462050ca,0x46424639,0xfebef7ff,0x81f0e8bd,0x00021c38,0x1e00d671,
+0x1e008e8d,0x1e005c15,0xb570690a,0xb1e24605,0x69497994,0xf7ff4622,
+0x2c35ff3f,0xf642dc15,0x5ceb2391,0xf8d5b98b,0xf8d33dd0,0xf0133094,
+0xd10a0f08,0x0384eb05,0x0258f641,0xb123589b,0xf2404802,0xf7f0314b,
+0xbd70fc33,0x00021c38,0x4ff0e92d,0x4605b08b,0x93014617,0x905cf8dd,
+0xb919468b,0x318548a1,0xfc22f7f0,0x3000f899,0x0f01f013,0x489dd003,
+0xf7f02186,0x2f05fc19,0x2f0dd008,0x2f20d006,0x2f10d004,0xf06fd002,
+0xe2380817,0x29039901,0xf06fd902,0xe2320807,0x0201f109,0x0302f109,
+0x93039202,0x0204f109,0x0305f109,0x0103f109,0x92059104,0xf8999306,
+0xf8993002,0x431a2001,0x3000f899,0xf8994313,0x431a2003,0x3004f899,
+0xf8994313,0xea522005,0xd1500a03,0xf99b9901,0x008b4058,0xeb03b9dc,
+0xf8d2020b,0xb94b30b0,0x638bf503,0xf303fb01,0x53c8f503,0x18eb3330,
+0x30b0f8c2,0x30b0f8d2,0x799b9a01,0xd0034293,0x21af4874,0xfbc8f7f0,
+0x8004f8dd,0xeb03e02c,0xf8d6060b,0xb1cc40b0,0x8006f894,0x0f35f1b8,
+0x486cd903,0xf7f021b5,0xeb05fbb7,0xf6410288,0xf8d60358,0x58d310b0,
+0xd0034299,0x21b64865,0xfbaaf7f0,0xf8cd4656,0xe05da01c,0x4b624628,
+0xf1b04798,0xf2c00800,0xeb0581ca,0xf6410388,0x589b0258,0x30b0f8c6,
+0x94074626,0xf895e04c,0xb1bb3024,0x3324f8b5,0xf4034628,0xf5b34370,
+0xbf145f80,0x24012400,0x46224649,0xfa9ef00c,0xb1089007,0xe00e2600,
+0x46494628,0xf00c4622,0xe003fc15,0x46494628,0xfc26f00c,0x28009007,
+0x819bf000,0x9b072601,0xb1b86918,0x8006f890,0x0304f1a8,0xd9032b31,
+0x21db4842,0xfb64f7f0,0xeb059b07,0x69190288,0x0358f641,0x429958d3,
+0x483cd012,0xf7f021dc,0xe00dfb57,0x4b3a4628,0xf1b04798,0xf2c00800,
+0xeb05817a,0xf6410388,0x589b0258,0x610b9907,0x0388eb05,0x0258f641,
+0x2100589c,0x52a0f5a2,0xf7f14620,0xf104fc03,0xf8840a14,0x99168006,
+0x4650463a,0xfc1af7f1,0xb2fb9a01,0x612371e2,0x46202206,0xf7f14649,
+0x2200fc11,0x73622f0d,0xd802d00d,0xd0052f05,0x2f10e055,0x2f20d023,
+0xe050d00c,0x72232301,0x33037323,0x2303e003,0x33017223,0x73a37323,
+0xe04473e3,0x2b0b9b15,0x7223d10a,0x73223307,0x73a373e2,0x99164650,
+0xf7f1463a,0xe036fbeb,0x72232302,0x33067323,0x230473a3,0x9915e7e8,
+0x2b011f4b,0x2304d80d,0x18db73a3,0xb2cb73e3,0x2b052203,0x73227221,
+0x2302d101,0x7362e01e,0x2304e01d,0x3b017223,0x9a077323,0x6853b132,
+0x46c0e00b,0x00021c38,0x0001e901,0xf5054628,0xf00c713d,0xb128fa09,
+0xf4136843,0xd0016f80,0x73232305,0x73a32308,0x230173e3,0xb1ce7363,
+0x3b017a23,0xd8152b0a,0xf003e8df,0x0a060806,0x14141414,0x000f1414,
+0xe0022301,0xe0062302,0x9a072304,0x30f4f8c2,0xf44fe004,0x99077380,
+0x30f4f8c1,0x99039b02,0x780b781a,0x431a9904,0x3000f899,0x780a4313,
+0x431a9905,0x9906780b,0x780a4313,0xd120431a,0xf0139b14,0xf8db0f02,
+0xd01330ac,0x3ffff1b3,0xeb0bd008,0xf8d30383,0xb11a20b0,0xf0238953,
+0x81530302,0x9a018963,0x0302f043,0x20acf8cb,0xe0068163,0x428b9901,
+0xf04fbf04,0xf8cb33ff,0x4b5730ac,0x46214628,0x47989a18,0x2b027a23,
+0xf8bbd144,0xf013309e,0xd00f0f01,0x786278a3,0x7823431a,0x78e24313,
+0x7923431a,0x79624313,0xd103431a,0xf10ba808,0xe00201a4,0xf104a808,
+0x220801b4,0xfb42f7f1,0xf10b4e46,0x9b0802da,0x00bcf104,0x47b04651,
+0x786278a3,0x7823431a,0x78e24313,0x7923431a,0x79624313,0xd00d431a,
+0x69139a07,0xd00442a3,0xf44f483b,0xf7f07102,0xf104fa3f,0x465100e0,
+0xe0044622,0x00e0f104,0xf10b4651,0xf8d402d4,0x47b03104,0x46414628,
+0xf7ff465a,0xf1b8fc8d,0xdc490f03,0x2390f642,0xf8955cee,0xb3033d5e,
+0x3d5df895,0xf895b9eb,0xb1d33023,0x3024f895,0xf243b1bb,0x5aeb53d2,
+0xf243b14b,0x58ea53c8,0x5352f5a3,0xea023b41,0xb1030303,0xf895b14e,
+0xb1333d67,0x3d3cf895,0x0101f1d3,0x2100bf38,0x2100e000,0xf6422201,
+0x54ea2390,0xf895b9a1,0xb1891d5e,0x3d5df895,0xf895b973,0xb15b3023,
+0x3024f895,0xf895b143,0xb12b3d67,0x3d3cf895,0x4628b913,0xfe3ef7f7,
+0xf8bbb936,0x2b40309e,0x4628d102,0xfdeaf7f4,0xb90b9b19,0xe0064698,
+0xf04f9919,0x600c0800,0xf06fe001,0x4640081d,0xe8bdb00b,0x46c08ff0,
+0x0001e785,0x1e003161,0x00021c38,0xf0003001,0x28db00fe,0x2000d901,
+0x0843e002,0xb2d83b6e,0x4770b240,0x38240040,0x28dcb2c0,0x20dcbf28,
+0x46c04770,0xb5102901,0xdd024602,0xf8c02300,0xf8d232d0,0x4b0212d0,
+0x47984802,0x46c0bd10,0x1e004461,0x00021ce0,0x4b0db570,0x460c4605,
+0xb1384798,0x480b4623,0x4a0b6829,0x47a04c0b,0xe00c2000,0x4370f404,
+0xf5b3b2e2,0xbf145f80,0x23012300,0xbf8c2a0e,0xf0834618,0xbd700001,
+0x0001e955,0x00021e56,0x00021c5f,0x1e004461,0x734cf243,0x58c0b510,
+0xfc28f003,0x46c0bd10,0x3848f8d0,0x6818b510,0xf0036859,0xbd10fff3,
+0xf001b510,0xbd10fd23,0xf001b510,0xbd10ff8f,0x9c04b513,0x9c059400,
+0xf0009401,0xbd1cfea7,0x9c04b513,0xf0009400,0xbd1cfe39,0x6804b570,
+0xf8944606,0xb14b381c,0x210168a0,0xfce6f7f0,0x4824b120,0x7132f44f,
+0xf94af7f0,0x370cf8d4,0x33014620,0x370cf8c4,0xff2af7f6,0x3710f8d4,
+0x4620b11b,0xfebcf7f6,0xf894e032,0xb1c33024,0x3844f8d4,0xf44f4620,
+0xf8d3719d,0xf7f450dc,0x42a8ffad,0xf5c5bf36,0xebc53380,0x181a0200,
+0x32d0f8d6,0xf8c6189b,0xf8d432d0,0xf8c33844,0xf89600dc,0xb11b3230,
+0x21014630,0xfaecf000,0x0778f8d4,0x6e032500,0xf5044798,0x6823646f,
+0xf854b113,0x47980c04,0x34343501,0xd1f62d16,0x46c0bd70,0x00021e79,
+0xf000b510,0xbd10fad5,0x4ff0e92d,0x6804b0e5,0xb1c0f8dd,0x23009e71,
+0xf0029363,0x93000301,0x46154680,0x465a4620,0xf7fb4633,0x9003f989,
+0x49a9b128,0x4ba9462a,0x479848a9,0x9b6fe147,0xd9042b03,0x996ea863,
+0xf7f12204,0x1eabf9c3,0x2b0f9963,0x8133f200,0xf013e8df,0x01390010,
+0x01310014,0x00e20131,0x00e80131,0x00f100ed,0x01050131,0x010e0131,
+0x012e0131,0xf8cb4b99,0xe1243000,0x7f9cf5b6,0x7000f8d8,0xf44fd209,
+0x4895739c,0x46324995,0x47a04c90,0x030df06f,0xae04e114,0xf44f2100,
+0x4630729c,0xf972f7f1,0x25024b8f,0x23056033,0x331b7633,0xf04f76b3,
+0x76f30301,0x0a00f04f,0x02a0f04f,0x83b2ab60,0xf8a67675,0x9300a01e,
+0xab61aa62,0x0a84f8d7,0xac524651,0xa148f8cd,0xfe56f003,0x612ef507,
+0x4620311c,0xfcbcf008,0xf8d79b62,0x62330a84,0xf1069b61,0x627302b8,
+0xf04f9b60,0x62b3090a,0x1a88f8d7,0xfa16f004,0x3a84f8d7,0x8a1b9a52,
+0x60721d21,0x9330a806,0xf954f7f1,0xf8862304,0xf8863049,0x330c304a,
+0x9048f886,0x504bf886,0x304ef886,0x304ff886,0x32c4f8d8,0x904cf8a6,
+0xd13b42ab,0x64734b67,0x2b006b7b,0x4b66d038,0x64734651,0xa8182224,
+0x4000f8d8,0xf912f7f1,0x030cf640,0x0200f04f,0xf04f6533,0xf8860301,
+0xf8863057,0xf8862056,0xf8862059,0xf886205a,0xf8d4a058,0x464a1848,
+0xf106318d,0xf7f1005b,0xf8d4f919,0xf1061848,0x318d0065,0xf7f1464a,
+0xf8d4f911,0xb1233d4c,0x0248f04f,0x2054f8a6,0xf04fe006,0xf8a60341,
+0xe0013054,0x64734b4b,0x6c6bad04,0xf043a921,0x646b4300,0x4638223c,
+0xfbe2f7f4,0x992c4b46,0x4b46681a,0x681b4c3b,0xea434845,0x932a4302,
+0x2080f8d5,0xac5c47a0,0x46202240,0x01f8f105,0xffb0f7f0,0x073cf8d7,
+0xf7f44621,0x4658f9a5,0xf44f4629,0xe01f729c,0x073cf8d4,0xf9c0f7f4,
+0xe0509003,0x073cf8d4,0xf9acf7f4,0x4658e04b,0x014cf104,0x7c63e00f,
+0xf06fb11b,0x92030204,0x4659e041,0x004cf104,0xf7f12206,0xf8d4f8bf,
+0x46590dd0,0x220630da,0xf8b8f7f1,0x0089e033,0x734cf243,0x58e09163,
+0xf003b249,0xe02afafb,0x4000f8d8,0x5000f89b,0x37f8f8d4,0xbf942d0e,
+0x5600f44f,0x5680f44f,0xb123789b,0x4b11491d,0x4798481d,0x4620e017,
+0xfd08f7f5,0x6130f445,0x43314620,0xf9d2f7fb,0xf7f44620,0xe00aff73,
+0x1218f8c8,0x4b07e007,0x49054814,0x4798462a,0x0316f06f,0x98039303,
+0xe8bdb065,0x46c08ff0,0x000220e7,0x1e004461,0x00021fc4,0x00012345,
+0x00021fdd,0x00021c42,0xdeadbeef,0x006480f1,0x007480f1,0x004080f1,
+0x00022e08,0x00022e04,0x0002200f,0x000220f8,0x00022039,0x00022074,
+0x9c04b513,0xf0019400,0xbd1cf825,0xf000b510,0xbd10ffcb,0x9c04b513,
+0x9c059400,0xf0009401,0xbd1cff37,0xf001b510,0xbd10fdb3,0xf001b510,
+0xbd10fb6f,0x69ccb5f0,0xf414b085,0x46074f00,0xf89d460d,0xd0096030,
+0x4400f424,0x9c0a61cc,0x94009602,0x94019c0b,0xf9bef000,0xf0014638,
+0xb005fd51,0x46c0bdf0,0x43f0e92d,0x9f0eb087,0x460c4681,0x46984615,
+0xb91f6806,0x3dd0f8d6,0x0708f103,0xf1b8b145,0xd9050f03,0x4629a804,
+0xf7f12204,0xe001f813,0x93042300,0x9a042c03,0xdc04d023,0xd0112c01,
+0xb164dc15,0x2c0ee080,0xdc02d00e,0xd01c2c0c,0xf5a4e07a,0x2b017383,
+0x2300d876,0x4b48e050,0xe00c602b,0xe087602c,0x602b6833,0x7c74e084,
+0xf0402c00,0xf8d68081,0xf7f4073c,0x4620f8d5,0x4648e07b,0xfcb6f015,
+0x4630e076,0xffa8f7f6,0x6f00f010,0xf410d02a,0xf4000f00,0xd01063e0,
+0x3b040a1b,0x4a372b01,0x007ff000,0x2314d804,0x2303fb00,0xe01468da,
+0xfb002314,0x689a2303,0x0a1be00f,0x2b013b04,0xf0004a2e,0xd804007f,
+0xfb002314,0x685a2303,0x2314e003,0xf303fb00,0xf44f589a,0xfbb273fa,
+0xe007f0f3,0x037ff000,0x72faf44f,0xf302fb03,0xf0f2fbb3,0xe03b6028,
+0xd1024543,0x000df06f,0x5d5ae02f,0x2a003301,0xf5b4d1f6,0xeb057f83,
+0xebc30403,0xd1080308,0x46309202,0x46224629,0xf8cd9500,0x97038004,
+0x9301e007,0x93022301,0x97039400,0x46294630,0xf7fa4613,0xe00fffc3,
+0xbf183a00,0xf8d62201,0x92003848,0x0217f10d,0x95019202,0x46216818,
+0x462b4642,0xfe22f004,0xf100b138,0x2b250325,0xf8c6d802,0xe0000708,
+0xb0072000,0x83f0e8bd,0x14e46c77,0x1e00c744,0x4b0ab570,0x460d4604,
+0xb9184798,0x214d4808,0xfe76f7ef,0x68e26923,0x429318eb,0x4804d903,
+0xf7ef214e,0x82a5fe6d,0x46c0bd70,0x1e005ec1,0x0002210d,0x4b0bb570,
+0x460d4604,0xb9184798,0x21434809,0xfe5cf7ef,0x429d8aa3,0x4806d903,
+0xf7ef2144,0x6920fe55,0x19408aa3,0x61201b5b,0xbd7082a3,0x1e005ec1,
+0x0002210d,0x4b0cb570,0x460d4604,0xb9184798,0x2139480a,0xfe40f7ef,
+0x68a26923,0x42931b5b,0x4806d203,0xf7ef213a,0x6920fe37,0x1b408aa3,
+0x612018eb,0xbd7082a3,0x1e005ec1,0x0002210d,0x3224f8d0,0x41f0e92d,
+0x460c4605,0xf0002b00,0xf5b3808f,0xd9036fe1,0x218d4847,0xfe1cf7ef,
+0x682bbb34,0x1844f8d3,0x2024f9b1,0x3026f9b1,0xf9b1189b,0x189b2028,
+0x202af9b1,0xd01742d3,0x3224f8d5,0x64e1f5c3,0xdc032c00,0x2193483a,
+0xfe02f7ef,0x3218f8d5,0xbf142b01,0x23982318,0xdd05429c,0x2228f8d5,
+0x322cf8d5,0xd35f429a,0xf240686b,0x6c987144,0x47984b30,0xb9404606,
+0xf8852301,0xf8953230,0x33013231,0x3231f885,0x2700e04e,0xf8852180,
+0xf7ff7230,0x6934ff77,0x0801f04f,0x22047823,0x0303f368,0xf362b2db,
+0x70231307,0x3224f8d5,0x189b18a0,0x70a3b29b,0x70e30a1b,0x2224f8d5,
+0x1220f8d5,0xfeaaf7f0,0x78e178a3,0xea434630,0xf7ff2101,0xf8d5ff3d,
+0x46390220,0x2224f8d5,0xfe7cf7f0,0x3228f8d5,0x7224f8c5,0xd9032b1f,
+0x21b2480f,0xfdacf7ef,0x1228f8d5,0x22c0f8d5,0x3021f852,0xf8423301,
+0x682b3021,0x7228f8c5,0x073cf8d3,0x46434639,0xf7f34632,0x682bfed9,
+0x0778f8d3,0x47986e03,0xe8bd2000,0x46c081f0,0x0002210d,0x1e005c25,
+0x4ff8e92d,0xf890469b,0x46073230,0x46164689,0x8028f8dd,0xa030f89d,
+0x2101b113,0xff50f7ff,0x3224f8d7,0x2220f8d7,0x0418f103,0xf8d7189d,
+0xf8c73218,0x2b014224,0xb166d112,0x46311914,0x46202210,0xfe4ef7f0,
+0x0010f104,0x1010f8d9,0xf7f0226e,0xf8d7fe47,0x33803224,0x3224f8c7,
+0x3224f8d7,0x6fe1f5b3,0x4843d303,0xf7ef21e0,0xb116fd53,0x0f00f1ba,
+0x2200d002,0xe0122301,0x683a990b,0xf642b911,0xe00723ce,0x23cef642,
+0x990b5ad3,0xd0044299,0x23d0f642,0x45985ad3,0x2200d106,0x712b2307,
+0x71aa716a,0xe01371ea,0xf243683b,0x589b12dc,0xd1022b05,0x33042200,
+0xf1bbe7f1,0xd1020f14,0x23082200,0x2300e7eb,0x716b712b,0x71eb71ab,
+0x061cf109,0x702b7e33,0x706b7e73,0x70ab7eb3,0x70eb7ef3,0x0f00f1b8,
+0xf108d003,0x752b33ff,0xf885e001,0x23008014,0x736b732b,0x73eb73ab,
+0x746b742b,0x74eb74ab,0x4b1a4648,0xb9184798,0x21554817,0xfcfcf7ef,
+0x3016f8b9,0xf0034a16,0x5cd40307,0xd9042c04,0xf2404811,0xf7ef1109,
+0x756cfcef,0x69739a0b,0xf1b8b112,0xe0010f02,0x0f03f1b8,0xb29abfcc,
+0x0a130c1a,0x2300726b,0x0e1372ab,0x72eb722a,0x3228f8d7,0x33014638,
+0x3228f8c7,0xf7ff2100,0xe8bdfea7,0x46c08ff8,0x0002210d,0x1e005ec1,
+0x000221c0,0x41f0e92d,0x8a884607,0x2803b086,0xf240460e,0x690c8156,
+0xf0037823,0x2d01050f,0x814ff040,0x78e378a2,0x2103ea42,0xf2004281,
+0x46308148,0xfe30f7ff,0x46302104,0xfe46f7ff,0x091b7823,0xd07a2b02,
+0xf0002b03,0x2b0180d4,0x8137f040,0x21146934,0xf7ff4630,0x7862fe37,
+0xea437823,0x78a22302,0x4302ea43,0xea4378e2,0x63736302,0x2b047c23,
+0x4897d904,0x21b5f240,0xfc8af7ef,0x4a957c23,0x5cd54630,0x47984b94,
+0x4891b918,0xf7ef215c,0xf005fc7f,0x42ac0407,0x488dd003,0xf7ef215d,
+0x8af3fc77,0x0307f023,0x0303ea44,0x69f382f3,0x4300f443,0xf8d761f3,
+0x2b0132c4,0xf897d002,0xb9a33070,0x781a6933,0xf012785b,0xea420f0c,
+0xd10c2303,0x02fcf013,0x2a20d001,0x4638d107,0x2a204631,0x2200bf14,
+0xf0002201,0x6838fb79,0x4632497a,0xf7f44633,0x2800fdc3,0x6838db05,
+0x22004631,0xff38f7f8,0x2400e0d5,0x46314638,0x46234622,0x94019400,
+0xf7ff9402,0x687bfead,0x6c984631,0x4b6e4622,0x46384798,0xf7ff2101,
+0x4620fe03,0x2104e0c8,0x69344630,0xfdc2f7ff,0x4631687b,0x4b676c98,
+0x47986935,0xe0002100,0x42813101,0x4601d101,0x5d4be002,0xd1f72b00,
+0x78237862,0xea433101,0x78a22302,0x4302ea43,0xebc178e2,0xea430400,
+0xf5b36302,0xeb057f83,0xd1090201,0x7383f5a3,0x93039302,0x90019500,
+0x46296838,0xe0084623,0x23019200,0x93022200,0x92039401,0x46296838,
+0xf7fa4613,0x2104fd13,0x46304604,0xfda2f7ff,0xf3c46932,0x70532307,
+0x4307f3c4,0x0e237093,0x701470d3,0x46302104,0xfd94f7ff,0x22046934,
+0x21004620,0xfc9ef7f0,0x25017823,0x0303f365,0x2205b2db,0x2104e04f,
+0xf88d4630,0x69345017,0xfd64f7ff,0x4631687b,0x4b386c98,0x47986935,
+0xb12d4680,0x4629a804,0xf7f02204,0xe000fca3,0x683b9504,0xf8d37821,
+0x78630848,0xea4178e2,0x78a32103,0xea419501,0x9b044103,0x6102ea41,
+0xbf183b00,0x93002301,0x0317f10d,0x46429302,0x6800462b,0xfb32f004,
+0x46042104,0xf7ff4630,0x6932fd51,0x2307f3c4,0x70537014,0x4307f3c4,
+0x70930e24,0x210470d4,0xf7ff4630,0x6934fd43,0x46202204,0xf7f02100,
+0x7823fc4d,0xf3652501,0xb2db0303,0xf3622208,0x70231307,0x4631687b,
+0x4b126c98,0xb2804798,0x0a0070a0,0x683b70e0,0xf8d32100,0x4632073c,
+0xf7f3462b,0x2000fcad,0x687be006,0x6c984631,0x4b072200,0x20014798,
+0xe8bdb006,0x46c081f0,0x0002210d,0x000221bb,0x1e005ec1,0x00010f55,
+0x1e005c41,0x1e003e11,0xf243b57f,0x58c543ec,0xb9224616,0xf2404812,
+0xf7ef2151,0x69f3fb49,0x4f00f413,0x2400d01a,0x46314628,0x46234622,
+0x94019400,0xf7ff9402,0x686bfdaf,0x7144f240,0x4b086c98,0x46014798,
+0x686bb140,0x6c984622,0x47984b05,0x21014628,0xfcfef7ff,0x46c0bd7f,
+0x0002210d,0x1e005c25,0x1e005c41,0x4ff8e92d,0x4682290a,0x4617460d,
+0x9e0a4699,0x2b00d857,0x2600bf08,0xf1066843,0x6c980148,0xbf9829ff,
+0x7180f44f,0x47984b27,0xb9384680,0xfae8f7ef,0xf2404825,0xf7ef11f1,
+0xe040fb03,0xf7ff21a4,0xf8d8fc99,0xf04f4010,0x78230b01,0xf36b2207,
+0xb2db0303,0x1307f362,0xf1067023,0xb29b030c,0x0a1b70a3,0x1d2270e3,
+0x2307f3c5,0x70537125,0x4307f3c5,0x0e2b7093,0xf3c770d3,0x71532307,
+0x4307f3c7,0x0e3b7193,0x71d37117,0x0f00f1b9,0xf104d005,0x4649000c,
+0xf7f04632,0x78a3fbb7,0x464078e1,0x2101ea43,0xfc4af7ff,0x3000f8da,
+0xf8d32100,0x4642073c,0xf7f3465b,0xe8bdfc01,0x46c08ff8,0x1e005c25,
+0x0002210d,0x4ff0e92d,0x6803461e,0xf8d3b089,0x460f3848,0x46114680,
+0x46146818,0x9048f8dd,0xb04cf8dd,0xf84af003,0x90006939,0x46204b62,
+0x7ca24798,0x21067ce3,0x2303ea42,0x46384682,0xf7ff9301,0xf8d8fc33,
+0x2b013218,0x2106d130,0xf7ff4638,0xf8d8fc47,0x46393004,0x4b576c98,
+0x8a814798,0x3104ad03,0xfc06f7ff,0x46282214,0xf7f04621,0x7b23fb67,
+0x0f04f013,0x4638d003,0xf7ff2102,0x211efc2f,0xf7ff4638,0x693cfc2b,
+0x46202214,0xf7f04629,0x7ba3fb55,0xea437be2,0xf0232302,0xf0430306,
+0x73a30306,0x73e30a1b,0x0f00f1bb,0xf89bd016,0x2b013008,0x2b03d001,
+0xf446d102,0xe00d3680,0xd1022b02,0x3600f446,0x2b04e008,0xf446d102,
+0xe0033640,0xbf082b0b,0x4600f446,0x46382118,0xfbfcf7ff,0x2100693d,
+0x46282218,0xfb06f7f0,0xf3c91d2c,0xf8852307,0x70639004,0x4307f3c9,
+0xea4f70a3,0x70e36319,0xf04f9a00,0xb2500b00,0xf870f7ff,0x027ff00a,
+0xf01a0e13,0x74206f00,0xf8847122,0xf884b005,0x71e3b006,0xf442d008,
+0x0a1a4300,0x0e1b7123,0xf8847162,0x71e3b006,0x46399a01,0x03c7f3c2,
+0x23007223,0xf8d87263,0x22063000,0x3848f8d3,0x7326889b,0x0a1b72a3,
+0xf3c672e3,0x73632307,0x4307f3c6,0x0e3373a3,0xb011f884,0x782b73e3,
+0xf3642401,0xb2db0303,0x1307f362,0xf8d8702b,0x6c983004,0x47984b0a,
+0x70a8b280,0x70e80a00,0x3000f8d8,0xf8d34659,0x463a073c,0xf7f34623,
+0xb009fb23,0x8ff0e8bd,0x0001edf9,0x1e003e21,0x1e003e11,0xb5102901,
+0xdd086804,0x68502100,0x460a4b06,0x28064798,0xf8a4bfd8,0xf8b406fc,
+0x4b0316fc,0x47984803,0x46c0bd10,0x1e0037cd,0x1e004461,0x0002212f,
+0xb5702901,0xdc014605,0xe0102400,0x02c0f8d0,0x22802100,0xfa7af7f0,
+0xf8852300,0xe0133231,0xdd042c03,0x0f03f014,0x480ed101,0xf8d547b0,
+0x462132c0,0x2024f853,0x4e0c480b,0x47b03401,0xd1ed2c20,0x47b04807,
+0x122cf8d5,0x2228f8d5,0x48074c06,0xf89547a0,0xf8951231,0x48052230,
+0xbd7047a0,0x00021250,0x00022143,0x1e004461,0x0002214d,0x0002217b,
+0xb5102901,0xdd094604,0x68502100,0x460a4b06,0x1e434798,0xbf982b1e,
+0x022cf8c4,0x122cf8d4,0x48034b02,0xbd104798,0x1e0037cd,0x1e004461,
+0x000221a3,0x03fff000,0xea400a00,0x47702003,0x78007843,0x2003ea40,
+0x46c04770,0x78434602,0x04007880,0x2003ea40,0x43187813,0xea4078d3,
+0x47706003,0x46c04770,0x4604b510,0x1c43b110,0xd0044203,0xf44f4805,
+0xf7ef610c,0x2001f945,0x1c43e001,0x0864b2d8,0xbd10d1fb,0x000221e0,
+0xb5702a05,0x460d4606,0xd9044614,0xf6404811,0xf7ef0174,0x4b10f931,
+0x0184f895,0x23015d1a,0xf102fa13,0x0384eb06,0xf8956a1b,0x2b012183,
+0xb2cbd106,0xea40431a,0xf8850303,0xe0062183,0xb2db43cb,0xf885401a,
+0xea002183,0xf8850303,0xbd703184,0x000221e0,0x0002282e,0xb5102901,
+0xdd044602,0xf8c02300,0xf8c032c8,0xf8d232cc,0x4b0312c8,0x22ccf8d2,
+0x47984802,0x46c0bd10,0x1e004461,0x000221ef,0x4603b570,0x480a460c,
+0x68224619,0x47984b09,0xe0062500,0x79191963,0xf3c14807,0x47b00245,
+0x68233501,0x429d4e03,0x4804d3f4,0xbd7047b0,0x00022204,0x1e004461,
+0x0002221e,0x00021250,0xf890b5f0,0xb08d328c,0xb11b4605,0xf6404821,
+0xe02261bd,0x69087d0b,0xb2d93b18,0xf100b91a,0x1f0a031c,0xf100e003,
+0xf1a10322,0xae02020a,0x96004619,0x68282300,0x47a04c17,0x46314817,
+0xffbef7ff,0x68286869,0x713df501,0xf960f00b,0xb9284607,0xf640480f,
+0xf7ef61d6,0xe017f8a9,0x04f8f100,0x480e4621,0xffaaf7ff,0x46306869,
+0x714af501,0xfc2ef007,0x46214630,0xfc2af007,0x46214808,0xff9cf7ff,
+0x46396828,0xffc8f00a,0xbdf0b00d,0x000221e0,0x0001df19,0x0002222a,
+0x00022238,0x0002224c,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,
+0xf87af7ef,0x0507f004,0xd00342a5,0x215d4806,0xf872f7ef,0xf0238af3,
+0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x000221e0,0x4b0ab570,
+0x460d4604,0xb9184798,0x214d4808,0xf85cf7ef,0x68e26923,0x429318eb,
+0x4804d903,0xf7ef214e,0x82a5f853,0x46c0bd70,0x1e005ec1,0x000221e0,
+0x4b0bb570,0x460d4604,0xb9184798,0x21434809,0xf842f7ef,0x429d8aa3,
+0x4806d903,0xf7ef2144,0x6920f83b,0x19408aa3,0x61201b5b,0xbd7082a3,
+0x1e005ec1,0x000221e0,0x4ff0e92d,0x900cf8d0,0x4617460d,0xf8d96801,
+0xb0872008,0xa044f8dd,0x92039105,0xd06f2a00,0xf2406843,0x6c987144,
+0x47984b37,0x28004606,0xf109d066,0x21ac030c,0xf7ff9304,0x6934ffc5,
+0x46209904,0xf7f02218,0xf104f8f1,0xb9270818,0xf04f4640,0x463d0b18,
+0x462be00a,0x21004640,0x4c2a463a,0xf10747a0,0xfa5f031a,0x2502fb83,
+0x9a049903,0x0418f1a1,0xf102b2e4,0xebc50118,0x445c0204,0x1b641949,
+0xf8d0f7f0,0xb2e14630,0xff80f7ff,0x3008f8d9,0x18fb8ab2,0xd004429a,
+0xf640481b,0xf7ee6183,0x7d31ffdb,0x39184640,0x2203b2c9,0x47984b17,
+0x2301b130,0x99057043,0x23bcf642,0x70835acb,0x0f00f1ba,0x9a05d109,
+0x3848f8d2,0x2b02685b,0xf04fbf0c,0xf04f0a02,0x46300a0c,0xf8c62107,
+0xf7ffa030,0x2200ff35,0x46319805,0x92004613,0xa004f8cd,0xff34f7f9,
+0xe8bdb007,0x46c08ff0,0x1e005c25,0x1e006abd,0x000221e0,0x1e003759,
+0x69c4b570,0x68a04605,0x4606b908,0x686be02a,0x7144f240,0x4b146c98,
+0x46064798,0x21acb310,0xff46f7ff,0x010cf104,0x693068a2,0xf872f7f0,
+0x68a14630,0xff22f7ff,0xb96b6863,0xf640480b,0xf7ee612f,0x682bff81,
+0x3848f8d3,0x2b02685b,0x2302bf0c,0x6063230c,0x46306863,0x21076333,
+0xfeeef7ff,0xbd704630,0x1e005c25,0x000221e0,0x4b0cb570,0x460d4604,
+0xb9184798,0x2139480a,0xff62f7ee,0x68a26923,0x42931b5b,0x4806d203,
+0xf7ee213a,0x6920ff59,0x1b408aa3,0x612018eb,0xbd7082a3,0x1e005ec1,
+0x000221e0,0x47f3e92d,0x68004606,0xf8dd4698,0xf00a9028,0x4682fe75,
+0xd04c2800,0x0f00f1b9,0x2310bfac,0x199b2308,0x68a3689c,0xd0422b00,
+0xf2406873,0x6c987144,0x47984b21,0xb9284605,0xf6404820,0xf7ee51f5,
+0xe035ff2b,0xf7ff21ac,0x68a2fedb,0x010cf104,0xf7f06928,0x4628f807,
+0xf7ff68a1,0x69ebfeb7,0xea434628,0x61eb0308,0x71e9ea29,0xfe90f7ff,
+0xf1056863,0xb96b071c,0xf6404810,0xf7ee6103,0x6833ff0b,0x3848f8d3,
+0x2b02685b,0x2302bf0c,0x6063230c,0x68306863,0x6863617b,0x93004629,
+0x93012300,0x33014652,0xfab8f7f8,0x2500e000,0xe8bd4628,0x46c087fc,
+0x1e005c25,0x000221e0,0x47f0e92d,0x46984689,0x6020f89d,0xb9084607,
+0xe0133001,0x25004614,0x46414620,0x4b084632,0x19a44798,0x3001b908,
+0x3501e003,0xd1f342bd,0xf0192000,0xbf080f01,0x0001f080,0x87f0e8bd,
+0x1e00d671,0x4ff8e92d,0x881d2400,0x468a4683,0x46984691,0x46274626,
+0xeb0be012,0x78630405,0xd307454b,0x46511ca0,0x4b0a464a,0xb9084798,
+0xe0052701,0xf8381c73,0xb2de5016,0xd8042e1f,0x2f00b115,0xe001d0e9,
+0x463cb907,0xe8bd4620,0x46c08ff8,0x1e00d671,0x6803b51f,0xf8932104,
+0xab042d5e,0x2d04f843,0xf8802200,0x91002124,0xf7fe3105,0xb005fd31,
+0x46c0bd00,0xf890b510,0x46023124,0x6803b143,0x112cf8d2,0xf8d32200,
+0x4c02073c,0x47a04613,0x46c0bd10,0x1e0061f9,0x4ff0e92d,0x9008f8d1,
+0x7d01f5ad,0x4693460f,0xf1b96806,0xd06b0f00,0x2d00680d,0x2206d13d,
+0x46294668,0xff2ef7ef,0x46ea687b,0x087ff013,0x4630d103,0xfa4ef7f4,
+0x466b4680,0x46414630,0x0204f109,0x47a04c2c,0x010cf107,0xf10d464a,
+0xf7ef0006,0x4c29ff37,0x462a4641,0x46302301,0x7848f8d6,0xf8d647a0,
+0xf8a73848,0xf8b30138,0x46302138,0xf7f3211c,0x4630fb9d,0xf7f34641,
+0x4630fd13,0xf1094669,0x465b0206,0xfe8af7f4,0x46414630,0xfb48f7f5,
+0x2d03e02a,0x2100d128,0xf1092206,0x46680406,0xfeecf7ef,0xf107b2a4,
+0x68ba010c,0x0006f10d,0xff04f7ef,0x466b1ce2,0x0203f022,0x60e8f506,
+0x711af44f,0xfdeaf7f4,0x46304622,0xf7f3214a,0x3c02fb6d,0xf8d64630,
+0xf7f31dd0,0x4630fc0f,0x46e8b2a1,0xf916f7f5,0x7d01f50d,0x8ff0e8bd,
+0x0001dce1,0x0001dac5,0xb08eb570,0x46154606,0x0016f10d,0xb1194b13,
+0x47984913,0xe0012400,0xe7fa4912,0xf304fa55,0x0301f013,0x2301bf18,
+0x3037f88d,0x0336f10d,0x23029300,0x93012200,0x93023b01,0xf10d6830,
+0x46130116,0x4036f88d,0xf7f99203,0xb910fef7,0x2c083401,0xb00ed1e2,
+0x46c0bd70,0x1e004075,0x000219ef,0x00021a94,0xb570460b,0x46152101,
+0x4604461a,0xffc4f7ff,0xb9204601,0x462a4620,0xffbef7ff,0x46084601,
+0x46c0bd70,0x4ff0e92d,0xb0896805,0x468a4607,0xf8d59203,0xf8d58dd0,
+0x461c980c,0xf0402b00,0x4619813e,0xf7f44628,0xf895f9d3,0xb9233023,
+0x2a009a03,0x2201bf08,0xf8959203,0xf04f3de8,0xf02332ff,0xf8850304,
+0x6aab3de8,0xf4234621,0x62ab7300,0xf8d3683b,0xf7f2073c,0xf243fdad,
+0x54ec1395,0x2a009a03,0x8114f000,0xf8d7683b,0xf8d31130,0x4b91073c,
+0xf1ba4798,0xd0030f00,0x46514628,0xf876f7f4,0x5bbaf505,0x763df505,
+0x0b1cf10b,0x22904659,0xf7ef4630,0xf895fe4f,0xf50522fc,0xf888713e,
+0xf1082024,0x31050025,0xfe44f7ef,0x5058f505,0x46313008,0xf7ef2206,
+0xf243fe3d,0x50ec13a0,0x50ec3304,0x4d5cf885,0x4023f895,0x0801f04f,
+0x8024f885,0xd0562c00,0x46284631,0xfdf4f00a,0xb9184606,0x0024f885,
+0xe0cf9003,0xf00a4641,0x4630fbc7,0xf00a2102,0x4630fbc3,0xf00a2110,
+0xf642fbbf,0x5ceb33c6,0xb1136872,0x0304f042,0xf022e001,0x60730304,
+0xb1836b6b,0x328cf897,0x2300b16b,0xf5079300,0xf5077222,0x46287328,
+0x32054631,0xf7f53307,0x2401fb95,0x2400e007,0x46314628,0x46234622,
+0xf7f59400,0x2200fb8b,0x9300237f,0xf5059401,0xf106704a,0x461301f8,
+0x47a04c55,0x46314628,0xfc36f00a,0x46222400,0x46314638,0xf7ff3401,
+0x2c04fbbb,0x2301d1f7,0x321df887,0x4628e021,0xfa44f7f4,0x464268b9,
+0xf7ff4638,0xf8b5fe6d,0xf8b53322,0xf8c92320,0x02913190,0x0f00f1ba,
+0xf8c9d003,0xf8c94180,0x3b004184,0x2301bf18,0x4302ea43,0x3188f8c9,
+0xf8c94628,0xf7f3118c,0x2100fc99,0x46582290,0xfd90f7ef,0x738cf241,
+0x02fff04f,0xf06f52ea,0xf6420238,0x50ea23d8,0x3848f8d5,0x68182100,
+0xfa0af002,0xf7f44628,0x2201fa0d,0x69794638,0xfe36f7ff,0x1dd0f8d5,
+0xf7f34628,0x4628fcc9,0xfb04f7f3,0xf7f34628,0x683bfc71,0xb1436b5b,
+0x32c4f8d7,0xd1042b02,0x463821ff,0xf7ff460a,0xf8b5fed3,0xf4033324,
+0xf5b34370,0xd1095f80,0xf8d7683b,0xf8d31128,0xf44f073c,0x2301727a,
+0x47a04c1a,0x3023f895,0x4628b91b,0xf7f32101,0xf8d5fd5b,0xf8b53848,
+0x681c0324,0x47984b14,0x031ef10d,0xf10d4601,0x4620021f,0xfacaf002,
+0x301ff89d,0xf89d9305,0x9306301e,0xf8954628,0xf7f31024,0x9b03f935,
+0x46382108,0x0201f1d3,0x2200bf38,0x9100ab05,0xfafef7fe,0xb0092000,
+0x8ff0e8bd,0x1e006221,0x0001ed85,0x1e0061f9,0x0001e9bd,0xb5102100,
+0x460b460a,0xfe96f7ff,0x46c0bd10,0x6804b573,0xf8944606,0x2b003024,
+0xf243d051,0x5ce31397,0xd04c2b00,0x3023f894,0x1d5ef894,0xd0462b00,
+0x1396f243,0xb1e25ce2,0x5ce33b01,0xd1184293,0xf894b1b9,0xb9a33d5d,
+0x5158f504,0x788b3108,0x431a784a,0x4313780b,0x431a78ca,0x4313790b,
+0x431a794a,0x2301d005,0x3d5cf884,0xf7f44620,0xf243fa79,0x5ce21395,
+0x5ce33302,0xd914429a,0x5d41f894,0xf894b98d,0xb1233d5c,0x5d5cf884,
+0xf7f44620,0x2301fa67,0x3d41f884,0x21024630,0x462b462a,0xf7fe9500,
+0xf243fa9b,0xf2431195,0x5c621397,0x42935ce3,0x1c53d301,0xbd7c5463,
+0x47ffe92d,0x460d4606,0xb1c24691,0xd1072a02,0x2a006b8a,0x80e7f040,
+0x69496843,0xe0df6c98,0xf0402a03,0x6b8b80e0,0xf0002b00,0x7a1b80dc,
+0xf0402b02,0x680080d8,0x47984b89,0xf891e0d3,0xb17b302d,0x32c8f8d0,
+0x42ccf8d0,0xf8c03301,0x684332c8,0x6c986949,0x47984b82,0xf8c61900,
+0xe0c302cc,0x3234f8d0,0xf0002b00,0x688f80bf,0x2f05684c,0x80baf240,
+0xf2402f07,0x487a80b7,0x22064621,0xa1e8f8df,0x280047d0,0x80aef040,
+0xf7ff88e0,0xf5b0fa3b,0xf1044f01,0xf8ad0806,0xd10c000e,0x020cf104,
+0x429a19e3,0x080af104,0x809cf200,0xf7ff8960,0xf8adfa29,0xf8bd000e,
+0xf640200e,0x429a0306,0xf8d6d122,0xf0133234,0xd01d0f01,0x0002f108,
+0x0300ebc4,0x0307ebc3,0xdc002b1c,0x7983d114,0xea4379c2,0xf5b32302,
+0xd10d7f80,0x041af108,0x700ef506,0x22044621,0xb12847d0,0x4621a802,
+0xf7ef2204,0xe063fc4f,0x300ef8bd,0x6f00f5b3,0xf895d14c,0x2b00302c,
+0x6829d048,0x78831d08,0x401a7842,0x7901790b,0x78c24013,0x7943401a,
+0x400b4011,0xd1392bff,0x3234f8d6,0x0f04f013,0xf108d034,0x79a30402,
+0xf89879e2,0xea437002,0x093b2002,0xd1292b04,0x2b117a63,0xf7ffd126,
+0x0480f9d1,0xbb080c80,0x030ff007,0x78e0009f,0xea4378a3,0xf7ff2000,
+0xf107f9c5,0x42980308,0x19e3dd30,0x78d8789a,0x2000ea42,0xf9baf7ff,
+0xf8ad2302,0x9300000c,0x023cf8d6,0x1240f8d6,0x7211f506,0xf7ffab03,
+0xb188fc2b,0x3234f8d6,0x0f02f013,0x2302d016,0xf8d69300,0xf8d60264,
+0xf5061268,0xf10d721b,0xf7ff030e,0xb948fc19,0x69696873,0x22006c98,
+0x47984b22,0x6968e03a,0xe00a2118,0xb1526baa,0x7a136968,0x2b028a84,
+0x100ff992,0x3408bf08,0xf7ff1861,0x6829fa87,0x7d8b7dca,0x2302ea43,
+0x030ff023,0x758bb29b,0x75cb0a1b,0x784a6829,0xea43780b,0xf4232302,
+0xb29b6380,0x0a1b700b,0x6968704b,0xf7ff2106,0x696bfb67,0x0178f105,
+0x22066918,0xfbb2f7ef,0x46306bab,0x69699301,0x230069aa,0x9000f8cd,
+0xf95af7fe,0x87ffe8bd,0x1e008225,0x1e003f55,0x00022828,0x1e005c41,
+0x1e00d671,0x6804b51f,0xf894ab04,0xf8432d5e,0x1e0a2d04,0x2201bf18,
+0x91002104,0xf7fe3102,0x4620f947,0xf88cf7f5,0x46c0bd1f,0x6804b5f7,
+0xf8944606,0xf0433de8,0xf8840304,0x6b633de8,0xf894b33b,0xb3233024,
+0x3023f894,0xf500b30b,0x21007022,0x3005221a,0xfb50f7ef,0x7028f506,
+0x22162100,0xf7ef3007,0xf504fb49,0x46205158,0xf00a3108,0x4605f9ad,
+0xf8d4b158,0x462907e8,0xfeb4f7fa,0x46202200,0x46134629,0xf7f59200,
+0x6833f8ed,0xf8d32700,0xf243073c,0x58e113d4,0x47984b36,0x46202102,
+0xfe92f7f3,0x738ef241,0x462056e3,0xbf181bdb,0xf8842301,0xf8843023,
+0xf8847024,0x25017d67,0xf8b4f7f4,0xf8844620,0xf7f55d14,0x4620f835,
+0xffa0f7f3,0x738cf241,0x46205ae1,0xfc6af7f9,0xf7f34620,0xf504fa0b,
+0x311051bc,0xf7f44620,0x4620fce7,0xfc4cf7f3,0x52baf504,0x21034620,
+0xf7f3321c,0x4620f931,0x1dd0f8d4,0xfcc8f7f9,0x3023f894,0xf884b923,
+0x46205d3d,0xfa72f7f3,0x210b4620,0xfe50f7f3,0x321cf896,0xf241b933,
+0x5ae27388,0xfb02230a,0xe011f503,0x7388f241,0x68f35ae5,0xb15b689b,
+0x7364f241,0x51baf504,0x46305ce2,0x463b3125,0x97019700,0xf9d4f7ff,
+0xf8d66833,0xf8d31130,0x462a073c,0x4c022300,0xbdfe47a0,0x1e006221,
+0x1e0061f9,0xf2436802,0x58d313dc,0x2b05b510,0xf8d2d10f,0xf9b11844,
+0xf9b12024,0x189b3026,0x2028f9b1,0xf9b1189b,0x42d3202a,0xf7ffd101,
+0xbd10ff3d,0xf7ffb510,0xbd10ff39,0x6800b570,0x461e4615,0x780b784a,
+0x2202ea43,0x3023f890,0xf890b943,0xb12b3024,0x7f40f412,0x2400bf14,
+0xe0002401,0x7caa2400,0x310a7ceb,0x2203ea42,0x02c7f3c2,0xbfd42a0e,
+0x22012200,0xf8d2f00a,0xb1086030,0xe0012000,0x0001f084,0x46c0bd70,
+0x4ff0e92d,0xf5ad6807,0x92037d27,0xf8979302,0x46823024,0xf8d7b95b,
+0x789b37f8,0x7c3bb93b,0xf243b92b,0x58fb13dc,0xf0002b00,0x980283b1,
+0xf1006900,0xf01b0b06,0x90060f01,0x4883d004,0x41e6f640,0xf98cf7ee,
+0xf89b9906,0x798a3001,0xea429803,0x79032203,0x0481f3c2,0x0303f003,
+0xf0022b02,0xd10705fc,0x4f00f412,0xf1d4d004,0xbf380301,0xe0002300,
+0x2c012300,0xf983fa5f,0x4872d904,0x41f4f640,0xf96af7ee,0xd1302c01,
+0x98022106,0xf918f7ff,0x21109802,0xf914f7ff,0xf1b94606,0xd0040f00,
+0x21049802,0xf90cf7ff,0x99024606,0x302ef897,0x8014f8b1,0xf0002b00,
+0x2d848367,0x2d94d002,0x8362f040,0x46594650,0xaba59a03,0xff6af7ff,
+0x28004604,0x8358f040,0xf8d79500,0x99a507e8,0x46434632,0xf9e8f7fa,
+0x9a02e34f,0xea4f8a93,0xf1a30289,0xb91c060a,0x0318f102,0xdb09429e,
+0xd0032da4,0xd0012d84,0xd1092d94,0x0310f102,0xda05429e,0x3404f8d7,
+0xf8c73301,0xe3333404,0x4b492206,0x014cf107,0x0004f10b,0x21064798,
+0x0401f1d0,0x2400bf38,0xf7ff9802,0x9802f8c1,0xf7ff4631,0xf1a6f8a3,
+0xf10b0018,0x900b0818,0x0f00f1b9,0xf10bd001,0x2d80081c,0x2dd0d02a,
+0x82d5f000,0xf0402d50,0x2c0082fd,0x830cf000,0x37f8f8d7,0xb123789b,
+0x000cf108,0x0124f1a6,0xf243e030,0x58fb13dc,0xf0402b0b,0xf50782ec,
+0xf10b51ba,0x311c0010,0x4b2b2206,0x46044798,0xf0402800,0xf01882e0,
+0xd0440f03,0xf6404825,0xe03e514f,0x0001f018,0xd0049004,0xf6404821,
+0xf7ee5166,0x990bf8c9,0xf340290b,0xf10882dd,0x3e24020c,0x37f8f8d7,
+0x96089207,0xb19b789b,0x46314610,0x4b192200,0x46014798,0x7843b118,
+0xbf882b20,0xf8d72100,0x220007f8,0x47984b14,0xf0402800,0xe2ae82b2,
+0x13dcf243,0x2b0b58fb,0xf507d120,0xf10b51ba,0x311c0010,0x4b0a2206,
+0x46044798,0xf897b9b0,0xb1233024,0xf6404805,0xf7ee517d,0x4650f891,
+0x22014641,0xf7ff4623,0xe292fad5,0x000221e0,0x1e00d671,0x1e003759,
+0x0001f781,0x3024f897,0xf897b303,0xb9ea2023,0x300af898,0x0f02f013,
+0x9807d018,0x4b8f9908,0xb1984798,0xf8977843,0x429a22fc,0xf507d10e,
+0x3002713e,0x4b8a3105,0xb9384798,0x99034638,0x4b889a06,0x28004798,
+0x8267f040,0x3024f897,0xf0002b00,0xf10b8260,0x46480910,0x713df507,
+0x4b7f2206,0x90054798,0xf0402800,0x98048254,0x5000f8da,0x487cb120,
+0x218df640,0xf844f7ee,0x98079903,0x7cca7c8b,0xea439908,0x22032602,
+0x47984b72,0xb1084604,0xb97b7843,0x0324f8b5,0x04c7f3c6,0x42a3b2c3,
+0x4b70d005,0x42a04798,0x9805d001,0x2001e000,0xe008b2c0,0xf8b54b6b,
+0x47980324,0x428378a3,0x2000bf14,0xb1402001,0xf5054648,0x2206713d,
+0x47984b61,0x2301b908,0x2300e000,0x930ab2db,0xf5054648,0x2206713d,
+0x47984b5b,0x4640bb10,0xfea8f7fe,0xf1084606,0xf7fe0004,0xf243fea3,
+0x58ea13a0,0xb91a4604,0x58eb3304,0xe00cb913,0xd3064290,0xd1084294,
+0x13a4f243,0x429e58eb,0x4628d203,0xf7f34641,0xf243faed,0x50ee13a4,
+0x50ec3b04,0x3023f895,0xf0002b00,0x9a0a80ca,0xf0002a00,0xf89581e4,
+0x2b003d67,0x80c5f000,0x9300aba4,0xaba54628,0x9a0b4641,0x47a04c42,
+0x3848f8d5,0x7b1b9009,0xd03e2b00,0x100bf898,0xf3c14628,0xf7f30180,
+0xaea3fd87,0xf50d2300,0x93a27922,0x464093a3,0x4632990b,0x4c37464b,
+0xb92847a0,0x990b4640,0x464b4632,0x47a04c34,0xb3129aa3,0x2b009ba2,
+0xf642dd1f,0x56eb33dd,0x3ffff1b3,0x7813d105,0x32dcf642,0x0340f3c3,
+0x9ba354ab,0xf013781b,0xbf180204,0xf6422201,0x54ea33ca,0x33caf642,
+0x2b0156eb,0x2200d101,0x2201e000,0x33c6f642,0x462854ea,0x010af10b,
+0xfeb6f009,0xb9204604,0xf6404819,0xf7ed21f9,0xf895ff7f,0x2a002d60,
+0x9b09d13d,0xd0312b00,0x3d63f895,0xd1042b02,0x46114628,0xfbc6f7f5,
+0xb11ce031,0x3184f894,0xd0062b0f,0x3d5ef895,0x4628b34b,0xfb98f7f7,
+0xf895e025,0xb1fb3d5e,0xf5052306,0x93005158,0x31084628,0xf7f54613,
+0xe015f9ed,0x1e003759,0x1e00d671,0x0001e0f1,0x000221e0,0x0001e9bd,
+0x0001e00d,0x1e006a51,0x1e006a75,0x3d62f895,0x9809b12b,0x0d62f885,
+0xf7f34628,0xf895fd9f,0xb12b3d65,0xf8852300,0x46283d65,0xfd96f7f3,
+0x3d5cf895,0x9906b1eb,0x4b9f9803,0x99034798,0x790a4603,0x46287949,
+0x2201ea42,0x027ff022,0x9200b2d2,0x22004641,0xf9d2f7f3,0xf8852300,
+0x46283d5c,0xfd7af7f3,0x9a0ae003,0xf0002a00,0xf243811a,0x22001395,
+0x330254fa,0xb1535cfb,0x3d41f897,0xf887b13b,0x46502d41,0x46132103,
+0xf7fd9200,0xf8d7fda1,0x99033848,0x4620681c,0xfc9cf001,0x46204601,
+0xfc70f001,0x23d8f642,0x460150f8,0xf7f34638,0xf8dafe59,0x2b013218,
+0xf8dad106,0xf8933000,0x2b003d67,0x80baf000,0x3048f89a,0xf0002b00,
+0xf8da80a8,0x2b003050,0x80b2f000,0xf8da9b04,0xb1236054,0xf6404873,
+0xf7ed2105,0x9808fed1,0x90a22100,0x3802a80e,0x7210f44f,0xf7ee9c07,
+0xf44fff8d,0xe0147580,0x78229907,0x0304ebc1,0xb2992add,0xf5b5d109,
+0xd20a7f90,0x3b02ab0e,0x1015f823,0xb29d1c6b,0xab0ee003,0xf8233b02,
+0x46201012,0x4b60a9a2,0x46044798,0xd1e32800,0x468346b0,0xf896e053,
+0x78329001,0x0f00f1b9,0xab0ed051,0xf1a32add,0xd0130302,0x0012f833,
+0x4605b908,0x9b07e001,0xf8da181d,0xf8333060,0xb9080012,0xe0024604,
+0x3058f8da,0x360218c4,0xe01746b0,0x0402f108,0x22034621,0x7300f503,
+0xf7fe9807,0xf8daffb3,0x46213060,0x22034605,0x0058f8da,0x7300f503,
+0xffa8f7fe,0x0808f108,0x46464604,0x0f01f019,0xb17dd010,0x42a5b1dc,
+0x786bd008,0x429a7862,0x1ca8d106,0x4b3b1ca1,0xb9084798,0xe0002301,
+0xb1632300,0x0f02f019,0xb90dd003,0xe000b93c,0xf10bb12c,0xf8da0b01,
+0x459b3050,0x9907d3a7,0xf8da9a08,0xf8da0058,0xf7ee4050,0x9808ff2b,
+0xf8caa90e,0x3902005c,0x0060f8da,0x7210f44f,0xff20f7ee,0xd10d45a3,
+0xf8dae00e,0xb1591044,0x2138f8da,0xfbb23201,0xfb01f3f1,0xf8ca2313,
+0xb90b2138,0xe0002001,0xb2c42000,0xa99ce02e,0xf10b3106,0xf7ee000a,
+0x4650fe49,0x9a034659,0xf7ffaba5,0x4604fc3f,0x9a0bb9e8,0x2a0099a5,
+0xf8dadc07,0xf8d22000,0x33013410,0x3410f8c2,0xf898e014,0xf0033000,
+0x2b03037f,0x980bd10d,0x3000f8da,0xf8d39000,0x465a07e8,0xf7fa4643,
+0xe003f8c3,0x2400b90c,0x2401e000,0x21069802,0xfe86f7fe,0x46c0e009,
+0x0001edf9,0x000221e0,0x1e0036f9,0x1e00d671,0x7c3b2400,0xb144b903,
+0x46502300,0x9a039902,0x93019300,0xfc74f7fd,0xf8dae006,0x99023004,
+0x46226c98,0x47984b02,0x7d27f50d,0x8ff0e8bd,0x1e005c41,0x4604b530,
+0xb0856800,0x3024f890,0xd0332b00,0x3848f8d0,0x5134f894,0x3118f8d3,
+0x020af1a3,0xf642b9ad,0x584321d8,0xda254293,0xf8842301,0x56403134,
+0xfbf4f7fd,0xab042204,0x0d04f843,0x92002105,0x462a4620,0xfc48f7fd,
+0xf642e014,0x58c023d8,0xdd0f4290,0xf7fdb240,0xab04fbe1,0xf8432204,
+0x21050d04,0x46209200,0xf7fd2200,0x2300fc35,0x3134f884,0xbd30b005,
+0xb5102901,0xd1146804,0x7185f44f,0xf7f24620,0xf8d4fc05,0x46021844,
+0x0080f8d1,0xd01e4282,0xf5c0bf96,0xebc03380,0x18980002,0x2080f8c1,
+0xb9a1e016,0x7186f501,0xf7f24620,0xf8d4fbef,0x46021844,0x0084f8d1,
+0xd0084282,0xf5c0bf96,0xebc03380,0x18980002,0x2084f8c1,0x2000e000,
+0x46c0bd10,0x4ff0e92d,0x7d0bf5ad,0xf8dd2300,0xf8dd8258,0x4607925c,
+0x93879388,0x0301f002,0x683c6840,0x93004616,0x464b4642,0xa250f8dd,
+0xf7f89d95,0x9007fde1,0xf0402800,0x2d038777,0x2204d90c,0x4651a888,
+0xfe20f7ee,0xd9052d07,0xf10aa887,0x22040104,0xfe18f7ee,0x1e739d88,
+0xbf181e29,0x2b602101,0x8755f200,0xf013e8df,0x07530061,0x07530079,
+0x07530088,0x07530184,0x0753023d,0x0753024f,0x07530753,0x07530753,
+0x0753027e,0x075302b5,0x075302ca,0x07530304,0x07530357,0x0753035d,
+0x07530362,0x0753075e,0x0753036a,0x0753038c,0x07530753,0x075303b6,
+0x075303bb,0x075303cd,0x07530409,0x0753042d,0x07530441,0x0753044c,
+0x07530457,0x07530488,0x04a7049a,0x07530753,0x075304b8,0x0753075e,
+0x050604ba,0x07530753,0x0753051c,0x0753075e,0x07530527,0x075305ae,
+0x07530601,0x0753069c,0x075306b1,0x075306d1,0x075306d9,0x06e406c9,
+0x06ef06e1,0x06fb06e9,0x071d06f5,0x07460700,0x683c0739,0xf8842301,
+0x46203d13,0xfaa8f7f4,0xf8d49700,0x464107f8,0x4b88464a,0xfa64f009,
+0x90072300,0x3d13f884,0xf7f44620,0xf000fa99,0x683cbee5,0x07f8f8d4,
+0x2b007883,0x86def000,0xf0082104,0x4620ffef,0xfa8af7f4,0xbed6f000,
+0x0f4cf1b9,0xd004683e,0x0317f06f,0xf0009307,0xf10dbecd,0x46500acc,
+0x464a4641,0xfd76f7ee,0x37f8f8d6,0xb13d789d,0x46382100,0x2301460a,
+0xfed0f7fe,0xbebaf000,0x13dcf243,0xb18b58f3,0x46294630,0xf8acf7f3,
+0x4c69683b,0x073cf8d3,0x13d4f243,0x47a058f1,0xf8d7683b,0xf8d31130,
+0x47a0073c,0x3012f89a,0x32c6f642,0x0301f1d3,0x2300bf38,0xf89a54b3,
+0x2b0e3011,0xf44fbf94,0xf44f5200,0xf4435280,0x43136330,0x728cf241,
+0xf8da52b3,0x2a012000,0xf241d103,0x54f2738e,0xf241e006,0x54f5738e,
+0x2008f8ba,0x52f23b04,0x88a2ac33,0x7388f241,0x50baf506,0xf10d52f2,
+0x220601d6,0xf7ee301c,0xf506fd21,0xa93850ba,0x30257ce2,0xfd1af7ee,
+0xf2417ce2,0xad517364,0x210054f2,0x46282228,0xfcf0f7ee,0x1d286ba2,
+0x9251a942,0xfd0af7ee,0xe0072000,0x7913180a,0xea6f3001,0xea6f6343,
+0x71136353,0xa9519b51,0xd3f34298,0x50bcf506,0xf0063010,0x6b73f845,
+0xf897b153,0xb13b328c,0x50bcf506,0xf5073025,0x22107124,0xfceaf7ee,
+0xf893ab33,0x24003034,0x321cf887,0x421df887,0x3024f896,0xd0482b00,
+0x46214630,0xfcccf7f2,0x3023f896,0x4d41f886,0x4630b11b,0xf7f54621,
+0xf8b6f841,0xf4033324,0xf5b34370,0xd1065f80,0xf8d7683b,0xf8d31128,
+0x4b1b073c,0xf8b64798,0xb96b3df2,0x1844f8d6,0x2024f9b1,0x3026f9b1,
+0xf9b1189b,0x189b2028,0x202af9b1,0xd01c42d3,0x21016ab3,0x7300f443,
+0x683b62b3,0x32fff04f,0x073cf8d3,0xfbe4f7f1,0x21054630,0xffecf7f2,
+0xf640683b,0xf8d332b8,0xf243073c,0x58f113d4,0x4c064623,0xf00047a0,
+0x4638bde5,0xf90af7ff,0xbde0f000,0x00012091,0x1e006221,0x1e0061f9,
+0xf8d5683d,0x788307f8,0x2104b113,0xfee6f008,0x13dcf243,0xb18b58eb,
+0x4cb3683b,0x073cf8d3,0x13d4f243,0x47a058e9,0xf8d7683b,0xf8d31130,
+0x47a0073c,0x21004628,0xffb6f7f2,0x3024f895,0xd0692b00,0xb3236b6b,
+0x3023f895,0xf507b30b,0x21007022,0x3005221a,0xfc3cf7ee,0x7028f507,
+0x22162100,0xf7ee3007,0xf505fc35,0x46285158,0xf0093108,0x4604fa99,
+0xf8d5b158,0x462107e8,0xffa0f7f9,0x46282200,0x46134621,0xf7f49200,
+0x2100f9d9,0x46282600,0xfc2ef7f2,0x6d67f885,0x46314628,0xffa6f7f4,
+0x3324f8b5,0x4370f403,0x5f80f5b3,0x683bd106,0x1128f8d7,0x073cf8d3,
+0x47984b89,0x4023f895,0xf44fb96c,0x46283100,0xf7f2460a,0x2301fae5,
+0x3023f885,0x4d3df885,0xf7f24628,0x4628fb7f,0xfcbef7f4,0xf5054631,
+0x2290703d,0xfbeef7ee,0x187b4631,0xb10a689a,0x60932300,0x29183104,
+0x2300d1f7,0x321df887,0x3d41f885,0x3024f885,0xf8954628,0xf7f11024,
+0xf505ffdf,0x229050ba,0x2100301c,0xfbd2f7ee,0x738cf241,0x02fff04f,
+0x230052ea,0x3048f887,0xf887653b,0x742b328c,0x3024f895,0xf8d5b93b,
+0x789b37f8,0xf243b91b,0x58eb13dc,0x4863b123,0x718ef240,0xfaf0f7ed,
+0xf7f44628,0xf000f8d5,0x2301bd21,0xf8876838,0xf8903124,0xf8803d5e,
+0x428b1d63,0xf7f4d003,0xf000ff35,0xf7febd13,0xf000fc4d,0x683cbd0f,
+0x3023f894,0xf06fb923,0x93070301,0xbd06f000,0x21004620,0xfefcf7f2,
+0xf8872300,0x4641321d,0xa8812204,0xfbaaf7ee,0x2206f89d,0xf8844620,
+0x21122350,0xf81af7f2,0xf8842101,0xf8bd1d67,0xf2412204,0x462073f8,
+0xf7f252e2,0x4620fb89,0x1d5ef894,0xff02f7f4,0xbce0f000,0x22a8ac09,
+0x46414620,0xf7ee683d,0xf997fb89,0x6863213c,0xd1034293,0xf0436fa3,
+0x67a30302,0xf5056fa3,0x93005154,0x46286f63,0xab0c9301,0xab319302,
+0x23009303,0xab809304,0x31349305,0x686368a2,0xfe56f7fc,0x7823b928,
+0xeb079a80,0xf8c30383,0x78232140,0x93004928,0x48289b80,0x6f629301,
+0x4c2768a3,0xf00047a0,0xf898bca9,0x68383000,0x0483eb07,0x3140f8d4,
+0xf0002b00,0xf500849f,0x799a5154,0xf7fc3134,0x2300fd57,0x3140f8c4,
+0xbc94f000,0xa86d2220,0x683c4641,0xfb3ef7ee,0x2a039a6d,0x848af200,
+0x5c9d4b16,0x00aa9b6f,0x620b19d1,0x19129b71,0x3eb8f8c2,0x3024f894,
+0xf0002b00,0xf894847b,0x2b003023,0x8476f000,0x713df504,0xf0094620,
+0x4601faeb,0xf0002800,0x4638846d,0xf7fe462a,0xf000f8f7,0x46c0bc67,
+0x1e006221,0x000221e0,0x00022834,0x00022285,0x1e004461,0x000221db,
+0x4641683b,0x222ca846,0x6a58f503,0xfb02f7ee,0x0900f04f,0x0a18f10a,
+0x7b90f50d,0xad4646c8,0x0309eb05,0xea4f7c1b,0xf0031249,0xf002030f,
+0x431a0260,0x200af808,0x0000f8bb,0xf8b4f7fe,0xf83b4604,0xf7fe0c08,
+0xeb0af8af,0xea400608,0x70701004,0x300cf8bb,0x095b4445,0x0a1b70b3,
+0x69e870f3,0x0308eb07,0x78726318,0x300af818,0x78f19200,0x4ca978b2,
+0x2201ea42,0x90029201,0x48a7464a,0xf10949a7,0x47a00901,0x0f04f1b9,
+0x0804f108,0x0b02f10b,0x6838d1c1,0xf7f32101,0xf000fd45,0x683abc07,
+0x43e0f243,0xf00052d5,0x683abc01,0x43dcf243,0xe3fb50d5,0xf1b56838,
+0xbf180114,0xf7f22101,0xe3f3ff83,0xa8882204,0xf7ee4641,0x9d88fa9f,
+0xdd032d20,0x031cf06f,0xe3e79307,0xfb052306,0x1d13f203,0xda034599,
+0x020df06f,0xe3dd9207,0xf8c06878,0x2d005114,0x83d8f000,0xf1083052,
+0xf7ee0104,0xe3d1fa83,0x0000f898,0x2803683e,0xf06fd903,0x93070307,
+0xf887e3c8,0xb240013c,0x0380eb06,0x54e4f243,0x2d00591d,0x83bef000,
+0x53e0f243,0xf1b358f3,0xd0073fff,0x0383eb06,0xb11c591c,0xf0238963,
+0x81630302,0xf043896b,0x816b0302,0x53e0f243,0xe3a750f0,0xf642683a,
+0x52d523cc,0x683be3a2,0x32dcf642,0x68385499,0xb1235c83,0xf6422201,
+0x54c233dd,0xf04fe396,0xf64232ff,0x54c233dd,0x220ce390,0x4641a87b,
+0xf7ee683e,0x9b7bfa3b,0x2b059a7d,0xf06fd903,0x92070201,0xeb07e382,
+0x689c0383,0xf06fb91c,0x93070315,0xf102e37a,0xf5b5050c,0xd9047f90,
+0xf6404857,0xf7ed11ae,0x4620f93b,0x462a4641,0xfa1cf7ee,0x2b039b7b,
+0x2b00d002,0x8366f040,0x3024f896,0xf0002b00,0x46308361,0xfe7ef7f2,
+0x46214638,0xf7fe2200,0x4630faa7,0xf8eaf7f2,0x687ae354,0x0301f005,
+0x68387413,0xff00f7f3,0xf8d06838,0x7a1b3844,0xf0002b00,0xf7f28347,
+0x687bf94d,0x2b007c1b,0x8340f040,0xf0139b88,0xd0060f02,0xf5006838,
+0x31345154,0xf82af7f2,0x6838e334,0xf832f7f2,0x4641e330,0x2204a886,
+0xf9dcf7ee,0x65399986,0x6d78b131,0x0104f108,0xf7ee464a,0xe321f9d3,
+0x22406d78,0xf9aef7ee,0xa87ee31c,0x22084641,0xf9c8f7ee,0xf8879b7e,
+0x9b7f3048,0xe311647b,0xb915683a,0x5d11f882,0x2301e002,0x3d11f882,
+0xf7f36838,0xf898feb9,0x68393000,0x3068f887,0x3001f998,0xf8812200,
+0xf2432d6a,0x520b10ea,0xf883683b,0xf8972d6b,0xb9122068,0x2301683a,
+0x2a02e003,0x683ad104,0xf8825a13,0xe00f3d6a,0xd1032a01,0xf883683b,
+0xe0092d6b,0xd0032a03,0x0216f06f,0xe0039207,0x5a13683a,0x3d6bf882,
+0xf7f16838,0xe2d5fec7,0xf243683b,0x549d1297,0x5c8b6839,0x085b3a01,
+0xe2cb548b,0x1e004461,0x000222d3,0x000221c8,0x000221e0,0x0000f898,
+0xfec0f7fc,0xb240683b,0x3848f8d3,0x0124f8c3,0x0118f8c3,0x683ae2b6,
+0x23d8f642,0xf7fc56d0,0xf888febd,0x683b0000,0x3848f8d3,0xf0006818,
+0xf888fd6d,0xe2a50001,0xe2a366fd,0x0f23f1b9,0xf06fd803,0x93070317,
+0xf8d7e29c,0x2b0132c4,0xf06fd103,0x92070201,0xad5be294,0x46282224,
+0xf7ee4641,0xf89df93f,0x2b04318a,0x8287f200,0x222c2100,0xf1072401,
+0xf7ee0074,0xf887f913,0x9a5b4074,0x67ba1d29,0x007cf107,0xf92af7ee,
+0xf107220a,0xf105008d,0xf7ee0114,0x687af923,0x4070f887,0x3024f892,
+0xf0002b00,0xf892826b,0x2b003023,0x8266f000,0xf5006838,0x31085158,
+0xff5af008,0x28004601,0x8259f000,0xf0086838,0xe257ff5b,0x46382100,
+0xfa8ef7ff,0x90852101,0xf7ff4638,0xa985fa89,0x22049084,0xf7ee4640,
+0xf108f8f9,0xa9840004,0xf7ee2204,0xe241f8f3,0xf8c2683a,0x9b885eb8,
+0x3ebcf8c2,0x3ec0f8c2,0x3ec4f8c2,0xf1b9e236,0xd97f0f03,0x3000f898,
+0xd05b2b02,0xd02f2b03,0xd0032b01,0x0316f06f,0xe2279307,0x1002f898,
+0x1d13004a,0xd36d4599,0xd86b2910,0x3001f898,0x1234f8d7,0xf021b923,
+0xf8c70302,0xe0073234,0x0302f041,0x3234f8c7,0x3001f898,0x3268f8c7,
+0x3002f898,0x3264f8c7,0x3002f898,0xf0002b00,0xf5078205,0xf108701b,
+0xf7ee0104,0xe1fdf8af,0x1002f898,0x1d13004a,0xd3434599,0xd8412910,
+0x3001f898,0x1234f8d7,0xf021b923,0xf8c70304,0xe0073234,0x0304f041,
+0x3234f8c7,0x3001f898,0x3240f8c7,0x3002f898,0x323cf8c7,0x3002f898,
+0xf0002b00,0xf50781db,0xf1087011,0xf7ee0104,0xe1d3f885,0x0f07f1b9,
+0xf898d91c,0x2b013002,0xf898d818,0xf8d73001,0xb9131234,0x0301f021,
+0xf041e001,0xf8c70301,0xf8983234,0x2b003002,0x81bcf000,0x700ef507,
+0x0104f108,0xf7ee2204,0xe1b3f865,0x0201f06f,0xe1af9207,0x32c4f8d7,
+0xf0402b02,0xf1b981a0,0xd8030f21,0x0317f06f,0xe1a39307,0x70c9f50d,
+0x22224641,0xf84ef7ee,0x6b5b683b,0xf89db933,0xb11b3192,0x0201f06f,
+0xe1939207,0x1192f89d,0xf8876838,0x6b43128c,0xf0002b00,0x687b818b,
+0x4023f893,0xf507b16c,0x30057022,0xf50db129,0x221a71cd,0xf82ef7ee,
+0x221ae17c,0xf80af7ee,0xf50de178,0x1ca975c9,0xffeef008,0xb9184601,
+0x0315f06f,0xe16d9307,0x228cf897,0x9400b13a,0xf1056838,0x46230208,
+0xfdacf7f3,0x9200e162,0x46136838,0xfda6f7f3,0xf8d7e15c,0x2b0232c4,
+0x814df040,0x0f15f1b9,0xd803683c,0x0217f06f,0xe14f9207,0x328cf897,
+0xf0002b00,0xf50d814b,0x462875eb,0x22164641,0xfff4f7ed,0x3024f894,
+0xf8b4b11b,0xf88d3324,0xf50731d6,0x30077028,0x22164629,0xffe6f7ed,
+0x3023f894,0xd0392b00,0x33e2f642,0xf1b356e3,0xd12b3fff,0x46283502,
+0xfd8ef7fd,0x33e1f642,0xf00056e3,0x42930203,0x4620d003,0xf7f2210b,
+0x4628fa9f,0xfd80f7fd,0x33e3f642,0xf3c05ce3,0x42930280,0x4620d003,
+0xf7f2210d,0x4628fa91,0xfd72f7fd,0x33e5f642,0xf3c05ce3,0x42931200,
+0x4620d017,0xf7f2210f,0xe012fa83,0xbf0c2b01,0x22002203,0x33e1f642,
+0xe00a54e2,0xf7fd1ca8,0xf000fd5b,0x28030003,0x2204d103,0x4304f642,
+0xf89450e2,0x2b003024,0x80e8f000,0x3023f894,0xf0002b00,0xf50480e3,
+0x46205158,0xf0083108,0x4605fdd7,0x4870b940,0x7178f640,0xfea0f7ec,
+0x0301f06f,0xe0d19307,0xf5072300,0x93007222,0x46294620,0xf50d3205,
+0xf7f373eb,0x4620fd0f,0xf0084629,0xe0c1fdc5,0x32c4f8d7,0xf0402b02,
+0x220480b2,0xa988a883,0xff68f7ed,0x320cf89d,0xf2402b02,0x485c80b3,
+0x412df240,0xfe78f7ec,0x683be0ac,0x2b006b5b,0x809df000,0x32c4f8d7,
+0xf0402b02,0xa9888098,0xa8822204,0xff4ef7ed,0xf89d4638,0xf89d1208,
+0xf7fe2209,0x9007f899,0x4620e094,0x1848f8d4,0xf7f1462a,0x9007fa73,
+0x4620e08c,0x462a2102,0x4c482300,0x900747a0,0x4620e084,0x462a2101,
+0x4c442300,0x900747a0,0xf8a4e07c,0xe07956fc,0x36fcf8b4,0x3000f8c8,
+0x4620e074,0xf7f24629,0x9007ffb5,0x4620e06e,0xfaa8f7f1,0x0000f8c8,
+0x4620e068,0xf7f14629,0x9007ff3b,0xf8d4e062,0xf8c83814,0xe05d3000,
+0x2300aa88,0x0220f89d,0x3206a985,0x3214f88d,0x3226f8ad,0xfac0f7f1,
+0xd0482800,0xf8bd2302,0x93002226,0xf89d9b87,0x46201214,0xbf142b00,
+0x23004613,0xfe76f7f1,0xaa88e040,0xf89d2300,0xa9850220,0xf88d3206,
+0xf8ad3214,0xf7f13226,0xb360faa3,0x3214f89d,0x0343eb04,0x2af4f8b3,
+0x3226f8bd,0xbf0c421a,0x23012300,0x3000f8c8,0x4620e024,0xf7f1a988,
+0xb1c0fc85,0xf8bd4620,0xf8bd1220,0xf7f1221c,0xe017fb41,0xa9884620,
+0xfc78f7f1,0x4620b158,0x1220f8bd,0xfc56f7f1,0x0000f8c8,0xf06fe00a,
+0x92070216,0xf06fe006,0x93070301,0xf04fe002,0x920732ff,0xf50d9807,
+0xe8bd7d0b,0x46c08ff0,0x000221e0,0x0001dc01,0x7943b510,0xb10b460c,
+0xe01eb2d8,0xb9097901,0xe01a2001,0xf8931903,0xf04fc01f,0xb9140e01,
+0x3024f890,0xf890e001,0x44633049,0xb25bb24a,0x0f43ebb2,0xfa5fdd02,
+0xe006f08e,0x0e01f10e,0xf1be3009,0xd1ea0f05,0xbd102004,0x468cb530,
+0x461d4614,0x0209f1a2,0xfb0c2309,0xf89d2303,0xb2db100c,0xb911181b,
+0x2024f893,0xf893e001,0x18432048,0xe01ff893,0x0f01f1bc,0x0302eb0e,
+0xd102b2da,0xfe82fa5f,0x1903e009,0xf893b911,0xe0013024,0x3048f893,
+0xfa5f4473,0xb939fe83,0xb9141940,0x006cf890,0xf890e005,0xe002007b,
+0xf8931943,0xf1bc008a,0xd0040f01,0x2b00b243,0x4610dc01,0x1813e008,
+0xb242b2d8,0xf38efa4f,0xbfc8429a,0xf08efa5f,0x46c0bd30,0x41f3e92d,
+0xf881fa5f,0x4170f401,0x5f00f5b1,0x2602bf14,0x79412600,0x46144607,
+0xb2cdb109,0x4631e003,0xff7ef7ff,0x46294605,0x46432200,0x46389600,
+0xff9cf7ff,0xf0000040,0x702000fe,0x70a07060,0x462970e0,0x46432201,
+0x46389600,0xff8ef7ff,0xf0000040,0x712000fe,0x46297160,0x46432202,
+0x46389600,0xff82f7ff,0xf0000040,0x71a000fe,0x462971e0,0x46432203,
+0x46389600,0xff76f7ff,0xf0000040,0x722000fe,0x46297260,0x46432204,
+0x46389600,0xff6af7ff,0xf0000040,0x72a000fe,0x462972e0,0x46432205,
+0x46389600,0xff5ef7ff,0x0040b240,0x46297520,0x46432206,0x46389600,
+0xff54f7ff,0xf0000040,0x756000fe,0x462975a0,0x46432207,0x46389600,
+0xff48f7ff,0xf0000040,0x75e000fe,0x96007620,0x46294638,0x46432208,
+0xff3cf7ff,0xf0000040,0x766000fe,0x76e076a0,0x81fce8bd,0x6805b570,
+0xf8d57101,0xb0923848,0xf0006818,0xf10df979,0x46010603,0x46284632,
+0x47984b0b,0x3848f8d5,0x4620681c,0xf96cf000,0x46024631,0xf0004620,
+0xf8d5f977,0xf04f3848,0x681831ff,0xf0012200,0xb012fb87,0x46c0bd70,
+0x0001e2f1,0x460eb573,0x24004615,0x2200e00c,0xa9014b07,0x55a04798,
+0x1c629801,0xb90b7803,0xe0044610,0x46143001,0xd1f042ac,0xbd7c4628,
+0x1e0037cd,0xf8a36c83,0xf8b313f6,0xb28003fa,0x46c04770,0xf8a36c83,
+0xf8a313f6,0x477023fa,0xf7ffb510,0xbd10fff7,0xf8a36c83,0xf8b313fc,
+0xb28003fe,0x46c04770,0xf8a36c83,0xf8a313fc,0x477023fe,0xf8a36c83,
+0xf8b313fc,0x400a13fe,0x23fef8a3,0x46c04770,0xf8a06c80,0xf8b013fc,
+0xb29b33fe,0xf8a0431a,0x477023fe,0x40136c80,0x13fcf8a0,0x13fef8b0,
+0xea21b289,0x430b0102,0x33fef8a0,0x46c04770,0x0032f990,0x46c04770,
+0x1032f880,0x46c04770,0xf240b510,0xf7ff41fb,0xf3c0ffc3,0xbd102006,
+0xf240b510,0xf64f414c,0xf7ff72fc,0xbd10ffc7,0x460cb570,0x22074605,
+0xf2404623,0xf7ff41ea,0x4628ffd1,0x41ebf240,0x46232207,0xffcaf7ff,
+0x46c0bd70,0xb5702280,0x46044613,0xf240460e,0xf24061d1,0xf7ff65d7,
+0x4620ffbd,0xf44f2207,0xf7ff61da,0x4620ff9d,0x22014629,0xf7ff2300,
+0x2202ffb1,0x46294620,0xf7ff4613,0x2204ffab,0x46294620,0xf7ff4613,
+0x4620ffa5,0x22084629,0xf7ff2300,0x4620ff9f,0x22104629,0xf7ff2300,
+0x4620ff99,0x22204629,0xf7ff2300,0x4620ff93,0x22404629,0xf7ff2300,
+0x4620ff8d,0x22804629,0x23003506,0xff86f7ff,0x46294620,0x46332201,
+0xff80f7ff,0x46200073,0x22024629,0xf7ff3d01,0x2201ff79,0x46294620,
+0xf7ff2300,0x2202ff73,0x46294620,0xf7ff4613,0x2204ff6d,0x46294620,
+0xf5a54613,0xf7ff75ec,0x3d01ff65,0x7200f44f,0x46294620,0xf7ff4613,
+0x4620ff5d,0x46292300,0x7200f44f,0xff56f7ff,0x4b014620,0xbd704798,
+0x1e007459,0x47702000,0xb5106c83,0x3120f8d3,0x46046c43,0x3710f8d3,
+0x0f01f013,0xb1a1d115,0x414cf240,0x02fff24e,0xff28f7ff,0xf44f4620,
+0xf24f6196,0xf7ff72f7,0x4620ff21,0x41f9f240,0x72f7f64f,0xff1af7ff,
+0x4620e02f,0x414df240,0x32fff248,0xff12f7ff,0xf2404620,0xf44f414c,
+0xf7ff52f8,0x4620ff15,0x41b7f240,0x02fff248,0xff04f7ff,0xf2404620,
+0xf64d41b1,0xf7ff72ff,0x4620fefd,0x6196f44f,0x0208f640,0xff00f7ff,
+0xf2404620,0xf64f41fa,0xf7ff72f7,0x4620feef,0x41f9f240,0xf7ff2208,
+0xbd10fef3,0x0030f990,0x46c04770,0x1030f880,0x46c04770,0x47708581,
+0x47708d80,0x46c04770,0x5c5b4b02,0xf99018c0,0x4770016d,0x00023ac4,
+0xf9911841,0x47700175,0xf04fb500,0xeb000e00,0xf81e020e,0xf10e3001,
+0xf1be0e01,0xf8820f04,0xd1f431c9,0x0e00f04f,0x020eeb01,0x030eeb00,
+0xf10e7912,0xf1be0e01,0xf8830f08,0xd1f321cd,0x0e00f04f,0x020eeb01,
+0xb9037d13,0xf10e7913,0xf8800e01,0x300131d5,0x0f08f1be,0xbd00d1f2,
+0x2300b122,0x3d7cf8c0,0x3d80f8a0,0x1d24f8c0,0x47702001,0x69412200,
+0x180b4610,0x3015f993,0x18d23001,0xd1f82808,0xf0f0fb92,0x4770b240,
+0x3258f890,0x4696b510,0x2b006bc4,0xf013d037,0xd0160f01,0x3260f8d0,
+0xd10c428b,0x6a1a6943,0xf883189b,0x6942e015,0x2b076a13,0x2300d101,
+0x3301e000,0xf8906213,0xf0233258,0xf8800301,0xf8903258,0xf0133258,
+0xd00f0f02,0x3264f8d0,0xd105428b,0xf503191b,0x3358532a,0xe004f883,
+0x3258f890,0x0302f023,0x3258f880,0x3258f890,0x0f04f013,0xf023bf1c,
+0xf8800304,0xbd103258,0xb5102100,0x025bf06f,0xf7ff460b,0xbd10ffb9,
+0x69432100,0x310118cb,0x755a2908,0x6943d1f9,0x621a2200,0x2b03691b,
+0xf8d0d10a,0xf0133d8c,0xd0050f02,0xf8d36c43,0x3308370c,0x3d84f8c0,
+0x46c04770,0xf8c02300,0xf8a03d90,0x461a3d94,0x32041883,0x2a202100,
+0x1d98f8c3,0xf8c0d1f8,0x47701db8,0x4604b530,0xb1d9460d,0x1db8f8d0,
+0x3d90f8d0,0x0081eb00,0x2d98f8d0,0x1a9b3101,0x2d96f8b4,0xf8c4195b,
+0x1e533d90,0xf8c4400b,0xf8b43db8,0xf8c03d94,0x429a5d98,0x3301d902,
+0x3d94f8a4,0x0d94f8b4,0xf8d4b118,0xfb933d90,0xbd30f0f0,0x798a7a4b,
+0x4b090899,0x565b2a7f,0xf5a2bfc8,0x18d37280,0x0f2ef113,0x2912dd02,
+0x3307bf88,0x0f9ff990,0x18c03002,0x46c04770,0x000238ee,0x46c04770,
+0x71e0ea80,0x71e0eba1,0xb2d02200,0xf300fa51,0x2b003201,0x4770dcf9,
+0x46c04770,0x2902b570,0x6be34604,0xf8944610,0xd0085258,0xd0162903,
+0xd1192901,0x0301f045,0x2260f8c4,0x18d3e00c,0x532af503,0xf06f3358,
+0x711a025b,0x3258f894,0x0264f8c4,0x0302f043,0x3258f884,0xf045e009,
+0xf8c40304,0xe7f72268,0xf6494805,0xf7ec51dd,0xb925fa0b,0xf8d36c63,
+0xf8c4370c,0xbd70325c,0x0002299e,0x41f0e92d,0x2320461e,0x9c06290e,
+0x70134607,0x2c00d80e,0x2400da01,0x2c13e006,0x4822dd04,0x311ff248,
+0xf9eef7ec,0xf893193b,0xe0373088,0x2500237f,0xea347033,0xbf280424,
+0x462a2404,0x58d34b1a,0xd0084299,0x32143501,0xd1f72d0e,0xf2484815,
+0xf7ec3131,0x2c13f9d5,0x4812dd04,0x3139f248,0xf9cef7ec,0x3d1cf8d7,
+0x5d5bb10b,0xf1a5e016,0x2b15030e,0x193bd803,0x30e2f893,0xf1a57033,
+0x2b050324,0x193bd803,0x310ff893,0xf1a57033,0x2b08032a,0x193bd803,
+0x30b5f893,0xe8bd7033,0x46c081f0,0x0002299e,0x1e00cc2c,0x47ffe92d,
+0x46822500,0x4690460f,0x26ff4699,0xf10d462c,0x4650030f,0xf10d4639,
+0x9400020e,0xff96f7ff,0x300ff89d,0x2b06b123,0x3b06d902,0xe000b2db,
+0x34012300,0xbf2842ab,0x42b3461d,0x461ebf38,0xf88d2c0c,0xd1e2300f,
+0x5000f888,0x6000f889,0x87ffe8bd,0x2b011e4b,0x4605b570,0xd904460c,
+0xf2484816,0xf7ec21d7,0xf895f973,0x25006cdd,0x58e94b13,0xbf8c290e,
+0x5380f44f,0x5300f44f,0x6230f441,0xb2984313,0x2994b11e,0x29a5d901,
+0x2c02d908,0x290ed102,0xe003d90e,0xd1012c01,0xd809290e,0xf5b53514,
+0xd1e17f8c,0xf2484803,0xf7ec21fd,0x20fff94d,0x46c0bd70,0x0002299e,
+0x1e00cc2c,0x4605b570,0x460c4616,0x4807b921,0x71fef646,0xf93cf7ec,
+0x313cf895,0xb1166023,0x324cf895,0x20007033,0x46c0bd70,0x0002299e,
+0xb5106bc3,0x3830f8d3,0xf0134604,0xd0135f00,0xf8d36c83,0xf0133120,
+0xd0040f01,0xf6444807,0xf7ec41ec,0x6ca3f91d,0x0203f04f,0x26b4f8a3,
+0x02fff04f,0x26b8f8a3,0x46c0bd10,0x0002299e,0x47f0e92d,0x41dff240,
+0x4604b08a,0xfc8cf7ff,0x2b7fb2c3,0x3f8cf8a4,0x2007f3c0,0xf5a3bfc4,
+0xf8a47380,0x287f3f8c,0xf5a0bfc8,0xf8a47380,0xbfc80f8e,0x3f8ef8a4,
+0x93052311,0x090cf10d,0x9306332f,0xf2402720,0xf10d4357,0xf04f0a20,
+0xf2400802,0x46204656,0xf2404649,0x4d2b4255,0xa00cf8cd,0x8010f8cd,
+0x96009707,0x9b0847a8,0xd9012b3f,0x93083b80,0xf8c49b08,0x9b093f90,
+0xd9012b3f,0x93093b80,0xf2409b09,0xf8c44134,0x46203f94,0xfc48f7ff,
+0x287fb2c0,0xf5a0bfc4,0xb2987380,0x0f98f884,0x4124f240,0xf7ff4620,
+0xf3c0fc3b,0xf8a42007,0xf2400f9a,0x46204125,0xfc32f7ff,0xb2c0230d,
+0x330f9305,0x0f9cf8a4,0x46209306,0x4357f240,0xf2404649,0xf8cd4255,
+0xf8cda00c,0x97078010,0x47a89600,0xf8c49b08,0x9b093f7c,0x3f80f8c4,
+0xf8c44b05,0x4b053f84,0x3f88f8c4,0xe8bdb00a,0x46c087f0,0x1e00705d,
+0xf1e64d96,0xf1e60018,0x4b61b570,0x4605b08a,0x2600aa08,0x0003e893,
+0x0003e882,0xf240e00d,0x495c4356,0x23149300,0x1103fb02,0xf2404628,
+0xf2404255,0x4c584357,0x4b5847a0,0x681bb2b2,0x429a3601,0x22ffd3eb,
+0x462823a2,0x4116f240,0xfc04f7ff,0x231422ff,0xf44f4628,0xf7ff6184,
+0x4628fbfd,0x41fff240,0x427cf44f,0x53c0f44f,0xfbf4f7ff,0x230b220f,
+0xf44f4628,0xf7ff6185,0x2207fbed,0x46132130,0xf7ff4628,0x2207fbe7,
+0x46282303,0x412ff240,0xfbe0f7ff,0x22382320,0xf2404628,0xf7ff412f,
+0x6c6bfbd9,0x6a5b689b,0x639ef5a3,0x2b013b0d,0x2400d85b,0xf240e00c,
+0x49374356,0x23149300,0x1103fb02,0xf2404628,0xf2404255,0x47b04357,
+0xb2a24b32,0x3401681b,0x4e2d429a,0x2208d3eb,0x46284613,0x41def240,
+0xfbb4f7ff,0xf2404628,0x227f41e1,0x3020f8bd,0xfbacf7ff,0x46289b09,
+0xf240021b,0xf44f41e1,0xf40342fe,0xf7ff437f,0xab08fba1,0x23029303,
+0x330f9304,0x33319305,0x23209306,0xf2409307,0x93004356,0xa9034628,
+0x4255f240,0x47b03301,0xf44f4628,0xf44f6184,0xf44f427f,0xf7ff5390,
+0x4628fb85,0x4124f240,0x427ff44f,0x5300f44f,0xfb7cf7ff,0xf2404628,
+0xf246514b,0xf7ff3233,0x4628fb5b,0xf2402244,0xf7ff414a,0x4628fb65,
+0x414af240,0xf7ff2280,0xb00afb4f,0x46c0bd70,0x000228f8,0x0002311c,
+0x1e006fcd,0x0002381c,0x0002341c,0x00023818,0xb5106982,0x460c2a06,
+0x2301d80c,0xf0134093,0xd1140f35,0x0f40f013,0x2901d004,0xf441d00f,
+0xe00c7400,0xd90a2a02,0xd0082a04,0xd0062a05,0xd0042a06,0xf6414803,
+0xf7eb6103,0x4620ff95,0x46c0bd10,0x0002299e,0x41f0e92d,0x46064615,
+0x461c4688,0xffd4f7ff,0x46304601,0xfaf6f7ff,0xea20402c,0x43220205,
+0x46414630,0xf7ffb292,0xe8bdfaf5,0x46c081f0,0x4604b570,0x4615460e,
+0xffbef7ff,0x46204601,0xfae0f7ff,0x0205ea40,0x46204631,0xf7ffb292,
+0xbd70fae1,0x4604b570,0x4615460e,0xffacf7ff,0x46204601,0xfacef7ff,
+0xea004631,0x46200205,0xfad0f7ff,0x46c0bd70,0x4604b510,0xff9cf7ff,
+0x46204601,0xfabef7ff,0x46c0bd10,0x6bc0b510,0xf7f12102,0xbd10fc73,
+0x4ff0e92d,0xb0854b4f,0xac014680,0xe893460d,0xe8840007,0xf2400007,
+0x46406145,0xfab8f7ff,0x6146f240,0x46400587,0xfab2f7ff,0x61d1f240,
+0x22040586,0x23004640,0xfaccf7ff,0x46132240,0xf2404640,0xf7ff614b,
+0x4640fac5,0x6145f240,0x32fff240,0xf7ff2300,0x4640fabd,0x6146f240,
+0x32fff240,0xf7ff2300,0x4623fab5,0x46294640,0x4c352220,0x0dbf47a0,
+0x46830db6,0xd04a2800,0xf8dd9d02,0xf8dda00c,0xeb0a9004,0x2b010305,
+0xf04fd802,0xe03e0b00,0xf7ff4648,0x4604fcb1,0xf7ff4650,0xf1a4fcad,
+0xb21a0314,0xdb062a00,0xf102fa35,0x3201d041,0xf202fa35,0x4253e006,
+0xf103fa15,0x43d2d039,0xf202fa15,0xf1c3b223,0xfa09031e,0xebc3f303,
+0xf1a00402,0xb21b030b,0x460a2b00,0xfa35db02,0xe002f103,0xfa15425b,
+0xd022f103,0xf1c3b203,0xfa0a031f,0xfb94f303,0xfb93f4f2,0xfb04f0f1,
+0x4b100014,0x05a74798,0x0dbf0586,0x46400db6,0x6145f240,0x32fff240,
+0xf7ff463b,0x4640fa57,0x6146f240,0x32fff240,0xf7ff4633,0x4658fa4f,
+0x2000e000,0xe8bdb005,0x46c08ff0,0x00022af8,0x1e007879,0x0001ebd1,
+0x460db570,0xb1884606,0x3030f890,0xd0042b14,0xd0042b28,0xd0092b0a,
+0x2240e003,0x2280e007,0x4811e005,0x11faf242,0xfe86f7eb,0x21cc2200,
+0x020cf042,0xf7ec4628,0x4c0cfac1,0x47a02002,0x2202210a,0xf7ec4628,
+0x2001fab9,0x462847a0,0x22002102,0xfab2f7ec,0x47a02001,0x4630b11e,
+0x4b032101,0xbd704798,0x0002299e,0x1e005d75,0x0001ea19,0x2b011e4b,
+0x4606b570,0x4614460d,0x4815d904,0x21bcf248,0xfe56f7eb,0x21004620,
+0xf7ec221c,0x2000ff17,0x58c24b10,0x3cddf896,0x2a94b11b,0x2aa5d901,
+0x2d02d910,0x2a0ed102,0xe00bd904,0xd1092d01,0xd9072a0e,0xf00208d1,
+0x22010307,0x5c63409a,0x54634313,0xf5b03014,0xd1e17f8c,0x46c0bd70,
+0x0002299e,0x1e00cc2c,0x2380b530,0x7d09f5ad,0x9384ac03,0x93852318,
+0x33082100,0x7200f44f,0x46204605,0x93879483,0xf7ec9186,0x4622fedf,
+0x2300f44f,0x32086053,0x7300f504,0xd1f7429a,0x4356f240,0x46289300,
+0xf240a983,0x33014255,0x47a04c02,0x7d09f50d,0x46c0bd30,0x1e006fcd,
+0x4ff0e92d,0x7d0bf5ad,0xf8bd461f,0x46893258,0xf89d9303,0xf240325c,
+0x005b61a3,0x46052202,0x4250f89d,0xb254f8bd,0x8260f8bd,0xa264f8bd,
+0xf98cf7ff,0x93862380,0xae052318,0x21009387,0x96853308,0x91889389,
+0xf44fb1bc,0x46307200,0xfe9cf7ec,0xf44f4632,0x60532300,0xf5063208,
+0x429a7300,0xf240d1f7,0x93004356,0xa9854628,0x4255f240,0x4c283301,
+0xf1b947a0,0xd12f0f00,0xf2404628,0x464261a1,0xf946f7ff,0xf2404628,
+0x465261a2,0xf940f7ff,0xf2404628,0x463a617e,0xf93af7ff,0x1c7a2314,
+0xf203fb02,0x46283a01,0x61c8f44f,0xf7ffb292,0x4628f92f,0x617bf240,
+0xf7ff465a,0x4628f929,0x617cf240,0xf7ff9a03,0x4628f923,0x6176f240,
+0x02a1f24b,0xf91cf7ff,0xe0034c0e,0x4b0e200a,0x3c0a4798,0xf2404628,
+0xf7ff6176,0xf010f909,0xd0010f01,0xd1f12c09,0x46282280,0x6176f240,
+0xf7ff4613,0xf50df91f,0xe8bd7d0b,0x46c08ff0,0x1e006fcd,0x000f4249,
+0x1e005d75,0xf241b510,0x5cc30311,0xb92b4604,0xf7f06bc0,0xf04ffa1b,
+0xe0060320,0xf7f06bc0,0x2801fa15,0x2340bf0c,0xf8a42346,0xf04f3f6a,
+0xf8a40300,0xbd103f6c,0x6c00b510,0xf7f02102,0xbd10fcc1,0x4604b510,
+0xfe00f7ff,0xf7ff4620,0x2000fff3,0x46c0bd10,0x29016943,0x7519b507,
+0x2303d906,0x22019300,0x21006bc0,0xe0054613,0x93002303,0x6bc02100,
+0x460b2201,0xfd9af7f0,0x46c0bd0e,0x4b5ab570,0x4605b0a0,0x002cf890,
+0x23074798,0x3319931c,0x2100931e,0xf992186a,0xa8023169,0xf840425b,
+0x31013021,0xf8822904,0xd1f33fe4,0x316df995,0x425ba91a,0xf8859306,
+0x93073fe8,0x3fe9f885,0x316ef995,0x4255f240,0x9308425b,0x3feaf885,
+0xf8859309,0xf9953feb,0x4c44316f,0x930a425b,0x3fecf885,0xf885930b,
+0xf9953fed,0x425b3170,0xf885930c,0x930d3fee,0x3feff885,0x3171f995,
+0x930e425b,0x3ff0f885,0xf885930f,0xf9953ff1,0x425b3172,0xf8859310,
+0x93113ff2,0x3ff3f885,0x3173f995,0x9312425b,0x3ff4f885,0xf8859313,
+0xf9953ff5,0x901a3174,0x9314425b,0x3ff6f885,0x317cf995,0x425b4628,
+0xf8859315,0x23183ff7,0x3328931b,0xf240931d,0x93004356,0x47a03301,
+0x037ff10d,0x2301931a,0x3307931b,0x3378931e,0x2300931d,0x307ff88d,
+0xf240461e,0x93004356,0x33014628,0xf240a91a,0x4c184255,0x9b1d47a0,
+0x931d3301,0x307ff89d,0xb2db3301,0xf88d2b20,0xbf04307f,0x031ff06f,
+0x307ff88d,0x2e403601,0x4628d1e3,0x41a7f240,0xf812f7ff,0x31c8f895,
+0x4298b2c0,0x4628d006,0x41a7f240,0xf7ff22ff,0xe003f829,0x0311f241,
+0xb1135ceb,0xf7ff4628,0xb020ff0d,0x46c0bd70,0x1e00679d,0x1e006fcd,
+0x43f0e92d,0xab08b08b,0x23029303,0x330b9304,0x33139305,0xf9909307,
+0x46079f9e,0x0f0ff119,0x33feda2c,0xf303fb09,0x53a0f503,0x131b331c,
+0xf8803b02,0xae033f9f,0x4556f240,0x9306231a,0xf2404631,0xf2404255,
+0xf8df4357,0x950082a4,0x231c47c0,0x46389306,0xf2404631,0xf2404255,
+0x4ca24357,0x47a09500,0x46389500,0xf2404631,0xf2404255,0x47c04357,
+0xe0942406,0x0f12f1b9,0xf44fdc44,0xfb09738f,0xf5a3f303,0x3b0a6344,
+0xf240131b,0xf8804456,0xad033f9f,0x4e94231a,0x94009306,0xf2404629,
+0xf2404255,0x47b04357,0x9306231c,0x46389400,0xf2404629,0xf2404255,
+0xf8df4357,0x47c08228,0x46389400,0xf2404629,0xf2404255,0x47b04357,
+0x93062336,0x3f84f8d7,0x93084638,0x3f88f8d7,0x93094629,0xf2409400,
+0xf2404255,0x47c04357,0x46389400,0xf2404629,0xf2404255,0x47b04357,
+0xe04c2403,0x0f45f1b9,0xf8dfad03,0x4e7581dc,0x2f7cf8d0,0x1f80f8d0,
+0xf44fdc20,0xfb09738f,0xf5a3f303,0x3b1a531c,0xf880131b,0xf2403f9f,
+0x231c4456,0x92089306,0x94009109,0xf2404629,0xf2404255,0x47b04357,
+0x46389400,0xf2404629,0xf2404255,0x47c04357,0xe0202400,0x738ff44f,
+0xf303fb09,0x438cf5a3,0x131b3b62,0x3f9ff880,0x4456f240,0x9306231c,
+0x91099208,0x46299400,0x4255f240,0x4357f240,0x940047b0,0x46294638,
+0x4255f240,0x4357f240,0xf06f47c0,0xf8b70402,0xb2a53f8c,0x22ff18eb,
+0xf2404638,0xb29b41df,0xff3cf7fe,0x3f8ef8b7,0x427ff44f,0x021b18eb,
+0x46384013,0x41dff240,0xff30f7fe,0x9303ab08,0x3f90f8d7,0x18e34638,
+0xf8d79308,0xa9033f94,0x930918e3,0x93042302,0x9305330f,0x9306332f,
+0x93072320,0x4356f240,0xf2409300,0x33014255,0x47a04c38,0x3f98f997,
+0x18eb22ff,0x4638b29b,0x4134f240,0xff0af7fe,0x030ff109,0xd8082b21,
+0xf8974b32,0x4798002c,0x137bf640,0xd8304298,0xf1a9e00b,0x2b130332,
+0x4b2cd813,0x002cf897,0xf6404798,0x4298137b,0x22ffd805,0xf2404638,
+0x46134134,0x4638e01b,0x4134f240,0x230022ff,0xf1b9e015,0xdd140f45,
+0xf8974b20,0x4798002c,0x137bf640,0xd8054298,0xf2404638,0x22ff4134,
+0xe00423fd,0xf2404638,0x22ff4134,0xf7fe23fe,0xf8b7fecd,0xf44f3f9a,
+0x18eb427f,0x4013021b,0xf2404638,0xf7fe4124,0xf8b7fec1,0x46383f9c,
+0xb29b18eb,0xf24022ff,0xf7fe4125,0x4638feb7,0xf2402244,0xf7fe414a,
+0x4638fea7,0x414af240,0xf7fe2280,0x4638fe91,0xfdd4f7ff,0xe8bdb00b,
+0x46c083f0,0x1e006fcd,0x1e00705d,0x1e00679d,0x41f0e92d,0x460521e0,
+0xf7f06bc0,0xf8b5f96f,0x46074f68,0x0400ebc4,0x41a5f240,0xf7fe4628,
+0x2301fe6b,0x2602f3c0,0xb2a440b3,0xdd0c429c,0x7f68f8a5,0xf2404628,
+0xf7fe41ab,0xf3c0fe5d,0xf8a52006,0xf8a50f6a,0xe8bd6f6c,0x46c081f0,
+0x460db570,0x41a4f240,0xf7fe4604,0xf400fe4d,0xb1554660,0x4f00f5b5,
+0xf5b5d007,0xd0044f60,0xf6444826,0xf7eb5197,0x42aefabb,0xf5b6d045,
+0xd1094f60,0xf7ff4620,0x4620ffbb,0x47984b20,0x4f60f5b5,0xe027d12a,
+0x4f60f5b5,0x4620d126,0xfd78f7ff,0xf2404620,0x227f41a4,0x3f6af8b4,
+0xfe44f7fe,0x3f6cf8b4,0x62e0f44f,0xf403021b,0x4620437f,0x41a5f240,
+0xfe38f7fe,0x6be021e0,0xf90cf7f0,0xf8a44b0f,0x21000f68,0x47984620,
+0x33fff04f,0x3f70f884,0xe0002300,0x46202310,0x61a3f240,0xf7fe2210,
+0x4620fe21,0x41a4f240,0x4260f44f,0xf7fe462b,0xbd70fe19,0x0002299e,
+0x1e0070f9,0x1e007415,0x47f0e92d,0xb094297f,0x46894607,0x4855dd04,
+0x7151f644,0xfa60f7eb,0xf8872307,0xf04f9f70,0x930a0a01,0x33194638,
+0x41a4f240,0xf8cd930c,0xf7fea024,0xf410fdd5,0xd0044f60,0xf44f4638,
+0xf7ff4100,0xf509ff79,0xf10d73a0,0x930b0820,0xf240ab13,0x4e444556,
+0x46389308,0xf2404641,0xf2404255,0x95004357,0xf10947b0,0x930b03c0,
+0x9308ab12,0x46414638,0x4255f240,0x4357f240,0x47b09500,0x46389b12,
+0x02fff003,0x2034f8ad,0x2207f3c3,0x4307f3c3,0x3038f8ad,0xf8ad9b13,
+0xf3c32036,0xf8ad7302,0xa90d303a,0x47984b2f,0x104bf89d,0xf0014638,
+0x4b2d017f,0x99134798,0xf3c14638,0x4b2b5107,0x9b134798,0xf3c34638,
+0x059b2289,0xf8ad0d9b,0x2300303e,0x33109305,0xab0f9307,0x23029303,
+0x334e9304,0x203cf8ad,0xa9039306,0x4255f240,0x4357f240,0x95004c1e,
+0xf50947a0,0x930b73e0,0x9308ab11,0x46414638,0x4255f240,0x4357f240,
+0x47b09500,0xf8bd4638,0x4b161044,0xf5094798,0x930b7310,0x9308ab10,
+0x46414638,0x4255f240,0x4357f240,0x47b09500,0x46389b10,0xb29b00db,
+0x61a6f240,0x72fff641,0xfd68f7fe,0x46514638,0x47984b09,0xe8bdb014,
+0x46c087f0,0x0002299e,0x1e00705d,0x1e0075f9,0x1e00729d,0x1e007321,
+0x1e006fcd,0x1e00739d,0x1e007415,0xf647b570,0x4604757f,0x462a2158,
+0xf7ef6bc0,0x6be0feff,0x462a215a,0xfefaf7ef,0x21706be0,0xf7ef462a,
+0x6be0fef5,0x462a2172,0xfef0f7ef,0x46c0bd70,0x6bc5b5f7,0xf8d54604,
+0x7a1b3844,0xd05d2b00,0x3033f890,0xd0412b00,0x21284628,0xf7ef223f,
+0x4628fedd,0x22102124,0xfed8f7ef,0x21c8f894,0x21264628,0xf7ef0112,
+0x4628fed1,0xf8b42132,0xf7ef2250,0x4626fecb,0x4b212700,0x18fb4628,
+0x4b207919,0x017ff001,0xf9964798,0x4604216d,0x46281da1,0xf7efb292,
+0xf996feb9,0x2302216d,0xf2f3fb92,0x46284252,0x010ef104,0x3701b292,
+0xfeacf7ef,0x2f083601,0x2303d1df,0x93002280,0x21014628,0xf7f04613,
+0xe017f9ad,0x20044601,0x316df991,0x33072208,0xf3f2fb93,0x300100db,
+0x316df881,0x280c3101,0xf994d1f2,0x4628216d,0x214e3207,0x02cff3c2,
+0xfe88f7ef,0x46c0bdfe,0x1e00c60c,0x0001d839,0x4ff0e92d,0x3ffff1b1,
+0x4605b091,0x9202468a,0x8d81d115,0x7340f401,0x7f40f5b3,0xb2cfd101,
+0xf5b3e00e,0xb2c97f00,0x29ddd103,0x1c8fd803,0x2902e006,0x2700d801,
+0x1e8fe002,0x460fe000,0x0b00f04f,0x46a922ff,0x920346a8,0x4639465e,
+0x023ef10d,0x033ff10d,0xf8984628,0x9600413c,0xfef0f7fe,0x21c9f998,
+0x303ff89d,0x0111f10d,0xbfa84293,0xb2db4613,0x303ff88d,0xbf2842a3,
+0x54734623,0x2b0bb2f3,0xf89dd903,0x3b0c301c,0x6c6b5473,0x0801f108,
+0x26fef893,0xfb035c73,0x2264f302,0xf3f2fb93,0x5473b2db,0x36019a03,
+0xbf28429a,0x459b461a,0x469bbf38,0x92032e14,0xf1bad1c5,0xd00a3fff,
+0xb9239b02,0xf2484826,0xf7eb416f,0x9a02f8b9,0xb000f882,0xf505e041,
+0x210070b4,0x222d3001,0xf974f7ec,0xf8859b03,0xf885b031,0x210031c8,
+0x0311f10d,0xf8955cca,0xf8893033,0xb91b2196,0x3031f895,0xe0031a9b,
+0x31c8f895,0x0302ebc3,0x29143101,0x3169f889,0x0901f109,0x4628d1e8,
+0x6192f501,0xfc10f7fe,0x4f60f410,0x4628d012,0x41a4f240,0xfc08f7fe,
+0x46042100,0xf7ff4628,0x4628fdaf,0xfb4ef7ff,0xf4044628,0xf7ff4160,
+0xe002fda7,0xf7ff4628,0xb011fee3,0x8ff0e8bd,0x0002299e,0x4604b570,
+0xb90b461d,0xe000461e,0x29d3681e,0xdc04d038,0xd011291b,0xd0092987,
+0x29dce005,0x29ddd016,0x29d4d018,0xf06fd038,0xe05b0516,0xf7fe4620,
+0xb240fd4d,0xe0546028,0x7c5d6c63,0xf06fb115,0xe04f0504,0xf0104620,
+0xe04bfe55,0xf8936c63,0xe01f36fe,0xd8412e64,0xf8836c63,0x6c6366fe,
+0x2b007c5b,0x6be0d03d,0xffbaf005,0x28004605,0x4620d137,0x31fff04f,
+0xf7ff462a,0xe031ff09,0x691a6963,0xf8d4602a,0xf0133d8c,0xd0280f02,
+0x0380f042,0xe024602b,0xd81f2e03,0x69136962,0xd01e42b3,0x61166c63,
+0xb1d37c5b,0xf7f06be0,0xb126fd69,0x21004620,0xf7fe2201,0x6963fcfd,
+0x46202201,0xf7fe6919,0x2800fcf7,0xbf146be0,0xf06f2500,0xf7ef0502,
+0xe003ffc9,0x051cf06f,0x2500e000,0xbd704628,0xb570297f,0xd9014604,
+0xe01a2005,0x18a32200,0x2a2d3201,0x113cf883,0x2300d1f9,0x324cf884,
+0x7c5b6c63,0x6be0b163,0xff66f005,0xb9384605,0xf04f4620,0x462a31ff,
+0xfeb6f7ff,0xe0004628,0xbd702000,0x6c43b5f0,0x4607b089,0x6898b2cc,
+0x71fff640,0x7272f44f,0xfc7af7eb,0x031ff10d,0x23019302,0x33139303,
+0x23089304,0x6c7b9306,0x6a5b689b,0x639ef5a3,0x2b013b0d,0x4638d869,
+0x61aaf44f,0x72a5f44f,0xfb3ef7fe,0xd8052c04,0xf2404638,0x22ff4134,
+0xe00823fd,0xb2db1f63,0xd8072b03,0xf2404638,0x22ff4134,0xf7fe23fe,
+0xe012fb45,0x0309f1a4,0x2b05b2db,0x22ffd80d,0xf2404638,0x46134134,
+0xfb38f7fe,0xf44f4638,0xf44f61aa,0xf7fe72af,0x2302fb17,0xf88d2c07,
+0xd117301f,0xae023337,0x4556f240,0x46389305,0xf2404631,0xf2404255,
+0x95004357,0x47a04c73,0x9305233a,0x46314638,0x4255f240,0x4357f240,
+0xe0d79500,0xd1172c0b,0xae022306,0x4556f240,0x46389305,0xf2404631,
+0xf2404255,0x95004357,0x47a04c66,0x93052307,0x46314638,0x4255f240,
+0x638af503,0xe0bd9500,0xf0402c0d,0x231980bc,0x4638e08e,0x61aaf44f,
+0x72aff44f,0xfad4f7fe,0xd1222c01,0x25052317,0xf2409305,0x93004356,
+0xa9024638,0x4255f240,0xf88d3301,0x4c53501f,0x463847a0,0x412ff240,
+0x462b2207,0xfad6f7fe,0xf2404638,0x22ff4134,0xf7fe23fd,0x4638facf,
+0x4116f240,0x23a322ff,0x2c02e041,0x2605d114,0xf2402507,0x93004356,
+0xa9024638,0x4255f240,0xf88d3301,0x9505601f,0x47a04c40,0xf2404638,
+0x462a412f,0xe01c4633,0xd1042c03,0x23372505,0x501ff88d,0x2c04e005,
+0x2505d13c,0x501ff88d,0x93052327,0x4356f240,0x46389300,0xf240a902,
+0x33014255,0x47a04c31,0xf2404638,0x2207412f,0xf7fe462b,0x4638fa93,
+0x4134f240,0x23fd22ff,0xfa8cf7fe,0xf2404638,0x22ff4116,0xf7fe23a2,
+0x4638fa85,0xf2402300,0xf44f5152,0xf7fe4278,0x4638fa7d,0x5153f240,
+0x42c0f44f,0x4380f44f,0xfa74f7fe,0xf2404638,0x22ff4117,0xf7fe2378,
+0xe030fa6d,0xd12e2c0d,0xf88d2302,0x3317301f,0xf240ae02,0x4c154556,
+0x46389305,0xf2404631,0xf2404255,0x95004357,0x231a47a0,0x46389305,
+0xf2404631,0xf2404255,0x95004357,0x232647a0,0x46389305,0xf2404631,
+0xf2404255,0x95004357,0x232747a0,0x95009305,0x46314638,0x4255f240,
+0x6386f503,0xb00947a0,0x46c0bdf0,0x1e006fcd,0x4ff0e92d,0x46054b46,
+0x0003e893,0xb08b4b45,0x23149303,0x23089305,0x9307ac08,0x090cf10d,
+0xf2402300,0xf2404a55,0xe8844b57,0x27400003,0xf2409306,0x46284856,
+0x46524649,0x4e3a465b,0xf8cd9704,0x47b08000,0xf6406c6b,0x689871ff,
+0x627ef44f,0xfb14f7eb,0x22074628,0xf2402303,0xf7fe412f,0x22fffa03,
+0x46134628,0x4134f240,0xf9fcf7fe,0x22ff4628,0xf24023a4,0xf7fe4116,
+0x4628f9f5,0x5152f240,0x4278f44f,0x43b0f44f,0xf9ecf7fe,0xf2404628,
+0xf44f5153,0xf44f42c0,0xf7fe5300,0x2364f9e3,0x22ff4628,0x4117f240,
+0xf9dcf7fe,0xf2404628,0xf24f41df,0xf7fe42f1,0x4628f9bb,0x4124f240,
+0x427ff44f,0x53e8f44f,0xf9ccf7fe,0x22ff4628,0xf2402306,0xf7fe4125,
+0x2302f9c5,0x330f9304,0x330f9305,0x93079403,0x46494628,0x465b4652,
+0x444af240,0xf8cd9706,0x47b08000,0x46214628,0xf7fe2244,0x4628f9a5,
+0x22804621,0xf990f7fe,0xe8bdb00b,0x46c08ff0,0x000228c0,0x000233dc,
+0x1e006fcd,0x4ff0e92d,0xb08bb2ca,0x92024607,0xf7fe9101,0x4638faa3,
+0xff5ef7ff,0x461a2300,0xf8dd49b1,0x58508008,0x90094540,0x3301d004,
+0x2b0e321c,0xe219d1f4,0xfb03241c,0x46381404,0x7a2221a2,0xf958f7fe,
+0x463821a4,0xf7fe7a62,0x21a6f953,0x7aa24638,0xf94ef7fe,0x463821a1,
+0xf7fe7ae2,0x21b4f949,0x7b224638,0xf944f7fe,0x463821b6,0xf7fe7b62,
+0x21d0f93f,0x7ba24638,0xf93af7fe,0x463821d3,0xf7fe7be2,0x21d6f935,
+0x7c224638,0xf930f7fe,0x463821d9,0xf7fe7c62,0x21dff92b,0x7ca24638,
+0xf926f7fe,0xf44f4638,0x7d227180,0xf920f7fe,0xf2404638,0x7d621103,
+0xf91af7fe,0x46387da2,0x1115f240,0xf914f7fe,0x4638210f,0xfe3cf7fe,
+0x021ef040,0x210f9006,0xb2924638,0xf908f7fe,0xf8d74b80,0x68605dc8,
+0xbf8c429d,0x0902f04f,0x0901f04f,0x13b4f640,0xd9014298,0xe0000040,
+0x24030080,0xf104fb05,0xf8df4e77,0x2210b1e8,0x91039004,0x0dc8f8d7,
+0x47d84631,0x22104631,0x47d84628,0xf106fb09,0x90052210,0x47d84628,
+0x22104621,0x98049008,0x40a547d8,0x22022179,0x46389007,0xf8d4f7fe,
+0x217c4b68,0xf303fb09,0xf3f3fbb5,0x085b3301,0xfa5f3b01,0x2207fa83,
+0xea4f4638,0xf7fe039a,0xf10afdb3,0x217d0801,0x46382260,0x134aea4f,
+0xfdaaf7fe,0xf308fb09,0xfbb54c5b,0x192cf5f3,0xf4f6fbb4,0xb2e43c01,
+0x4622217b,0xf7fe4638,0x9a08f8ab,0x01159807,0x22104629,0x340147d8,
+0xf604fb08,0xf006fb00,0xdb0a2800,0x46299807,0x47d82210,0xf006fb00,
+0x300113c0,0x1e441040,0x9807e00d,0x22104629,0xea6f47d8,0xfb03030a,
+0xfb00f304,0x13c0f003,0xea6f3001,0xf3c40460,0x46382307,0x220f217d,
+0xfd6ef7fe,0xb2e24638,0xf7fe217e,0x9b04f879,0x4224f24f,0xf202fb03,
+0xfbb29803,0x011ef3f0,0x2313fb00,0xe0020118,0x36019903,0x9a031a40,
+0xd2f94290,0x4d334611,0x47a82214,0x46042170,0x4638221f,0x1307f3c6,
+0xfd4af7fe,0x46380133,0xf44f2171,0xf00372f8,0xf7fe03f0,0xf3c4fd41,
+0x46384307,0x220f2171,0xfd3af7fe,0x2207f3c4,0x21724638,0xf844f7fe,
+0x4638b2e2,0xf7fe2173,0x4638f83f,0x22b9216c,0xf83af7fe,0x216d4638,
+0xf7fe2288,0x4638f835,0x2228216e,0xf830f7fe,0x216f4638,0xf7fe2263,
+0x9807f82b,0xf1002229,0xf5034374,0xfb030390,0x4813f302,0x6296f44f,
+0xf3f2fb93,0xf000fb06,0x6294f5a2,0x1103f242,0x14d8f503,0x190247a8,
+0xfb931e53,0x2b3cf3f4,0x2500bfd4,0xb18d2501,0xfb920063,0xe011f3f3,
+0x00023914,0x018cba80,0x000f4240,0x004c4b40,0x000f423f,0x1e007165,
+0x000203a0,0x0364eb00,0xf3f4fb93,0xb2dc3b08,0x223f2168,0x46384623,
+0xfcdef7fe,0x22402168,0x463801ab,0xfcd8f7fe,0x20649905,0xfb012210,
+0x4b6af000,0x47989907,0xfb031c6b,0xf104f300,0xfb010108,0xf5b1f103,
+0xbfd40f16,0x24012400,0x22061c63,0xf302fb03,0xf0f3fb91,0x3f00f5b0,
+0x2300d501,0xf5a0e005,0x13db33c0,0xf3c33301,0x21690347,0x4638221f,
+0xfcaef7fe,0x22202169,0x46380163,0xfca8f7fe,0x46132204,0x46382181,
+0xfca2f7fe,0x2dc8f8d7,0x429a4b51,0x4638d905,0x22022181,0xfcb0f7fe,
+0x4638e004,0x22fd2181,0xfcbcf7fe,0x218122fe,0xf7fe4638,0x9a05fcb7,
+0x1f34f5b2,0x4638dd05,0x22022175,0xfc9cf7fe,0x4638e004,0x22fd2175,
+0xfca8f7fe,0x211b2203,0x46384613,0xfc78f7fe,0x20014d3e,0x211b47a8,
+0x23002203,0xf7fe4638,0x2300fc6f,0x211a2240,0xf7fe4638,0x2164fc69,
+0xf7fe4638,0xf000fca1,0x216404f8,0x46384622,0xff6ef7fd,0x47a82001,
+0xf0442164,0x46380204,0xff66f7fd,0x47a82001,0xf0442164,0x46380206,
+0xff5ef7fd,0x47a82001,0xf0442164,0x46380207,0xff56f7fd,0x7096f44f,
+0x224047a8,0x46384613,0xf7fe211a,0x4638fc3d,0x9a06210f,0xff48f7fd,
+0x8024f8dd,0x707af44f,0x47984b1c,0x4b1c4638,0x9b024798,0x85fb9801,
+0x9902b29e,0x4370f400,0x5f80f5b3,0xbf084c17,0x7680f446,0xf8341e4d,
+0x46382025,0x6157f240,0x0485eb04,0xff34f7fd,0xf44f4638,0x886261cb,
+0xff2ef7fd,0x6bf84632,0xf7ef21a0,0x6cbaf8fb,0xf388fa1f,0x33f0f8a2,
+0xf8872301,0x22003dc4,0x0311f241,0xb00b54fa,0x8ff0e8bd,0x1e007165,
+0x018cba80,0x1e005d75,0x1e007459,0x1e00d028,0x4ff0e92d,0x4607b0fd,
+0x4615460e,0x22162100,0x70adf50d,0xf7eb9303,0x497afc3d,0xf50d220c,
+0xf7eb70d9,0x4978fc57,0xf50d220c,0xf7eb70d3,0xf50dfc51,0x497570cd,
+0xf7eb220c,0x2300fc4b,0x33109363,0x2d039365,0xe8dfd862,0x0d02f005,
+0x2206091e,0x73adf50d,0x79d9f50d,0xe011920f,0x46992300,0xe025930f,
+0x3f56f897,0x4868b923,0x11b1f245,0xfb48f7ea,0xf5072106,0xf50d6374,
+0x910f79d3,0x0b00f04f,0xf50de04d,0x936173ad,0x93622307,0x93643349,
+0x4356f240,0xf2409300,0x46384255,0x3301a961,0x47a04c5a,0xf50d2206,
+0x920f79d3,0x9300ab7b,0xab7ba97b,0x33013103,0x72f7f50d,0x4c544638,
+0xf89d47a0,0xf89d21ef,0xf04f31ee,0xea430100,0xf8ad2302,0xf04f3168,
+0xf8ad0300,0xf89d316a,0xf89d21ed,0x2d0231ec,0x2302ea43,0x316cf8ad,
+0x116ef8ad,0x73adf50d,0x2206d0c0,0x79d9f50d,0x0b02f04f,0xe00a920f,
+0x0900f04f,0xf245483e,0xf7ea11d3,0x46cbfaf5,0xf8cd464b,0x9361903c,
+0x9362230b,0x93643335,0x4356f240,0x4255f240,0x46389300,0xa9613301,
+0x47a04c36,0x41a4f240,0xf7fd4638,0x2100fe61,0x46389004,0xf808f7ff,
+0xf2404638,0xf7fd413b,0xf3c0fe57,0x900e1080,0x4638b118,0x4b2ca974,
+0xb9664798,0xb9239b0e,0xf8b74638,0xf7ff1f6a,0xac76f857,0x46214638,
+0x47984b25,0x88734626,0x011b8832,0x2302ea43,0x463188b2,0xfa1f4313,
+0x8dbbf883,0xf4032208,0xa8784370,0x5f80f5b3,0x2500bf14,0xf7eb2501,
+0x220afb8d,0x70dff50d,0xf7eb2100,0x4b17fb67,0xf8332200,0x46104015,
+0x4b15e02d,0x3025f853,0x880b18c1,0x45433012,0x884ad124,0x70dff50d,
+0x21e0f8ad,0xf8ad888b,0xf83131e2,0xf8ad2f06,0x220a21e4,0xfb6af7eb,
+0x46c0e017,0x000228d0,0x000228dc,0x000228ec,0x0002299e,0x1e00705d,
+0x1e006f41,0x1e006fcd,0x1e0073d9,0x000228e8,0x000228c8,0x42a23201,
+0x4638d1cf,0x4bb0a978,0x22404798,0x46384613,0x61daf240,0xfe06f7fd,
+0x21184bac,0x47984638,0x413cf240,0xf7fd4638,0xf240fddb,0x900a110b,
+0xf7fe4638,0x214cfafd,0x4638900b,0xfaf8f7fe,0x41f3f240,0x4638900c,
+0xfdcaf7fd,0x22382300,0xf240900d,0x4638413c,0xfde4f7fd,0x22fe214c,
+0xf7fe4638,0x214cfad3,0x46382202,0xfabcf7fe,0x5280f44f,0xf2404638,
+0xf7fd41f3,0xf240fdc9,0x4638413e,0xfdacf7fd,0xf24023af,0x900732ff,
+0x413ef240,0xf7fd4638,0xf240fdc5,0x46381121,0xfac6f7fe,0x900522f2,
+0x1121f240,0xf7fe4638,0x227ffaad,0xf2404638,0xf7fe111f,0xf240faa7,
+0x46386176,0xfd8cf7fd,0x22802300,0xf2409008,0x46386176,0xfda6f7fd,
+0x5103f240,0xf7fd4638,0x2208fd7f,0x90094613,0x5103f240,0xf7fd4638,
+0x4638fd99,0x5103f240,0x23002204,0xfd92f7fd,0x26144b73,0xf50d9361,
+0x230078c2,0x4556f240,0x46389364,0xf2404641,0xf2404255,0x4c6d4357,
+0x95009662,0x4b6c47a0,0x93614638,0x93642320,0xf2404641,0xf2404357,
+0x96624255,0x47a09500,0xf2404638,0xf6404153,0xf7fd22a9,0xf8d7fd51,
+0x2b003dbc,0x80aef040,0x63a6f640,0x3dbcf8c7,0xf44f4638,0x22e06182,
+0xf7fd2380,0x2401fd5b,0x4340f649,0xf303fb04,0x62a6f640,0xf3f2fbb3,
+0x2e40b29e,0x4855d904,0x01e0f245,0xf9a4f7ea,0xd1032c03,0x46a02400,
+0xe0334625,0xb29c1c63,0x4b4fe7e6,0xa9724640,0x9a734798,0xfb022358,
+0x2a00f203,0x13d3db04,0xf3c33301,0xe0060149,0x13db4253,0x105b3301,
+0x0599425b,0x9a720d89,0xfb022358,0x2a00f203,0x13d3db04,0xf3c33301,
+0xe0060249,0x13db4253,0x105b3301,0x059a425b,0xea420d92,0xaa112381,
+0x1c6350ab,0x1807f508,0x3504b29c,0xd1cc42b4,0xf2404638,0x220361d6,
+0xf7fd2300,0x2208fd07,0x46384613,0x61daf240,0xfd00f7fd,0x46132202,
+0xf2404638,0xf7fd61da,0xab11fcf9,0x2315935c,0x330b935e,0x93602500,
+0x4356f240,0x46389300,0xf240a95c,0x33014255,0x955f965d,0x47a04c1f,
+0x46132280,0xf2404638,0xf7fd61da,0x1e73fcdf,0xf2404638,0xf2406142,
+0xb29b32ff,0xfcd6f7fd,0x72fff64f,0x46384613,0x61c8f44f,0xfccef7fd,
+0xf2404638,0xf64f6141,0x462b72ff,0xfcc6f7fd,0xf2404638,0xf6474153,
+0xf7fd72ff,0x4638fcab,0x4153f240,0x4200f44f,0xfcaef7fd,0x024bea4f,
+0x73cdf50d,0x0802eb09,0x0a02eb03,0xe0b046d9,0x1e0075f9,0x1e006ec9,
+0x00023acc,0x1e006fcd,0x00023a9c,0x0002299e,0x1e0071b5,0x0300f04f,
+0x31e8f8ad,0x3000f8b8,0xf3c3a97c,0xeb012403,0xf8330344,0xf8ba1c32,
+0xb1212000,0x03fff002,0x2301ea43,0x4638b29a,0x4152f240,0xfc6cf7fd,
+0xb29b1ee3,0x93062b01,0xf50dd81d,0x936173f5,0x93622301,0x3344ae61,
+0x4556f240,0x46389364,0xf2404631,0xf2404255,0x4c864357,0x47a09500,
+0x9361ab7a,0x46389500,0xf2404631,0xf2404255,0x4c814357,0x463847a0,
+0x4151f240,0x2000f8b8,0xfc42f7fd,0xe0072400,0x4b7c2064,0x34014798,
+0x3389f241,0xd007429c,0xf2404638,0xf7fd4151,0xf410fc2b,0xd1ef4f40,
+0xf2404638,0xf7fd4151,0xf410fc23,0xd17a4f40,0x220bab51,0xad619361,
+0xf2402360,0x92624456,0x46389364,0xf2404629,0xf2404255,0x94004357,
+0xb198f8df,0x234047d8,0x46299364,0x46389400,0x4255f240,0x4357f240,
+0x47b04e61,0x29019906,0xf50dd80e,0x936173f5,0x93622301,0x93643344,
+0x46389400,0xf2404629,0xf2404255,0x47b04357,0x6374f507,0x220b9361,
+0x92622360,0x94009364,0x46294638,0x4255f240,0x4357f240,0xf10947d8,
+0xf1080901,0xf10a0802,0x990f0a02,0xf4ff4589,0x230baf59,0x6874f507,
+0xf240ae61,0x93624556,0x93643355,0x46314638,0x4255f240,0x4357f240,
+0xf8cd4c42,0x95008184,0x230447a0,0x334c9362,0x46389364,0xf2404631,
+0xf2404255,0xf8cd4357,0x95008184,0x47a04c3a,0x330a4643,0x23029361,
+0x33539362,0x95009364,0x46314638,0x4255f240,0x4357f240,0x9a0347a0,
+0x4638b912,0x47984b32,0x46382300,0x5103f240,0xf7fd2208,0x4638fbbb,
+0x111ff240,0xf7fe2280,0x4638f897,0x413ef240,0xf7fd9a07,0x9b05fb95,
+0xb2da4638,0x1121f240,0xfb82f7fd,0xf2404638,0x9a086176,0xfb88f7fd,
+0xf2404638,0x9a095103,0xfb82f7fd,0xf2404638,0x9a0a413c,0xfb7cf7fd,
+0xf2404638,0x9a0b110b,0xfb6af7fd,0x214c4638,0xf7fd9a0c,0x9a0dfb65,
+0xf2404638,0xf7fd41f3,0x4b14fb6b,0x21404638,0x46384798,0x413bf240,
+0x72fbf64f,0xfb66f7fd,0x61daf240,0x22404638,0xf7fd2300,0x990efb73,
+0x4638b119,0x4b0aa974,0x9a044798,0xf4024638,0xf7fe4160,0xb07dfcf1,
+0x8ff0e8bd,0x1e00705d,0x1e006fcd,0x1e005d75,0x0001ec65,0x1e006ec9,
+0x1e0075f9,0x4ff0e92d,0x46072380,0x22e0b097,0x6182f44f,0xfb4ef7fd,
+0x6c7b2400,0x4f57f887,0x370cf8d3,0x4dc4f887,0x3dc0f8c7,0x302cf897,
+0x3f57f887,0xf8d36cbb,0xf0833120,0xf0130301,0x93020301,0x6bf8d102,
+0xfce4f7ef,0x46382280,0x6131f240,0xf7fd4623,0xf44ffb2d,0x46235280,
+0x61daf240,0xf7fd4638,0x4638fb25,0xfe4cf7fd,0x41a4f240,0xf7fd4638,
+0x4621fafb,0x46389003,0xfca2f7fe,0x46384ba6,0x90054798,0xf7fd4638,
+0x2110fb27,0x4ba39004,0x47984638,0xf7ee6bf8,0x2801fc19,0xf04fd10a,
+0xf8ad03ff,0xf04f3040,0xf8ad033c,0xf04f3042,0xe00903ff,0x0307f04f,
+0x3040f8ad,0x033cf04f,0x3042f8ad,0x03f8f04f,0xad102200,0x3044f8ad,
+0x46134638,0xf8ad4629,0xf7ff4046,0xf10dfbbd,0x93000352,0xf10d4638,
+0xf10d0355,0xf10d0157,0x4c8b0256,0xf99d47a0,0x2b003055,0x425bbfb8,
+0xd11c2b0f,0x3052f99d,0xbfb82b00,0x2b0f425b,0xf04fd115,0xf8ad0307,
+0xf04f3040,0xf8ad032d,0xf04f3042,0xf8ad03ba,0x22003044,0x0300f04f,
+0x3046f8ad,0x46294638,0xf7ff4613,0xab12fb8d,0x23029306,0xf10d2410,
+0xf2400918,0x93074856,0x334e2500,0x93094649,0xf8cd940a,0x46388000,
+0x4255f240,0x4357f240,0x95084e6e,0xf10d47b0,0x940a0352,0x24019306,
+0x93092355,0x8000f8cd,0xf2404649,0x95084357,0x46389407,0x4255f240,
+0xb048f8bd,0xa04af8bd,0x230747b0,0x3319930d,0xf8bd930f,0xab139052,
+0x930b940c,0x78a0f44f,0xf240ae0b,0xf8cd4556,0x46388038,0xf2404631,
+0xf2404255,0x4c574357,0x47a09500,0xea4f9b13,0x0d1b528a,0x0d92051b,
+0xea4f431a,0x0d9b538b,0x2283ea42,0x46389213,0xf2404631,0xf2404255,
+0x4c4d4357,0x47a09500,0x0380f108,0xf8cd930e,0x9500904c,0x46314638,
+0x4255f240,0x4357f240,0x0801f108,0xf5b847a0,0xd1c97fe0,0x99054638,
+0x47984b42,0x99044638,0x47984b3c,0x46389b03,0x4160f403,0xfbc4f7fe,
+0x22002101,0x4b3c4638,0x6bf84798,0xfb42f7ee,0x46042802,0x2208d172,
+0x46134638,0x414cf240,0xfa28f7fd,0x46382208,0xf2404613,0xf7fd414d,
+0x4638fa21,0x46234622,0x41f9f240,0xfa1af7fd,0x46224638,0xf2402300,
+0xf7fd41fa,0x2201fa13,0x46134638,0x41f9f240,0xfa0cf7fd,0x22014638,
+0xf2402300,0xf7fd41fa,0x4638fa05,0xf2402300,0xf44f41b1,0xf7fd5200,
+0xf44ff9fd,0x46386200,0xf44f4613,0xf7fd6196,0x4638f9f5,0x41b7f240,
+0x42fef44f,0x5300f44f,0xf9ecf7fd,0x46382208,0xf44f4613,0xf7fd6196,
+0x4638f9e5,0x23002280,0x41e6f240,0xf9def7fd,0x46132240,0xf2404638,
+0xf7fd41e5,0x4638f9d7,0xf44f228c,0xf7fd7192,0x4638f9ab,0x1125f240,
+0xf7fd2200,0xe01bf9a5,0x1e00735d,0x1e00729d,0x1e006f41,0x1e00705d,
+0x1e006fcd,0x1e007321,0x1e0072c5,0x46132220,0xf2404638,0xf7fd414c,
+0x2220f9b5,0xf2404638,0x4613414d,0xf9aef7fd,0x41a4f240,0xf7fd4638,
+0x2100f987,0x46384606,0xfb2ef7fe,0xf2404638,0xf7fd413b,0xf3c0f97d,
+0xb11d1580,0xa9104638,0x47984b80,0x4638217f,0xfb82f7fe,0x497e4638,
+0x47984b7e,0x46132201,0xf2404638,0xf7fd413b,0x2201f989,0x46382300,
+0x413cf240,0xf982f7fd,0x6200f44f,0x46384613,0x414cf240,0xf97af7fd,
+0x5200f44f,0xf2404613,0x4638414d,0xf972f7fd,0x46384c6f,0x227f47a0,
+0x46382300,0x619df44f,0xf968f7fd,0x46382300,0x619df44f,0x42fef44f,
+0xf960f7fd,0x2305227f,0xf2404638,0xf7fd41e9,0x4638f959,0x41e9f240,
+0x42fef44f,0x63a0f44f,0xf950f7fd,0x46132208,0xf2404638,0xf7fd41e7,
+0x2210f949,0x46384613,0x41e7f240,0xf942f7fd,0x23002260,0xf2404638,
+0xf7fd41e7,0x2204f93b,0x46382300,0x41e7f240,0xf934f7fd,0x46132202,
+0xf2404638,0xf7fd41e7,0x4638f92d,0x61daf240,0xf7fd2210,0x2220f91d,
+0x46384613,0x6189f44f,0xf920f7fd,0x4180f44f,0xf7fd4638,0x4638fe31,
+0x463847a0,0xf934f7fd,0xf2404638,0x2208414c,0xf7fd2300,0x4638f90f,
+0x414cf240,0x23002220,0xf908f7fd,0xf2404638,0x220241f9,0xf7fd2300,
+0x4638f901,0x41f9f240,0x23002201,0xf8faf7fd,0x4b34b11d,0xa9104638,
+0x4b33e002,0x46294638,0x46384798,0x4160f406,0xfa76f7fe,0x21004638,
+0x47984b2e,0xf44f4638,0xf44f6196,0x23006200,0xf8e0f7fd,0xf44f4638,
+0x22086196,0xf7fd2300,0x4638f8d9,0x41e5f240,0x23002240,0xf8d2f7fd,
+0xf44f4638,0x22106196,0xf7fd2300,0x4638f8cb,0x413bf240,0x23002201,
+0xf8c4f7fd,0xf2404638,0xf44f414c,0x23006200,0xf8bcf7fd,0x46132280,
+0xf2404638,0xf7fd6131,0xf44ff8b5,0x46135280,0xf2404638,0xf7fd61da,
+0x9b02f8ad,0x6bf8b913,0xfcccf7ee,0xf7ee6bf8,0xf44ff9b5,0x28026182,
+0x2320bf14,0x22e02360,0xf7fd4638,0xb017f89b,0x8ff0e8bd,0x1e0073d9,
+0x001007f0,0x1e00769d,0x1e0072f1,0x1e0075f9,0x1e007415,0x1e007559,
+0xe92d6c83,0xf8d347f0,0xb0863120,0x0301f083,0x0a01f013,0xd1024607,
+0xf7ef6bc0,0xf240fa2b,0x463861da,0xf854f7fd,0x46132240,0xf2404681,
+0x463861da,0xf86ef7fd,0x413ef240,0xf7fd4638,0xf240f847,0x46065103,
+0xf7fd4638,0x2204f841,0x46804613,0x5103f240,0xf7fd4638,0x2300f85b,
+0xf2404638,0xf44f413e,0xf7fd5200,0x220ff853,0x46382300,0x413ef240,
+0xf84cf7fd,0x23b022f0,0xf2404638,0xf7fd413e,0xf44ff845,0xf44f52e0,
+0x463853a0,0x413ef240,0xf83cf7fd,0x4638210d,0xfd3ef7fd,0x413cf240,
+0x46384604,0xf810f7fd,0x23282238,0xf2404605,0x4638413c,0xf82af7fd,
+0x7200f44f,0x46384613,0x5103f240,0xf822f7fd,0x46382300,0x5103f240,
+0x7200f44f,0xf81af7fd,0x46132280,0xf44f4638,0xf7fd7191,0x2240fcdd,
+0x46382300,0x7191f44f,0xfcd6f7fd,0x46382300,0x7191f44f,0xf7fd2220,
+0x220ffccf,0x0302ea04,0xf44f4638,0xf7fd7191,0x4638fcc7,0x7191f44f,
+0x23002210,0xfcc0f7fd,0x4c34ab04,0xf44f9300,0x220071c8,0x4638ab05,
+0xf44f47a0,0x46137200,0xf2404638,0xf7fc5103,0x4638ffe5,0x5103f240,
+0x7200f44f,0xf7fc2300,0x2210ffdd,0x46384613,0x7191f44f,0xfca0f7fd,
+0x9300ab02,0x71c8f44f,0xab032200,0x47a04638,0x9c039b05,0xf2404638,
+0x4632413e,0xf7fc18e4,0x2204ffab,0x0302ea08,0xf2404638,0xf7fc5103,
+0x2238ffbd,0x0302ea05,0xf2404638,0xf7fc413c,0x2240ffb5,0x10644613,
+0xf44f4638,0xf7fd7191,0xb220fc77,0x213df640,0x47984b0f,0xf5001240,
+0xf24440c0,0x30cb5155,0x47984b0c,0x12043080,0x61daf240,0x464a4638,
+0xff7ef7fc,0x0f00f1ba,0x6bf8d102,0xfbb6f7ee,0xf8874620,0xb0064f9e,
+0x87f0e8bd,0x1e007975,0x1e0044d1,0x1e0044a9,0x4ff0e92d,0xb08b6c43,
+0xaa064605,0xf2406898,0xa9076bda,0xf854f7ea,0x46284659,0xff54f7fc,
+0xf2402240,0x4613463e,0x46599005,0xf7fc4628,0x4631ff6d,0xf7fc4628,
+0xf240ff47,0x90045a03,0x46284651,0xff40f7fc,0x90032204,0x46284651,
+0xf7fc4613,0x4628ff5b,0x23004631,0x5200f44f,0xff54f7fc,0x46314628,
+0x230d220f,0xff4ef7fc,0x46314628,0x238022f0,0xff48f7fc,0x493cf240,
+0x46314628,0x52e0f44f,0x5380f44f,0xff3ef7fc,0x46284649,0xff18f7fc,
+0x1821f240,0x23202238,0x46499002,0xf7fc4628,0x4641ff31,0xf7fd4628,
+0x4641fc33,0x220f4607,0x23044628,0xfbf0f7fd,0x7200f44f,0x46514628,
+0xf7fc4613,0x4628ff1f,0x23004651,0x7200f44f,0xff18f7fc,0x9300ab08,
+0xab092128,0x46282200,0x47a04c1c,0x46314628,0xf7fc9a04,0x9c03fef1,
+0xea042204,0x46280302,0xf7fc4651,0x9c02ff03,0xea042238,0x46280302,
+0xf7fc4649,0x4628fefb,0x463a4641,0xfed0f7fc,0x46289a05,0xf7fc4659,
+0xf9bdfed7,0xf2460024,0x4b0b6166,0xf2474798,0x4b0a61f4,0x6c6b4798,
+0x64b1f647,0x24a0eb04,0x68989907,0xf7e99a06,0x1260ff91,0xe8bdb00b,
+0x46c08ff0,0x1e007975,0x1e0044d1,0x1e0044a9,0x4ff0e92d,0x9108b0b9,
+0x9a084614,0x1108f89d,0x46072a01,0xf89d9107,0xd904b10c,0xf2454832,
+0xf7e96170,0x4b31fb19,0x47984638,0x90092101,0x46384b2f,0x4b2f4798,
+0x21014638,0xf2404798,0x463841ea,0xfe8cf7fc,0x41ebf240,0x46389011,
+0xfe86f7fc,0x90122155,0xf7fd4638,0xf44ffba9,0x9013719c,0xf7fd4638,
+0x2105fba3,0x46389014,0xfebef7fc,0x7a23b15c,0x4638b12b,0x1009f994,
+0xf87ef7fe,0x4638e003,0x4b1b4621,0x214c4798,0xf7fd4638,0x21f3fb8d,
+0x4638900c,0xfb88f7fd,0x900d6c7b,0x6a5b689b,0x639ef5a3,0x2b013b0d,
+0x4638d809,0x221821f3,0xf7fd2310,0x4638fb3d,0x220221f3,0x4638e002,
+0x221821f3,0xf7fd4613,0x6bf8fb33,0xff76f7ed,0xd10f2802,0x214c4638,
+0x23202230,0x46c0e00e,0x0002299e,0x1e00735d,0x1e007b0d,0x1e007a89,
+0x1e0075f9,0x214c4638,0x23102230,0xfb18f7fd,0x46382100,0xfe82f7fc,
+0x6131f240,0xf7fc4638,0x2215fe23,0x900a4613,0x6131f240,0xf7fc4638,
+0xf240fe3d,0x463861d6,0xfe16f7fc,0x22032300,0xf240900b,0x463861d6,
+0xfe30f7fc,0x61daf240,0xf7fc4638,0x228ffe09,0xf2409010,0x463861da,
+0xfe1af7fc,0xf04f2607,0xab360801,0x80c4f8cd,0x93309632,0x3009f994,
+0x0920f04f,0x7310f503,0x4a56f240,0xf8cd9333,0xf24090d0,0x46384357,
+0xf240a930,0x4cb34255,0xa000f8cd,0x9a3647a0,0x00d24638,0xf2409236,
+0xb2926171,0xfde4f7fc,0x46382103,0xfb00f7fd,0x900e2121,0xf7fd4638,
+0x2103fafb,0x900f2218,0xf7fc4638,0x2121fdc9,0x4638221e,0xfdc4f7fc,
+0xac1b4ba3,0xcd0f461d,0xe895c40f,0xe884000f,0x2221000f,0xf2404638,
+0xf7fc6189,0x2303fdc1,0x4638221f,0x617af240,0xfdd4f7fc,0xf2404638,
+0xf2416173,0xf7fc7270,0x22c8fdb3,0xf2404638,0xf7fc6179,0x4638fdad,
+0x6174f240,0x4244f240,0xfda6f7fc,0x4638223f,0x6175f240,0xfda0f7fc,
+0xf44f4638,0xf24061ce,0xf7fc6281,0x4638fd99,0x6182f240,0x42d8f640,
+0xfd92f7fc,0xf2404638,0xf24c619b,0xf7fc125c,0x221bfd8b,0xf2404638,
+0xf7fc619c,0x2249fd85,0xf2404638,0xf7fc618c,0x2227fd7f,0xf2404638,
+0xf7fc617f,0x22fffd79,0xf44f4638,0xf7fc61d0,0x4638fd73,0x6181f240,
+0x123ff240,0xfd6cf7fc,0x463822ff,0x6183f240,0xfd66f7fc,0x46384642,
+0x618df240,0xfd60f7fc,0xf2404638,0xf240619d,0xf7fc72ff,0x2200fd59,
+0xf2404638,0xf7fc618a,0x2200fd53,0xf2404638,0xf7fc619f,0x4632fd4d,
+0xf44f4638,0xf7fc61d4,0x2200fd47,0xf2404638,0xf7fc61a4,0x2200fd41,
+0xf2404638,0xf7fc61a5,0x2208fd3b,0xf2404638,0xf7fc619a,0x4638fd35,
+0x6187f240,0xf7fc2260,0x4632fd2f,0xf2404638,0xf7fc6142,0x4638fd29,
+0x6177f240,0xf7fc2200,0x2315fd23,0x44462500,0xab1b932d,0x90bcf8cd,
+0x4638932b,0x4357f240,0xf240a92b,0x962c4255,0xf8cd952e,0x4c45a000,
+0x463847a0,0x617df240,0xf7fc462a,0x4638fd09,0x618bf240,0x7280f44f,
+0xfd02f7fc,0x0904f04f,0x240046a8,0xbfa82e0f,0x4d3b260f,0x94019400,
+0x94039402,0xb2b14638,0x46234622,0x462547a8,0x1c6be003,0x2d05b2dd,
+0x4638d01f,0xfd7cf7ff,0x63aff44f,0xf44f9301,0x21004382,0xf5a39302,
+0x22014381,0x91034604,0x91059304,0x46383316,0x92009908,0xfb48f7fd,
+0xf7ff4638,0xf897fd65,0x429c3fcd,0x4298dbdd,0x9b08dbdb,0xf240bb1b,
+0x463861ba,0xfcbcf7fc,0x61bbf240,0x4638b204,0xfcb6f7fc,0xb2a401a4,
+0x1489f344,0xf404fb04,0x0009f340,0x4300fb00,0x5f00f5b3,0xfa5fda07,
+0x2b04f388,0x0606ebc9,0x3e01d105,0xf5b3e003,0xdb084f80,0xf108444e,
+0xf1b80801,0xd0020f05,0x0959ea4f,0x2500e79d,0x71e6ea26,0x1f74f8c7,
+0x95004638,0x95029501,0xb2899503,0x462b462a,0x47a04c05,0xf7fd4638,
+0xe009fad3,0x1e00705d,0x0002288c,0x1e006fcd,0x0001ecf1,0xd82c2d04,
+0xf7ff4638,0x2301fd11,0xf44f9300,0x930163af,0x4382f44f,0xf5a39302,
+0x22004381,0x93044606,0x23464638,0x92039908,0xf7fd9205,0x4638fadd,
+0xfcfaf7ff,0x3fcdf897,0x429e4604,0x4298db01,0x4bbbda05,0x7096f44f,
+0x1c6b4798,0xf897b2dd,0x429e3fcd,0x429cdbd2,0xf1bbdbd0,0xf0400f01,
+0xf2408103,0x463861ba,0xfc42f7fc,0x61bbf240,0x46389015,0xfc3cf7fc,
+0x64aff44f,0x21009016,0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,
+0xf64fbf8c,0xb29474ff,0xb2991c4b,0xd1ef296e,0xf8ada923,0x4608408c,
+0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29474ff,
+0x4f02f821,0x031ef100,0xd1ed4299,0xf2404638,0xf7fc61b7,0xf04ffc0d,
+0x4606097d,0x0a01f04f,0x0b00f04f,0x905cf8cd,0xf10be0b5,0xfa5f0301,
+0xf1bbfb83,0xf0000f10,0x2600820f,0x2e04e001,0x4638d82a,0xfc90f7ff,
+0x92002201,0x9a169203,0xf44f9915,0x92054382,0x46802200,0x91049302,
+0x46384613,0x94019908,0xfa5ef7fd,0xf7ff4638,0xf897fc7b,0x46053fcd,
+0xdb014598,0xda054298,0xf44f4b7b,0x47987016,0xb2de1c73,0x3fcdf897,
+0xdbd44598,0xdbd2429d,0xf2404638,0xf7fc61b7,0xf410fbc7,0x46064f00,
+0xf1bad02c,0xf0000f00,0xf1a981d3,0xb2da0305,0x429a9b17,0x1e53d101,
+0xf1a2b2da,0xb2db036e,0xd9032b0f,0xf44f2000,0xe01464af,0xeb01a938,
+0xf5a30342,0x881c7398,0xf44fe058,0xfb044382,0x1399f303,0x73fef64f,
+0xbf8c4299,0x74fff64f,0x1c43b28c,0x4290b298,0xe047d1ef,0x5f00f5b0,
+0xf44fd311,0xfb044382,0x139af303,0x73fef64f,0xf109429a,0xbf940301,
+0xf64fb294,0xb2da74ff,0x0a00f04f,0x4638e032,0x01dff10d,0x02def10d,
+0x47984b4e,0x30dff99d,0x005b2202,0xb2dd3301,0x3b01b26b,0xf3f2fb93,
+0x033df1c3,0xe0def89d,0x2100b2d8,0xf44fe00d,0xfb044382,0x139af303,
+0x73fef64f,0xbf8c429a,0x74fff64f,0x1c4bb294,0x4281b299,0xea4fd1ef,
+0xf88d034e,0xeb0930de,0xf88d0300,0xb2da50df,0x905cf8cd,0xf4164691,
+0xf43f4f00,0xf1baaf46,0xf47f0f00,0xe157af42,0x02def10d,0x46384b31,
+0x01dff10d,0x4c304798,0xf44f2100,0x47a07000,0x46832100,0x47a02080,
+0xf1bb4682,0xd1040f00,0xf245482a,0xf7e87175,0xf1baffa7,0xd1040f00,
+0xf2454826,0xf7e87176,0x2300ff9f,0xf8032500,0x3301500a,0xd1f92b80,
+0x20def99d,0xf99d465b,0x463810df,0xa000f8cd,0x47a04c1d,0x61baf240,
+0xf7fc4638,0xf240fb0d,0x901961bb,0xf7fc4638,0x4629fb07,0xf5059018,
+0xf44f65af,0xfb054382,0x139af303,0x73fef64f,0xbf8c429a,0x75fff64f,
+0x1c4bb295,0x2946b299,0x9a07d1ef,0x0346f1a2,0xf44fe07c,0xfb054382,
+0x139af303,0x73fef64f,0xbf8c429a,0x75fff64f,0x2600b295,0x46c0e00c,
+0x1e005d75,0x0001ea45,0x1e00578d,0x0002299e,0x0001ec05,0xd82a2e04,
+0xf7ff4638,0xf44ffb6d,0x22014382,0x93029918,0x92009b19,0x3a019203,
+0x93044680,0x46139105,0x99084638,0xf7fd9501,0x4638f93b,0xfb58f7ff,
+0x3fcdf897,0x45984604,0x4298db01,0x4b99da05,0x7016f44f,0x1c734798,
+0xf897b2de,0x45983fcd,0x429cdbd4,0x4638dbd2,0x01dff10d,0x02def10d,
+0x47984b91,0xf99d4c91,0x465b20de,0x10dff99d,0xa000f8cd,0x47a04638,
+0x20dff99d,0x30def99d,0x32010052,0xf88db2d2,0xb25220df,0x2a00005b,
+0x30def88d,0x2320dd10,0x23189334,0xab369332,0xf2409330,0x92334356,
+0x46389300,0xf240a930,0x33014255,0x47a04c7e,0x30dff99d,0xd0072b7f,
+0x33fff109,0xf983fa1f,0x0f00f1b9,0xaf7df47f,0x2300f44f,0xab359335,
+0x2318932b,0x3308932d,0x932f2201,0x4356f240,0x922e922c,0x46389300,
+0xf240a92b,0x33014255,0x47a04c6e,0xf81a2603,0xf10d3006,0x2b0108ac,
+0x91a8f8df,0xf85bd10c,0x46383026,0xf2409335,0x93004356,0xf2404641,
+0x33014255,0xe014962e,0xf2401eb3,0x932e4556,0x46414638,0x4255f240,
+0x4357f240,0x4c5c9500,0x962e47a0,0x46389500,0xf2404641,0xf2404255,
+0x47c84357,0xb2de1cb3,0xd1d02e81,0x0800f04f,0x4456f240,0x0301f108,
+0x932ead2b,0x46389400,0xf2404629,0xf2404255,0x4e4d4357,0xf10847b0,
+0x932e0303,0x46389400,0xf2404629,0xf2404255,0x47b04357,0x93352300,
+0x80b8f8cd,0x46389400,0xf2404629,0xf2404255,0x4c424357,0x0802f108,
+0xf1b847a0,0xd1d30f7e,0x46596c7b,0xf44f6c98,0x4c3d7200,0x6c7b47a0,
+0x6c984651,0x47a02280,0x21034638,0xf7fc9a0e,0x4638f9e3,0x9a0f2121,
+0xf9def7fc,0x9a114638,0x41eaf240,0xf9e4f7fc,0x9a124638,0x41ebf240,
+0xf9def7fc,0x21554638,0xf7fc9a13,0x4638f9cd,0xf44f9a14,0xf7fc719c,
+0x4638f9c7,0xf2409a0a,0xf7fc6131,0x4638f9cd,0xf2409a0b,0xf7fc61d6,
+0x9b10f9c7,0xf0434638,0xb2920201,0x61daf240,0xf9bef7fc,0x46382101,
+0xfa0cf7fc,0xf7fc4638,0x4638f9ef,0x9a0c214c,0xf9a6f7fc,0x21f34638,
+0xf7fc9a0d,0xf44ff9a1,0x46386200,0xf2402300,0xf7fc414c,0x4638f9bf,
+0x4b122100,0x46384798,0x4b112100,0x46384798,0x4b102100,0x46384798,
+0xf2402300,0x2201413b,0xf9acf7fc,0x99094638,0x47984b0b,0xe8bdb039,
+0x46c08ff0,0x1e005d75,0x0001ea45,0x0001ec05,0x1e00705d,0x1e006fcd,
+0x1e005c15,0x1e007a89,0x1e007b0d,0x1e007559,0x1e007321,0x41ffe92d,
+0x460e4605,0x461c4617,0x238022e0,0x6182f44f,0xf984f7fc,0xf8d36cab,
+0xf0833120,0xf0130301,0xd0020801,0xf7ed6be8,0x68b2fd9d,0x3201b90a,
+0x6be8e00b,0xb29221dc,0xfb28f7ed,0x6be88972,0xf7ed21de,0xf240fb23,
+0x68f31201,0xb1a36be8,0xf7ed21d8,0x6872fb1b,0x00d26be8,0x21da3a7c,
+0xf7edb292,0x68f3fb13,0x93006be8,0x0111f106,0x463b4622,0xfcf4f7f1,
+0xf042e00a,0x21da0408,0xf7ed88b2,0x6be8fb03,0x462221d8,0xfafef7ed,
+0x21dc6be8,0xfc1af7ed,0xf8ad2400,0xe00c000e,0x4b152064,0x21dc4798,
+0xf7ed6be8,0x1c63fc0f,0x2c64b2dc,0x000ef8ad,0xf8bdd003,0x2b00300e,
+0x6be8d1ee,0x220021d8,0xfae0f7ed,0x0f00f1b8,0x6be8d002,0xfad2f7ee,
+0xf7ed6be8,0xf44ffa2f,0x28026182,0x2320bf14,0x22e02360,0xf7fc4628,
+0xe8bdf915,0x46c081ff,0x1e005d75,0x4ff0e92d,0xf5ad2280,0x46077d01,
+0xf2402300,0xf7fc6131,0x2300f905,0x46382280,0x6176f240,0xf8fef7fc,
+0xf8d36cbb,0xf0833120,0xf0130301,0x93040301,0x6bf8d102,0xfaa2f7ee,
+0x463821a5,0x2fd0f8b7,0xf8c6f7fc,0x4638218e,0x2fd2f8b7,0xf8c0f7fc,
+0x463821a2,0x2fd4f8b7,0xf8baf7fc,0x46382194,0x2fd6f8b7,0xf8b4f7fc,
+0x46382193,0x2fd8f8b7,0xf8aef7fc,0x463821a4,0x2fdaf8b7,0xf8a8f7fc,
+0x21a3ac10,0xf8b74638,0xf7fc2fdc,0x2100f8a1,0xf44f4620,0xf7e97280,
+0x2307fde1,0x33199373,0x93752540,0x78e2f50d,0xf2402318,0xf04f4656,
+0x94710980,0x4c689372,0x46389574,0xf2404641,0xf2404255,0x96004357,
+0x957247a0,0x46414638,0x4255f240,0x4357f240,0x91d0f8cd,0x47a09600,
+0x233822ff,0xf2404638,0xf7fc41a7,0x2300f897,0x6131f240,0x4638464a,
+0xf890f7fc,0xf7fc4638,0x22fffebb,0x46382301,0x6195f44f,0xf886f7fc,
+0x2501230a,0x31f6f88d,0x93653328,0x9366231e,0x7310f242,0x226c2400,
+0x46389300,0x73fbf50d,0x9564a964,0xf88d9467,0xf7ff41a0,0xf240fedf,
+0x463841ab,0xf848f7fc,0x2006f3c0,0xf2409005,0x463861da,0x5280f44f,
+0xf7fc4623,0x22e0f85f,0xf44f464b,0x46386182,0xf858f7fc,0xf7fc4638,
+0xf240fb7f,0x463841a4,0xf82ef7fc,0x90024621,0xf7fd4638,0x9b05f9d5,
+0x4f78f8c7,0x9303b2db,0x31edf88d,0x51ecf88d,0x46384b30,0x46294798,
+0x4b2f900c,0x47984638,0x46384b2e,0x47984629,0x41eaf240,0xf7fc4638,
+0xf240f80f,0x900941eb,0xf7fc4638,0x2155f809,0x46389008,0xfd2cf7fc,
+0x719cf44f,0x46389007,0xfd26f7fc,0x90062105,0xf7fc4638,0xf89df841,
+0xb12b31ec,0xf99d4638,0xf7fd11ed,0xe003fa01,0xa9794638,0x47984b1a,
+0x4638214c,0xfd10f7fc,0x900b21f3,0xf7fc4638,0x6c7bfd0b,0x689b900a,
+0xf5a36a5b,0x3b0d639e,0xd8092b01,0x21f34638,0x23102218,0xfcc0f7fc,
+0x21f34638,0xe0022202,0x21f34638,0x46132218,0xfcb6f7fc,0xf7ed6bf8,
+0x2802f8f9,0x4638d10e,0x2230214c,0xe00d2320,0x1e006fcd,0x1e00735d,
+0x1e007b0d,0x1e007a89,0x1e0075f9,0x214c4638,0x23102230,0xfc9cf7fc,
+0x21004638,0xf806f7fc,0x6131f240,0xf7fb4638,0x2215ffa7,0xf2404613,
+0x46836131,0xf7fb4638,0xf240ffc1,0x463861d6,0xff9af7fb,0x22032300,
+0x61d6f240,0x46384682,0xffb4f7fb,0x61daf240,0xf7fb4638,0xf240ff8d,
+0x228f61da,0x46384681,0xff9ef7fb,0x936cab7f,0x936d2301,0x936e3306,
+0x31edf99d,0xf5034638,0x936f7310,0x93702320,0x4356f240,0xa96c9300,
+0xf2403301,0x4c974255,0x9a7f47a0,0x00d24638,0xf240927f,0xb2926171,
+0xff6ef7fb,0x46382103,0xfc8af7fc,0x46062121,0xf7fc4638,0x2103fc85,
+0x46802218,0xf7fb4638,0x4638ff53,0x221e2121,0xff4ef7fb,0x462c2500,
+0xf7fe4638,0xab50ffe9,0x182d50e0,0xf44f4b84,0x34047061,0x2c404798,
+0x2000d1f2,0x4601112a,0x58cbab50,0x42983104,0x4618bfb8,0xbfa8429a,
+0x2940461a,0x1e83d1f4,0x3fcdf887,0xf8872103,0x46382fce,0xf7fb4632,
+0x2121ff27,0x46424638,0xff22f7fb,0xf2404638,0x9a0941ea,0xff28f7fb,
+0xf2404638,0x9a0841eb,0xff22f7fb,0x46382155,0xf7fb9a07,0x4638ff11,
+0x719cf44f,0xf7fb9a06,0x4638ff0b,0x6131f240,0xf7fb465a,0x4638ff11,
+0x61d6f240,0xf7fb4652,0xf049ff0b,0xb2920201,0xf2404638,0xf7fb61da,
+0x2101ff03,0xf7fb4638,0x4638ff51,0xff34f7fb,0x4638214c,0xf7fb9a0b,
+0x21f3feeb,0x9a0a4638,0xfee6f7fb,0x6200f44f,0x46382300,0x414cf240,
+0xff04f7fb,0x46382100,0x47984b50,0x46382100,0x47984b4f,0x46382100,
+0x47984b4e,0x23002201,0xf2404638,0xf7fb413b,0x990cfef1,0x4b4a4638,
+0x4b4a4798,0x47984638,0x41a4f240,0x4638900d,0xfec2f7fb,0x413bf240,
+0x4638900f,0xfebcf7fb,0x1080f3c0,0xb120900e,0xf50d4638,0x4b4071f7,
+0x46384798,0xf834f7fd,0x21004638,0xf858f7fd,0xf88d2301,0x9b0331e2,
+0x2660f64e,0x31e3f88d,0xf04f9b05,0xb2dd0800,0x46b346a9,0x210046c2,
+0x240123db,0x46389300,0xf50d460b,0x940172ed,0xffe2f7fe,0x936cab7f,
+0x936e2318,0x93703308,0x936f335f,0x4356f240,0x9300946d,0x191ba96c,
+0xf2404638,0x4c1f4255,0x9b7f47a0,0x010bf343,0xf64eb911,0xe00a2260,
+0xf3432264,0xfb03330b,0xfb93f302,0xea83f3f1,0xeba272e3,0x42b272e3,
+0xf04fdc02,0xe0060a00,0x0301f10a,0xfa83fa5f,0x0f02f1ba,0xf89dd016,
+0x455a31e3,0xf89dbfdc,0x469351e3,0xb2db3b04,0x0f80f013,0x31e3f88d,
+0xf108d108,0xfa5f0301,0xf1b8f883,0xd0010f04,0xe7ac4616,0xd017454d,
+0x0309ebc5,0xd1112b10,0xe0101d2b,0x1e00705d,0x1e005d75,0x1e007a89,
+0x1e007b0d,0x1e007559,0x1e007321,0x1e00735d,0x1e0073d9,0xb2dd1cab,
+0x2660f64e,0x0800f04f,0x51e3f88d,0x46c146b2,0x23db2100,0x93002401,
+0x460b4638,0x72edf50d,0xf7fe9401,0xab7fff6d,0x2318936c,0x3308936e,
+0x335f9370,0xf240936f,0x946d4356,0xa96c9300,0x4638191b,0x4255f240,
+0x47a04c62,0xf3439b7f,0xb181010b,0xf3432264,0xfb03330b,0xfb93f302,
+0xea83f3f1,0xeba272e3,0xf5b272e3,0xda047ffa,0x51e3f89d,0xf64ee024,
+0x42b22260,0xf04fdc02,0xe0060900,0x0301f109,0xf983fa5f,0x0f02f1b9,
+0xf89dd016,0x455231e3,0xf89dbfbc,0x469251e3,0xb2db3b01,0x0f80f013,
+0x31e3f88d,0xf108d108,0xfa5f0301,0xf1b8f883,0xd0010f05,0xe7a74616,
+0x23db2400,0x46389300,0x46214623,0x72edf50d,0x51e3f88d,0xf7fe9401,
+0x9b0eff13,0x4638b123,0x71f7f50d,0x47984b3c,0x990d4638,0x47984b3b,
+0x46389b0f,0x4160f403,0xff5ef7fc,0xf7fc4638,0x9b02ff33,0xf4034638,
+0xf7fc4160,0x2301ff55,0xf44f4638,0x22ff6195,0xfdc4f7fb,0xb9139b04,
+0xf7ed6bf8,0x6bf8f9e3,0xfeccf7ec,0x280222e0,0x2320bf14,0xf44f2360,
+0x46386182,0xfdb2f7fb,0x46382280,0xf2404613,0xf7fb6131,0xf44ffdab,
+0x46385280,0xf2404613,0xf7fb61da,0xf44ffda3,0x46387200,0xf2404613,
+0xf7fb6131,0xf44ffd9b,0x46387280,0xf2404613,0xf7fb6131,0xf241fd93,
+0x22010311,0x463854fa,0x320521a5,0xfd64f7fb,0x218e4638,0xf7fb220f,
+0x4638fd5f,0x462221a2,0xfd5af7fb,0x21944638,0xf7fb22ff,0x4638fd55,
+0x22ff2193,0xfd50f7fb,0x21a44638,0xf7fb220c,0x4638fd4b,0x226621a3,
+0xfd46f7fb,0x7d01f50d,0x8ff0e8bd,0x1e00705d,0x1e0075f9,0x1e007321,
+0x4b1fb570,0x6bc04604,0x4798460d,0x481db120,0x113af248,0xf9b0f7e8,
+0xf7ec6be0,0xf405fe63,0xf5b34370,0xbf145f80,0x23012302,0xd0044298,
+0xf2484814,0xf7e8113b,0x4620f99f,0xf7fd4629,0x8da1fba1,0xf7fd4620,
+0x4620f9c1,0xf910f7fc,0xf7fc4620,0x6be0f881,0xf912f003,0x6be0b978,
+0xfbf2f7ec,0x4620b958,0xf9d4f7fe,0xf7ff4620,0x4620fc19,0xfc9cf7fe,
+0xf7fc4620,0xbd70fd09,0x0001e955,0x0002299e,0x4ff0e92d,0x46054b51,
+0xf890b093,0x4798002c,0x4d28f895,0xbb244683,0xf7ec6be8,0x2802fe1f,
+0xf04fd108,0xf8ad0304,0xf04f3038,0xf8ad030c,0xe009303a,0x0307f04f,
+0x3038f8ad,0x030ff04f,0x303af8ad,0x030ef04f,0x303cf8ad,0xa90e4628,
+0x403ef8ad,0x47984b3e,0x21964628,0x47984b3d,0xf8b5e1f9,0xb2832f6e,
+0xd104429a,0x46b92700,0x970346b8,0xf640e05c,0x429813c3,0xf995d838,
+0x2b043f9e,0xf9b5dc0c,0xf9b59066,0xf9b58068,0xf895706a,0xf8952f61,
+0xf8953f62,0xe01a1f63,0xdc0c2b36,0x9060f9b5,0x8062f9b5,0x7064f9b5,
+0x2f5ef895,0x3f5ff895,0x1f60f895,0xf9b5e00b,0xf9b5906c,0xf9b5806e,
+0xf8957070,0xf8952f64,0xf8953f65,0xf4421f66,0xea425200,0xea421203,
+0x46282281,0x413ef240,0xf7fbb292,0xe01bfc8d,0x43c8f241,0xd8064298,
+0x9072f9b5,0x8074f9b5,0x7076f9b5,0xf241e010,0x42986344,0xf9b5d806,
+0xf9b59078,0xf9b5807a,0xe005707c,0x907ef9b5,0x8080f9b5,0x7082f9b5,
+0xf8a52301,0x9303bf6e,0x46284b09,0x23074798,0x3319930b,0xab10930d,
+0x23019309,0x3b01930a,0xe016930c,0x1e00679d,0x1e0075f9,0x1e007321,
+0x1e0070f9,0x4356f240,0x46289300,0xa9093301,0x4255f240,0x47a04cbb,
+0x33019b0c,0x9b10930c,0x93103301,0x2b3f9b10,0x22ffd9ec,0x46284613,
+0x41a5f240,0xfc56f7fb,0xf2404628,0xf44f41a5,0xf44f42e0,0xf7fb43a0,
+0x2300fc4d,0xf2404628,0xf44f41a5,0xf7fb62e0,0x223ffc45,0x4628231f,
+0x41a6f240,0xfc3ef7fb,0x23002201,0xf2404628,0xf7fb5103,0x2204fc37,
+0x46284613,0x5103f240,0xfc30f7fb,0x46132210,0xf2404628,0xf7fb5103,
+0xf240fc29,0x46281121,0xf92af7fc,0x02f3f000,0x1121f240,0xf0424628,
+0xf7fb0201,0x214cfbf5,0x46282202,0xf8f8f7fc,0xf2404628,0xf44f41f3,
+0xf7fb5280,0x2251fc05,0xf44f4628,0xf7fb718a,0x214cfbe3,0x23002201,
+0xf7fc4628,0x2238f8cd,0x46282300,0x413cf240,0xfbfcf7fb,0x4200f44f,
+0x46284613,0x41a6f240,0xfbf4f7fb,0x46282300,0x6195f44f,0x427ff44f,
+0xfbecf7fb,0x46282201,0x6195f44f,0xfbccf7fb,0x2300227f,0xf2404628,
+0xf7fb41a4,0x2300fbdf,0xf2404628,0xf44f41a5,0xf7fb62e0,0xf44ffbd7,
+0xf2404260,0xf44f41a4,0x46284300,0xfbcef7fb,0xf7fb4628,0x2101fef5,
+0x4b6d4628,0xf44f4798,0x46135280,0xf2404628,0xf7fb414c,0xae04fbbf,
+0x46282300,0x414df240,0x4280f44f,0xfbb6f7fb,0x46302214,0x6cac4963,
+0xf8f0f7e9,0xf8d36cab,0xf0133120,0xd0040f01,0xf646485f,0xf7e731f3,
+0x4633ffff,0x21006c28,0xf7ed2214,0xf04fffcf,0xf8a40300,0xf44f3568,
+0xf8a47380,0xf04f37c0,0xf8a40341,0xf641350c,0xf8a42302,0xf04f3514,
+0xf8a40300,0xf8a43508,0xf8a4350a,0xf04f354c,0xf8a40314,0xf640356a,
+0xf8a40326,0xf04f3568,0xf8a40300,0x26003500,0x03d0f04f,0x3502f8a4,
+0x200ae002,0x47984b45,0x2e1f3601,0xf8b4d009,0xf013350e,0xd1f40f80,
+0x200ae003,0x47984b3f,0x2600e000,0x2e0b3601,0xf8b4d009,0xf413350e,
+0xd0f26f80,0x200ae003,0x47984b38,0x2600e000,0x2e0b3601,0xf8b4d004,
+0xf4133690,0xd1f27f80,0xf2404628,0xf7fb41ab,0xf410fb27,0xd0094f00,
+0x03fff000,0x46283b20,0x41a6f240,0xb29b223f,0xfb3cf7fb,0x46282400,
+0x414cf240,0x5280f44f,0xf7fb2300,0xf44ffb33,0xf8a57340,0x46284f6e,
+0x6195f44f,0x427ff44f,0xfb28f7fb,0x9309ab11,0x930a2301,0x2389ea4f,
+0x1a88eb07,0x0947ea4f,0xf503940c,0x46a04600,0x3780f44f,0xf2f7fb96,
+0x4356f240,0x93009211,0x33014628,0xf240a909,0x4c0e4255,0x9b0c47a0,
+0x0801f108,0xf1b83301,0x930c0f40,0x444f4456,0x9b03d1e8,0xf241b91b,
+0x5ceb0311,0x4628b113,0xf9e4f7fc,0xf44f4628,0xf7fc4160,0xb013fc7d,
+0x8ff0e8bd,0x1e006fcd,0x1e007415,0x000228ac,0x0002299e,0x1e005d75,
+0x4ff0e92d,0xb0892300,0x460c4616,0x8050f8dd,0x46829306,0x9058f8dd,
+0xfbecf7ec,0x0301f006,0x46059300,0x6c404621,0x9b154642,0xffc4f7f2,
+0x28004607,0x81a4f040,0x2b039b13,0xa806d904,0x22049912,0xf802f7e9,
+0x9a062e7e,0xd80bd063,0xd04f2e28,0x2e01d805,0xd31cd033,0xd03c2e10,
+0x2e29e016,0xe013d04c,0xf0002ebc,0xd8068155,0xd0592e81,0xd05a2e82,
+0xd04e2e80,0x2ec4e008,0x8173f000,0xf0002ec5,0x2ebe8160,0x8147f000,
+0x0716f06f,0x4628e174,0xf10da905,0xf7fb021f,0x4607fda9,0xf0402800,
+0xf89d816b,0x9a05301f,0xbf142b00,0x4300f04f,0x43132300,0x3000f8c8,
+0xf022e15e,0x29ff4100,0x21ffbfa8,0xb2c94628,0xf7fc0fd2,0x4607fedd,
+0xac02e152,0x220c4639,0xf7e84620,0x2301ff93,0x46214640,0x9302220c,
+0xe1409703,0xf7fb4628,0xf8c8fa77,0xe13f0000,0x2b011c53,0x2a01d902,
+0x8138f040,0x46114628,0xfa6ef7fb,0x9706e134,0xf995e002,0x93063dea,
+0xa9064640,0xe1262204,0x2deaf885,0x6be8e128,0xfbfcf7ed,0x413ef240,
+0xf7fb4628,0xf240fa25,0x46825103,0xf7fb4628,0x2204fa1f,0xf2404613,
+0x46835103,0xf7fb4628,0x4628fa39,0x413ef240,0x5200f44f,0xf7fb463b,
+0x220ffa31,0x46282308,0x413ef240,0xfa2af7fb,0x23a022f0,0xf2404628,
+0xf7fb413e,0xf44ffa23,0xf44f52e0,0x46286340,0x413ef240,0xfa1af7fb,
+0x413cf240,0xf7fb4628,0x2238f9f3,0xf2402320,0x4681413c,0xf7fb4628,
+0x220ffa0d,0x46282304,0x1121f240,0xfed0f7fb,0x7200f44f,0x46284613,
+0x5103f240,0xf9fef7fb,0x7200f44f,0x4628463b,0x5103f240,0xf9f6f7fb,
+0x413bf240,0xf7fb4628,0x2204f9cf,0xf2404613,0x4606413b,0xf7fb4628,
+0x2204f9e9,0xf2404628,0x463b413c,0xf9e2f7fb,0x7200f44f,0x46284613,
+0x5103f240,0xf9daf7fb,0xf2404628,0xf44f5103,0x463b7200,0xf9d2f7fb,
+0x46282328,0x5105f240,0x72fff64f,0xf9caf7fb,0xf2404628,0xf64f5104,
+0x463b72ff,0xf9c2f7fb,0x46282220,0x5103f240,0xf7fb4613,0x463cf9bb,
+0x4b4b2001,0x46284798,0x5103f240,0xf990f7fb,0x0f20f010,0x2000bf14,
+0x34012001,0xd0022c02,0xd0ed2800,0xb908e002,0xe0184604,0x5106f240,
+0xf7fb4628,0xf240f97d,0x46045107,0xf7fb4628,0x0424f977,0xf44f0c24,
+0xeb0461a1,0x46284400,0xf96ef7fb,0xf2404628,0xf7fb5109,0x2204f969,
+0x0302ea06,0xf2404628,0xf7fb413b,0x4628f983,0x413ef240,0xf7fb4652,
+0x2204f963,0x0302ea0b,0xf2404628,0xf7fb5103,0x2238f975,0x0302ea09,
+0xf2404628,0xf7fb413c,0xb220f96d,0x6166f246,0x47984b24,0x61f4f247,
+0x47984b23,0x6be81284,0xfd84f7ec,0x44fcf504,0x126434b1,0xe7039406,
+0x33fff04f,0xf895e027,0x4639002c,0x4c1b463a,0x42835913,0x2314d104,
+0x4303fb01,0xe0046858,0x32143101,0xd1f2290e,0x4b152000,0x90064798,
+0x2a08e012,0x1e53dc16,0xd0024213,0x0701f06f,0xf8dae012,0xf8a53848,
+0x68182d96,0xfaf6f7fb,0xf8b5e00a,0x93063d96,0xa9064640,0xf7e8464a,
+0xe001fe69,0x071cf06f,0xb0094638,0x8ff0e8bd,0x1e005d75,0x1e0044d1,
+0x1e0044a9,0x1e00cc2c,0x1e007ca1,0x4605b570,0xfa28f7ec,0x3054f890,
+0x2b004604,0x4628d052,0xffcef7eb,0x2d78f8d4,0x6c63b13a,0x370cf8d3,
+0x69621a9b,0x42936852,0x4628d30c,0xfcdcf002,0x4620b940,0xf9aaf7fb,
+0x6c63b120,0x370cf8d3,0x3d78f8c4,0x69626c63,0x170cf8d3,0x3dc4f894,
+0xf8d4b933,0x68d23dc0,0x0301ebc3,0xd3074293,0xf0024628,0xb918fcc1,
+0xf7eb4628,0xb1b0ffa1,0xf0026be0,0xb918fcb9,0xf7eb6be0,0xb190ff99,
+0x3258f894,0x6c63b1b3,0x225cf8d4,0x370cf8d3,0x2b051a9b,0x2300d90e,
+0x3258f884,0x4628e00a,0xff88f7eb,0x4620e7e4,0xf8942101,0xf7fb202c,
+0xe7e5fae1,0x46c0bd70,0x47f0e92d,0x46056803,0x78db18c3,0xf0034691,
+0xf44f007f,0xfb0073fa,0x468af203,0x19ab2600,0x2b007d5b,0x00f3d07f,
+0xf04fb2d9,0x29200800,0x2907d879,0x6300f041,0x2920d901,0xf443d102,
+0xe0016300,0x53c0f443,0x0f00f1ba,0xf443d002,0xe0016c80,0x7c00f443,
+0x0f00f1b9,0xf44cd001,0xf01c0c00,0xd0266700,0x0f00f41c,0x63e0f40c,
+0x0a1bd010,0x2b013b04,0xf00c4c2e,0xd8040e7f,0xfb0e2314,0x68db4303,
+0x2314e017,0x4303fb0e,0xe012689b,0x3b040a1b,0x4c262b01,0x0e7ff00c,
+0x2314d804,0x4303fb0e,0xe006685b,0xfb0e2314,0x591bf303,0xf00ce001,
+0x4293037f,0xb337d92a,0x0f00f41c,0x63e0f40c,0x0a1bd010,0x2b013b04,
+0xf00c4c18,0xd8040e7f,0xfb0e2314,0x68da4303,0x2314e017,0x4303fb0e,
+0xe012689a,0x3b040a1b,0x4c102b01,0x0e7ff00c,0x2314d804,0x4303fb0e,
+0xe006685a,0xfb0e2314,0x591af303,0xf00ce001,0x4660027f,0x0301f108,
+0xf883fa5f,0xf1b81c4b,0xb2d90f08,0x3601d183,0xf47f2e10,0xe8bdaf78,
+0x46c087f0,0x1e00c744,0x29287e43,0xf043bf0c,0xf0230301,0x76430301,
+0x46c04770,0xb5104603,0x22284608,0xf7e84619,0xbd10fd4d,0x43f0e92d,
+0x4605b09d,0x46914688,0x0003f10d,0x226d2100,0xfd20f7e8,0x2000682c,
+0x182be00d,0xf0017919,0x2a6c027f,0x4b23d806,0xb11b5c9b,0x18b3ae1c,
+0x1c6df803,0x42a03001,0x2600d1ef,0xe0144637,0x0307eb08,0xf003791b,
+0x2c6c047f,0x481ad904,0x119bf240,0xfc38f7e7,0x1913aa1c,0x2c6df813,
+0x19abb112,0x3601711a,0xf8d83701,0x429f3000,0x602ed3e6,0x20004629,
+0x0300eb08,0x7d5b7d4a,0x401a3001,0x3101754a,0xd1f52810,0xb1596829,
+0x0f00f1b9,0x2200d00a,0xf99318ab,0x2b003004,0x3201db04,0xd1f7428a,
+0xe0002000,0xb01d2001,0x83f0e8bd,0x1e00c634,0x00022b1b,0x43f0e92d,
+0x4607b08d,0x505cf89d,0x4b174816,0x6058f89d,0xbf082d14,0xac024618,
+0xbf142900,0x46804688,0xf89d4621,0xf7ff9050,0xb14eff81,0xd1072d14,
+0x23004622,0x32017593,0x030ff104,0xd1f8429a,0xa8029b15,0x46399300,
+0x96012200,0x4c07464b,0x463847a0,0x22004641,0xff70f7ff,0xe8bdb00d,
+0x46c083f0,0x1e00c9d8,0x1e00c594,0x0001ed85,0xb09db530,0x460d4604,
+0x0003f10d,0x226d2100,0xfc88f7e8,0xe0112000,0x79191823,0x027ff001,
+0xd80a2a6c,0x5c9b4b1f,0xab1cb13b,0xf812189a,0xea413c6d,0xf8020303,
+0x30013c6d,0x42986823,0x2000d3ea,0x182be011,0xf0017919,0x2a6c027f,
+0x4b14d80a,0xb13b5c9b,0x189aab1c,0x3c6df812,0x0303ea41,0x3c6df802,
+0x682b3001,0xd3ea4298,0x60232300,0xf10d4618,0x5cc10303,0x6823b161,
+0x330118e2,0x71112b10,0xd9056023,0xf44f4806,0xf7e771bc,0xe002fb81,
+0x286d3001,0xb01dd1eb,0x46c0bd30,0x1e00c634,0x00022b1b,0x46c04770,
+0x46c04770,0x460cb510,0xf890b111,0xe0012078,0x2079f890,0x3074f890,
+0xf1131a9b,0xbf4831ff,0x01dff103,0x031ff001,0x409a2201,0xeb00114b,
+0x6d1b0383,0xd007421a,0x6f03b11c,0x67033b01,0x6ec3e002,0x66c33b01,
+0x46c0bd10,0x460cb510,0xf890b111,0xe00120d7,0x20d8f890,0x30d4f890,
+0xf1131a9b,0xbf4832ff,0x022ff103,0x0101f002,0xb2c90089,0x408b230f,
+0x0262eb00,0x20b4f892,0x410b4013,0xb12cb2d9,0x30d0f8d0,0xf8c01a5b,
+0xe00430d0,0x30ccf8d0,0xf8c01a5b,0xbd1030cc,0xf890b510,0x468ce186,
+0x0207f00e,0x40912101,0x0301f00c,0x46044093,0x00deeb00,0x2180f890,
+0xea01b2c9,0xea220303,0x43130201,0x0f2ff1be,0x3180f880,0x2200d101,
+0xf10ee002,0xb2da0301,0x3187f894,0x2186f884,0xfa5f4463,0xb2d3fe83,
+0x002ff1b3,0x1c58bf48,0x0107f000,0x408a2201,0x03e0eb04,0x3180f893,
+0xe187f884,0x410b4013,0x030eebc3,0x3187f884,0x317cf8d4,0x3ffff1b3,
+0x3301d002,0x317cf8c4,0x46c0bd10,0xf890b172,0xf01330d6,0xd0040f01,
+0xf8931843,0x4b092097,0x7902e001,0xf8534b08,0xe00a0022,0x3077f890,
+0xb11b4a05,0xf8931843,0xe0003025,0xf8527903,0x47700023,0x1e00d148,
+0x1e00d060,0x18c96883,0xf8917913,0xf3c32075,0x429a03c1,0x2000d001,
+0xf891e005,0xf1d33076,0xbf380001,0x47702000,0x47f0e92d,0x9020f8dd,
+0x4615460e,0x9f09469a,0x802cf8dd,0xb9204604,0xf2414855,0xf7e71186,
+0x68a3fa9b,0x0200f04f,0xf8a818f0,0xf8902000,0x1e1c30a8,0x2401bf18,
+0xf890b15c,0xf01330d6,0xd0060f10,0x0301f023,0x2077f880,0x30d6f880,
+0xf8902400,0x703b3162,0x2162f890,0x701a9b0a,0xf64f882b,0xea0372e7,
+0x802a0202,0x3075f890,0xf00300db,0x431a0318,0x0c520452,0xb9a4802a,
+0x1076f890,0x3046f890,0xd3034299,0xb2d93b01,0x1076f880,0x791a1843,
+0xf8534b36,0x46223022,0x3000f8ca,0xff7af7ff,0xf890e05d,0xf8903085,
+0x2b0010d5,0xf44fbf14,0x24000400,0x68db6803,0xd10d2b01,0x30eaf890,
+0x0f01f013,0xf890d024,0xea6f10e9,0xea6f4342,0x24004353,0xe01b802b,
+0xd1192b02,0x316cf8b0,0x0f01f013,0xf890d014,0xb92b3174,0x1165f890,
+0x3163f890,0xe005703b,0x3164f890,0x1166f890,0x703b2400,0xea6f882b,
+0xea6f4343,0x802b4353,0x30a8f890,0xd3034299,0xb2d93b01,0x10d5f880,
+0x30eef890,0xf8b8b12b,0xf0433000,0xf8a80301,0x180b3000,0x2086f893,
+0xf8534b0d,0x43233022,0x3000f8ca,0x68db6803,0xd1052b02,0x10d5f890,
+0xf7ff2201,0xe002ff1f,0xf7ff2201,0xf8c9ff1b,0xe8bd0000,0x46c087f0,
+0x00022b3d,0x1e00d060,0x1e00d148,0x460eb570,0x4010f89d,0xb9204605,
+0xf6404811,0xf7e77125,0x68a8f9e3,0x1830b9d4,0x30eaf890,0x0f01f013,
+0x6fc3bf1c,0xf890601c,0xf02330ea,0xf8800301,0xf8b030ea,0xf013316c,
+0xbf1c0f01,0x601c6fc3,0x316cf8b0,0x0301f023,0x316cf8a0,0x46c0bd70,
+0x00022b3d,0x41f0e92d,0xf8904698,0x461630d5,0xf89318c3,0x4b3e2086,
+0xf8134604,0x460f3022,0x057ff003,0x3083f890,0xf890b953,0xb93b3084,
+0x3085f890,0x4837b123,0x4143f640,0xf9a4f7e7,0x30d5f894,0x70332f01,
+0x2d07d121,0x6823d10b,0x3b0168db,0xd8112b01,0x3085f894,0xd1532b00,
+0x3083f894,0x2d0fe007,0xf894d108,0x2b003085,0xf894d14a,0x2b003084,
+0xe02fd046,0x30a8f894,0x20d5f894,0x429a3b01,0x1c53d03e,0xf1b7e014,
+0xd1393fff,0x20d5f894,0xd0352a00,0x68db6823,0x2b013b01,0x2d08d80a,
+0x2a08d108,0x2300dc01,0xf1a2e002,0xb2db0308,0xe0117033,0x1085f894,
+0x2d07b149,0x2d0fd00c,0x4812d00a,0x4163f640,0xf95af7e7,0x1e53e004,
+0xe0027033,0xe0002101,0x78332100,0xf89318e3,0x4b092086,0x0022f853,
+0x0000f8c8,0xf440b111,0xe0010300,0x0300f420,0xf8c82001,0xe0003000,
+0xe8bd2000,0x46c081f0,0x1e00d148,0x00022b3d,0x41f0e92d,0xf8904698,
+0x46173076,0x791a18c3,0x46044b3a,0x5022f853,0x3083f890,0xb953460e,
+0x3084f890,0xf890b93b,0xb1233085,0xf6404834,0xf7e72153,0xf894f91d,
+0x2e013076,0xd128703b,0x6f00f015,0xf005d01b,0x2b07037f,0x6823d10c,
+0x3b0168db,0xd8122b01,0x3083f894,0xf894b17b,0x2b003085,0xe00ad033,
+0xd1082b0f,0x3084f894,0xd03f2b00,0x3085f894,0xd13b2b00,0xf894e027,
+0xf8943046,0x3b012076,0xd033429a,0x703b1c53,0xf1b6e01b,0xd12d3fff,
+0x2085f894,0xf015b172,0xd0056f00,0x037ff005,0xd00e2b07,0xd00c2b0f,
+0xf44f4813,0xf7e76127,0xe006f8db,0x3076f894,0x3b01b1c3,0x703b4611,
+0x2100e002,0x2101e000,0x18e3783b,0x4b09791a,0x0022f853,0x0000f8c8,
+0xf440b111,0xe0010300,0x0300f420,0xf8c82001,0xe0003000,0xe8bd2000,
+0x46c081f0,0x1e00d060,0x00022b3d,0x4b0eb510,0x0080f890,0x490d468e,
+0xbf082800,0x2a004619,0x2015bf14,0xe0052000,0x3020f851,0xd0094573,
+0xb2d81c43,0xd9f72831,0xf6404805,0xf7e7119f,0x2000f89b,0x46c0bd10,
+0x1e00d4d8,0x1e00d5a0,0x00022b3d,0x2000b510,0xf8534b07,0x428b3020,
+0x3001d008,0xd1f72811,0xf2404804,0xf7e751ad,0x2000f883,0x46c0bd10,
+0x1e00d148,0x00022b3d,0x2000b510,0xf8534b07,0x428b3020,0x3001d008,
+0xd1f7281d,0xf2404804,0xf7e75197,0x2000f86d,0x46c0bd10,0x1e00d060,
+0x00022b3d,0x2400b570,0xf8c04605,0xf8c040e0,0xf5004168,0x300170b8,
+0x22034621,0xf91ef7e8,0x416ff885,0x416ef885,0x46c0bd70,0x4604b510,
+0xffe8f7ff,0x3174f894,0x0301f1c3,0x2b01b2db,0x3174f884,0xf8b4d106,
+0xf013316c,0xbf080310,0x3174f884,0x46c0bd10,0x2400b570,0xf8c04605,
+0xf8c040e0,0x462140dc,0x00e4f100,0xf7e82203,0xf885f8f5,0xf88540e7,
+0xbd7040e8,0x43f7e92d,0x2076f890,0x3046f890,0x429a4605,0xd3034689,
+0xf8803b01,0xe2e13076,0xd00229ff,0x1076f885,0x1883e2e8,0x4bb2791a,
+0x2022f853,0x3082f890,0xf012b163,0xd0096f00,0x037ff002,0xd9052b01,
+0x30d6f890,0x0310f023,0x30d6f880,0xf04f4628,0xf10d31ff,0x466b0207,
+0xfec2f7ff,0xf0002800,0x682b8126,0x203ef893,0x2a01b112,0xe10dd011,
+0xf8956cea,0x6eeb1079,0xbf944291,0x0301ebc3,0x0302ebc3,0x207bf895,
+0xbf344293,0x20012000,0xf895e103,0x2b033160,0x4610d901,0xf8d5e0fe,
+0xf1b33118,0xd1043fff,0xf6404892,0xf7e621a8,0xf895ffcf,0x18eb3076,
+0x4b8d791a,0x1022f853,0x3085f895,0x6f00f011,0x2b00d030,0xf44fbf14,
+0x23000300,0xf413430b,0xf8950f00,0xd0100080,0x4a85b138,0x017ff001,
+0xfb012314,0x68da2303,0x4a81e017,0x017ff001,0xfb012314,0x689a2303,
+0xb138e00f,0xf0014a7c,0x2314017f,0x2303fb01,0xe006685a,0xf0012214,
+0xfb03037f,0x4a76f302,0xf44f589a,0xfbb273fa,0xe001f7f3,0x077ff001,
+0xf0119900,0xd0276f00,0x0f00f411,0x0080f895,0xf8dfd00e,0xf001c1b4,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc194f8df,0x027ff001,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f6f3,0x067ff001,0x30fcf8d5,
+0xd008428b,0x3100f8d5,0x3ffff1b3,0xf04fbf1c,0xf8c533ff,0xf8d53100,
+0xf0122114,0xd0276f00,0x0f00f412,0x0080f895,0xf8dfd00e,0xf002c13c,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc11cf8df,0x027ff002,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f4f3,0x047ff002,0xd90142b7,
+0xd20642a6,0x40f4f8d5,0x33fff04f,0x3118f8c5,0xf8d5e00f,0xebc63118,
+0xfb030107,0xf8d5f301,0xebc400f4,0xfb000206,0xebc43202,0xfbb20307,
+0x682bf4f3,0x203ff893,0x40932301,0xd904429c,0xf640482a,0xf7e621c8,
+0xf8d5feff,0xf1b00100,0xd00c3fff,0xf8d56829,0x684b2104,0x370cf8d3,
+0x6c8a1a9b,0xd2024293,0xbf284284,0xf8d54604,0xfb0630f4,0xfb03f204,
+0x429af307,0x2000bf94,0xe0062001,0xf44f4819,0xf7e6612e,0x2000fedd,
+0xb140e009,0x3007f89d,0x3076f885,0xf3c39b00,0xf88553c0,0xf0103085,
+0xf0400fff,0xf04f8193,0xf88d33ff,0x682b3007,0x403ef893,0x2c01b114,
+0xe161d018,0x2078f895,0x42936ceb,0x4621d201,0x6f2be008,0x0302ebc3,
+0x207af895,0xbfcc4293,0x21012100,0xe15bb2cc,0x1e00d060,0x00022b3d,
+0x1e00c744,0x3118f8d5,0x3ffff1b3,0x48a5d104,0x3103f640,0xfea0f7e6,
+0x6cea682b,0x429a6c5b,0x81a3f0c0,0x46214628,0x0207f10d,0xf7ff466b,
+0x2800fd5b,0x8199f000,0x3076f895,0x791a18eb,0xf8534b99,0xf8951022,
+0xf0113085,0xd0306f00,0xbf142b00,0x0300f44f,0x430b2300,0x0f00f413,
+0x0080f895,0xb138d010,0xf0014a90,0x2314017f,0x2303fb01,0xe01768da,
+0xf0014a8c,0x2314017f,0x2303fb01,0xe00f689a,0x4a88b138,0x017ff001,
+0xfb012314,0x685a2303,0x2214e006,0x037ff001,0xf302fb03,0x589a4a81,
+0x73faf44f,0xf8f3fbb2,0xf001e001,0x9900087f,0x6f00f011,0xf411d027,
+0xf8950f00,0xd00e0080,0xc1e0f8df,0x027ff001,0x2314b120,0xc303fb02,
+0xe01368da,0xfb022314,0x689ac303,0xf8dfe00e,0xf001c1c4,0xb120027f,
+0xfb022314,0x685ac303,0x2314e004,0xf303fb02,0x200cf853,0x73faf44f,
+0xf7f3fbb2,0xf001e001,0xf8d5077f,0x428b3108,0xf8d5d008,0xf1b3310c,
+0xbf1c3fff,0x33fff04f,0x310cf8c5,0x3076f895,0x18ebb1ab,0x4b5c791a,
+0x1114f8d5,0x2022f853,0x3085f895,0xbf142b00,0x0300f44f,0x43132300,
+0xd1044299,0xf6404853,0xf7e6311a,0xf895fdfd,0xf8d53076,0x18eb4114,
+0x4b4f791a,0x610cf8d5,0x2022f853,0x3085f895,0xbf142b00,0x0300f44f,
+0x43132300,0xd05c429c,0x3ffff1b6,0x6829d009,0x2110f8d5,0xf8d3684b,
+0x1a9b370c,0x42936c8a,0xf8d5d34f,0xf8d5e118,0x45b660f4,0xf014d949,
+0xd0276f00,0x0f00f414,0x0080f895,0xf8dfd00e,0xf004c0ec,0xb120027f,
+0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,0xc0ccf8df,
+0x027ff004,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,0xf853f303,
+0xf44f200c,0xfbb273fa,0xe001f1f3,0x017ff004,0xd9014547,0xd2044588,
+0x33fff04f,0x3118f8c5,0xebc1e013,0xfb060307,0xebc8f303,0xfb0e0207,
+0xebc13212,0xfbb20308,0x682bf6f3,0x203ff893,0x40932301,0xbf88429e,
+0xf8952600,0xf8d53076,0x18eb1114,0x4b16791a,0x2022f853,0x3085f895,
+0xbf142b00,0x0300f44f,0x43132300,0xf8d54299,0xd10c10f4,0xf893682b,
+0x2355203f,0x22644093,0xf3f2fbb3,0xbf944299,0x24012400,0xfb07e014,
+0xfb01f206,0x429af308,0x2400bf94,0xe00b2401,0xf6404802,0xf7e6315d,
+0xe062fd5b,0x00022b3d,0x1e00d060,0x1e00c744,0xf89db1a4,0x2bff3007,
+0x4628d107,0xf10d2101,0x466b0207,0xfc10f7ff,0x9b00b148,0x53c0f3c3,
+0x3085f885,0x3007f89d,0x3076f885,0xf0104620,0xd0440fff,0x3046f895,
+0x1076f895,0xf895b13b,0xb12330a8,0x21004628,0xf98cf000,0xf8954649,
+0x18eb3076,0x4b1b791a,0x2022f853,0x3082f895,0xf012b163,0xd0096f00,
+0x037ff002,0xd9052b01,0x30d6f895,0x0310f023,0x30d6f885,0xd00929ff,
+0x3075f895,0xd9012b02,0xe0012300,0xb2db3301,0x3075f885,0x46212400,
+0x64ac221c,0xf10564ec,0xf7e70050,0x4b08fdc7,0x672c66ec,0x4074f885,
+0x47984628,0x601c6feb,0x2400e001,0xe8bde7b6,0x46c083fe,0x1e00d060,
+0x0001f451,0x4ff8e92d,0x4617460e,0xf8bd4699,0x4604b028,0x489fb920,
+0x6176f640,0xfce0f7e6,0x197468a5,0x489bd104,0x61b6f640,0xfcd8f7e6,
+0xf894793b,0xf3c32075,0x429a03c1,0x8122f040,0xf8935973,0x2b01303e,
+0xf04fd002,0xe0060a00,0xf8944620,0x22001076,0xf9e4f7ff,0x79ba4682,
+0xea4279fb,0xf0132303,0xd0090f40,0x031cf013,0x2b14d006,0x4887d004,
+0x7162f240,0xfcb0f7e6,0x79fa79bb,0x2302ea43,0x3813ea5f,0x2603f3c3,
+0x2e00d102,0x80e7f000,0x3074f894,0x09582201,0x031ff003,0xf103fa12,
+0x454eb14e,0x2300d901,0x45d8e003,0x2300bf8c,0xb2dd2301,0x45c8e003,
+0x2500bf8c,0xeb042501,0x6d020080,0xbf142d00,0xf04f468e,0xea010e00,
+0x459e0302,0xea81bf1c,0x65030302,0x3074f894,0xd9012bde,0xe0012300,
+0xb2db3301,0x3074f884,0x79bbb1b5,0x0f02f013,0xf894d012,0xb90a2077,
+0x601a6fe3,0x20d6f894,0xea122301,0xf8840103,0xbf043077,0x60196fe3,
+0x0301f042,0x30d6f884,0x0f00f1be,0x6ee3d005,0x66e33301,0x33016f23,
+0x21006723,0xf7ff4620,0x2101f8dd,0xf7ff4620,0x6ce3f8d9,0x3ffff1b3,
+0x3301d001,0x682564e3,0x303ef895,0xf0002b00,0xf8948082,0xf8d43076,
+0x18e310f0,0x4b4a791a,0x0022f853,0x2085f894,0xbf142a00,0x0300f44f,
+0x43032300,0xd00d4299,0xbf142a00,0x0300f44f,0x43032300,0x30f0f8c4,
+0x203ff895,0x40932301,0x30f4f8c4,0x3114f8d4,0xd1044553,0x3118f8d4,
+0x3ffff1b3,0x6823d108,0xa114f8c4,0x203ff893,0x40932301,0x3118f8c4,
+0x6ce36825,0x2042f895,0xbf94454e,0xf04f46de,0x42930e00,0xf895bf34,
+0xf8950041,0x26010040,0x4576e00b,0xf104bfd4,0xf50401f4,0x680b718c,
+0xfa333601,0x1a9bf200,0xf108600b,0x429e0301,0x79bbd1ef,0x0f02f013,
+0x45f0d015,0x303ff895,0x1a1bdc08,0x409a2201,0x30f4f8d4,0xf8c4189b,
+0xe01030f4,0x22011a1b,0xf8d4409a,0x189b3118,0x3118f8c4,0x45f0e001,
+0x6823dd05,0xf8d3685b,0xf8c4370c,0x79bb311c,0x0f02f013,0x2300d001,
+0xf894e003,0x33013160,0xf884b2db,0xf8943160,0xb1333046,0x30a8f894,
+0x4620b11b,0xf7ff2100,0x4620f88f,0xf7ff21ff,0xe005fb85,0xf1b36ca3,
+0xbf183fff,0x64a33301,0x8ff8e8bd,0x00022b3d,0x1e00d060,0x4602b510,
+0x6803468e,0xf893b991,0x2b01303e,0xf04fd105,0xf8c033ff,0xf8c03128,
+0xf8923158,0x18d33076,0x1188f893,0xf0004672,0xe010f813,0x303ef893,
+0xd1052b01,0x33fff04f,0x30f4f8c0,0x3118f8c0,0x30d5f892,0xf89318d3,
+0xf7ff11a9,0xbd10fb4f,0x43f7e92d,0xf8904689,0xf89030d5,0x460510a8,
+0xd303428b,0xf8801e4b,0xe3b030d5,0x0ffff1b9,0xf880d002,0xe3b890d5,
+0xf0402a00,0xf04f831f,0xf10d31ff,0x466b0207,0xf998f7ff,0xf0002800,
+0x682b8156,0x203ef893,0x2a01b112,0xe111d014,0x20b0f8d5,0x30d8f895,
+0xbf284293,0x220f4613,0xf302fb03,0x20ccf8d5,0xf8951a9b,0x429320da,
+0x2400bf34,0xe1042401,0x3160f895,0xd9012b03,0xe1004614,0x3158f8d5,
+0x3ffff1b3,0x48abd104,0x419df640,0xfb2cf7e6,0x30d5f895,0xf89318eb,
+0x4ba72086,0x1022f853,0x3085f895,0x6f00f011,0x2b00d030,0xf44fbf14,
+0x23000300,0xf413430b,0xf8950f00,0xd0100080,0x4a9eb138,0x017ff001,
+0xfb012314,0x68da2303,0x4a9ae017,0x017ff001,0xfb012314,0x689a2303,
+0xb138e00f,0xf0014a95,0x2314017f,0x2303fb01,0xe006685a,0xf0012214,
+0xfb03037f,0x4a8ff302,0xf44f589a,0xfbb273fa,0xe001f7f3,0x077ff001,
+0xf0119900,0xd0276f00,0x0f00f411,0x0080f895,0xf8dfd00e,0xf001c218,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc1f8f8df,0x027ff001,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f6f3,0x067ff001,0x3138f8d5,
+0x3ffff1b3,0xf8d5d007,0x428b3130,0xf04fbf1c,0xf8c533ff,0xf8d53138,
+0xf0122150,0xd0276f00,0x0f00f412,0x0080f895,0xf8dfd00e,0xf002c1a0,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc180f8df,0x027ff002,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f4f3,0x047ff002,0xd90142b7,
+0xd20642a6,0x4128f8d5,0x33fff04f,0x3158f8c5,0xf8d5e00f,0xebc63158,
+0xfb030107,0xf8d5f301,0xebc40128,0xfb000206,0xebc43202,0xfbb20307,
+0x682bf4f3,0x203ff893,0x40932301,0xd904429c,0xf6404842,0xf7e641c2,
+0xf8d5fa5b,0xf1b00138,0xd00c3fff,0xf8d56829,0x684b213c,0x370cf8d3,
+0x6c8a1a9b,0xd2024293,0xbf284284,0xf8d54604,0xfb063128,0xfb03f204,
+0x429af307,0x2400bf94,0xe0062401,0xf6404831,0xf7e641da,0x2400fa39,
+0x2c00e034,0xf89dd032,0xf8853007,0x9b0030d5,0x53c0f3c3,0x3085f885,
+0x30d5f895,0xf89318eb,0x4b272086,0x3022f853,0x037ff003,0xd11d2b08,
+0x68db682b,0xd1032b01,0xf7ff4628,0xe015f9dd,0xd1132b02,0xf7ff4628,
+0xf895f9ad,0xf8953161,0x3b012162,0xdb01429a,0xe0012300,0xb2db1c53,
+0x3163f885,0x3162f895,0x3164f885,0xf0104620,0xd0010fff,0xe1b62300,
+0x33fff04f,0x3007f88d,0xf893682b,0xb114403e,0xd01d2c01,0xf895e16b,
+0xf8d520d7,0x429330b0,0x4621d201,0x230fe00b,0xf303fb02,0x20d0f8d5,
+0xf8951a9b,0x429320d9,0x2100bfcc,0xb2cc2101,0x46c0e15b,0x00022b3d,
+0x1e00d148,0x1e00c744,0x3158f8d5,0x3ffff1b3,0x48b9d104,0x5107f640,
+0xf9caf7e6,0xf8d5682b,0x6c5b20b0,0xf0c0429a,0x4628825d,0xf10d4621,
+0x466b0207,0xfffaf7fe,0xf0002800,0xf8958253,0x18eb30d5,0x2086f893,
+0xf8534bac,0xf8951022,0xf0113085,0xd0306f00,0xbf142b00,0x0300f44f,
+0x430b2300,0x0f00f413,0x0080f895,0xb138d010,0xf0014aa3,0x2314017f,
+0x2303fb01,0xe01768da,0xf0014a9f,0x2314017f,0x2303fb01,0xe00f689a,
+0x4a9bb138,0x017ff001,0xfb012314,0x685a2303,0x2214e006,0x037ff001,
+0xf302fb03,0x589a4a94,0x73faf44f,0xf8f3fbb2,0xf001e001,0x9900087f,
+0x6f00f011,0xf411d027,0xf8950f00,0xd00e0080,0xc22cf8df,0x027ff001,
+0x2314b120,0xc303fb02,0xe01368da,0xfb022314,0x689ac303,0xf8dfe00e,
+0xf001c210,0xb120027f,0xfb022314,0x685ac303,0x2314e004,0xf303fb02,
+0x200cf853,0x73faf44f,0xf7f3fbb2,0xf001e001,0xf8d5077f,0x428b3140,
+0xf8d5d008,0xf1b33148,0xbf1c3fff,0x33fff04f,0x3148f8c5,0x30d5f895,
+0x195bb1b3,0x2086f893,0xf8d54b6e,0xf8531150,0xf8952022,0x2b003085,
+0xf44fbf14,0x23000300,0x42994313,0x4866d104,0x5123f640,0xf924f7e6,
+0x30d5f895,0x4150f8d5,0xf89318eb,0x4b612086,0x6148f8d5,0x2022f853,
+0x3085f895,0xbf142b00,0x0300f44f,0x43132300,0xd05c429c,0x3ffff1b6,
+0x6829d009,0x214cf8d5,0xf8d3684b,0x1a9b370c,0x42936c8a,0xf8d5d34f,
+0xf8d5e158,0x45b66128,0xf014d949,0xd0276f00,0x0f00f414,0x0080f895,
+0xf8dfd00e,0xf004c134,0xb120027f,0xfb022314,0x68dac303,0x2314e013,
+0xc303fb02,0xe00e689a,0xc114f8df,0x027ff004,0x2314b120,0xc303fb02,
+0xe004685a,0xfb022314,0xf853f303,0xf44f200c,0xfbb273fa,0xe001f1f3,
+0x017ff004,0xd9014547,0xd2044588,0x33fff04f,0x3158f8c5,0xebc1e013,
+0xfb060307,0xebc8f303,0xfb0e0207,0xebc13212,0xfbb20308,0x682bf6f3,
+0x203ff893,0x40932301,0xbf88429e,0xf8952600,0xf8d530d5,0x18eb1150,
+0x2086f893,0xf8534b27,0xf8952022,0x2b003085,0xf44fbf14,0x23000300,
+0x42994313,0x1128f8d5,0x682bd10c,0x203ff893,0x40932355,0xfbb32264,
+0x4299f3f2,0x2400bf94,0xe00e2401,0xf206fb07,0xf308fb01,0xbf94429a,
+0x24012400,0x4814e005,0x5164f640,0xf880f7e6,0x2c00e118,0xf89dd032,
+0x2bff3007,0x4628d107,0xf10d2101,0x466b0207,0xfeb0f7fe,0x9b00b338,
+0x52c0f3c3,0x2085f885,0x037ff003,0x2007f89d,0xf8852b0c,0xd11920d5,
+0x68db682b,0xd1092b01,0xf7ff4628,0xe011f821,0x00022b3d,0x1e00d148,
+0x1e00c744,0xd1092b02,0x3174f895,0xd1052b01,0xf7fe4628,0x2300ffe7,
+0x3174f885,0xf0104620,0xd0030fff,0xf8852301,0xe08830ee,0x68db682b,
+0xd0222b02,0xf0402b01,0xf8d580d7,0x2b1130dc,0x80d2f240,0x10e9f895,
+0x30d5f895,0xf000428b,0xf89580cb,0x428b30a8,0x80c6f240,0x30e7f995,
+0x20edf895,0x0312f1c3,0xf3004293,0xf88580bd,0x462810d5,0xffe0f7fe,
+0xf8d5e06f,0xf9951168,0xf895316f,0xebc32170,0x42930301,0xf895d92e,
+0xf8951174,0xb9d13161,0x2163f895,0x429a3b01,0x460adb01,0x1c53e001,
+0xf895b2da,0xf8853162,0x42932163,0xf895d116,0x3b013161,0xdb01429a,
+0xe0012300,0xb2db1c53,0x3163f885,0xf895e00a,0x3b012164,0xdb01429a,
+0xe0012300,0xb2db1c53,0x3164f885,0xf7fe4628,0xe07dff91,0xd97b2911,
+0x3174f895,0xf895b933,0xf8853165,0xf89530d5,0xe0053163,0x3166f895,
+0x30d5f885,0x3164f895,0x3162f885,0x3161f895,0x2162f895,0x429a3b01,
+0x2300db01,0x1c53e001,0xf885b2db,0xf8953163,0x46283162,0x3164f885,
+0xff68f7fe,0xf895e00d,0xf8953046,0xb13b20d5,0x30a8f895,0x4628b123,
+0xf7ff2101,0xe000fc0b,0xf8954691,0x18eb30d5,0x2086f893,0xf8534b21,
+0xf8952022,0xb1633082,0x6f00f012,0xf002d009,0x2b01037f,0xf895d805,
+0xf04330d6,0xf8850310,0xf00230d6,0x2b07037f,0x2b0fd004,0x2300d002,
+0x3085f885,0x0ffff1b9,0xf895d009,0x2b023075,0x2300d901,0x3301e001,
+0xf885b2db,0x24003075,0x22184621,0x40acf8c5,0x40b0f8c5,0x00b4f105,
+0xf838f7e7,0xf8c54b08,0xf8c540cc,0xf88540d0,0x462840d4,0x6feb4798,
+0xe001601c,0xe7192400,0x83fee8bd,0x1e00d148,0x0001f021,0x4ff0e92d,
+0x460eb085,0xf89d4615,0xf89d1048,0x93032050,0x8038f89d,0x903cf89d,
+0xb040f89d,0xa044f89d,0xf89d9102,0x9201704c,0xb9204604,0xf64048a8,
+0xf7e561d2,0x68a3ff41,0xf89418f4,0xb92b30a8,0xf64048a3,0xf7e561da,
+0xe2b2ff37,0xf894792b,0xf3c32075,0x429a03c1,0x82a3f040,0xf04fb117,
+0xe0130901,0xf01379ab,0xd006031c,0xd0042b14,0xf6404897,0xf7e50116,
+0x79abff1f,0x0f20f013,0x4893d104,0x0119f640,0xff16f7e5,0x30d5f894,
+0x18e39902,0x2086f893,0xf8534b8e,0xf0013022,0xf003027f,0x4293037f,
+0x6823d05d,0x2a0168da,0x45d3d159,0xf8d4d30a,0xf1b330e0,0xf0003fff,
+0x3301825d,0xf8c44615,0xe25a30e0,0x0f00f1b9,0x2200d001,0x9b03e004,
+0xbf144598,0x22012200,0xe0e8f894,0x2101b295,0x0207f00e,0xfa154091,
+0xeb04f202,0xf89000de,0xb2c930e4,0x0202ea01,0x0301ea23,0xf1be431a,
+0xf8800f17,0xd10120e4,0xe0022200,0x0301f10e,0xf894b2da,0xf88430e7,
+0x195b20e8,0xb2d3b2dd,0x0013f1b3,0x1d58bf48,0x0107f000,0xfa162601,
+0xeb04f201,0xf89303e0,0xf88430e4,0x401350e7,0xebc3410b,0xf8840305,
+0xf8d430e7,0xf1b330dc,0xf0003fff,0x199b820f,0x30dcf8c4,0x796be06b,
+0xd06a09db,0x68db6823,0xd1662b02,0xd30945d3,0x30e0f8d4,0x3ffff1b3,
+0x81fcf000,0xf8c43301,0xe1f730e0,0x3174f894,0xf894b913,0xe0013163,
+0x3164f894,0x42999901,0x81ecf040,0x0f00f1b9,0x2200d001,0x9b03e004,
+0xbf144598,0x22012200,0xe16ef894,0x2101b295,0x0207f00e,0xfa154091,
+0xeb04f202,0xf89000de,0xb2c93171,0x0202ea01,0x0301ea23,0xf1be431a,
+0xf8800f1d,0xd1012171,0xe0022200,0x0301f10e,0xf894b2da,0xf884316f,
+0x195b216e,0xb2d3b2dd,0x0013f1b3,0xf103bf48,0xf000000b,0x26010107,
+0xf201fa16,0x03e0eb04,0x3171f893,0x516ff884,0x410b4013,0x0305ebc3,
+0x316ff884,0x3168f8d4,0x3ffff1b3,0x81a2f000,0xf8c4199b,0x46353168,
+0x6823e19f,0x303df893,0x45d3b91b,0x8198f080,0x45d3e006,0x9903d904,
+0x0f41ebb8,0x8190f340,0x0f00f1b9,0x2507d001,0x9a03e009,0x0308ebc2,
+0x00dbb29b,0xf3f8fb93,0x030ff1c3,0xf894b29d,0xf005e0d4,0xf00e030f,
+0x00920201,0x4093b2d2,0x005eeb04,0xbf142a00,0x210f21f0,0x20b4f890,
+0x0303ea01,0x0201ea22,0xf1be4313,0xf8800f2f,0xd10130b4,0xe0022200,
+0x0301f10e,0x6823b2da,0x20d4f884,0x203ef893,0xd0052a01,0xe0092600,
+0x00022b3d,0x1e00d148,0xf8944620,0xf7fe10d5,0x4606fb0d,0x0f00f1b9,
+0xf1b8d11a,0xd0170f00,0x45439b03,0x45d3d114,0xf894d212,0xf01220d6,
+0xbf040101,0x60196fe3,0x0301f042,0x2077f894,0x30d6f884,0x6fe3b90a,
+0x2301601a,0x3077f884,0x30ccf8d4,0x195b2100,0x30ccf8c4,0x30d0f8d4,
+0x195b4620,0x30d0f8c4,0xfa70f7fe,0x46202101,0xfa6cf7fe,0x30b0f8d4,
+0x3ffff1b3,0x3301d002,0x30b0f8c4,0xf8936823,0xf8d4203c,0x429330b0,
+0x2300d302,0x30eef884,0x68db6823,0xd1222b01,0x20b0f8d4,0x10ebf894,
+0xf3f1fbb2,0x2313fb01,0x20ecf894,0xd1164293,0x30eaf894,0x01fef003,
+0x0f10f013,0x10eaf884,0xf894d00a,0xf89430a8,0x3b0120e9,0xbfbc429a,
+0x0301f041,0x30eaf884,0x23006fe2,0x68236013,0x2b0268db,0xf8d4d123,
+0xf8b420b0,0xfbb21176,0xfb01f3f1,0xf8b42313,0x42932178,0xf8b4d117,
+0xf64f316c,0xea0372fe,0xf8940202,0xf8a43174,0xb913216c,0x2300f3c2,
+0xf3c2e001,0xb11b1300,0x0301f042,0x316cf8a4,0x23006fe2,0x68236013,
+0x303ef893,0xf0002b00,0x990380b7,0x0f41ebb8,0xf894dd03,0x33013160,
+0x45d3e002,0x2300d202,0x3160f884,0xf20045d3,0xf89480a7,0xf8d430d5,
+0x18e31120,0x2086f893,0xf8534b5d,0xf8940022,0x2a002085,0xf44fbf14,
+0x23000300,0x42994303,0x2a00d014,0xf44fbf14,0x23000300,0x68214303,
+0x3120f8c4,0x303ff891,0xfa122201,0xf8c4f303,0xf8913128,0x409a304c,
+0x2124f884,0x3150f8d4,0xd10442b3,0x3158f8d4,0x3ffff1b3,0x6821d10e,
+0x6150f8c4,0x303ff891,0xfa122201,0xf8c4f303,0xf8913158,0x409a304c,
+0x2154f884,0xf8946823,0xf8930124,0xf893204d,0x1a9b304c,0xf103fa08,
+0xf302fa50,0xbfac4299,0x0301ebc3,0xb2db1a5b,0x45d3181b,0x3124f884,
+0xf894d313,0xf8d430d5,0x18e31150,0x2086f893,0xf8534b31,0xf8942022,
+0x2b003085,0xf44fbf14,0x23000300,0x42994313,0xf504d102,0xe0017594,
+0x75acf504,0x9a036826,0xc03ff896,0xfa026829,0xf896f30c,0xfb932042,
+0xf8d4fef8,0x429330b0,0xf896bf94,0xf8960041,0x458e0040,0x2301d910,
+0xf20cfa03,0x1ad24083,0xd9044291,0xfc0cfa31,0x1c4bd10c,0xebc1e009,
+0x40c3030e,0xe004185b,0x0301ebce,0xebc340c3,0x602b0301,0xd30745d3,
+0xf8d36873,0xf8c4370c,0xe001315c,0xe0002501,0xf8942500,0xb1333046,
+0x30a8f894,0x4620b11b,0xf7fe2101,0x4620f96d,0xb2ea21ff,0xf914f7ff,
+0xf8d4e007,0xf1b330ac,0xd0023fff,0xf8c43301,0xb00530ac,0x8ff0e8bd,
+0x1e00d148,0x41f0e92d,0x460d4606,0x46174608,0x22102100,0xf7e6461c,
+0x7833fd39,0xb134702b,0xb10f7870,0xe0027068,0x030ff020,0xe8bd706b,
+0x46c081f0,0x4ff0e92d,0xb0994604,0x9f274699,0x461668a3,0x0088f99d,
+0x2094f89d,0x2f0318cd,0xa090f8dd,0xf89d9001,0x9200808c,0xb098f89d,
+0x48a7dd04,0x01d7f241,0xfc4af7e5,0xf2436822,0x58d143ec,0xf5a3b181,
+0xfb075353,0x1853f203,0x3074f893,0x1889b113,0xe003a803,0x3074f891,
+0xb113a803,0xe0013178,0x4631a803,0xf7e62228,0xf1bafd15,0xd1040f00,
+0xf2414895,0xf7e501ee,0x2100fc27,0x72def44f,0xf7e64628,0x2201fce7,
+0x602c60e2,0x45a02400,0x2302bf0c,0xf8854613,0xf8c54081,0xf885a07c,
+0xf8859080,0xf89d30a9,0x49883021,0x033ff003,0xbf082b3f,0x2081f885,
+0x2209a814,0xfceaf7e6,0x0045f10d,0x220b4982,0xfce4f7e6,0xb9239b03,
+0xf640487d,0xf7e5718c,0x9903fbf7,0xe0084622,0x1883a818,0x3c50f813,
+0xd1012b16,0xe0032701,0x428a3201,0x2700d1f4,0xf8852300,0xb9173046,
+0x463e463a,0x461ae03c,0xe00a461e,0x188ba918,0xf813a818,0x19831c50,
+0x3c10f813,0xd004428b,0x9b033201,0xd3f1429a,0xf001e01a,0x2b02037f,
+0x4046f895,0x2b04d005,0x2b0bd003,0x2b16d001,0xf001d102,0xe003017f,
+0x037ff001,0x6100f443,0xf7fe4628,0x192bfb3d,0x1c637118,0x3046f885,
+0x2e083601,0x2200d830,0xa918e7db,0xa818188b,0x1c50f813,0xf8131983,
+0x428b3c1b,0x3201d004,0x429a9b03,0xe01ad3f1,0x037ff001,0xf8952b02,
+0xd0054046,0xd0032b04,0xd0012b0b,0xd1022b16,0x017ff001,0xf001e003,
+0xf443037f,0x46286100,0xfb0ef7fe,0x7118192b,0xf8851c63,0x36013046,
+0xd8012e0a,0xe7db2200,0x3081f895,0x8080f895,0xf0002b00,0x493f80c6,
+0xf10d2203,0xf7e6005d,0x2204fc59,0x0059f10d,0xf7e6493b,0x2200fc53,
+0x2046f885,0xd0402f00,0x3080f895,0xd03c2b00,0xe00a4616,0x188ba918,
+0xf813a818,0x19831c50,0x3c07f813,0xd004428b,0x9b033201,0xd3f1429a,
+0xf001e01a,0x2b02037f,0x4046f895,0x2b04d005,0x2b0bd003,0x2b16d001,
+0xf001d102,0xe003017f,0x037ff001,0x6100f443,0xf7fe4628,0x192bfac1,
+0x1c637118,0x3046f885,0x2e033601,0x2200d83e,0xa918e7db,0xa818188b,
+0x1c50f813,0xf8131983,0x428b3c03,0x3201d007,0x2200e001,0x9b034616,
+0xd3ee429a,0xf001e01a,0x2b02037f,0x4046f895,0x2b04d005,0x2b0bd003,
+0x2b16d001,0xf001d102,0xe003017f,0x037ff001,0x6100f443,0xf7fe4628,
+0x192bfa8f,0x1c637118,0x3046f885,0x2e023601,0x2200d80c,0x46c0e7db,
+0x00022b3d,0x00022b29,0x00022b32,0x00022b26,0x00022b7c,0x30a9f895,
+0x3b012200,0x2301bf18,0x0021f10d,0x0135f10d,0xfe6cf7ff,0x3039f89d,
+0x0f01f013,0xf895d00d,0xb1533080,0x49ae4628,0x4046f895,0xfa60f7fe,
+0x3401192b,0xf8857118,0x26004046,0xeb01a918,0xf81303d6,0xf0063c2b,
+0x41130207,0x0f01f013,0xf006d014,0x2e07017f,0xf44fbf8c,0xf44f53c0,
+0xf0416300,0x43196100,0xf8954628,0xf7fe4046,0x192bfa3f,0x71183401,
+0x4046f885,0x2e103601,0xf105d1dc,0x210000f0,0xf7e62230,0xf04ffb73,
+0xf8c533ff,0xf89530f4,0xb9233046,0xf2414891,0xf7e50110,0x2300faa1,
+0x3082f885,0x4b8e792a,0x3022f853,0x6f00f013,0xf003d10c,0x2b02037f,
+0x2b04d005,0x2b0bd003,0x2b16d001,0x2301d102,0x3082f885,0xe0242100,
+0xd8012902,0xe0012000,0xb2d81e8b,0x7922186c,0xf8534b7f,0xf0133022,
+0xd0116f00,0x037ff003,0xd0072b07,0x3b0cd30c,0xd8092b01,0xd9032904,
+0xe0041f0b,0xd8012903,0xe0012000,0xb2d81ecb,0x791b182b,0xf8843101,
+0xf8953025,0x42993046,0x2100d3d6,0x4643460a,0x46284c6e,0x240047a0,
+0x0076f885,0x46284b6c,0x4077f885,0x682b4798,0x0021f10d,0xf89568da,
+0x1b1230a9,0x2201bf18,0xbf183b01,0xf10d2301,0xf7ff0135,0xf885fdc3,
+0xf89d40a8,0xf0133039,0xd00b0f01,0x3080f895,0x4628b143,0xf7fe4958,
+0x2301f9a1,0x0086f885,0x30a8f885,0x0800f04f,0xeb02aa18,0xf81303d8,
+0xf0083c2b,0x41130207,0x0f01f013,0xf1b8d051,0xd8010f02,0xe0022700,
+0x0302f1a8,0xf008b2df,0xf1b8067f,0xbf8c0f07,0x53c0f44f,0x6300f44f,
+0x6100f046,0x46284319,0x40a8f895,0xf976f7fe,0xf8831963,0x682b0086,
+0xb97268da,0xd0082e07,0xf1a6d324,0x2b01030c,0x2c04d820,0x1f23d903,
+0x2c03e01b,0x4617d818,0x1ff3e018,0xd8152b06,0xf003e8df,0x0909090e,
+0x00040909,0xd9092c09,0x0309f1a4,0x2c08e009,0xf1a4d904,0xe0040308,
+0xd8012c03,0xe0012700,0xb2df1ee3,0x20a8f895,0xf893197b,0x19513086,
+0xf8813201,0xf8853097,0xf10820a8,0xf1b80801,0xd19d0f10,0x30a8f895,
+0x2100b1eb,0xf8952201,0x46283080,0x47a04c21,0x30d6f895,0x00d5f885,
+0x0301f023,0x30d6f885,0x7090f505,0x22402100,0xfa78f7e6,0x33fff04f,
+0x3128f8c5,0x3158f8c5,0x4b184628,0xf8954798,0x2b003046,0x80b0f000,
+0x30a8f895,0xf0002b00,0xf04f80ab,0xe04a0a00,0x0708eb05,0x4b0c793a,
+0xf8534c0f,0x46281022,0xf89547a0,0x4b0d2086,0xf8534606,0x46281022,
+0x428647a0,0x2300d214,0x3188f887,0x46c0e031,0x08000820,0x00022b3d,
+0x1e00d060,0x0001eec1,0x0001f451,0x0001f021,0x0001ef7d,0x1e00d148,
+0xeb082400,0xf8830305,0xf8954188,0x3b0230a8,0xdc16429c,0xf8931963,
+0xf8df3087,0x4628917c,0x1023f859,0x47b84f5b,0xd30a4286,0xb2dc1c63,
+0xf8931963,0x46283086,0x1023f859,0x428647b8,0xf10ad2df,0xf8950a01,
+0xfa5f3046,0x4543f88a,0xf04fd8ae,0xe04d0a00,0x0305eb08,0x2086f893,
+0xf8534b4d,0xf0111022,0xd0086f00,0x037ff001,0xd9042b07,0x0220f1b3,
+0x2201bf18,0x2200e000,0x4632b2d6,0xf7fe4628,0x792af879,0x46074b43,
+0x1022f853,0x46324628,0xf870f7fe,0xd2054287,0x0205eb08,0xf8822300,
+0xe02131a9,0xeb082400,0xf8830305,0xf89541a9,0x3b023046,0xdc17429c,
+0x795b1963,0x90d4f8df,0xf8594628,0x46321023,0xf854f7fe,0xd30b4287,
+0xb2dc1c63,0x791b192b,0xf8594628,0x46321023,0xf848f7fe,0xd2de4287,
+0x0a01f10a,0x30a8f895,0xf88afa5f,0xd8ab4543,0x682a9900,0xf8852901,
+0xd9181161,0x60d32302,0x3161f895,0xb162f885,0x459b3b01,0x2300db01,
+0xf10be002,0xb2db0301,0x3163f885,0x2300682a,0xb164f885,0x3174f885,
+0xb9c37c13,0x2301e002,0xe01460d3,0x74132301,0x22086828,0x21003011,
+0xf990f7e6,0x9a00682b,0x682a765a,0x33fff04f,0x682a7693,0xf8823301,
+0xf8a53034,0x682b31ba,0x639a2200,0xf8833206,0x9b01203c,0x3ffff1b3,
+0x3302d104,0x3083f885,0x3084f885,0xe8bdb019,0x46c08ff0,0x0001ef7d,
+0x1e00d148,0x1e00d060,0xf002b51f,0x92000201,0x93032300,0x9b094604,
+0x9a086840,0xf934f7f0,0xb9984603,0x2b039b07,0xa803d904,0x22049906,
+0xf974f7e6,0xf8d36823,0x429c37f0,0x4805d004,0x31e6f240,0xf884f7e5,
+0x0316f06f,0xb0044618,0x46c0bd10,0x00022b3d,0x37f8f8d0,0x47707898,
+0xeb006983,0x8b800043,0x46c04770,0x7883b510,0x69014602,0x8803b183,
+0x0f08f013,0xf023d00c,0xf0430308,0x80030380,0x073cf8d1,0x11f8f8d2,
+0x46132200,0x47a04c01,0x46c0bd10,0x1e0061f9,0x41ffe92d,0x31e2f990,
+0x2b004604,0x481adc04,0x61caf44f,0xf84cf7e5,0x320ef894,0x1214f8d4,
+0xf994b143,0x392421e2,0xfb022324,0xf9941503,0xe00281e3,0x8210f8d4,
+0x2600460d,0xf894e017,0x6920320e,0xb90b682f,0xe001461a,0x2230f8d4,
+0x92014b0a,0x92022200,0x1d299203,0x9300463a,0xfadaf7ec,0x320ef894,
+0x3524b903,0x45463601,0xe8bddbe5,0x46c081ff,0x00022bd0,0x00022bf5,
+0x6905b537,0x46284604,0xfd68f7ea,0xf8b44628,0xf7f011e0,0xf895fa33,
+0xb92b3023,0x3024f895,0x4628b113,0xf9b4f7ea,0x46282400,0x4d3ef885,
+0xf84cf7ea,0xf7e94628,0xf8d5ffc5,0x68183848,0xfe4cf7f9,0x3d5ef895,
+0xf895b163,0xf8853d63,0x2b014d60,0xf895d102,0xb11b3d66,0x46214628,
+0xfc3cf7ec,0xf7eb4628,0xf895fbff,0x46283de8,0x0301f023,0x3de8f885,
+0x93002303,0x23002101,0x6282f44f,0xf83ef7ea,0x3df2f8b5,0xf505b12b,
+0x4628615e,0xf7ee310c,0xbd3ef913,0x43f0e92d,0x31e2f990,0xf113b085,
+0x46050f02,0xd1036904,0xf8803301,0xe29131e2,0x2b007c63,0x828ef000,
+0xf0138803,0xd00e0f40,0x0340f023,0x46208003,0xfcccf7e9,0x4620b938,
+0xfe04f7ea,0xf043882b,0x802b0308,0xf895e27a,0x330131e2,0x69abb2df,
+0x71e2f885,0x0343eb05,0x801cf8b3,0x2b006b63,0xf408d033,0xf5b36340,
+0xd12e6f40,0x50a2f504,0xf188fa5f,0x29023034,0xf5a3d802,0xe0016340,
+0x10db1e8b,0x5cc62902,0x2201d801,0x1e8be004,0x0307f003,0x409a2201,
+0x0306ea12,0x2301d001,0x29dde011,0x1c8bd801,0x29dd10db,0xd9015cc0,
+0xe0042201,0xf0031c8b,0x22010307,0x4202409a,0x2300bf0c,0xb2db2301,
+0xfa5fe00b,0xeb04f288,0xf24101d2,0x5ccb4374,0x0207f002,0xf0034113,
+0xb1130301,0x0901f04f,0xf895e001,0xb27b91e4,0xf289fa4f,0xf3404293,
+0x1c5180c2,0xd103428b,0xf023882b,0x802b0310,0x31dcf8d5,0x3b0169aa,
+0xdb01429a,0xe00227ff,0x0342eb05,0x882b8bdf,0x0380f013,0xf8d5bf1c,
+0x330131f0,0x31f0f8c5,0x31e2f995,0xf040428b,0xf8b58099,0x2b0031e6,
+0x8094f000,0xf0002fff,0xf8d5809a,0xf8d521f0,0x429a31ec,0x6b60da79,
+0xd02f2800,0x6340f408,0x6f40f5b3,0xf504d12a,0xfa5f50a2,0x3034f188,
+0xd8022902,0x6340f5a3,0x1e8be001,0x290210db,0xd8015cc6,0xe0042201,
+0xf0031e8b,0x22010307,0xea12409a,0xd1580306,0xd80129dd,0x10db1c8b,
+0x5cc029dd,0x2101d901,0x1c8be005,0x0307f003,0xfa122201,0x4201f103,
+0xe00dd147,0xf288fa5f,0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,
+0x0f01f013,0xb360d139,0x6340f407,0x6f40f5b3,0xf504d127,0xb2f950a2,
+0x29023034,0xf5a3d802,0xe0016340,0x10db1e8b,0x5cc62902,0x2201d801,
+0x1e8be004,0x0307f003,0x409a2201,0x0306ea12,0x29ddd11b,0x1c8bd801,
+0x29dd10db,0xd9015cc0,0xe0042201,0xf0031c8b,0x22010307,0x4202409a,
+0xb2fae00a,0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,0x0f01f013,
+0x4628d012,0xfe88f7ff,0xf8d4882b,0xf023073c,0x802b0380,0x11f8f8d5,
+0x21e6f8b5,0x4c9a2300,0xe16747a0,0xd0062fff,0x46b869ab,0x61ab3301,
+0xf8852300,0xf99531e2,0x2b0031e2,0xf894d15d,0x2b003024,0x882bd056,
+0x0f80f013,0xf8d4d152,0x68183848,0xfb2cf7f8,0x31e0f8b5,0xd1494283,
+0x3023f894,0x4620b303,0x47984b88,0xf894b1e0,0xb9cb3d5e,0x320ef895,
+0xf8d5b113,0xb19b3234,0x2101882b,0x0320f043,0x4620802b,0x1d60f884,
+0xfab0f7ec,0x2d5ff894,0x882bb97a,0x0320f023,0xf884802b,0xe0082d60,
+0x3023f894,0xf894b12b,0xb1133d5e,0xf8842301,0xf8943d60,0xb9133023,
+0xf7e94620,0x4620fe9d,0xfb5cf7e9,0x882bb968,0x0f20f013,0x4620d106,
+0xfc90f7ea,0xf043882b,0xe0010308,0x0340f043,0x882b802b,0x0f28f013,
+0x8100f040,0xf8852301,0xf99531e2,0x2a0021e2,0x80c8f340,0xf389fa4f,
+0xf300429a,0xf8b580c3,0x4b5f01e0,0xfa5f4798,0x4287f788,0x2303d008,
+0x6282f44f,0x46209300,0x46132101,0xfe76f7e9,0x3848f8d4,0xf7f86818,
+0x4580fabb,0x4620d00f,0xfb58f7ea,0x3023f894,0x4620b913,0xfe58f7e9,
+0x46414620,0xf81ef7f0,0xf7e94620,0xf894fdbf,0xb1433024,0x31e0f8b5,
+0xd0044543,0x3de8f894,0x0301f043,0xf894e003,0xf0233de8,0xf8840301,
+0x692e3de8,0xf8862301,0x46303d3e,0xfe2af7e9,0xf013882b,0xd1370204,
+0xb3536b73,0x6340f408,0x6f40f5b3,0xf506d125,0x313451a2,0xd8012f02,
+0xe0014613,0x10db1ebb,0x5cc82f02,0x2201d801,0x1ebbe004,0x0307f003,
+0x409a2201,0x0300ea12,0x2fddd11a,0x1cbbd801,0x2fdd10db,0xd9015cc9,
+0xe0042201,0xf0031cbb,0x22010307,0x420a409a,0xeb06e009,0xf24102d7,
+0x5cd34374,0x0207f007,0xf0134113,0xd01a0f01,0x320ef895,0xf8d5b13b,
+0x69a92224,0xfb01230c,0x689a2303,0xf8b5b90a,0xf8d621ea,0xf8d5073c,
+0x230011f8,0x47a04c16,0xf5054630,0xaa0371fa,0xfac8f7e9,0xf895e01b,
+0xb13b320e,0xf8d569a9,0x230c2224,0x2303fb01,0xb92c689c,0x21e8f8b5,
+0x31e4f995,0xf4f3fb92,0xf7ff4628,0x4622fd19,0x073cf8d6,0x11f8f8d5,
+0x4c052300,0xf8d647a0,0x21023848,0x463a6818,0xfb2cf7f8,0x46c0e036,
+0x1e0061f9,0x0001d1ed,0x0001e9bd,0xf7ff4628,0x882bfd3f,0xf0232600,
+0x802b0380,0x33fff04f,0x70ae61ab,0xf7ea4620,0x7c63fbad,0x4620b113,
+0xfb2ef7eb,0x07f8f8d4,0x4b0e4631,0xf5044798,0x312451a4,0x46204b0c,
+0xf8944798,0x2b023d63,0xf894d10c,0xb14b3023,0x4b084620,0xb1284798,
+0x3d5ef894,0x4620b913,0xffa8f7e9,0xe8bdb005,0x46c083f0,0x0001f765,
+0x0001dec9,0x0001d1ed,0x7883b573,0x460e4605,0x2b006904,0xf8d4d05e,
+0x68183848,0xf9c8f7f8,0x31e0f8b5,0xd00a4283,0xf7ea4620,0x4620fa63,
+0x11e0f8b5,0xff2ef7ef,0xf7e94620,0xf894fccf,0xb17b3d5e,0x3d63f894,
+0x2b012100,0x1d60f884,0xf894d102,0xb12b3d66,0xf7ec4620,0x4620f94b,
+0xff70f7e9,0x3848f8d4,0xf7f96818,0x4620fb43,0xf906f7eb,0x3de8f894,
+0xf0232101,0xf8840301,0x23033de8,0x6282f44f,0x46209300,0xf7e92300,
+0x882bfd45,0xf0234620,0x802b0380,0x0301f06f,0x31e2f885,0x61ab3301,
+0x70ab3301,0xfb2ef7ea,0xf7eb4620,0x882bfab1,0x0f28f013,0xf023d006,
+0x802b0328,0x07f8f8d4,0xfcf4f7ff,0x46314628,0x47984b01,0x46c0bd7c,
+0x0001f765,0x4604b570,0x460d78a3,0xb1436900,0x51a4f500,0x4b033124,
+0x46204798,0xf7ff4629,0xbd70ff87,0x0001dec9,0x7883b510,0x69044602,
+0x8801b1e3,0x0f20f011,0xf894d018,0xb1533d5f,0x320ef890,0xf8d0b13b,
+0x2b013234,0x2104d103,0xffd8f7ff,0xf021e00a,0x80130320,0x11f8f8d2,
+0xf8d42200,0x4613073c,0x47a04c01,0x46c0bd10,0x1e0061f9,0x4ff0e92d,
+0x460cb087,0x1060f8bd,0x91039204,0x2064f89d,0x1074f89d,0xf8dd4605,
+0x9e17b040,0x9070f8dd,0x91019202,0x46986907,0x489fb923,0x7102f44f,
+0xfc62f7e4,0x0f00f1bb,0x489bd104,0x2109f240,0xfc5af7e4,0xd9042c02,
+0xf44f4897,0xf7e47103,0x2100fc53,0xe008460a,0x300bf852,0xd9022b20,
+0xf8422320,0x3101300b,0x45413224,0xf995dbf4,0xf89531e2,0xf113a002,
+0xd1020f02,0x92052201,0xf1bae00c,0xd1020f00,0xa014f8cd,0x882be006,
+0x0f28f013,0x2300bf14,0x93052301,0xf003882b,0x802b0301,0x320cf895,
+0x31e3f885,0x3024f897,0xf8b5b143,0xf8b51208,0xf8a52204,0xf8a511e8,
+0xe00521e6,0x1206f8b5,0x31e6f8a5,0x11e8f8a5,0x220af8b5,0x320df995,
+0x21eaf8a5,0x882bb11b,0x0304f043,0xf507802b,0x781b53c0,0x2b009904,
+0x2400bf08,0x606c2206,0x0009f105,0xfce2f7e5,0x321cf8d5,0x45982224,
+0x4698bfa8,0x0214f8d5,0xfb084659,0xf7e5f202,0x9b11fcd5,0x8210f8c5,
+0x882bb91b,0x0304f023,0x9c11e005,0xd1032c01,0xf043882b,0x802b0304,
+0xf013882b,0xd0020f04,0xf8852301,0x991331e3,0x29009a14,0xbfc89b15,
+0x11e8f8a5,0xbfc82a00,0x21eaf8a5,0xdb052b00,0x3024f897,0x9c15b113,
+0x41e6f8a5,0x29009912,0x882bdd05,0x0f04f013,0xf885bf08,0x9a0211e3,
+0x882bb11a,0x0302f043,0x2ee0802b,0x2e00dc03,0x9b16dd02,0x2600b903,
+0xe00a2400,0x46389a16,0x1014f832,0xf7f42201,0x3401fa03,0xbf082800,
+0x42b42600,0x2e00dbf2,0x462bdd0b,0x9c162200,0x4012f834,0x839c3201,
+0x42b23302,0xf8c5d1f7,0x990161dc,0xf8d5b139,0xf8d5222c,0x429331dc,
+0xf8c5bfc8,0x882b21dc,0x0f01f013,0x240cd001,0xf8d5e003,0xb9b331dc,
+0xf1ba240d,0xd0030f00,0x46214628,0xfec2f7ff,0x51a4f507,0x31244638,
+0x47984b26,0xb11a9a1a,0x4621981b,0x47989b1a,0x0019f06f,0xf1bae096,
+0xd0070f00,0x13dcf243,0xb91b58fb,0x21044628,0x47984b1d,0x991b9c1a,
+0xf8c52300,0xf8c541fc,0xf8c51200,0xf1b931f0,0xd1090f00,0x21e8f8b5,
+0xfb933364,0xf1b9f9f2,0xbfb80f01,0x0901f04f,0xf8c59a01,0xf88591ec,
+0xb12a220e,0x0f00f1b8,0xfa5fd002,0xe001f288,0x21e3f895,0x23009c03,
+0x21e4f885,0xb1a461ab,0x01dcf8d5,0x4619462a,0x8b93e00d,0x32029c03,
+0xd10742a3,0xe00861a9,0x00022bd0,0x0001dec9,0x0001f765,0x42813101,
+0xf04fdbef,0x260133ff,0x51a4f507,0x31e2f885,0x70ae4638,0x4b233124,
+0x46384798,0xfd50f7e8,0x4821b920,0x21e5f240,0xfb0af7e4,0xf7ea4638,
+0xf897f969,0xb1233024,0x1324f8b7,0x11e0f8a5,0xf1bae01f,0xd11c0f00,
+0x3848f8d7,0xf7f76818,0x4632ffab,0x46384601,0xf94ef7f4,0x3848f8d7,
+0xb1184604,0xf7f76818,0xe008ff9f,0xf7f76818,0x4622ff9b,0x46334601,
+0x4c0c4638,0xf8a547a0,0x9e0501e0,0x2000b10e,0xf8d7e008,0xf8d5073c,
+0x463211f8,0x4c064633,0x463047a0,0xe8bdb007,0x46c08ff0,0x0001dec9,
+0x00022bd0,0x0001e9a1,0x1e0061f9,0x4ff0e92d,0x7d01f5ad,0x46994682,
+0xb230f89d,0x57f8f8d0,0xd05f2a00,0xf8c59b8a,0xf8c51230,0xf8d53234,
+0x2100322c,0xbfb4429a,0x46984690,0xfb03220c,0xf8d5f202,0xf7e50224,
+0xa810fb6d,0xf44f2100,0xf7e572e0,0x2600fb67,0xe0174637,0x0224f8d5,
+0x0407eb09,0x220c1838,0xf7e54621,0x8863fb7b,0x2b0e370c,0xf44fbf94,
+0xf44f5200,0xf4435280,0x431a6330,0xf823ab10,0x36012016,0xdbe54546,
+0x9b8e9a8b,0x93009202,0x0301f1d2,0x2300bf38,0xf04f9301,0x930533ff,
+0x9306ab10,0x73fff64f,0x9b8f9308,0x930a2200,0x92039b90,0xebbb930b,
+0xbf180302,0x930c2301,0x92042301,0x930d9209,0xf8da920e,0x210207f8,
+0x9b8d4a04,0x801cf8cd,0xfddcf7ff,0x7d01f50d,0x8ff0e8bd,0x00022bf5,
+0x4ff0e92d,0x69024692,0xf1bab0fb,0x46070fc3,0x4698460d,0xb210f8dd,
+0xd97b9209,0xf44f2100,0xa80a72e0,0xfb06f7e5,0x21004650,0x47984b4c,
+0xb9104604,0x46814606,0x4629e021,0xf7e54652,0xf994fb19,0xb13b3000,
+0xf2439a09,0x58d343ec,0x689b68db,0xd0612b00,0x30b8f8d4,0xd05d2b00,
+0x00c0f8d4,0xf44fb910,0xe0026628,0xfb00230c,0x4630f603,0x4b3a2100,
+0x46814798,0xf06fb910,0xe0520515,0x50c0f8d4,0xd04c2d00,0xf104220c,
+0xfb0501c4,0xf7e5f202,0xf8d7faed,0x429d322c,0xf8d4dd08,0x2b0030c0,
+0xf06fbf0c,0xf06f051c,0xe03a0501,0x460a2100,0x685b18a3,0x3101b103,
+0x2ab43224,0xb911d1f8,0x72216061,0xf8d73101,0x4299321c,0xf1b8dc27,
+0xd1030f00,0xb010f8d7,0x8084f8df,0x30bcf8d4,0x9300462a,0x3000f994,
+0x93012500,0x91037863,0x1d239302,0xf8cd9304,0xf8cd8014,0x6938b018,
+0x10b8f8d4,0xf7ff464b,0xe010ff05,0x46342600,0xe00446b1,0x46b12600,
+0x35fff04f,0xf06fe001,0xf1b80501,0xd0020f00,0x21014658,0xb12c47c0,
+0x46219b09,0x46526c98,0x47984b08,0x0f00f1b9,0x9a09d005,0x6c904649,
+0x46324b04,0x46284798,0xe8bdb07b,0x46c08ff0,0x1e00578d,0x1e005c15,
+0x000076b1,0x2400b510,0x231446a6,0x0303fb04,0x3244f241,0x4299589b,
+0xf10ed00a,0x34010e01,0x0f08f1be,0x4803d1f1,0x418ef240,0xf988f7e4,
+0xbd104620,0x00022c1c,0x460db570,0xb9204604,0xf2404804,0xf7e4216d,
+0x7b23f97b,0x0305ea23,0xbd707323,0x00022c1c,0x460db570,0xb9204604,
+0xf2404819,0xf7e42155,0xf015f96b,0xd0030f01,0xf0237b23,0x73230304,
+0x0f02f015,0x7b23d00e,0x0303ea45,0x0f01f013,0x480fd104,0x215df240,
+0xf956f7e4,0xf0237b23,0x73230308,0x0f10f015,0x7b23d00c,0x0f02f013,
+0x6863d108,0x5f00f013,0x4805d104,0x2163f240,0xf942f7e4,0xea457b23,
+0x73230303,0x46c0bd70,0x00022c1c,0x4604b510,0x4806b918,0xf7e421d1,
+0x6820f933,0xf8d0b118,0x60233278,0x6020e000,0x46c0bd10,0x00022c1c,
+0x460cb570,0xb9184605,0x21c44805,0xf920f7e4,0xf8d4b11c,0x602b3278,
+0x602ce000,0x46c0bd70,0x00022c1c,0x127cf8d0,0x30f8b510,0x22003178,
+0xfca8f7fc,0x46c0bd10,0x780bb570,0xf0134605,0x460e0f01,0xd0044614,
+0xf44f480c,0xf7e47150,0xf241f8ff,0x58eb435c,0x0384eb03,0xe008699c,
+0xf1044630,0x22060119,0x47984b05,0xf8d4b118,0x2c004274,0x4620d1f4,
+0x46c0bd70,0x00022c1c,0x1e00d671,0x3848f8d0,0x689bb570,0x429a4604,
+0x4615460e,0x4805d004,0x3197f240,0xf8d8f7e4,0x46314620,0xf7ff462a,
+0xbd70ffc7,0x00022c1c,0x3848f8d0,0x689ab510,0xffbef7ff,0x46c0bd10,
+0x6b43b57f,0xf891b173,0xb12331ce,0x31cff891,0x3301b90b,0xf642e006,
+0x5cc34319,0xbf142b01,0x23012300,0x684bb2da,0x4ec0f3c3,0x3d4cf8d0,
+0x3ffff1b3,0xf8b0d111,0xf4033324,0xf5b36340,0xd1036f40,0xf013688b,
+0xe0050f02,0x6f00f5b3,0x688bd103,0x0f01f013,0x2300d101,0x23ffe000,
+0x9300b25b,0x032cf101,0x23009302,0x93039201,0x93059304,0x07f0f8d0,
+0x02f8f101,0xf7fe4673,0xb007fc21,0x46c0bd00,0x435cf241,0x4ff0e92d,
+0x8003f850,0xf8b8b085,0x46053014,0x468a2b07,0x2100d807,0x0020f8d8,
+0x47984b5e,0x28004601,0xf241d133,0x592b445c,0x29006819,0x80a3f000,
+0xf8d5a803,0xf7ff770c,0x592bff3b,0x68182400,0xe00b4626,0xb9337e03,
+0xebc36a03,0x42b30307,0x461ebf24,0xa8034604,0xff18f7ff,0xd1f12800,
+0xf0002c00,0xe0898088,0x3014f8b8,0xd9042b07,0xf44f4849,0xf7e47190,
+0x2100f843,0x0020f8d8,0x47984b44,0x28004601,0xf8b8d075,0x460e3014,
+0xf8a83301,0x46083014,0x2020f8d8,0xf7e52100,0xf8d5f8f5,0x46b1370c,
+0xf5056233,0x33345354,0xa27cf8c6,0x22006173,0x320218b3,0x31fff04f,
+0xf8a32a10,0xd1f71160,0x27004644,0x6aa3e006,0x6b60b113,0x47984631,
+0x34103701,0x3024f8d8,0xd3f4429f,0xb18b7c6b,0x738cf241,0x5ae94628,
+0xf7f32200,0xb148fe61,0x3024f895,0xf505b113,0xe005744a,0x54bcf505,
+0xe0013410,0x0414f10a,0x2023f895,0xf89ab9d2,0xb1bb300c,0x07f8f106,
+0x0b7ff04f,0xf8cd9201,0x4620b000,0x23014639,0xa068f8df,0xf8d647d0,
+0xb98a20f8,0xb000f8cd,0x46209201,0x46134639,0xe00947d0,0x2200237f,
+0x46209300,0xf1069201,0x461301f8,0x47a04c0f,0x46314628,0xff04f7ff,
+0x3000f8d8,0x6000f8c8,0x3278f8c6,0xf04fe009,0xe0060900,0x46214628,
+0x47984b07,0xd0f62800,0x4648e76e,0xe8bdb005,0x46c08ff0,0x1e00578d,
+0x00022c1c,0x0001ed85,0x0001fb25,0x47f0e92d,0x4605780b,0x0f01f013,
+0x4616460f,0x481ed004,0x3162f240,0xffa0f7e3,0x46394628,0xf7ff4632,
+0x4604fe8f,0xf44fbb68,0xfb06739e,0xf509f903,0x18696128,0x31044628,
+0xff0af7ff,0xb3004604,0x0819f100,0x46402206,0xf7e54639,0xf241f86b,
+0x58eb435c,0xeb0362a6,0x699a0386,0xf8c4619c,0xf8952274,0xb9633023,
+0x0305eb09,0x3a90f893,0x7c6bb13b,0x4628b12b,0x46224641,0xf7eb230c,
+0x4620fa0b,0x87f0e8bd,0x00022c1c,0x3848f8d0,0x689bb570,0x429a4604,
+0x4615460e,0x4805d004,0x7163f44f,0xff58f7e3,0x46314620,0xf7ff462a,
+0xbd70ffa5,0x00022c1c,0x3848f8d0,0x689ab510,0xff9cf7ff,0x46c0bd10,
+0x78434602,0x04007880,0x2003ea40,0x43187813,0xea4078d3,0x47706003,
+0xf1d06b80,0xbf380001,0x47702000,0x4b0ab570,0x460d4604,0xb9184798,
+0x214d4808,0xff2cf7e3,0x68e26923,0x429318eb,0x4804d903,0xf7e3214e,
+0x82a5ff23,0x46c0bd70,0x1e005ec1,0x00022c26,0x4ff0e92d,0x9203b095,
+0x6b9f461e,0xb014f8d2,0x2060f893,0x3062f8b3,0x93059204,0x68736e74,
+0x94066832,0x930a9207,0xf8d67a3b,0x2b029014,0xf8d64605,0x6ef4a008,
+0x8014f8b9,0x80ccf040,0x0f07f1ba,0x80c6f240,0xf1a44444,0xf7ff0008,
+0x9008ffab,0xf7ff1f20,0xf1a8ffa7,0x90090108,0x464860f1,0xffb2f7ff,
+0x0408f1aa,0x940b69b3,0x7b9b60b4,0x0318f003,0xd07f2b08,0x0936f10d,
+0x6f712206,0xf7e44648,0x2206ffbd,0xf1096f31,0xf7e40006,0x9a03ffb7,
+0x4b514659,0x47984628,0x0414f107,0x18225823,0x30fcf8c7,0xf10d6851,
+0xf10d084c,0xf8c70a48,0xf8cd1100,0xf8cd8000,0x220ca004,0xf8d74c47,
+0x464b00fc,0x9b1347a0,0xf8c72204,0x991230fc,0x1100f8c7,0x3022f896,
+0x8000f8cd,0xf8cd9311,0xf8d7a004,0xab1100fc,0x9b1347a0,0xf8c72200,
+0x9b1230fc,0xf8c7990b,0x980a3100,0x47984b38,0x8000f8cd,0xa004f8cd,
+0x9b0a4602,0x00fcf8d7,0x1100f8d7,0x9b1347a0,0x42939a08,0x2001d001,
+0x9b12e004,0x1b189c09,0x2001bf18,0xf8d5b310,0x33013580,0x3580f8c5,
+0x3023f895,0xd0452b00,0x00c4f8db,0x3584f8d5,0x3301b930,0x3584f8c5,
+0xf8cb233c,0xe03c30c4,0xf5053301,0xf8c5615e,0x6ca83584,0x2201310c,
+0xff0cf7e4,0xf88b2301,0xe02b30cc,0xf64f9a05,0x429a73ff,0x9a04d110,
+0xf8879c06,0x1c632108,0xf8c79c07,0xf1043104,0xf107020a,0xf10700e0,
+0x4c120114,0xe00f47a0,0xf1066df1,0x42990340,0x220ad112,0x00e0f107,
+0xff24f7e4,0x9b049a06,0x2104f8c7,0x3108f887,0x79b94628,0xf7f3465a,
+0xe001f893,0xe0002000,0xb0152001,0x8ff0e8bd,0x1e0085d1,0x1e00348d,
+0x1e003505,0x1e003161,0x6b88b510,0xf990460c,0x6849300e,0x1ac92210,
+0xf5003102,0xf7e46089,0x6ba1fefd,0x784a788b,0x6089f501,0x780b431a,
+0x78ca4313,0x790b431a,0x794a4313,0xd102431a,0x22012110,0x2110e001,
+0xf7e42202,0xbd10fdb9,0x4ff0e92d,0xb08d4f5a,0x495a6838,0xfe64f7e4,
+0xd0452801,0xe18cf8df,0xf8de4c57,0x48571000,0x6821910b,0x91096803,
+0x930a4955,0x2200680b,0x4b549308,0xb000f8d2,0x4d544e53,0x600a6003,
+0x49544853,0x8000f8d7,0x9000f8d6,0xa000f8d5,0xf8ce603a,0x602a2000,
+0x60226032,0x3a011a09,0x47984b4d,0x42984b4d,0x4b41d1fc,0xf8c32100,
+0x4b458000,0x9000f8c3,0xf8c34b44,0x680aa000,0x601a4b47,0xb000f8c1,
+0x990b4b46,0x60199a0a,0x99094b3a,0x4b38601a,0x60199a08,0x601a4b38,
+0xf9d8f007,0x46072100,0xfa80f7e4,0x21004638,0xf9ecf7e4,0x6a03b128,
+0xbfbc2b00,0x4300f04f,0x46386203,0x8030f8d7,0x9034f8d7,0xfb70f007,
+0xfbb04c35,0x4638f6f4,0xfb74f007,0xf5f4fbb0,0xf0074638,0x4b31ff5f,
+0xf0f4fbb0,0x4b309300,0x93019006,0x4a30492f,0x8008f8cd,0x900cf8cd,
+0x95059604,0x4b2e482d,0x47a04c2e,0xf640482e,0xf244010d,0xf00732f4,
+0xb148f933,0xf640482a,0xf2440129,0xf00732f4,0xb108f92b,0xe0002400,
+0x46382401,0xfae8f007,0x73fff64f,0x3218f244,0xbf184298,0xf6404602,
+0x48200112,0xf918f007,0x481db11c,0x685b6a03,0x4b1d4798,0x701a2201,
+0xfce0f7e3,0xf7e34638,0xb00dfd5f,0x8ff0e8bd,0x00022d9c,0x00022c73,
+0x00000944,0x00000938,0x0000094c,0xbbadbadd,0x00022da0,0x00022d98,
+0x00000000,0x00031658,0x1e003981,0xdebb20e3,0x0000093c,0x00000948,
+0x000f4240,0x00022cb4,0x00020f59,0x00022ca9,0x00022cae,0x00022c79,
+0x00022cb2,0x1e004461,0x00022dc8,0x00023820,0x00023af6,0x4ff7e92d,
+0x4604460e,0x4844b918,0xf7e321da,0x1ce3fd0d,0x0503f023,0x40b32301,
+0x5f80f5b3,0xf44fbf28,0x2b045380,0x469bbf2c,0x0b04f04f,0x26004b3b,
+0xc000f8d3,0x4f3b4b3a,0x9000f8d3,0x46b246b0,0xe0179601,0x42a86820,
+0xeb04d313,0xeb010109,0xf1cb0e00,0xebc50200,0x401a030e,0xd308428a,
+0x0300ebc5,0xd2044563,0x97014626,0x4690469c,0x462746f2,0x2c00687c,
+0x2e00d1e4,0x4b2ad049,0x681a681b,0x429a4b29,0x4823d004,0x7183f44f,
+0xfccaf7e3,0x030aebc8,0x0103ebc5,0x681c4b20,0x0008f104,0xd8014281,
+0xe00b186d,0xeb086833,0x1a5b0205,0xebc46033,0xf8480301,0x68733005,
+0x60726053,0x1b5a6833,0xf1bbd004,0xd1050f04,0xd8034282,0x9a016873,
+0xe00c6053,0xd20542a2,0x20004a13,0x33016813,0xe0136013,0x0302ebc4,
+0x60335195,0x490f1996,0x680b6832,0x4a0e18d0,0x68136008,0x6013191b,
+0x68134a0c,0xbf884298,0x46306010,0x8ffee8bd,0x000206dc,0x00000408,
+0x000003c4,0x000003d0,0x000003d8,0x5354414b,0x000003e0,0x000003cc,
+0x000003f0,0x0000040c,0x4694b510,0xf8d04604,0x20002084,0xe00c4686,
+0x308cf8d4,0x0380eb03,0x3080f8d3,0xd103428b,0xd00545e6,0x0e01f10e,
+0x42903001,0x2011d1f0,0x46c0bd10,0x4010ea80,0x2010ea80,0x1010ea80,
+0x0090ea80,0x0050ea80,0x0001f000,0x46c04770,0xf890b510,0xb10b30b4,
+0xe0004b02,0x47984b02,0x46c0bd10,0x1e004865,0x1e0047d5,0x4604b510,
+0xd0652800,0x20d8f8d0,0x30dcf8d0,0xd004429a,0xf2404830,0xf7e321e5,
+0xf8d4fc2f,0xf8d42104,0x429a3108,0x482bd004,0x21e6f240,0xfc24f7e3,
+0x30b4f894,0xf8d4b15b,0xb12b30d0,0x00f0f8d4,0x0003ebc0,0x47984b24,
+0x30fcf8d4,0xf8d4e00a,0xb12b30cc,0x00f0f8d4,0x0003ebc0,0x47984b1e,
+0x30f8f8d4,0xf8d4b12b,0xebc0011c,0x4b1a0003,0xf8d44798,0xb13110e0,
+0x20d4f8d4,0x00acf8d4,0x4b160092,0xf8d44798,0xb131110c,0x2100f8d4,
+0x00acf8d4,0x4b110092,0xf8d44798,0xb13110e8,0x20d4f8d4,0x00acf8d4,
+0x4b0c0092,0xf8d44798,0xb1311114,0x2100f8d4,0x00acf8d4,0x4b070092,
+0xf8d44798,0x462100ac,0x72a2f44f,0x47984b03,0x46c0bd10,0x00020b04,
+0x1e005dcd,0x1e005c15,0x4ff7e92d,0x9001461f,0xf44f9100,0x210070a2,
+0x46164bb7,0xa030f8dd,0x8034f8dd,0x9038f8dd,0xb03cf8dd,0x47989d12,
+0x28004604,0x815ef000,0xf44f2100,0xf7e472a2,0x4baefc75,0xbf082d00,
+0xf8c4461d,0xb92650a0,0xf44f48ab,0xf7e371cb,0x2100fba3,0x460a4630,
+0xffdcf7e3,0xf8c42300,0xf1083140,0xf3c033ff,0xea133000,0xf8840f08,
+0xd00400b4,0xf44f48a0,0xf7e371d2,0xf109fb8d,0xea1333ff,0xd0040f09,
+0xf240489b,0xf7e311a5,0xf1b9fb83,0xd1070f00,0x0f00f1ba,0x4896d004,
+0x11a7f240,0xfb78f7e3,0x0f00f1b8,0xb127d105,0xf2404891,0xf7e311a9,
+0x9b01fb6f,0x60b0f8c4,0x30acf8c4,0x30b4f894,0xf5b8b32b,0xd9047f00,
+0xf2404889,0xf7e311b1,0xf5b9fb5f,0xd9047f00,0xf44f4885,0xf7e371d9,
+0xf44ffb57,0xf1b85300,0xf8c40fff,0xf8c470c0,0xf8c4a0c4,0xd80630c8,
+0x0ffff1b9,0xf5a3bf9c,0xf8c45380,0x462030c8,0xfdecf7e4,0xf5b8e013,
+0xd9047f00,0xf44f4876,0xf7e371df,0xf5b9fb39,0xd9047f00,0xf2404872,
+0xf7e311bf,0xf8c4fb31,0xf8c470b8,0x2208a0bc,0x4b6e9900,0x00a4f104,
+0x23004798,0x30abf884,0x80d4f8c4,0x9100f8c4,0xfdd2f7e4,0xbf864583,
+0x030bebc0,0x3124f8c4,0xb124f8c4,0x22009b10,0x3128f8c4,0xf8c49b11,
+0xf8c42130,0xf8c4312c,0x68732138,0xd11f2b01,0xf5b368b3,0xd1056f02,
+0x30b4f894,0xf04fb113,0xe00b4300,0xf2446b32,0x429a3322,0xf04fbf0c,
+0xf04f4300,0xf8c44380,0x23003130,0x3134f8c4,0x3130f8d4,0x3138f8c4,
+0x3134f8d4,0x313cf8c4,0xf7e34630,0xf640fdfd,0x42980329,0x4630d10c,
+0xfff0f7e3,0x4630b140,0xffecf7e3,0xd8032802,0xf8842300,0xe00430b5,
+0x4b434620,0xf8844798,0xf1b800b5,0xd00d0f00,0x0588ea4f,0x21004628,
+0x47984b39,0x00e0f8c4,0xd0792800,0x462a2100,0xfb84f7e4,0x0f00f1b9,
+0xea4fd00d,0x46280589,0x4b312100,0xf8c44798,0x2800010c,0x2100d068,
+0xf7e4462a,0xf1b8fb73,0xd0050f00,0x21014620,0x47984b2e,0xd05b2800,
+0x0f00f1b9,0x4620d005,0x4b2a2102,0x28004798,0xf8d4d052,0xf1b33130,
+0xd1084f80,0x30ecf8d4,0x4f80f1b3,0xf894d903,0x2b0030b5,0xf8d4d044,
+0xf1b33130,0xd1084f80,0x3118f8d4,0x4f80f1b3,0xf894d903,0x2b0030b5,
+0xf1b8d036,0xd00d0f00,0x0588ea4f,0x21004628,0x47984b11,0x00e8f8c4,
+0x2100b350,0xf7e4462a,0xe001fb35,0x80e8f8c4,0x0f00f1b9,0xea4fd00d,
+0x46280589,0x4b082100,0xf8c44798,0xb1b80114,0x462a2100,0xfb22f7e4,
+0xf8c4e001,0x46209114,0xfd0cf7e4,0xe00f4620,0x1e00578d,0x00023c14,
+0x00020b04,0x1e0040f9,0x1e0044fd,0x0001cd65,0x4b024620,0x20004798,
+0x8ffee8bd,0x0001cd81,0xea43058b,0xb5702392,0xfef0fbb3,0x3e1efb00,
+0x3380f44f,0xf3f0fbb3,0xf303fb00,0x3380f5c3,0x4606041b,0xf0f0fbb3,
+0x3010fb06,0x75fff64f,0x2391ea05,0xf303fb00,0xfbb30400,0xfb06f4f6,
+0xfbb03414,0xfb06f3f6,0xea050313,0xfb056591,0xfbb5f503,0xfb06f3f6,
+0x44745313,0xfbb418e4,0xfb06f0f6,0x05924010,0xeb020d92,0xbd702080,
+0x3024f890,0x4618b90b,0xf890e015,0xb90b3023,0xe0102001,0x5158f500,
+0x788b3108,0x431a784a,0x4313780b,0x431a78ca,0x4313790b,0x431a794a,
+0x2000bf0c,0x47702001,0x6000f011,0x4694b510,0x2314d02f,0x027ff001,
+0xf203fb02,0xf4014c16,0x191063e0,0x0f00f411,0xe010f890,0x0a1bd006,
+0x2b013b04,0x68c3bf94,0xe0056883,0x3b040a1b,0xbf942b01,0x59136843,
+0xf44f009a,0xfb0c53fa,0xf503f303,0x33ef43aa,0xfbb3189b,0xf3c1f3f2,
+0xeb025201,0x3204129e,0x230318d2,0xf203fb02,0xb2801ed0,0x46c0bd10,
+0x1e00c744,0x6f00f011,0x41f0e92d,0x4680469c,0xf0014615,0xd0390e7f,
+0xfb0e2214,0x4f2efe02,0x5301f3c1,0x0007eb0e,0xf4017c02,0xeb030400,
+0x009b1392,0x0f02f015,0x0618f103,0x61e0f401,0xf103bf08,0xb1340620,
+0x3b040a0b,0xbf942b01,0x688368c3,0x0a0be006,0x2b013b04,0x6843bf94,
+0x3007f85e,0xf44f009a,0xfb0c53fa,0xf503f303,0x33ef43aa,0xfbb3189b,
+0xeb06f3f2,0xf8d80083,0x685b3848,0xd1252b02,0xe0233006,0xf9134b13,
+0x2b00300e,0xea4fda12,0xf102024e,0xeb030315,0xfbb303cc,0x009af3f2,
+0x3848f8d8,0x0014f102,0x2b02685b,0xf102d10e,0xe00b001a,0x33fff10e,
+0x130ceb03,0x0f01f012,0xf0fefbb3,0x3060d001,0x30c0e000,0x81f0e8bd,
+0x1e00c744,0x1e00c634,0x468eb510,0xf8d0b122,0x685b3848,0xd122429a,
+0x6300f01e,0x0848f8d0,0x6f84d102,0xe0184619,0x037ff00e,0xd8162b20,
+0x01d3eb00,0x0207f00e,0x40932301,0x208df891,0x0003ea02,0x1843e00c,
+0x207cf893,0x037ff00e,0xd101429a,0xe0032001,0x42a13101,0x2000d1f3,
+0x46c0bd10,0x4604b510,0x46084696,0xe013b959,0x380cf8d4,0x0e02f1ae,
+0x365af8b3,0x0a1ab29b,0x70437002,0xf1be3002,0xdcf10f01,0xf8d4d104,
+0xf8b3380c,0x7003365a,0x46c0bd10,0x4696b500,0x189b680a,0x4293600b,
+0xbf386803,0x0e01f10e,0x60034473,0x46c0bd00,0x469eb500,0x459e680b,
+0x0303ebce,0x6803600b,0x3201bf88,0x60031a9b,0x46c0bd00,0xd2014290,
+0xe0062001,0x2000d001,0x4299e003,0x2000bf2c,0x47702001,0x3088f8d0,
+0x2084f8d0,0xf042b10b,0xf8d06280,0xb11b308c,0x2380f422,0x3200f443,
+0xf8c36983,0x47702120,0x4604b570,0xb929460d,0x37c0f890,0xf890b17b,
+0xb9633d0d,0xb11868a0,0x462a2103,0xfbdaf7e3,0x581cf884,0xf884b91d,
+0xf8845970,0xbd705854,0x0f01f011,0x41f0e92d,0x460f4680,0x461d4616,
+0x480ed004,0x51cdf24b,0xf89af7e3,0x0f01f015,0x480ad004,0x51cef24b,
+0xf892f7e3,0xdd0b2d00,0x19e12400,0xf7e74640,0x1933ff09,0x340255a0,
+0x42ac0a00,0xdbf47058,0x81f0e8bd,0x00021040,0xf642b570,0x5341451a,
+0x71c4f44f,0xf7e74604,0x5b63fef5,0x7270f420,0x4620431a,0xf44fb292,
+0xf7e771c4,0x2122fdcb,0xf7e74620,0x5b63fee7,0x7270f420,0x4620431a,
+0xb2922122,0xfdbef7e7,0x46c0bd70,0x41f0e92d,0x4844f8d0,0x343431e0,
+0x18a74615,0xf7e74606,0x4601fed1,0x42815960,0x2000d101,0xbf98e00d,
+0x3380f5c0,0x628cf506,0xebc0bf8c,0x18580001,0x59533204,0x5153181b,
+0xe8bd6039,0x46c081f0,0x41f0e92d,0x46057c43,0xf0002b00,0x2100814e,
+0x460a4ca7,0x210247a0,0x46282204,0x210447a0,0x46282208,0x210647a0,
+0x4628220c,0x210847a0,0x46282210,0x462847a0,0x2214210a,0x260047a0,
+0x00b2270c,0x32184639,0x4c994628,0x47a03601,0x2e063702,0x211cd1f5,
+0x46282238,0x211e47a0,0x4628223c,0x212447a0,0x46282240,0x212647a0,
+0x46282244,0x212847a0,0x46282248,0x212a47a0,0x4628224c,0x212c47a0,
+0x46282250,0x212e47a0,0x46282254,0x213047a0,0x46282258,0x213247a0,
+0x4628225c,0x226047a0,0x46282134,0x213647a0,0x22644628,0x213847a0,
+0x46282268,0x213a47a0,0x4628226c,0x213c47a0,0x46282270,0x213e47a0,
+0x46282274,0x214047a0,0x46282278,0x214247a0,0x4628227c,0x214447a0,
+0x46282280,0x214647a0,0x46282284,0x214847a0,0x46282288,0x228c47a0,
+0x4628214a,0x214c47a0,0x22904628,0x214e47a0,0x46282294,0x215047a0,
+0x46282298,0x215247a0,0x4628229c,0x215447a0,0x462822a0,0x215647a0,
+0x462822a4,0x215a47a0,0x462822a8,0x215c47a0,0x462822ac,0x215e47a0,
+0x462822b0,0x216047a0,0x462822b4,0x22b847a0,0x46282162,0x216447a0,
+0x22bc4628,0x216647a0,0x462822c0,0x216847a0,0x462822c4,0x216a47a0,
+0x462822c8,0x216c47a0,0x462822cc,0x216e47a0,0x462822d0,0x217047a0,
+0x462822d4,0x217247a0,0x462822d8,0x217447a0,0x462822dc,0x217647a0,
+0x462822e0,0x217a47a0,0x72aaf44f,0x47a04628,0xf44f2120,0x462872e4,
+0x212247a0,0x72e6f44f,0x47a04628,0x14d0f8d5,0x343cf8d5,0x2440f8d5,
+0x0301ebc3,0x3560f8c5,0x34b0f8d5,0x1a9b462c,0x3574f8c5,0x3468f8d5,
+0x2444f8d5,0x1a9b1a5b,0x3564f8c5,0x0778f8d4,0xf8d0b1b0,0xf8d5209c,
+0x189b33c0,0x33c0f8c5,0x2098f8d0,0x33f0f8d5,0xf8c5189b,0xf8d033f0,
+0xf8d52094,0x189b3408,0x3408f8c5,0x47986f43,0xf1053404,0x429c0318,
+0xf8d5d1e0,0xf8d523c0,0x210033c4,0xf8d5189b,0x189b23d4,0x23c8f8d5,
+0xf8d5189b,0x189b2448,0x244cf8d5,0xf8d5189b,0x189b2450,0x33b0f8c5,
+0x2420f8d5,0x33f0f8d5,0xf8d5189b,0x189b2400,0x2404f8d5,0xf8d5189b,
+0x189b2408,0x240cf8d5,0xf8d5189b,0x189b2414,0x33e8f8c5,0xf8d5186b,
+0xf8d323e8,0x31043424,0x291818d2,0x23e8f8c5,0xe8bdd1f4,0x46c081f0,
+0x0001d541,0xf0014b0a,0x569b027f,0x2b00b510,0xbfac4b07,0x7200f44f,
+0x72e0f44f,0xf0015c59,0xeb02010f,0xf7e70141,0x0040fd4d,0xbd10b280,
+0x1e00c634,0x41f0e92d,0x460d6987,0xe0172600,0x886319ac,0xd0062b02,
+0xd0042b04,0xf24b480c,0xf7e23149,0x8863feb9,0xd1032b02,0x88a35b72,
+0xe00452bb,0xd1022b04,0x68635b72,0x360850bb,0xf64f5b72,0x429a73ff,
+0xe8bdd1e2,0x46c081f0,0x00021040,0x6f00f011,0x41f0e92d,0x017ff001,
+0x46174606,0x0848f8d0,0x4a0fd006,0xfb012314,0x7c5b2303,0xe00018c3,
+0xf8931843,0x463050a0,0x22004629,0x4c092301,0xb92047a0,0xf6474808,
+0xf7e25190,0x4630fe81,0x463a4629,0x4c05230e,0xe8bd47a0,0x46c081f0,
+0x1e00c744,0x0001d375,0x00021040,0x0001d299,0x4b01b510,0xbd104798,
+0x0001d8b9,0x47f0e92d,0xf8d0461f,0x46043848,0x4688685b,0xbf142b01,
+0x2610260a,0x46914b09,0x18304798,0xb157b280,0x46410045,0x464a4620,
+0x4c05463b,0xb2ad47a0,0x19401830,0xe8bdb280,0x46c087f0,0x0001d8b9,
+0x0001d299,0x6f00f011,0x41f0e92d,0x017ff001,0x46174606,0x0848f8d0,
+0x4a0fd006,0xfb012314,0x7c5b2303,0xe00018c3,0xf8931843,0x463050a0,
+0x22004629,0x4c092301,0xb92047a0,0xf6474808,0xf7e2517d,0x4630fe25,
+0x463a4629,0x4c052388,0xe8bd47a0,0x46c081f0,0x1e00c744,0x0001d375,
+0x00021040,0x0001d299,0x47f0e92d,0xf8d04698,0x46053848,0xf89d685b,
+0xf89d6020,0x2b019028,0x230abf14,0xb9492310,0xfb032403,0x4611f404,
+0x46324b0f,0x18244798,0xe000b2a7,0x4c0d005f,0x46414628,0x9b094632,
+0x183847a0,0xf1b9b284,0xd0040f00,0x46284b08,0x46324641,0x4b07e003,
+0x46414628,0x47984632,0xb2801820,0x87f0e8bd,0x0001d91d,0x0001d299,
+0x0001d971,0x0001d8b9,0x6f00f011,0xd003b510,0xf2454819,0xe02a7123,
+0xf0014b18,0x565b017f,0xda082b00,0x0382eb01,0x3b01005b,0xfbb3004a,
+0x009bf3f2,0x2904e00b,0xd802d00b,0xd0052902,0x290be012,0x2916d007,
+0xe00dd009,0xb29800d3,0x0093e010,0x0113e7fb,0xf3f1fbb3,0x00d3e7f7,
+0xfbb3220b,0xe7f2f3f2,0xf2454803,0xf7e27140,0x2000fda3,0x46c0bd10,
+0x00021040,0x1e00c634,0x6f00f011,0x460cb570,0x461d4696,0x2000d001,
+0x4a0fe01c,0x037ff001,0x2b0056d3,0x221ada08,0x47984b0c,0xbf142d00,
+0x24002402,0xe00c3414,0x4b082218,0x0f00f1be,0x24c0bf0c,0x47982460,
+0xbf142d00,0x25002503,0x18201964,0xbd70b280,0x1e00c634,0x0001da4d,
+0x4608b510,0x2203460c,0xf7e34912,0x2302fe4f,0x3b0170e3,0x71637123,
+0x72233302,0x73233324,0x7423331b,0x74633301,0x74a3331b,0x75233304,
+0x22002332,0x015bf06f,0x232f7563,0x71e271a2,0x72a27261,0x736172e2,
+0x73e273a2,0x75a374e2,0xbd1075e2,0x000203b8,0x47f0e92d,0x4681461e,
+0x7b507b13,0xea434614,0x46882000,0xff52f7e6,0x46072108,0xf7e84630,
+0x4621fe8f,0x22064605,0xfe14f7e3,0x1da12206,0xf7e31da8,0x4631fe0f,
+0x46404b13,0x380e4798,0xf7e6b280,0xf105ff3b,0x7328040e,0x0355f06f,
+0x200ff3c0,0x22007368,0x706373ab,0x70a33359,0x712270e2,0x46394648,
+0xf83cf7e7,0xb1084603,0x0307f06f,0x46387163,0xff20f7e6,0xf3c071a0,
+0x71e0200f,0x87f0e8bd,0x1e003e11,0x41f0e92d,0x3ffff1b2,0x4616bf14,
+0x46072600,0x460a4698,0x2902b111,0xe038d003,0x5848f8d0,0xf8d0e007,
+0x685b3848,0xd1302b02,0x6528f500,0xb12e3504,0x46314638,0x4c172301,
+0xb33047a0,0x2b02686b,0x7b2bd10f,0xb166b96b,0x6f00f016,0xf006d11d,
+0x2b02037f,0x2b04d005,0x2b0bd003,0x2b16d001,0xf416d113,0xd0045f60,
+0x4319f642,0x2b015cfb,0xf1b8d00b,0xd0020f00,0x642e2000,0x4638e007,
+0xf7e863ee,0x4640ff57,0xf04fe001,0xe8bd30ff,0x46c081f0,0x0001d375,
+0xe92d680b,0x460741f0,0xb123460e,0xf647480c,0xf7e221e8,0x463cfca5,
+0x5b04f854,0x00ad1d30,0x462a4621,0xfd82f7e3,0x21004620,0xf7e3462a,
+0x683bfd5d,0x23006033,0xe8bd603b,0x46c081f0,0x00021040,0x41f0e92d,
+0x6700f011,0x461c4616,0xf001d01f,0x701a027f,0x2302f3c1,0x2b013b04,
+0x2a20d901,0xea6fd104,0xea6f6342,0x70236353,0x70a30a33,0x0370f401,
+0xf0430c1b,0xf4110307,0x70660f00,0xd07a70e3,0x6343ea6f,0x6353ea6f,
+0x4a3de074,0x057ff001,0x2b005753,0x5d55da23,0x0f7ff015,0x4839d104,
+0x717df245,0xfc58f7e2,0x46202206,0xf7e34639,0x7823fd19,0x020ff005,
+0x030ff023,0x7022431a,0x78a30532,0x01520d12,0x4312ea43,0x786370a3,
+0x2312ea43,0x78237063,0x70234313,0x2d02e04e,0x2d04d00a,0x2d0bd015,
+0x2d16d006,0x4825d004,0x71c8f245,0xfc30f7e2,0xd00a2d04,0x2d02dc02,
+0xe025d005,0xd0062d0b,0xd00f2d16,0x00f3e020,0x00b3e00a,0x0133e008,
+0xf2f5fbb3,0xfb00b290,0x4293f205,0x1c43d01c,0xe019b298,0x00f2210b,
+0xf3f1fbb2,0xfb00b298,0x429af301,0x1c43d010,0xfb00b298,0x1a9bf301,
+0xd9092b07,0xe0082280,0xf245480c,0xf7e271b0,0x2000fbff,0xe0004602,
+0x23052200,0xf303fb05,0xf0427023,0x70630304,0x0a0370a0,0x230070e3,
+0x71637123,0x81f0e8bd,0x1e00c634,0x00021040,0x4605b570,0x46acf243,
+0xf8d0460c,0x59a9073c,0x47984b11,0xf895b1fc,0xb1e33d5e,0x3de0f895,
+0xf243b1cb,0x592b44b0,0xf505b1ab,0x46285158,0xf7fe3108,0xb170fafd,
+0xf0136843,0xd00a0f40,0x3183f890,0x592ab13b,0x073cf8d5,0x085259a9,
+0x4c022301,0xbd7047a0,0x1e006221,0x1e0061f9,0x460cb570,0x46114606,
+0x7813b13a,0x0501f013,0xf7fed103,0xb100fadd,0x6ba163a5,0x073cf8d6,
+0xfbc8f7e6,0x46014b04,0xf104220f,0x4798001e,0xf8842300,0xbd70302d,
+0x1e0040f9,0x47f0e92d,0x46812600,0x46b0460d,0xeb05e016,0x687c0708,
+0x6e21b17c,0xf8d9b129,0xf8b40048,0x4b0a2064,0x4b094798,0x0048f8d9,
+0x22904621,0x23004798,0x3601607b,0x0804f108,0x429e682b,0x2300d3e5,
+0xe8bd602b,0x46c087f0,0x1e005c15,0x4ff0e92d,0xf10db08d,0x90010808,
+0x4617460c,0x22282100,0x461e4640,0xb058f8dd,0x90d0f8df,0xfc26f7e3,
+0x46204639,0x47c82201,0x28004601,0x7842d054,0x0504f108,0xbf282a10,
+0x31022210,0x92024628,0xfc34f7e3,0x46204639,0x47c82232,0x460146c2,
+0x9802b170,0xf1c0784b,0x429c0410,0x461cbfa8,0x31021828,0xf7e34622,
+0x9b02fc21,0x9302191b,0xf106b12e,0x46510034,0xf7e32228,0x9a01fc17,
+0xf8d24640,0x22001848,0xf7fa3178,0xb978fec3,0xf2439a01,0x5cd343d8,
+0x4640b1f3,0x47984b11,0xb12eb1d0,0x0034f106,0x22284641,0xfbfef7e3,
+0x2b109b02,0x480cd904,0x2173f249,0xfb10f7e2,0x0f00f1bb,0x4658d101,
+0x4658e008,0x2228a902,0xfbecf7e3,0xe0012000,0x30fff04f,0xe8bdb00d,
+0x46c08ff0,0x0001ee69,0x00021040,0x1e003759,0x41f3e92d,0x8020f8dd,
+0x2300461f,0x4606703b,0x3000f8c8,0x000cf101,0xf1a24b24,0x2205010c,
+0x46044798,0x2301b980,0x3d5df886,0xf7e84630,0xf506f941,0x46305158,
+0x46223108,0x94004623,0xfd6cf7e9,0xe02f4620,0xf8907903,0xf003c001,
+0x788305fe,0x0f04f1bc,0x3000f8c8,0xf0037903,0x703b0301,0x7943d102,
+0xb1e5b903,0x73f8f241,0xf3c65af6,0x45ae0eca,0x1d60d315,0xe00a4629,
+0xd1064571,0xf0067803,0x41130207,0x0001f003,0x3101e00a,0xf1ac3001,
+0xebc10204,0x42d30305,0x458ed401,0x2000d2ec,0x81fce8bd,0x1e003759,
+0xf241b537,0x5903445c,0x68194605,0xf7fea801,0x592bf96f,0x68182400,
+0x7b03e008,0x0f02f013,0x1c63d001,0xa801b2dc,0xf950f7fe,0xd1f42800,
+0xbd3e4620,0x4ff7e92d,0x460e4617,0xa901466a,0xf7e64683,0xf107ffbf,
+0xf7e6001e,0x4682fcad,0x0022f107,0xfca8f7e6,0x8000f8dd,0x46819d01,
+0x46404629,0x4653464a,0x47a04c1c,0x2001b108,0x7c73e032,0xea4f7c32,
+0xea424115,0x042b2203,0x429a0c1b,0x4101ea4f,0x9101d201,0xb119e009,
+0x3380f5a1,0xe0049301,0x93014b11,0x33fff108,0x9b019300,0x43134639,
+0x46309301,0x47984b0d,0x46012218,0x46584b0c,0x4c0c4798,0xa9011f03,
+0x22004668,0x980047a0,0x464a9901,0x4c034653,0x380047a0,0x2001bf18,
+0x8ffee8bd,0x0001d441,0xffff0000,0x0001edf9,0x0001da4d,0x0001d409,
+0x47ffe92d,0xf04f4698,0x930333ff,0xfb08330d,0x460f1303,0x8a5b8a19,
+0x42994605,0xd2084692,0x88bb88f9,0xd2074299,0x46414638,0x47984b3c,
+0xf8cde06f,0xe00c800c,0xa9034638,0x47984b39,0x4839b920,0x61dcf644,
+0xfa02f7e2,0x45439b03,0x9a03dc61,0xdb512a00,0xfb02230c,0x8a1b7303,
+0x4831b923,0x61e4f644,0xf9f2f7e2,0xf8959903,0x410b3d84,0xf0034541,
+0xd1020301,0xd04a2b00,0xb113e000,0x46384b29,0x4b29e001,0x47984638,
+0xb9204606,0xf6444824,0xf7e261ea,0x69ebf9d9,0x4630b313,0xfae8f7e8,
+0xf8df4c22,0x5c239094,0xf8194630,0xeb052003,0xf8d202c2,0x33013658,
+0x3658f8c2,0xfad8f7e8,0x46315c23,0x4003f819,0xeb056ca8,0xf8d404c4,
+0x9301365c,0x47984b16,0x18c09b01,0x065cf8c4,0x6ca84b14,0x22014631,
+0xf8d54798,0x330133c0,0x33c0f8c5,0x46414638,0x4b074652,0xb9204798,
+0xf6444807,0xf7e261f9,0x2001f99f,0x2000e000,0xe8bdb004,0x46c087f0,
+0x1e0039cd,0x1e003ced,0x00021040,0x1e003ac5,0x1e003b05,0x000238e6,
+0x1e003e11,0x1e005c41,0x00021010,0x41f0e92d,0x460c4606,0xf7f14617,
+0xf896ffff,0x2b003024,0x4620d06b,0x47a04c36,0xf8b64605,0x47a00324,
+0xd1624285,0x2700f896,0x36fff996,0x1a9b4639,0x783b0098,0x4298463a,
+0x4603bfb8,0x787b703b,0xbfb84298,0x707b4603,0x428378bb,0x4603bfa8,
+0x78fb70bb,0xbfa84283,0x70fb4603,0x42987913,0x4603bfb8,0x7b137113,
+0xbfb84298,0x73134603,0xf1073201,0x429a0308,0x463ad1f0,0x7d132400,
+0x42983401,0x4603bfb8,0x7f137513,0xbfb84298,0x77134603,0x302cf892,
+0xbfb84298,0xf8824603,0xf892302c,0x42983034,0x4603bfb8,0x3034f882,
+0x2c083201,0x2200d1e3,0x3024f891,0x42983201,0x4603bfb8,0x3024f881,
+0x303cf891,0xbfb84298,0xf8814603,0x3101303c,0xd1ed2a08,0x3044f897,
+0xbfb84298,0xf8874603,0xe8bd3044,0x46c081f0,0x0001e9bd,0x03fcf001,
+0xd0012b88,0xe0082000,0x7340f401,0x7f40f5b3,0x2318bf14,0x5cd3231e,
+0x477009d8,0xe92d8a8b,0x2b2d41f0,0x460e4605,0xd8056847,0x3404f8d7,
+0xf8c73301,0xe02a3404,0x1da2690c,0x785179a3,0x2101ea43,0x47984b16,
+0xf8d5b928,0x33013090,0x3090f8c5,0xf104e01b,0x788b0110,0x7c20784a,
+0x78cb431a,0x0202ea40,0x790a4313,0x794b431a,0xd0024313,0x0f01f010,
+0xf8d7d005,0x33013414,0x3414f8c7,0x2001e003,0x66ae666e,0xf8d5e005,
+0x200030a4,0xf8c53301,0xe8bd30a4,0x46c081f0,0x0001e3e9,0x41f0e92d,
+0x46156843,0x7b8a6c9f,0x3088f8d0,0x0241f3c2,0x46043301,0xf8c0460e,
+0x2a033088,0xe8dfd866,0x020df002,0x6e034b22,0xf8d0b133,0x33013094,
+0x3094f8c0,0xfe16f7f0,0xe0502301,0x2b016e03,0x7b0bd114,0x0f04f013,
+0x483fd004,0x61a6f44f,0xf88af7e2,0x2b0e8aab,0x6ea3d91c,0x483abb43,
+0x5139f240,0x6e03e022,0xd0052b01,0x3094f8d4,0xf8c43301,0xe05c3094,
+0x66032303,0xf0137b0b,0xd0040f04,0xf2404830,0xf7e2514c,0x8aabf86d,
+0xd8062b11,0xf8d26862,0x33013404,0x3404f8c2,0x6ea3e047,0x4828b923,
+0x5155f240,0xf85cf7e2,0x66a56ea3,0xe01f601d,0xb1336e03,0x3094f8d0,
+0xf8c03301,0xf7f03094,0x6e63fdcd,0x6ea3b90b,0x481db123,0x61adf44f,
+0xf846f7e2,0x66232303,0x46294620,0x47984b19,0xe022b930,0xf2404816,
+0xf7e25174,0xe01cf839,0x2b036e23,0x2200d121,0x66226e63,0x666266a2,
+0x686169da,0x0280f042,0xf8d161da,0x6820256c,0xf8c13201,0xf8d4256c,
+0x6c89208c,0xf8c43201,0x4632208c,0xfef2f7eb,0x4620e007,0xfd96f7f0,
+0x46294638,0x4b042200,0xe8bd4798,0x46c081f0,0x00021aec,0x0001e409,
+0x1e005c41,0x294bb500,0xe004f8dd,0xd0269a02,0x2921dc06,0x293dd01b,
+0x291fd015,0xe005d01c,0xd006298d,0xd01d29a2,0xd01d294c,0x0016f06f,
+0xf890e028,0xb90b3cfc,0xe0024618,0x3848f8d0,0x60106858,0xf642e01d,
+0x56c34316,0xf642e002,0x5ac323d0,0xe0146013,0x23cef642,0xf241e7f9,
+0xe7f663f8,0xe7f57c43,0x32fff10e,0x73fef64f,0xd902429a,0x001cf06f,
+0xf241e004,0xf82063f8,0x2000e003,0x46c0bd00,0x18432100,0x2dd0f8d3,
+0xf8d2b12a,0xb93b3094,0x309df892,0x3104b923,0xd1f22910,0xe0002000,
+0x47702001,0x41f0e92d,0x46164605,0xb921460f,0xf2404818,0xf7e1315d,
+0xb925ffab,0xf2404815,0xf7e1315e,0xeb07ffa5,0xf8d40486,0xf1b88050,
+0xd0010f00,0xe01b2000,0x719ef44f,0xf101fb06,0x6128f501,0x46281869,
+0xf7fd3104,0x6520ff0d,0xf06fb910,0xe00b001a,0x76032301,0x6d206147,
+0x30194905,0xf7e32206,0x6d23f869,0x629e4640,0x81f0e8bd,0x00021c25,
+0x00021c32,0x53d2f243,0xb97b5ac3,0x18424619,0x0358f641,0xb13258d2,
+0xb1236913,0x2b017a13,0x2b03d006,0x3104d004,0xd1f02910,0xe0012000,
+0x4080f44f,0x46c04770,0x4618b510,0x3008f89d,0x690cb963,0x6923b154,
+0x79a3b143,0xd9122b35,0xf240480a,0xf7e141f4,0xe00cff4f,0xd9062803,
+0xf2404806,0xf7e141fb,0x2400ff47,0xeb02e003,0xf8d30380,0x462040b0,
+0x46c0bd10,0x00021c38,0x7c43b570,0x4615460c,0x680cf8d0,0xd05d2b00,
+0x482fb921,0x7171f44f,0xff2ef7e1,0x3b017a23,0xd8532b0a,0xf003e8df,
+0x25061b06,0x52525252,0x003a5252,0x265af8b6,0x365af8b6,0xb2dbb292,
+0x4203ea42,0x0300f04f,0x20b4f8c4,0x30b8f8a4,0x0034f104,0x22802100,
+0xffd4f7e2,0xb11de036,0xf8c4682b,0xe0013104,0x5104f8c4,0xf8842300,
+0x21003108,0xb12d00cb,0x191b682a,0x88aa635a,0xe002871a,0x635d191b,
+0x3101871d,0xd1f12910,0xf8a42300,0xf8c430b8,0xe01730b4,0x190a2100,
+0xf8822336,0x33263436,0x3437f882,0x2b101c8b,0xd1f44619,0x190a2100,
+0xf8822336,0x33263448,0x3449f882,0x2b101c8b,0xd1f44619,0x46c0bd70,
+0x00021c38,0x460db5f7,0xf89d461f,0x46146020,0x4824b922,0x41cef240,
+0xfec6f7e1,0x2b0b7a23,0xb1b6d11f,0x786278a3,0x6086f504,0x7823431a,
+0x0006f100,0x78e24313,0x7923431a,0x79624313,0xd102431a,0x22012110,
+0x2110e001,0xf7e22202,0xf504fe63,0x46386186,0x22123104,0xff8af7e2,
+0xf8b5e01f,0xf013309e,0xd00e0f01,0x786278a3,0x7823431a,0x78e24313,
+0x7923431a,0x79624313,0xd102431a,0x01a4f105,0xf104e001,0xf8d501b4,
+0x46203094,0x96019300,0xf105463a,0x4c0203da,0xbdfe47a0,0x00021c38,
+0x1e008fed,0xf890b570,0x46053023,0xbf0c2b00,0x22362214,0x53c2f500,
+0x24043328,0xf853e003,0xb1291b04,0x42943401,0xf06fdbf9,0xe00c0415,
+0xf44f4b07,0x4798608b,0x0284eb05,0x0358f641,0x50d02800,0xf06fbf08,
+0x4620041a,0x46c0bd70,0x1e00578d,0x46c04770,0x4370f401,0x5f80f5b3,
+0xf5b3d002,0xd11b5f00,0x6340f401,0x6f40f5b3,0xf5b3d009,0xd1136f00,
+0x7340f401,0x7040f5b3,0x2001bf18,0xf401e00d,0xf5b07040,0xd1027f00,
+0x7000f5a0,0xf5b0e005,0xbf187080,0xe0002001,0x47702001,0x0ffff011,
+0xd103b510,0xf7f12101,0xe004fcaf,0x3848f8d0,0xf7f56818,0xbd10fad5,
+0xf400b570,0xf5b47440,0x46057f40,0xb2c0d101,0xf400e020,0xf5b36340,
+0xd0046f40,0xf240480e,0xf7e1416c,0xf5b4fe0d,0xd1047f00,0x28ddb2e8,
+0x1c83d80c,0xf5b4e00d,0xd0047f80,0xf2404806,0xf7e14174,0xb2e8fdfd,
+0xd8012802,0xe0012000,0xb2d81e83,0x46c0bd70,0x00021e79,0x4604b510,
+0xf240b131,0xf64f413b,0xf7f572f8,0xe00af97b,0x413cf240,0xf7f52207,
+0x4620f97f,0x413bf240,0xf7f52207,0xbd10f979,0x47f0e92d,0xf2404688,
+0x460461b7,0xf7f54691,0xf240f957,0x460561b6,0xf7f54620,0xf240f951,
+0x460661b5,0xf7f54620,0xf240f94b,0x460761b4,0xf7f54620,0xf04ff945,
+0x46620c00,0xfa504664,0xf013f304,0xd0010101,0xe0032101,0x0301f10c,
+0xfc83fa5f,0xb2da1c53,0xd0122a10,0x29003401,0xe00ed0ed,0x0310f1a2,
+0xf303fa57,0x0f01f013,0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,
+0x2a1fb2da,0x2900d811,0xe00ed0ec,0x0320f1a2,0xf303fa56,0x0f01f013,
+0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,0x2a2fb2da,0x2900d811,
+0xe00ed0ec,0x0330f1a2,0xf303fa55,0x0f01f013,0x2101d001,0xf10ce003,
+0xfa5f0301,0x1c53fc83,0x2a3fb2da,0x2900d801,0xf04fd0ec,0x22000e3f,
+0xfa55240f,0xf013f304,0xd0010101,0xe0032101,0x33fff10e,0xfe83fa5f,
+0xb2da1c53,0xd0122a10,0x29003c01,0xe00ed0ed,0x031ff1c2,0xf303fa56,
+0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a1fb2da,
+0x2900d811,0xe00ed0ec,0x032ff1c2,0xf303fa57,0x0f01f013,0x2101d001,
+0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a2fb2da,0x2900d811,0xe00ed0ec,
+0x033ff1c2,0xf303fa50,0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,
+0x1c53fe83,0x2a3fb2da,0x2900d801,0xf888d0ec,0xf889e000,0xe8bdc000,
+0x46c087f0,0x20004601,0x4686b500,0x4380f04f,0xf30efa43,0x428a181a,
+0x0050ea4f,0x1a89d802,0x0000ea43,0x0e02f10e,0x0f20f1be,0x4288d1ee,
+0x3001bf38,0x46c0bd00,0x2a3fb5f0,0x4615b089,0x9f0e461c,0x2900dc23,
+0x004adb21,0x006d2318,0x3201b26d,0x33089305,0xb2569307,0x0385eb04,
+0xebc59303,0x33010306,0xf2409304,0x93004356,0x4255f240,0xa9039506,
+0x4c063301,0xb2aa47a0,0x2301e003,0x18d354bb,0x42b2b29a,0xb009ddf9,
+0x46c0bdf0,0x1e00705d,0xb5102300,0x3dbcf8c0,0x6144f240,0xf7f54604,
+0xf010f847,0xd0050301,0x46202202,0x613ff240,0xe0074613,0x0f02f010,
+0x4620d006,0x4153f240,0x4200f44f,0xf856f7f5,0x22084620,0xf2402300,
+0xf7f561da,0x4620f84f,0x23002280,0x61daf240,0xf848f7f5,0x46202203,
+0xf2402301,0xf7f561d6,0x2100f841,0x4b084620,0x6be04798,0xf94af7e6,
+0x6182f44f,0xbf142802,0x23602320,0x462022e0,0xf830f7f5,0x46c0bd10,
+0x1e007b0d,0xf8bdb570,0x460c601c,0x72fff64f,0x41b6f240,0x0303f006,
+0xf7f54605,0x220ff81f,0xf2404628,0xea0441b7,0xf7f50302,0x6be8f817,
+0xf924f7e6,0xd1112802,0x462802f3,0x41b1f240,0x52c0f44f,0x4378f403,
+0xf808f7f5,0xb29b00f3,0xf2404628,0x221841e6,0xf800f7f5,0x46c0bd70,
+0x2100b500,0x4b074686,0x18d000ca,0x459e58d3,0x7900d101,0x3101e004,
+0xd1f4290c,0x30fff04f,0x46c0bd00,0x00022d38,0x18422100,0x23003101,
+0x75532910,0x4770d1f9,0x41f0e92d,0x8018f8dd,0xf89d4604,0x4608701c,
+0x46162100,0x468c461d,0xeb04e015,0xf893030c,0xb116e004,0x0f80f01e,
+0xb12dd00b,0xf00e4a0f,0x56d3037f,0xdb042b00,0xea0e1842,0x71130308,
+0xf10c3101,0x68230c01,0xd3e6459c,0x60017d23,0xb13f7503,0x3015b935,
+0x0115f104,0xf7e22210,0xe001fcf1,0x47984b02,0x81f0e8bd,0x1e00c634,
+0x0001ed75,0x7c83b510,0x0307f003,0xd0012b04,0xd11b2b06,0xf0037903,
+0x28010003,0x2802d01b,0xb958d001,0x780ae01d,0x037ff002,0x0f80f012,
+0x6000f043,0xf440d019,0xe0166080,0xf240480b,0xf7e111cb,0xf44ffbe1,
+0xe00e7000,0x7903b11b,0x0f01f013,0x780bd005,0xf0034a05,0x5cd00307,
+0x780ae003,0xfbb22305,0xbd10f0f3,0x00022b1b,0x00022996,0x4604b530,
+0xb08b6800,0x2100b320,0x22284668,0xfc86f7e2,0x46082100,0x1863e010,
+0xf002791a,0x2b7f037f,0x7522d101,0xad0ae007,0xf803182b,0x9b002c24,
+0x33013001,0x31019300,0x42996823,0x9b00d3eb,0xf844a901,0x46203b04,
+0xf7e22210,0x2001fc87,0xbd30b00b,0x4605b570,0x461e460c,0xbb424610,
+0xe046f895,0xd0482900,0x182be020,0x4b25791a,0x3022f853,0x6f00f013,
+0xf003d012,0x4922027f,0x2314b126,0x1303fb02,0xe003685b,0xfb022314,
+0x585bf303,0xf44f005b,0xfbb3727a,0xe001f3f2,0x037ff003,0xd929429c,
+0xb2d81c43,0xd1dc4570,0xf895e024,0xb301e0a8,0xe01b2000,0xf8931943,
+0x4b122086,0xf8134910,0xf0033022,0xb126027f,0xfb022314,0x685b1303,
+0x2314e003,0xf303fb02,0x005b585b,0x727af44f,0xf3f2fbb3,0xd905429c,
+0xb2d81c43,0xd1e14570,0x4670e000,0x1e43b108,0xbd70b2d8,0x1e00d060,
+0x1e00c744,0x1e00d148,0x4a0cb510,0x4b0c468e,0x1080f890,0xbf142900,
+0x46194611,0xf8512200,0xb2d03022,0xd0084573,0x2a1d3201,0x4805d1f7,
+0x1187f640,0xfb28f7e1,0xbd102000,0x1e00d464,0x1e00d3f0,0x00022b3d,
+0xf890b570,0x460430a8,0xb923460d,0xf2404813,0xf7e151bb,0x2200fb15,
+0xb2d14b11,0x3022f853,0x037ff003,0xd10342ab,0x20a8f894,0xe0102000,
+0x2a113201,0x4809d1f0,0x51c5f240,0xfb00f7e1,0xe00a2000,0xf8931903,
+0x428b3086,0x1c43d005,0x4290b2d8,0xf04fd1f6,0xbd7030ff,0x00022b3d,
+0x1e00d148,0x4ff8e92d,0x30a8f890,0xb9234604,0xf24048c3,0xf7e1619e,
+0xf894fae3,0x18e330d5,0x5086f893,0x5d5a4bbf,0xf88418eb,0x7c5b20d7,
+0x30d8f884,0x5d5a4bbc,0xf88418eb,0x7c5b20d9,0xf884012a,0x4bb930da,
+0x290058d1,0x4620dd0c,0x4bb7b2c9,0x28004798,0xf894dd06,0xf88430ea,
+0xf04300e9,0xe0070310,0x30d5f894,0x30e9f884,0x30eaf894,0x0310f023,
+0x30eaf884,0x01294bab,0x685a18cb,0x20edf884,0xf884689a,0x68db20eb,
+0x30ecf884,0x58c94ba7,0xdd0c2900,0xb2c94620,0x47984ba3,0xdd062800,
+0x316cf8b4,0x0166f884,0x0310f043,0xf04fe007,0xf88433ff,0xf8b43166,
+0xf023316c,0xf8a40310,0xf8b4316c,0xf894316c,0xf44310d5,0xf8a47380,
+0x4b96316c,0x1165f884,0x1305eb03,0xf8d4685a,0xf884e000,0x891a2170,
+0xf8a4899b,0xf8a42176,0xf89e3178,0x2b00303e,0x8193f000,0xf8931863,
+0x4b8b2086,0x2022f853,0x3085f894,0xbf142b00,0x0300f44f,0xea432300,
+0xf8d40502,0xf1b33128,0xf0003fff,0xf0158166,0xd0276800,0x0f00f415,
+0x3080f894,0xf8dfd00e,0xf005b1fc,0xb123027f,0xfb022314,0x68dab303,
+0x2314e013,0xb303fb02,0xe00e689a,0xb1dcf8df,0x027ff005,0x2314b123,
+0xb303fb02,0xe004685a,0xfb022314,0xf853f303,0xf44f200b,0xfbb273fa,
+0xe001f0f3,0x007ff005,0x1120f8d4,0x6c00f011,0xf411d027,0xf8940f00,
+0xd00e3080,0xb19cf8df,0x027ff001,0x2314b123,0xb303fb02,0xe01368da,
+0xfb022314,0x689ab303,0xf8dfe00e,0xf001b180,0xb123027f,0xfb022314,
+0x685ab303,0x2314e004,0xf303fb02,0x200bf853,0x73faf44f,0xf2f3fbb2,
+0xf001e001,0x4290027f,0x7aa0f504,0x7790f504,0x7698f504,0x79a8f504,
+0xf8d4d952,0xf1b33138,0xd0103fff,0x2004f8de,0x313cf8d4,0x270cf8d2,
+0xf8de1a9b,0x42932048,0x4648d205,0x22104631,0xfac4f7e2,0xf04fe00a,
+0xf8c433ff,0x68233158,0x204cf893,0x40932301,0x3154f884,0x46392210,
+0xf7e24630,0x6821fab3,0xf8d2684a,0xf8c4370c,0xf8d4313c,0xf1b33148,
+0xd0113fff,0x270cf8d2,0x314cf8d4,0x6c8a1a9b,0xd2094293,0x3140f8d4,
+0xd10542ab,0x46514638,0xf7e22210,0xe00cfa97,0x22016821,0x303ff891,
+0xf303fa12,0x3128f8c4,0x304cf891,0xf884409a,0xf04f2124,0xe0bd33ff,
+0x0f00f1b8,0xf415d027,0xf8940f00,0xd00e3080,0xb088f8df,0x027ff005,
+0x2314b123,0xb303fb02,0xe01368da,0xfb022314,0x689ab303,0xf8dfe00e,
+0xf005b06c,0xb123027f,0xfb022314,0x685ab303,0x2314e004,0xf303fb02,
+0x200bf853,0x73faf44f,0xf0f3fbb2,0xf005e001,0xf1bc007f,0xd0380f00,
+0x0f00f411,0x3080f894,0xf8dfd01f,0xf001b030,0xb1ab027f,0xfb022314,
+0x68dab303,0x46c0e024,0x00022b3d,0x1e00d18c,0x1e00d1ae,0x1e00d1d0,
+0x0001efbd,0x1e00d2e0,0x1e00d148,0x1e00c744,0xfb022314,0x689ab303,
+0xf8dfe00e,0xf001b0e4,0xb123027f,0xfb022314,0x685ab303,0x2314e004,
+0xf303fb02,0x200bf853,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,
+0x2210d23f,0x46504639,0xfa14f7e2,0x684a6821,0x370cf8d2,0x314cf8c4,
+0x3138f8d4,0x3ffff1b3,0xf8d2d011,0xf8d4270c,0x1a9b313c,0x42936c8a,
+0xf8d4d209,0x42ab3130,0x4638d105,0x22104631,0xf9f8f7e2,0x6821e00c,
+0xf8912201,0xfa12303f,0xf8c4f303,0xf8913128,0x409a304c,0x2124f884,
+0x46302210,0xf7e24649,0xf04ff9e5,0xf8c433ff,0x68233158,0x204cf893,
+0x40932301,0x3154f884,0xf89ee012,0x2201303f,0xf303fa12,0x3128f8c4,
+0xf8936823,0x409a304c,0x33fff04f,0x2124f884,0x3138f8c4,0x3148f8c4,
+0xf8c42300,0xf8845120,0xe8bd3160,0x46c08ff8,0x1e00c744,0x4ff8e92d,
+0x3076f890,0xe000f8d0,0x791918c3,0x46044bb1,0x18cb5c5a,0x2078f880,
+0xf8807f5b,0x4bae3079,0x18cb5c5a,0x207af880,0xf8807f5b,0xf89e307b,
+0x2b00303e,0x8169f000,0xc004f8de,0x3034f8dc,0xf0002b00,0x4ba58162,
+0x2021f853,0x3085f890,0xbf142b00,0x0300f44f,0xea432300,0xf8d00502,
+0xf1b330f4,0xf0003fff,0xf015813d,0xd0266b00,0x0f00f415,0x3080f890,
+0xf005d00e,0xb12b027f,0x23144897,0x0303fb02,0xe01368da,0x23144994,
+0x1303fb02,0xe00d689a,0x027ff005,0x4e90b12b,0xfb022314,0x685a6303,
+0x2314e004,0xf303fb02,0x581a488b,0x73faf44f,0xf0f3fbb2,0xf005e001,
+0xf8d4007f,0xf01110f0,0xd0266a00,0x0f00f411,0x3080f894,0xf001d00e,
+0xb12b027f,0x23144e80,0x6303fb02,0xe01368da,0x23144e7d,0x6303fb02,
+0xe00d689a,0x027ff001,0x4e79b12b,0xfb022314,0x685a6303,0x2314e004,
+0xf303fb02,0x599a4e74,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,
+0x7984f504,0x07f0f104,0x06fcf104,0x788af504,0xf8d4d943,0xf1b33100,
+0xd00e3fff,0x270cf8dc,0x3104f8d4,0xf8de1a9b,0x42932048,0x4640d205,
+0x220c4631,0xf90ef7e2,0xf04fe003,0xf8c433ff,0x220c3118,0x46304639,
+0xf904f7e2,0x684a6821,0x370cf8d2,0x3104f8c4,0x310cf8d4,0x3ffff1b3,
+0xf8d2d011,0xf8d4270c,0x1a9b3110,0x42936c8a,0xf8d4d209,0x42ab3108,
+0x4638d105,0x220c4649,0xf8e8f7e2,0x6823e006,0x203ff893,0x40932301,
+0x30f4f8c4,0x33fff04f,0xf1bbe0a0,0xd0260f00,0x0f00f415,0x3080f894,
+0xf005d00e,0xb12b027f,0x23144843,0x0303fb02,0xe01368da,0x23144840,
+0x0303fb02,0xe00d689a,0x027ff005,0x483cb12b,0xfb022314,0x685a0303,
+0x2314e004,0xf303fb02,0x581a4837,0x73faf44f,0xf0f3fbb2,0xf005e001,
+0xf1ba007f,0xd0260f00,0x0f00f411,0x3080f894,0xf001d00e,0xb12b027f,
+0x2314492d,0x1303fb02,0xe01368da,0x2314492a,0x1303fb02,0xe00d689a,
+0x027ff001,0x4926b12b,0xfb022314,0x685a1303,0x2314e004,0xf303fb02,
+0x585a4921,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,0x220cd23a,
+0x46484639,0xf87ef7e2,0x684a6821,0x370cf8d2,0x3110f8c4,0x3100f8d4,
+0x3ffff1b3,0xf8d2d011,0xf8d4270c,0x1a9b3104,0x42936c8a,0xf8d4d209,
+0x42ab30fc,0x4638d105,0x220c4631,0xf862f7e2,0x6823e006,0x203ff893,
+0x40932301,0x30f4f8c4,0x46414630,0xf7e2220c,0xf04ff855,0xf8c433ff,
+0xe0153118,0x1e00d0d4,0x1e00d10e,0x1e00d060,0x1e00c744,0x303ff89e,
+0x409a2201,0x33fff04f,0x20f4f8c4,0x3118f8c4,0x3100f8c4,0x310cf8c4,
+0xf8c42300,0xf88450f0,0xe8bd3160,0x46c08ff8,0x21fcf8d0,0xb5102300,
+0x31fcf8c0,0x4200f8d0,0x3200f8c0,0x4620b10a,0xbd104790,0x41f0e92d,
+0x46067a04,0x2c00460d,0xf8d0d12c,0x2b013210,0xf8d0d103,0x681b3214,
+0xb32db323,0x29207869,0xb15ad822,0x1ca8b301,0xe0044622,0xb10b5c13,
+0xd1032b20,0x428a3201,0xe015d1f8,0x4214f8d6,0xe00a2700,0x786b6822,
+0xd104429a,0x1ca91d20,0x47984b07,0x3424b130,0xf8d63701,0x429f3210,
+0xe001dbf0,0xe0002001,0xe8bd2000,0x46c081f0,0x1e00d671,0xf8d0b108,
+0x47700278,0xe92db082,0x290747f0,0x460d4680,0x93094692,0x9030f8dd,
+0x9e0a9f0b,0xd904461c,0xf240480f,0xf7e041ad,0xb104feeb,0x480cb926,
+0x41aff240,0xfee4f7e0,0xfb052314,0xf2418303,0x509c3244,0x509f3204,
+0xf8433204,0x32049002,0x3204509e,0xa002f843,0x47f0e8bd,0x4770b002,
+0x00022c1c,0x43f0e92d,0xfb022414,0xb0870404,0x549af504,0x3404ad01,
+0x46174689,0xcc0f4680,0x6823c50f,0x602b9a02,0xfb07230c,0xf8d39303,
+0x980531f4,0xb10ab35b,0x47904649,0x240c2000,0x9604fb00,0xf8d64640,
+0xf7fc11f4,0x42b8fd0b,0xfb07d1f5,0x46409504,0x11f4f8d5,0xfd02f7fc,
+0xfb002414,0xf2418004,0x58c33344,0xf8c64640,0xf8d531f4,0xf7fc11f4,
+0xfb00fcf5,0xf2418404,0x58e33354,0x31f8f8c6,0xf8c52300,0xb00731f4,
+0x83f0e8bd,0x4ff0e92d,0xfb022414,0xb0890404,0x549af504,0x3404ad03,
+0x46904689,0xcc0f4682,0x6823c50f,0xb014f8dd,0x9b07602b,0x230c9301,
+0x9203fb08,0x31fcf892,0xf8d2b113,0xb12331f4,0xf2404827,0xf7e041ce,
+0x4b26fe63,0xf8532400,0x230c5028,0x9303fb04,0xf8d34650,0xf7fc11f4,
+0x4607fcb9,0x4b1fb130,0x3020f853,0xd20942ab,0xe7ee4604,0x0f07f1b8,
+0x4819d004,0x41dcf240,0xfe46f7e0,0xf8534b17,0x42ab3027,0x4814d104,
+0x41ddf240,0xfe3cf7e0,0xfb082214,0x210ca002,0x9501fb04,0x3644f241,
+0xfb075983,0xf241a202,0xf8c53454,0xfb0831f4,0x59039101,0x31f8f8c5,
+0xf8c15993,0x591331f4,0x31f8f8c1,0x0f00f1bb,0x9801d002,0x47d84649,
+0xe8bdb009,0x46c08ff0,0x00022c1c,0x00022bfc,0xb5702a06,0x460c4606,
+0xd9044615,0xf2404818,0xf7e05151,0x230cfe09,0x4103fb05,0x72fcf501,
+0xb3237913,0x71132300,0x31f4f8d1,0x4630b1fb,0x462a4621,0x47984b0f,
+0xd0022d03,0xd00b2d04,0xf894e015,0xb11b322c,0x46214630,0xe00c2204,
+0x3214f894,0xe005b15b,0x3214f894,0xf8d4b13b,0xb9233218,0x46214630,
+0x4b032202,0xbd704798,0x00022c1c,0x0001f861,0x0001f8f1,0xe92d2a07,
+0x460741f0,0x4616460d,0x482ed904,0x5106f240,0xfdcaf7e0,0xfb062314,
+0xf2417303,0x589b3244,0xd04c2b00,0xfb06230c,0xf5015103,0x791372fc,
+0xd1442b00,0x71133301,0x31f4f8d1,0x4821b123,0x5112f240,0xfdb0f7e0,
+0xd1062e02,0x3224f8d5,0xd1342b00,0x3218f8d5,0x2e03e025,0x4638d109,
+0x22024629,0x47a04c18,0x46294638,0x47a02204,0x2e06e020,0x4638d103,
+0x22054629,0x1e73e00e,0xd8122b06,0xf003e8df,0x04111116,0x0016110d,
+0x3218f8d5,0x4638b99b,0x22024629,0x47984b0a,0xf8d5e008,0xb953323c,
+0x4806e004,0x5142f240,0xfd7af7e0,0x46294638,0x4b044632,0xe8bd4798,
+0x46c081f0,0x00022c1c,0x0001f861,0x0001f8f1,0x41f0e92d,0x435cf241,
+0x7e0b58c7,0x460d4680,0xf0402b00,0x684b8083,0x0f80f413,0x6908d17e,
+0x0380f443,0xb170604b,0x0119f101,0x4b432206,0xb1204798,0xf44f4842,
+0xf7e071c3,0x4640fd4d,0xf7f04629,0x463cf8f5,0xe0062600,0xb1136ae3,
+0x46296b60,0x36014798,0x6a7b3410,0xd3f5429e,0x2600462c,0x1120f8d4,
+0x4b36b149,0x0048f8d8,0x47982200,0xf8c42300,0xf8c43120,0x1c733140,
+0x3404b2de,0xd1ed2e08,0x732b2300,0xf0137e6b,0xd1230f01,0x327cf8d5,
+0xeb07689b,0x699c0383,0x4827b924,0x11bff240,0xfd16f7e0,0xd11242ac,
+0x327cf8d5,0x2274f8d5,0xeb07689b,0x619a0383,0xf8d4e00c,0x42ab3274,
+0xf8d5d104,0xf8c43274,0xe0033274,0x2c00461c,0xe021d1f3,0x42aa683a,
+0x4628d10e,0x47984b18,0xe00c6038,0x3278f8d2,0xd10442ab,0x3278f8d5,
+0x3278f8c2,0x461ae003,0xd1f32a00,0x4b11e012,0x0048f8d8,0x6a3a4629,
+0x8abb4798,0x3b012001,0xe00d82bb,0xe00b2000,0xf2404807,0xf7e011cb,
+0xe7d7fcd7,0xf2404804,0xf7e011db,0xe7e6fcd1,0x81f0e8bd,0x1e00d671,
+0x00022c1c,0x1e005c41,0x0001f7f9,0x1e005c15,0xf241b573,0x460e455c,
+0x46045941,0x6809b1e9,0xf7fca801,0x5963fb91,0xe0096819,0x2300b10e,
+0x4b0a760b,0x47984620,0xf7fca801,0x4601fb73,0xd1f32900,0xf241b14e,
+0x58e3435c,0xb1238a9b,0xf5014803,0xf7e07100,0xbd7cfc9f,0x0001fb25,
+0x00022c1c,0x46c04770,0x0023f890,0xbf142800,0x20102018,0x46c04770,
+0x47f0e92d,0xf243461e,0x56c343e3,0xf1b3460f,0x46903fff,0x1020f8bd,
+0xf243d104,0x5cc343e2,0xe012b113,0xd0102b01,0x00c8eb07,0x429e6b43,
+0x2001d201,0xd001e007,0xe0042000,0x428b8f03,0x2000bf94,0xb2c02001,
+0x2330e0ef,0x7203fb08,0x3150f8d2,0x70a8f502,0xf0c0429e,0xd10380e5,
+0x428b8883,0x80e0f200,0x3158f8d2,0x70acf502,0xd201429e,0xe0072301,
+0x2300d001,0x8883e004,0xbf34428b,0x23012300,0x0afff001,0xb1734699,
+0xfb082330,0xeb037303,0xf89303da,0xf0013130,0x41130207,0x0f01f013,
+0x80bef040,0x2330e0ab,0xfe03fb08,0x0407eb0e,0x75acf504,0xc004f8b5,
+0x6158f8c4,0xb91680a9,0xf24029ff,0xf504809c,0xe89572a8,0xe8820003,
+0x88910003,0x0150f8d4,0x03fff1a1,0xb29b8093,0xd2024299,0xf8c41e43,
+0x88aa3150,0x0302ebcc,0x2c01b29c,0x8083f240,0xd9052cff,0x7098f50e,
+0x46491838,0xe0782220,0x0301f10c,0xfc83fa1f,0x05fff00c,0x06fff002,
+0xd91642ae,0xebb008e8,0xd1120fd6,0x0307f002,0xfa1121ff,0x4470f303,
+0xf89019c0,0x401a2130,0x0307f00c,0x0308f1c3,0x400a4119,0x2130f880,
+0xf015e059,0xd0140307,0x0008f1c3,0x21ffb280,0x22304101,0xf202fb08,
+0x02d5eb02,0xf89219d2,0x400b3130,0x3130f882,0xebc01943,0xb2dd0004,
+0xf006b284,0x28070007,0x3001d013,0x408121ff,0xfb082230,0xeb02f202,
+0x19d202d6,0x3130f892,0xf882400b,0xebc03130,0xebc00306,0xb2de0004,
+0xf014b284,0xd0030f07,0x21dd481d,0xfbb0f7e0,0xd20b42b5,0xfb082030,
+0xf500f000,0x18387098,0x0201f1c5,0xeb001992,0xe01000d5,0x2430b19c,
+0xf404fb08,0x7498f504,0xf5c5193c,0x10d27280,0x00d5eb04,0xf7e12100,
+0x1c72fc59,0x21004620,0xf7e110d2,0xf00afc53,0x21010307,0x22304099,
+0xf202fb08,0x02daeb02,0xf89219d2,0x20003130,0xf882430b,0xe0003130,
+0xe8bd2001,0x46c087f0,0x00022c26,0x4ff0e92d,0xf893461e,0x6b5ba060,
+0x4607b0d3,0x4614468b,0x5170f89d,0x8014f8d2,0xd1492b00,0x2094f8d8,
+0x1307f240,0x0303ea02,0xf0002b00,0xf898822b,0x2b00309c,0x8226f000,
+0x7d9b6833,0x0f0ff013,0x68b3d108,0xd9282b07,0x6871489a,0x4b9a2208,
+0xbb104798,0x7d9a6833,0xea427ddb,0xf0122203,0xd00d0f0f,0x0345eb04,
+0x3160f8b3,0x020ff022,0x030ff023,0xd103429a,0xf0136863,0xd00c0f08,
+0x3068f8b6,0xf0002b00,0x692181fd,0xf0002900,0x690b81f9,0xf0002b00,
+0xf8d781f5,0x33013410,0x3410f8c7,0x35acf8d7,0xf8c73301,0xe1e735ac,
+0x68756913,0x7a1bb133,0xd1032b0b,0xf003782b,0xe0010301,0x099b78eb,
+0xf89663f3,0x4621302c,0x46429300,0x4c796bf3,0x47a04638,0x63b04639,
+0xf8d84604,0x46302094,0xfbc2f7fc,0xd10b2801,0x357cf8d7,0x33013801,
+0x357cf8c7,0x359cf8d7,0xf8c73301,0xe1be359c,0x486db924,0x11e9f240,
+0xfaeaf7e0,0x799b6bb3,0xd9042b35,0xf44f4868,0xf7e071f5,0x6bb1fae1,
+0x200ef991,0x300ff991,0x68b2189b,0xf0c0429a,0x7a0b81a3,0xd0262b04,
+0xd04b2b0b,0xd15f2b02,0x782a78ab,0x91031d28,0x2902ea43,0xfb80f7fc,
+0x3068f8b6,0xf0134680,0x99030501,0xf8cdd153,0x46389000,0x46434652,
+0x47a04c54,0xd04a2800,0x357cf8d7,0xf8c73301,0xf8d7357c,0x33013588,
+0x3588f8c7,0x786ae024,0xea43782b,0x79ab2902,0x041b79ea,0x6302ea43,
+0x4313792a,0xea43796a,0xf8b62802,0xf0133068,0xd12c0501,0x9000f8cd,
+0x46524638,0x4c414643,0xb32047a0,0x357cf8d7,0xf8c73301,0xf8d7357c,
+0x33013590,0x3590f8c7,0xe1544628,0x22101cac,0xf5014620,0xf7e16189,
+0x2800fa49,0x4621da0c,0x48352210,0xfa56f7e1,0x48346bb1,0x6189f501,
+0xf7e12210,0xe13bfa4f,0x0900f04f,0xf64246c8,0x5cfb2391,0xf8d7b9b3,
+0xf8d33dd0,0xf0133094,0xd10f0f08,0x7a136bb2,0xd1032b02,0x2b037993,
+0xe001d908,0xd0052b0b,0x7b1b69b3,0x0f08f013,0x80b5f040,0x69db6973,
+0x0f40f013,0x8118f040,0x7b0b69b1,0xea437b4a,0xf0432302,0x730b0308,
+0x734b0a1b,0x7a0b6bb1,0x2b0a3b01,0x8099f200,0xf003e8df,0x974c064c,
+0x97979797,0x008d9797,0x2b03798b,0xf897d802,0xb1433023,0x3104f8d1,
+0xd8044598,0xf891d01e,0x45533108,0x6832d01a,0x0540f106,0x31144628,
+0x4643320a,0x47a04c08,0xe01265f5,0x1e00d668,0x1e00d671,0x0001e73d,
+0x00022c26,0x0001fcdd,0x00022c67,0x00022c6d,0x1e003161,0x03e0f101,
+0x6bb165f3,0x054af106,0x31144628,0x464b6df2,0x47a04c68,0x0416f10d,
+0x21104628,0x4b664622,0x6bb34798,0xf9936870,0x68b1300e,0x1ac91818,
+0xe01d4622,0x6871ac46,0x46202203,0xfacef7e1,0x1ce06bb3,0x0114f103,
+0xf7e1691a,0x6bb3fac7,0x0516f10d,0x46206919,0x462a3103,0x47984b56,
+0x68706bb3,0x300ef993,0x181868b1,0x462a1ac9,0x47984b52,0x68706bb3,
+0x300ef993,0x181868b1,0xf04f1ac9,0x4b4e32ff,0x4b4e4798,0x429869b1,
+0x7b0bd107,0xea437b4a,0xf0232302,0xb29b0310,0x7b0be005,0xea437b4a,
+0xf0432302,0x730b0310,0x734b0a1b,0xf101e00f,0x68f20014,0x68333124,
+0xf82ef7e4,0xd16f2800,0xf8d7e005,0x3301357c,0x357cf8c7,0x6bb1e068,
+0xf9916873,0x189b200e,0xf9916073,0xf991300e,0x18d2200f,0x1a9b68b3,
+0xf99160b3,0xf991300e,0x18d2200f,0x1a9b6933,0x69b36133,0x7b5b7b1a,
+0x2303ea42,0x0f08f013,0xf013d02a,0xd0270f10,0x357cf8d7,0xf8c73301,
+0xf8d7357c,0x3301358c,0x358cf8c7,0x3594f8d7,0xf8c73301,0x7a0b3594,
+0xd0042b02,0xd0082b03,0xd0062b01,0xf8d7e030,0x330135a8,0x35a8f8c7,
+0xf8d7e02a,0x330135a0,0x35a0f8c7,0x359cf8d7,0xf8c73301,0xe01f359c,
+0x6bb16972,0x60f08a90,0xf896b1e1,0xb933302d,0x100ff991,0x0100ebc1,
+0x60f14610,0x4611e009,0x46584b0f,0x6bb34798,0xf9938a82,0xebc1100f,
+0xf7fc0102,0xf8c6fa03,0xf8a68064,0xe0019062,0xe0002000,0xb0532001,
+0x8ff0e8bd,0x1e0032a1,0x1e002431,0x1e002489,0x1e003981,0xdebb20e3,
+0x1e003e21,0x00f25000,0x00ac0f00,0x004c9000,0x02f25000,0x50000000,
+0x000102f2,0x01f25000,0x18100000,0x00000000,0x540a0000,0x3a504152,
+0x70797420,0x64252065,0x7065202c,0x78302063,0x202c7825,0x72737063,
+0x25783020,0x73202c78,0x20727370,0x78257830,0x20000a2c,0x20307220,
+0x25783020,0x2c783830,0x20317220,0x30257830,0x202c7838,0x20203272,
+0x30257830,0x202c7838,0x20203372,0x30257830,0x0a2c7838,0x72202000,
+0x30202034,0x38302578,0x72202c78,0x78302035,0x78383025,0x3672202c,
+0x78302020,0x78383025,0x3772202c,0x78302020,0x78383025,0x20000a2c,
+0x20387220,0x25783020,0x2c783830,0x20397220,0x30257830,0x202c7838,
+0x20303172,0x30257830,0x202c7838,0x20313172,0x30257830,0x0a2c7838,
+0x72202000,0x30203231,0x38302578,0x73202c78,0x78302070,0x78383025,
+0x726c202c,0x78302020,0x78383025,0x6370202c,0x78302020,0x78383025,
+0x6e68000a,0x65747264,0x6d72615f,0x7200632e,0x616c6365,0x73206d69,
+0x69746365,0x32206e6f,0x6552203a,0x6e727574,0x25206465,0x79622064,
+0x20736574,0x74206f74,0x68206568,0x0a706165,0x63657200,0x6d69616c,
+0x63657320,0x6e6f6974,0x203a3120,0x75746552,0x64656e72,0x20642520,
+0x65747962,0x6f742073,0x65687420,0x61656820,0x4d000a70,0x726f6d65,
+0x73752079,0x3a656761,0x6554000a,0x203a7478,0x25286425,0x2c294b64,
+0x74614420,0x25203a61,0x64252864,0x202c294b,0x3a737342,0x28642520,
+0x294b6425,0x7453202c,0x3a6b6361,0x4b642520,0x7241000a,0x20616e65,
+0x61746f74,0x25203a6c,0x64252864,0x202c294b,0x65657246,0x6425203a,
+0x4b642528,0x49202c29,0x7375206e,0x25203a65,0x64252864,0x202c294b,
+0x3a4d5748,0x28642520,0x294b6425,0x6e49000a,0x65737520,0x6f202b20,
+0x68726576,0x3a646165,0x28642520,0x294b6425,0x614d202c,0x656d2078,
+0x79726f6d,0x206e6920,0x3a657375,0x28642520,0x294b6425,0x614d000a,
+0x636f6c6c,0x69616620,0x6572756c,0x756f6320,0x203a746e,0x000a6425,
+0x63617453,0x6f62206b,0x6d6f7474,0x73616820,0x65656220,0x766f206e,
+0x72777265,0x65747469,0x53000a6e,0x6b636174,0x746f6220,0x3a6d6f74,
+0x25783020,0x6c202c70,0x203a6d77,0x70257830,0x7563202c,0x203a7272,
+0x70257830,0x6f74202c,0x30203a70,0x0a702578,0x65657246,0x61747320,
+0x203a6b63,0x78257830,0x29642528,0x6d776c20,0x7830203a,0x25287825,
+0x490a2964,0x6573756e,0x61747320,0x203a6b63,0x78257830,0x29642528,
+0x6d776820,0x7830203a,0x25287825,0x000a2964,0x45535341,0x22205452,
+0x20227325,0x6c206e69,0x20656e69,0x000a6425,0x72646e68,0x632e6574,
+0x00756d00,0x6d00776d,0x6f742077,0x206c6174,0x0a4b6425,0x646e6800,
+0x5f657472,0x736e6f63,0x3f00632e,0x003f000a,0x74756973,0x2e736c69,
+0x65640063,0x00646976,0x69306c77,0x62730064,0x2f75252f,0x6f727000,
+0x00646964,0x72616f62,0x70797464,0x6f620065,0x66647261,0x7367616c,
+0x61747800,0x6572666c,0x656c0071,0x00636464,0x74756273,0x2e736c69,
+0x73250063,0x6425203a,0x25000a20,0x20783230,0x00732500,0x30256325,
+0x25007833,0x64252e64,0x2e64252e,0x62006425,0x74756d63,0x2e736c69,
+0x6e550063,0x69666564,0x2064656e,0x6f727265,0x64252072,0x69706700,
+0x0064256f,0x6f697067,0x58585858,0x004b4f00,0x65646e55,0x656e6966,
+0x72652064,0x00726f72,0x20646142,0x75677241,0x746e656d,0x64614200,
+0x74704f20,0x006e6f69,0x20746f4e,0x4e007075,0x6420746f,0x006e776f,
+0x20746f4e,0x4e005041,0x5320746f,0x42004154,0x4b206461,0x49207965,
+0x7865646e,0x64615200,0x4f206f69,0x4e006666,0x6220746f,0x20646e61,
+0x6b636f6c,0x4e006465,0x6c63206f,0x006b636f,0x20646142,0x65746152,
+0x6c617620,0x65736575,0x61420074,0x61422064,0x4200646e,0x65666675,
+0x6f742072,0x6873206f,0x0074726f,0x66667542,0x74207265,0x6c206f6f,
+0x00676e6f,0x79737542,0x746f4e00,0x73734120,0x6169636f,0x00646574,
+0x20646142,0x44495353,0x6e656c20,0x74754f00,0x20666f20,0x676e6152,
+0x68432065,0x656e6e61,0x6142006c,0x68432064,0x656e6e61,0x6142006c,
+0x64412064,0x73657264,0x6f4e0073,0x6e452074,0x6867756f,0x73655220,
+0x6372756f,0x55007365,0x7075736e,0x74726f70,0x42006465,0x6c206461,
+0x74676e65,0x6f4e0068,0x65522074,0x00796461,0x20746f4e,0x6d726550,
+0x65747469,0x6f4e0064,0x6d654d20,0x0079726f,0x20746f4e,0x52206e49,
+0x65676e61,0x454d5700,0x746f4e20,0x616e4520,0x64656c62,0x50535400,
+0x4e204345,0x4620746f,0x646e756f,0x4d434100,0x746f4e20,0x70755320,
+0x74726f70,0x4e006465,0x5720746f,0x4120454d,0x636f7373,0x69746169,
+0x53006e6f,0x204f4944,0x20737542,0x6f727245,0x6f440072,0x656c676e,
+0x746f4e20,0x63634120,0x69737365,0x00656c62,0x6f636e49,0x63657272,
+0x65762074,0x6f697372,0x3025006e,0x253a7832,0x3a783230,0x78323025,
+0x3230253a,0x30253a78,0x253a7832,0x00783230,0x736d6362,0x2e6d6f72,
+0x67610063,0x6e680030,0x69686364,0x632e6370,0x646e6800,0x2e756d70,
+0x6d720063,0x72006e69,0x0078616d,0x74642572,0x64257200,0x00000064,
+0x0001cd81,0x1e004a49,0x1e004edd,0x1e004a95,0x1e004aad,0x1e004ac1,
+0x1e004ad5,0x1e004b35,0x1e005325,0x1e004aed,0x00001bd1,0x1e004d89,
+0x1e0051bd,0x1e0046c1,0x1e0046c9,0x1e0046e9,0x1e004b5d,0x1e004769,
+0x1e004e99,0x1e004a29,0x1e004b05,0x1e004719,0x1e004b1d,0x1e0056e9,
+0x1e00558d,0x00001c29,0x1e005195,0x1e00474d,0x00001c51,0x1e0045b1,
+0x00000000,0x00000000,0x00000000,0x1e004701,0x1e004691,0x00000024,
+0x0001cd81,0x1e004945,0x1e005105,0x1e004989,0x1e0049a1,0x1e0049b5,
+0x1e0049c9,0x1e005075,0x1e005459,0x1e0049e1,0x00001bfd,0x1e004e11,
+0x1e0051bd,0x1e0046c1,0x1e0046c9,0x1e0046e9,0x1e004f61,0x1e004769,
+0x1e0050c1,0x1e004925,0x1e0049f9,0x1e004719,0x1e004a11,0x1e0056e9,
+0x1e00558d,0x00001c29,0x1e005195,0x1e00474d,0x00001c51,0x1e0045b1,
+0x00000000,0x00000000,0x00000000,0x1e004701,0x1e004691,0x00000024,
+0x64646e68,0x632e616d,0x78742600,0x69617661,0x6e68006c,0x65747264,
+0x6c736f5f,0x0000632e,0x00000078,0x000000f0,0x000001e0,0x000003c0,
+0x00000780,0x0000103c,0x72646e68,0x6c5f6574,0x2e667562,0x6e680063,
+0x6d726164,0x7200632e,0x74736d61,0x69647962,0x4e280073,0x7564206f,
+0x6572706d,0x77207367,0x6f687469,0x42207475,0x42444d43,0x000a2947,
+0x7478616d,0x746b7078,0x6d6f6c67,0x6c787400,0x64797a61,0x79616c65,
+0x67787400,0x616d6f6c,0x6e67696c,0x67787400,0x006d6f6c,0x77737874,
+0x6e656c71,0x64787400,0x00706f72,0x666b6361,0x66747361,0x61006477,
+0x69736b63,0x6874657a,0x72006473,0x6b636178,0x64730073,0x646d6370,
+0x632e7665,0x71787400,0x6e656c20,0x6425203a,0x616d203a,0x64252878,
+0x64000a29,0x70706f72,0x66206465,0x656d6172,0x64252073,0x6f48000a,
+0x41207473,0x20736b63,0x65286425,0x696c7078,0x20746963,0x2b206425,
+0x67697020,0x61627967,0x64656b63,0x0a642520,0x73756200,0x72726520,
+0x3a73726f,0x66787220,0x666f6669,0x3a776f6c,0x0a642520,0x73756200,
+0x6f6c6620,0x6e6f6377,0x6c6f7274,0x7872203a,0x3a6d696c,0x2c642520,
+0x68787220,0x6d696c5f,0x6425203a,0x6f64000a,0x656c676e,0x6f6c6620,
+0x6e6f6377,0x6c6f7274,0x6366203a,0x6425203a,0x7865202c,0x63696c70,
+0x203a7469,0x202c6425,0x6c696166,0x6425203a,0x4453000a,0x45444f49,
+0x43500056,0x4149434d,0x00564544,0x69707367,0x726f7764,0x53470064,
+0x44204950,0x64726f77,0x646f4d20,0x6e652065,0x656c6261,0x47000a64,
+0x20495053,0x726f7744,0x6f4d2064,0x44206564,0x62617369,0x0a64656c,
+0x73756200,0x74617473,0x64730073,0x646d6370,0x725f7665,0x632e6574,
+0x70647300,0x63646d63,0x64256364,0x3a732500,0x6f724220,0x6f636461,
+0x4453206d,0x444d4350,0x43444320,0x69726420,0x0a726576,0x6d636200,
+0x2e636463,0x75620063,0x64003a73,0x5f6c676e,0x2e657472,0x6c770063,
+0x63620030,0x70746f6d,0x0a00632e,0x30257830,0x003a7834,0x25783020,
+0x00783430,0x00070e15,0x1c232a31,0x383f464d,0x545b6269,0x70777e85,
+0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,0xe0e7eef5,0xfc030a11,0x181f262d,
+0x343b4249,0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,0xc0c7ced5,
+0xdce3eaf1,0xf8ff060d,0x141b2229,0x30373e45,0x4c535a61,0x686f767d,
+0x848b9299,0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,0x10171e25,
+0x2c333a41,0x484f565d,0x646b7279,0xfee990d6,0xb73de1cc,0xc214b616,
+0x052cfb28,0x769a672b,0xc304be2a,0x261344aa,0x99068649,0xf450429c,
+0x7a98ef91,0x430b5433,0x62accfed,0xa91cb3e4,0x95e808c9,0xfa94df80,
+0xa63f8f75,0xfca70747,0xba1773f3,0x193c5983,0xa84f85e6,0xb2816b68,
+0x8bda6471,0x4b0febf8,0x359d5670,0x5e0e241e,0xa2d15863,0x3b7c2225,
+0x87782101,0x574600d4,0x5227d39f,0xe702364c,0x9ec8c4a0,0xd28abfea,
+0xb538c740,0xcef2f7a3,0xa11561f9,0xa45daee0,0x551a349b,0x303293ad,
+0xe3b18cf5,0x2ee2f61d,0x60ca6682,0xab2329c0,0x6f4e530d,0x4537dbd5,
+0x2f8efdde,0x726aff03,0x515b6c6d,0x92af1b8d,0x7fbcddbb,0x415cd911,
+0xd85a101f,0x8831c10a,0xbd7bcda5,0x12d0742d,0xb0b4e5b8,0x4a976989,
+0x7e77960c,0x09f1b965,0x84c66ec5,0xec7df018,0x204ddc3a,0x3e5fee79,
+0x4839cbd7,0x725f6c77,0x632e6574,0x72756300,0x6874655f,0x64617265,
+0x70007264,0x5f6d7265,0x65687465,0x64646172,0x6c770072,0x77006425,
+0x3a64256c,0x6f724220,0x6f636461,0x4342206d,0x3430254d,0x30382078,
+0x31312e32,0x72695720,0x73656c65,0x6f432073,0x6f72746e,0x72656c6c,
+0x0a732520,0x322e3400,0x302e3831,0x7700302e,0x6166006c,0x64656c69,
+0x206f7420,0x74696e69,0x72697720,0x73656c65,0x69732073,0x202c6564,
+0x3a727265,0x0a642520,0x256c7700,0x25203a64,0x73252073,0x72657620,
+0x6e6f6973,0x0a732520,0x63654400,0x20312020,0x38303032,0x3a393100,
+0x333a3132,0x77680038,0x746c6966,0x64007265,0x73706565,0x7065656c,
+0x00000000,0x00020fba,0x00000000,0x00000008,0x00020fc3,0x00000001,
+0x00000001,0x00000000,0x00000000,0x00000000,0x02000001,0x00040002,
+0x00080002,0x01000002,0x02000002,0x04000002,0x10000002,0x03020001,
+0x00000000,0x00000000,0x06000204,0x0e0c0a08,0x03020001,0x00000002,
+0x00000000,0x0000b689,0x00004bf5,0x00000000,0x00000000,0x2e636c77,
+0x6c770063,0x203a6425,0x204d5350,0x7263696d,0x646f636f,0x61772065,
+0x64686374,0x6620676f,0x64657269,0x20746120,0x28206425,0x6f636573,
+0x2973646e,0x6552202e,0x74746573,0x2e676e69,0x6c77000a,0x203a6425,
+0x204d5350,0x7263696d,0x646f636f,0x61772065,0x64686374,0x6620676f,
+0x64657269,0x20746120,0x28206425,0x6f636573,0x2973646e,0x6c77000a,
+0x203a6425,0x646d7370,0x67756265,0x25783020,0x2c783830,0x79687020,
+0x75626564,0x78302067,0x78383025,0x7370202c,0x72625f6d,0x78302063,
+0x78383025,0x2020000a,0x77202020,0x74637065,0x7830206c,0x78383025,
+0x6370202c,0x6c74636d,0x25783020,0x2c783830,0x6d637020,0x74617473,
+0x25783020,0x0a783830,0x66737400,0x6d69745f,0x6f6c7265,0x78302077,
+0x000a7825,0x5f657872,0x72796870,0x20325f73,0x78257830,0x7872202c,
+0x68705f65,0x5f737279,0x78302033,0x70207825,0x78727968,0x74617473,
+0x20307375,0x78257830,0x6870202c,0x73787279,0x75746174,0x30203173,
+0x0a782578,0x65787400,0x6174735f,0x20737574,0x78257830,0x79687020,
+0x72657874,0x20726f72,0x000a6425,0x504d4350,0x67655243,0x203d2030,
+0x78257830,0x4350000a,0x5243504d,0x20316765,0x7830203d,0x000a7825,
+0x504d4350,0x67655243,0x203d2032,0x78257830,0x414c000a,0x72205453,
+0x74657365,0x6f726620,0x6425206d,0x7974202c,0x25206570,0x74000a64,
+0x20656d69,0x7473616c,0x73696420,0x64726163,0x25783020,0x63202c78,
+0x6c20746e,0x20747361,0x63736964,0x20647261,0x78257830,0x7563202c,
+0x65722072,0x20746573,0x20746e63,0x78257830,0x4552000a,0x20544553,
+0x54415453,0x47455220,0x25783020,0x50000a78,0x203a2043,0x3020000a,
+0x20782578,0x62002020,0x66637373,0x77003a67,0x68637461,0x00676f64,
+0x69646172,0x7363006f,0x75710061,0x00746569,0x6f707370,0x77006c6c,
+0x5f636573,0x0079656b,0x736f6c63,0x656e6465,0x61650074,0x65725f70,
+0x69727473,0x77007463,0x00636573,0x5f636c77,0x61766f69,0x77007372,
+0x695f636c,0x7261766f,0x6f725f73,0x7665726d,0x65760030,0x6469646e,
+0x616f6200,0x65726472,0x72730076,0x65726d6f,0x6f620076,0x66647261,
+0x7367616c,0x61610032,0x61006735,0x00673261,0x00316161,0x00306161,
+0x00316761,0x68637874,0x006e6961,0x68637872,0x006e6961,0x6d306c69,
+0x64616361,0x74007264,0x75645f78,0x635f7974,0x656c6379,0x64666f5f,
+0x7874006d,0x7475645f,0x79635f79,0x5f656c63,0x006b6363,0x20617473,
+0x656d7700,0x6f6e0020,0x6e776f64,0x65720020,0x206d6c63,0x706d6100,
+0x00207564,0x64736d61,0x72002075,0x5f697373,0x6e657665,0x74730074,
+0x65725f61,0x5f797274,0x656d6974,0x73736100,0x725f636f,0x79727465,
+0x78616d5f,0x696f6a00,0x72705f6e,0x66006665,0x74716572,0x6b636172,
+0x616c7600,0x6f6d5f6e,0x77006564,0x7700656d,0x625f656d,0x645f7373,
+0x62617369,0x7700656c,0x6e5f656d,0x6b63616f,0x656d7700,0x7370615f,
+0x6d770064,0x70615f65,0x745f6473,0x67676972,0x77007265,0x745f656d,
+0x67676972,0x615f7265,0x6d770063,0x75615f65,0x745f6f74,0x67676972,
+0x73007265,0x5f646e65,0x6c6c756e,0x61746164,0x656d7700,0x736f715f,
+0x6f666e69,0x656d7700,0x0070645f,0x5f656d77,0x63657270,0x6575715f,
+0x676e6975,0x656d7700,0x756f635f,0x7265746e,0x6d770073,0x6c635f65,
+0x5f726165,0x6e756f63,0x73726574,0x666c7700,0x75746165,0x6c666572,
+0x77006761,0x615f656d,0x74735f63,0x65700061,0x68635f72,0x695f6e61,
+0x006f666e,0x5f617473,0x6f666e69,0x61707700,0x67736d5f,0x70770073,
+0x75615f61,0x77006874,0x635f6170,0x76007061,0x5f72646e,0x77006569,
+0x65696170,0x65737700,0x65725f63,0x69727473,0x66007463,0x74676172,
+0x73657268,0x5f610068,0x7461726d,0x67620065,0x61726d5f,0x35006574,
+0x726d5f67,0x00657461,0x6d5f6732,0x65746172,0x6e617200,0x73610064,
+0x72636f73,0x006d616f,0x53534249,0x696f6a5f,0x6e6f5f6e,0x7200796c,
+0x5f6d616f,0x0066666f,0x73616572,0x00636f73,0x6f737361,0x6e695f63,
+0x61006f66,0x636f7373,0x7165725f,0x7365695f,0x73736100,0x725f636f,
+0x5f707365,0x00736569,0x6e657665,0x736d5f74,0x72007367,0x74657365,
+0x3131645f,0x73746e63,0x73626900,0x6c615f73,0x65776f6c,0x6f630064,
+0x72746e75,0x696c5f79,0x655f7473,0x6e657478,0x00646564,0x7361636d,
+0x696c5f74,0x63007473,0x736e6168,0x00636570,0x5f6e6362,0x656d6974,
+0x0074756f,0x6e616373,0x75736572,0x5f73746c,0x726e696d,0x00697373,
+0x61637369,0x7369006e,0x726e6163,0x6c757365,0x63007374,0x746e756f,
+0x61007972,0x636f7475,0x746e756f,0x645f7972,0x75616665,0x6100746c,
+0x6e65746e,0x0073616e,0x73736269,0x616f635f,0x6373656c,0x6c615f65,
+0x65776f6c,0x73700064,0x6c6c6f70,0x6472705f,0x6e636200,0x5f696c5f,
+0x006e6362,0x5f6e6362,0x645f696c,0x006d6974,0x6f737361,0x696c5f63,
+0x6e657473,0x666e6900,0x635f6172,0x69666e6f,0x61727567,0x6e6f6974,
+0x6c756600,0x616f726c,0x7265706d,0x00646f69,0x5f637462,0x67616c66,
+0x74620073,0x61705f63,0x736d6172,0x66787400,0x5f6c6961,0x6d616f72,
+0x65726874,0x6d006873,0x656c6773,0x006c6576,0x6e776f64,0x65766f5f,
+0x64697272,0x6c610065,0x6c756d6c,0x6c006974,0x63616765,0x72705f79,
+0x0065626f,0x5f326d70,0x65656c73,0x65725f70,0x6d700074,0x5f64696b,
+0x6f666e69,0x63746200,0x646f6d5f,0x74620065,0x69775f63,0x64006572,
+0x63797475,0x656c6379,0x6b63635f,0x74756400,0x63796379,0x6f5f656c,
+0x006d6466,0x5f637462,0x63757473,0x61775f6b,0x74620072,0x74735f63,
+0x5f6b6375,0x65746564,0x64657463,0x61726e00,0x6d006574,0x5f6f6d69,
+0x63007370,0x6d5f7275,0x65737363,0x696d0074,0x665f6f6d,0x626f0074,
+0x635f7373,0x0078656f,0x7373626f,0x6163735f,0x61705f6e,0x736d6172,
+0x746e6900,0x30346c6f,0x746e6900,0x30346c6f,0x7465645f,0x6d696d00,
+0x73735f6f,0x6674735f,0x6f6d6e00,0x6e006564,0x64716572,0x625f6e00,
+0x6d6e0077,0x5f65646f,0x746f7270,0x69746365,0x6e006e6f,0x65646f6d,
+0x6f72705f,0x74636574,0x5f6e6f69,0x7265766f,0x65646972,0x5f666700,
+0x746f7270,0x69746365,0x67006e6f,0x72705f66,0x6365746f,0x6e6f6974,
+0x65766f5f,0x64697272,0x696d0065,0x625f6f6d,0x61635f77,0x69720070,
+0x73007366,0x5f636274,0x73007872,0x5f636274,0x73007874,0x725f6967,
+0x67730078,0x78745f69,0x63787400,0x6e696168,0x746e635f,0x73787400,
+0x61657274,0x7200736d,0x61686378,0x635f6e69,0x7200746e,0x72747378,
+0x736d6165,0x6c656400,0x735f6174,0x73746174,0x746e695f,0x61767265,
+0x6564006c,0x5f61746c,0x74617473,0x70690073,0x6d5f3676,0x74736163,
+0x76616e00,0x7365725f,0x775f7465,0x645f7261,0x62617369,0x0000656c,
+0x0060005e,0x00780062,0x0060005e,0x00780062,0x0000ea55,0x0000d339,
+0x00000000,0x00000000,0x00021934,0x00800000,0x00000001,0x000219ef,
+0x00000001,0x00020008,0x000219f9,0x0000000f,0x00000003,0x00021a07,
+0x00800010,0x00000007,0x00021a17,0x00000002,0x00070008,0x00021a28,
+0x00000003,0x00070008,0x00021a39,0x00800004,0x00000001,0x00021a4b,
+0x00000006,0x00000002,0x00021a56,0x0000001b,0x00020008,0x00021a6c,
+0x0000001c,0x00020008,0x00021a85,0x0000000c,0x00000008,0x00021a94,
+0x0000001d,0x00020008,0x00000000,0x00000000,0x00000000,0x5f636c77,
+0x64706d61,0x00632e75,0x64706d61,0x65720075,0x61007073,0x7564706d,
+0x6174735f,0x6d007374,0x78747861,0x62757000,0x78616d2e,0x25207874,
+0x25000a64,0x000a3a73,0x255b6425,0x00095d64,0x7273636d,0x73657461,
+0x61007465,0x7564706d,0x7465725f,0x203a7972,0x000a6425,0x6d617874,
+0x3a756470,0x2c642520,0x6d787420,0x3a756470,0x0a642520,0x20616200,
+0x666e6f63,0x000a203a,0x203a6425,0x203a7874,0x202c6425,0x203a7872,
+0x0a206425,0x20585400,0x77206162,0x6f646e69,0x73207377,0x20657a69,
+0x000a6425,0x62205852,0x69772061,0x776f646e,0x69732073,0x2520657a,
+0x61000a64,0x7564706d,0x6469745f,0x706d6100,0x645f7564,0x69736e65,
+0x61007974,0x7564706d,0x5f78725f,0x74636166,0x6100726f,0x7564706d,
+0x6e65735f,0x64615f64,0x00616264,0x64706d61,0x65735f75,0x645f646e,
+0x61626c65,0x706d6100,0x6d5f7564,0x61756e61,0x6f6d5f6c,0x61006564,
+0x7564706d,0x64706d5f,0x6d610075,0x5f756470,0x72746572,0x696c5f79,
+0x5f74696d,0x00646974,0x64706d61,0x72725f75,0x7465725f,0x6c5f7972,
+0x74696d69,0x6469745f,0x706d6100,0x625f7564,0x73775f61,0x00657a69,
+0x64706d61,0x78725f75,0x6469745f,0x00000000,0x00021af8,0x0080000c,
+0x00000001,0x00021afe,0x0000000b,0x00000001,0x00021b0a,0x00000003,
+0x00000005,0x00021b16,0x00000004,0x00000007,0x00021b25,0x00800005,
+0x00000001,0x00000000,0x00000000,0x00000000,0x5f636c77,0x64736d61,
+0x00632e75,0x64736d61,0x6d610075,0x5f756473,0x63616f6e,0x6d61006b,
+0x5f756473,0x73676761,0x6d610066,0x5f756473,0x62676761,0x73657479,
+0x736d6100,0x725f7564,0x78616d78,0x00000000,0x00021be5,0x00000001,
+0x00000007,0x00021bed,0x00000000,0x00000007,0x00021bf5,0x00000000,
+0x00000007,0x00021bfc,0x00000001,0x00000007,0x00021c04,0x00000003,
+0x00400008,0x00021c10,0x00000002,0x00000002,0x0002143d,0x00000004,
+0x02940008,0x00021c20,0x00000005,0x00000008,0x00021c19,0x00000006,
+0x00000001,0x00021c1d,0x00000007,0x20000008,0x00021f29,0x0000000b,
+0x00000008,0x00000000,0x00000000,0x00000000,0x5f636c77,0x65736162,
+0x636f695f,0x632e6c74,0x73616200,0x6f695f65,0x73726176,0x412f4e00,
+0x5f673200,0x65746172,0x5f673500,0x65746172,0x725f6100,0x00657461,
+0x725f6762,0x00657461,0x656d6362,0x726f7272,0x00727473,0x656d6362,
+0x726f7272,0x63706d00,0x70746f00,0x706d7564,0x636c7700,0x7373625f,
+0x2e676663,0xffff0063,0xffffffff,0x5f636c77,0x2e79656b,0x6c770063,
+0x6d6c5f63,0x635f6361,0x77007061,0x615f636c,0x63617474,0x6d6c5f68,
+0x77006361,0x765f636c,0x64696c61,0x6168635f,0x6570736e,0x00000063,
+0x00022098,0x00000002,0x00000008,0x000220a1,0x00000003,0x00000000,
+0x000220a9,0x00000004,0x00000000,0x000220b3,0x00000005,0x00000008,
+0x000220c0,0x00000006,0x00000007,0x000220cd,0x00000008,0x00000007,
+0x00020f01,0x00000005,0x00000008,0x000220d7,0x00000007,0x00000008,
+0x00000000,0x00000000,0x00000000,0x766f7872,0x776f6c66,0x73616320,
+0x61207365,0x25206572,0x6d000a64,0x635f7363,0x746e756f,0x6425203a,
+0x78300020,0x20783225,0x31314400,0x20544820,0x20504143,0x20657261,
+0x4c4c554e,0x2a2a000a,0x2054482a,0x49444441,0x75442045,0x203a706d,
+0x72617453,0x2a2a2a74,0x6461000a,0x65695f64,0x74633e2d,0x68635f6c,
+0x7830203a,0x78323025,0x6461000a,0x65695f64,0x79623e2d,0x3a316574,
+0x25783020,0x0a783230,0x64646100,0x2d65695f,0x6d706f3e,0x3a65646f,
+0x25783020,0x0a783430,0x64646100,0x2d65695f,0x73696d3e,0x69625f63,
+0x203a7374,0x30257830,0x000a7838,0x482a2a2a,0x44412054,0x20454944,
+0x706d7544,0x4e45203a,0x2a2a2a44,0x2a2a000a,0x2054482a,0x49504143,
+0x75442045,0x203a706d,0x72617453,0x2a2a2a74,0x6569000a,0x61633e2d,
+0x30203a70,0x34302578,0x69000a78,0x703e2d65,0x6d617261,0x30203a73,
+0x32302578,0x69000a78,0x653e2d65,0x685f7478,0x70616374,0x7830203a,
+0x78343025,0x6569000a,0x78743e2d,0x635f6662,0x203a7061,0x30257830,
+0x000a7838,0x3e2d6569,0x635f7361,0x203a7061,0x30257830,0x000a7832,
+0x482a2a2a,0x41432054,0x20454950,0x706d7544,0x6e45203a,0x2a2a2a64,
+0x6c77000a,0x203a6425,0x203a7325,0x666c616d,0x656d726f,0x68632064,
+0x70736e61,0x30206365,0x0a782578,0x636c7700,0x616d6c5f,0x00632e63,
+0x64256c77,0x7325203a,0x6c77203a,0x74615f63,0x68636174,0x69616620,
+0x0a64656c,0x256c7700,0x25203a64,0x6c203a73,0x5f63616d,0x6f666e69,
+0x6c6c6120,0x6620636f,0x656c6961,0x77000a64,0x6c5f636c,0x5f63616d,
+0x61766f69,0x77007372,0x3a64256c,0x3a732520,0x636c7720,0x646f6d5f,
+0x5f656c75,0x69676572,0x72657473,0x69616620,0x0a64656c,0x256c7700,
+0x25203a64,0x77203a73,0x6e695f6c,0x745f7469,0x72656d69,0x726f6620,
+0x74647720,0x72656d69,0x69616620,0x0a64656c,0x30367300,0x7265765f,
+0x746f6700,0x30367320,0x7265765f,0x20736920,0x000a7325,0x00302e35,
+0x5f303673,0x73726576,0x206e6f69,0x73207369,0x74207465,0x6425206f,
+0x6c77000a,0x203a6425,0x203a7325,0x6f727265,0x6e692072,0x6e697469,
+0x68742067,0x4d4c2065,0x53204341,0x6d204154,0x6c75646f,0x77000a65,
+0x3a64256c,0x3a732520,0x72726520,0x6920726f,0x6974696e,0x7420676e,
+0x4c206568,0x2043414d,0x746f7250,0x6f6d206f,0x656c7564,0x6c77000a,
+0x72647872,0x0073706f,0x203a7325,0x6e6b6e75,0x206e776f,0x69746361,
+0x64696e6f,0x0a642520,0x3a732500,0x66756220,0x20726566,0x676e656c,
+0x25206874,0x6f742064,0x6873206f,0x2074726f,0x20726f66,0x43414d4c,
+0x70616320,0x64252820,0x63000a29,0x69706968,0x78302064,0x203a7825,
+0x70696863,0x20766572,0x78257830,0x6375202c,0x7265646f,0x30207665,
+0x0a782578,0x3a732500,0x6e614320,0x63207427,0x676e6168,0x68742065,
+0x68632065,0x656e6e61,0x6877206c,0x74206e65,0x73206568,0x206e6163,
+0x69207369,0x7270206e,0x6572676f,0x000a7373,0x203a7325,0x75736e55,
+0x726f7070,0x20646574,0x61766f69,0x61202c72,0x6f697463,0x2064696e,
+0x000a6425,0x63616d6c,0x7061635f,0x616d6c00,0x70755f63,0x616d6c00,
+0x6f645f63,0x6c006e77,0x5f63616d,0x6163616d,0x00726464,0x63616d6c,
+0x7078745f,0x7265776f,0x616d6c00,0x6f6d5f63,0x6c006564,0x5f63616d,
+0x63746573,0x6e6e6168,0x77006c65,0x6c5f636c,0x5f63616d,0x6f696f64,
+0x00726176,0x5f636c77,0x63616d6c,0x7465735f,0x6168635f,0x6c656e6e,
+0x636c7700,0x616d6c5f,0x72705f63,0x2e6f746f,0x78740063,0x61747373,
+0x74007374,0x6c677378,0x70006d6f,0x6d2e6275,0x78747861,0x206f7420,
+0x25206562,0x25000a64,0x25286432,0x20296434,0x78616d00,0x6c677874,
+0x69206d6f,0x64252073,0x7563202c,0x6e657272,0x65702074,0x6e69646e,
+0x6f632067,0x20746e75,0x25207369,0x74000a64,0x6d207378,0x6f6c6c61,
+0x61662063,0x72756c69,0x61207365,0x25206572,0x70202c64,0x69646e65,
+0x2520676e,0x6d000a64,0x78747861,0x6d6f6c67,0x20736920,0x20746573,
+0x25206f74,0x00000a64,0x06060501,0x00010100,0x03030202,0x5f636c77,
+0x63616d6c,0x6e6f635f,0x5f676966,0x01006361,0x03030200,0x5f636c77,
+0x63616d6c,0x6174735f,0x6100632e,0x7564736d,0x6425203a,0x64736d20,
+0x203a7375,0x000a6425,0x203a7325,0x45544152,0x20544553,0x6d656c45,
+0x73746e65,0x6425203a,0x7830000a,0x78323025,0x29642528,0x52460020,
+0x53414d4f,0x52434f53,0x003a5145,0x4f464542,0x41204552,0x434f5353,
+0x4f4e5320,0x003a504f,0x20424353,0x45544152,0x00544553,0x5f636c77,
+0x63616d6c,0x5f617473,0x61766f69,0x72007372,0x72616461,0x63737000,
+0x676e6168,0x6d610065,0x73756473,0x73746174,0x3a732500,0x756c7020,
+0x6e69626d,0x68742067,0x656b2065,0x6c612079,0x69206f67,0x64252073,
+0x656b202c,0x656c5f79,0x7369206e,0x2c642520,0x646e6920,0x25207865,
+0x6e612064,0x656b2064,0x74705f79,0x73692072,0x25783020,0x25000a78,
+0x61203a73,0x64252063,0x4341203a,0x78302049,0x202c7825,0x20574345,
+0x78257830,0x5854202c,0x3020504f,0x2c782578,0x66696c20,0x6d697465,
+0x78302065,0x000a7825,0x63616d6c,0x6163735f,0x6d6c006e,0x735f6361,
+0x736e6163,0x00706f74,0x63616d6c,0x696f6a5f,0x6d6c006e,0x725f6361,
+0x74657365,0x616d6c00,0x65735f63,0x00737074,0x63616d6c,0x7465735f,
+0x5f737362,0x61726170,0x6c00736d,0x5f63616d,0x6d5f6d72,0x75736165,
+0x6c006572,0x5f63616d,0x735f6d72,0x00706f74,0x63616d6c,0x6464615f,
+0x79656b5f,0x616d6c00,0x65645f63,0x656b5f6c,0x6d6c0079,0x635f6361,
+0x69666e6f,0x00715f67,0x63616d6c,0x6e6f635f,0x5f676966,0x6c006361,
+0x5f63616d,0x5f78616d,0x696c7872,0x69746566,0x6c00656d,0x5f63616d,
+0x5f78616d,0x696c7874,0x69746566,0x6c00656d,0x5f63616d,0x746f6c73,
+0x6d69745f,0x6d6c0065,0x705f6361,0x6d616572,0x00656c62,0x63616d6c,
+0x61636d5f,0x745f7473,0x656c6261,0x616d6c00,0x65645f63,0x65775f66,
+0x656b5f70,0x6d6c0079,0x725f6361,0x68747374,0x68736572,0x616d6c00,
+0x74635f63,0x65733273,0x6c00666c,0x5f63616d,0x706d6574,0x6574616c,
+0x616d6c00,0x78725f63,0x746c6966,0x6c007265,0x5f63616d,0x63616562,
+0x695f6e6f,0x69665f65,0x7265746c,0x616d6c00,0x65625f63,0x6e6f6361,
+0x746c6966,0x655f7265,0x6c62616e,0x6d6c0065,0x735f6361,0x7065656c,
+0x616d6c00,0x61775f63,0x6e69656b,0x76726574,0x6c006c61,0x5f63616d,
+0x63616562,0x6f6c6e6f,0x6f637473,0x00746e75,0x63616d6c,0x7063725f,
+0x72687469,0x6f687365,0x6c00646c,0x5f63616d,0x74617473,0x61745f73,
+0x00656c62,0x63616d6c,0x7362695f,0x00737073,0x63616d6c,0x7278745f,
+0x74657461,0x656c6261,0x616d6c00,0x78745f63,0x6f747561,0x65746172,
+0x6c626174,0x6d6c0065,0x655f6361,0x74637272,0x6c007372,0x5f63616d,
+0x7564736d,0x78616d5f,0x696c7874,0x69746566,0x6c00656d,0x5f63616d,
+0x65746172,0x00746573,0x63616d6c,0x746b705f,0x746c6966,0x6c007265,
+0x5f63616d,0x72656570,0x6374685f,0x6c007061,0x5f63616d,0x73627468,
+0x61705f73,0x736d6172,0x616d6c00,0x74685f63,0x5f737362,0x62636573,
+0x705f6e63,0x6d617261,0x616d6c00,0x74685f63,0x5f737362,0x635f6162,
+0x00666e6f,0x63616d6c,0x5f67325f,0x65746172,0x7265766f,0x65646972,
+0x616d6c00,0x67355f63,0x7461725f,0x65766f65,0x64697272,0x6d6c0065,
+0x6e5f6361,0x65746172,0x7265766f,0x65646972,0x616d6c00,0x6d645f63,
+0x78616d61,0x00000000,0x0002230c,0x00000000,0x00000008,0x00022316,
+0x00000001,0x00000000,0x00022324,0x00000002,0x00000008,0x0002232e,
+0x00000003,0x00000008,0x00022339,0x00000004,0x00000001,0x00022344,
+0x00000005,0x00000008,0x00022357,0x00000006,0x00000008,0x00022367,
+0x00000007,0x00000008,0x00022374,0x00000008,0x00000008,0x00022381,
+0x00000009,0x00000008,0x0002238e,0x0000000a,0x00000008,0x0002239c,
+0x0000000b,0x00000008,0x000223ab,0x0000000c,0x00000007,0x000223bf,
+0x0000000d,0x00000007,0x000223d3,0x0020000e,0x00000007,0x000223e2,
+0x0000000f,0x00000007,0x000223f0,0x00000010,0x00000008,0x00022401,
+0x00000011,0x00000007,0x00022412,0x00200013,0x00000007,0x00022421,
+0x00000014,0x00000001,0x0002242f,0x00000015,0x00000008,0x0002243d,
+0x00000016,0x00000007,0x0002244b,0x00000017,0x00000008,0x00022461,
+0x00000018,0x00000008,0x0002247a,0x00000019,0x00000007,0x00022485,
+0x0000001a,0x00000008,0x00022497,0x0000001b,0x00000007,0x000224ac,
+0x0000001c,0x00000007,0x000224bf,0x0000001d,0x00000008,0x000224d0,
+0x0000001e,0x00000007,0x000224dc,0x0000001f,0x00000008,0x000224ed,
+0x00000020,0x00000008,0x00022502,0x00000021,0x00000008,0x0002250f,
+0x00000022,0x00000007,0x00022527,0x00000023,0x00000007,0x00022534,
+0x00000024,0x00000008,0x00022543,0x00000025,0x00000008,0x00022553,
+0x00000026,0x00000008,0x00022565,0x00000027,0x00000007,0x0002257d,
+0x00000028,0x00000007,0x00022590,0x00000029,0x00000007,0x000225a5,
+0x0000002a,0x00000007,0x000225ba,0x0000002b,0x00000007,0x000225cd,
+0x0000002c,0x00000007,0x000216c1,0x0000002d,0x00000007,0x000216ca,
+0x0080002e,0x00000007,0x00021654,0x0440002f,0x00000008,0x0002165e,
+0x04400030,0x00000008,0x00000000,0x00000000,0x00000000,0x0003aaaa,
+0x00010000,0x63630302,0x5f636c77,0x63616d6c,0x7465735f,0x0079656b,
+0x5f636c77,0x696b6f6e,0x00632e61,0x5f616763,0x47345f6a,0x61676300,
+0x355f6a5f,0x67630047,0x47355f61,0x63006c5f,0x355f6167,0x006d5f47,
+0x5f616763,0x755f4735,0x67630031,0x47355f61,0x3131755f,0x00000000,
+0x0007fc00,0x0005a569,0x000001ff,0x000a5d69,0x00080400,0x000a5e97,
+0x00000201,0x0005a697,0x000201cc,0x00d40000,0x00000000,0x01000000,
+0x00000000,0x00000003,0xffffffe8,0x00022984,0x00022ae4,0x83348434,
+0x82678084,0x82348056,0x83238423,0x82568073,0x82238045,0x00010001,
+0x7a977a97,0x7a877a97,0x7b977a87,0x00000000,0x00000009,0x00022a5f,
+0x00100000,0x00000007,0x00022a68,0x00000008,0x000c0008,0x00022a75,
+0x00800014,0x00000002,0x00022a83,0x0040003d,0x00070007,0x00022a8f,
+0x0400003f,0x00000006,0x00022a9f,0x00000040,0x00000006,0x00022ab4,
+0x04000041,0x00000006,0x00022ac4,0x0000005e,0x00000006,0x00022acf,
+0x0000005f,0x00000002,0x00022ada,0x00000062,0x00000005,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x30600000,0x486c0c18,0x6c771224,0x68705f63,0x00632e79,0x32697274,
+0x78620067,0x00673261,0x6f707872,0x72006732,0x73697373,0x6732666d,
+0x73737200,0x636d7369,0x72006732,0x73697373,0x67327661,0x73737200,
+0x666d7369,0x6c5f6732,0x0030776f,0x69737372,0x32636d73,0x6f6c5f67,
+0x72003177,0x73697373,0x67327661,0x776f6c5f,0x73720032,0x6d736973,
+0x5f673266,0x00306968,0x69737372,0x32636d73,0x69685f67,0x73720031,
+0x61736973,0x5f673276,0x00326968,0x6d306170,0x77707861,0x61700072,
+0x64256230,0x6b636300,0x6f006f70,0x706d6466,0x706f006f,0x6870006f,
+0x696f6e79,0x70006573,0x71007968,0x6f707874,0x00726577,0x5f796870,
+0x69737372,0x746e615f,0x6d696d00,0x72705f6f,0x626d6165,0x7000656c,
+0x725f7968,0x65716978,0x6c007473,0x79687070,0x6d65745f,0x6e657370,
+0x6c006573,0x79687070,0x6c61635f,0x6c65645f,0x745f6174,0x00706d65,
+0x6870706c,0x62765f79,0x65737461,0x0065736e,0x5f6d756e,0x65727473,
+0x62006d61,0x5f646e61,0x676e6172,0x73720065,0x775f6973,0x00006e69,
+0x000707ef,0x000e000e,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x5b207325,0x352e0020,0x29622800,0x25642500,
+0x20732573,0x77005d00,0x725f636c,0x2e657461,0x04020063,0x0b04020b,
+0x48302416,0x04026c60,0x18120c0b,0x60483024,0x636c776c,0x7461725f,
+0x65735f65,0x00632e6c,0x65746172,0x006c6573,0x65746172,0x5f6c6573,
+0x6d6d7564,0x00000079,0x00022b54,0x00800000,0x00000001,0x00000000,
+0x00000000,0x00000000,0x160b0402,0x6e616373,0x7373615f,0x745f636f,
+0x00656d69,0x6e616373,0x616e755f,0x636f7373,0x6d69745f,0x63730065,
+0x705f6e61,0x69737361,0x745f6576,0x00656d69,0x6e616373,0x6d6f685f,
+0x69745f65,0x7300656d,0x5f6e6163,0x6f72706e,0x00736562,0x5f636c77,
+0x6e616373,0x7700632e,0x735f636c,0x5f6e6163,0x61766f69,0x73007372,
+0x746e6163,0x72656d69,0xffffff00,0x00ffffff,0x00000000,0x00000001,
+0x00000002,0x00000004,0x00000002,0x00000003,0x00000003,0x00000005,
+0x5f636c77,0x2e626373,0x6c770063,0x65735f63,0x69727563,0x632e7974,
+0x3a732500,0x534d5320,0x72432034,0x20747079,0x6f727245,0x25203a72,
+0x66202c64,0x7020726f,0x656b6361,0x70252074,0x6b70202c,0x656c5f74,
+0x47000a6e,0x203a544f,0x50584500,0x6e00203a,0x6372636f,0x54520a00,
+0x25282045,0x25732573,0x29732573,0x20732520,0x42206e6f,0x58254d43,
+0x64257220,0x25204020,0x64252f64,0x2064252f,0x0a7a484d,0x49445300,
+0x4443004f,0x00490043,0x00010052,0x0002096c,0x00030971,0x00040976,
+0x0005097b,0x00060980,0x00070985,0x0008098a,0x0009098f,0x000a0994,
+0x000b0999,0x000c099e,0x000d09a3,0x000e09a8,0x000009b4,0x002d0000,
+0x001a90a7,0x000e0947,0x00072001,0x0003938b,0x0001ca38,0x0000e52a,
+0x00007297,0x0000394c,0x00001ca6,0x00000e53,0x00000729,0x00000395,
+0x000001ca,0x000000e5,0x00000073,0x00000039,0x0000001d,0x00000002,
+0x00000000,0x00000004,0x00000008,0x0000000b,0x00000010,0x00000016,
+0x00000018,0x0000000c,0x00000000,0x00000012,0x00000002,0x00000018,
+0x00000008,0x00000024,0x0000000a,0x00000030,0x00000010,0x00000048,
+0x00000012,0x00000060,0x00000019,0x0000006c,0x0000001a,0x00000000,
+0x00000000,0x00000000,0x00024e3d,0x00024e09,0x00024e05,0x00002c15,
+0x00000000,0x00002b95,0x00002c09,0x00002bdd,0x00002b9d,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00022da4,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000002,0x00000207,0x00200000,0x00050001,
+0x00250009,0x04290029,0x04270027,0x0447042b,0x044b00c1,0x044f0833,
+0x04570453,0x045b0157,0x0c5b085b,0x083308db,0x015b084f,0x04d708cf,
+0x055708d7,0x04db055b,0x095b0957,0x0757015f,0x055b0b57,0x07570b5b,
+0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,0x00d500d1,0x00d500d1,
+0x015500d9,0x015d0159,0x035d0359,0x035b0357,0x040c035f,0x042c0410,
+0x000d004c,0x004d002d,0x044d042d,0x04550451,0x04cb00ce,0x085708cb,
+0x002c000c,0x04ce0855,0x000408ce,0x00240008,0x00440040,0x00410048,
+0x00360409,0x0056003a,0x005b005a,0x00db00d7,0x10000000,0x00000040,
+0x20000000,0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,
+0x50000000,0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,
+0x60000001,0x00000048,0x70000002,0x00000048,0x80000002,0x00000048,
+0x50000083,0x00000058,0x60000104,0x00000058,0x70004185,0x00000058,
+0xd0004185,0x0000000b,0xe0008206,0x0000000b,0xf020c287,0x0000000b,
+0x00410308,0x0000000c,0x10614389,0x00000014,0x6081840a,0x00000010,
+0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,0x30e2458e,0x00000014,
+0x41028698,0x0000001c,0x31230b91,0x0000001c,0x5143481a,0x0000001c,
+0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,0x81e64d96,0x0000001c,
+0x9204ca9e,0x0000001c,0xa246cea1,0x0000001c,0xb2655024,0x0000001c,
+0x436751a6,0x00000019,0xc3e95529,0x00000019,0x6449d42e,0x00000019,
+0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,0x44ea162e,0x0000001a,
+0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,0x00000040,
+0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,0x00000048,
+0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,0x00000048,
+0x40000002,0x00000058,0x50000083,0x00000058,0x60000104,0x00000058,
+0xc0000104,0x0000000c,0xd0004185,0x0000000b,0xd0008206,0x0000000c,
+0xf020c287,0x0000000b,0x00410308,0x0000000c,0x10614389,0x00000014,
+0x6081840a,0x00000010,0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,
+0x30e2458e,0x00000014,0x51028698,0x00000014,0x31230b91,0x0000001c,
+0x5143481a,0x0000001c,0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,
+0xe1e64d96,0x0000001c,0xf204ca9e,0x0000001c,0x0246cea1,0x0000001d,
+0xb2655024,0x0000001c,0x436751a6,0x00000019,0xc3e95529,0x00000019,
+0x6449d42e,0x00000019,0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,
+0x44ea162e,0x0000001a,0x00022ecc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00023158,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x00023504,0x00000060,0x00000012,0x00000000,0x00000010,0x00000000,
+0x00000000,0x00020001,0x00040003,0x00060005,0x00080007,0x00000085,
+0x00000000,0x00010000,0x00030002,0x00050004,0x00070006,0x00850084,
+0x00000000,0x00000060,0x00000000,0x00000060,0x10000000,0x00000065,
+0x20000000,0x00000065,0x10000000,0x0000006d,0x20000000,0x0000006d,
+0xc0000000,0x0000006c,0x20000001,0x00000075,0x20000002,0x00000070,
+0x30000002,0x00000070,0x20000083,0x00000078,0x30000104,0x00000078,
+0x40004185,0x00000078,0x10004185,0x0000002d,0x20008206,0x0000002d,
+0x3020c287,0x0000002d,0x40410308,0x0000002d,0x50614389,0x0000002d,
+0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,0xb0c2050d,0x0000002a,
+0xc0e2458e,0x0000002a,0x31028698,0x0000002c,0x71230b91,0x0000003d,
+0xb143481a,0x0000003a,0xc185cc94,0x00000038,0xd1a4099c,0x0000003a,
+0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,0xb246cea1,0x0000003d,
+0xc2655024,0x0000003d,0xd36751a6,0x0000003d,0xe3e95529,0x0000003d,
+0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,0x94ea162e,0x00000039,
+0x24ea162e,0x0000003a,0x00000000,0x00000060,0x00000000,0x00000060,
+0x10000000,0x00000065,0x20000000,0x00000065,0x10000000,0x0000006d,
+0x20000000,0x0000006d,0xc0000000,0x0000006c,0x20000001,0x00000075,
+0x20000002,0x00000070,0x30000002,0x00000070,0x20000083,0x00000078,
+0x30000104,0x00000078,0x00000104,0x00000028,0x10004185,0x0000002d,
+0x20008206,0x0000002d,0x3020c287,0x0000002d,0x40410308,0x0000002d,
+0x50614389,0x0000002d,0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,
+0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,0x31028698,0x0000002c,
+0x71230b91,0x0000003d,0xb143481a,0x0000003a,0xc185cc94,0x00000038,
+0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,
+0xb246cea1,0x0000003d,0xc2655024,0x0000003d,0xd36751a6,0x0000003d,
+0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,
+0x94ea162e,0x00000039,0x24ea162e,0x0000003a,0x01010101,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,0x03030101,
+0x01030301,0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,
+0x01010101,0x01010101,0x0002318c,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00022e0c,0x00000060,0x00000012,0x00000000,0x00000010,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x1357075b,0x175b135b,0x00000000,
+0x00000000,0x08000400,0x10000a00,0x18001400,0x14011c00,0x1c011801,
+0x04012001,0x0c010801,0x14011001,0x1c011801,0x1c211821,0x24212021,
+0x200d2041,0x0c561849,0x14491849,0x184d14c5,0x18cd1c4d,0x194d2051,
+0x214d24cd,0x0829254d,0x00000409,0x00000000,0x00000000,0x00000000,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x18cd08ce,0x194d2051,
+0x214d24cd,0x0829254d,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0000000d,0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,
+0x00000040,0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,
+0x00000048,0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,
+0x00000048,0x80000002,0x00000048,0x50000083,0x00000058,0x60000104,
+0x00000058,0x70004185,0x00000058,0x50004185,0x00000000,0x60008206,
+0x00000000,0x5020c287,0x00000008,0x60410308,0x00000008,0x70614389,
+0x00000008,0x8081840a,0x00000008,0x50a1c48b,0x00000018,0x60c2050d,
+0x00000018,0x70e2458e,0x00000018,0x81028698,0x00000018,0x91230b91,
+0x00000018,0xa143481a,0x00000018,0xc185cc94,0x00000018,0xd1a4099c,
+0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,0x00000019,0x2246cea1,
+0x00000019,0x32655024,0x00000019,0xb36751a6,0x00000019,0xf3e95529,
+0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,0x0000001a,0x74ea162e,
+0x0000001a,0xa4ea162e,0x0000001a,0x10000000,0x00000040,0x20000000,
+0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,0x50000000,
+0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,0x60000001,
+0x00000048,0x70000002,0x00000048,0x40000002,0x00000058,0x50000083,
+0x00000058,0x60000104,0x00000058,0x40000104,0x00000000,0x50004185,
+0x00000000,0x40008206,0x00000008,0x5020c287,0x00000008,0x60410308,
+0x00000008,0x70614389,0x00000008,0x8081840a,0x00000008,0x50a1c48b,
+0x00000018,0x60c2050d,0x00000018,0x70e2458e,0x00000018,0x81028698,
+0x00000018,0x91230b91,0x00000018,0xa143481a,0x00000018,0xc185cc94,
+0x00000018,0xd1a4099c,0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,
+0x00000019,0x2246cea1,0x00000019,0x32655024,0x00000019,0xb36751a6,
+0x00000019,0xf3e95529,0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,
+0x0000001a,0x74ea162e,0x0000001a,0xa4ea162e,0x0000001a,0x00000002,
+0x00000003,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0002385c,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00025099,0x00004705,
+0x00004991,0x00004859,0x00000000,0x00004719,0x00000000,0x000046d9,
+0x00000000,0x0e0e0e0e,0x0d09020e,0x010d080a,0x080a0d09,0x0d09010d,
+0x010d080a,0x080a0d09,0x0e0a010d,0x020e090b,0x090b0e0a,0x3a09020e,
+0x050e0e16,0x0e163a09,0x0e0a050e,0x050e090b,0x090b0e0a,0x0e0a020e,
+0x020e090b,0x0e163a09,0x3a09050e,0x050e0e16,0x0e163a09,0x3a09050e,
+0x050e0e16,0x0e163a09,0x0001050e,0x02020100,0x08080303,0x08080808,
+0x080a0908,0x00070708,0x00000000,0x01010100,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000001,0x0000096c,0x043c3c6f,0x0505550e,
+0x44770505,0xf3708080,0x0000000c,0x00000002,0x00000971,0x043c3c6f,
+0x0505550e,0x44770505,0xf3708080,0x0000000b,0x00000003,0x00000976,
+0x043c3c6f,0x0505550e,0x44770505,0xf3708080,0x00000009,0x00000004,
+0x0000097b,0x042c2c6f,0x0505550d,0x44770505,0xf3708080,0x00000008,
+0x00000005,0x00000980,0x042c2c6f,0x0505550d,0x44770505,0xf3708080,
+0x00000007,0x00000006,0x00000985,0x042c2c6f,0x0505550c,0x44770505,
+0xf3708080,0x00000006,0x00000007,0x0000098a,0x042c2c6f,0x0505550b,
+0x44770505,0xf3708080,0x00000005,0x00000008,0x0000098f,0x042c2c6f,
+0x0505550b,0x44770505,0xf3708080,0x00000004,0x00000009,0x00000994,
+0x041c1c6f,0x0505550a,0x44770505,0xf3708080,0x00000004,0x0000000a,
+0x00000999,0x041c1c6f,0x05055509,0x44770505,0xf3708080,0x00000003,
+0x0000000b,0x0000099e,0x041c1c6e,0x05055508,0x44770505,0xf3708080,
+0x00000003,0x0000000c,0x000009a3,0x041c1c6e,0x05055507,0x44770505,
+0xf3708080,0x00000002,0x0000000d,0x000009a8,0x041c1c6e,0x05055506,
+0x44770505,0xf3708080,0x00000002,0x0000000e,0x000009b4,0x040c0c6e,
+0x05055502,0x44770505,0xf3708080,0x00000001,0x02000100,0x06000400,
+0x0b000800,0x17001000,0x2d002000,0x40014000,0x40034002,0x40054004,
+0x40074006,0x80075b07,0x04030200,0x0f070605,0x03000200,0x06000400,
+0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,
+0x40072d07,0x80075b07,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x4604b510,0xff00f000,0xf7dc4816,0x4620fe73,
+0xfe98f000,0x4a154b14,0xfbb318c3,0x4a14f3f2,0x60134620,0xfa8af000,
+0x7078f500,0xf44f3007,0xfbb0737a,0x4b0ff0f3,0x60184a0f,0x490f69e3,
+0xbfcc2b00,0x437ff06f,0x33fff240,0x4a0a6013,0xfbb36813,0x6013f3f0,
+0x22204620,0xf0002300,0xbd10fac9,0x0000042d,0x000f423f,0x000f4240,
+0x000003b0,0x000003a8,0x000003ac,0x000004c9,0x460eb573,0x46044615,
+0x481ab918,0xf7dc2174,0x42a6fc87,0x4817d803,0xf7dc2175,0x4b16fc81,
+0x602b462a,0x4b14e001,0x32046013,0x037cf1ad,0xd3f8429a,0xf0201ce0,
+0x4b100003,0x0406ebc0,0x4b0f601c,0x60192100,0xf5054b0e,0x60195200,
+0x3c084b0d,0x4b0d6019,0x601d6041,0x601a4b0c,0x22084b0c,0x4b0c6019,
+0x4b0c601a,0x60586004,0x46c0bd7c,0x000206dc,0x5354414b,0x00000408,
+0x000003cc,0x000003f0,0x0000040c,0x000003d8,0x000003dc,0x000003e0,
+0x000003c4,0x000003d0,0x6fe0f5b1,0x4605b573,0x4616460c,0x6a03d106,
+0x21009100,0x681c9101,0xe00c460a,0x22004b0d,0xf7dd6818,0x4601f877,
+0x6a2bb180,0x94002200,0x681c9201,0x46334628,0xb13847a0,0x62a84a06,
+0x20006813,0x626e632b,0xe0016015,0x30fff04f,0x46c0bd7c,0x00023afc,
+0x00023b00,0x47f0e92d,0x460e2010,0x21004699,0x46174b16,0x46044798,
+0xf06fb910,0xe022001a,0x68284d13,0xff22f7dc,0x46804631,0x6828463a,
+0xf844f7dd,0x480fb920,0x41ebf240,0xfbf4f7dc,0xf7dd6828,0x2301f907,
+0x4a0b4083,0x9b0860e3,0x9004f8c4,0x681360a3,0x60236828,0x60144641,
+0xf828f7dd,0xe8bd2000,0x46c087f0,0x1e00578d,0x00023afc,0x000206dc,
+0x00023b08,0x4b2db57f,0xf841a904,0xf5a13d04,0x460a5100,0xf7ff482a,
+0xf7dcff3b,0xf000fb1f,0x2000f871,0xfd7ef000,0x60204c26,0x4826b920,
+0x513cf240,0xfbbcf7dc,0xf0056820,0x4e23f82f,0xb9206030,0xf44f4820,
+0xf7dc61a8,0x6830fbb1,0xf7dc2100,0x4c1efff3,0xb9206020,0xf240481a,
+0xf7dc51bc,0x6823fba5,0x24004a1a,0x6370f503,0x6100f44f,0x46206013,
+0x4b174622,0xf7ff9400,0x6830ff85,0xfec4f7ff,0x47984b14,0xf0006830,
+0x4d13f86d,0x48134622,0x47a84913,0x48134622,0x47a84913,0x48144b13,
+0x4b14605c,0x601c4914,0x47a84622,0xb0046830,0x46c0bd70,0xdeaddead,
+0x00031654,0x00023b0c,0x000206dc,0x00023afc,0x000003e8,0x00023af8,
+0x0000063d,0x1e005d41,0x1e006061,0x000206e5,0x000005bd,0x000206e8,
+0x00000725,0x00023b10,0x0002226e,0x00023b04,0x000005b9,0x20a4b570,
+0x4e142100,0x4d1447b0,0xb1786028,0x22a42100,0xfc10f7dd,0x6080f44f,
+0x682c2100,0x616047b0,0x69446828,0x4b0db92c,0x602c4798,0x30fff04f,
+0x6144e00f,0x6280f44f,0x21004620,0xfbfaf7dd,0x2000682a,0x60936953,
+0x6380f44f,0x4b0460d3,0xbd70601a,0x1e00578d,0x00023b28,0x1e0057b1,
+0x00000410,0x2240b570,0x49272300,0x4d274606,0xf944f000,0x23004a26,
+0x682b6093,0x4c25b933,0xb90b6823,0xffbaf7ff,0x602b6823,0x23884c1f,
+0x605a6822,0xd0362a00,0x3b0e6bb3,0xd9032b01,0x491d4630,0xf966f000,
+0x688a4919,0x6823b132,0x109cf8c3,0x25004b15,0xe01c681c,0x601a6823,
+0xf04f605a,0xf8c332ff,0xe7f3209c,0x309cf8d4,0x3ffff1b3,0x2105d00e,
+0x009cf8d4,0xfbd2f7dc,0x0f20f010,0x6963d0f7,0x009cf8d4,0x5d5a2100,
+0xfbcef7dc,0x69233501,0xd3e7429d,0x49084807,0x4b084622,0xbd704798,
+0x00000811,0x00000410,0x00023b18,0x00023b28,0x0002407d,0x0002070a,
+0x000007f1,0x1e006061,0x4d1bb570,0x2e0068ae,0x0914d131,0x81ab602c,
+0x4461f504,0x33e1f44f,0xf4f3fb94,0x606960a8,0x21034628,0xf7dc2280,
+0x4628fb9f,0xb2e24631,0xfb9af7dc,0x21014628,0xf7dc1222,0x2103fb95,
+0x4628460a,0xfb90f7dc,0x460a2101,0xf7dc4628,0x4628fb8b,0x22082104,
+0xfb86f7dc,0x21024628,0xf7dc2201,0xf44ffb81,0x4b02707a,0xbd704798,
+0x00023b18,0x1e005d75,0x46c04770,0x2000b510,0xfaeaf7dd,0x46c0bd10,
+0x490bb510,0xf7ff4604,0xb280fff5,0x6f60b978,0xf7dd4907,0xb280fadd,
+0x6f60b948,0xf7dd4905,0xf64ffad7,0xb28073ff,0xbf082800,0xbd104618,
+0x00020716,0x0002071c,0xe92d6e01,0x460441f0,0xf8d0b171,0xf8d02080,
+0xeb03308c,0xf8d30382,0x6d832080,0xd103429a,0x47886dc0,0xe0004606,
+0x46202600,0xf0006ce1,0x6e65fa0d,0xb16d4607,0x2080f8d4,0x308cf8d4,
+0x0382eb03,0x2080f8d3,0x429a6da3,0x6de0d102,0x47a84631,0xe8bd4638,
+0x46c081f0,0x4604b510,0xfd2cf7dc,0x46204601,0xfa10f000,0x46c0bd10,
+0x4604b510,0xfd22f7dc,0x46204601,0xf9a0f000,0x46c0bd10,0xe92d6e01,
+0x460441f0,0xf8d0b171,0xf8d02080,0xeb03308c,0xf8d30382,0x6d832080,
+0xd103429a,0x47886dc0,0xe0004606,0x46202600,0xf0006ce1,0x6e65f949,
+0xb16d4607,0x2080f8d4,0x308cf8d4,0x0382eb03,0x2080f8d3,0x429a6da3,
+0x6de0d102,0x47a84631,0xe8bd4638,0x46c081f0,0x9c04b570,0xb1219d05,
+0xf2404808,0xf7dc118b,0xb144f9e7,0x4a06b13d,0xb90b7813,0x70133301,
+0x60232300,0x2000602b,0x46c0bd70,0x000209ac,0x00023bcd,0x47f0e92d,
+0x46884606,0x461f4615,0xfcf0f7dc,0x46812100,0xf7dc4630,0x4604fe0f,
+0x4813b918,0xf7dc21ec,0x2200f9c3,0x48114611,0x685b180b,0x330cb97b,
+0xf303fb02,0x181a501d,0xf8c26a63,0x60978004,0xea454a0b,0x60130303,
+0x24016263,0x3201e004,0x2a05310c,0x2400d1e7,0x46494630,0xfdeaf7dc,
+0xe8bd4620,0x46c087f0,0x000209ba,0x00023bd0,0x00023c0c,0x47f0e92d,
+0x46894604,0xfc92f7dc,0x21004620,0xfdd6f7dc,0xb9184605,0x2147482d,
+0xf98af7dc,0x69674620,0x8018f8d4,0xfc50f000,0x46822f0a,0x2f0fd916,
+0x4620d019,0xff54f7ff,0x46062f14,0x68abd903,0x0308f023,0x68ab60ab,
+0x0301f043,0xd90360ab,0xf04368ab,0x60ab0308,0xe0112201,0xd8022f02,
+0x22304e1b,0x4620e00c,0xff44f7ff,0x30a4f8d5,0xf0234606,0xf04303ff,
+0xf8c50302,0x220230a4,0x68abb15f,0x0f01f013,0xf008d107,0x2b080318,
+0xf44fbf14,0xfbb616e1,0xf008f6f2,0x24000803,0xf505e00f,0xb1177040,
+0x2004eb00,0xeb00e001,0xf1b900c4,0xd0030f00,0x46324651,0x47c82300,
+0x45443401,0xe8bddbed,0x46c087f0,0x000209ba,0x053ec600,0x47704800,
+0x00026f08,0xb5106983,0x5f80f013,0x4803d104,0x1197f640,0xf920f7dc,
+0x46c0bd10,0x000209c5,0xb5706983,0x5f80f013,0x460d4604,0x4809d104,
+0x1179f640,0xf910f7dc,0x46204629,0xf0042200,0x4620fec1,0xfc2af7dc,
+0x46204601,0xfd4af7dc,0x46c0bd70,0x000209c5,0xb5706983,0x5f80f013,
+0xd1044605,0xf240481d,0xf7dc71ba,0x4628f8f5,0xfc14f7dc,0x46062100,
+0xf7dc4628,0x4604fd33,0x4816b920,0x71bff240,0xf8e6f7dc,0x2b0169eb,
+0xf8d4d104,0xf4233600,0xe0047300,0xf8d4dd05,0xf4433600,0xf8c47300,
+0x6b6b3600,0xd1102b02,0x3658f8c4,0x365cf8d4,0x7380f443,0x365cf8c4,
+0xf8c42303,0xf8d43658,0xf043365c,0xf8c40304,0x4628365c,0xf7dc4631,
+0xbd70fd05,0x000209c5,0xb5706983,0x5f80f013,0xd1044604,0xf2404815,
+0xf7dc61ff,0x4620f8b1,0xfbd0f7dc,0x46062100,0xf7dc4620,0x4605fcef,
+0x480eb920,0x7104f240,0xf8a2f7dc,0xb90b6b63,0xe00d4d0b,0xf8c52301,
+0xf8d53660,0x4a093664,0x03fff003,0xf2f3fbb2,0x737af44f,0xf503fb02,
+0x46314620,0xfcd2f7dc,0xbd704628,0x000209c5,0x0249f000,0x000d6d80,
+0xf7ffb510,0xbd10ffc5,0xe92d6983,0xf01341f0,0x46055f80,0x481dd104,
+0x61c5f240,0xf874f7dc,0xf7dc4628,0x2100fb93,0x46284607,0xfcb2f7dc,
+0xb9204604,0xf2404815,0xf7dc61ca,0xf8d4f865,0x46283600,0x0684f3c3,
+0xff30f7ff,0xe0034604,0x42b378a3,0x340cd004,0x8823b124,0xd1f72b00,
+0xb9038823,0x88234c0a,0x4808b923,0x517bf240,0xf84af7dc,0x46394628,
+0xf7dc8824,0xf44ffc8b,0xfb04707a,0xe8bdf000,0x46c081f0,0x000209c5,
+0x00026fa4,0xb5706983,0x5f80f013,0xd1034604,0x21ec480b,0xf830f7dc,
+0xf7dc4620,0x2100fb4f,0x46204605,0xfc6ef7dc,0x4805b918,0xf7dc21f1,
+0x4620f823,0xf7dc4629,0xf640fc65,0xbd7030b8,0x000209c5,0x41f0e92d,
+0x8058f8df,0xf8d84606,0xb9fc4000,0xfb32f7dc,0x46074621,0xf7dc4630,
+0x4605fc51,0x480db920,0x714cf240,0xf804f7dc,0x7010f242,0xf8d54b0a,
+0x47984614,0x3614f8d5,0x1b1b2264,0xf302fb03,0x46394630,0x3000f8c8,
+0xfc38f7dc,0x68184b03,0x81f0e8bd,0x000209c5,0x1e005d75,0x00023c10,
+0xe92d6983,0xf01341f0,0x46075f80,0xd1044616,0xf44f4866,0xf7db61d2,
+0x4638ffdb,0xfafaf7dc,0x46802100,0xf7dc4638,0x4604fc19,0x485fb920,
+0x6195f240,0xffccf7db,0xf0002e00,0x463880b0,0xfe98f7ff,0xe0024605,
+0xd00642b3,0x2d00350c,0x80a5f000,0x2b00882b,0x882bd1f6,0xf0002b00,
+0xf8d4809e,0x78aa3600,0x0384f3c3,0xf0004293,0xf8d48096,0xf6433618,
+0xf42326a1,0xf8c41340,0xf8d43618,0xf423361c,0xf8c41340,0xe003361c,
+0x4b47200a,0x3e0a4798,0x31e0f8d4,0x3f00f413,0x2e09d001,0xf8d4d1f4,
+0xf41331e0,0xd0043f00,0xf240483e,0xf7db51bf,0x2300ff8b,0x3660f8c4,
+0x792b78ea,0x1664f8d4,0x0512061b,0x6370f003,0x0270f402,0x617ff021,
+0x430b4313,0x3664f8c4,0xb9536b7b,0xf8c43301,0xf8d43660,0xf4233664,
+0xf443437f,0xf8c46360,0x23023664,0x3660f8c4,0xf8d488ea,0x4b2b1664,
+0xea020512,0xf0210303,0xf42151fe,0xf4431178,0x430b3300,0x3664f8c4,
+0xf8c42303,0xf8d43660,0x68ab2664,0x427ff002,0x437ff023,0xf8c44313,
+0x23053664,0x3660f8c4,0x2664f8d4,0xf0024b1c,0xea4202ff,0xf8c40303,
+0x69fb3664,0xdd052b01,0x3600f8d4,0x6380f443,0x3600f8c4,0xf8d478aa,
+0x88290600,0xf64f0092,0xea007383,0xf0020303,0x317f027c,0x11c9431a,
+0x39016b7b,0x4001ea42,0xf8d4b93b,0xf4203630,0x041b7080,0xf8c40c1b,
+0xf8c43630,0x46380600,0xf7dc4641,0xe8bdfb5b,0x46c081f0,0x000209c5,
+0x1e005d75,0x1ff00000,0x88888800,0x4ff0e92d,0xb0872400,0x94049405,
+0x46806983,0x5f80f013,0x4854d104,0x21eff240,0xfefaf7db,0xf7dc4640,
+0x4621fa19,0x46409001,0xfb38f7dc,0xb9204606,0xf44f484c,0xf7db713d,
+0xf8d8feeb,0x4a4a3034,0x4b4a2b00,0x2702bf14,0xbf142701,0x469a4692,
+0x3020f8d8,0xf3c34a46,0x78132b04,0xf8c646a1,0x88533620,0x3628f8c6,
+0xad02e015,0x46282108,0x464b4a40,0x47a04c40,0x46292000,0xff0cf7dc,
+0x2100b138,0x9620f8c6,0x4b3c460a,0xf8c64798,0xf1090628,0x45d90901,
+0xeb0ad1e7,0xf8541407,0x3f013c04,0x4640b113,0xb3604798,0xe0282500,
+0x40ab2301,0x2c10f854,0xd0214213,0x5620f8c6,0x3c0cf914,0x2b01b12b,
+0xf1b3d006,0xd00b3fff,0xf854e011,0xe0043c08,0x3624f8d6,0x2c08f854,
+0xf8c64313,0xe00b3624,0x3624f8d6,0x2c08f854,0x0302ea23,0x481be7f5,
+0x3177f240,0xfe88f7db,0x455d3501,0x3c10d1d4,0xd1c82f00,0xad02e014,
+0x46282108,0x463b4a1a,0x47a04c17,0x46292000,0xfebaf7dc,0x2100b138,
+0x7620f8c6,0x4b13460a,0xf8c64798,0x37010624,0xd1e8454f,0xa9054640,
+0xf7ddaa04,0x9b05f859,0xf8c6b10b,0x9b043618,0xf8c6b10b,0x4640361c,
+0xf7dc9901,0xb007fa9f,0x8ff0e8bd,0x000209c5,0x00026ed8,0x00026ef8,
+0x00026fc8,0x000209d8,0x1e003fc9,0x1e0037cd,0x000209dd,0x2100b570,
+0x4b084605,0x47982010,0xb9184604,0x21184806,0xfe3af7db,0x21004620,
+0xf7dc2210,0x4620fefb,0xbd706065,0x1e00578d,0x00020b16,0x4604b510,
+0xf928f7dc,0x46204601,0xfda2f7ff,0x46c0bd10,0x47f0e92d,0x46144681,
+0x461d4688,0xf91af7dc,0xf7dc4648,0x4621f93b,0x462a4682,0xf7dc4648,
+0xb918fa5d,0x21784821,0xfe0ef7db,0xf7dc4648,0x1c46fb21,0x460745b0,
+0xf1b8d006,0xd0030f00,0x217b481a,0xfe00f7db,0xf6404648,0x2200012a,
+0xfa44f7dc,0xb9184605,0x217e4814,0xfdf4f7db,0x0f00f1b8,0x2401d00f,
+0xf307fa14,0xea3269aa,0xd1020703,0xf7db4620,0xfa14ff57,0xf7dbf006,
+0x61afff35,0x2401e00b,0xf006fa14,0xff4cf7db,0x40bc4620,0xff2af7db,
+0x431c69ab,0x464861ac,0xf7dc4651,0xe8bdfa17,0x46c087f0,0x00020b4a,
+0x4606b570,0xf8c6f7dc,0xf6404630,0x2200010e,0xfa0cf7dc,0xb1f04605,
+0xf3c36803,0xb91c1403,0x21bb483d,0xfdb8f7db,0xf7dc4630,0x2804fac7,
+0x2000d911,0xf7dc4939,0xb120fe1b,0x4b38e00b,0x612c3c01,0x2c00616b,
+0xf8d5d1f9,0xf02331e8,0xf8c50310,0x463031e8,0x012af640,0xf7dc2200,
+0x4c30f9e5,0xb9186020,0x21e3482b,0xfd94f7db,0xf7dc4630,0x4b2cfaa3,
+0x60186822,0x24a1f643,0xf8c22300,0xe00331e0,0x4b28200a,0x3c0a4798,
+0x682b4d24,0x31e0f8d3,0x3f00f413,0x2c09d101,0x2100d1f2,0x4630460b,
+0x6200f44f,0xff50f7ff,0x460b2100,0xf6404630,0xf7ff0212,0x2100ff49,
+0x0229f640,0x4630460b,0xff42f7ff,0xf247682a,0x68135439,0x7380f043,
+0xe0036013,0x4b13200a,0x3c0a4798,0x682a4d0f,0x31e0f8d2,0x3f00f413,
+0x2c09d101,0xf8d2d1f2,0xf41331e0,0xd1043f00,0xf44f4805,0xf7db719f,
+0x682afd47,0xf0436a13,0x62130303,0x46c0bd70,0x00020b4a,0x00020b53,
+0x21017fff,0x00023c18,0x00023c1c,0x1e005d75,0x41f0e92d,0xf7dc4604,
+0x4620f82d,0xfa42f7dc,0x46204606,0xf84af7dc,0x012af640,0x22004607,
+0xf7dc4620,0x4605f96b,0x4809b918,0xf7db215c,0x2301fd1b,0x69aa40b3,
+0xd0014213,0xe0002500,0x46201c75,0xf7dc4639,0x4628f955,0x81f0e8bd,
+0x00020b4a,0x2400b570,0xf8804605,0x69004175,0xf9eef000,0xf7dd4628,
+0x68e8fbb5,0xf7dc4621,0xf8d5f89d,0xb1280190,0x47984b0c,0x0190f8d5,
+0x47984b0b,0x018cf8d5,0x4b08b128,0xf8d54798,0x4b07018c,0x68e84798,
+0xf84af7dc,0x462968a8,0x72e8f44f,0x47984b03,0x46c0bd70,0x1e005a49,
+0x1e005a11,0x1e005c15,0x47f0e92d,0xf2414699,0xb08843e4,0x46144299,
+0xd1059f10,0x33f4f244,0xd101429a,0xe0002301,0x2b002300,0x80a9f000,
+0x70e8f44f,0x4b552100,0x46054798,0xf0002800,0x210080a0,0x72e8f44f,
+0xf7dc4606,0x2310fd7b,0x31a4f8c5,0x0028f105,0x22312101,0xf8c54b4c,
+0x616f9008,0x23004798,0x93019300,0x46209302,0x463a4649,0xf0049b11,
+0x60f0f953,0xd07a2800,0xffb2f7db,0x68e86028,0xf9a8f7dc,0x6068696c,
+0x4a406863,0x0301f083,0xf003493f,0x2b000301,0x4611bf18,0xf885682a,
+0xf6403176,0x429a0329,0xa008f8d5,0xc00cf8d5,0xb920d10a,0x7e00f504,
+0x7304f504,0xf504e008,0xf5047e00,0xe0037308,0x7e00f504,0x7304f504,
+0xf2409300,0x93037344,0xf04f2306,0x93040810,0x33022700,0xf8cd9305,
+0xf8cd8004,0x97068008,0x46624650,0x4c274673,0x626847a0,0xd0362800,
+0x46394628,0x464b68ea,0xf94af000,0x28006128,0x2305d02d,0x3194f8c5,
+0xf8c52302,0x331e3198,0x319cf8c5,0xf8c53344,0x68eb31b0,0x7179f885,
+0x81a4f8c5,0x71acf8c5,0x71a0f8c5,0x2b016b5b,0x4638d909,0xf7dc4914,
+0xb120fc9f,0x48144b13,0x23014798,0x4b11e003,0x47984812,0xf8852300,
+0x481131ba,0x462a4911,0x47984b11,0x68a8e006,0xf44f4629,0x4b0f72e8,
+0x26004798,0xb0084630,0x87f0e8bd,0x1e00578d,0x1e003bcd,0x00020cae,
+0x00020cb6,0x0001ce65,0x00020cc0,0x1e004461,0x00020cca,0x00020ce3,
+0x00020cfd,0x00002b15,0x1e006061,0x1e005c15,0x47702000,0x6a84b570,
+0x69a04601,0xf8b8f000,0x69a04605,0xf888f000,0x22382100,0x001cf104,
+0xfcb0f7dc,0x68a04b03,0x62246263,0xfca0f7dd,0xbd704628,0x00002c25,
+0x47f3e92d,0x46994f25,0x4605683b,0x46882b07,0xdc3f4692,0xfd8ef7ff,
+0x46062100,0x20544b20,0x46044798,0xd0352800,0x22542100,0xfc8ef7dc,
+0x6065683b,0xf8a46023,0xf8c49014,0x60e68010,0xf2414620,0x464a41e4,
+0xf8cd4633,0xf8cd8000,0xf7ffa004,0x60a0fedd,0x2000b1e0,0x9a0b990a,
+0x95004b10,0xff9af7fe,0x68a0b118,0xfe9ef7ff,0x4b0de010,0x681b490d,
+0x61a3683a,0x4b0c4628,0x4b0c4798,0x4629480c,0x683b4798,0x33014620,
+0xe000603b,0xe8bd2000,0x46c087fc,0x00023c20,0x1e00578d,0x00002bdd,
+0x00023c58,0x00020d15,0x1e003fe9,0x1e004461,0x00020d21,0x41f0e92d,
+0x460e4680,0x2034461d,0x4b082100,0x47984617,0xb1404604,0x22342100,
+0xfc38f7dc,0x602660e5,0xf8c46067,0x46208008,0x81f0e8bd,0x1e00578d,
+0x4b12b530,0x681bb087,0x42984604,0x4810d004,0x7100f44f,0xfb5cf7db,
+0x1044f894,0x6c23b9a1,0x2501b17b,0x46202304,0x9100aa05,0x95029101,
+0xf94ef7de,0xdb042800,0x4b069a05,0xbf08429a,0x230163a5,0x3044f884,
+0xbd30b007,0x00023c58,0x00020d4f,0x14e46c77,0x4604b537,0x460d4811,
+0xfb7af7db,0x46286420,0xfb76f7db,0x63e06c23,0xb198b1a3,0x6be26358,
+0x68606c23,0x6c236353,0xf1d34621,0xbf380301,0x93002300,0x462b6822,
+0xff9cf7ff,0xb10860e0,0xe0012000,0x30fff04f,0x46c0bd3e,0x00020d5a,
+0xb5106c03,0x2200b11b,0x6bc3635a,0x68c0635a,0xff5af7dd,0x46c0bd10,
+0x41f0e92d,0x461e4d0f,0x4607682b,0x46902b07,0x2048dc14,0x4b0c2100,
+0x46044798,0x2100b170,0xf7dc2248,0x682bfbbb,0x63636027,0x602b3301,
+0x60664b06,0x8008f8c4,0xe000601c,0x46202400,0x81f0e8bd,0x00023c24,
+0x1e00578d,0x00023c58,0x2010b570,0x4b09460c,0x46152100,0xb9104798,
+0x001af06f,0x4a06e008,0x60432310,0x60c46813,0x60856003,0x20006010,
+0x46c0bd70,0x1e00578d,0x00023c4c,0xb5104b06,0xb93b681b,0x68194b05,
+0x4b05b121,0xb10a681a,0xffdaf7ff,0xbd102000,0x00023c4c,0x00022d9c,
+0x00022da0,0x4ff0e92d,0xb0894604,0x4699460e,0x21002088,0x46174b30,
+0x804cf8dd,0x46054798,0xd0492800,0x22882100,0xfb64f7dc,0xf7ff4620,
+0xab07fc55,0x93059001,0xf04f4683,0x46280a00,0x41e4f241,0x4643464a,
+0xf8cd9602,0x9703a000,0xf0049504,0x4606ff5f,0xd02f2800,0x60286068,
+0x465060ac,0x46429912,0x94004b1c,0xfe6af7fe,0xbb184607,0x2301682a,
+0x3718f882,0x46204b18,0x676b636b,0x67eb67ab,0x3080f8c5,0x46424915,
+0x47984b15,0x464168b3,0x48146b1a,0x4c154b14,0x4b1547a0,0x93004630,
+0x4a154914,0x9701462b,0xf0049702,0xb908f825,0xe0094628,0x4b0d9907,
+0x47984810,0x46294658,0x4b0f2288,0x20004798,0xe8bdb009,0x46c08ff0,
+0x1e00578d,0x000046d9,0x0dadbeef,0x00020f1e,0x1e003fe9,0x00020f23,
+0x00020f59,0x1e004461,0x0000463d,0x00020fd0,0x00020f63,0x00020f66,
+0x1e005c15,0x6840b510,0xf908f000,0xbd102000,0x180cf8d0,0xf44f4a19,
+0xf8c13080,0xb5100160,0x4164f8d1,0x0160f8c1,0x2164f8c1,0x0160f8c1,
+0x3164f8d1,0xd11e4293,0xf8c14a11,0xf8c10160,0xf8c12164,0xf8d10160,
+0x42933164,0x2300d113,0x0160f8c1,0x4164f8c1,0x318cf8c1,0x0120f8d1,
+0x42984b08,0x2001d101,0x4b07e006,0xbf144298,0x20012000,0x2000e000,
+0x46c0bd10,0xaa5555aa,0x55aaaa55,0x04000400,0x84000400,0x4803b510,
+0x6166f642,0xf9e4f7db,0xbd102000,0x00021040,0x3ffff1b1,0x41f0e92d,
+0x460e4604,0xf8d0d106,0x68193848,0x460eb909,0x688ee000,0x781df894,
+0x4620b91f,0xf7e04639,0x68a0fe77,0xfe02f7db,0x2500b170,0xf8d31963,
+0xb1080778,0x47986883,0x2d183504,0xf8d4d1f6,0xb1080778,0x47986c83,
+0x5d10f894,0x2200b13d,0x2d00f8c4,0x21034620,0xf95af7e0,0xf8d4e033,
+0x46313844,0x68a0721d,0xf7db462a,0xf8d4fd43,0x23012844,0x46207213,
+0xf04f4a14,0xf8c431ff,0xf8c457c4,0xf8c457c8,0xf7e057cc,0x4620f941,
+0xf7e04629,0xf8d4fe3d,0x68a13848,0xf7ef6818,0xf44ffaef,0x460a6180,
+0xf7e04620,0x4620f931,0x462a2104,0xf92cf7e0,0x5d00f8c4,0x4620b91f,
+0xf7e02102,0xe8bdfe25,0x46c081f0,0x04000400,0x738ef44f,0x0303fb01,
+0x2844f8d0,0x6304f503,0x429a330c,0x4604b570,0xd016460d,0x3844f8c0,
+0x381cf890,0xf890b13b,0xb9222d10,0xf44f6880,0xf7db5100,0x68a0fd9b,
+0x0112f640,0xf7db462a,0xf8c4fd9d,0xf8c4080c,0xbd700758,0x739ef44f,
+0xf303fb01,0x6328f503,0x330418c3,0xf8c0b570,0x460d3848,0x03c1eb00,
+0x1840f8d0,0x63ecf503,0xf8c04604,0x2901375c,0x4629bf8c,0xf7ff2100,
+0xf894ffbf,0xb15b381c,0x3d10f894,0xf44fb943,0x68a05100,0xbf0c2d00,
+0x2200460a,0xfd66f7db,0x46c0bd70,0x3454f8d0,0x3301b570,0xf8c04605,
+0x68803454,0xfd52f7db,0x4628b110,0x47984b15,0xf8852400,0x46284d5c,
+0x31fff04f,0xff2cf7ff,0x030cf641,0x192b50ec,0x0778f8d3,0x6a83b110,
+0x47982101,0x2c183404,0xf8d5d1f5,0x6e430778,0xf8d54798,0x21000844,
+0x7354f642,0x84c18481,0x85418501,0x85c18581,0x303450e9,0xf7dc22e8,
+0xbd70f9b1,0x0001d585,0x4ff0e92d,0xb08d7c84,0xb99c4607,0x21014b9d,
+0x68b84798,0xfe58f7fe,0x46384621,0xfd84f7e0,0xf7e14638,0xf8d7f953,
+0x68183848,0xff0af000,0x74bb2301,0x3d04f8d7,0x4893b123,0x4188f642,
+0xf8c6f7db,0x4b8f2101,0x47984638,0xf7fe68b8,0x2100fe3b,0xf7e04638,
+0xf8b7fd67,0xf2442828,0x429a3321,0x3b0ed010,0xd00d429a,0x429a3307,
+0x3310d00a,0xd007429a,0x429a3b14,0x3307d004,0xd001429a,0xe0052300,
+0x3840f8d7,0xbf142b02,0x23012300,0x0840f8d7,0xe0004619,0x28023101,
+0xf244d114,0x429a3321,0x3b0ed00e,0xd00b429a,0x429a3307,0x3310d008,
+0xd005429a,0x429a3b14,0x3307d002,0xd101429a,0xe0002302,0x42992301,
+0x68b8d3e4,0xfb94f7db,0x0312f640,0xd0044298,0xf6424869,0xf7db41a9,
+0x4638f873,0xffa4f7e0,0x3710f8d7,0xf897b1bb,0xb97b3d0d,0x3394f8d7,
+0x0f04f013,0x2301d10a,0x3d0df887,0x073cf8d7,0x1d34f8d7,0x7248f44f,
+0x47a04c5c,0x21004638,0x47984b58,0x4638e162,0xf928f7e1,0xf04f4638,
+0xf7ff31ff,0xf8b7fe6d,0xf2441828,0x42993321,0x3b0ed011,0xd00e4299,
+0x42993307,0x3310d00b,0xd0084299,0x42993b14,0x3307d005,0xbf144299,
+0x21012100,0x2101e000,0x46389109,0xf7ff9909,0x4c47fee1,0x2108a80a,
+0xf8d74a46,0x47a03740,0x6778f8d7,0xf0402e00,0xf8d78099,0xf8d71758,
+0xf501074c,0xf8d77100,0xf7dca748,0xf8d7fadf,0xf8d73758,0xf503274c,
+0x91007108,0x91022110,0x7144f240,0x21089103,0x31169104,0x49369105,
+0x0820f04f,0x91064d35,0x7300f503,0xf8cda90a,0x46508004,0xf8d747a8,
+0x492f3758,0x0778f8c7,0x274cf8d7,0x91064604,0x7310f503,0x9600a90a,
+0x8004f8cd,0x96039602,0x96059604,0x47a84650,0x3758f8d7,0xf8c74924,
+0xf8d7077c,0x4683274c,0xf5039106,0xa90a7320,0xf8cd9600,0x96028004,
+0x96049603,0x46509605,0xf8d747a8,0x491a3758,0x0780f8c7,0x274cf8d7,
+0x91064681,0x7330f503,0xf8cd9600,0x96028004,0x96049603,0x46509605,
+0x47a8a90a,0x0401f1d4,0x2400bf38,0x0f00f1bb,0xf044bf08,0xf1b90401,
+0xbf080f00,0x0401f044,0xbf142800,0xf0444623,0xf8c70301,0xb17b0784,
+0xe03e4633,0x0001d47d,0x00021040,0x1e0061f9,0x1e003fc9,0x00020f1e,
+0x00023c50,0x0001ce65,0x461d463c,0x0778f8d4,0x6f03b120,0x47984951,
+0x07a8f8c4,0x34043501,0xd1f32d06,0x4848f8d7,0x22082100,0x0070f104,
+0xf7dc6825,0xf8d7f847,0xf0133388,0xd0050f20,0x3070f8b4,0x6380f443,
+0x3070f8a4,0xf2428a2a,0x429a0350,0x7cabd108,0xd8052b05,0x3072f8b4,
+0x0304f043,0x3072f8a4,0xf0132301,0xd0710fff,0xf1b39b09,0xf43f3fff,
+0xf8d7af12,0xf8d737a8,0xf8d72844,0x60d3073c,0x37acf8d7,0xf8d76113,
+0x615337b0,0x37b4f8d7,0xf8d76193,0x61d337b8,0x37bcf8d7,0xf7df6213,
+0x69f9f93d,0x2303b139,0x7280f44f,0x46389300,0x46132100,0x2303e005,
+0x46389300,0x7280f44f,0x2501460b,0xff9ef7df,0x4638747d,0xfb7ef001,
+0x3d6cf897,0x4820b123,0x511df642,0xff28f7da,0x073cf8d7,0x1d1cf8d7,
+0x727af44f,0x4c1b462b,0x463847a0,0x5d6cf887,0xfbd6f7e2,0xf7e24638,
+0xb130fb15,0xf7df4638,0x4638fab9,0xf7df4629,0x4638fab7,0xf7e02102,
+0xf8d7fbb7,0xb1233d04,0xf642480d,0xf7da513e,0xf897ff03,0xb14b381c,
+0x462968b8,0xfa92f7db,0x4807b120,0x5135f44f,0xfef6f7da,0x073cf8d7,
+0xff70f7de,0xb00d2000,0x8ff0e8bd,0x00020b0d,0x00021040,0x1e0061f9,
+0x5154f500,0x4f70e92d,0xf04f3134,0xf8c00901,0xf8801dd0,0x46049d0c,
+0xf7e92500,0xf642ff6f,0x54e533c6,0xf04f330a,0xf80436ff,0x3b059003,
+0x3b0454e6,0x330654e5,0x9003f804,0x54e53b03,0x33e8f241,0x210254e6,
+0x46204632,0xfa78f7e0,0x46494620,0xf7e0462a,0x210cfa73,0x46204632,
+0xfa6ef7e0,0x4620210b,0xf7e0462a,0x210efa69,0x46204632,0xfa64f7e0,
+0x4620210d,0xf7e0462a,0x2104fa5f,0x46202202,0xfa5af7e0,0x33ccf642,
+0x0a03f04f,0x9003f804,0xf8043349,0x444ba003,0xa003f804,0x73c2f5a3,
+0x122af640,0x332c52e5,0xf50452e2,0x801a532b,0x23c2f642,0x330252e2,
+0x330252e2,0x330252e2,0x330252e2,0x330252e2,0x122bf640,0x330252e2,
+0x0207f04f,0x330252e2,0x0204f04f,0x0b02f04f,0x330252e2,0xa003f824,
+0xf824445b,0xf243b003,0x54e543ab,0x50e53305,0x3304220f,0x4b4f54e2,
+0x0258f641,0x3d08f8c4,0x2391f642,0xf50454e5,0x333053c8,0x9023f884,
+0x5d63f884,0x5d5df884,0x5d5ef884,0x5d5ff884,0x5d60f884,0x5d61f884,
+0x5d66f884,0x5da8f884,0x5d68f884,0x5d62f884,0x9d85f884,0xf64150a3,
+0x54e51336,0x53ecf504,0x32043308,0xf64150a3,0xf804538e,0xf5049003,
+0xf5045306,0x336052c3,0xf2426013,0xf80413e6,0xf504b003,0x33385318,
+0x0264f641,0xf24250a3,0xf804633e,0xf243a003,0x54e533f8,0xf5a32208,
+0x210a731a,0x3b0c50e2,0x336650e1,0x3b5452e1,0x320c54e1,0x54e2444b,
+0x7275f502,0x50e23b0f,0x50e53320,0x50e13304,0x726bf5a2,0x50e23304,
+0x4824f642,0x73fff241,0x54e561e6,0x0608eb04,0xf8842364,0x462936fe,
+0xf884220b,0xf884503e,0xf884903f,0xf884902e,0xf884502f,0xf8845d46,
+0xf8845d52,0xf8c49d53,0xf8845d58,0xf8c45d54,0x46305708,0xfea6f7db,
+0x0322f06f,0x3008f804,0x7073332c,0x000beb06,0x46524909,0xfebaf7db,
+0x53c0f504,0xb005f886,0x9000f883,0x0301f641,0x9003f804,0x503cf884,
+0x8f70e8bd,0xb0e7a864,0x000203d5,0x4ff0e92d,0xa81df890,0x4607b0a1,
+0x0f00f1ba,0x4651d102,0xfa62f7e0,0x073cf8d7,0xffa2f7de,0x3848f8d7,
+0x9cfcf897,0x8008f8d3,0xf8872300,0xf2413cfc,0x5afe63fc,0xf4064683,
+0xf5b36340,0xd11f6f40,0xb15b6b7b,0x739ef44f,0x7203fb08,0x3acbf892,
+0x0f18f013,0xf892d102,0xb98b3b98,0x66fcf241,0x4d645bb8,0x460447a8,
+0x47a85bb8,0x6430f444,0xbf8c280e,0x5080f44f,0x5000f44f,0xb2a64304,
+0x46414638,0xfc2ef7ff,0x3dd0f8d7,0x0388eb03,0xb9236d1b,0xf2424858,
+0xf7da016d,0xf44ffd71,0xfb08739e,0xf8d37303,0xb9233a94,0xf2424852,
+0xf7da016e,0xad14fd65,0x46294638,0xfdecf7e1,0xf8d76b7b,0x227f1848,
+0xbf183b00,0x92002301,0x93012200,0x46134628,0x4c483178,0x463847a0,
+0xf7e04629,0x4638fff9,0x22004631,0xfba4f7ea,0x4638b920,0xf7ea2101,
+0x4606fbcb,0x3848f8d7,0x68184631,0x040bf10d,0xf9ecf7ee,0x46384631,
+0x4b3b4622,0xf8d74798,0x46323848,0x46216818,0xf9f2f7ee,0x3848f8d7,
+0x68182200,0x31fff04f,0xfc02f7ef,0x3848f8d7,0x9cfcf887,0xf0006818,
+0x2201fb5f,0x635cf243,0x46385af9,0xf7df4613,0xf243faf7,0x5af9635e,
+0x23012200,0xf7df4638,0x68b8faef,0x6758f8d7,0xf8a4f7db,0xf04f4638,
+0xf24031ff,0xf7df4204,0xf8d7fcaf,0xf5073814,0x3b0268e8,0xd9042b01,
+0xf24b481b,0xf7da01c6,0xf8d7fcf7,0x46381810,0xfe6cf7e0,0x31fff04f,
+0x1128f8c6,0x4a174638,0xfc96f7df,0xe0034c16,0x4b16200a,0x3c0a4798,
+0x3128f8d6,0x0f01f013,0x2c09d101,0x4638d1f4,0x4140f44f,0xf8d62200,
+0xf8d73128,0xf7df580c,0xf8d7fc7f,0xb1bc47d4,0x349ef8b5,0x0303ea44,
+0x47d0f8d7,0xf8a5b29b,0xe010349e,0x0001e9bd,0x00021040,0x0001ed85,
+0x0001e2f1,0x00020402,0x000f4249,0x1e005d75,0xf7e04638,0xf8d7fd33,
+0x68b83388,0x0f02f013,0x46216a42,0x43a4f240,0xf444bf1c,0x43217400,
+0xd002429a,0x6f96f5b2,0xf8b7d11f,0x051b3384,0xf5b30d1b,0xdb187f00,
+0xf2446b02,0x429a3322,0x6b43d113,0xf8b5b98b,0xf444349e,0xb29b5480,
+0x5380f443,0x349ef8a5,0x349cf8b5,0xf4234321,0x041b5380,0xf8a50c1b,
+0x4622349c,0x68b82300,0xf89cf7db,0x49c24640,0x47984bc2,0x080cf8d7,
+0x25002406,0x3844f8d7,0x6b19022a,0x4200f442,0xb2925d4b,0xb29b18e3,
+0xea443b01,0xb29b2303,0x2540f8a0,0x3520f8a0,0x2540f8a0,0x35015d4b,
+0x2d0618e3,0xd1e5b29c,0x780a784b,0xea424638,0x21982203,0xf9b2f7df,
+0x3844f8d7,0x6b1b4638,0x78dc219a,0xea42789a,0xf7df2204,0xf8d7f9a7,
+0x46383844,0x219c6b1b,0x791a795c,0x2204ea42,0xf99cf7df,0x219e4638,
+0xf7df2200,0x4ca2f997,0x21984638,0x027af10d,0x47a0462b,0xf8d72400,
+0x6b193844,0x037af10d,0x5d0b5ce2,0xd004429a,0xf24b489a,0xf7da11a4,
+0x3401fc23,0xd1ee2c06,0x3120f8d6,0x3ffff1b3,0x4894d104,0x11a9f24b,
+0xfc16f7da,0x21804638,0xf7df2208,0x4638f96f,0x220a215c,0xf96af7df,
+0x7380f04f,0x3100f8c6,0xf44f4638,0x22002180,0xfbaef7df,0x3100f44f,
+0x4638460a,0xfba8f7df,0x2392f642,0x46385afa,0xf7df2174,0xf897f953,
+0xf2423d48,0x21827210,0xbf182b00,0x62bcf44f,0xf7df4638,0xf642f947,
+0x5cf933c7,0x4638b111,0xfa4cf7df,0x07e8f8d7,0xfb28f7e6,0x4300f04f,
+0x3188f8c6,0x4302f103,0x318cf8c6,0x4380f44f,0xf8c62110,0xf5033128,
+0x460a4340,0x68b86273,0xf80cf7db,0xf7fe68b8,0xb283f967,0x0824f8a7,
+0xf8a62100,0x463836a8,0xfa3cf7df,0x46042102,0xf7df4638,0xea40fa37,
+0xf8c74004,0x2156082c,0xf7df4638,0xf507fa2f,0x004053a3,0xf8d76018,
+0x2b003830,0x4638da07,0xf7df21b2,0xf241fa23,0x00404364,0x463850f8,
+0x88ba2116,0xf8faf7df,0x21c04638,0x2830f8b7,0xf8f4f7df,0x21c24638,
+0x2832f8b7,0xf8eef7df,0x46384b4f,0x3160f8c6,0x23cef642,0x21445afb,
+0x3164f8c6,0x24004b4b,0x3160f8c6,0x23d0f642,0xf8c65afb,0xf6423164,
+0x5afa23d2,0xf8d6f7df,0x23d4f642,0x5afa2146,0xf7df4638,0x4638f8cf,
+0xf994f7df,0xf7e04638,0xeb07fe09,0xf8d30384,0xb1111dd0,0xf7e54638,
+0x3401fdff,0xd1f42c04,0x5154f507,0x31344638,0xfa84f7df,0xf7e94638,
+0x2200fdf7,0x030cf641,0x461450fa,0x0384eb07,0x0778f8d3,0x6843b108,
+0x34014798,0xd1f52c06,0x0778f8d7,0x47986c43,0x0778f8d7,0x47986e03,
+0x380cf8d7,0x23e0f8b3,0x3848f8d7,0x2203f3c2,0x681b681b,0xd004429a,
+0xf2424820,0xf7da01ef,0xf8d7fb2f,0xf5071848,0x317064e8,0xf7df4638,
+0x4620f8f1,0x4b17491c,0xf8d74798,0x25013848,0xf0006818,0xf642fb83,
+0x5af9431a,0x4b174638,0x5714f887,0xf8d74798,0x46383848,0x1134f8b3,
+0xffccf7de,0x3848f8d7,0xf8b34638,0xf7de1136,0xf642ffef,0x5cf933c7,
+0xf7df4638,0x4638f96b,0xfd12f7df,0x3848f8d7,0x681b2152,0x46c0e010,
+0x00026fcc,0x0001d869,0x0001d4ad,0x00021040,0x00020006,0x00020007,
+0x00027d4c,0x0001d4fd,0x881a4638,0xf842f7df,0x3848f8d7,0x681b2150,
+0x889a4638,0xf83af7df,0xf7e04638,0xf897ff8d,0x4a443023,0xbf0c2b00,
+0x74faf44f,0x7496f44f,0x3848f8d7,0x691b681b,0x437ff023,0xd1044293,
+0x6f16f5b4,0xf44fbf38,0x46386416,0x46222194,0xf81cf7df,0x3848f8d7,
+0x69fb735d,0xf8d7b163,0x4638280c,0x3688f8b2,0xb29b2100,0x0304f043,
+0x3688f8a2,0xfe1ef7e0,0x33fff04f,0x605cf507,0x3dc0f8a7,0x21003002,
+0xf7db220c,0x69fbfb67,0xf04fb923,0xf8a733ff,0xe00d3dc4,0x030ff04f,
+0x3dc2f8a7,0x03f0f04f,0x3dc4f8a7,0x6370f44f,0x3dc6f8a7,0x0300f24f,
+0x3dc8f8a7,0x37c8f8d7,0xf0434638,0xf8c70304,0xf7df37c8,0xf8d7fa4b,
+0x4659073c,0xfc66f7de,0xb13b6abb,0x62b92100,0x073cf8d7,0x32fff04f,
+0xfa96f7de,0xf8872300,0x687b3dce,0xd9042b09,0x280cf8d7,0xf8c24b0e,
+0x240233dc,0x4d18f887,0x4d1af887,0xf9974638,0xf7de103c,0xf1bafed3,
+0xd1030f00,0x46214638,0xff02f7df,0x3848f8d7,0xf7f16818,0xb021fce7,
+0x8ff0e8bd,0x00082050,0x00989680,0x6800b510,0xf85cf7ff,0x46c0bd10,
+0x41f0e92d,0x46076805,0xf7ff4628,0xf642f955,0x5aeb23bc,0xb9734606,
+0x46282101,0xf8bcf7ea,0x46284604,0xff86f7df,0x46214628,0xfc52f7e5,
+0xf7df4628,0x2300f9f3,0x7290f241,0xf24150ab,0xf04f738c,0x52ea02ff,
+0x4638b916,0xf804f000,0xe8bd4630,0x46c081f0,0x4604b510,0xb0866800,
+0xb1bb6b43,0x32c4f8d4,0xd1132b02,0x2210ab06,0x2d04f843,0x23049300,
+0x93012200,0x93022301,0x46134907,0xf7e59203,0x21fffb21,0x460a4620,
+0xfc32f7eb,0xf7e06820,0x2000ffdf,0xbd10b006,0x00021a85,0x2100b500,
+0x32fff04f,0x4300f06f,0xf880468e,0xf8a01039,0xf8c02cde,0xf8a03664,
+0xf8a02660,0xf880226e,0xf8a02cdc,0xe00b2252,0xf04f3201,0x2a0933ff,
+0x3b01f801,0xf10ed1f8,0xf1be0e01,0xd0080f20,0xfb0e2309,0xf503f303,
+0x18c36396,0x22001c99,0xbd00e7ea,0xf8802301,0x47703037,0x47702000,
+0xb5106c83,0x3120f8d3,0x0f01f013,0x4803d004,0x21a9f242,0xf9b4f7da,
+0x46c0bd10,0x0002299e,0x4ff0e92d,0xb0894e53,0x25004607,0xf240e00b,
+0x93004356,0x46384631,0x4255f240,0x4c4e3301,0x350147a0,0x4b4d3614,
+0x429d681b,0x6bf8d3ef,0xfe4cf7de,0xd1492802,0xf7de6bf8,0x2307fe47,
+0x33199304,0x23019306,0xab079303,0xbf142801,0x0b70f04f,0x0b10f04f,
+0xf04f9302,0xf04f0900,0x493f0ac0,0x0808f10d,0x0401eb09,0x78a27863,
+0xea43021b,0xf8194302,0xf2402001,0x43134656,0x630bea43,0xf8cd9307,
+0x4638a014,0xf2404641,0xf2404255,0x4d304357,0x47a89600,0x792278e3,
+0xea43071b,0x93075302,0x0380f10a,0x96009305,0x46414638,0x4255f240,
+0x4357f240,0x0905f109,0xf5b947a8,0xf10a7f20,0xd1ca0a01,0x689b6c7b,
+0xf2406a5a,0x429a5304,0x3baed108,0x46389300,0xf2404920,0x33014255,
+0x47a04c1b,0x93042307,0x93063319,0x93032301,0xab072500,0xe0119302,
+0x220a014b,0xf3f2fb93,0xf5019307,0x93057310,0x4356f240,0x46389300,
+0xf240a902,0x33014255,0x47a04c0d,0x3501b2e9,0xd1e92d81,0xf7de6bf8,
+0x2802fdcd,0x4638d118,0x6189f44f,0x4200f44f,0xfcaaf7ed,0xf44f4638,
+0x22406182,0xfca4f7ed,0x46c0e018,0x00027f98,0x1e006fcd,0x000235c4,
+0x0002809c,0x00028394,0xf44f4638,0xf6476189,0xf7ed72ff,0x4638fc87,
+0x6182f44f,0x72bff64f,0xfc80f7ed,0x7380f44f,0xf44f4638,0xf44f6189,
+0xf7ed7240,0x4638fc8b,0xf2402250,0xf7ed4139,0x4638fc6b,0x413af240,
+0x4208f44f,0xfc64f7ed,0x22004638,0x413bf240,0xfc5ef7ed,0x22004638,
+0x413cf240,0xfc58f7ed,0x22004638,0x41e5f240,0xfc52f7ed,0x22004638,
+0x414cf240,0xfc4cf7ed,0x22004638,0x6196f44f,0xfc46f7ed,0x22004638,
+0x41f9f240,0xfc40f7ed,0x22004638,0x414ef240,0xfc3af7ed,0x3f5df897,
+0x22ff4638,0x4134f240,0xfc4cf7ed,0x22444638,0x414af240,0xfc3cf7ed,
+0x22804638,0x414af240,0xfc26f7ed,0xf2404638,0xf64a413d,0xf7ed1254,
+0xf897fc1f,0xf8972f5e,0xf4423f5f,0xea425200,0xf8971203,0x46383f60,
+0x2283ea42,0x413ef240,0xf7edb292,0x4638fc0d,0x4127f240,0x4260f44f,
+0x43c0f44f,0xfc1ef7ed,0x220f4638,0xf44f230a,0xf7ed6185,0x4638fc17,
+0x6184f44f,0x427ff44f,0x53f0f44f,0xfc0ef7ed,0x46382201,0xf2404613,
+0xf7ed510e,0x2332fc07,0xf2404638,0xf44f510e,0xf7ed72ff,0x2201fbff,
+0x46134638,0x510af240,0xfbf8f7ed,0x463823a4,0xf24022ff,0xf7ed4116,
+0x4638fbf1,0x514bf240,0x0233f246,0xfbd0f7ed,0x22ff4638,0xf2402346,
+0xf7ed4123,0x4638fbe3,0x4123f240,0x427ff44f,0x5334f44f,0xfbdaf7ed,
+0x22ff4638,0xf2402306,0xf7ed4125,0x4638fbd3,0x4125f240,0x427ff44f,
+0x43bef44f,0xfbcaf7ed,0x220f4638,0xf240230a,0xf7ed4126,0x4638fbc3,
+0x23002208,0x515af240,0xfbbcf7ed,0x22ff4638,0xf44f2312,0xf7ed6184,
+0x4638fbb5,0x4124f240,0x427ff44f,0x53e8f44f,0xfbacf7ed,0x220f4638,
+0xf2402309,0xf7ed4129,0x4638fba5,0x4112f240,0x427ff44f,0x5340f44f,
+0xfb9cf7ed,0x23004638,0x4127f240,0x52f8f44f,0xfb94f7ed,0x463822ff,
+0xf2404613,0xf7ed4134,0x4638fb8d,0x41dff240,0x427ff44f,0x4374f44f,
+0xfb84f7ed,0x22ff4638,0xf2402300,0xf7ed5145,0x4638fb7d,0x4392f44f,
+0x5145f240,0x427ff44f,0xfb74f7ed,0x22034638,0x6156f240,0xfb54f7ed,
+0xf44f4638,0xf2406340,0xf44f41ff,0xf7ed427c,0x4638fb65,0xf240226c,
+0xf7ed411f,0x4638fb45,0x230c227f,0x510ff240,0xfb58f7ed,0x22ff4638,
+0xf240230c,0xf7ed6134,0x4638fb51,0xf44f2217,0xf7ed61c1,0x4638fb31,
+0x6104f240,0x32eaf240,0xfb2af7ed,0xe8bdb009,0x46c08ff0,0xf890b570,
+0x46045038,0xd1572d00,0x6c832601,0x6038f880,0x3120f8d3,0x0f01f013,
+0x4828d004,0x2141f242,0xff86f7d9,0xf8c46c63,0x68985d24,0x462a4629,
+0xfbbcf7da,0x0f04f010,0x4820d104,0x214bf242,0xff76f7d9,0x46314620,
+0x47984b1d,0x8da16be0,0xf7e9462a,0xb938fdc9,0x6be04631,0xfdf0f7e9,
+0x46204601,0xfc16f7ed,0xf4038da3,0xf5b36340,0xbf146f40,0x21282114,
+0x3030f894,0xd0024299,0xf7df6be0,0x4631feeb,0xf7ed4620,0x4620fba9,
+0xf818f000,0xf8844620,0xf7ee5037,0x6963fdb9,0x6919462a,0xf7ed4620,
+0x6963fc33,0x7d194620,0xf9faf7ee,0x5038f884,0x46c0bd70,0x0002299e,
+0x0001ea19,0x47f0e92d,0xf7ef4607,0x2101f8a1,0xf7ed4638,0x4638fb0b,
+0xfd7af7ff,0x41a2f240,0x46382202,0xf8d74ca8,0xf7ed903c,0x2001fabd,
+0x463847a0,0x41a2f240,0x72fdf64f,0xfaaaf7ed,0x47a02001,0x6bf84ca1,
+0xf7deb170,0x2801fbc7,0xf834d10a,0xf4111c04,0xd0114f00,0xf8140489,
+0x46382c02,0xe0090c89,0x1c04f834,0x4f80f411,0x0489d006,0x2c01f814,
+0x0c894638,0xfa78f7ed,0x2b04f834,0x73fff64f,0xd1dc429a,0x22002120,
+0xf7ed4638,0x2108fa6d,0x46382238,0xff70f7ed,0x22562157,0xf7ed4638,
+0x2300fa63,0x220221f3,0xf7ed4638,0x2152ff4d,0x46382200,0xfa58f7ed,
+0x21402220,0xf7ed4638,0xf241fa53,0x58fa33b8,0x3ffff1b2,0x4638d003,
+0xb2922143,0x4638e002,0x22ff2143,0xfa44f7ed,0x22822105,0xf7ed4638,
+0x2140fa3f,0x46382250,0xfa3af7ed,0x22802143,0xf7ed4638,0x214efa35,
+0x46382215,0xfa30f7ed,0x2215214f,0xf7ed4638,0x214dfa2b,0x46382215,
+0xfa26f7ed,0x210423ff,0x463822f8,0xff10f7ed,0x22ff2105,0xf7ed4638,
+0x2106fa1b,0x463822ff,0xfa16f7ed,0x46382107,0xf7ed22ff,0x2108fa11,
+0x22074638,0xf7ed23ff,0xf04ffefb,0x4c5c0800,0xf8384638,0x44446004,
+0x796578a3,0x409d78e1,0xff2af7ed,0x78a27923,0xf303fa50,0x4093b29b,
+0x4638b2ad,0x462a4631,0xf108b29b,0xf7ed0806,0xf1b8fa15,0xd1e20fc6,
+0x21042300,0x463822f8,0xfed6f7ed,0x22002105,0xf7ed4638,0x2106f9e1,
+0x46382200,0xf9dcf7ed,0x22002107,0xf7ed4638,0x2300f9d7,0x22072108,
+0xf7ed4638,0x4638fec1,0x619ef44f,0x42bff44f,0xf9d6f7ed,0x46382200,
+0x41f1f240,0xf9d0f7ed,0x23032207,0xf2404638,0xf7ed41ea,0x2302f9e3,
+0x46382207,0x41ebf240,0xf9dcf7ed,0xf44f221f,0x4638719c,0xf9b0f7ed,
+0x073cf8d9,0xf81cf7de,0x46046c7b,0x68986c99,0xff90f7da,0x073cf8d9,
+0xf7de4621,0x2181f80b,0xf7ed4638,0x2181fec9,0x22044606,0xf7ed4638,
+0x213af997,0xf7ed4638,0x213afebf,0x46052200,0xf7ed4638,0x215af98d,
+0x4638227e,0xf988f7ed,0x22f7211a,0xf7ed4638,0x215afe9d,0x4638227c,
+0xf97ef7ed,0x2215215b,0xf7ed4638,0x2270f979,0x4638215c,0xf974f7ed,
+0x2dc8f8d7,0x429a4b11,0x4638d103,0x22a0215d,0x4b0fe005,0xd104429a,
+0x215d4638,0xf7ed2252,0x4638f963,0x2201215e,0xf95ef7ed,0x215a4638,
+0xf7ed227d,0x2032f959,0x47984b01,0xe00f4c05,0x1e005d75,0x00028710,
+0x00028bb0,0x0249f000,0x01c9c380,0x00989689,0x4b33200a,0x3c0a4798,
+0x4638215f,0xfe6cf7ed,0x0f02f010,0x2c09d101,0x215fd1f2,0xf7ed4638,
+0xf010fe63,0xd1040f02,0x213a4638,0xf7edb2ea,0x2155f92f,0xf7ed4638,
+0x2155fe57,0x46052200,0xf7ed4638,0x215af925,0x4638227e,0xf920f7ed,
+0x227c215a,0xf7ed4638,0x215bf91b,0x46382255,0xf916f7ed,0x215c2276,
+0xf7ed4638,0xf8d7f911,0x4b182dc8,0xd108429a,0x215d4638,0xf7ed22fc,
+0x4638f907,0x2200215e,0x4b13e015,0xd103429a,0x215d4638,0xe0092296,
+0x429a4b10,0x4638d103,0x223d215d,0x4638e002,0x2213215d,0xf8f0f7ed,
+0x215e4638,0xf7ed2201,0x4638f8eb,0x227d215a,0xf8e6f7ed,0x4b022032,
+0x4c054798,0x46c0e00e,0x1e005d75,0x016e3600,0x0249f000,0x01c9c380,
+0x00989689,0x4bb1200a,0x3c0a4798,0x4638215f,0xfdfaf7ed,0x0f02f010,
+0x2c09d101,0x215fd1f2,0xf7ed4638,0xf010fdf1,0xd1040f02,0x21554638,
+0xf7edb2ea,0x4638f8bd,0x227e215a,0xf8b8f7ed,0x21814638,0xf7edb2f2,
+0x223ff8b3,0x21554638,0xf8aef7ed,0x8db94638,0xff30f7ee,0x46388db9,
+0xfd50f7ee,0xf7ed4638,0x4638fc9f,0xfc10f7ed,0xf7f04638,0x4638f839,
+0xfba2f7f1,0x187a2100,0x31c9f892,0x292d3101,0x3fa0f882,0x4638d1f7,
+0xfd5cf7ef,0xf7ee4638,0x4638f897,0xfb90f7f1,0x463822bf,0x61aef44f,
+0xf88ef7ed,0x463822ff,0x5171f240,0xf888f7ed,0xf2404638,0xf64f5172,
+0xf7ed7233,0x4638f881,0x5173f240,0x7243f64f,0xf87af7ed,0x463822cc,
+0x5174f240,0xf874f7ed,0xf2404638,0xf44f5175,0xf7ed7280,0x2200f86d,
+0xf2404638,0xf7ed5176,0x2200f867,0xf2404638,0xf7ed5177,0x2200f861,
+0xf44f4638,0xf7ed61af,0x2200f85b,0xf2404638,0xf7ed5179,0x2278f855,
+0xf44f4638,0xf7ed61bc,0x4638f84f,0x51e1f240,0x72c1f64f,0xf848f7ed,
+0xf2404638,0xf44f51e2,0xf7ed7280,0x4638f841,0x51e3f240,0x72c1f64f,
+0xf83af7ed,0x46382278,0x51e4f240,0xf834f7ed,0xf2404638,0xf64f51e5,
+0xf7ed727a,0x4638f82d,0x51e6f240,0x72eef64f,0xf826f7ed,0x46382200,
+0x51e7f240,0xf820f7ed,0xf44f4638,0x221261bd,0xf81af7ed,0x46382286,
+0x51e9f240,0xf814f7ed,0x4638228f,0x51eaf240,0xf80ef7ed,0xf2404638,
+0xf64f51eb,0xf7ed727b,0x2201f807,0xf2404638,0xf7ed51ec,0x4638f801,
+0x51edf240,0x72f8f64f,0xfffaf7ec,0x463822fb,0x51eef240,0xfff4f7ec,
+0xf2404638,0xf64f51ef,0xf7ec72db,0x224effed,0xf44f4638,0xf7ec61be,
+0x4638ffe7,0x51f1f240,0x72ebf64f,0xffe0f7ec,0xf2404638,0xf64f51f2,
+0xf7ec72bb,0x2231ffd9,0xf2404638,0xf7ec51f3,0x2280ffd3,0x46384613,
+0x6131f240,0xffe6f7ec,0x5280f44f,0x46384613,0x61daf240,0xffdef7ec,
+0x22402300,0xf2404638,0xf7ec6131,0x4638ffd7,0x612cf240,0x72fff647,
+0xffb6f7ec,0x72fff647,0xf2404638,0xf7ec612d,0xf241ffaf,0xf8a73388,
+0x21a53f72,0xf7ed4638,0x218efcc7,0x0fd0f8a7,0xf7ed4638,0x21a2fcc1,
+0x0fd2f8a7,0xf7ed4638,0x2194fcbb,0x0fd4f8a7,0xf7ed4638,0x2193fcb5,
+0x0fd6f8a7,0xf7ed4638,0x21a4fcaf,0x0fd8f8a7,0xf7ed4638,0x21a3fca9,
+0x0fdaf8a7,0xf7ed4638,0xf8a7fca3,0xe8bd0fdc,0x46c087f0,0x1e005d75,
+0x47702000,0x41f0e92d,0xf241461e,0x58c4435c,0x8aa3460f,0xb11b4615,
+0x21e64817,0xfbe0f7d9,0xf0136a23,0xd0030f03,0x21e74813,0xfbd8f7d9,
+0x2b096a63,0x4810d903,0xf7d921e8,0x6a62fbd1,0xd9062a09,0x21eb480c,
+0xfbcaf7d9,0x30fff04f,0x1c53e010,0x9b066263,0x1202eb04,0x9b076313,
+0x63536295,0x6a2262d6,0x19db1cd3,0x0303f023,0x46106223,0x81f0e8bd,
+0x00022c1c,0xf241b537,0x5903445c,0x68194605,0xf7f5a801,0x592bfa81,
+0xe00d681c,0xf7f54620,0xf8d4fa8d,0xb91b30f8,0x46214628,0x47984b04,
+0xf7f5a801,0x4604fa5f,0xd1ef2c00,0x46c0bd3e,0x0001fb25,0x00000200,
+0x000000ff,0x0000000c,0x00000000,0x00200000,0x00000001,0x000d8020,
+0x00000000,0x00200000,0x00000001,0x000d8020,0x00000000,0x03012ee0,
+0x00090016,0x00ffffef,0x010232c8,0x000b0006,0x00483483,0x01033840,
+0x000a000a,0x001c71c7,0x01043c00,0x000b0005,0x00755555,0x01053f48,
+0x0005000a,0x006e9e06,0x010641a0,0x0005000a,0x003cf3cf,0x01074b00,
+0x000b0004,0x00755555,0x01084d58,0x0004000b,0x000a57eb,0x01094e20,
+0x0004000b,0x00000000,0x030a5dc0,0x000a000b,0x00000000,0x050b61a8,
+0x000b0010,0x00000000,0x010c6590,0x00100002,0x00ec4ec4,0x030d7530,
+0x000b0008,0x00000000,0x0c0e9600,0x01130001,0x00000000,0x010f9c40,
+0x000b0002,0x00000000,0x00000000,0x00000000,0x00000000,0x1501000d,
+0x00040160,0x03010005,0x00040164,0x00140000,0x00040124,0x00000004,
+0x00040128,0x00000000,0x0004012c,0x00000000,0x00040130,0x00000000,
+0x00040134,0x0070040a,0x00040134,0x00d4beef,0x00040134,0xff000005,
+0x00040134,0xff02ff01,0x00040130,0x00000018,0x00040134,0x00e0040a,
+0x00040134,0x0048beef,0x00040134,0xff000005,0x00040134,0xff02ff01,
+0x00040134,0x01181000,0x00040134,0x10000302,0x00040134,0xf3f2f118,
+0x00040134,0x0000ccbb,0x00040130,0x00000038,0x00040134,0x00000000,
+0x00040130,0x00000058,0x00040134,0x00000000,0x00040130,0x00000038,
+0x00040134,0x0700200f,0x00040134,0x00940000,0x00040134,0x90000000,
+0x00040134,0x77767574,0x00040134,0x00000000,0x00040134,0x00050000,
+0x00040134,0xffffffff,0x00040130,0x00000268,0x00040134,0x0033846e,
+0x00040134,0x0050badc,0x00040134,0xab0000d4,0x00040134,0xdabadaba,
+0x00040134,0xf1181000,0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,
+0x00040134,0x00000010,0x00040134,0x00000000,0x00040134,0x000a0000,
+0x00040134,0x0e000001,0x00040134,0x4d435242,0x00040134,0x5345545f,
+0x00040134,0x53535f54,0x00040134,0x04014449,0x00040134,0x968b8482,
+0x00040134,0x06010103,0x00040134,0x00000002,0x00040130,0x00000068,
+0x00040134,0x0228040a,0x00040134,0x0080badc,0x00040134,0xffff0000,
+0x00040134,0xffffffff,0x00040134,0xf1181000,0x00040134,0x1000f3f2,
+0x00040134,0xf3f2f118,0x00040134,0x0000afd0,0x00040134,0x00000000,
+0x00040134,0x01000000,0x00040134,0x0e000002,0x00040134,0x4d435242,
+0x00040134,0x5345545f,0x00040134,0x53535f54,0x00040134,0x04014449,
+0x00040134,0x968b8482,0x00040134,0x06010103,0x00040134,0x00000102,
+0x00040130,0x00000468,0x00040134,0x0228040a,0x00040134,0x0080badc,
+0x00040134,0xffff0000,0x00040134,0xffffffff,0x00040134,0xf1181000,
+0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,0x0000afd0,
+0x00040134,0x00000000,0x00040134,0x01000000,0x00040134,0x0e000002,
+0x00040134,0x4d435242,0x00040134,0x5345545f,0x00040134,0x53535f54,
+0x00040134,0x04014449,0x00040134,0x968b8482,0x00040134,0x06010103,
+0x00040134,0x00000102,0x00040100,0x01000000,0x00020490,0x00000000,
+0x000204a0,0x0000f3f1,0x000204b0,0x0000fdef,0x000204a8,0x0000ffff,
+0x000204a8,0x00000000,0x000204aa,0x00000000,0x000204a4,0x00001acf,
+0x000204ac,0x00000000,0x000204bc,0x00000000,0x000204a6,0x000002c7,
+0x000204b6,0x0000fdff,0x000204ae,0x0000ffff,0x00020406,0x00000001,
+0x00020406,0x00000000,0x0002040c,0x00000014,0x00020406,0x00000000,
+0x00020448,0x00000c00,0x00020402,0x00000630,0x00020502,0x00000000,
+0x00020500,0x00004000,0x00020502,0x00000004,0x00020500,0x00004000,
+0x00020502,0x00000008,0x00020500,0x00004000,0x00020502,0x0000000c,
+0x00020500,0x00004000,0x00020502,0x000000c0,0x00020580,0x0000ffff,
+0x00020582,0x0000ffff,0x00020584,0x0000ffff,0x00020586,0x0000ffff,
+0x00020588,0x0000ffff,0x0002059c,0x0000fff0,0x00020540,0x00008000,
+0x00020520,0x00000f06,0x00020540,0x00008000,0x00020540,0x00008100,
+0x00020520,0x00001d10,0x00020540,0x00008100,0x00020540,0x00008200,
+0x00020520,0x0000281e,0x00020540,0x00008200,0x00020540,0x00008300,
+0x00020520,0x00003129,0x00020540,0x00008300,0x00020540,0x00008400,
+0x00020520,0x00003f32,0x00020540,0x00008400,0x00020540,0x00008500,
+0x00020520,0x00004140,0x00020540,0x00008500,0x00020612,0x00000001,
+0x0002062e,0x0000a2e9,0x00020630,0x0000000b,0x00020600,0x00008004,
+0x00020696,0x00000008,0x0002069a,0x000000e4,0x00020688,0x00000000,
+0x0002069c,0x00000002,0x00020688,0x00001000,0x0002069c,0x00000002,
+0x00020688,0x00002000,0x0002069c,0x00000002,0x00020688,0x00003000,
+0x0002069c,0x00000002,0x00020688,0x00000f0b,0x0002069e,0x00000007,
+0x00020510,0x0000000b,0x00020450,0x00004e01,0x00020452,0x0000015b,
+0x000204e4,0x00000090,0x00040160,0x03010004,0x00040164,0x00000000,
+0x00040164,0x00000080,0x00040164,0x00470047,0x00040164,0x00640000,
+0x00040164,0x00400930,0x00040160,0x0301000d,0x00040164,0x00020002,
+0x00040164,0x00040001,0x00040164,0x00000005,0x00040160,0x03010011,
+0x00040164,0x00640064,0x00040164,0x0047000e,0x00040164,0x00002800,
+0x00040160,0x03010015,0x00040164,0x06b40000,0x00040164,0xffffffff,
+0x00040164,0x0000000a,0x00040160,0x0301001d,0x00040164,0x00002710,
+0x00040164,0x08d80000,0x00040160,0x03010020,0x00040164,0x27100006,
+0x00040160,0x03010024,0x00040164,0x08ee0000,0x00040164,0x00320000,
+0x00040164,0x090b0e0a,0x00040164,0x0000020e,0x00040160,0x03010029,
+0x00040164,0x013f0000,0x00040164,0x0c00ffff,0x00040164,0x7b420474,
+0x00040164,0x08640002,0x00040160,0x0301002e,0x00040164,0x80000000,
+0x00040160,0x03010058,0x00040164,0x4d435242,0x00040164,0x5345545f,
+0x00040164,0x53535f54,0x00040164,0x00004449,0x00040160,0x03010060,
+0x00040164,0x00000039,0x00040164,0x00000050,0x00040164,0x000000c0,
+0x00040160,0x03010070,0x00040164,0x03f803f8,0x00040164,0x03f803f8,
+0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x04200434,
+0x00040164,0x03f8040c,0x00040164,0x042a043e,0x00040164,0x04020416,
+0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x03f803f8,
+0x00040164,0x03f803f8,0x00040164,0x04200434,0x00040164,0x03f8040c,
+0x00040164,0x042a043e,0x00040164,0x04020416,0x00040164,0x04480448,
+0x00040164,0x04480448,0x00040164,0x04480453,0x00040164,0x045e0448,
+0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,0x04480448,
+0x00040164,0x04480469,0x00040164,0x04480448,0x00040164,0x04480448,
+0x00040164,0x04480453,0x00040164,0x045e0448,0x00040164,0x04480448,
+0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,0x04480469,
+0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000002,
+0x00040164,0x00000002,0x00040160,0x03010098,0x00040164,0x001f0000,
+0x00040164,0x001f03ff,0x00040164,0x00000001,0x00040164,0x00000001,
+0x00040160,0x030100a0,0x00040164,0x001f0000,0x00040164,0x001f03ff,
+0x00040164,0x00000001,0x00040164,0x00000001,0x00040160,0x030100a8,
+0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000001,
+0x00040164,0x00000001,0x00040160,0x030100c0,0x00040164,0x24372437,
+0x00040164,0x24372437,0x00040160,0x03010192,0x00040164,0x0000048c,
+0x00040160,0x030101a0,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040160,0x030101fc,0x00040164,0x01cb0020,0x00040164,0x00540000,
+0x00040164,0x08ab0000,0x00040164,0x04100000,0x00040164,0x00020084,
+0x00040164,0x01cf0014,0x00040164,0x00440002,0x00040164,0x08af0000,
+0x00040164,0x04100002,0x00040164,0x02020064,0x00040164,0x01ca0010,
+0x00040164,0x003c0002,0x00040164,0x08aa0000,0x00040164,0x04100002,
+0x00040164,0x08020054,0x00040164,0x01ce0008,0x00040164,0x00340000,
+0x00040164,0x08ae0000,0x00040164,0x04100000,0x00040164,0x0a020044,
+0x00040164,0x01c90008,0x00040164,0x00300002,0x00040164,0x08a90000,
+0x00040164,0x04100002,0x00040164,0x1002003c,0x00040164,0x01cd0004,
+0x00040164,0x002c0000,0x00040164,0x08ad0000,0x00040164,0x04100000,
+0x00040164,0x12020034,0x00040164,0x01c80004,0x00040164,0x002c0000,
+0x00040164,0x08a80000,0x00040164,0x04100000,0x00040164,0x19020030,
+0x00040164,0x01cc0000,0x00040164,0x002c0002,0x00040164,0x08ac0000,
+0x00040164,0x04100002,0x00040164,0x1a020030,0x00040164,0x040a00c0,
+0x00040164,0x00000070,0x00040164,0x040a013a,0x00040164,0xc02c0228,
+0x00040164,0x040a02f2,0x00040164,0x00600100,0x00040164,0x00380414,
+0x00040164,0x01020000,0x00040164,0x01140414,0x00040164,0x01dec02c,
+0x00040164,0x00800414,0x00040164,0x04370022,0x00040164,0x00000015,
+0x00040164,0x043700df,0x00040164,0xc02c0065,0x00040164,0x0437012e,
+0x00040164,0x0011002f,0x00040164,0x000b846e,0x00040164,0x00d40000,
+0x00040164,0x0033846e,0x00040164,0x00fcc02c,0x00040164,0x0018846e,
+0x00040164,0x9d8a0002,0x00040164,0x080200fb,0x00040164,0x00fa4ec5,
+0x00040164,0x34830a02,0x00040164,0x100200fe,0x00040164,0x00f92762,
+0x00040164,0x1a421202,0x00040164,0x190200fd,0x00040164,0x00f813b1,
+0x00040164,0x11811a02,0x00040164,0x1c0200fc,0x00040164,0x00fc0fc1,
+0x00040160,0x03010346,0x00040164,0x00000207,0x00040160,0x0301034e,
+0x00040164,0x00010000,0x00040160,0x03010350,0x00040164,0x000c0000,
+0x00040160,0x0301046c,0x00040164,0xeb300035,0x00040164,0x4444eb24,
+0x00040164,0x40200000,0x00040164,0x10080020,0x00040164,0xde5e0008,
+0x00040164,0xe331e832,0x00040164,0x00264d26,0x00040164,0x00201420,
+0x00040164,0x0008fe08,0x00040164,0x00180000,0x00040160,0x03010477,
+0x00040164,0x1d4c0bb8,0x00040164,0x00640ea6,0x00040164,0x01f40000,
+0x00040164,0x00000041,0x00040164,0x3a9861a8,0x00040164,0x001e0000,
+0x00040160,0x0301047f,0x00040164,0x0000c350,0x00040160,0x03010481,
+0x00040164,0x05140000,0x00040164,0x00002008,0x00040160,0x03010485,
+0x00040164,0x00004e20,0x00040164,0x000f0000,0x00040164,0x000601f4,
+0x00040160,0x0301048b,0x00040164,0x00010000,0x00040164,0x00060000,
+0x00040164,0x000f0002,0x00040164,0x0000afc8,0x00040164,0x00001388,
+0x00040164,0x000f17ec,0x00040160,0x03010492,0x00040164,0x012c0000,
+0x00040164,0x0fa00000,0x00040160,0x030104c3,0x00040164,0x00070000,
+0x00040164,0x001e0014,0x00040160,0x030104d1,0x00040164,0x00be0000,
+0x00040160,0x00020003,0x00040164,0x0000001f,0x00040160,0x00020004,
+0x00040164,0x000003ff,0x00040160,0x00020005,0x00040164,0x0000001f,
+0x00040160,0x00020006,0x00040164,0x00000007,0x00040160,0x00020007,
+0x00040164,0x00000004,0x00040160,0x00020008,0x00040164,0x0000ffff,
+0x00040160,0x00020009,0x00040164,0x00000000,0x00040160,0x0002000a,
+0x00040164,0x00000000,0x00040160,0x0002000b,0x00040164,0x00000000,
+0x00040160,0x0002000c,0x00040164,0x00000000,0x00040160,0x0002000d,
+0x00040164,0x00000000,0x00040160,0x0002000e,0x00040164,0x00000000,
+0x00040160,0x0002000f,0x00040164,0x00000000,0x00040160,0x00020010,
+0x00040164,0x0000001f,0x00040160,0x00020011,0x00040164,0x00000000,
+0x00040160,0x00020012,0x00040164,0x00000000,0x00040160,0x00020013,
+0x00040164,0x00000000,0x00040160,0x00020015,0x00040164,0x00000000,
+0x00040160,0x00020016,0x00040164,0x00000000,0x0000ffff,0x00000000,
+0x00020686,0x000009d0,0x00020680,0x00003e3e,0x00020682,0x0000023e,
+0x00020700,0x0000003c,0x00020684,0x00000212,0x00040160,0x00010003,
+0x00020164,0x000000c0,0x00040160,0x00010003,0x00020166,0x0000000a,
+0x00040160,0x00010004,0x00020164,0x00000014,0x00040160,0x00010007,
+0x00020164,0x00000183,0x00040160,0x00010025,0x00020164,0x000001f4,
+0x00040160,0x000104d2,0x00020166,0x0000042b,0x00040160,0x000104d3,
+0x00020164,0x00000100,0x00040160,0x000101fe,0x00020164,0x0000003c,
+0x00040160,0x00010203,0x00020164,0x00000034,0x00040160,0x00010208,
+0x00020164,0x00000030,0x00040160,0x0001020d,0x00020164,0x0000002c,
+0x00040160,0x00010212,0x00020164,0x0000002c,0x00040160,0x00010217,
+0x00020164,0x00000028,0x00040160,0x0001021c,0x00020164,0x00000028,
+0x00040160,0x00010221,0x00020164,0x00000028,0x0000ffff,0x00000000,
+0x1f29365f,0x1f29365f,0x1f29365f,0x1f29365f,0x03000200,0x06000400,
+0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,
+0x40072d07,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,0x10011000,
+0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x40000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x19130d07,0x0d0905fc,
+0x0a060401,0x14120f0c,0x000c0600,0x00120000,0x00180000,0x00000000,
+0x00000000,0x00000000,0x001e0000,0x00000000,0x09060300,0x15120f0c,
+0x001e1b18,0x00000000,0x0000e803,0x1e00cb5c,0x00000040,0x00000002,
+0x00000000,0x00000010,0x1e00cbdc,0x00000028,0x00000001,0x00000000,
+0x00000010,0x0002836c,0x0000000a,0x0000000b,0x00000000,0x00000020,
+0x0002831c,0x00000014,0x0000000c,0x00000000,0x00000020,0x000235c8,
+0x00000094,0x0000000d,0x00000000,0x00000020,0x00023158,0x0000001a,
+0x0000000e,0x00000000,0x00000010,0x00028428,0x00000040,0x0000000f,
+0x00000000,0x00000010,0x00027e6c,0x00000010,0x00000010,0x00000000,
+0x00000008,0x00027f54,0x00000044,0x00000011,0x00000000,0x00000008,
+0x00023444,0x00000060,0x00000012,0x00000000,0x00000010,0x000233dc,
+0x00000040,0x00000014,0x00000000,0x00000008,0x1e00ca28,0x0000009a,
+0x00000017,0x00000000,0x00000010,0x00027e7c,0x0000006c,0x00000000,
+0x00000000,0x00000010,0x00ffff07,0xfff60755,0xea075500,0x075500ff,
+0x5500ffdc,0x00f1dc07,0xf1d10755,0xc5075500,0x075500f1,0x5500f1bf,
+0x00f1ba07,0xf1b40755,0xaf075500,0x075500f1,0x5500f1aa,0x00f1a507,
+0xf1a10755,0x9c075500,0x075500f1,0x5500f198,0x00f19307,0xf18f0755,
+0x8b075500,0x075500f1,0x5500f187,0x00f18307,0xf1800755,0x7c075500,
+0x075500f1,0x5500f179,0x00f17507,0xf1720755,0x6f075500,0x075500f1,
+0x5500f16b,0x00f16807,0xf1650755,0x63075500,0x075500f1,0x5500f160,
+0x00f15d07,0xf15a0755,0x58075500,0x075500f1,0x5500f155,0x00f15307,
+0xf1510755,0x4e075500,0x075500f1,0x5500f14c,0x00f14a07,0xf1480755,
+0x46075500,0x075500f1,0x5500f144,0x00f14207,0xf1400755,0x3e075500,
+0x075500f1,0x5500f13c,0x00f13b07,0xea3b0755,0x39075500,0x075500ea,
+0x5500e339,0x00e33707,0xdd370755,0x36075500,0x075500dd,0x5500d736,
+0x00d73407,0xd0340755,0x33075500,0x075500d0,0x5500cb33,0x00cb3107,
+0xc5310755,0x30075500,0x075500c5,0x5500bf30,0x00bf2f07,0xba2f0755,
+0x2d075500,0x075500ba,0x5500b52d,0x00b52c07,0xaf2c0755,0x2b075500,
+0x075500af,0x5500aa2b,0x00aa2a07,0xa62a0755,0x28075500,0x075500a6,
+0x5500a128,0x00a12707,0x9c270755,0x26075500,0x0755009c,0x55009826,
+0x00982507,0x94250755,0x24075500,0x07550094,0x55008f24,0x008f2307,
+0x8b230755,0x22075500,0x0755008b,0x55008722,0x00872107,0x84210755,
+0x20075500,0x07550084,0x55008020,0x00801f07,0x7c1f0755,0x1e075500,
+0x0755007c,0x5500791e,0x00791d07,0x751d0755,0x1d075500,0x07550075,
+0x5500721d,0x00721c07,0x6f1c0755,0x1b075500,0x0755006f,0x55006c1b,
+0x006c1a07,0x681a0755,0x19075500,0x07550068,0x55006619,0x00661907,
+0x63190755,0x18075500,0x07550063,0x55006018,0x00601707,0x5d170755,
+0x17075500,0x0755005d,0x55005a17,0x005a1607,0x58160755,0x15075500,
+0x07550058,0x55005515,0x00551507,0x53150755,0x14075500,0x07550053,
+0x55005114,0x00511407,0x4e140755,0x13075500,0x0755004e,0x55004c13,
+0x00e38e08,0x00e08e38,0x00000000,0x00000000,0x00000000,0x00002080,
+0x00006180,0x00003002,0x00000040,0x00002042,0x00180047,0x00080043,
+0x00000041,0x000020c1,0x00046006,0x00042002,0x00040000,0x00002003,
+0x00180006,0x00080002,0x000141fc,0x000021fc,0x000021b7,0x0000416f,
+0x0001ff27,0x0000217f,0x00002137,0x000040ef,0x0001fea7,0x0000024f,
+0x000283a8,0x00000040,0x0000000f,0x00000000,0x00000010,0x01100120,
+0x00080001,0x00100020,0x00100020,0x01200120,0x00080001,0x00100020,
+0x00100020,0x00010001,0x00010001,0x00010001,0x00010001,0x00200020,
+0x00200020,0x00200020,0x00200020,0x01200120,0x00080001,0x00100020,
+0x00100020,0x01200120,0x00080001,0x00100020,0x00100020,0x00010001,
+0x00010001,0x00010001,0x00010001,0x00200020,0x00200020,0x00200020,
+0x00200020,0x01280128,0x00090009,0x00280028,0x00280028,0x01280128,
+0x00090009,0x00280028,0x00280028,0x00090009,0x00090009,0x00090009,
+0x00090009,0x00180018,0x00180018,0x00180018,0x00180018,0x01280128,
+0x00090009,0x00280028,0x00280028,0x01280128,0x00090009,0x00280028,
+0x00280028,0x00090009,0x00090009,0x00090009,0x00090009,0x00180018,
+0x00180018,0x00180018,0x00180018,0x325f4c50,0x64685f47,0x00000062,
+0x01030000,0x4c50001f,0x5f47355f,0x00626468,0x00000000,0x00200103,
+0x5f716672,0x00004732,0x00000000,0x01050000,0x66720006,0x47345f71,
+0x00000000,0x00000000,0x00080105,0x5f716672,0x6c5f4735,0x00000000,
+0x01050000,0x6672000a,0x47355f71,0x00006d5f,0x00000000,0x000c0105,
+0x5f716672,0x685f4735,0x00000000,0x01050000,0x6470000e,0x0047325f,
+0x00000000,0x00000000,0x00100105,0x345f6470,0x00000047,0x00000000,
+0x01050000,0x64700012,0x5f47355f,0x0000006c,0x00000000,0x00140105,
+0x355f6470,0x006d5f47,0x00000000,0x01050000,0x64700016,0x5f47355f,
+0x00000068,0x00000000,0x00180105,0x5f677874,0x00004732,0x00000000,
+0x01020000,0x7874001a,0x47345f67,0x00000000,0x00000000,0x001b0102,
+0x5f677874,0x6c5f4735,0x00000000,0x01020000,0x7874001c,0x47355f67,
+0x00006d5f,0x00000000,0x001d0102,0x5f677874,0x685f4735,0x00000000,
+0x01020000,0x4732001e,0x314c505f,0x6264685f,0x00000000,0x00240902,
+0x505f4732,0x685f324c,0x00006264,0x09020000,0x4732002d,0x334c505f,
+0x6264685f,0x00000000,0x00360902,0x505f4732,0x685f344c,0x00006264,
+0x09020000,0x4735003f,0x314c505f,0x6264685f,0x00000000,0x00480802,
+0x505f4735,0x685f324c,0x00006264,0x08020000,0x47350051,0x334c505f,
+0x6264685f,0x00000000,0x005a0802,0x505f4735,0x685f344c,0x00006264,
+0x08020000,0x67630063,0x63635f61,0x47325f6b,0x00000000,0x006d0e02,
+0x5f616763,0x6d64666f,0x0047325f,0x0d020000,0x6170007c,0x47325f62,
+0x00000000,0x00000000,0x016b0603,0x5f626170,0x00004735,0x00000000,
+0x06030000,0x73720171,0x615f6973,0x325f6a64,0x00000047,0x01770103,
+0x69737372,0x6a64615f,0x355f6a5f,0x01030047,0x73720178,0x615f6973,
+0x355f6a64,0x006c5f47,0x01790103,0x69737372,0x6a64615f,0x5f47355f,
+0x0103006d,0x7372017a,0x615f6973,0x355f6a64,0x00685f47,0x017b0103,
+0x00004000,0x00000002,0x00000003,0x00000004,0x00000005,0x00000006,
+0x00000007,0x00000008,0x00000009,0x0001800a,0x0000000b,0x0000000c,
+0x0000000d,0x0606000e,0x0f0f000f,0x00004010,0x00004011,0x00004012,
+0x00004013,0x00004014,0x00004015,0x00004016,0x00004017,0x00004018,
+0x7f7f0019,0x3f3f001a,0x0000001b,0xd4e8c01c,0x53a7c01d,0xffff001e,
+0x0ff0c01f,0x01010020,0x5e1f4021,0x7e7f4022,0xf0304023,0x35350024,
+0x3f3f0025,0x0202c026,0x7f7fc027,0x00000028,0x00000029,0x0c0cc02a,
+0x0000002b,0x3f3c802c,0xfefc802d,0xffff002e,0xffff002f,0x00000030,
+0x00000031,0x0808c032,0x0f0f0033,0x22220034,0xa8a80035,0x6060c036,
+0x11110037,0x00000038,0x00000039,0x3030c03a,0x0101003b,0x0303003c,
+0x0b0cc03d,0x0f10c03e,0x0f0f003f,0x80800040,0x68680041,0x68680042,
+0x80800043,0xffff0044,0x03030045,0x38380046,0xffff0047,0x38380048,
+0xc0c00049,0xffff004a,0xffff004b,0xfd3dc04c,0x0c0c004d,0x9696004e,
+0x5a5a004f,0x7f7f0050,0x7f7f0051,0x33330052,0x0202c053,0x00000054,
+0x30300055,0x00000056,0x5656c057,0x06060058,0x0e0e0059,0x7e7e005a,
+0x1515005b,0x0f0f005c,0x0000005d,0x0000005e,0x0000005f,0x00000060,
+0x00000061,0x00000062,0x00000063,0x04040064,0x00000065,0x00000066,
+0xcfcf0067,0x59590068,0x07070069,0x4242006a,0x0000006b,0xdbdb006c,
+0x9494006d,0x2828006e,0x6363006f,0x07070070,0xd3d30071,0xb1b10072,
+0x3b3b0073,0x06060074,0x58580075,0xf7f7c076,0x00000077,0x00000078,
+0x02020079,0x0000007a,0x0909007b,0x0505007c,0x1616007d,0x6b6b007e,
+0x0000007f,0xb3b30080,0x04040081,0x00000082,0x00000083,0x00000084,
+0x00000085,0x00000086,0x00000087,0x00000088,0x00000089,0x0000008a,
+0x0000008b,0x0202008c,0x0000008d,0x0000008e,0x6666008f,0x66660090,
+0x66660091,0x66660092,0x66660093,0x66660094,0x66660095,0x00000096,
+0x00000097,0x00000098,0x00000099,0x0000009a,0x0000009b,0x0000009c,
+0x0000009d,0x0000009e,0x0000009f,0xffff00a0,0x000000a1,0x606000a2,
+0x666600a3,0x0c0c00a4,0x666600a5,0x0c0c00a6,0x010100a7,0x666600a8,
+0x666600a9,0x666600aa,0x666600ab,0x666600ac,0x666600ad,0x000000ae,
+0x010100af,0x000000b0,0x000000b1,0xf0f0c0b2,0x000000b3,0x050500b4,
+0x303000b5,0x555500b6,0x333300b7,0x000000b8,0x333300b9,0x000000ba,
+0x353500bb,0x000000bc,0x333300bd,0x000000be,0x333300bf,0x000000c0,
+0x000000c1,0x444400c2,0x000000c3,0x7171c0c4,0x7171c0c5,0x030300c6,
+0x888800c7,0x444400c8,0x010100c9,0x000000ca,0x000000cb,0x000000cc,
+0x000000cd,0x000000ce,0x30f080cf,0x050500d0,0x333300d1,0x000000d2,
+0x050500d3,0x000000d4,0x000000d5,0x050500d6,0x000000d7,0x000000d8,
+0x050500d9,0x000000da,0x333300db,0x000000dc,0x333300dd,0x000000de,
+0x7777c0df,0x888800e0,0x000000e1,0x444400e2,0x0303c0e3,0x0f0fc0e4,
+0x0f0fc0e5,0x444400e6,0x010100e7,0x000000e8,0x000000e9,0x000000ea,
+0x000000eb,0x7777c0ec,0x585800ed,0x7777c0ee,0x585800ef,0x000000f0,
+0x000000f1,0x747400f2,0x0404c0f3,0xa2a200f4,0xaaaa00f5,0x242400f6,
+0x0909c0f7,0x282800f8,0x101000f9,0x555500fa,0x808000fb,0x888800fc,
+0x888800fd,0x888800fe,0x888800ff,0x80800100,0x38380101,0xb8b80102,
+0x80800103,0x38380104,0x78780105,0xc0c00106,0x03030107,0x00000108,
+0x00000109,0x0000010a,0x0400810b,0x0c0c010c,0x0000010d,0x0000010e,
+0x9696010f,0x77770110,0x5a5a0111,0x00000112,0x00000113,0x21210114,
+0x70700115,0x00000116,0x00000117,0x00000118,0xb3b30119,0x5555011a,
+0x0b0b011b,0x0000011c,0x0303c11d,0x0000011e,0xb3b3011f,0x55550120,
+0x30300121,0x46460122,0x00000123,0x00000124,0x00000125,0x21210126,
+0x23230127,0x02020128,0x0000ffff,0x3d0604f4,0x04f30103,0x01014c0c,
+0x500804f3,0x04f27f00,0xff004408,0x4a0004f3,0x04f2ff00,0xff004d04,
+0x4e0404f3,0x04f2ff00,0x0f004f0c,0x4f0004f3,0x04f50f04,0x0f004900,
+0x460304f6,0x04f50704,0x0100460f,0x460004f6,0x04f50701,0x07044808,
+0x480b04f5,0x04f50f00,0x0f044904,0x450f04f4,0x04f70100,0x0704520d,
+0x520004f8,0x04f70107,0x07054103,0x410604f7,0x04f70f00,0x0705420a,
+0x420f04f6,0x04f70100,0x07014200,0x430b04f6,0x04f60f04,0x0f004307,
+0x450604f6,0x04f40101,0x0f044007,0x400b04f4,0x04f30f00,0x03033c0e,
+0x3c0004f4,0x04f40705,0x07003c03,0x520004f2,0x00000f00,0x4ff7e92d,
+0x46059f0c,0x4691468b,0xa038f8dd,0xb11b4698,0x5303ea4f,0xb1230d1b,
+0xf44f488a,0xf7d77108,0x4e89fcaf,0x21004628,0xf7d82290,0x6834fd6f,
+0xf44fb96c,0x46217032,0x47984b84,0x28006030,0x80fbf000,0xf44f4621,
+0xf7d87232,0x6833fd5f,0xbf082f01,0xf8c52700,0xf893308c,0x261122c4,
+0xf8833201,0xf8c522c4,0x9b0d807c,0x652b612e,0x904cf8c5,0x2f00606f,
+0x80dff040,0x53c0f04f,0x0f13681a,0x0413602b,0x632b0c1b,0x4303f3c2,
+0x5203f3c2,0x63aa636b,0x2301b10a,0x6bab63ab,0x3b0e4628,0xbf8c2b01,
+0x23012300,0x3040f885,0x465a4641,0xfa02f000,0x3084f8d5,0xf0002b00,
+0x462880bc,0xf7d84639,0x4604f8a1,0x485db920,0x71a2f44f,0xfc54f7d7,
+0xf7d84628,0x280af963,0xbfc46168,0x63eb6ae3,0xf0136863,0x61ab5f80,
+0xf8d4d005,0x622b3604,0x03fff003,0xf44f61eb,0x60ab63e0,0xf04f463c,
+0x60eb33ff,0xe011612e,0x46284621,0xf87af7d8,0xf7d74628,0x4628ff49,
+0xf940f7d8,0x308cf8d5,0x3024f853,0xbf084598,0x34014627,0x3084f8d5,
+0xd3e9429c,0x46284639,0xf864f7d8,0xf7fc4628,0x9a0ff955,0x46286ceb,
+0x21009201,0xf8cd4642,0xf7fba000,0x2800fa21,0xf1bad16b,0xd1010f00,
+0xe0014656,0x6000f8da,0x43e4f241,0xb12e62ab,0x49354630,0xfc6cf7d8,
+0xb9406268,0x49332000,0xfc66f7d8,0xb9106268,0x73fff64f,0x6a6b626b,
+0x482ab923,0x210ff240,0xfbeef7d7,0x492c4630,0xfc56f7d8,0x80b8f8df,
+0xf89862e8,0x2c004000,0x696bd12b,0xdd0b2b13,0x6100f44f,0x46224628,
+0xf824f7d8,0x65844639,0x462865c4,0xf81af7d8,0x6ce94628,0xfad0f7fb,
+0x6ce94628,0xfab0f7fb,0x4630491c,0xf7d86cec,0x4621fc33,0x46284602,
+0xfbdaf7fb,0x6ce94628,0xfcb4f7fb,0x6ce94628,0xfa90f7fb,0xf8882301,
+0x696b3000,0xdd112b0f,0x49114630,0xfc1cf7d8,0x21004b10,0xbf082800,
+0x90004618,0x46282288,0x33fff04f,0xff4af7d7,0x2500e000,0xe8bd4628,
+0x46c08ffe,0x0002070c,0x00023b30,0x1e00578d,0x00020729,0x00020730,
+0x0002073a,0x00020745,0x0002074e,0x000a005a,0x00023bcc,0x4f18b5f0,
+0x7839b085,0xb1094604,0xe0274816,0x4b174a16,0x4d142800,0x4602bf08,
+0x4603bf08,0x91019100,0x92039302,0xf2444628,0x46227110,0x53c0f04f,
+0xfeacf7ff,0xb9584606,0x108cf8d5,0x4608b909,0x4620e00c,0x7232f44f,
+0x47984b09,0xe0054630,0x23204a08,0x23016013,0x4628703b,0xbdf0b005,
+0x00023b34,0x00023b3c,0x00023bb4,0x00023bb0,0x1e005c15,0x00023b38,
+0x47ffe92d,0x46884681,0x2090461d,0x4b142100,0x9e0d4692,0x47989f0e,
+0xb1e04604,0x46499b0c,0x46429301,0x95004653,0x97039602,0xfe72f7ff,
+0xb9304605,0x46214640,0x4b0a2290,0x46284798,0xb90ee00a,0xe0004633,
+0x67636833,0x463bb90f,0x683be000,0x462067a3,0xe8bdb004,0x46c087f0,
+0x1e00578d,0x1e005c15,0x4ff0e92d,0xb0872b01,0x91054605,0x93039204,
+0xd9019f11,0xe0a32000,0x0a00f04f,0x8084f8d0,0x9040f8dd,0xe09046d3,
+0x208cf8d5,0x0688ea4f,0xf8c318b3,0x9b0591c0,0x45994641,0x9c04bf08,
+0xbf084628,0x4028f842,0xf87cf7d8,0x8080f8c5,0x462867e8,0x408cf8d5,
+0xf808f7d8,0x308cf8d5,0x18f31934,0x0080f8c4,0x3080f8d3,0x6f00f5b3,
+0x4628d125,0xf7d86fec,0x2804f811,0x2805d001,0x6823d903,0x6703f3c3,
+0x6b2ae059,0x3306f244,0xd101429a,0xe0522706,0x7304f244,0xd101429a,
+0xe04c2709,0x3365f245,0xd101429a,0xe0462707,0xf240482d,0xf7d72103,
+0x2701fabb,0xf5b3e03f,0xd13c6f03,0x46286fe9,0x6670f501,0x6177f501,
+0xffc8f7d7,0x0301f108,0x3084f8c5,0x051b0d03,0x5fc0f1b3,0xf420d12b,
+0xf024647e,0x2200041f,0xf8d5e008,0xeb03308c,0xf8d30382,0x429c31c0,
+0x3201d005,0x3084f8d5,0xd3f2429a,0x2a11e001,0xf106d115,0x4628019c,
+0xffa4f7d7,0x9c039400,0x4003f3c0,0x90011c63,0x46289905,0xf7ff9a04,
+0x9b10ff67,0xf1b34483,0xbf085fc0,0xf10a1a3f,0xf1080a01,0xf5090801,
+0x45ba5980,0xf1b8d203,0xf67f0f0f,0xeb0baf69,0xf8c5030a,0x46183084,
+0xe8bdb007,0x46c08ff0,0x00020754,0x460db537,0x46046fc1,0x617bf501,
+0xff74f7d7,0xffb2f7d7,0x53c0f04f,0x23019300,0x93014601,0x462a4620,
+0xf7ff3b01,0xf8c4ff35,0xbd3e0084,0x4604b570,0xfd68f7d7,0x46052100,
+0xf7d74620,0xb920fe87,0xf6404804,0xf7d71137,0x4620fa3b,0xf7d74629,
+0xbd70fe7d,0x000209c5,0x4ff8e92d,0xa028f8dd,0x46884605,0xf8dd4699,
+0x4617b02c,0x481fb922,0x2198f643,0xfa24f7d7,0x0f00f1ba,0xf1bbd109,
+0xd1060f00,0xb9239b0c,0xf6434818,0xf7d72199,0xf505fa17,0x3308636c,
+0x781e2200,0x2434b9c6,0xf404fb02,0x606cf504,0x4b113008,0x46391828,
+0x4798221f,0xf8c41964,0x9b0cbef0,0xf8c44630,0xf8c48ee8,0xf8c49eec,
+0xf8c4aef4,0xe00a3ef8,0x33343201,0xd1e02a16,0xf6434804,0xf7d721a9,
+0xf06ff9ef,0xe8bd0015,0x46c08ff8,0x00021040,0x1e0040f9,0x4ff0e92d,
+0x9004b091,0x4699460c,0x7050f243,0x4ba92100,0xf8dd4615,0xf8dda06c,
+0xf89d8078,0x47986068,0x28004607,0x8521f000,0xf2432100,0xf7d87250,
+0xf507fa91,0x9a046b28,0x6304f507,0xf10b330c,0xf8c70b04,0xf8c73844,
+0x4649273c,0xf8c74638,0xf8c7b848,0xf8c79000,0xf8c7a048,0xf8878808,
+0xf7fc603d,0x4638fac9,0xfc86f7db,0xf887683b,0xf8c76774,0xf5073740,
+0xf8c763ec,0xf507375c,0x3b0c62ea,0xa748f8c7,0x92014628,0x46519302,
+0x9b1d9a1c,0x8000f8cd,0xfe4af7ff,0x074cf8c7,0x230bb910,0xbce2f000,
+0x8750f8d7,0xf8c760b8,0x4640800c,0xf7d84980,0xb120f9cb,0x460a2100,
+0x47984b7e,0x4640b284,0xf7d8497d,0xb120f9c1,0x460a2100,0x47984b79,
+0x4620b285,0x4b794629,0xb9104798,0xf000230c,0x2200bcc1,0x0112f640,
+0x4826f8a7,0x5828f8a7,0x074cf8d7,0xfdaef7d7,0x0758f8c7,0x074cf8d7,
+0xfe70f7d7,0xf8d768ba,0xf8c73758,0x60780744,0x93056b11,0x380cf8c7,
+0x3306f244,0xd1174299,0x2b026b53,0x6b91d91a,0xd1052902,0x2828f8b7,
+0x3303f244,0xd117429a,0x2828f8b7,0x3321f244,0xd002429a,0x429a3303,
+0x2901d108,0xe005d10c,0x3311f244,0xd1014299,0xb12b6b53,0x1380f44f,
+0xf0034103,0xe0000001,0xb9102000,0xf000230d,0xf8d7bc79,0xf7fa074c,
+0x4638fe9f,0xf7dc2100,0x4638fdcb,0x31fff04f,0xff3af7fb,0xf7fb4638,
+0xb910feef,0xf000230e,0x4949bc65,0xf7d84640,0x68baf97b,0xbf0828ff,
+0xb2802001,0x0384f8a7,0xb1b86a51,0xd80128ff,0xe0142401,0x3b010b03,
+0xd80f2b01,0x2303f3c0,0xd80b2b09,0xf3c0b153,0x2b091303,0xf000d806,
+0x2b09030f,0x2400bf8c,0xe0002401,0x6a922400,0x43e4f241,0xd110429a,
+0x6382f5a1,0x2b013b07,0x283fd801,0xf240e007,0x4299430c,0x3315d004,
+0xd1024299,0xd8002850,0xb9142400,0xf000230f,0x492abc25,0xf7d84640,
+0x4929f93b,0x0386f887,0xf7d84640,0x4927f935,0x0388f8c7,0xf7d84640,
+0xf8d7f92f,0xf8c7174c,0x6a8a038c,0x036bf241,0xd10c429a,0x2b4e6a4b,
+0xf8b7d109,0x2b403384,0xf8d7d905,0xf0433388,0xf8c70302,0xf8d73388,
+0xf0133388,0xd1020f20,0xf8872301,0xf24437c0,0x429d3324,0x3b0bd014,
+0xd011429d,0x429d3b07,0x3316d00e,0xd00b429d,0x429d3303,0x3b17d008,
+0xd005429d,0x429d3307,0x3319d002,0xd113429d,0xe0122302,0x1e00578d,
+0x000212c6,0x1e0037cd,0x00020716,0x1e006919,0x000212cd,0x000212d6,
+0x0002073a,0x000212de,0xf8c72301,0xf8d73770,0x46383770,0x32f0f8c7,
+0xf8c72301,0xf0013840,0xf8c7fadd,0xb9080818,0xe3b72310,0x3321f244,
+0xd011429d,0x429d3b0e,0x3307d00e,0xd00b429d,0x429d3310,0x3b14d008,
+0xd005429d,0x429d3307,0x2600bf14,0xe0002601,0x46312601,0xf7fb4638,
+0xf8d7fefd,0x2e002848,0x2302bf0c,0x60532301,0xf8d76096,0xf8d7074c,
+0xf7d74844,0x6020fb73,0x074cf8d7,0x4844f8d7,0xfb58f7d7,0x380cf8d7,
+0xf8d36060,0xf8c7315c,0xf8c73830,0x687b3834,0x2b103b04,0x4896d904,
+0x213ff64a,0xf824f7d7,0x4a946879,0xfb012306,0xf8d72303,0xf8d70844,
+0x6303475c,0x3848f8d7,0x685a4638,0x3818f8d7,0x93009905,0xf001463b,
+0x6020f875,0x2311b908,0xf8d7e35c,0x6819375c,0x2b01684b,0x2312d001,
+0xf8d7e354,0xf04f2848,0xf8a2030f,0xf2403134,0xf8a233ff,0x68533136,
+0x2b026011,0x3b01d115,0x68b97313,0x3306f244,0x429a6b0a,0x6b8bd106,
+0xd1032b02,0x2848f8d7,0x73132300,0x3848f8d7,0x21034638,0xf7dc7b1a,
+0xf8d7fb97,0x68532848,0xd1012b02,0x73133b01,0x210a2201,0x4638637a,
+0xfb8af7dc,0x2848f8d7,0x0356f242,0x8a016810,0xd8064299,0x42993b01,
+0x3b05d234,0xd0094299,0xf242e030,0x42990360,0xf24ed01f,0x429943f5,
+0xe027d021,0x2b017c83,0xf06fd105,0xf8c2033b,0x334b3124,0xf06fe004,
+0xf8c20345,0x335a3124,0x3128f8c2,0x3388f8d7,0x5f80f413,0xf8d2d019,
+0x3b023124,0x3124f8c2,0xf06fe013,0xf8c2034a,0x335a3124,0xf06fe00b,
+0xf8c20395,0xf5033124,0xe0047396,0x034af06f,0x3124f8c2,0xf8c2335f,
+0xf8d73128,0x46381848,0x3124f8d1,0xf8c14c46,0xf8c13120,0xf8d13118,
+0xf8c13128,0x3114311c,0xf806f7de,0xf8d76b7b,0x227f1848,0xbf183b00,
+0x92002301,0xf1012200,0x93010014,0x46133178,0x4b3a47a0,0xf8d7493a,
+0x2e000750,0x4619bf08,0xffcef7d7,0xb940b2c0,0x49374b36,0x0750f8d7,
+0xbf082e00,0xf7d74619,0xb240ffc3,0x2b0e1e43,0x2300d901,0x68bbe039,
+0xf2446b1a,0x429a3325,0x2801d001,0xf642d105,0x23004215,0x320154bb,
+0x2802e006,0x2301d105,0x4215f642,0x18d254bb,0x4b2654bb,0xf8d74926,
+0x2e000750,0x4619bf08,0x4848f8d7,0xff9cf7d7,0x010df884,0x1848f8d7,
+0x310df891,0xd1082bff,0x2386f897,0xd1042a01,0xf8812308,0x4613310d,
+0xf343e007,0x099b0205,0x0382eb03,0x310df881,0xb90b2301,0xe2653314,
+0x3ffff1b6,0xaeaaf43f,0x46382100,0xf818f7dc,0x46382103,0xf882f7dd,
+0x4d0f4b0e,0xf8d7681c,0xf04f0758,0x46297340,0x3160f8c0,0x46c0e02c,
+0x00021040,0x00023868,0x0001ed85,0x000212ef,0x000212ea,0x000212f8,
+0x000212f4,0x000209b6,0x000212fc,0x00031650,0x0002ad24,0x78ca790b,
+0xea43041b,0x798a6302,0x794a4313,0x2302ea43,0x3164f8c0,0x780a784b,
+0xea43021b,0x788a4302,0x43133107,0x3164f8c0,0x0301ebc5,0xd3e542a3,
+0x49804640,0xff34f7d7,0x4617f642,0x497e55b8,0xf7d74640,0xf507ff2d,
+0x34175430,0xf6427823,0xf507481c,0x351c5530,0x0008f807,0x3301b90b,
+0x462055bb,0x4c752101,0xf64247a0,0xb2c04318,0x330154f8,0x782b54f8,
+0x3301b913,0x3008f807,0x21014628,0xf64247a0,0xb2c0431d,0x240054f8,
+0x54f83301,0x4621e007,0xf7fb4638,0x4638fd21,0xfae4f7dc,0xf8d73401,
+0x429c3840,0xf8d7d3f3,0x2300074c,0x4a634962,0xf7d79700,0xf897f985,
+0xb153381c,0x074cf8d7,0xf7d72101,0xb120fa13,0xf64a485d,0xf7d6312b,
+0x4b5cfe77,0x21004638,0xf8d74798,0x495a0750,0xfeb2f7d7,0xb9784603,
+0x041af10d,0x49584b57,0x4620221f,0xf8d74798,0x46210750,0xfea4f7d7,
+0xb9084603,0xe1ad2315,0x6802f507,0x0818f108,0x46414618,0x47984b4f,
+0x1839f897,0x283af897,0x6838f897,0x083bf897,0x0302ea01,0x483cf897,
+0x0303ea06,0x583df897,0x0303ea00,0x0303ea04,0x0303ea05,0xd0092bff,
+0x0302ea41,0x0303ea46,0x0303ea40,0x0303ea44,0xd101431d,0xe1812316,
+0x99044638,0x464b4652,0xf92ef001,0x07f8f8c7,0x231fb908,0x4638e176,
+0xfad2f000,0x0800f8c7,0x233db908,0x4934e16e,0xf7d768f8,0xf243fe85,
+0x52f8635c,0x68f84931,0xfe7ef7d7,0x635ef243,0x463852f8,0xf940f7dc,
+0x3848f8d7,0xf6426818,0x5cf94315,0xf8c0f7eb,0x5058f507,0x22064641,
+0xf7d7300e,0x4641fee3,0xf1072206,0xf7d7004c,0x4638fedd,0xf972f001,
+0x435cf241,0xb90850f8,0xe13f2329,0xf0004638,0xf8c7fa51,0xb90807e0,
+0xe1372331,0xf0004638,0xf8c7f971,0xb90807e8,0xe12f2332,0xf0014638,
+0xf8c7f87d,0xb90807f0,0xe1272334,0xf0004638,0xf243fc5f,0x50f8734c,
+0xf0402800,0x23368127,0x46c0e11c,0x00021300,0x00021308,0x1e003645,
+0x0000ba35,0x0000ba25,0x00021040,0x0001d47d,0x00021313,0x1e0040f9,
+0x00021310,0x1e00366d,0x0002131b,0x0002132e,0x3848f8d7,0x68596818,
+0xfc2cf7ea,0x63fcf241,0xf8d752f8,0x6b7c3848,0xf8d36818,0x68068004,
+0xfa48f7ea,0x0a00f04f,0x23ffb2c0,0x55b8f507,0x90039301,0x3c004643,
+0x2401bf18,0x46514628,0xf8cd4632,0x9402a000,0xf984f7ef,0xb12b6b7b,
+0x62d2f241,0xf0435abb,0x52bb0320,0x50baf507,0x22904649,0xf7d7301c,
+0x4649fe61,0xf5072290,0xf7d7703d,0xf04ffe5b,0xf04f0206,0xf8a70305,
+0xf8a726fc,0x4c7333a0,0x7225f44f,0x03c4f04f,0x0501f04f,0x23a2f8a7,
+0x3636f8a7,0x5634f8a7,0x4a6d4651,0x46384b6d,0xa000f8cd,0xf7fd9701,
+0x1d23f969,0x0007e893,0xe883466b,0x68230007,0x21074638,0x4c66463a,
+0x463847a0,0x6159f507,0x47984b64,0x07e0f8d7,0xfab4f7e5,0xf887b108,
+0x22025d46,0x33e4f241,0x465954fa,0xaac8f887,0x5c04f887,0xf7db4638,
+0xf507fa5b,0x4638613c,0xfa56f7db,0xf241221e,0x54fa33ef,0x22183301,
+0x34fff04f,0x463854fa,0xf7db2101,0x4638f8cb,0xf8c74651,0xf7dc4d4c,
+0xf241f8ad,0xf88733ee,0xf887aaca,0x54fcac06,0x54fc191b,0x54fc191b,
+0x46514638,0xfed6f7db,0xf10d2206,0x4946003a,0xfdecf7d7,0x2828f8b7,
+0x3321f244,0xd011429a,0x429a3b0e,0x3307d00e,0xd00b429a,0x429a3310,
+0x3b14d008,0xd005429a,0x429a3307,0x2400bf14,0xe0002401,0x46382401,
+0x1dd0f8d7,0x4b374622,0x46054798,0x2339b108,0xf10de034,0x4622013a,
+0xf7f24638,0xf44ffd77,0xfb04739e,0x19caf103,0x0a94f8c2,0x2337b908,
+0x2301e024,0xf8d27603,0x18790a94,0x612ef501,0x311c30f8,0xf7d72228,
+0xf1b4fdad,0xd0b73fff,0x2398f8d7,0x605ef507,0x2110300c,0x4b2232c0,
+0x6cba4798,0x60d74b21,0x46386093,0xfa9cf7dd,0xb1029a1f,0x46386015,
+0x231ee024,0xb90a9a1f,0xe01f4610,0x20009a1f,0xe01b6013,0x59b6f507,
+0x090cf109,0x22902100,0xf7d74648,0xf241fd63,0xf04f63f8,0x52fa0264,
+0x33302203,0x463854fa,0x23012200,0x512cf44f,0x47a04c0d,0xf43f28ff,
+0xe6dfaedb,0xe8bdb011,0x46c08ff0,0x00021030,0x000072e9,0x00007501,
+0x0001f801,0x0001db1d,0x00021028,0x0001e691,0x1e003bcd,0x0000584d,
+0x0001e9a1,0x2100b5f0,0x4606b085,0xf44f4b56,0x4798702c,0xb9084605,
+0xe0a14607,0xf44f2100,0x4607722c,0xfd26f7d7,0x2100602e,0x186a2301,
+0x290818c9,0xd1f97293,0x742b3b01,0x732b746b,0x461a72eb,0x18ab2101,
+0x2a081852,0x12a8f883,0x2310d1f8,0x752b74eb,0xf8852306,0xf04f3027,
+0xf88533ff,0xf44f3028,0x866b737a,0x03c8f04f,0x230086ab,0x20052203,
+0xf88574a9,0x1849302a,0x6300f503,0x202cf885,0x202df885,0x0029f885,
+0x102bf885,0x3214f8c5,0x75a97568,0x7d6b462a,0x7dab75d3,0x320177d3,
+0x0308f105,0xd1f6429a,0x24002201,0x33e7f241,0x202ff885,0x402ef885,
+0x54f24628,0xff10f7e1,0xf44f4630,0x4a277194,0x94004b27,0xf7fd9501,
+0x42a0f819,0xdb386068,0x46304b24,0x4b249300,0x93014924,0x4a254b24,
+0x462b9302,0xf9c4f7ff,0xd12a2800,0x073cf8d6,0x462a4921,0x4c224b21,
+0x63a847a0,0x462ab308,0x48214c20,0x47a04921,0x4821462a,0x47a04921,
+0x1d234c21,0x0007e893,0xe883466b,0x68230007,0x21064630,0x4c1d462a,
+0x462847a0,0x102ef896,0xfebcf7e1,0xf8c523c8,0x46283210,0xfe8cf7e1,
+0x6cb0e006,0xf44f4629,0x4b15722c,0x27004798,0xb0054638,0x46c0bdf0,
+0x1e00578d,0x0000f0ad,0x0000e769,0x0000ee69,0x0000eb41,0x0002188c,
+0x0000e7b5,0x00021934,0x0000d249,0x0002193a,0x1e0061d1,0x1e006061,
+0x0002193f,0x0000eda9,0x0002194b,0x0000ed29,0x0002187c,0x0001f801,
+0x1e005c15,0x4605b57f,0x20ac2100,0x47984b1c,0x4604b908,0x2100e030,
+0x460422ac,0xfc52f7d7,0x60254b18,0x93006065,0x26004b17,0x46289302,
+0x4a174916,0x96014623,0xf94af7ff,0xf04fb9b0,0x82630301,0x682082a3,
+0xf86cf7db,0x63fbf640,0xf64181a0,0xf5b062ff,0xbfd45ffc,0x20012000,
+0xbf1842b0,0x74204613,0xe00581e3,0x6ca84621,0x4b0822ac,0x46344798,
+0xb0044620,0x46c0bd70,0x1e00578d,0x0000f125,0x0000f119,0x00021aa4,
+0x00021af8,0x1e005c15,0x2100b530,0xb0854605,0x4b0c2004,0xb9084798,
+0xe0104604,0x22042100,0xf7d74604,0x4b08fc07,0x93006025,0x93012300,
+0x46289302,0x4a064905,0xf7ff4623,0x4620f901,0xbd30b005,0x1e00578d,
+0x0000f521,0x00021b34,0x00021bd5,0x47f0e92d,0xf89db086,0xf8dd4038,
+0x9400a04c,0x461f9c0f,0x9c109401,0xa014f8cd,0x9c119402,0x9c129403,
+0xf7ff9404,0x4605f92f,0xf8dab918,0x48464000,0xf44fe00b,0x21007035,
+0x47984b44,0x48ecf243,0xf8454604,0xb9280008,0x46394841,0x4b424a41,
+0xe0734798,0xf44f2100,0xf7d77235,0xf855fbbf,0x237f2008,0x60156055,
+0x36fff885,0x24006853,0x4700f883,0x94014b39,0x94029300,0x49384628,
+0xf8554a38,0xf7ff3008,0x4606f8af,0x4836b108,0xf8d5e7db,0x4935073c,
+0x2008f855,0x4c354b34,0xf8df47a0,0xf8c590b4,0xb9280d1c,0x46394832,
+0x47c84a28,0xe0414634,0x2008f855,0xf8852301,0x492e6d11,0x32c4f8c2,
+0xf7d768e8,0x4604fb05,0x482b4621,0xb14c47c8,0x492a4620,0x47984b2a,
+0xf855b920,0x23022008,0x32c4f8c2,0x44ecf243,0x4826592b,0x12c4f8d3,
+0x47b04e17,0xf0005928,0xb110f893,0x48224604,0x5928e006,0xf84af000,
+0xb1284603,0x481f4604,0x4a0e4639,0xe00d47b0,0x0f00f1ba,0xf8cad001,
+0x592a0000,0xf8c2481a,0x491a3218,0x47984b1a,0xe0024628,0x4000f8ca,
+0xb0062000,0x87f0e8bd,0x00021e84,0x1e00578d,0x00021ea1,0x00021c4f,
+0x1e004461,0x000103fd,0x00021c74,0x00021ec3,0x00021ed3,0x00010349,
+0x00021263,0x1e0061d1,0x00021ef9,0x00021f25,0x00021f2d,0x00021f40,
+0x1e004041,0x00021f44,0x00021f5e,0x00021f8b,0x00021fba,0x00010291,
+0x1e006061,0x2100b570,0x4c174605,0x60e1f44f,0xf8c547a0,0xb3280220,
+0xf44f2100,0xf7d762e1,0x2080fb0d,0x47a02100,0x02c0f8c5,0x2100b1d0,
+0xf7d72280,0x4c0dfb03,0x490e480d,0x47a0462a,0x490e480d,0x47a0462a,
+0x462a480d,0x47a0490d,0x23082200,0xf8c54610,0xf8c52224,0xf885322c,
+0xe0002230,0xbd702001,0x1e00578d,0x1e006061,0x0002211e,0x0001127d,
+0x00022127,0x000112f5,0x0002194b,0x00011249,0x4b3fb57f,0x93004605,
+0x93012300,0x68409302,0x4a3d493c,0xf7fe462b,0x2800ffd3,0x682bd16d,
+0xf8d3493a,0x462a073c,0x4e3a4b39,0xf8c547b0,0xb3000130,0x4938682b,
+0x073cf8d3,0x4b37462a,0xf8c547b0,0xb1b00128,0x4b35682c,0x073cf8d4,
+0x462a4934,0xf24347b0,0x50e013d4,0x682bb158,0xf8d34931,0x462a073c,
+0x47b04b30,0x012cf8c5,0x2301b108,0x2300e000,0xd03e2b00,0x21002040,
+0x47a04c2b,0x28006568,0xf44fd037,0x21006080,0x65a847a0,0xd0302800,
+0x7010f44f,0x47a02100,0xb3506628,0xf44f2100,0xf7d77210,0x2400fa83,
+0x7090f44f,0x4b1e2100,0xb1f04798,0x3404192b,0x2c182100,0x60986081,
+0x460ad1f2,0x320418ab,0x2ad82400,0x4140f8c3,0x682bd1f8,0xf8832201,
+0x682b2d11,0xf8834813,0x49132d63,0x4070f885,0x4b12462a,0x46204798,
+0x2001e000,0xbd70b004,0x00012b41,0x000225dc,0x00022258,0x00011d59,
+0x00022329,0x1e0061d1,0x00011359,0x0002226b,0x00021516,0x00012241,
+0x000118bd,0x00022271,0x1e00578d,0x0002227a,0x000113e1,0x1e006061,
+0x2100b5f0,0x4604b087,0xf44f4b70,0x479870be,0x28004605,0x81bdf000,
+0xf44f2100,0xf7d772be,0xf640fa29,0xf44f108a,0x80e8539b,0x4050f241,
+0x8168812b,0x53a4f241,0x6044f241,0x81ab602c,0x462e81e8,0x2100462a,
+0xf44f186b,0x82186080,0x76932350,0x231d3102,0x320177d3,0xd1f3290a,
+0xf8852308,0x3b013024,0x3025f885,0x3026f885,0xf8852303,0xf06f3027,
+0xf8850301,0xf8853029,0xf885302a,0xf885302b,0xf06f302c,0x24000305,
+0x3036f885,0x3037f885,0x3038f885,0x3039f885,0x303af885,0x303bf885,
+0x303cf885,0x303df885,0x303ef885,0x030df06f,0x4028f885,0x402df885,
+0x402ef885,0x402ff885,0x4030f885,0x4031f885,0x4032f885,0x4033f885,
+0x4034f885,0x4035f885,0x303ff885,0x3040f885,0x3041f885,0x3042f885,
+0x3043f885,0x3044f885,0x0048f105,0x3045f885,0x0124f105,0x3046f885,
+0x3047f885,0xf7d72224,0x1c63f9d1,0xb2dc2200,0x206cf886,0x207bf886,
+0x2c0f3601,0x18abd1f5,0x24003201,0xf8832ae1,0xd1f8408a,0xf8852328,
+0x2324316b,0x316cf885,0x70b8f505,0xf5052320,0xf88571b4,0xf885316d,
+0xf885316e,0xf885316f,0x30013170,0x22063103,0xf9a8f7d7,0x46274e1a,
+0x23124819,0x0003fb07,0xf88cf7d9,0xd0362800,0x8a347bf2,0x7bb32a01,
+0x2b03d11c,0x2b05d010,0x2b02d002,0xe011d00c,0x460a2100,0x47984b0f,
+0xf821a906,0x22020d02,0xf7d71928,0xe01ef987,0x460a2100,0x47984b09,
+0xe0185528,0xf2404808,0xe01231ed,0x2b013b02,0x1929d80c,0xfbeaf7e9,
+0x46c0e00d,0x1e00578d,0x000284a8,0x1e0037cd,0x00022844,0xf44f486e,
+0xf7d6717f,0x3701f881,0x2f223612,0xf895d1bc,0x486a3020,0x3021f885,
+0x3022f885,0x3023f885,0xf844f7d9,0x2210b1b0,0x0106f10d,0xfbc6f7e9,
+0xd10f2804,0x3006f89d,0x3143f885,0x3007f89d,0x3147f885,0x3008f89d,
+0x314bf885,0x3009f89d,0x314ff885,0xf7d9485a,0xb190f829,0xf10d2210,
+0xf7e90106,0x2803fbab,0xf89dd10b,0xf8853006,0xf89d3093,0xf8853007,
+0xf89d3097,0xf8853008,0x4850309b,0xf812f7d9,0x2210b330,0x0106f10d,
+0xfb94f7e9,0xd11f2808,0x3006f89d,0x30adf885,0x3007f89d,0x30aff885,
+0x3008f89d,0x30b1f885,0x3009f89d,0x30b3f885,0x300af89d,0x30b5f885,
+0x300bf89d,0x30b7f885,0x300cf89d,0x30b9f885,0x300df89d,0x30bbf885,
+0xf7d8483b,0xb1b0ffe7,0xf10d2210,0xf7e90106,0x2804fb69,0xf89dd10f,
+0xf8853006,0xf89d30bf,0xf8853007,0xf89d30c3,0xf8853008,0xf89d30c7,
+0xf8853009,0x482f30cb,0xffccf7d8,0x2210b390,0x0106f10d,0xfb4ef7e9,
+0xd12b280b,0x3006f89d,0x30eff885,0x3007f89d,0x30f3f885,0x3008f89d,
+0x30f7f885,0x3009f89d,0x30fbf885,0x300af89d,0x30fff885,0x300bf89d,
+0x3103f885,0x300cf89d,0x3107f885,0x300df89d,0x310bf885,0x300ef89d,
+0x310ff885,0x300ff89d,0x3113f885,0x3010f89d,0x3117f885,0xf7d84814,
+0xb1b0ff95,0xf10d2210,0xf7e90106,0x2804fb17,0xf89dd10f,0xf8853006,
+0xf89d3120,0xf8853007,0xf89d3124,0xf8853008,0xf89d3128,0xf8853009,
+0x4628312c,0xbdf0b007,0x00022844,0x00022850,0x00022859,0x00022862,
+0x0002286b,0x00022874,0x0002287e,0x4ff0e92d,0x21004688,0x4607b089,
+0x68804691,0x469b460a,0xfbccf7d6,0x0f08f010,0xd00a4605,0x681c9b12,
+0x4658b13c,0xf7fa6a21,0x6d23fda3,0x65233301,0xf44fe1d0,0x2100509e,
+0x47984bb3,0x28004606,0x81d0f000,0xf44f2100,0xf7d7529e,0xf50bf837,
+0xf8c663e8,0x6433b03c,0x64779b12,0x23016173,0x0f02f1b9,0x8048f8c6,
+0x3037f886,0xf015d105,0xbf1c0f01,0x5300f44f,0x6a316233,0xf7fa4658,
+0x6cb3fd77,0x33e0f8b3,0xf3c3b29b,0xf0032103,0x0b1b020f,0x61b12902,
+0x627361f2,0x2904d906,0x2905d004,0x2906d002,0x819ef040,0x4b972101,
+0x47984630,0x46302101,0xffe6f7e9,0x24016cb3,0x43f6f8a3,0x33f8f8b3,
+0xea404625,0xf3c04003,0xb29a330f,0xf2428533,0x0f000363,0xf886429a,
+0xf040002a,0x21008181,0xf7e94630,0x4630fb79,0xfd2cf7fb,0xf8c6233c,
+0x23143d88,0xf886220a,0xf2413030,0x54f213c4,0x2203191b,0x54f22100,
+0x0308f04f,0x1d8cf8c6,0x4054f886,0x3d96f8a6,0x426cf886,0x31011872,
+0x292d237f,0x31c9f882,0x313cf882,0xf04fd1f6,0xf8a633ff,0x6c73324e,
+0x3388f8d3,0x3f80f413,0x2301d104,0x3033f886,0x3d28f886,0x68986c73,
+0xfcc2f7f9,0x737af44f,0xf2f3fbb0,0x0313fb02,0x0dc8f8c6,0x4868b123,
+0x01fcf242,0xfedcf7d5,0xf8c62400,0x6bf04f78,0xf7da6c77,0x2802fb8b,
+0x810af040,0x68f84961,0xff3af7d6,0x0f59f886,0x68f8495f,0xff34f7d6,
+0x0f5cf886,0x68f8495d,0xff2ef7d6,0x0f5df886,0x68f8495b,0xff28f7d6,
+0x0f5ef886,0x68f84959,0xff22f7d6,0x0f5ff886,0x68f84957,0xff1cf7d6,
+0x0f60f886,0x68f84955,0xff16f7d6,0x0f61f886,0x68f84953,0xff10f7d6,
+0x0f62f886,0x68f84951,0xff0af7d6,0x0f63f886,0x68f8494f,0xff04f7d6,
+0x0f64f886,0x68f8494d,0xfefef7d6,0x0f65f886,0x68f8494b,0xfef8f7d6,
+0x0f66f886,0x494968f8,0xfef2f7d6,0xfa80fa5f,0xf98afa5f,0x9084f886,
+0x464346a0,0x4a442120,0x4d444668,0x68f847a8,0xf7d64669,0xeb06fee1,
+0xf1080348,0xf1b80801,0xf8a30f03,0xd1ec0060,0x0800f04f,0x0303f108,
+0x4a392120,0x4d394668,0x68f847a8,0xf7d64669,0xeb06fecb,0xf1080348,
+0xf1b80801,0xf8a30f03,0xd1eb0066,0x0800f04f,0x0306f108,0x4a2e2120,
+0x4d2e4668,0x68f847a8,0xf7d64669,0xeb06feb5,0xf1080348,0xf1b80801,
+0xf8a30f03,0xd1eb006c,0x492768f8,0xfe80f7d6,0x28004604,0x2100d04e,
+0x4b24460a,0xfa4f4798,0xb280f58a,0x19322400,0x030ff000,0xeba53401,
+0x09000343,0xf8822c04,0xd1f43088,0x491c68f8,0xf7d6b2ed,0x1932fe8d,
+0x030ff000,0xeba53401,0x09000343,0xf8822c0c,0xd1f43088,0x46c0e04c,
+0x1e00578d,0x0001ea19,0x0002299e,0x000229a8,0x000229ae,0x000229b4,
+0x000229bb,0x000229c5,0x000229cf,0x000229d9,0x000229e8,0x000229f7,
+0x00022a06,0x00022a14,0x00022a22,0x00022a30,0x00022a3a,0x1e003fc9,
+0x00022a41,0x1e0037cd,0x00022a47,0x492768f8,0xfe2af7d6,0x4621b120,
+0x4b254622,0xb2c04798,0x9088f886,0x9089f886,0x908af886,0x908bf886,
+0xebc02204,0xb2d90309,0x320118b3,0xf8832a0c,0xd1f61088,0x320118b3,
+0xf8832a14,0xd1f91088,0x4c186d33,0x65333301,0xf8db6973,0x681b073c,
+0x64f34915,0x46329b12,0x4b14601e,0x460447a0,0x0c24f8c6,0x6c73b940,
+0x6c984631,0x529ef44f,0x47984b0f,0xe00e4620,0xf1064630,0x22140118,
+0xfe8cf7d6,0xe0064630,0x46316cb8,0x529ef44f,0x47984b07,0xb0092000,
+0x8ff0e8bd,0x00022a4e,0x1e0037cd,0x1e0061d1,0x00014171,0x00022a52,
+0x1e005c15,0x2100b530,0x4605b085,0x20244b0f,0x46044798,0x2100b1b8,
+0xf7d62224,0x230ffe47,0x332d6063,0x333c60a3,0x230360e3,0x4b086123,
+0x93004628,0x49084b07,0x4b089301,0x93024a08,0xf7fe462b,0x4620fb39,
+0xbd30b005,0x1e00578d,0x0001877d,0x00018b19,0x00022900,0x00026279,
+0x00022a5b,0x2100b5f0,0x4605b085,0x20504b27,0x46074798,0x4604b908,
+0x2100e044,0x26002250,0xf7d64604,0x603dfe13,0x4628607d,0x71def44f,
+0x4b204a1f,0x97019600,0xf954f7fc,0x60b842b0,0x4b1ddb2a,0x93009601,
+0x68789602,0x4a1c491b,0xf7fe463b,0xb9f8fb01,0x647b231e,0x33fff04f,
+0x304ef887,0xf887330d,0x2302303f,0xf8872201,0x33083041,0x203df887,
+0x203ef887,0xf88764ba,0x32033042,0xf8872305,0xf8842040,0xf8870043,
+0xf887204d,0xe005304c,0x46396ca8,0x4b092250,0x24004798,0xb0054620,
+0x46c0bdf0,0x1e00578d,0x00018f11,0x00018f15,0x0001b4b5,0x00022b64,
+0x00022b4c,0x1e005c15,0x47ffe92d,0x56bcf240,0x46894680,0x21004630,
+0x46924b30,0x46054798,0xd0562800,0x46322100,0xfdb0f7d6,0x33fff04f,
+0xf04f61ab,0xf8a50314,0xf04f3208,0xf8a50328,0xf04f3206,0xf8a5032d,
+0xf04f3204,0x270003fa,0x320af8a5,0xf8852302,0x4921320c,0x4b21462a,
+0x616e4c21,0x8010f8c5,0xf88570af,0x4648720d,0x230547a0,0x710ef505,
+0x723bf505,0x321cf8c5,0xbf0c42b8,0x34fff04f,0x3337463c,0x01f8f8c5,
+0x1218f8c5,0x2228f8c5,0x322cf8c5,0x1214f8c5,0x2224f8c5,0x4b11b97c,
+0x93024640,0x4a104621,0x9400462b,0xf7fe9401,0xb150fa6f,0xf8d54648,
+0x4b0c11f8,0x46294798,0x46324650,0x47984b0a,0x4628463d,0xe8bdb004,
+0x46c087f0,0x1e00578d,0x0001b669,0x00022beb,0x1e0061d1,0x00026e1d,
+0x00022bdb,0x1e0061e9,0x1e005c15,0x2100b570,0x4b084605,0x479820cc,
+0xb1404604,0x22cc2100,0xfd3cf7d6,0x7320f44f,0x50c8f8c4,0x46206223,
+0x46c0bd70,0x1e00578d,0x0360bc01,0x034e1000,0xf002debf,0xa803580a,
+0x00f0025e,0x5ea6030a,0x0a00f002,0x535e8202,0x020a0000,0x00af5e85,
+0x88020a00,0x0000b3de,0x8084020a,0x0a0000c3,0xff63bc01,0x0040f01f,
+0xf002de00,0x01000000,0x00f0025e,0x60800100,0x6c900d02,0x025e5903,
+0x030d00f0,0xf0025ed8,0xd8030e00,0x00f002de,0x0004020f,0x120000bf,
+0x23450102,0x01120000,0x000360bc,0x01021511,0x00002345,0x42000215,
+0x1900001f,0x025e0200,0x02d30bf0,0x00b3de01,0x6b001900,0x20d36444,
+0xc585021a,0x19000023,0x025e0200,0x019b0bf0,0xf502e089,0x0102ac97,
+0x000023c5,0xe088011c,0xac97f502,0x8361bc01,0x00291100,0x007b00b0,
+0xbc012b11,0x11000363,0x5e120323,0x1c09f002,0x025e9703,0x028509f0,
+0x00b38101,0x85022f00,0x000023c5,0x8187022f,0x280000b3,0x02dea303,
+0x032f00f0,0xf002dea0,0x02002f00,0x09f0025e,0xe0870175,0x6c800d04,
+0x6444e000,0x00bdb70d,0xf766446b,0xbc0129a0,0x97010360,0x60bc0180,
+0x81370003,0x6b60bc01,0x018a5000,0x060360bc,0xbf039237,0x01f002de,
+0x5ed003ee,0x3302f002,0x02ded003,0x03fb03f0,0xf002ded5,0x9103df08,
+0x04f0025e,0xde96036c,0xda08f002,0x025e0200,0x02c10bf0,0x0073c188,
+0xc4035400,0x05f0025e,0x5ec703bf,0xd905f002,0x02dedc03,0x03670df0,
+0xf0025eaa,0x83032006,0x07f0025e,0xde910328,0xe104f002,0x02dec203,
+0x014e09f0,0x020360bc,0x02003e00,0x0ef0025e,0xde0603a5,0x4100f002,
+0x025e2303,0x021509f0,0x0037c087,0xd4031509,0x05f002de,0xde230352,
+0x4600f002,0x025edb03,0x034500f0,0xf002debf,0x02000200,0x0cf0025e,
+0x5e02008c,0xa00cf002,0x025ea203,0x035100f0,0xf0025e56,0x86014f00,
+0x10090660,0x5e1f0348,0x4f00f002,0x235e6a00,0x004e0000,0x002700b0,
+0xe8008817,0x3700235e,0x5ea60388,0xa400f002,0x0e602800,0x03c5e008,
+0xf002dec4,0x2000ab09,0x200003c2,0xdebf03d5,0x1801f002,0x025e8103,
+0x035600f0,0xf002de00,0x88013600,0x900b02e0,0xdebf035c,0x2102f002,
+0x63408702,0x01580000,0xf4066086,0x86021830,0x00006340,0x5eb0005a,
+0xa1170087,0x02de0200,0x020000f0,0x00634087,0xb0005d00,0x10008b5e,
+0xe0860119,0x1830f406,0xafde8102,0x02620000,0x0063c086,0xb0006100,
+0x1700875e,0xde0200a1,0x0000f002,0x0360bc01,0x02068002,0x0007de80,
+0xda016e00,0x17f00260,0x5e080280,0x7e000007,0x0360bc01,0x00a1171e,
+0xf4025ee0,0xbc016530,0x171c0360,0x5ee000a1,0x6430f402,0x0360bc01,
+0x038d2600,0xf002debf,0x10018400,0x1700035e,0x5e8800a1,0xa2370087,
+0x865ee000,0x00a157f4,0xf45a01e0,0x86026330,0x0000c300,0x56b00077,
+0x6210000b,0x0354b000,0x01621000,0x000360bc,0xbf038d26,0x00f002de,
+0x41b00086,0x6210008f,0x03de0901,0x00a11700,0x00875e88,0xe000a157,
+0x37d4845e,0x5ee000a1,0x06c00387,0x0360bc01,0x038d4600,0xf002debf,
+0xbc018600,0x17020760,0x5ee000a1,0x6530f402,0x0760bc01,0x00a11700,
+0xf4025ee0,0xbc016430,0x00180360,0x60bc0106,0x8d060003,0x035ab000,
+0x00621000,0x000358b0,0x05016310,0x17004301,0x008800a1,0x0620f41a,
+0x02de0200,0x000000f0,0x003340e8,0xb000a197,0x17000b40,0x5e6d00a3,
+0x8e60f486,0x8f5e9000,0x03a33700,0xf002debf,0x90008f00,0x3700875e,
+0x5ee000a3,0xa337008e,0x9741f001,0x00a11700,0xf486de6d,0x8702a260,
+0x000097c1,0x5a380196,0xa1170003,0x035a3c01,0x03a21700,0xf002debf,
+0x3c019800,0x1700035a,0x5a3801a1,0xa2170007,0x865e6800,0x009d80f4,
+0x008b5ed8,0xe100a237,0x50f49641,0xc1e10065,0x65300097,0x02debf03,
+0x009000f0,0x008b5ed8,0xe100a237,0x57f49641,0xdee100a1,0xa1370087,
+0x875ef001,0x00a11700,0xf486de6e,0xbc01a360,0xf71fff63,0xde0200a4,
+0x0000f002,0x8ee32000,0x02020009,0x00b35e81,0xa8030200,0x00f002de,
+0xde1e030a,0xab00f002,0x025e9f03,0x00ab00f0,0xf0025e02,0xbf03cc00,
+0x00f002de,0x41080202,0xa900001f,0x025e0200,0x007509f0,0x00ab00b0,
+0xb0008610,0x10006301,0x5e02008a,0x500bf002,0x0360bc01,0x00921704,
+0x003b00b0,0x90011d11,0x10090660,0xdea10348,0xc000f002,0x06e08101,
+0x01481009,0x000360bc,0xbc014290,0x11000360,0xde9e032d,0xc300f002,
+0x02608401,0x009497f2,0x001745b0,0xb0008f17,0x1700175e,0x44000290,
+0xbe00001f,0x02608501,0x01481009,0x00076081,0xf0014710,0x37000fde,
+0x44a000a1,0x4531f4b6,0x02de9e03,0x01c300f0,0x123761bc,0xbf0380b0,
+0x00f002de,0x61bc0102,0x80701027,0x02debf03,0x000200f0,0x0982e020,
+0x0c010200,0x170053de,0x5e8801a1,0x47100087,0x0360bc01,0x01425000,
+0x001f4108,0x8c01a117,0x97f286de,0xdebf0394,0x0200f002,0x0360bc01,
+0x00429000,0x00235ee8,0x69008837,0x000023de,0x00e800d0,0x88370027,
+0x02608601,0x00481009,0x009b0088,0x90002671,0xb1019b00,0x63bc0128,
+0x24110003,0x02de0200,0x030000f0,0xf0025edb,0x2000d500,0x00097ee0,
+0xc5310102,0xa117001b,0x875e6d00,0x020a8000,0x001fc283,0x04020200,
+0x0000bf00,0x5e9403e0,0x0200f002,0x8f42a000,0x0080f701,0x2d005e68,
+0x020002c0,0x09f0025e,0xdebf0375,0x0a00f002,0x8fc20102,0x01020000,
+0x00630014,0x6800a117,0x6000875e,0x5e020002,0x7509f002,0x0f609401,
+0x00180000,0xf0025e02,0xbf03e700,0x00f002de,0x0014010a,0xa1170063,
+0x875eb000,0x01a51000,0x191360bc,0x68006010,0x0000875e,0x41e000ee,
+0x60500683,0x875ee800,0x03a13700,0xf002debf,0x8002ea00,0x0000b350,
+0x608701f8,0xa0100304,0x6300b000,0x00b41000,0x00d342b0,0x88000018,
+0x30008341,0x60bc01b6,0xb5100a03,0x6300b000,0x03b4b000,0xf002de17,
+0x9703f500,0x00f002de,0x608001f6,0x2c948506,0x02de0200,0x000000f0,
+0x8012e020,0x87011741,0x10030460,0x000302a0,0xff0000c7,0x975eb000,
+0x00b51000,0x086300b0,0x8302b470,0x0000d342,0x00b000fe,0xb4100063,
+0x0360bc01,0x00b5100d,0x006300b0,0xbc01b4f0,0x10114760,0x00b000b6,
+0xb4100063,0x0360bc01,0x02b5d002,0x000b5007,0xbc011301,0xd0030360,
+0x608e01b5,0x9497f202,0x0b500402,0x020c0100,0x000bd004,0x86010c01,
+0x97f20660,0x42e00094,0xb5d000d7,0x0b50a000,0x00a11711,0x1187de68,
+0x86011201,0x97f206e0,0x42e00094,0xb55000d7,0x0bd00702,0x00120100,
+0x00d742e0,0xb000b590,0x1100d742,0x00b000e1,0xb4b00063,0x025ea903,
+0x031701f0,0xf002de17,0x97031501,0x01f002de,0xde020016,0x0000f002,
+0xab1a6800,0x001b0100,0xd564c46c,0xbc010a40,0x06000360,0x1a6800aa,
+0x1e0100a7,0x64c46c00,0x010a20d5,0x000360bc,0xa803a906,0x00f002de,
+0x5edb030a,0x2001f002,0xbee02000,0x03020009,0xf0025e90,0x00020a00,
+0x01001f42,0x6083012c,0x6c900d02,0xbf000402,0x03280100,0xf0025e14,
+0x6e002801,0x61805644,0x60bc0129,0x15110003,0x025e2203,0x012e01f0,
+0x00630014,0x8800a117,0x37f40660,0xc22000a1,0x6021f48e,0x02608201,
+0x03481009,0xf002debf,0xb0000200,0x17007f01,0xde9e03a6,0x3401f002,
+0x02de3803,0x003501f0,0x048f4220,0x94010200,0x00001760,0xdebf0318,
+0x6001f002,0x025e1f03,0x024101f0,0x00c30003,0x20003701,0x01028fc2,
+0x5e25033b,0x4101f002,0x8fc22000,0x003b0102,0xff538168,0xbf030ae0,
+0x01f002de,0x6094013d,0x18000013,0x02debf03,0x036001f0,0xf002de9e,
+0x68004001,0xc10b98de,0x41010240,0xaf0a001f,0x02608501,0x00481009,
+0x0b985e68,0x690045c1,0x61009f5e,0x42980265,0x4501008f,0x02debf03,
+0x026501f0,0x001f4101,0x0402af0a,0x0100bf00,0x5e020050,0xe00cf002,
+0x025e0200,0x00020df0,0x00bb8568,0x84014c01,0x77f50660,0xdebf03ab,
+0xaf0af002,0x87059401,0x02180000,0x00af5e87,0x84016001,0x77f50260,
+0xdebf03ab,0x6001f002,0x9b140002,0x02590100,0x002b1600,0xb0005c01,
+0x17003714,0xde6800a1,0x5921ae84,0x3b14b000,0x00a11700,0xae84de68,
+0xb0005941,0x17003f14,0xde6800a1,0x5961ae84,0x87149e02,0x025c0100,
+0x008fc201,0x94015e01,0x00000f60,0xdebf0318,0x6001f002,0x8fc20102,
+0x015e0100,0x0d066080,0x00026c90,0x0a008fc2,0x609401af,0x18000007,
+0x025e0200,0x02e700f0,0x00bf0004,0x85029401,0x01006300,0x60830194,
+0x6c900d06,0x02debf03,0x019401f0,0x180360bc,0xb0006010,0x10007b01,
+0x00680065,0x6d0100eb,0x135a8800,0x00a11701,0xf46644e8,0x6e00a137,
+0x410784de,0x02e0006d,0xa620009b,0x02debf03,0x014b05f0,0x09126090,
+0x94014810,0x00001f60,0x5a080118,0x8117000f,0x065e8801,0x010a5481,
+0x000f5a34,0x02008017,0x00f0025e,0x01b00064,0x6510007b,0x2356b000,
+0x00a11700,0xa0865ee0,0xe800a197,0xf400845e,0x5ee80003,0x16f40084,
+0x035ab000,0x00131400,0x00075ab0,0xb0001414,0x14000b5a,0xde680015,
+0x85410007,0x9700e800,0x01a15700,0xf0865ebc,0x7c011b14,0xf400875e,
+0x1ab0001c,0x81170037,0x025e0200,0x00780bf0,0x007b01b0,0x08016510,
+0x17000f5a,0x5eb00081,0x1e140087,0x02debf03,0x008801f0,0x001756b0,
+0xb0001b14,0x14001b56,0x54b0001c,0x1e140013,0x1350b000,0x00861000,
+0x00a7006d,0x90018e81,0x10006301,0x41b0008a,0x6210008f,0x025e0200,
+0x004e0df0,0x002b42b0,0xbc010614,0x17180360,0xc16d00a1,0x9101208c,
+0x0360bc01,0x00a19702,0x03845ee0,0xe000a177,0x11b0865e,0xdebf031d,
+0xe701f002,0xc7000302,0x02a40100,0x0003d00c,0x1401a401,0x17006300,
+0x008502a1,0xa4010063,0x87de8000,0x01a2d701,0x1e1760bc,0xe000a297,
+0xb00d8a5e,0xde800065,0xa2b70087,0x0f60bc01,0x00a2971c,0x0d8a5ee0,
+0xb00064b0,0x14009741,0x41b0002e,0x2f140093,0x13d86800,0x02b40100,
+0x00135a00,0x8001a601,0xf4840660,0xdebf0327,0x7c04f002,0x03d00102,
+0x00a60100,0x009b50b0,0x81022b14,0x0200b7d0,0xd0060208,0xad010003,
+0x8650e900,0x00a13723,0x238ad0e8,0x6900a257,0x01008bde,0x609101ad,
+0x27f48416,0x02debf03,0x010b02f0,0x0003d00b,0x3c01a117,0x17002b50,
+0x5e8c01a2,0xa157f486,0x43014801,0x00a21700,0xf4865e68,0x9101b441,
+0xf4841260,0xdebf0327,0x0b02f002,0x0360bc01,0x00a51700,0xf0025e02,
+0xb000f900,0x10001350,0x50b00086,0x8a100017,0x03d00c02,0x02c10100,
+0x00c70003,0xb000be01,0x14009b50,0x5e02002b,0xfa0df002,0x46426d00,
+0x030a80c0,0xf002debf,0x6d00bf01,0x80844a42,0x5006010a,0xa1170007,
+0x86de8201,0x032db485,0xf0025ea2,0x2000d201,0x010403d0,0x50b000c7,
+0xf211004f,0x5350b000,0x00f31100,0x005750b0,0xbc01f411,0x91000360,
+0x010102f0,0xc90100b3,0x06e08701,0x02ab77f5,0x00035006,0x0702ce01,
+0x0100afde,0xde0002ce,0xd20100b3,0x331ae800,0x03425100,0xf002debf,
+0x8102d201,0x03000350,0xd00202e5,0xd10100b7,0x2b500802,0x02d20100,
+0x0003d085,0x9001f703,0xb4851260,0x5ea2032d,0xdf01f002,0x0f50b000,
+0x02161100,0x00b7d002,0xb000d701,0x11005b50,0xd0820216,0xdf010003,
+0xc3478102,0x02d80100,0x004f5080,0x2000dd01,0x813fc747,0xc72000df,
+0x0ac200db,0x02debf03,0x03df01f0,0xf0025ea5,0x8002df01,0x0200dfc7,
+0x5088020a,0xee0100b7,0xb7d08202,0x01e70100,0x00275038,0x08018017,
+0x17001350,0x50020181,0xa1170013,0x865e8201,0x008137f0,0x007f50b0,
+0xbf038910,0x01f002de,0x503801ed,0x8017006f,0x2b500801,0x01811700,
+0x0007d006,0x8201a117,0x37f0865e,0x50b00081,0x8a10001b,0x8350b000,
+0x01891000,0x000b5029,0x02009217,0x00f0025e,0x5e020064,0x4b0bf002,
+0x1b420201,0x01811700,0xd1045e82,0x020081b7,0x0bf0025e,0x5ee00078,
+0xa1170184,0x87ded901,0x02831000,0x00b30100,0xe001f701,0x1000b701,
+0x00040283,0xfa0100bf,0x03508702,0x03fa0100,0xf0025e94,0x2203fb01,
+0x01f0025e,0x61bc01fd,0x80300003,0x02debf03,0x010200f0,0x033361bc,
+0x2b0391b7,0x02f0025e,0x00900003,0xa1970063,0x8264e000,0x006530f4,
+0x00135a6e,0x88010322,0x37f206e0,0xde680091,0x0582024b,0x3761bc01,
+0x0091b703,0x044bde68,0xbc010782,0xb703bb61,0xdebf0391,0x0e02f002,
+0x0e609101,0x0327f484,0xf002debf,0x91010b02,0xf4840660,0x60bc0127,
+0xb4100003,0x06e08101,0x032db485,0xf002debf,0x68007c04,0x82044b5e,
+0xdec40329,0xab09f002,0x03500602,0x02190200,0x00afde07,0xbc011902,
+0x37000361,0x50070291,0x15020003,0x0362bc01,0x0291f700,0x00b3de00,
+0xbc011702,0x77000361,0x01e00091,0x4220000b,0x02debf03,0x011a02f0,
+0x000360bc,0xb0004220,0x1000475e,0x01000280,0x200200b3,0x06608201,
+0x02813010,0x00b38101,0xbc012002,0xb7050360,0xdebf0393,0x7a05f002,
+0x17c56800,0x03020000,0xf002de80,0x81032602,0x02f0025e,0xe0880125,
+0x5c900b0e,0x02debf03,0x030200f0,0xf0025ed0,0xbc013302,0x11000360,
+0x5e02002d,0x830bf002,0x02debf03,0x000200f0,0x0017c568,0x1e013102,
+0x17009f50,0x5e8800a1,0xa237f40e,0x06608800,0x00a137f4,0x00875ee8,
+0xb000a137,0x57f4865e,0x5ea000a1,0xa197f086,0xb644a000,0x004531f4,
+0x00475eb0,0xbf038010,0x00f002de,0x80070202,0x360200bf,0x331ab000,
+0x03421100,0xf0025ec4,0xbc013602,0x90000360,0x41a80004,0x48103023,
+0x0f62bc01,0x01e01100,0xf5026081,0x8701aed7,0x77f502e0,0x816800ab,
+0x3d22000b,0x6744b000,0x01430000,0x0906e082,0x81014810,0x900d0260,
+0x6082016c,0x44912806,0x02e08801,0x015c900b,0x000360bc,0xbc018510,
+0x10000360,0x5e2903b8,0x4602f002,0x02e0d201,0x03849010,0xf002debf,
+0xbc01e802,0x10000360,0x01e00084,0x702000c3,0xb3818102,0x035d0200,
+0xf002de20,0x81017202,0xb7f50660,0xde6800ad,0x5da2044b,0xbbde0302,
+0x004f0200,0x000b26e0,0xbf036510,0x02f002de,0x60bc0150,0x6590101b,
+0x7f5ea000,0x00ec10fe,0x00035ab0,0xb000ed10,0x1000075a,0x5ab000ee,
+0xef10000b,0x0f5ab000,0x01f01000,0x1ee363bc,0xbc0184f0,0x30000360,
+0x60bc0185,0xb4100003,0x0360bc01,0x01a6d001,0x040360bc,0xbc01b550,
+0xd0042360,0x02e000b4,0xab2000af,0x02debf03,0x01b602f0,0x1f0360bc,
+0x030184f0,0x170053de,0x5e8601a2,0xe3701c8a,0x93c36a00,0x00690200,
+0x009043e8,0x0202e4d0,0x02001b42,0x00900067,0xa137001b,0x1b422000,
+0x00664200,0x00871ab0,0xe000a117,0x30f49243,0xc36900e4,0x69020093,
+0x0360bc01,0x01e41000,0x000360bc,0xbc01b410,0x10000360,0x60bc01a6,
+0xb5100203,0x2360bc01,0x00b4d004,0x064b5e68,0xe00070a2,0x2000cb01,
+0xdebf0372,0xb602f002,0xcf01e000,0x03732000,0xf002debf,0x2003b602,
+0x02f0025e,0xe08101bd,0x48100902,0xd701e000,0x03752000,0xf002de1e,
+0xbc019e02,0x17000360,0x5e6a00a2,0x7a020023,0x8f420201,0x01a21700,
+0x098a5e85,0x80014810,0x301006e0,0xde840281,0x7e020053,0x1360bc01,
+0x03a1570d,0xf002debf,0xbc017f02,0x570d0360,0x006800a1,0x9e020027,
+0x845ee000,0x01a1f701,0x101b60bc,0x88006510,0x30009741,0x60bc01b6,
+0xb4100003,0x875e9000,0x01a65000,0x010360bc,0xbc01b510,0xb0002360,
+0xde1703b4,0x8702f002,0x02de9703,0x008802f0,0x0087de20,0x20009142,
+0x220087de,0x5eb8018e,0x8016d022,0x8a5e8001,0x038136d0,0xf002debf,
+0xbc019702,0x16d0225e,0x5e840180,0x8136d08a,0x02debf03,0x009702f0,
+0x0087de20,0xb8019522,0x36d0225e,0x5e800181,0x8256d08a,0x02debf03,
+0x019702f0,0xd0225ebc,0x84018136,0x56d08a5e,0x60880182,0xa830f402,
+0x035ab000,0x00b01000,0x00075ab0,0x8002b110,0x0200a342,0x42e0009a,
+0xa89000a3,0x0b5ab000,0x00b01000,0x000f5ab0,0x8701b110,0x90100660,
+0x5ee00084,0x89370027,0x275eda01,0x01ee1000,0x000360bc,0xbc01b410,
+0x50030360,0x00b000a6,0xb5100033,0x53de8402,0x01a70200,0x030760bc,
+0xb000a650,0x10003700,0x60bc01b5,0xb4d00423,0x06608401,0x019497f2,
+0x09026086,0x9e034810,0x02f002de,0x448002b1,0xb402001f,0x3f5eb000,
+0x01451100,0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,0x9017000f,
+0x02debf03,0x00b402f0,0x000f5eb0,0x80028517,0x02001f44,0x44a000b4,
+0x45b1f0b6,0x0360bc01,0x01421001,0xf2066083,0x84019497,0x11000760,
+0x5ea003e0,0xb203f002,0xaf5e0602,0x01b40300,0xf506e086,0xbc01ab77,
+0x10000360,0x5e020080,0x7b09f002,0x02debf03,0x03e104f0,0xf0025ea1,
+0x81011303,0xd7f50660,0x602000ae,0xd6a2850e,0x04608701,0x00a01003,
+0x006300b0,0xbc01b410,0x100a0360,0x00b000b5,0xb4f00063,0xb7d00202,
+0x00ca0200,0x005f50b0,0xb000e010,0x10006350,0x50b000e1,0xe2100067,
+0x6b50b000,0x00e41000,0x021342b0,0x000284f0,0x0200b750,0x00b000d1,
+0xb4100063,0x0360bc01,0x00b51002,0x046300b0,0x8401b4d0,0x11000760,
+0x60bc01e0,0x8e170003,0x02debf03,0x00b803f0,0x00c701e0,0xb0007120,
+0x10006300,0x60bc01b4,0xb5d00203,0x6300b000,0x03b4d004,0xf002debf,
+0x03014303,0x17000350,0x5eb800a1,0xa1370087,0x865e8701,0x02801010,
+0x0003d00c,0x03021203,0x0200c700,0x60bc01dd,0xb2170003,0x27503801,
+0x02a31700,0x00b7d002,0xb000e802,0x17001323,0x50b801a1,0xe030f46e,
+0x7350b000,0x01a11700,0xf41623b8,0x8501e130,0x301c06e0,0x42b000e1,
+0x84700013,0x6f503801,0x02a31700,0x00134282,0xb000e802,0x10007b50,
+0x42b000e4,0x84100213,0x04608701,0x01a01003,0x00735038,0x7c01a117,
+0x37f46e50,0x5e8800a1,0xb9900087,0xc7000302,0x00fb0200,0x00cbde68,
+0xb000f702,0x1000bb50,0x5abc0165,0xe070f406,0x075a3c01,0x01a21700,
+0xf43e60bc,0xb000e150,0x70001342,0x5ab00084,0x8309000b,0x2360bc01,
+0x00b85001,0x000f2668,0xbf030323,0x03f002de,0x60bc0107,0xb8700103,
+0x0f266800,0x01032300,0x010360bc,0xbf03b870,0x03f002de,0xd00c0107,
+0xa1170003,0x025ea903,0x010003f0,0x012360bc,0x6800b850,0x6300875e,
+0xdebf0303,0x0703f002,0x0360bc01,0x00b87001,0x00875e68,0xbc010743,
+0x70010360,0x000302b8,0x050300c7,0x6750bc02,0x01060300,0x1702e081,
+0xbc01b810,0xf0000360,0x000302a5,0x0b0300c7,0xcb5eb000,0x00b51000,
+0x086300b0,0x8302b470,0x0300d342,0x60bc010a,0xb5100d03,0x6300b000,
+0x00b41000,0x006300b0,0xb000b4f0,0x1800d342,0x60880100,0xb4100308,
+0x06608101,0x036c900d,0xf002debf,0x02024303,0x0300b7d0,0x50b00019,
+0xe010006f,0x7350b000,0x00e11000,0x007750b0,0x8202e210,0x03001342,
+0x50b00018,0xe410007b,0x1342b000,0x0084f002,0x009f5ee0,0xa103a737,
+0x03f0025e,0x60bc0122,0xa7170003,0x04608701,0x00a01003,0x006300b0,
+0xbc01b410,0x100d0360,0x00b000b5,0xb4f00063,0x08608801,0x03b41003,
+0xf002debf,0xb0003803,0x10007b01,0x5ab00065,0xe5100003,0xff63bc01,
+0x00c5f01f,0x00075ab0,0xbc01e610,0xf01fff63,0x5ab000c6,0xe710000b,
+0xff63bc01,0x00c7f01f,0x003b9a68,0xe0002b03,0x3700275e,0x1a680089,
+0x2f03003b,0x07e08501,0x01e31000,0x0007e085,0xb000c310,0x10011342,
+0x5eda0184,0xee100027,0x06608701,0x00849010,0x1c1342b0,0xbc018410,
+0x10000360,0x60bc01b4,0xa6501303,0x9700b000,0x01b51000,0x042360bc,
+0x8401b4d0,0x11000760,0xdebf03e0,0xa303f002,0x4b5e0801,0x00a11700,
+0x00875e68,0x02024323,0x03000350,0x509e0242,0x3f03009f,0x03d00102,
+0x003f0300,0x00275ee0,0x58018937,0x1400275e,0x50da0129,0xee1000a7,
+0x06608701,0x03849010,0xf002debf,0xbc014303,0x14000360,0xc1040129,
+0xa1170007,0x025e2203,0x014603f0,0x0053de03,0xb000a117,0x1700875e,
+0x5e8802a2,0x4a03004b,0x4b5e6800,0x014a8306,0x000360bc,0x8301a217,
+0x97f286de,0xde830194,0x27f48486,0x13c28102,0x01510300,0x008b5e86,
+0x8601e310,0x10000760,0xe08101c3,0x84901006,0x02debf03,0x015303f0,
+0x1c8a5e86,0x8601e370,0x70180660,0x47b802c3,0x8c0300a7,0xb3de0002,
+0x01570300,0x1c06e087,0x8701e370,0x701806e0,0x5e0801c3,0xa117004b,
+0x875e6800,0x029a2300,0x009f501e,0x85015c03,0x701c06e0,0xe08501e3,
+0xc3701806,0x63001401,0x00a11700,0x0087de68,0xb0006583,0x17005301,
+0xde6800a2,0x61e3ff8b,0x47426800,0x00622300,0x848ade68,0x850165c3,
+0x10090260,0xe0860148,0xe3701c02,0x06e08601,0x01c37018,0x00075010,
+0x6800a617,0x03009b5e,0x60bc019a,0xe4110003,0x07503a01,0x00801700,
+0x00035e88,0xe0008077,0x10f0ae00,0xde680064,0x7643009b,0x03d00702,
+0x01700300,0x182360bc,0xe000a2f7,0x370b005e,0x5e0200a3,0x050cf002,
+0x1b60bc01,0x0081d715,0x018341e0,0xe0006370,0xb0008f41,0x5e020065,
+0xda0bf002,0x1b60bc01,0x01649015,0x004760bc,0x0200a217,0x0cf0025e,
+0x5e68002d,0xa143009b,0x4660a401,0x00e071f4,0x009b5e68,0x68007e63,
+0xa3009b5e,0x50b0007e,0xe211002f,0x3350b000,0x03e21100,0xf002debf,
+0x0201a103,0x1700c780,0xde8701a1,0xe8113d86,0x02608701,0x00e8113d,
+0x009bde68,0x870183a3,0x113d0660,0x422000e8,0x8a43001b,0x0360bc01,
+0x02ea1100,0x002b5088,0xb0008803,0x11007750,0xdebf03eb,0x8a03f002,
+0x6f503c01,0x01a21700,0xf47250bc,0x9201eb51,0xb7001bc2,0x5eb801a2,
+0xe8113d8a,0xc7800202,0x01a10300,0x090360bc,0xb000ea11,0x11002f50,
+0x50b000eb,0xeb110033,0x3750b000,0x00eb1100,0x003b50b0,0xb000eb11,
+0x11003f50,0x50b000eb,0xeb110043,0x4750b000,0x00eb1100,0x004b50b0,
+0x8601eb11,0x113d0660,0x60bc01e8,0x65901823,0x025e0200,0x03470ef0,
+0xf002debf,0x8401a103,0x11000760,0xde9e03e0,0xa103f002,0x02de3803,
+0x00a103f0,0x044bde68,0x8401a183,0x97f20660,0x50000294,0xa103004f,
+0x06608501,0x01481009,0x000360bc,0xb0002d11,0x14008344,0x60bc0128,
+0x8e170003,0x4b5e6800,0x02a6a305,0x00035000,0x8301af03,0x100906e0,
+0x41b00048,0x00180023,0x0360bc01,0x038eb704,0xf0025ea9,0x6800b403,
+0x23044b5e,0x60bc01b4,0x8e370603,0x4b5e6800,0x01b4a305,0x060360bc,
+0xbf038eb7,0x03f002de,0x608101b4,0xab77f506,0x0f5eb000,0x00851700,
+0xf0025e02,0xbc01830b,0x17000360,0x60bc018c,0x8d170003,0x02de2303,
+0x01b803f0,0x1006e087,0x00028370,0x0300b3de,0x62bc01b8,0x83300003,
+0xa7006d00,0x03ca8300,0xf0025e29,0x0302e203,0x0300c700,0xd08202c6,
+0xbe0300b7,0xb318e000,0x032c2600,0xf002debf,0xe000bf03,0x2600b718,
+0x2668002d,0xc623000f,0xcb5ee000,0x01b23700,0x00cb5e0a,0xe000a117,
+0x30f4ba50,0x60d00065,0xa257f606,0x125a2000,0x03c643f4,0xf002debf,
+0xd503c003,0x08f002de,0xded603df,0xf408f002,0x02de5003,0x03c603f0,
+0xf002debf,0x6800fb03,0x0300a700,0x428802ce,0xce03001b,0x6744e000,
+0x03a11705,0xf002debf,0xe000cf03,0x17026744,0x5e9103a1,0x0200f002,
+0x66c46800,0x00cf23f4,0x00a70068,0x8002d803,0x03001b42,0x60bc01d6,
+0xa1370503,0x0360bc01,0x03659005,0xf002debf,0xbc01dc03,0x770f1360,
+0xdebf03a1,0xdb03f002,0x0360bc01,0x01a1770f,0x060360bc,0xbf036590,
+0x03f002de,0x60bc01dc,0x65100703,0x025e0200,0x005800f0,0x01075ad8,
+0x3c018116,0x1700035a,0x5eb801a1,0x8136d086,0x035ad800,0x01801601,
+0xd06640b8,0x05028016,0x0300af5e,0xe08701e4,0x33712606,0x02debf03,
+0x010200f0,0x850a6090,0x82022db4,0x0300b7d0,0x503c01ee,0x80170027,
+0x2b500901,0x01811700,0x00075007,0x8201a117,0x37f0865e,0x50b00081,
+0x8a10001f,0x0f50b000,0x03161100,0xf002debf,0x3801f403,0x17005f50,
+0x500a0180,0x8117002b,0x07d00701,0x01a11700,0xf0865e82,0xb0008137,
+0x10002350,0x50b0008a,0x1611005b,0xb7508002,0x01f90300,0x050360bc,
+0xbf0392b7,0x01f002de,0x609001d7,0x2db48506,0x02debf03,0x01e603f0,
+0x060360bc,0xbf039237,0x01f002de,0x608e01d7,0xe8113d02,0x025e2b03,
+0x020904f0,0x00f30000,0xe8000004,0x51002300,0x60bc0142,0x4251280a,
+0x025e9403,0x000504f0,0x008b05b0,0x68006410,0x04000358,0x44b00005,
+0x12110067,0x0358b000,0x00151100,0x001f4568,0xa2030904,0x04f0025e,
+0xe0850109,0xab77f506,0x025e0200,0x02b30cf0,0x00e3c201,0x03023604,
+0x0400c700,0x2668000e,0x1724000f,0x46426e00,0x031744f6,0xf002debf,
+0x6e001004,0x24004742,0x00030217,0x140400c7,0x02de1503,0x011004f0,
+0x85026080,0xbc012c94,0x17000360,0xded503a3,0xdf08f002,0x06e08101,
+0x012db485,0x840e6091,0xbf0327f4,0x04f002de,0x503c0136,0xa1170067,
+0x865ebc01,0x01ba5017,0x010360bc,0x0302b890,0x0400c700,0xa6680027,
+0x2124000f,0x02e08101,0x03b81017,0xf002ded5,0xd603df08,0x08f002de,
+0xde5003f4,0x1d04f002,0x02debf03,0x003604f0,0x000f26e8,0xb0008329,
+0x1000cb5e,0x00b000b5,0xb4700863,0xd3428302,0x00240400,0x00cb5eb0,
+0xbf03a517,0x04f002de,0xe0860128,0xa0100304,0x025e0200,0x00f000f0,
+0xf0025e02,0xd503f900,0x08f002de,0xded603df,0xf408f002,0x02de5003,
+0x022a04f0,0x00a34700,0xbc014102,0x11000360,0x508802ea,0x3204002b,
+0x7750b000,0x03eb1100,0xf002debf,0x3c013404,0x17006f50,0x50bc01a2,
+0xeb51f472,0xa347b000,0x03e8d100,0xf002debf,0xbc014102,0xf0000360,
+0xe08201a5,0x48100902,0x1f62bc01,0x01e01100,0x000f60bc,0x8502e811,
+0x04000b50,0x6082013c,0x48100902,0xb3818102,0x03430400,0xf002dea0,
+0xd5034104,0x08f002de,0xded603df,0xf408f002,0x025e2003,0x014304f0,
+0x09026088,0xbf034810,0x00f002de,0x60bc010a,0xa1370003,0xb3010002,
+0x02510400,0x00b30104,0xe9005004,0x2000bb01,0x81e8006e,0x6f0000bf,
+0xbb816800,0x00500400,0x00bf8168,0x81025004,0x0400b381,0x60bc014d,
+0x6c000003,0x02debf03,0x017c04f0,0x000360bc,0x02006c00,0x09f0025e,
+0xdebf033b,0x0a00f002,0x0360bc01,0x00a11700,0xf0025e02,0x0102900a,
+0x0400b301,0xdebf0354,0x0a00f002,0x1360bc01,0x00a17715,0xf0025e02,
+0x34015800,0x17006740,0x016d00a1,0x5924f49a,0x875eb000,0x00660000,
+0xf49e016e,0xb0005b24,0x0000875e,0xdea30367,0x0a00f002,0xb7500002,
+0x01640400,0x000360bc,0x82018010,0x10090660,0x60800148,0x2db48502,
+0x07c10401,0x01a11700,0xf286de83,0xe0009497,0x2000cb01,0xdebf0372,
+0x1801f002,0xb3010102,0x01660400,0xf506e087,0xb000ab77,0x17000b01,
+0xde6d00a1,0x7c040884,0x6444e800,0x00a17708,0x08845e6e,0x87017c24,
+0x77f506e0,0xdebf03ab,0x7c04f002,0xaf5e8202,0x01780400,0xf5066082,
+0xb000ab77,0x06006744,0x01b00098,0xa217006b,0x1b428002,0x00720400,
+0x004b01b0,0x6800a217,0x04008b5e,0x45900077,0xa197002b,0x86de8000,
+0x00a157f4,0x00b741b0,0xe000a117,0x2623865e,0x61bc01a9,0x33110003,
+0x6444e800,0x00a517d3,0x01975e6d,0x82013300,0x77f50260,0x5ed103ab,
+0x0200f002,0xb3500002,0x03d80400,0xf002de25,0x83018004,0xf4840660,
+0xdebf0327,0xb504f002,0x03d00c02,0x02b30400,0x00c70003,0x1401a204,
+0x17006300,0xde6d00a1,0xb3840087,0xbb50b000,0x00651000,0x00bf50b0,
+0x91026410,0x04009f50,0xd081028a,0x8a0400b7,0x025e2903,0x038b04f0,
+0xf002debf,0xbc019004,0x16000360,0x60bc0104,0x80370003,0x025e0200,
+0x03310ef0,0xf0025e29,0xb000b304,0x1400af50,0xdebf0326,0xb304f002,
+0x06608201,0x002db485,0x00135ab0,0xb0008d14,0x1400175a,0x18b0008e,
+0xa11700b3,0x0360bc01,0x012c0600,0xf4ba18bc,0xbc01a137,0x06000360,
+0x5eb0002e,0x8f140087,0xb718b000,0x01a11700,0x000360bc,0xbc012d06,
+0x37f4be18,0x60bc01a1,0x2f060003,0x875eb000,0x00901400,0x00f701b0,
+0xbc019014,0x00000360,0x5e02007d,0x310ef002,0x0f58b000,0x038c1400,
+0xf002debf,0x6800ae04,0x040047c2,0xe08101a7,0x2db48506,0x0e609101,
+0x0127f484,0x000360bc,0xbf032c14,0x00f002de,0x50b00002,0xa117009f,
+0x025e0200,0x00ef00f0,0x00875eb0,0x86012714,0x100304e0,0x42b000a0,
+0x00180083,0x03d00c01,0x00a11700,0x0087de68,0x0201a264,0x1700b750,
+0x5e8001a1,0x27f48486,0x0ee08a01,0x0027f484,0x00af50b0,0xbf032614,
+0x04f002de,0xe08601b5,0xa0100304,0x9f500002,0x01b50400,0x100360bc,
+0x86024210,0x040007c1,0x5e2903d5,0xbb04f002,0x3352b000,0x00291400,
+0x003752b0,0x9e01a117,0xf484865e,0x50b00027,0xa117009f,0x86de8001,
+0x00a137f4,0xf0025e02,0x0702d30b,0x0400bf80,0x608001c8,0x8f26f402,
+0x9b50b000,0x00900600,0x00a750b0,0xb0009106,0x0600ab50,0x50b00092,
+0x9306009b,0x6300b000,0x00950600,0x008341b0,0x80019406,0x97f50660,
+0xdebf03ac,0xd504f002,0xab50b000,0x008f1000,0x00a750b0,0xb0008e10,
+0x10009b50,0x6080018d,0x8c30f406,0xb7500202,0x00d40400,0x004352b0,
+0xb0008f10,0x10003f52,0x52b0008e,0x8d10003b,0x37521a01,0x01a11700,
+0x0487de98,0xb801a137,0xb091865e,0x6082018c,0x2db48502,0x02608101,
+0x036c900d,0xf002de25,0x9c01d804,0xf4840260,0xdebf0327,0xdc04f002,
+0x0360bc01,0x012c1400,0xf5026081,0x8502aed7,0x04000b50,0x50a800dc,
+0x2d1405b7,0x02608301,0x0127f484,0x0902e085,0xbc014810,0x14000360,
+0x5ea2032a,0x1801f002,0x02debf03,0x030a00f0,0xf002de23,0xa3032f05,
+0x05f0025e,0xdea2032f,0x2f05f002,0x06608101,0x03ab77f5,0xf0025eaa,
+0x83012f05,0x100902e0,0xde510348,0xec04f002,0xb3de8002,0x00320500,
+0x006b02e0,0x80019a20,0x77f506e0,0xdebf03ab,0xf104f002,0x02de0103,
+0x00ef04f0,0x064f5e68,0xbc01ef24,0x17000360,0x5ea403a8,0xf104f002,
+0x02dec103,0x013205f0,0x09026084,0x04024810,0x0400bf00,0x60bc01f6,
+0x15110003,0x63001401,0x00a11700,0xf40266e0,0x02006530,0x0bf0025e,
+0x6082018b,0x48100902,0x025ea903,0x001105f0,0x043b5e68,0xf00101a5,
+0x370017de,0x5ea00085,0x8597f016,0x3b5e6800,0x02012506,0x00035001,
+0x87020005,0x0500bf80,0xe0850100,0x48100906,0x03d08002,0x00110500,
+0x001b5eb0,0xb000a317,0x17008b00,0x000402a4,0x070500bf,0x97416e00,
+0x01076530,0x00035a18,0x1a01a317,0x1700035a,0xc16800a4,0x0a051883,
+0x9302e000,0x03a42000,0xf002debf,0x6d000c05,0x85f42e5e,0xe082010c,
+0x2db48506,0x335ee000,0x008c3700,0xf432de68,0xb0000f65,0x17000f5e,
+0xde6d0085,0x1d65f42e,0x02debf03,0x002a05f0,0x001f5eb0,0xb000a317,
+0x17008f00,0x000402a4,0x170500bf,0x97416e00,0x01176530,0x00035a1c,
+0x1e01a317,0x1700035a,0x5e6d00a4,0x1985f42e,0x06e08201,0x002db485,
+0x00375ee0,0x68008d37,0x65f436de,0x5eb0001c,0x8517000f,0x2e5e6d00,
+0x012a65f4,0x0902e085,0xd1034810,0x05f002de,0x5e68001f,0x2485044b,
+0x025e0200,0x00830bf0,0x18834168,0x81014b05,0xb48506e0,0xdebf032d,
+0x7c04f002,0x4f50b000,0x00f21100,0x005350b0,0xb000f311,0x11005750,
+0x60bc01f4,0xf5110103,0x0360bc01,0x03f05100,0xf002debf,0x02007c04,
+0x0bf0025e,0x60810183,0x48100902,0x025e2903,0x022f05f0,0x00c70083,
+0xbf03ad0d,0x04f002de,0xded1037c,0x3005f002,0x02dea503,0x037c04f0,
+0xf002debf,0x80020a00,0x0000b301,0x5006020a,0x39050003,0x0b01b000,
+0x00a11700,0x0884de6d,0xe8003905,0x77086444,0x5e6e00a1,0x39250884,
+0x06e08701,0x01ab77f5,0x004b5e08,0x6800a117,0x2500875e,0x5eb0003c,
+0x8517000f,0x025e0200,0x00830bf0,0x063b5e68,0xbc014225,0x17000360,
+0xd000028c,0x44050003,0x0360bc01,0x038d1700,0xf002debf,0xbc014405,
+0x17000360,0xdebf038c,0x1801f002,0x83416800,0x014a0518,0x84066080,
+0x290327f4,0x04f0025e,0x6082017c,0x2db48506,0xc7008302,0x03ad0d00,
+0xf002debf,0xe0007c04,0x20009702,0x608101a5,0x48100902,0x0360bc01,
+0x008e0600,0x007b01e0,0xbc015ea0,0x17191360,0x016d00a1,0x0a20f47a,
+0x1360bc01,0x035e8011,0xf002debf,0x02000a00,0x09f0025e,0xde380375,
+0x0a00f002,0x02de9e03,0x000a00f0,0x004c44e8,0xe800a1f7,0x1701845e,
+0xde6a00a1,0x5b050184,0x845ee800,0x01871101,0x000360bc,0xa5018811,
+0x113022e0,0x60bc0180,0x13110003,0x0360bc01,0x00141100,0x006744b0,
+0xb000a117,0x17006b44,0x5eb000a2,0x04110087,0x8b5eb000,0x03051100,
+0xf002deb8,0xbf035d05,0x00f002de,0x5e87020a,0x8f070053,0x0360bc01,
+0x0192b704,0x040360bc,0xbc01a117,0xf01fff63,0x63bc01cb,0xccf01fff,
+0xff63bc01,0x01cdf01f,0x1fff63bc,0xbc01cef0,0xf01fff63,0x63bc01cf,
+0xd0f01fff,0x0360bc01,0x02e41000,0x00c30086,0xb0007d05,0x17000f54,
+0xde6900a2,0x7185908a,0x1252e800,0x00e450f4,0x00379a68,0xbc017d05,
+0x10000360,0x54b000e4,0xe0100027,0x2b54b000,0x03e11000,0xf002debf,
+0xa4038605,0x07f002de,0xdea90328,0x2807f002,0xbf800702,0x027a0500,
+0x000fd287,0xbc01bc05,0xd7010360,0x26e000a1,0x8c290033,0x05e08101,
+0x02936932,0x00c30006,0x80027f05,0x05005fde,0x54b00084,0xe0100007,
+0x371a6800,0x01820500,0xa086ded2,0xb000e030,0x10000b54,0xdebf03e1,
+0x8605f002,0x865ebc01,0x01e01090,0x001f60bc,0xbc01e110,0x10000360,
+0x52b000e2,0xe5100023,0xff63bc01,0x00c5f01f,0x002752b0,0xbc01e610,
+0xf01fff63,0x52b000c6,0xe710002b,0xff63bc01,0x00c7f01f,0x004700b0,
+0x08018610,0x1700371a,0x52380181,0x80170003,0x27c00201,0x00a61700,
+0xf0025e02,0xb000420d,0x17000754,0x81810280,0x950500b3,0x025e0200,
+0x004b0bf0,0x00371a68,0x68009e25,0x0500379a,0x541a0298,0x9e050007,
+0xa7006800,0x009c8500,0x00a70068,0x03019cc5,0x170027c0,0xdebf03a1,
+0x9d05f002,0x3bc00601,0x01a11700,0x10865e82,0xa90386d0,0x07f002de,
+0x5e680076,0xb725044f,0xff63bc01,0x00c3f01f,0x054f5e68,0xbc01a6a5,
+0x901a0360,0x60bc01e3,0x92b70603,0x4f5e6800,0x03b72505,0xf002debf,
+0xbc01b105,0x37060360,0x44980292,0x7c080007,0x07468002,0x017c0800,
+0x180360bc,0x0702e390,0x0500bf80,0xd20702b1,0xb105000f,0x06608101,
+0x01ac97f5,0x1c06e087,0xb000e370,0x10008f41,0x5e9f0362,0xb105f002,
+0x0360bc01,0x00453100,0x00371ab0,0x02008117,0x0bf0025e,0x5ee80078,
+0xa1d70084,0x865e6a00,0x00b78590,0xf41252e8,0xbf03e430,0x05f002de,
+0x60bc01ba,0xe4100003,0x02de3803,0x01ba05f0,0x1c06e087,0x9001e490,
+0x10090a60,0x61bc0148,0x91370403,0x4f5e6800,0x037ca805,0xf0025e83,
+0xbf032807,0x00f002de,0x41040202,0xc8050063,0x02e08901,0x01ac97f5,
+0x0b026084,0x05025810,0x0500af5e,0xe08701c4,0x33712606,0xbf000402,
+0x01c70500,0xf502e085,0x0200ab77,0x0cf0025e,0xdebf03b3,0x0200f002,
+0x23c58502,0x01ca0500,0x0b066084,0xbc015810,0x11000361,0x80050233,
+0xd10500bf,0x1360bc01,0x00a15711,0xf0025e02,0x96015800,0x30030e60,
+0x40b00019,0xa2170067,0x025e0200,0x005d00f0,0x006744e0,0x02029946,
+0x0500b35e,0xe08901d4,0xac97f506,0x37c08302,0x000a0000,0x001f02e0,
+0x02008720,0x0bf0025e,0xe08901af,0xac97f506,0x02debf03,0x010a00f0,
+0x3201e081,0x83019369,0x693201e0,0x5e020093,0xaf0bf002,0x13408102,
+0x01020000,0x000360bc,0xa3038010,0x05f002de,0x609001e0,0x48100902,
+0x6744b000,0x009e1700,0x006b44b0,0xb0009d17,0x17006f44,0x44b0009c,
+0x9b170073,0x7ade6800,0x00e02523,0x002302e0,0x15018820,0x17003b40,
+0x00680097,0xec8500a7,0xa7006800,0x00ecc500,0x005f5ea0,0x68009737,
+0x0500a780,0x60bc01ec,0x97370003,0x4301b000,0x01a11700,0x0584dec9,
+0x81017926,0x900d02e0,0x4086026c,0xf2050037,0xbb02e000,0x03ae2000,
+0xf002debf,0xbc011709,0x14000360,0x60bc0180,0x81140003,0x0a60b801,
+0x01249004,0x040360bc,0xbc01a006,0x46000360,0x60bc019f,0x2ad00003,
+0x0760b301,0x01041000,0x000360bc,0xbc018406,0x06000360,0x60bc0185,
+0x86060003,0x0360bc01,0x01870600,0xf502e083,0x8702aed7,0x090037c0,
+0x60bc0114,0x3e200003,0x025e0200,0x00a50ef0,0x005fde68,0x3c010546,
+0x17000352,0x52bc01a1,0xa137f406,0x845e6e00,0x035ba90b,0xf0025e43,
+0x6800fe05,0x46005f5e,0x5e680017,0x1426005f,0xa7806800,0x000aa600,
+0x906644e0,0xbc01aa26,0x1700c362,0x528002a1,0x0d060003,0x03529601,
+0x00a11700,0x9086de80,0x03029a37,0x06000352,0x5ee00012,0x9a37906a,
+0x03d20702,0x00120600,0x006b5ee8,0x9e029a37,0x09006b5e,0xdebf035b,
+0x1a06f002,0x03d25201,0x01a11700,0xf406d285,0xbf039a37,0x06f002de,
+0x523c011a,0xa1170003,0x0652bc01,0x009a37f4,0x0b685e6e,0x04025ba9,
+0x06003bc0,0x40870220,0x3b070037,0x0360bc01,0x003e4000,0xf0025e02,
+0x8702a50e,0x0600afc0,0x4058011b,0x9a1700af,0x025e2a03,0x022206f0,
+0x00afc087,0xb0001409,0x10282341,0x60800148,0x9497f202,0x02e08401,
+0x01481009,0x00af4058,0x01012a10,0x1700b3c1,0x5e8301a1,0xa1771087,
+0x865ebb01,0x00049000,0x001340b0,0x68000018,0x2900ab40,0xde290314,
+0x3206f002,0xab405801,0x029a1700,0x00a34700,0xbc013206,0x113c1e62,
+0x60bc01e0,0xea110003,0x6b5eb000,0x01eb1100,0x3d1e6098,0x8303e811,
+0x06f0025e,0x60bc0136,0x3e600003,0x025e0200,0x00a50ef0,0x0433406d,
+0xbc0132c6,0x06000360,0xe0880176,0x7706000f,0x33406d00,0x01230702,
+0x000f5229,0x09019317,0x17000f52,0x609601aa,0x9497f202,0x8741e000,
+0x0165f001,0x000f60bc,0x2800a117,0x669086de,0x60860142,0x9497f206,
+0x9741e000,0x00657000,0x00831ae0,0x0601a0c6,0x1700535e,0x5ea000a2,
+0xa177044f,0x87de6800,0x01504604,0xf206e086,0xb8009497,0x37008b5e,
+0x5ab000a2,0xa0170003,0x03da0a02,0x014a0600,0xf2066087,0x84029497,
+0x06003bc0,0xda030250,0x50060003,0x025eb003,0x024e06f0,0x00074104,
+0x80015006,0xe6ce0460,0x5e060177,0xa2170053,0x8ade8201,0x03049000,
+0xf002dea9,0xb0035b06,0x06f0025e,0xd2870257,0x57060013,0x1352b000,
+0x01861100,0x300ae0a5,0xbf038011,0x06f002de,0x52080257,0x5b06000f,
+0x1302e000,0x01842000,0xf2066080,0xbf039497,0x07f002de,0x52070224,
+0xc106000f,0xa3478002,0x00be0600,0x00831ae0,0xe800a086,0x86007f1a,
+0x60bc019f,0xe4110003,0xff63bc01,0x01a5f71f,0x030360bc,0x0602e1d1,
+0x0600535e,0x60bc0164,0xe1910403,0x53de0602,0x00680600,0x008747e0,
+0x0702e151,0x06000fd2,0x47e00068,0xe1910087,0x33406d00,0x0023c702,
+0x054f5e68,0x68006b86,0x4600abde,0x5eb003c1,0x6e06f002,0x17520002,
+0x03c10600,0xf002de9e,0x02007506,0x0af0025e,0xc00002a9,0x72060077,
+0x77402901,0x00a51700,0x00975ee0,0x6800a597,0xe6ff97de,0x52800275,
+0xc1060017,0xbf000702,0x01c10600,0x061b60bc,0x9000a217,0x30008747,
+0x41e00065,0x6550f496,0x8747e000,0x03960601,0xf0025e83,0xbc017d06,
+0x80000360,0x5e02003e,0xa50ef002,0x30406d00,0x0079c6d2,0xd230406d,
+0x680023c7,0xe6ff97de,0x5a0f0180,0xa5170007,0x0b60bc01,0x00a1571d,
+0xf4965ee0,0x2a016430,0x17000358,0xde9e0399,0x9006f002,0x02e08201,
+0x029937f3,0x00175200,0x16019006,0x170003d8,0x5a0f01a6,0xa4170007,
+0x03d80c01,0x00a11700,0xf492de68,0xe0008c26,0x1702675e,0xdebf0399,
+0x9106f002,0x03d80d01,0x00a11700,0xf492de68,0xe000c126,0x1704675e,
+0xdebf0399,0x9106f002,0x03581001,0x00a61700,0x00675e88,0xe000a277,
+0x50f4ae00,0xdeaa0164,0x76c6ce64,0x9bde6800,0x02ac4600,0x00878107,
+0x6d009f06,0x060c8bde,0x5285029f,0x9f06000f,0x3b521801,0x00a11700,
+0x0087de68,0x81019f06,0xe6ce04e0,0x5ee00077,0xa3370b88,0x8f5ee000,
+0x00a39700,0x008741e0,0x0200a277,0x0cf0025e,0x1ae80005,0x9f06017f,
+0x1b60bc01,0x0081d715,0x00975e88,0xe800a177,0xb0f4865e,0x60bc0163,
+0xa1170e07,0x8e41e000,0x006330f4,0x001756b0,0xb000a117,0x17001b56,
+0xde6800a2,0xc146d086,0x8ade6800,0x00c166d0,0xf0025e02,0xbc01da0b,
+0x90151b60,0x62bc0164,0xa217004f,0x025e0200,0x002d0cf0,0x009b5e68,
+0xbc01be46,0x71f41e62,0x5e6800e0,0xb166009b,0x9bde6800,0x01bea600,
+0x00c78002,0x8701a117,0x113d86de,0x609801e8,0xe8113d06,0x831ae000,
+0x00a08600,0x007f1ae8,0xbc019f86,0x11000360,0xde6800ea,0xb946005f,
+0x6b5eb000,0x01eb1100,0x3d5ede92,0x8701e811,0x113d0260,0xde6800e8,
+0xbda6009b,0x06608701,0x01e8113d,0x3d166098,0x8101e811,0xc6ce04e0,
+0xdeaa0176,0x76c6ce64,0x02debf03,0x01c506f0,0x000f62bc,0xbc01e011,
+0x11000360,0xe08101e4,0x77e6ce00,0x0f60bc01,0x02e81100,0x00df1900,
+0xe000cc06,0x46f37e1a,0x1ab0009f,0x25100083,0x7e1ae800,0x009fa604,
+0x017f9a6a,0xb801ccc6,0x90040660,0xe0820124,0x9497f206,0xa3c70702,
+0x01e60600,0x090360bc,0xe000ea11,0x17018747,0x5e8303a1,0xd106f002,
+0x32406d00,0x00cf26f4,0xf432406d,0xbc01e626,0x370b0360,0xde0602a1,
+0xd5060053,0x825e9c01,0x00a137f4,0x00875eb0,0xb000eb11,0x11002352,
+0x52b000eb,0xeb110027,0x2b52b000,0x00eb1100,0x00874790,0xbc016530,
+0x17061b60,0x41e000a1,0x6530f496,0x0f5ad800,0x00eb1101,0x010b5ad8,
+0xd800eb11,0x1101035a,0x5ee800eb,0xa1373c6a,0x875ee800,0x00a1d701,
+0x01875ed8,0x8601eb11,0x113d0660,0x60bc01e8,0x6510061b,0x025e0200,
+0x01470ef0,0x3d06e086,0x8801e811,0x90000a60,0xc0040104,0xa117003b,
+0x86de8101,0x036c900d,0xf002dea0,0x6800ee06,0xa6064f5e,0x523801f3,
+0x80170003,0x5f5eb000,0x00811700,0xf0025e02,0x68006400,0x4600abde,
+0x5ea000f3,0xa177044f,0x875e6800,0x00c94800,0x04875e68,0xbf03c948,
+0x0af002de,0xde86033d,0x1509f002,0x37c08702,0x00140900,0xf0025e02,
+0xbc01c10b,0xa0000360,0x5e02003e,0xa50ef002,0x025e0303,0x03f306f0,
+0xf002dea9,0xbc01fe06,0xc0000360,0x5e02003e,0xa50ef002,0x37400702,
+0x00fa0600,0xf0025e02,0x6e009d0a,0x07023040,0xde010328,0x2807f002,
+0xabde6800,0x03100700,0xf0025e30,0xe0000407,0x20002b02,0xdebf038a,
+0x0807f002,0x17528002,0x00070700,0x004302e0,0xbf039020,0x07f002de,
+0x02e00008,0x95200057,0x4f5e6800,0x00b60904,0x024f5e68,0x6800b689,
+0x08024f5e,0x5e680083,0xc288044f,0x4f5e6800,0x002f0a05,0x064f5e68,
+0x68002f0a,0x8a064f5e,0xdebf0338,0x3d0af002,0xabde6800,0x03212700,
+0xf0025e30,0xe0001407,0x20002f02,0xdebf038b,0x1807f002,0x17528002,
+0x00170700,0x004702e0,0xbf039120,0x07f002de,0x02e00018,0x9620005b,
+0x4f5e6800,0x0061a806,0x044f5e68,0x68004f2a,0xaa044f5e,0x5e68004f,
+0xcea8054f,0x4f5e6800,0x00612806,0x054f5e68,0xa0002d2a,0x77ff4f5e,
+0x5e6800a1,0x452a0787,0x02debf03,0x007c08f0,0x001302e0,0xbf038420,
+0x08f002de,0x02e00080,0x8320000f,0x0f60bc01,0x02e81100,0x003bc084,
+0x8401c106,0x100906e0,0xdebf0348,0xc106f002,0x93c00002,0x03020000,
+0xf0025ea3,0xc3032c07,0x07f0025e,0xdebf032b,0x5709f002,0x0360bc01,
+0x003e0001,0xf0025e02,0x0702a50e,0x0700afc0,0x40070230,0x2c070037,
+0xafc00701,0x00a11700,0x00875eb8,0x8201a137,0x900d865e,0x44b0006c,
+0x7806007f,0x02608301,0x00481009,0xf0025e02,0x8702c10b,0x090037c0,
+0xde860314,0x1509f002,0x0360bc01,0x003e2001,0xf0025e02,0x4303a50e,
+0x07f0025e,0xc0870235,0x14090037,0xb3810002,0x01600700,0xf2066080,
+0x01039497,0x07f002de,0x5eb00360,0x4207f002,0x0702e000,0x03812000,
+0xf002debf,0xe0004307,0x20000302,0x60bc0180,0x65b01227,0x9541e000,
+0x01659032,0x006b402d,0x8800a217,0x37018b5e,0x403801a2,0x8016002b,
+0x27408802,0x014a0700,0xd0066084,0xb0008016,0x56f4025a,0x60bc0180,
+0xa1d70d1b,0x025e0200,0x005800f0,0x006740b0,0xbc018116,0xf70d1b60,
+0x5e0200a1,0x5800f002,0x6740b000,0x00821600,0x005326e0,0x69009469,
+0x87015326,0x60bc0154,0x94090003,0xb3818402,0x01590700,0x0d04e084,
+0xbc016c80,0x00000360,0x60bc016e,0x6f000003,0x02debf03,0x005e07f0,
+0xf73a52e8,0xe800a1b7,0x1702875e,0x5e9000a1,0xa1970087,0xba01e100,
+0x006e20f4,0x00bf81e0,0xb0006f00,0x17003b52,0x010502bd,0x5b0900b3,
+0xdf198002,0x00620700,0x0230406e,0x81035d08,0x07f002de,0x02e0006c,
+0x85200017,0x02dea903,0x016707f0,0x0906e084,0x80014810,0x100902e0,
+0x5e020048,0x9b0bf002,0x02de8603,0x011509f0,0xce046080,0x800176c6,
+0x97f20660,0xdebf0394,0xe107f002,0x02de8603,0x031509f0,0xf0025e30,
+0xa9038f07,0x07f002de,0xde680074,0x8f4700ab,0x3b52b000,0x009f1700,
+0x003b52b0,0xbc01be17,0x26000360,0xdebf0384,0x8f07f002,0x02dea003,
+0x037e07f0,0xf002debf,0x90016305,0x10090a60,0x52b00048,0x9f17003b,
+0x3b52b000,0x01be1700,0x00835e9e,0x0601ebb0,0x17000f52,0x5eb800a1,
+0xa1370087,0x86de8201,0x01ab77f5,0x000361bc,0xe8008030,0xf7f33a52,
+0xd26b00a2,0x81e7f33a,0x7e5ee800,0x00a2d791,0x008b5e90,0xbc01a197,
+0x90101b60,0x526b0064,0x8ce7f33a,0x875e1801,0x01a21700,0x00875e0a,
+0x8800a317,0x57f40660,0x41e000a2,0x6470f492,0x0258b000,0x000056f4,
+0x91fade6b,0xb0008fc7,0x17003b52,0xdebf03be,0x8f07f002,0x025e0200,
+0x00820df0,0x00131ab0,0xb0008426,0x17003b52,0xde20039f,0x9c07f002,
+0x535e0702,0x01930700,0x0902e080,0xbf034810,0x07f002de,0xde68009c,
+0x9907005f,0x07541a02,0x01970700,0x0027c003,0x8201a117,0xd010865e,
+0xc0020186,0xa1170027,0x2a42e000,0x018a30f4,0xce04e080,0xa90376c6,
+0x07f002de,0x5eb0009c,0x80100047,0x4f5e0801,0x00a11700,0x00875e68,
+0xb003b927,0x07f0025e,0x520002bd,0xac070017,0xabde6800,0x00a24700,
+0x005302e0,0x86029420,0x0700535e,0x528402e1,0x5b09000f,0x0fd28402,
+0x03a70700,0xf0025eb3,0xbf03aa07,0x07f002de,0x5e3103b2,0xb207f002,
+0x4f5e6800,0x01aa0704,0xf2066084,0x68009497,0x07024f5e,0xdebf03e1,
+0xd107f002,0x02de1e03,0x03af07f0,0xf0025e31,0x8401af07,0x97f20260,
+0xde680094,0xb44700ab,0x3f02e000,0x038f2000,0xf002debf,0x6800b707,
+0x4700ab5e,0x528002b7,0xe107002f,0x07410202,0x00b70700,0x044f5e68,
+0x6800e107,0x87024f5e,0x410402e1,0x5b090007,0x02debf03,0x03e107f0,
+0xf0025e30,0x6800e107,0xa7054f5e,0x5e6800d1,0xd127054f,0x02debf03,
+0x02e107f0,0x00535e06,0xe000c007,0x20006302,0xdebf0398,0xe107f002,
+0x02de2303,0x01c807f0,0x000b5029,0x6800a317,0x27058fde,0xe08701c8,
+0x83701002,0x02608401,0x00481009,0x00875eb0,0x6e00a117,0x270003e0,
+0xded103c7,0xc807f002,0xabde6800,0x00ce4700,0x002702e0,0x07028920,
+0x0700bf80,0xd20701ce,0xa117000f,0x865e8101,0x01ac97f5,0x000360bc,
+0x6800a817,0x07004f5e,0x5e6800e1,0xe107014f,0x4f5e6800,0x02e18705,
+0x00c74780,0x29035b08,0x07f002de,0xde0201d7,0xa11700af,0x0f520601,
+0x00a21700,0xf4865e38,0x8201e147,0x77f58ade,0x52b000ab,0xf2110023,
+0x2752b000,0x00f31100,0x002b52b0,0x0601f411,0x17000f52,0x5ee000a1,
+0xf5310087,0x5b00b000,0x00f01100,0x00c347b0,0x34010018,0x1700c7c7,
+0xde6e00a1,0xe1a70284,0x0360bc01,0x02421008,0x0007c183,0x8002e307,
+0x0900535e,0x40b0005b,0xa1170033,0xdf990801,0x00a21700,0x008b5e68,
+0xe800eb67,0x17d43040,0x198102a1,0xeb0700df,0x831ab000,0x02a11700,
+0x00df9980,0xb000eb07,0x1700635e,0x5e6e00a1,0x5d080284,0x875eb000,
+0x01700600,0xce006081,0x020276c6,0x070013c0,0x5ee000f1,0x70460384,
+0x04608101,0x0276c6ce,0x00df1901,0x03010908,0x1700535e,0xde8701a1,
+0x76c6ce84,0x02de8603,0x011509f0,0x010360bc,0x02003e40,0x0ef0025e,
+0x5e8503a5,0xf407f002,0x02608e01,0x01e8113d,0x0083c707,0x8201a117,
+0xc6ce845e,0x99010276,0xfe0700df,0x97c70301,0x01a11700,0xce845e82,
+0x070277e6,0x0a00afc0,0x60bc0182,0xe811000f,0x04608401,0x0077e6ce,
+0x002740b0,0xb0007206,0x06002b40,0x40b00073,0x7406006b,0x6f40b000,
+0x01750600,0xce046084,0x020077e6,0x0af0025e,0x63bc019d,0xa8d71fff,
+0x025e0200,0x008b0bf0,0xf0025e02,0xa801820a,0x90000a60,0x19010204,
+0x6d0d00df,0x23016800,0x03590800,0xf002de20,0x06025908,0x080053de,
+0x5e680059,0x1228044f,0x4f5ea000,0x00a17704,0x0487de68,0xbc015948,
+0x10100360,0x52b00073,0x74100023,0x2752b000,0x00741000,0x002b52b0,
+0x1e017410,0x1000835e,0x60bc0174,0x71101203,0x0360bc01,0x0172f017,
+0x083360ac,0xb0007030,0x1800c341,0x41800200,0x1b0800c3,0xc3c18702,
+0x01590800,0xf506e083,0x8301aed7,0x700e0660,0x41280173,0xa11700cf,
+0x87de8000,0x01a1b700,0x062760bc,0xe0008249,0xa90d0a26,0x5e680082,
+0x4a28044f,0x0b26b000,0x00651000,0x00fb5e90,0xe800be97,0x97d0fa5e,
+0xde8502a1,0x49080087,0x7f5e9000,0x009f9700,0x07875ee8,0x0502a1f7,
+0x080087de,0x5ee80031,0xa197d07e,0x87de0502,0x00380800,0xf40260e8,
+0xbc01a137,0x90101b60,0x5e020064,0x970df002,0x02debf03,0x004008f0,
+0x07fb5ee8,0x9e0184f6,0x96d00260,0x609e0184,0xa137f402,0x875e6e00,
+0x003be807,0x009741e0,0x02006410,0x0df0025e,0x5ee80097,0xa197d07e,
+0x1b60bc01,0x00649010,0xf0025e02,0xbf03820d,0x08f002de,0x1ab00040,
+0x80160013,0x171ab000,0x00811600,0x001b1ab0,0xb0008216,0x16001f1a,
+0xdebf0383,0x4808f002,0x035ab000,0x00a11700,0xd0845eb0,0xb0008096,
+0x1700075a,0x5eb000a1,0x81b6d084,0x0b5ab000,0x00a11700,0xd0845eb0,
+0xb00082d6,0x17000f5a,0x5eb000a1,0x83f6d084,0x135a8800,0x039f9700,
+0xf002debf,0xb0005908,0x10000b26,0x5e900065,0xa297007f,0x8a5ee800,
+0x02a197d0,0x0087de85,0xb0005808,0x16008b5e,0x60e80084,0xa237f4fe,
+0x8bde8502,0x00540800,0x009741e0,0x02006410,0x0df0025e,0xdebf0397,
+0x5808f002,0x0360bc01,0x01801600,0x000360bc,0xbc018116,0x16000360,
+0x60bc0182,0x83160003,0x135ab000,0x009f1700,0x001340a8,0xbf030450,
+0x04f002de,0x02e000e1,0xa1200087,0x02debf03,0x005e08f0,0x000b02e0,
+0x84018220,0x10090660,0xe0840148,0x48100906,0x02debf03,0x035b09f0,
+0xf0025e30,0x68007408,0xa8064fde,0x02e00065,0x8e20003b,0x02debf03,
+0x006608f0,0x003702e0,0x23038d20,0x08f002de,0xde68007c,0x7cc8f14e,
+0x02e08701,0x01837010,0x09026084,0xb0004810,0x1700875e,0xe06e00a1,
+0x6c280003,0x02ded103,0x006d08f0,0x064f5e68,0x05026f28,0x08000b50,
+0x6082017c,0x48100906,0xbf800702,0x02730800,0x000fd207,0x80017308,
+0x97f506e0,0xdebf03ac,0x7c08f002,0xc3008702,0x00790800,0x064fde68,
+0x680079a8,0x080013d2,0x60bc0179,0x83110003,0x0360bc01,0x00821100,
+0x064fde68,0xe0007c28,0x20004f02,0xdebf0393,0x7c08f002,0x025eb003,
+0x027e08f0,0x00074104,0x83028108,0x07000741,0xdebf0328,0x8108f002,
+0x07418402,0x01280700,0xf2066080,0xbf039497,0x07f002de,0x5e9f0328,
+0x8608f002,0x02de9e03,0x023d0af0,0x00535e03,0x04023d0a,0x08004381,
+0x0100018a,0xa1170063,0x27c00201,0x00a21700,0xf486de38,0xb0038048,
+0x08f0025e,0x5200028c,0x80080017,0x2f528002,0x038e0800,0xf0025e33,
+0x3c023d0a,0x08003f52,0x523c019f,0xa117003f,0x84de6800,0x01be8804,
+0x160360bc,0xbc016410,0x10081b60,0x5e680065,0x9b280087,0x035ab000,
+0x00a21700,0xc08ade68,0xe000be08,0x30009741,0x41e00065,0x64300093,
+0x875ee800,0x00a15700,0x00875e6a,0x68009428,0x0800875e,0x5a3801a0,
+0xa1170003,0x03583801,0x00a21700,0xf486de68,0xbf03be48,0x08f002de,
+0xc18502a0,0x3d0a0007,0x1b60bc01,0x0165f007,0x050360bc,0x0200a4b7,
+0x00f0025e,0x00800289,0xbe0800c3,0x1360bc01,0x00a61719,0x007f01e0,
+0x6d00a5b7,0xc8f4965e,0x60bc01a8,0xa5971113,0x945e6800,0x00c0c80b,
+0x007b01b0,0xb0006510,0x17002752,0x52b000a2,0xa317002b,0x94416800,
+0x00b3e80b,0xd08ede68,0x6800af48,0x28d08a5e,0x41e000be,0x65b00097,
+0x96416d00,0x01acc8f4,0x111360bc,0xbf036590,0x08f002de,0x02e000ac,
+0xa220008b,0x7f01b000,0x00651000,0x002352b0,0xb0008016,0x16002752,
+0x52b00081,0x8216002b,0x0252bc01,0x01a1f7f2,0xf4025ea9,0x90008336,
+0x16016744,0xde680084,0xbda80593,0x06608401,0x008496d0,0x00975eb0,
+0xb0035f00,0x05f0025e,0xdebf0376,0x2807f002,0x8f02e000,0x03a32000,
+0xf002debf,0x9e038008,0x0af002de,0x5eb0033d,0xc508f002,0x17520002,
+0x03800800,0xf0025e33,0x84013d0a,0x97f20660,0x5eb00394,0x7605f002,
+0x02debf03,0x032807f0,0xf0025e83,0x6d00cb08,0x88033340,0x406d00c9,
+0x80880333,0x025e3003,0x033e0af0,0xf002debf,0x30037605,0x08f0025e,
+0x02e000d1,0x8c200033,0x02debf03,0x007a05f0,0x004b02e0,0x03019220,
+0x170027c0,0x5e820181,0x81b7d104,0x025e0200,0x00780bf0,0x00230088,
+0xe000a237,0xf700885e,0x5ee000a2,0x8951f486,0x06e08601,0x03801130,
+0xf002debf,0xa2037c08,0x00f002de,0xdea30334,0xf408f002,0xff01e000,
+0x017f2000,0x000360bc,0xbf03a317,0x08f002de,0x608701f6,0xa0100304,
+0x0360bc01,0x00e45100,0x009347b0,0xbc010018,0x90020360,0x62bc0104,
+0xe011000f,0x0f60bc01,0x00e83101,0x00a347b0,0xbc010018,0x11000f60,
+0x608401e8,0x48100906,0x1e602000,0x00eb0809,0x00fb01e0,0xbf037e20,
+0x08f002de,0x60bc01fc,0xa1d70e03,0x63001401,0x00a21700,0xf4865ee0,
+0xe0006550,0x3600035a,0x00030280,0xf10800c7,0x025ea903,0x02f608f0,
+0x009f5091,0x9101f508,0xf4841a60,0xdebf0327,0xf508f002,0xff01e000,
+0x017f2000,0x000360bc,0x2303a337,0x08f002de,0xe08301fc,0x48100902,
+0x0360bc01,0x018e1700,0x1002e087,0x82018370,0x10090260,0x5e020048,
+0x830bf002,0x02ded003,0x03fd08f0,0xf0025ed0,0x8201fe08,0x100902e0,
+0xded50348,0x0009f002,0x0360bc01,0x01b41000,0x000360bc,0x6800a1f7,
+0x0900a700,0x42850104,0xa137f41a,0x025e0200,0x005800f0,0x006740b0,
+0xbc01a517,0xf71fff63,0x5e0200a2,0x5d00f002,0x07608800,0x00a45701,
+0xf4865eb8,0x0200a197,0x00f0025e,0x5e68005d,0x0200008f,0xb3016800,
+0x010f0900,0x000360bc,0xbf032605,0x09f002de,0xe0200012,0x1209091e,
+0x975eb000,0x032a1400,0xf002debf,0xa8000b02,0xf0002341,0xdebf0348,
+0x0200f002,0x02608301,0x00481009,0x0230406e,0xe0001709,0x20007702,
+0x5e02009d,0x420ef002,0x025ea303,0x032807f0,0xf002dec6,0x84011a09,
+0x100906e0,0xdebf0348,0x5b09f002,0x8ae32000,0x02210009,0x00234584,
+0x91032100,0x00f0025e,0xde960321,0x2100f002,0x025e9603,0x002100f0,
+0xf0025e02,0xbc017509,0x30000360,0xe0870142,0x23712402,0x0360bc01,
+0x03206000,0xf0025e12,0xbc012509,0x40000360,0x61bc0120,0x25110083,
+0x7b00b000,0x01271100,0x111360bc,0xbc015e80,0x80111360,0xe080015f,
+0xaed7f506,0x07c10701,0x01ab1700,0x000f60bc,0xbc01e811,0x11000f62,
+0x5e0200e0,0x3b09f002,0xcf61bc01,0x015c100c,0x000360bc,0xbc015d10,
+0xf001cf61,0x60bc015e,0x5ff0083b,0xc7000302,0x010a0000,0x000360bc,
+0xbc01e803,0x03000360,0x60bc01ed,0xf2030003,0x0360bc01,0x01f70300,
+0x000360bc,0xbf03a906,0x00f002de,0x60bc010a,0x48100003,0xb35ea800,
+0x01ac5703,0x1fff63bc,0xbc0154f0,0xf01fff63,0x63bc0155,0x56f01fbf,
+0xff63bc01,0x0057f01f,0xf0025e02,0x8701420e,0x712406e0,0x60bc0123,
+0x54100003,0x0360bc01,0x01551000,0x000360bc,0xbc015610,0x10000360,
+0x60bc0157,0x1720000f,0x07c10601,0x01a11700,0x02845e82,0x070117e0,
+0x17000741,0x5eb800a1,0xa1370087,0x87de8001,0x00160000,0xf002de02,
+0x85020000,0x000037c0,0x60bc0102,0x3e600103,0x025e0200,0x02a50ef0,
+0x00374086,0x02004e09,0x0bf0025e,0x608201af,0xac97f506,0x1b02e000,
+0x03862000,0xf002de86,0x87021509,0x090037c0,0x60580115,0x2a100003,
+0x0360bc01,0x00049000,0x001340b0,0xbf03a117,0x00f002de,0x60b8010a,
+0x2490040a,0x025eaa03,0x015e09f0,0x00036058,0xbc012a10,0x90020360,
+0x40b00004,0x00180013,0x0360bc01,0x00e45100,0x009347b0,0xbc010018,
+0x11000f62,0x608001e0,0x77e6ce00,0x025e8503,0x016409f0,0x000f62bc,
+0xbc01e011,0x31010f60,0x47b000e8,0x001800a3,0x0f60bc01,0x01e81100,
+0x010360bc,0xe800a157,0x3700875e,0xde6800a1,0x6a090087,0x0360bc01,
+0x00049002,0x001340b0,0x24030018,0x04f002de,0x608601e1,0xab77f506,
+0x025e0200,0x017509f0,0x10066080,0xb0008130,0x1700875e,0x608001a1,
+0x81301002,0x02debf03,0x01e104f0,0x000361bc,0xb0008010,0x18000342,
+0xe06e0000,0x78290003,0x025e5003,0x007b09f0,0xf0025e01,0xbf030000,
+0x02f002de,0x41a80033,0x48f00423,0x02608201,0x02481009,0x00afde06,
+0xd5038009,0x09f002de,0xde500380,0x7e09f002,0x0360bc01,0x02b41000,
+0x0083c784,0xbc018309,0x11000b60,0x608e01e0,0xab77f502,0x02de0200,
+0x030000f0,0xf002dea2,0xbc022100,0x09008742,0x60bc018c,0xa4370003,
+0x0360bc01,0x01a3f71f,0x00630014,0x8800a217,0x57f40660,0xdebf03a2,
+0x9109f002,0x07608800,0x01a41701,0x00ff63bc,0x1401a317,0x17006300,
+0x5ee000a2,0xa217018b,0x06608800,0x01a257f4,0x191360bc,0x20006510,
+0x89f486c2,0x41e00097,0x65500697,0x935e8800,0x00a43700,0xf4925e20,
+0xbf032160,0x09f002de,0xde680092,0x9b49f492,0x02dea003,0x009b09f0,
+0x1623c120,0x02009309,0x09f0025e,0xde6d0075,0xa8092093,0xb35a0002,
+0x02a70900,0x00b35a3c,0x8503a709,0x00f002de,0x5e850321,0x2100f002,
+0x02dea203,0x032100f0,0xf002dea3,0x97032100,0x00f002de,0x41b00021,
+0x60100097,0x06608800,0x01a497f4,0x840a6091,0xbf0327f4,0x02f002de,
+0x6080010b,0xac96d502,0x935eb000,0x01a11000,0x000360bc,0xbf034330,
+0x09f002de,0xc2830293,0x0200001f,0x875eb000,0x03a11700,0xf002ded0,
+0xbc01fb03,0x10040360,0xde9e0342,0x0a00f002,0x3f5eb000,0x01451100,
+0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,0x9017000f,0x025e0200,
+0x037509f0,0xf002debf,0x6d000a00,0x88053340,0x5eb30381,0xbb09f002,
+0x4f5e6800,0x00ed8902,0x006702e0,0xbf039920,0x09f002de,0x5e6800ed,
+0xec89024f,0x5f02e000,0x03972000,0xf0025e9f,0x9e032b0a,0x09f002de,
+0xde2103cd,0xcd09f002,0x6f02e000,0x009b2000,0xf0025e02,0x86017509,
+0x10090260,0x60800148,0x48100902,0x02e08101,0x01481009,0x020360bc,
+0x80024210,0x09001f44,0x5eb000cc,0x4511003f,0x0360bc01,0x008f1700,
+0x00435eb0,0xb0008517,0x17000f5e,0xdebf0390,0xcd09f002,0xb644a000,
+0x034571f0,0xf0025e9f,0x82022b0a,0x0900c300,0x00b000ec,0xa1170073,
+0x865ee000,0x00a117b0,0xf47a5ee1,0xe1009e37,0x170077de,0xdee1009d,
+0x9c170073,0x6fdee000,0x039b1700,0xf002de9e,0x6e00dd09,0x4a926e5e,
+0x5e6d002b,0xdd49926e,0x725e6e00,0x002b2a92,0x92725e6d,0x6e00dd29,
+0x0a92765e,0x5e6d002b,0xdd099276,0x7ade6d00,0x002bea91,0x006744b0,
+0xb000a806,0x06006b44,0x44b000a7,0xa606006f,0x7344b000,0x00a50600,
+0x23a29a68,0xe900dd29,0xd7f3a21a,0x9ae9009e,0x9db7f39e,0x9a9ae900,
+0x009c97f3,0xf3969ae8,0xe1009b77,0xf7917a5e,0x5eb000a1,0x19110087,
+0x76dee100,0x001a1192,0x9272dee1,0xe0001b31,0x51926ede,0xde68001c,
+0xe6292386,0x02de1e03,0x002b0af0,0x024f5e68,0xbc012b8a,0xb0081b60,
+0x60bc0165,0xa4970003,0x025e0200,0x008900f0,0x0093de68,0x85021b8a,
+0x0a00c300,0xc107021b,0xf7090097,0x0f5a3c01,0x01a21700,0xf4125abc,
+0xbf03a257,0x09f002de,0x5ab000f8,0xa217000f,0x0360bc01,0x03321100,
+0xf0025e33,0x8002fe09,0x0a001f44,0x5eb0001b,0x8611008b,0x0ee0a501,
+0x03801130,0xf002debf,0x9b021b0a,0x0a002f40,0x44000214,0x0e0a0007,
+0x07c40002,0x02080a00,0x00074481,0x82011b0a,0x900107e0,0x52b00010,
+0x1110002f,0x3352b000,0x00111000,0x003752b0,0xb0001110,0x11008b5e,
+0xdebf030f,0x1b0af002,0x07e08201,0x00103001,0x002f52b0,0xb0001110,
+0x10003352,0x52b00011,0x11100037,0x8b5eb000,0x030d1100,0xf002debf,
+0x82011b0a,0xd00007e0,0x52b00010,0x1110002f,0x3352b000,0x00111000,
+0x003752b0,0xb0001110,0x11008b5e,0xdebf030b,0x1b0af002,0x02de3303,
+0x00170af0,0x008b5eb0,0xbf030b11,0x0af002de,0x5e34031b,0x1a0af002,
+0x8b5eb000,0x030d1100,0xf002debf,0xb0001b0a,0x11008b5e,0xde1e030f,
+0x2b0af002,0x025e9f03,0x002b0af0,0x024f5e68,0x33032b8a,0x0af0025e,
+0x60bc012b,0x65b0081b,0x0360bc01,0x00a4b700,0xf0025e02,0x68008900,
+0xaa0093de,0xc107022b,0x270a0097,0x075a3c01,0x01881700,0x000b5a3c,
+0xbf03a117,0x0af002de,0x5a380129,0x88170007,0x0b5a3801,0x01a11700,
+0xf2865e84,0x87019497,0x912486de,0x5eb00324,0x7605f002,0x02debf03,
+0x032807f0,0xf0025e30,0xbf038008,0x05f002de,0x5eb00376,0x320af002,
+0x025e3303,0x038008f0,0xf002debf,0xb0003e0a,0x11002352,0x52b000f2,
+0xf3110027,0x2b52b000,0x01f41100,0x000360bc,0xb000f591,0x11005b00,
+0xdebf03f0,0x7605f002,0x3f523801,0x02a11700,0x00535e06,0x38013b0a,
+0x17004b52,0xde6800a1,0x3d8a0087,0x02debf03,0x032807f0,0xf0025eb0,
+0x00027605,0x0a00f300,0xde060243,0x430a0053,0x835e1801,0x00a11700,
+0x0087de68,0xbc0143aa,0x51020b60,0x52000242,0x80080017,0x02debf03,
+0x012807f0,0x000360bc,0xbc018311,0x11000360,0x40190182,0xa117002f,
+0x875e6800,0x017c0800,0x2086de99,0x31030011,0x08f0025e,0x5ea0007c,
+0xa297003b,0x4e5e2000,0x017c48f4,0x09026084,0xbf034810,0x08f002de,
+0x5e30037c,0x7c08f002,0x4fde6800,0x00542a04,0x003352b0,0xb0009f17,
+0x10002f52,0x528102eb,0x6305002f,0xab02e000,0x02aa2000,0x002f5281,
+0x08026608,0x05002f52,0xdebf0376,0x2807f002,0x0360bc01,0x01671000,
+0x000360bc,0x80014610,0x300906e0,0xc1820249,0x600a001f,0x2f60bc01,
+0x0165f01f,0x000360bc,0xe8008016,0x30009741,0xc1690065,0x5d0a0097,
+0x0b60bc01,0x01941700,0x000360bc,0xbc01ab17,0x17000360,0x60bc01ac,
+0xad170003,0x0360bc01,0x01ae1700,0x000360bc,0xbc01bf17,0x20000360,
+0x60bc0120,0xa1170003,0x025e0200,0x015800f0,0x00674038,0x1c012800,
+0x00006740,0x60bc0129,0x49500003,0x0360bc01,0x01a71700,0x000360bc,
+0xbc01a817,0x17000360,0x60bc01a9,0xac170003,0x0360bc01,0x01ad1700,
+0x0f06e082,0x06027810,0x0a00e3c1,0x80680072,0x750a00a7,0x02debf03,
+0x00760af0,0x00a78068,0xbc01768a,0xe0000b60,0x60bc0100,0x01400003,
+0x2f62bc01,0x01022003,0x1b5b60bc,0xbc010340,0x00000360,0x60bc0104,
+0x05000003,0x1b60bc01,0x01611006,0x1f1360bc,0xbc016050,0x06000360,
+0x5eb0009e,0x8517000f,0xb644a000,0x034571f0,0xf002debf,0x88012209,
+0x46ce5c5e,0x60bc0172,0x07100e1b,0x0360bc01,0x01085001,0x00066088,
+0x07020490,0x0600afc0,0xde860320,0x1509f002,0x02de0503,0x03870af0,
+0xf002de86,0x85031509,0x0af002de,0x5eb00089,0xa1170087,0x03e06e00,
+0x038d2a00,0xf002de86,0xbc011509,0x10000760,0xde020042,0x0000f002,
+0x025e2103,0x00940af0,0xf43a1ae0,0xb0008e26,0x17003b1a,0xdebf038b,
+0x9c0af002,0xb7508102,0x01990a00,0x009f501c,0xe0008b17,0x37f42e5e,
+0x5e9c018b,0x27f4842e,0x02debf03,0x019c0af0,0x009f501e,0xe0008b17,
+0x37f42e5e,0x5e9e018b,0x27f4842e,0x02de0200,0x000000f0,0x00a70068,
+0x0201a28a,0x060027c0,0x8068009d,0xa8aa00a7,0x771ae000,0x009d2600,
+0xf002de02,0xbc010000,0x26000360,0x40bc019d,0xa117002b,0x875e9800,
+0x00a11701,0x012b4098,0x6a00a217,0x2af48ade,0x60bc01a8,0x9d860003,
+0x02de0200,0x000000f0,0x002352b0,0xb0001f10,0x10002752,0x52b00020,
+0x2110002b,0x07608001,0x021d1000,0x00774080,0x0200ad0a,0x00f002de,
+0xe0870100,0xab77f502,0x025e9103,0x000200f0,0x09fee320,0x81020200,
+0x0a00535e,0x418302bb,0xb50a001f,0x53de8102,0x01c10a00,0x000360bc,
+0xbc015111,0x11000360,0x62bc0152,0x53110003,0x0360bc01,0x01505100,
+0xf2066089,0xbf039497,0x00f002de,0xc5800202,0x02000043,0x47c5f001,
+0x01561100,0x0047c507,0xf001a117,0x31f44ac5,0x60890155,0x9497f20a,
+0x0360bc01,0x02471008,0x0007c104,0x92030200,0x00f002de,0xde9e0302,
+0xc80af002,0x02deb803,0x000200f0,0x007f01b0,0x6800a117,0xc00b84de,
+0xdebf0302,0xca0af002,0x53de0302,0x00020000,0x0023de68,0x8402cb0a,
+0x0000535e,0xc4870202,0x02000093,0x0361bc01,0x00231100,0x002b01b0,
+0xb000a317,0x17000b44,0x44b000a1,0xa217000f,0x865ee900,0x00a13723,
+0x238adee8,0xe900a257,0x66f4865e,0xdee8008a,0x8b06008b,0x6f816800,
+0x00d70a00,0x00235e68,0x6800eb2a,0x2a002700,0x5ee800eb,0xa1370023,
+0x87de6900,0x00da0a00,0x01845ee0,0xb000a137,0x18001f44,0x44880000,
+0xa3570123,0x23449000,0x01a4d700,0x006f013c,0x6800a517,0x0a0097de,
+0x013801e4,0xa517006f,0x975e6800,0x00e70a00,0x00975ee8,0x6800a137,
+0x0a00875e,0xdebf03eb,0xe70af002,0x975ee800,0x00a53700,0x0194de80,
+0xe000a537,0xb70d865e,0x1ae100a1,0x8a66f42a,0x2e9ae000,0x008b86f4,
+0x00875ee8,0x6a00a137,0x0a00875e,0x1a6900e7,0xf00a002f,0x2f9a6800,
+0x00ee0a00,0x2a2a9a6e,0x8001f08a,0x97f206e0,0xdebf0394,0xf20af002,
+0x02e08001,0x039497f2,0xf002debf,0x68000200,0x0a002741,0x458402fd,
+0xf30a0023,0xa7006800,0x00f6aa00,0x00a78068,0xb000f9ca,0x17006744,
+0x44e800a1,0xa237f466,0x8b5e6d00,0x03f74a00,0xf002de92,0x02002e09,
+0x0cf0025e,0x5e02005f,0x5a0cf002,0x025e0200,0x016a0cf0,0x000f60bc,
+0x1e03e811,0x0bf002de,0x60bc0104,0x5c100003,0x0360bc01,0x015d1000,
+0x045360bc,0xbc015e10,0x10000360,0xdebf035f,0x080bf002,0x0b60bc01,
+0x015c1000,0x000360bc,0xbc015d10,0x10044360,0x60bc015e,0x5f100003,
+0x0360bc01,0x02208000,0x00bf0085,0xb0003d0b,0x11002b1a,0x1ab00051,
+0x5211002f,0x0360bc01,0x01503100,0x0c0360bc,0x00004090,0x00f002de,
+0xc1680000,0x110b0003,0x43458002,0x010d0b00,0x000360bc,0x84025011,
+0x0b004345,0x44b00012,0xa1170067,0x865e6800,0x01142b23,0x000360bc,
+0x86012040,0x11200660,0x1ae90000,0xa1372a2a,0x2e9ae800,0x00a2572a,
+0xf46644e1,0xe1001931,0x51f46ac4,0xc4e1001a,0x1b11006f,0x73c4e000,
+0x001c1100,0x001f44b0,0x88000018,0x57012344,0x449000a3,0xa4d70023,
+0x0b44b000,0x00a11700,0x000f44b0,0xe900a217,0x3723865e,0xdee800a1,
+0xa257238a,0x8bde6900,0x002b0b00,0xf40a44e1,0xe0000271,0x91f40ec4,
+0x5ee80003,0x88370023,0x23de6900,0x00200b00,0x002700e8,0xbf038837,
+0x0bf002de,0x60860120,0x00112002,0x53de0002,0x013f0b00,0xf202e080,
+0x02009497,0x0cf0025e,0x60bc015d,0x40100003,0x02debf03,0x02320bf0,
+0x00c38000,0xe000360b,0x57096444,0x5ee800a1,0xa1372186,0x66c46c00,
+0x03342bf4,0xf002debf,0xe8003f0b,0x26212a01,0x60bc018a,0x8b060003,
+0x2b1ab000,0x01511100,0x000360bc,0xbc015211,0x31000360,0x45800250,
+0x3b0b0043,0x02debf03,0x01160bf0,0x000360bc,0xb0004010,0x11002b01,
+0xde000009,0x0000f002,0x025e5603,0x00420bf0,0xf0025e02,0xb000cc00,
+0x11002f01,0x61bc0109,0x5c100ccf,0x0360bc01,0x015d1000,0x01cf61bc,
+0xbc015ef0,0xf0083b60,0x5e02005f,0x660cf002,0x025e0200,0x006f0cf0,
+0xf0025e02,0xbf03630c,0x09f002de,0x5e88012e,0x86d01006,0x075e0201,
+0x01a11700,0x10865e82,0x680086d0,0x8b00a780,0x5e9d0150,0x86d01002,
+0x1b420802,0x01670b00,0x061b60bc,0x0200a137,0x00f0025e,0x608d0158,
+0xa2370306,0x025e0200,0x015d00f0,0x006f5018,0x8002a317,0x0b001bc2,
+0x60bc015b,0x81d71d03,0x8fde0002,0x02640b00,0x008f5e00,0xbf035e0b,
+0x0bf002de,0x60bc0161,0x81f70303,0x8f5e6e00,0x00644b00,0x008f5e68,
+0x8301610b,0x37030660,0x5e0200a2,0x5d00f002,0x02debf03,0x016c0bf0,
+0x03066083,0x0200a237,0x00f0025e,0xdebf035d,0x6c0bf002,0x02608301,
+0x00a23703,0xf0025e02,0xbf035d00,0x0bf002de,0x60bc016c,0xa137061b,
+0x025e0200,0x015800f0,0x0302608d,0x0200a237,0x00f0025e,0x60bc015d,
+0x81d71d03,0x07c18102,0x026c0b00,0x00634087,0xbc016d0b,0x10070760,
+0x60bc0119,0x18700183,0x63408702,0x00700b00,0x00075eb0,0xbc011910,
+0xb0018360,0x40870218,0x730b0063,0xa7006800,0x02778b00,0x001b420b,
+0xbf03770b,0x0bf002de,0xde020077,0x0000f002,0x1354b000,0x02a11700,
+0x0007de00,0xb000820b,0x10008b41,0x60bc0165,0xa1d70103,0x025e0200,
+0x00570df0,0x00845ee0,0xe000a1d7,0xf700845e,0x5e0202a1,0x820b0007,
+0x845ee800,0x03a137d4,0xf002debf,0x0200820b,0x00f002de,0x00040200,
+0x860b00bf,0x025e0200,0x03340df0,0xf002debf,0xa0008a0b,0xb1f0b644,
+0x80070245,0x8a0b00bf,0x17c56800,0x018a0b00,0x000360bc,0x02004531,
+0x00f002de,0x00000200,0x9a0b00bf,0xa35ee000,0x00a83700,0x05a05e6d,
+0xb0009acb,0x17009726,0x5e0200a1,0x5800f002,0x6740b000,0x00a21700,
+0xffa3de68,0xb00097eb,0xd734895e,0x006d00a2,0x968b00a7,0x779a6d00,
+0x03984b00,0xf002debf,0x6800970b,0x0b00779a,0x5eb80098,0xa2d73489,
+0x025e0200,0x015d00f0,0x000360bc,0x0200a817,0x00f002de,0x5e010200,
+0xae0b00b3,0x02608101,0x01ac97f5,0x1f0f60bc,0x90016210,0x30020460,
+0x54b00086,0x8a100027,0x0361bc01,0x0080f000,0x00a702e0,0xbc01a920,
+0x10000360,0x60bc0184,0x85100003,0x0754b000,0x00e01000,0x000b54b0,
+0xbc01e110,0x901a0360,0x60bc01e3,0xe4100003,0x0360bc01,0x0192b706,
+0x1fff63bc,0xbc01c3f0,0xf01fff63,0x60bc01c4,0x84f01f03,0x0a609001,
+0x01481009,0x0902e084,0x02004810,0x00f002de,0xde000200,0xc00b00b3,
+0xb35e0002,0x02c00b00,0x001f4200,0xbc01c00b,0x10000361,0x42b00080,
+0x00180003,0x03e06e00,0x03b52b00,0xf0025e50,0x0100b80b,0x00f0025e,
+0xdebf0300,0x3302f002,0x2341a800,0x0148f001,0xf502e087,0xb000ab77,
+0x1100331a,0x02e00042,0xa720009f,0x7060a001,0x008fe6d1,0xf0025e02,
+0x8001d30b,0x900d06e0,0x5e02006c,0x8b0bf002,0x02de0200,0x030000f0,
+0xf002de28,0x2000c00b,0x0b098ae0,0x1ab000c0,0x60100053,0x571ab000,
+0x00180000,0x006300b0,0xb000a010,0x18008342,0x42680000,0xc00b0047,
+0x02608001,0x002c9485,0xf0025e02,0xb000e700,0x17004f1a,0xde6800a5,
+0xcfcb8496,0x02e08001,0x016c900d,0x8506e082,0xbf032db4,0x0bf002de,
+0xe08601c0,0xa0100304,0x8342b000,0x00001800,0x00a302e0,0xbf03a820,
+0x0bf002de,0x5e0002c0,0xd90b00b3,0x4b1ab000,0x008f1000,0x00471ab0,
+0xb0008e10,0x1000431a,0x1ab0008d,0x8c30003f,0x02608001,0x00ac97f5,
+0xf002de02,0xd8000000,0x1701035a,0x5ab801a2,0xa257f406,0x0356b000,
+0x00ae0600,0x000756b0,0xb000af06,0x06000b56,0x56b000b0,0xb106000f,
+0x1356b000,0x00b20600,0xf41256e0,0xb000b346,0x0600035a,0x5e3801ac,
+0xad06008b,0xcf1ab000,0x01a41700,0x000360bc,0xb000a217,0x10009341,
+0x5eb80065,0xa417d092,0x065ee000,0x006350f4,0x00935ef0,0xf000a317,
+0x7700935e,0x5ee000a4,0xa237008b,0x925eb800,0x00a477f4,0xf49241e0,
+0xe0006550,0x95f40256,0x56b00080,0xa4170003,0x8bde6e00,0x00e7ab00,
+0xc0925eb8,0xd800a2d7,0x37008b5e,0x1ae000a2,0xae46f4ba,0xbb1ab000,
+0x00a41700,0xc0925eb8,0xd800a2f7,0x37008b5e,0x1ae000a2,0xaf46f4be,
+0xbf1ad800,0x00a23700,0xf4c21ae0,0xd800b046,0x3700c31a,0x1ae000a2,
+0xb146f4c6,0xc71ad800,0x00a23700,0xf4ca1ae0,0xd800b246,0x3700cb1a,
+0x1ae000a2,0xb346f4ce,0xcf1ab000,0x00a21700,0xc08a5eb8,0x9000a217,
+0x37008b5e,0x5ebc01a2,0xada6d588,0x02de0200,0x010000f0,0x3c066080,
+0x8701e491,0xd13c0660,0x60a801e6,0xe6d13c02,0x02608b01,0x00e6d13c,
+0x008f5eb0,0xb0006310,0x11000356,0x56b000e7,0xe7110007,0x0b56b000,
+0x00e71100,0x000f56b0,0xa901e711,0x913c4260,0x60a801e4,0xe6d13c02,
+0x06608b01,0x00e6d13c,0x008b5eb0,0xbc016310,0x57000360,0x560402a1,
+0x150c0003,0x0360bc01,0x00a11701,0xf48e41e0,0xb0006330,0x11000356,
+0x56b000e7,0xe7110007,0x0b56b000,0x00e71100,0x008b5eb0,0xbc016310,
+0xb7000360,0xd60402a1,0x1f0c0003,0x0360bc01,0x02a11701,0x00535e06,
+0xbc011f0c,0x97010360,0x41e000a1,0x6330f48e,0x0356b000,0x00e71100,
+0x000756b0,0xb000e711,0x11000b56,0x60bc01e7,0xa1170003,0x53de0602,
+0x002a0c00,0x008b5eb0,0x06026310,0x0c00535e,0x56a00029,0xa1f7013f,
+0x02debf03,0x002a0cf0,0x013356a0,0xb000a1f7,0x1100875e,0x60bc01e7,
+0xe7110003,0x02de0200,0x010000f0,0x020760bc,0x6800e311,0x4c009bde,
+0x47e80039,0xe1110187,0x0360bc01,0x01e21100,0x000360bc,0xbc01e211,
+0x11000360,0x60bc01e2,0xe2110003,0x0360bc01,0x01e21100,0x000360bc,
+0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,0x4261b000,0x00e051f4,
+0x000358b0,0xb000e211,0x11000758,0x58b000e2,0xe211000b,0x0f58b000,
+0x00e21100,0x001358b0,0xb000e211,0x11001758,0x58b000e2,0xe211001b,
+0x1f58b000,0x00e21100,0x009b5eb0,0x6800a417,0xac009bde,0x60bc0144,
+0xa4770003,0x93de9201,0x00a31702,0xf002de02,0x81020000,0x0c0007c1,
+0x60bc014d,0xa1770103,0x035ea000,0x00a2f71f,0xf0025e02,0xbc015d00,
+0xb7010360,0x5e0200a1,0x5800f002,0x6740a000,0x0081f71f,0xf002de02,
+0x81020000,0x0c0007c1,0x60bc0157,0xa1770103,0x06e08101,0x00ab77f5,
+0x1f035ea0,0x0200a2f7,0x00f0025e,0x60bc015d,0xa1b70103,0x075eb000,
+0x00a21700,0xf0025e02,0x81015d00,0x77f502e0,0xde0200ab,0x0000f002,
+0xa7006800,0x0396ce00,0xf002debf,0x02006e0c,0x0cf0025e,0x5e02005d,
+0x6f0cf002,0x02de0200,0x000000f0,0x00a70068,0x020069ce,0x00f002de,
+0x60810100,0x49300906,0xa7006800,0x00628c00,0xf0025e02,0x02007f0c,
+0x00f002de,0x5e020000,0x7f0cf002,0x02608101,0x00493009,0xf002de02,
+0x88010000,0x30090ee0,0x41b00049,0x00180027,0x2b00b000,0x00021000,
+0xf002de02,0xbc010000,0x10000360,0xe0820102,0x78100f02,0x0360bc01,
+0x00491000,0x002741b0,0x02000018,0x00f002de,0x00680000,0x70cc00a7,
+0x53de8002,0x01760c00,0x071360bc,0x0200a177,0x00f0025e,0x60900158,
+0xa2370302,0x025e0200,0x005d00f0,0xf002de02,0xbc010000,0x97071360,
+0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,0xf0025e02,0xbc015d00,
+0x77071360,0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,0xf0025e02,
+0x02005d00,0x00f002de,0xde000100,0xa6170053,0xa7806800,0x0184cc00,
+0x099ade81,0xb0004930,0x18002741,0xde020000,0x0000f002,0x0360bc01,
+0x03a13700,0xf002debf,0x0200860c,0x00f0025e,0x60870158,0xa2370306,
+0x9bde6800,0x018a0c00,0x03026087,0x0200a237,0x00f0025e,0xde02005d,
+0x0000f002,0x1f410202,0x029f0c00,0x00535e82,0x8201910c,0x97f20660,
+0x44b00094,0x00180067,0x6b44b000,0x00970600,0x006744b0,0xe8000018,
+0xf7d26844,0x006800a4,0x948c00a7,0x93de6d00,0x00994c00,0x036744e0,
+0x9003a317,0x0cf0025e,0xc585029c,0x9c0c0023,0x8ede6800,0x01962c23,
+0x020360bc,0xbc014710,0x90000360,0x60820143,0x9497f202,0x02608201,
+0x00adb7f5,0x00a70068,0x68009f8c,0xac00a700,0xde02009f,0x0000f002,
+0x1fc10102,0x02b20c00,0x00af5e85,0x8501a50c,0x77f50660,0x44b000ab,
+0x9a060067,0x6b44b000,0x009b0600,0xd36444e9,0xe800a157,0x77d368c4,
+0x5ed000a2,0xa1770087,0x8adee101,0x00a237f4,0x26865ee9,0xe800a197,
+0xb7268ade,0x5e6900a2,0xb20c008b,0x0361bc01,0x00331100,0xf4da44e1,
+0xe1003631,0x51f4de44,0x60850137,0xab77f502,0x0360bc01,0x01471001,
+0x000360bc,0x02004350,0x00f002de,0x45b00000,0x8117001f,0xb705b000,
+0x01a61700,0x040760bc,0xbc016410,0x10191360,0x60bc0165,0xa1170003,
+0xafde0502,0x00cb0c00,0x000f58b0,0x68008017,0x2c2c845e,0x5e0002d8,
+0xcb0c009b,0x03da8002,0x01c10c00,0x001f5818,0xe0008217,0x37000b5e,
+0x5e980182,0x07f6c00a,0x02debf03,0x01c40cf0,0x001fd819,0xe0008217,
+0x3700035e,0xde990182,0x07f6c00a,0x03def001,0x00803700,0xc0025ea0,
+0xb0008057,0x1600035e,0x44a00003,0x8217f0b6,0x0b5eb000,0x00051600,
+0xc00a5ee0,0xbf030696,0x0cf002de,0x58b000d8,0x82170013,0x065ee800,
+0x02a557f0,0x00afde00,0xe800d20c,0x97d4085e,0x5eb000a3,0xa5170007,
+0x8fde6a00,0x00d20c00,0xf4965ee8,0x6a00a577,0x0c0097de,0x58e800d6,
+0x05b6f416,0x17d86900,0x01d60c00,0x000360bc,0xb0000516,0x17001758,
+0x58e000a5,0x06b6f412,0x9341e000,0x00641002,0x069741e0,0xe0006550,
+0x3700875e,0x5e9000a1,0xa637009b,0x87de6800,0x01b88c00,0xf502e080,
+0xbc01ab77,0x11000360,0xde020047,0x0000f002,0x0360bc01,0x016c0100,
+0x000360bc,0xbc016d01,0x100a0760,0x60bc0164,0xa4d70b17,0x0360bc01,
+0x00a17700,0x008f42b0,0xa0008017,0xf701035e,0x5eb00080,0x6e010003,
+0xff63bc01,0x00a2f71f,0x0003de68,0xbc01eb0c,0x17000360,0x608800a2,
+0x8137f406,0xba052000,0x00f02cf0,0xc08ade68,0xe000f0cc,0x2100b305,
+0x05b0006c,0x6d21f0b6,0x035e6800,0x00f40c00,0xf0065e20,0x6e00fb0c,
+0xccc08ade,0xdebf03fb,0xf50cf002,0x8ade6d00,0x00fbccc0,0x00875eb0,
+0xb000a317,0x01009341,0x5eb00066,0x67010093,0x1b58b000,0x01a21700,
+0x000360bc,0xbc016c01,0x01000360,0x41e8006d,0x64100293,0x935ee800,
+0x00a45706,0x00875ee8,0x6900a137,0x0c0087de,0x5eb000eb,0x6501008f,
+0x8b5eb000,0x00640100,0xf002de02,0xb0000000,0x10009b05,0x58b00064,
+0x4511001b,0x9305b000,0x00600100,0x009b05b0,0xb0006201,0x01009f05,
+0x05b00063,0x61010097,0x0f58b000,0x00851700,0x000758b0,0xb0008317,
+0x17000b58,0x58980184,0x8c97f11e,0x1ed89901,0x008db7f1,0xf002de02,
+0x87010000,0x77f50260,0x05b000ab,0x80170097,0x005e6800,0x01322d2c,
+0x000360bc,0xbc011211,0x11000360,0x05b00015,0x6410009b,0x23450002,
+0x001c0d00,0x001f45b0,0xe8008117,0x37f09205,0xde6a0080,0x1a0d0003,
+0x035eb000,0x03451100,0xf002debf,0xbc011d0d,0x31000360,0xdebf0345,
+0x1d0df002,0x9305b000,0x00451100,0x008305b0,0xb0006901,0x01008b05,
+0x05b0006a,0x6b01008f,0x8705b000,0x00680100,0x00ab05b0,0x84026510,
+0x0d001f5a,0x5eb00026,0x83160017,0x325e9801,0x0187f6d0,0xd036de99,
+0x840187f6,0xf6d00260,0x05b00087,0x60010093,0x9b05b000,0x00620100,
+0x009f05b0,0xb0006301,0x01009705,0x05b00061,0x6410008b,0x0f58b000,
+0x00851700,0x000758b0,0xb0008317,0x17000b58,0x58980184,0x8c97f11e,
+0x1ed89901,0x038db7f1,0xf002debf,0x8701330d,0x77f50660,0xde0200ab,
+0x0000f002,0x8b05b000,0x00641000,0x2a93416e,0xa000400d,0xb7f0b644,
+0x5eb000a1,0x05160087,0x1258e000,0x020636f4,0x00f30000,0x6d003d0d,
+0x0d289341,0xde00023d,0x3d0d00af,0x0b60bc01,0x00425102,0x00875eb0,
+0x01026f01,0x0d00af5e,0x5eb00040,0x03160017,0x02608101,0x00ab77f5,
+0xf002de02,0x0c010000,0x17004381,0x60bc01a1,0x8a100003,0x875e6800,
+0x014e4d00,0x000360bc,0x68008a50,0x0d00075e,0x5e680056,0x4e0d0087,
+0x0360bc01,0x008ab000,0x00075e68,0x82024e2d,0x0d0003de,0x60bc014e,
+0x8a900003,0x03de8302,0x004e0d00,0xf40a60e0,0x68008ad0,0x0d00075e,
+0x42900156,0x8a30a12a,0x075e6800,0x01562d00,0xa02a4290,0x09018a10,
+0x170003de,0x5e8f01a2,0x8a50118a,0x8b5e6800,0x01560d00,0x110ee091,
+0x02008a50,0x00f002de,0xde090100,0xa4170003,0x065ae000,0x00a597f4,
+0xf4965e90,0x0302a597,0x0d0003de,0xde82025d,0x5d0d0003,0x94de8000,
+0x00a5f70a,0x00875e88,0xe000a177,0xd702875e,0xde8000a1,0xa137f496,
+0xb741e100,0x00a5f7ff,0x0187dee0,0x9000a1f7,0x9700875e,0x5e8800a1,
+0xa1570087,0x43010501,0x00a21700,0xf4865e88,0x0200a157,0x00f002de,
+0x19000200,0x0a0000df,0x53de8202,0x016d0d00,0x04026088,0xe0002490,
+0x06f3821a,0x1ae800a0,0x9f06f37e,0x02debf03,0x01e107f0,0x041660b8,
+0xbc012490,0xd0010360,0x5e050325,0x7f0df002,0x37c08702,0x03140900,
+0xf002de86,0xbc011509,0xe0000360,0x5e02003e,0xa50ef002,0x02de5c03,
+0x006f0df0,0x019b40d8,0xe000a117,0x3702875e,0x5ea80098,0x98770063,
+0x53de0201,0x01a11700,0xf202e082,0x88019497,0xe6ce84de,0x9a6e0077,
+0x7f0df37e,0x635ee800,0x0125d001,0x040660b8,0xbf032490,0x00f002de,
+0x60810102,0x77e6ce04,0x0a60b801,0x03249004,0xf002debf,0x28020200,
+0x0d00875e,0x41b00095,0xa4170093,0x9341e000,0x01647000,0x00875e0a,
+0xe800a217,0x50f49241,0x5e180163,0xa1170087,0x4260e800,0x00a237f4,
+0xf4025688,0x68000036,0x8df48e41,0x41e80091,0x6330008f,0x9341e800,
+0x00643000,0x028b5e68,0x9000890d,0x57f40256,0x58b000a3,0x0176f406,
+0x02debf03,0x00890df0,0xf4924168,0xe800958d,0x30009341,0x60bc0164,
+0x00160003,0x02debf03,0x00910df0,0x00875eb0,0x0200a117,0x00f002de,
+0x5e280200,0xab0d0087,0x875e0a01,0x00a21700,0xf49241e0,0x18016350,
+0x1700875e,0x60e800a1,0xa237f442,0x0360bc01,0x00a31700,0x009341e8,
+0xe0006430,0x97009341,0x58b000a4,0x0076f402,0x9341e000,0x00643000,
+0xf4025690,0x68000036,0x8df48e41,0x41e000a7,0x6330008f,0x8b5e6800,
+0x009f0d02,0xf4025688,0xbf03a357,0x0df002de,0x4168009f,0xab8df492,
+0x0360bc01,0x00011600,0x009341e0,0xbf036430,0x0df002de,0x5eb000a7,
+0xa1170087,0x02de0200,0x000000f0,0x00bb50b0,0xb0006510,0x17000b5a,
+0x01e000a1,0x7d2000f7,0xd201e000,0x007420f4,0x00bf50b0,0xb0006410,
+0x17001358,0x60bc0182,0x04160003,0x1b60bc01,0x0265d005,0x00b7d002,
+0xbc01b70d,0xf0051b60,0x50e00065,0x649000bb,0x0360bc01,0x01b41700,
+0x000360bc,0xbc018017,0x37000360,0x60bc0181,0xa5170003,0x0360bc01,
+0x00a61700,0x00335290,0xe000a497,0xb7018741,0x608701b5,0xa0100304,
+0x8342b000,0x00001800,0xf0d25e68,0xb000f64d,0x1000035e,0x00b000b5,
+0xb4700863,0xd3428302,0x01c40d00,0x090360bc,0xb000b510,0xf0006300,
+0x60bc01b4,0xb6101147,0x0360bc01,0x00b5d000,0x006300b0,0xb000b4b0,
+0x1800d342,0xde170300,0xcb0df002,0x02de9703,0x00cc0df0,0xf002d820,
+0x9000e32d,0x5700975e,0x50e000a1,0x6330f4ba,0x975e8901,0x00a21700,
+0xf41a5690,0x8800a357,0x57f43e60,0x5ea000a1,0xa3f7018f,0x8f5ee000,
+0x00a33700,0xf41a56a8,0xe0008635,0x3700975e,0x500202a5,0xe70d00b7,
+0x17239000,0x00a19700,0xf4865ee8,0x6900a197,0x0d00875e,0xde6900e7,
+0xe70d0487,0x875e0a01,0x00a21700,0xf4d65ee0,0xda016350,0x37f40260,
+0x608800a1,0xa137f406,0x02562000,0x00e72df4,0xf00258b0,0xe0000036,
+0x3600035a,0xde680080,0xf00d009b,0x1b23b000,0x012b1400,0x030ce08e,
+0xbf03a010,0x0df002de,0xde6d00f1,0xe4cdf08e,0x9b5e9000,0x01a25700,
+0x009b5e89,0xe000a117,0x50f4ba50,0x60880063,0xa237f43e,0x8e5e8800,
+0x00a337f4,0xf41a56a8,0xb0008655,0x75f41a56,0x5ee00086,0xa637009b,
+0x035ee000,0x00803700,0x00d35ee0,0xd000b437,0x3700075e,0x5e980281,
+0xc10d00d3,0x9341e000,0x03643000,0xf002debf,0x8001c10d,0x94850260,
+0x5ee8002c,0x8017f0d2,0x035e6800,0x030a0000,0xf002debf,0xd0008004,
+0x97c00660,0x41e00080,0xb5970097,0x13580a01,0x00a11700,0xf4d65ee0,
+0xb000b537,0x10000f58,0x56160163,0x81170003,0x13d86800,0x010d0e00,
+0x00630014,0xbc01a117,0x90090360,0x5e900062,0xa2370087,0x8a41e000,
+0x006250f4,0x01035488,0x00028016,0x0e00875e,0x54a00008,0x8016e003,
+0x035ae800,0x01801630,0x000360bc,0xbc018116,0x16000360,0x60bc0182,
+0x83160003,0x02debf03,0x00120ef0,0xc08e41e0,0x6e006390,0x2ec08ec1,
+0x41e80012,0x6330c08e,0x0358e800,0x00a13700,0xf48e41e0,0xbc016330,
+0x17000360,0x586800a5,0x2fee0313,0x8e416800,0x002f4ec0,0x040bda6d,
+0x16012f0e,0x17000356,0xde6800a1,0x2f2ef086,0x03565801,0x00a11700,
+0x0c875ee0,0xb000a257,0x1000d75e,0xde200062,0x260ea002,0x865ee000,
+0x00a337d0,0xd08e5ee0,0x6d00a377,0x4ef4025a,0x63bc012f,0xa4f71fff,
+0x8e5e6e00,0x002f8ef4,0xf40260e8,0xb0008336,0x16008f5e,0x5aa00081,
+0x8376000f,0x0360bc01,0x00a53700,0x000b5ae0,0xe8008236,0x56f4025a,
+0x5ed00080,0x80370003,0x1358e000,0x00043600,0x008f41e0,0x98026330,
+0x0e001358,0x5ee0002c,0xb53700d7,0x8ec16e00,0x00122ec0,0x000358b0,
+0xbf036310,0x0ef002de,0x5e680012,0x300e0097,0x02de0200,0x000000f0,
+0x000758b0,0xe000a117,0x16f00e58,0xd86e0003,0x372ef40e,0x865ee800,
+0x00a117c0,0xf40e58e8,0xe8000336,0x36000f58,0x5e180103,0xa1170003,
+0x03de6d00,0x003f0e02,0xf44260e8,0x9000a237,0x36f4125a,0x5a880084,
+0xa257f416,0x165a9000,0x008536f4,0xf4125ab0,0xbf038456,0x0ef002de,
+0x5a900041,0x8436f416,0x0360bc01,0x00851600,0xf002de02,0x58010000,
+0x10000360,0x60bc012a,0x04900203,0x0a60b801,0x01249004,0x0d02e089,
+0x02006c90,0x00f002de,0x47e80000,0xa1170187,0x875ed800,0x01eb1101,
+0x111f63bc,0xa000a1f7,0x31f40e5a,0x5ab000eb,0xeb110017,0x1b5ab000,
+0x00eb1100,0x001f5ab0,0xb000eb11,0x1100235a,0x5ab000eb,0xeb110027,
+0x2b5ab000,0x00eb1100,0x002f5ab0,0xb000eb11,0x1100335a,0x5ab000eb,
+0xeb110037,0x3b5aa000,0x00ebf101,0x009741b0,0x06026410,0x0e00535e,
+0x58b0005b,0xeb11003f,0x4358b000,0x00eb1100,0x004758b0,0xe000eb11,
+0x70009341,0xde060264,0x5e0e0053,0x3f58a000,0x00ebf101,0x009341e0,
+0x07026430,0x0e000fda,0x58b00061,0xeb11003f,0x4358b000,0x02eb1100,
+0x00ab4710,0xbc01640e,0x11000360,0xdebf03eb,0x610ef002,0xabc71101,
+0x01a11700,0x060360bc,0xe800ea11,0x5100875e,0xe08601eb,0xe8113d06,
+0x02de0200,0x020000f0,0x0053de00,0xbc01880e,0xb7091360,0x5e0200a1,
+0x5800f002,0x0260a501,0x00a23703,0xf0025e02,0xbc015d00,0x97091360,
+0x5e0200a1,0x5800f002,0x7e60a401,0x00a23703,0xf0025e02,0xbc015d00,
+0xf7161360,0x5e0200a1,0x5800f002,0x0260b401,0x00a23703,0xf0025e02,
+0xbc015d00,0x37161360,0x5e0200a1,0x5800f002,0x02e08601,0x00a23703,
+0xf0025e02,0xbc015d00,0x17161360,0x5e0200a1,0x5800f002,0x06e08101,
+0x01a23703,0x0306e085,0x0200a237,0x00f0025e,0x60bc015d,0xa1571f13,
+0x025e0200,0x015800f0,0x0302e081,0x0200a237,0x00f0025e,0x60bc015d,
+0xa1371f13,0x025e0200,0x015800f0,0x0306e081,0x0200a237,0x00f0025e,
+0xde02005d,0x0000f002,0x1360bc01,0x00a19709,0xf0025e02,0xa4015800,
+0x37030260,0x5e0200a2,0x5d00f002,0x1360bc01,0x00a11716,0xf0025e02,
+0x81015800,0x370302e0,0xe08501a2,0xa2370302,0x025e0200,0x015d00f0,
+0x1f1360bc,0x0200a137,0x00f0025e,0xe0810158,0xa2370302,0x025e0200,
+0x005d00f0,0xf002de02,0x00020000,0x0e0053de,0x60bc01a0,0xa1b70913,
+0x025e0200,0x015800f0,0x03026087,0x0200a237,0x00f0025e,0x60bc015d,
+0xa1970913,0x025e0200,0x015800f0,0x03066086,0x0200a237,0x00f0025e,
+0xde02005d,0x0000f002,0x1360bc01,0x00a19709,0xf0025e02,0x86015800,
+0x37030260,0x5e0200a2,0x5d00f002,0x02de0200,0x020000f0,0x00234584,
+0xbc01030f,0x17161760,0x5e0200a1,0x5800f002,0x67401e01,0x00a21700,
+0x008b5e68,0x6800b9ae,0x6e018bde,0x409c02d1,0xb60e0067,0x8726e000,
+0x00a12900,0x006744b0,0xe0000018,0x69006744,0x5e830391,0xb30ef002,
+0x46a66800,0x01af2e23,0x000360bc,0x83023b20,0x0e004fa6,0xe08201ed,
+0x93693205,0x0360bc01,0x033b4000,0xf002debf,0x1c01ed0e,0x17006740,
+0x5e6800a2,0xc5ce008b,0x02debf03,0x01d10ef0,0x32016081,0x80029369,
+0x0e004fa6,0xe08001bf,0x93693205,0x6744b000,0x00001800,0x006744b0,
+0xbf039109,0x0ef002de,0x266800d2,0xd20e0023,0x6544e800,0x01a13732,
+0x000360bc,0x6e003ba0,0x0e31855e,0x60bc01ed,0x3b000003,0x02debf03,
+0x01d20ef0,0x3201e080,0x81029369,0x0e004f26,0x608101cb,0x93693205,
+0x6744b000,0x00001800,0x006744b0,0xbf039209,0x0ef002de,0x266800d2,
+0xd10e0027,0x6544e800,0x01a15732,0x000360bc,0x6e003bc0,0x2e31855e,
+0x60bc01ed,0x3b000003,0x02debf03,0x01d20ef0,0x3201e088,0x81029369,
+0x0e004fa6,0x400602ec,0xd90e0037,0x37c00502,0x01d90e00,0x32056080,
+0xb0009369,0x18006744,0x44b00000,0x90090067,0x02debf03,0x02ec0ef0,
+0x004f2600,0xe800ec0e,0x17326544,0x266800a1,0xec0e001f,0x855e6e00,
+0x03deee30,0xf002debf,0x8001ec0e,0x69320160,0x42830293,0xea0e001f,
+0x23c58502,0x01e60e00,0x020360bc,0x83023b20,0x0e004fa6,0xe08201ed,
+0x93693205,0x0360bc01,0x033b4002,0xf002debf,0x8201ed0e,0x69320560,
+0x60bc0193,0xa1b70817,0x2761bc01,0x00a2970c,0xf0025e02,0xe0005d00,
+0x29003326,0x6080018c,0x93693201,0x02debf03,0x02040ff0,0x004f2602,
+0xbc01f10e,0xb7081760,0x61bc01a1,0xa2170027,0x025e0200,0x015d00f0,
+0x0906e081,0xb0004930,0x1700875e,0x5eb000a1,0xa1170087,0x875eb000,
+0x01a11700,0x0902e081,0xe0004930,0x29002b26,0x44b0008a,0x8e090067,
+0x4fa68202,0x00030f00,0x008b26e0,0xb000a229,0x09002b26,0x44b0008b,
+0x8d090067,0xef00b000,0x00510000,0x00fb00b0,0xc0013f00,0x69320160,
+0x5e020093,0x3b09f002,0x025e0100,0x010000f0,0x0906e084,0xbf034810,
+0x08f002de,0x60c0015e,0x93693201,0x02de0200,0x000000f0,0x00000000,
+0x00000000,0x0000692a,0x8de991b9,0x00000000
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/plt_firmware.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6351 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Binary image file name: init_plt.dat */
+
+const unsigned int plt_firmware[] = {
+0x19171513,0x00000001,0x00000140,0x034d564e,0x00000000,0xa1003030,
+0x5544332f,0x02d09600,0x00030492,0x432f14e4,0x002104b9,0x00000000,
+0x00000000,0x17cc0000,0xfebbfa3a,0xfa3a17cc,0x1737febb,0xfea3fa48,
+0x0a030d0a,0x0b0a030d,0xf65e3e03,0x0002005a,0x000000ff,0x00000800,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x098a1d1e,
+0x14501360,0x164415a4,0x04000400,0x04000400,0x50500400,0x08505050,
+0x00030707,0xfefefefe,0x00000000,0x00000000,0xfafafa00,0xfafafafa,
+0xf2f2fafa,0xf2f2f2f2,0x07f2f2f2,0xfe000307,0x00fefefe,0xfe000000,
+0xfafefefe,0xfafafafa,0xf2fafafa,0xf2f2f2f2,0x00f2f2f2,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x20202428,0x24002020,0x20202020,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,
+0x00025018,0x00000000,0x000001e5,0x00000095,0x00000095,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000095,
+0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,
+0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,
+0x00000095,0x00000095,0x00000095,0x47004803,0x00000000,0x53485244,
+0x00000000,0x000001e5,0xb5004668,0xf3ef6982,0x21038305,0xd10d428b,
+0x68194b17,0x4b176019,0xd0074219,0x68194b16,0x4b166019,0xd0014219,
+0x61823202,0x30206941,0x3820b407,0xb4024661,0xb4f0b084,0xb40ec80e,
+0xb402c802,0x69c13810,0xf3efb402,0xb4028103,0xb4026981,0x8105f3ef,
+0x4809b402,0x29006801,0x4668d0fe,0xf802f000,0xbd00b014,0x00004708,
+0xe000ed2c,0x40000000,0xe000ed28,0x00008080,0x000001b8,0x4208490a,
+0xb662d002,0x400843c9,0x42084908,0xb661d002,0x400843c9,0x40084906,
+0xd0032800,0x680a4905,0x600a4302,0x00004770,0x80000000,0x40000000,
+0x0000ffff,0xe000e100,0x4208490a,0xb672d002,0x400843c9,0x42084908,
+0xb671d002,0x400843c9,0x40084906,0xd0042800,0x680a4905,0x400243c0,
+0x4770600a,0x80000000,0x40000000,0x0000ffff,0xe000e180,0x68094902,
+0x58882290,0x00004770,0x000001c0,0x68094902,0x5088229c,0x00004770,
+0x000001c0,0xbbadbadd,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x68114a02,0x1c086010,0x00004770,0x000001b8,0x60084901,
+0x0000e7fe,0x000001b0,0x68014873,0x400f4f73,0xd132423f,0x46982300,
+0x4a71469a,0x2118400a,0x497040ca,0x4c705843,0x4d70401c,0xd10442ac,
+0x4d6f4680,0x46a91945,0x4d6ee00e,0xd10b42ac,0x4d6b4682,0x46ab1945,
+0x1c1d240f,0x4c6a4023,0x0a2d4025,0x469c432b,0x45982300,0x459ad001,
+0x4b66d104,0x3a0118c0,0xe005d1dc,0x42004650,0x4640d002,0xd1294200,
+0x21fce7fe,0x680a5841,0x4013230f,0xd0f12b0f,0xd0012b01,0xe7f63104,
+0x4b5b3108,0x4c5b4013,0xd10642a3,0xf8dcf000,0xf0004680,0x4681f8e5,
+0x4c57e7e9,0xd1e642a3,0x681b1f0b,0x40234c55,0x40e32418,0xf000469c,
+0x4682f8cb,0xf8d4f000,0xe7d84683,0x22214950,0x4a415042,0x5889494f,
+0x421923ff,0x6851d022,0x42194b4d,0x6811d01e,0x40194b4c,0x24036ad3,
+0x4c4b4023,0x240342a1,0xe013d000,0xd01142a3,0x4c474b48,0xd00042a1,
+0x4947e00c,0x42195889,0x4946d008,0x40195889,0xd1fa4299,0x69114b37,
+0xd0fc4219,0x423f4649,0x2398d104,0x241058cb,0xe00140e3,0x58cb4b3e,
+0x4023241c,0xd0012b00,0xf8a4f000,0x493b4640,0x46486008,0x6008493a,
+0x600f493a,0x46514660,0x588a2200,0x21f01c13,0x091b400b,0xd3072803,
+0x49351c16,0x2114400e,0x2e0040ce,0x3b01d000,0x400a210f,0x2401320e,
+0x1c254094,0x2803435d,0x2e00d306,0x3e01d004,0x2401360e,0x192d40b4,
+0xd0fe2d00,0x600d4929,0x46ad3d04,0x43ec9d00,0x41dd2310,0xd10942ac,
+0x00a40c24,0x602c4d24,0x1b1b466b,0x602b4d23,0x469d3b04,0x49234822,
+0xc0042200,0xd8fc4281,0xfc7ef016,0x0000e7fe,0x18000000,0xf0000000,
+0x0f000000,0x00000ffc,0x00008ff0,0x000082a0,0x00000f00,0x000080e0,
+0x00007000,0x00001000,0x000fff00,0x00082a00,0x00080e00,0xff000000,
+0x000001e0,0x00000604,0x00380000,0x0000ffff,0x00004329,0x00000400,
+0x00000618,0x0000060c,0x00000408,0x000001c0,0x000001c4,0x000001bc,
+0x00f00000,0x0001bc38,0x0001bc40,0x0001bc3c,0x0001c530,0x0001c710,
+0x220f6808,0x40023104,0xd1f92a05,0x40104a01,0x000046f7,0xfffff000,
+0x220f6808,0x40023104,0xd1f92a05,0x42102280,0x4a01d0f6,0x46f74010,
+0xfffff000,0x0000e7fe,0x47706cc0,0x6642b510,0xf8d06683,0xf8d02080,
+0x9c02308c,0x0382eb03,0x3080f8d3,0x660165c4,0xbd106583,0x66032300,
+0x46c04770,0xb9336803,0x308cf8d0,0x31c0f8d3,0x0fe8f8d3,0x2b01e009,
+0x2000d001,0xf8d0e005,0xf8d3308c,0xf8d332c0,0x47700100,0x308cf8d0,
+0x2080f8d0,0x0382eb03,0x0080f8d3,0x46c04770,0x0080f8d0,0x46c04770,
+0x4604b570,0x5080f8d0,0xffecf7ff,0x20004601,0xe0094602,0x308cf8d4,
+0x0382eb03,0x3080f8d3,0xbf08428b,0x32013001,0xd1f342aa,0x46c0bd70,
+0xf3c06980,0x477060c0,0x4694b510,0xf8d04604,0x20002084,0xe00c4686,
+0x308cf8d4,0x0380eb03,0x3080f8d3,0xd103428b,0xd00545e6,0x0e01f10e,
+0x42903001,0x2011d1f0,0x46c0bd10,0x46c04770,0x30fff04f,0x46c04770,
+0x47702000,0xf0006bc0,0x28030003,0x2000bf14,0x47702001,0x4a036bc3,
+0x0303f003,0x0023f852,0x46c04770,0x00016eb0,0x460db570,0xf7ff4604,
+0x462aff73,0x46204601,0xfc3cf001,0x46c0bd70,0x4604b510,0xff68f7ff,
+0x46204601,0xfc22f001,0x46c0bd10,0x4604b510,0xff5ef7ff,0x46204601,
+0xfc44f001,0x46c0bd10,0x4604b510,0x2200b330,0x108cf8d4,0x3022f851,
+0x2300b113,0x3022f841,0x2a103201,0xf8d4d1f4,0xf893308c,0x1e4a12c4,
+0xf8832901,0xd10922c4,0x7232f44f,0xf8d46ce0,0xf003108c,0x4b06fd6d,
+0x601a2200,0x429c4b05,0x6ce0d004,0x22904621,0xfd62f003,0x46c0bd10,
+0x0001c538,0x0001c540,0x2000b510,0xff96f000,0x46c0bd10,0x490bb510,
+0xf7ff4604,0xb280fff5,0x6f60b978,0xf0004907,0xb280ff89,0x6f60b948,
+0xf0004905,0xf64fff83,0xb28073ff,0xbf082800,0xbd104618,0x00016ec0,
+0x00016ec6,0xe92d6e01,0x460441f0,0xf8d0b171,0xf8d02080,0xeb03308c,
+0xf8d30382,0x6d832080,0xd103429a,0x47886dc0,0xe0004606,0x46202600,
+0xf0016ce1,0x6e65fc6d,0xb16d4607,0x2080f8d4,0x308cf8d4,0x0382eb03,
+0x2080f8d3,0x429a6da3,0x6de0d102,0x47a84631,0xe8bd4638,0x46c081f0,
+0x4604b510,0xfed4f7ff,0x46204601,0xfccef001,0x46c0bd10,0x4604b510,
+0xfecaf7ff,0x46204601,0xfc1ef001,0x46c0bd10,0xe92d6e01,0x460441f0,
+0xf8d0b171,0xf8d02080,0xeb03308c,0xf8d30382,0x6d832080,0xd103429a,
+0x47886dc0,0xe0004606,0x46202600,0xf0016ce1,0x6e65fbd9,0xb16d4607,
+0x2080f8d4,0x308cf8d4,0x0382eb03,0x2080f8d3,0x429a6da3,0x6de0d102,
+0x47a84631,0xe8bd4638,0x46c081f0,0xb5106803,0xf000b90b,0xbd10fa49,
+0xb5106803,0xf000b913,0xe003fb35,0xd1012b01,0xfc88f000,0x46c0bd10,
+0xb5106803,0xf000b913,0xe003fa89,0xd1012b01,0xfc66f000,0x46c0bd10,
+0x6804b537,0xb91c9d06,0xf0009500,0xe006fa3f,0xd0012c01,0xe0022000,
+0xf0009500,0xbd3efc8b,0x4604b573,0xf7ff460e,0x4632fe63,0x46204601,
+0xfd68f001,0x2b146963,0x256ddd17,0x200ae003,0xfff8f003,0x21003d0a,
+0x460b2210,0x91004620,0xffd6f7ff,0xbf142e00,0x5380f44f,0xf4002300,
+0x42985080,0x2d09d001,0xf44fd1e9,0xf003707a,0xbd7cffe1,0xb5132b02,
+0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,0xe004401c,0xea446812,
+0xea230302,0x40210402,0x22649100,0x46232100,0xffaef7ff,0x46c0bd1c,
+0x0001c534,0xb5132b02,0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,
+0xe004401c,0xea446812,0xea230302,0x40210402,0x22689100,0x46232100,
+0xff92f7ff,0x46c0bd1c,0x0001c534,0xb5132b02,0x4611460c,0xb902d00c,
+0x4a09b154,0x6813b113,0xe004401c,0xea446812,0xea230302,0x40210402,
+0x226c9100,0x46232100,0xff76f7ff,0x46c0bd1c,0x0001c534,0xb5106803,
+0xf000b913,0xe005f96d,0xd0012b01,0xe0012000,0xfb98f000,0x46c0bd10,
+0xb5106803,0xf000b913,0xe005f93d,0xd0012b01,0xe0012000,0xfbacf000,
+0x46c0bd10,0xb5106803,0xf000b913,0xe005f90d,0xd0012b01,0xe0012000,
+0xfb8ef000,0x46c0bd10,0xb5106803,0xf000b913,0xe005f963,0xd0012b01,
+0xe0012000,0xfb2ef000,0x46c0bd10,0x4604b510,0xfe02f7ff,0x4601280f,
+0x6823d80b,0x4620b91b,0xf94ef000,0x2b01e006,0x4620d103,0xfb1af000,
+0x2000e000,0x46c0bd10,0x41f0e92d,0x4616460c,0x6100f44f,0x46052200,
+0x8080f8d0,0xffdef7ff,0xf8c02300,0x33053658,0x465cf8c0,0xf8c04641,
+0xf8c03658,0x4628665c,0xffc2f7ff,0x81f0e8bd,0x41f0e92d,0x4616460c,
+0x6100f44f,0x46052200,0x8080f8d0,0xffc2f7ff,0xf8c02300,0xf8d03658,
+0x4641365c,0xf0436023,0xf8c00301,0x2305365c,0x3658f8c0,0x365cf8d0,
+0xf0436033,0xf8c04300,0x4628365c,0xff9cf7ff,0x81f0e8bd,0x41f0e92d,
+0x4616460d,0x6100f44f,0x46042200,0x8080f8d0,0xff9cf7ff,0xf8c02300,
+0xf8d03650,0x46413654,0x0305ea23,0xf8c04333,0x46203654,0xff80f7ff,
+0x81f0e8bd,0xf2446b02,0x429a3319,0x4605b573,0xd11b460e,0xb9cc6b44,
+0x2302b1d9,0x46219300,0x33fff04f,0x72f0f44f,0xfeb2f7ff,0xf6404622,
+0x4628011a,0xff72f7ff,0x21014628,0xfe9cf7ff,0xf44f4628,0x46226100,
+0xff68f7ff,0xbf082e01,0x46282602,0xf2402100,0xf04f6234,0x960033ff,
+0xfe96f7ff,0x46c0bd7c,0xb5104b03,0xfb03681b,0xf7fff101,0xbd10ffc7,
+0x0001c53c,0xb5106803,0xf000b913,0xe005f833,0xd0012b01,0xe0012000,
+0xfaa6f000,0x46c0bd10,0xb5106803,0xf000b913,0xe005f81b,0xd0012b01,
+0xe0012000,0xfa90f000,0x46c0bd10,0x47706808,0x4770600a,0xb5106fc1,
+0x6170f501,0xf7ff31fc,0xf648fff5,0xea0073f0,0x09180303,0x46c0bd10,
+0xb5106fc1,0x6170f501,0xf7ff3118,0xf000ffe7,0xbd10003f,0xb5106fc1,
+0x6170f501,0xf7ff31fc,0xf400ffdd,0xf00043e0,0xea40000f,0xbd102013,
+0xe92d6fc3,0x460541f0,0xf5034617,0x460e6870,0xb172b901,0x0498f108,
+0xf7ff4621,0xea6fffc7,0xea004306,0x46210203,0xea424628,0xf7ff4207,
+0x4628ffbf,0x0198f108,0xffb8f7ff,0xe8bd0c00,0x46c081f0,0xe92d6fc3,
+0x460541f0,0xf5034617,0x460e6870,0xb172b901,0x049cf108,0xf7ff4621,
+0xea6fffa5,0xea004306,0x46210203,0xea424628,0xf7ff4207,0x4628ff9d,
+0x019cf108,0xff96f7ff,0xe8bd0c00,0x46c081f0,0xb5106fc1,0x6170f501,
+0xf7ff3198,0x4b04ff8b,0x0303ea00,0x3f80f5b3,0x2000bf14,0xbd102001,
+0x00010007,0x208cf8d0,0x0381eb02,0x01c0f8d3,0x3021f852,0xf842b90b,
+0xf8520021,0x47700021,0x3084f8d0,0x4299b570,0x460d4604,0x2000d301,
+0xf7ffe004,0xf8c4ffe7,0x67e05080,0x46c0bd70,0x46c04770,0x0303f010,
+0xf020d102,0xe00c00ff,0xd1042b01,0x607ef420,0x001ff020,0x2b02e005,
+0x2000d001,0x0c00e001,0x47700400,0x41f0e92d,0xf8d04696,0x461c208c,
+0x3021f852,0x9f064606,0xeb02b92b,0xf8d30381,0xf84231c0,0xf8d63021,
+0xf853308c,0xeb0e1021,0xb9040501,0xf5beb1b7,0xea6f6f70,0xd30a0404,
+0xf7ff4629,0xea00ff2b,0x46290204,0x433a4630,0xff26f7ff,0xf85ee009,
+0x40233001,0xf84e433b,0xe0073001,0x6f70f5be,0x4630d304,0xf7ff4629,
+0xe000ff15,0xe8bd6828,0x46c081f0,0xe92d6fc3,0xf50341f3,0xf1076770,
+0x46880498,0x46054621,0xff04f7ff,0x0f01f010,0x808cf040,0x46214628,
+0xfefcf7ff,0x3f80f410,0x4621d078,0xf7ff4628,0x4621fef5,0x0202f040,
+0xf7ff4628,0x4621fef1,0xf7ff4628,0x9001feeb,0xf0032001,0x4e3afd6f,
+0x200ae003,0xfd6af003,0xf1073e0a,0x4628049c,0xf7ff4621,0xf010fedb,
+0xd0010f04,0xd1f02e09,0x46284621,0xfed2f7ff,0xf1074628,0xf7ff01f8,
+0xf010fecd,0xd0230f80,0x0490f107,0x46284621,0xfec4f7ff,0xf0404621,
+0x46287200,0xfec0f7ff,0x46284621,0xfebaf7ff,0x20019001,0xfd3ef003,
+0xe0034c21,0xf003200a,0x3c0afd39,0xf1074628,0xf7ff0190,0xf010feab,
+0xd0017fc0,0xd1f12c09,0x0498f107,0x4208ea4f,0x1203f042,0x46214628,
+0xfe9ef7ff,0x46284621,0xfe98f7ff,0x200a9001,0xfd1cf003,0xf1074628,
+0xf7ff01f8,0xf010fe8f,0xd00b0f80,0x0490f107,0x46284621,0xfe86f7ff,
+0xf0204621,0x46287200,0xfe82f7ff,0x4208ea4f,0xf1074628,0xf0420198,
+0xf7ff0203,0x2001fe79,0xfcfcf003,0x81fce8bd,0x000186a9,0x43f7e92d,
+0x807cf8d0,0x0501ea42,0x6470f508,0x46294689,0x0503f045,0xf1044606,
+0x042d0798,0xff4ef7ff,0x0201f045,0x46394630,0xfe5af7ff,0x46304639,
+0xfe54f7ff,0x9001349c,0xf0032001,0x4630fcd7,0xf7ff4621,0xf010fe4b,
+0xd0040f01,0x46214630,0xf7ff2200,0xf508fe45,0x46306479,0xf7ff4621,
+0x9001fe3d,0xf4139b01,0xd0092fc0,0x46304621,0xfe34f7ff,0xf4204621,
+0x463022c0,0xfe30f7ff,0x4630462a,0xf7ff4639,0x4639fe2b,0xf7ff4630,
+0x9001fe25,0xf0032001,0xf049fca9,0x46300201,0x04124639,0xfe1cf7ff,
+0x46394630,0xfe16f7ff,0x20019001,0xfc9af003,0x83fee8bd,0x469eb500,
+0xf853680b,0x600b0b04,0xf010b142,0xd0f70f01,0xd003280f,0x0302ea00,
+0xd1f14573,0x46c0bd00,0x47f0e92d,0x22014615,0x46074613,0xf8dd460e,
+0xf8dd8028,0xf8dd902c,0xf7ffa030,0xf000ffdf,0x2b040306,0xd1084604,
+0x2303f3c0,0xd10442ab,0xf0009b08,0x429a02c0,0x6833d004,0x3b042400,
+0xe0386033,0x637ef420,0xf0239a09,0x6013031f,0x0308f010,0x2200d008,
+0x46314638,0xf7ff4613,0xf8c8ffbd,0xe0010000,0x3000f8c8,0x0230f004,
+0x2a302500,0x5000f8ca,0x462bd117,0x46314638,0xf7ff462a,0xf420ffab,
+0xf023637e,0xf010031f,0xf8c90f08,0xd00e3000,0x46314638,0x462b462a,
+0xff9cf7ff,0x0000f8ca,0x0912e005,0x5380f44f,0xf8c94093,0x46203000,
+0x87f0e8bd,0x208cf8d0,0xea4fb530,0xeb0e0e81,0xf8d30302,0xf8d341c0,
+0xf8d05280,0x42993084,0x2400d301,0xf852e01a,0xb90b3021,0x4021f842,
+0x308cf8d0,0x4021f853,0x0203eb0e,0xf8d267c4,0xb90b3240,0x5240f8c2,
+0x308cf8d0,0x1080f8c0,0xf8d34473,0x67c43240,0x3088f8c0,0xbd304620,
+0x3088f8d0,0x0100f8d3,0x001ff000,0x46c04770,0x308cf8d0,0x2080f8d0,
+0x0382eb03,0x0103f893,0x46c04770,0x2088f8d0,0x3408f8d2,0x0303f003,
+0xd0012b01,0xe0052000,0x3800f8d2,0x0301f003,0x0001f083,0x46c04770,
+0xf8d0b500,0x468e0088,0xb132b901,0x3408f8d0,0x030eea23,0xf8c04313,
+0xf8d03408,0xbd000408,0xf8d0b500,0x468e0088,0xb132b901,0x3500f8d0,
+0x030eea23,0xf8c04313,0xf8d03500,0xbd000500,0xf8d0b513,0xf8d44088,
+0xf0133800,0xd10c0f01,0x1408f8c4,0x3408f8d4,0x9301200a,0xfba6f003,
+0xf8c42001,0xf0030800,0xbd1cfba1,0xf8d0b537,0x460c5088,0x0101ea42,
+0xffe2f7ff,0x0303f044,0x3408f8c5,0x3408f8d5,0x93012001,0xf8c52300,
+0xf0443800,0xf0030401,0xf8c5fb89,0xf8d54408,0x20013408,0xf0039301,
+0xbd3efb81,0x4604b570,0x008cf8d0,0xeb004696,0x461d0281,0x3240f8d2,
+0xb91b9e04,0x31c0f8d2,0x3021f840,0x308cf8d4,0x0021f853,0x0200eb0e,
+0xb136b905,0x3000f85e,0x0305ea23,0xf84e4333,0x68103000,0x46c0bd70,
+0xe0022000,0x68098a8b,0x290018c0,0x4770d1fa,0xe0004608,0x68034618,
+0xd1fb2b00,0x46c04770,0xe0012000,0x30016809,0xd1fb2900,0x46c04770,
+0xb510230c,0xfb014614,0x68930203,0x68d3b113,0xe000605c,0x220c6094,
+0x0202fb01,0x60d48a13,0x82133301,0x330188c3,0x884380c3,0xbfbc428b,
+0x8043b2cb,0xbd104620,0xb500230c,0x4611468e,0x0203fb0e,0xb9036893,
+0x689360d1,0x604b6091,0x33018a13,0x88c38213,0x80c33301,0x45738843,
+0xfa5fbfbc,0x8043f38e,0xbd004608,0xfb01230c,0xb5100203,0x68904604,
+0x6843b158,0xb9036093,0x8a1360d3,0x82133b01,0x3b0188e3,0x230080e3,
+0xbd106043,0xfb01230c,0xb5100303,0x68984604,0x68dbb1c0,0xe0012200,
+0x68404602,0xd1fb4298,0x2300b112,0xe0036053,0xfb01230c,0x609a4303,
+0xfb01230c,0x60da4303,0x3a018a1a,0x88e3821a,0x80e33b01,0x46c0bd10,
+0x4604b510,0xb18088c0,0xe002f8b4,0x20004622,0x6893e003,0xb913320c,
+0x45703001,0xb101d1f9,0x230c6008,0x4303fb00,0xbd1068d8,0x4604b530,
+0x460888e3,0x2b004615,0xe001d031,0x80631e53,0xb15b8863,0x230c461a,
+0x4303fb02,0x2b00689b,0xe004d0f4,0xb312390c,0xe0053a01,0x230c461a,
+0xf303fb02,0x18e13308,0x40932301,0xd0f14203,0x2b00680b,0x230cd0ee,
+0x4103fb02,0xb1786888,0x608b6843,0x60cbb903,0x3b018a0b,0xb105820b,
+0x88e3602a,0x80e33b01,0x60432300,0x2000e000,0x46c0bd30,0x460db530,
+0x3001e000,0xe000f890,0xf8134b2c,0xf013300e,0xd1f60320,0x0f2bf1be,
+0x3001d101,0xf1bee002,0xd0010f2d,0xe001461c,0x24013001,0x7803b982,
+0xd0012b30,0xe016320a,0x1c427843,0xd0042b78,0xd0022b58,0x22084610,
+0x3002e00d,0xe00a2210,0xd1082a10,0x2b307803,0x7843d105,0xd0012b78,
+0xd1002b58,0xf04f3002,0xe0080c00,0x3c0cfb02,0xd203458c,0xf04fb914,
+0xe01d3cff,0xf8903001,0x4b0ee000,0xf8134661,0xf013300e,0xd00e0f44,
+0x0f04f013,0xf1aed002,0xe0060330,0x0f02f013,0xf1aebf14,0xf1ae0357,
+0x42930337,0xb10cd3de,0x0c00f1cc,0x6028b105,0xbd304660,0x00016efe,
+0x460db537,0x24009001,0x98012210,0xf7ffa901,0x9b01ff95,0xf8135560,
+0x34012b01,0xb10a9301,0xd1f12c06,0xbf142c06,0x20012000,0x46c0bd3e,
+0x89034619,0x2b08b510,0xe8dfd817,0x050cf003,0x05050505,0x00080505,
+0xdd092a03,0x8943e00b,0xdb05429a,0xb141e007,0xf06fb12a,0xe006000e,
+0x000df06f,0x2000e003,0xf06fe001,0xbd100016,0xf810e005,0xea823c01,
+0x4a040303,0x39015cd2,0xf1b13001,0xd1f43fff,0x47704610,0x00017640,
+0x1841b500,0xe00a4696,0x3b01f810,0xea8e4a06,0xf0030303,0xf85203ff,
+0xea833023,0x42882e1e,0x4670d3f2,0x46c0bd00,0x00017240,0x4684b500,
+0x46862000,0xf81ee00a,0xe003200c,0x30011e53,0x0202ea03,0xd1f92a00,
+0x0e01f10e,0xd1f2458e,0x46c0bd00,0x60c26042,0x60816001,0x46c04770,
+0xb517b40e,0x4604ab05,0x2b04f853,0x68616800,0xf0009301,0xf1b0f907,
+0xd0033fff,0x42986863,0xb910da00,0x60632300,0x1a1be004,0x68236063,
+0x6023181b,0x401ee8bd,0x4770b003,0xb51328ff,0x460c4686,0xf000d808,
+0x4a0c030f,0x46089300,0x1303f3ce,0xe00d2108,0x5200ea4f,0xf4000d12,
+0x92004370,0x46084a06,0x5f80f5b3,0x2341bf14,0x21082350,0xfb1ef000,
+0xbd1c4620,0x0001702d,0x0001700d,0x7842b510,0x7803b086,0x78829200,
+0x9201460c,0x920278c2,0x92037902,0x46087942,0x21129204,0xf0004a02,
+0x4620fb05,0xbd10b006,0x00017220,0x4604b570,0xb1e9460e,0xf0004608,
+0x4605f9e5,0xe00fb1c0,0x46314620,0xf000462a,0xb928f9b3,0x2b3d5d63,
+0x1c63d102,0xe00c1958,0x3b01f814,0xd1fb2b00,0x7823b114,0xd1eb2b00,
+0xf0054630,0xe000f991,0xbd702000,0xf7ffb510,0xb118ffd9,0x460a2100,
+0xfea0f7ff,0x46c0bd10,0x4614b570,0xfb01220c,0x460ef202,0x21003208,
+0xf0004605,0x462bfa5d,0x802e2200,0xe00280ac,0x320188a9,0x330c80d9,
+0xdbf942b2,0x46c0bd70,0x41f0e92d,0x230c461f,0x1303fb02,0x6899460d,
+0x46164680,0x240ce011,0x5404fb06,0x4640684b,0x230060a3,0x463a604b,
+0xfd6af002,0x68a18a23,0x82233b01,0x3b0188eb,0x290080eb,0x230cd1eb,
+0x5303fb06,0xe8bd60d9,0x46c081f0,0x41f0e92d,0x460d4607,0x24004616,
+0x4622e006,0x46294638,0xf7ff4633,0x3401ffcd,0x429c882b,0xe8bddbf5,
+0x46c081f0,0xb085b5f0,0x9e0b9c0a,0x460f4605,0x4611469e,0x200046ec,
+0xf2fefbb1,0x1312fb0e,0xf10c5cf1,0xf80d0c01,0x30011000,0x2a004611,
+0xb10cd1f2,0xdc014284,0xe0154662,0x0e04ebc0,0x46724661,0x2330e003,
+0x3c01f801,0x31013a01,0xd1f82a00,0x44f44470,0x42bde7ee,0xf812bf9c,
+0x702b3c01,0x3a013501,0x429a466b,0xb005d1f5,0x46c0bdf0,0x47f3e92d,
+0x461d4401,0xf1001e4f,0x468133ff,0xbf38429f,0x37fff04f,0xf04f4604,
+0xe0d90a00,0xd0052b25,0xbf9842bc,0x34017023,0xe0d13201,0x1c567853,
+0xbf082b23,0x78333601,0x0e00f04f,0xbf082b2d,0xe00b3601,0x0330f1a2,
+0xf816449e,0x5ccb3f01,0x0f04f013,0x230ad002,0xfe03fb0e,0xb1e27832,
+0x5c8b4962,0x0304f013,0x2a2ed1ec,0x3601d115,0xe00b469a,0x0330f1a2,
+0xf816449a,0x5ccb3f01,0x0f04f013,0x230ad002,0xfa03fb0a,0xb1227832,
+0x5c8b4956,0x0f04f013,0x7833d1ec,0xbf082b6c,0x78303601,0xd0462869,
+0x2858d809,0xd801d063,0xe0082850,0xd07c2863,0xd03c2864,0x2873e081,
+0xd802d008,0xd0652870,0x2875e07b,0x2878d045,0xe076d051,0x4b46682a,
+0x0804f105,0xbf082a00,0xf1be461a,0xd1170f00,0x0f00f1ba,0xe010d005,
+0xbf9842bc,0x34017023,0x78133201,0xd1f72b00,0x42bce064,0x7023bf98,
+0x32013401,0x3efff11e,0x4621d102,0xe0094672,0x2b007813,0xe7f8d1f1,
+0xd80142bc,0x70232320,0x3a013401,0xd1f72a00,0x040eeb01,0x682ae04a,
+0xda052a00,0xd80142bc,0x7023232d,0x42523401,0xf1054b2a,0x46200804,
+0xf8cd4639,0x9301e000,0x4b26e008,0xe000f8cd,0x682a9301,0x0804f105,
+0x46394620,0xf7ff230a,0x1824ff0d,0x4b1fe02a,0xf855491f,0x28582b04,
+0x4619bf08,0x46a89101,0x46394620,0xf8cd2310,0xe7ece000,0x49184b17,
+0x2b04f855,0xbf082850,0x23084619,0x91019300,0x462046a8,0x18db4639,
+0x682be7dd,0xbf9842bc,0xf1057023,0x34010804,0x42bce004,0x7020bf98,
+0x340146a8,0x46451c72,0x2b007813,0xaf22f47f,0xbf9542bc,0x0004ebc9,
+0x0007ebc9,0x703b7023,0x87fce8bd,0x00016efe,0x00017751,0x00017758,
+0x00017740,0x460cb510,0xf06f4613,0x46224100,0xfef8f7ff,0x46c0bd10,
+0x4684b500,0x0e00f04f,0xe00e4610,0x200cf81e,0x3001f81e,0xd202429a,
+0x30fff04f,0xf10ee007,0xd9010e01,0xe0022001,0x28003801,0xbd00d1ee,
+0xeb00b500,0x46020e02,0xd00a4572,0xf802780b,0xb1233b01,0xe7f73101,
+0xf8022300,0x45723b01,0xbd00d1fa,0x20004602,0x3001e000,0x2b005c83,
+0x4770d1fb,0xe0064602,0xd3114283,0x2001d901,0x3201e010,0x78083101,
+0x7813b110,0xd1f32b00,0xb1237813,0x0001f1d0,0x2000bf38,0xb108e002,
+0x30fff04f,0x46c04770,0x4604b510,0x4283e007,0xd901d315,0xe0162001,
+0x31013401,0x78083a01,0x7823b120,0x2a00b113,0xe00bd1f1,0x7823b152,
+0xf1d0b123,0xbf380001,0xe0042000,0xf04fb110,0xe00030ff,0xbd102000,
+0xf04fb500,0x78020e00,0x429ab2cb,0x4686bf08,0x3001b10a,0x4670e7f7,
+0x46c0bd00,0xe000b510,0xf8903001,0x4b29e000,0x300ef813,0x0320f013,
+0xf1bed1f6,0xd1010f2b,0xe0023001,0x0f2df1be,0x461cd001,0x3001e001,
+0xb9822401,0x2b307803,0x320ad001,0x7843e016,0x2b781c42,0x2b58d004,
+0x4610d002,0xe00d2208,0x22103002,0x2a10e00a,0x7803d108,0xd1052b30,
+0x2b787843,0x2b58d001,0x3002d100,0x0c00f04f,0xfb02e002,0x30013c0c,
+0xe000f890,0xf8134b0d,0xf013300e,0xd00e0f44,0x0f04f013,0xf1aed002,
+0xe0060330,0x0f02f013,0xf1aebf14,0xf1ae0357,0x42930337,0xb10cd3e5,
+0x0c00f1cc,0x6008b101,0xbd104660,0x00016efe,0xb5002a07,0xf010d90f,
+0xd10c0f03,0x460bb909,0xb2cbe004,0x2303ea43,0x4303ea43,0x2a033a04,
+0x3b04f840,0x4613d8fa,0x0e00f04f,0xf80ee004,0x3b011000,0x0e01f10e,
+0xd1f82b00,0xbd001880,0xb5002a03,0xd90c4684,0x0f03f011,0xf01cd109,
+0xd1060f03,0x3b04f851,0x2a033a04,0x3b04f840,0xf04fd8f8,0xe0060e00,
+0x3001f81e,0xf80e3a01,0xf10e3000,0x2a000e01,0x4660d1f6,0x46c0bd00,
+0xb530b40f,0xab46b0c3,0x2b04f853,0x3801a801,0x1101f240,0xf7ff9341,
+0x2400fdd5,0xe0054605,0x3b01ab01,0xf0025ce0,0x3401fb5b,0xdbf742ac,
+0xb0434628,0x4030e8bd,0x4770b004,0xb503b40e,0xf852aa03,0x92011b04,
+0xfebcf7ff,0x400ce8bd,0x4770b003,0xb507b40c,0xf853ab04,0x93012b04,
+0xfdb0f7ff,0x400ee8bd,0x4770b002,0x47702001,0x98019900,0xb138b141,
+0x78134a04,0x3301b90b,0x23007013,0x6003600b,0x47702000,0x0001c5d1,
+0x4ff0e92d,0x6d82f5ad,0xf8ddb081,0x46806438,0x0f01f016,0x46924689,
+0xf8dd469b,0xd152743c,0x0501f017,0x19bcd14f,0x7f00f5b4,0xac84d84b,
+0x95019500,0x94029503,0xffd0f7ff,0x28004605,0xf8b4d141,0x48232080,
+0x1040f8b4,0xff90f7ff,0x3040f8b4,0x3272f245,0xd0054293,0x3080f8b4,
+0xd0014293,0xe010462a,0xab842200,0x74dcf44f,0x93029200,0x94019203,
+0x46494640,0x465b4652,0xffacf7ff,0x22dcb9f8,0xf2454625,0x429e53aa,
+0xea4fac04,0xd1040242,0x21ff4620,0xff28f7ff,0xa984e011,0xf7ff4620,
+0xf026ff43,0x18200001,0x1440f8dd,0xf7ff463a,0xb125ff3b,0x1e694620,
+0xf7ff22ff,0x2001fbe5,0xf50db005,0xe8bd6d80,0x46c08ff0,0x000177c6,
+0xb5706943,0xdc012b14,0xe0042541,0x6a0b4a0a,0xea036812,0x4c090502,
+0x2c04f854,0xf854b132,0xea153c08,0xd0010103,0x47906820,0x340c4b04,
+0xd1f1429c,0x46c0bd70,0x0001c610,0x0001c5dc,0x0001c618,0x47f0e92d,
+0x46804615,0x461e460f,0xfc32f7fe,0x46812100,0xf7fe4640,0x2200fe39,
+0x46114604,0x180b480f,0xb973685b,0xfb02330c,0x501df303,0x6a63181a,
+0x60966057,0xea454a0a,0x60130303,0x24016263,0x3201e004,0x2a05310c,
+0x2400d1e8,0x46494640,0xfe1af7fe,0xe8bd4620,0x46c087f0,0x0001c5d4,
+0x0001c610,0x47f0e92d,0x46894604,0xfbccf7fe,0x46202100,0xfe08f7fe,
+0x46204605,0xf8d46967,0xf0028018,0x2f0afe6b,0xd9164682,0xd0192f0f,
+0xf7fe4620,0x2f14fceb,0xd9034606,0xf02368ab,0x60ab0308,0xf04368ab,
+0x60ab0301,0x68abd903,0x0308f043,0x220160ab,0x2f02e011,0x4e1ad802,
+0xe00c2230,0xf7fe4620,0xf8d5fcdb,0x460630a4,0x03fff023,0x0302f043,
+0x30a4f8c5,0xb15f2202,0xf01368ab,0xd1070f01,0x0318f008,0xbf142b08,
+0x16e1f44f,0xf6f2fbb6,0x0803f008,0xe00f2400,0x7040f505,0xeb00b117,
+0xe0012004,0x00c4eb00,0x0f00f1b9,0x4651d003,0x23004632,0x340147c8,
+0xdbed4544,0x87f0e8bd,0x053ec600,0x47704800,0x00017804,0x460eb573,
+0xf89d2400,0x46151018,0x469e4684,0x20014622,0xf302fa10,0x0f0eea13,
+0xf8c5d004,0xf8d52620,0x431c3624,0x2a1f3201,0x4623d1f1,0xb13cb149,
+0x46319000,0x462a4660,0xffe0f7ff,0x0300ea44,0x4620461c,0x46c0bd7c,
+0x46c04770,0x4604b570,0xfb72f7fe,0x46052100,0xf7fe4620,0x4620fd79,
+0xf7fe4629,0x2001fd75,0x46c0bd70,0x4604b570,0xfb62f7fe,0x46052100,
+0xf7fe4620,0x4620fd69,0xf7fe4629,0xbd70fd65,0x2200b510,0xf7ff4604,
+0x4620ffed,0xfb50f7fe,0x46204601,0xfd58f7fe,0x46c0bd10,0x4605b570,
+0xfb46f7fe,0x46062100,0xf7fe4628,0x4631fd4d,0x460cf8d0,0xf7fe4628,
+0xf3c4fd47,0xbd702080,0x4604b570,0xfb34f7fe,0x46052100,0xf7fe4620,
+0x69e3fd3b,0xd1042b01,0x3600f8d0,0x7300f423,0xdd05e004,0x3600f8d0,
+0x7300f443,0x3600f8c0,0x2b026b63,0xf8c0d110,0xf8d03658,0xf443365c,
+0xf8c07380,0x2303365c,0x3658f8c0,0x365cf8d0,0x0304f043,0x365cf8c0,
+0x46294620,0xfd14f7fe,0x46c0bd70,0x4604b570,0xfb02f7fe,0x46062100,
+0xf7fe4620,0x6b63fd09,0x4d0bb90b,0x2301e00d,0x3660f8c0,0x3664f8d0,
+0xf0034a08,0xfbb203ff,0xf44ff2f3,0xfb02737a,0x4620f503,0xf7fe4631,
+0x4628fcf3,0x46c0bd70,0x0249f000,0x000d6d80,0xf7ffb510,0xbd10ffd7,
+0x4605b570,0xfad8f7fe,0x46062100,0xf7fe4628,0xf8d0fcdf,0x46283600,
+0x0484f3c3,0xff2af7ff,0x7883e003,0xd00442a3,0xb120300c,0x2b008803,
+0x8803d1f7,0x4805b903,0x46318804,0xf7fe4628,0xf44ffcc7,0xfb04707a,
+0xbd70f000,0x000178a0,0x4604b570,0xfab0f7fe,0x46052100,0xf7fe4620,
+0x4620fcb7,0xf7fe4629,0xf640fcb3,0xbd7030b8,0x41f0e92d,0xf7fe4606,
+0x2100fa9f,0x46304607,0xfca6f7fe,0xf8c02301,0xf8d03650,0x4c2e3654,
+0x0304f023,0x3654f8c0,0x3654f8d0,0xf0434605,0xf8c00304,0xe0033654,
+0xf002200a,0x3c0afbf3,0xf0136aeb,0xd1010f08,0xd1f52c09,0x6aea2000,
+0x0658f8c5,0x365cf8d5,0x1247f3c2,0x4360f023,0xea432101,0xf8c57342,
+0xf8c5365c,0xf8d51658,0xf002365c,0xf023040f,0xea430301,0xf8c503d4,
+0xf8c5365c,0xf8d50650,0xf0233654,0xea434340,0xf8c57382,0xf8c53654,
+0xf8d51650,0xf0233654,0xea430303,0xf8c50394,0xf8c53654,0xf8d50650,
+0x46303654,0x5300f043,0x3654f8c5,0x1650f8c5,0x3654f8d5,0xf0234639,
+0xf8c50304,0xf7fe3654,0xe8bdfc47,0x46c081f0,0x00989689,0x41f0e92d,
+0x46804f0f,0xb9c4683c,0xfa2ef7fe,0x46064621,0xf7fe4640,0xf8d0fc35,
+0x46045614,0x7010f242,0xfb90f002,0x3614f8d4,0x1b5b2264,0xf302fb03,
+0x603b4640,0xf7fe4631,0x6838fc23,0x81f0e8bd,0x0001c614,0x41f0e92d,
+0x46164607,0xfa0cf7fe,0x46802100,0xf7fe4638,0x4604fc13,0xf0002e00,
+0x463880a6,0xfe5ef7ff,0xe0024605,0xd00642b3,0x2d00350c,0x809bf000,
+0x2b00882b,0x882bd1f6,0xf0002b00,0xf8d48094,0x78aa3600,0x0384f3c3,
+0xf0004293,0xf8d4808c,0xf6433618,0xf42326a1,0xf8c41340,0xf8d43618,
+0xf423361c,0xf8c41340,0xe003361c,0xf002200a,0x3e0afb45,0x31e0f8d4,
+0x3f00f413,0x2e09d001,0x2300d1f4,0x3660f8c4,0x792b78ea,0x1664f8d4,
+0x0512061b,0x6370f003,0x0270f402,0x617ff021,0x430b4313,0x3664f8c4,
+0xb9536b7b,0xf8c43301,0xf8d43660,0xf4233664,0xf443437f,0xf8c46360,
+0x23023664,0x3660f8c4,0xf8d488ea,0x4b291664,0xea020512,0xf0210303,
+0xf42151fe,0xf4431178,0x430b3300,0x3664f8c4,0xf8c42303,0xf8d43660,
+0x68ab2664,0x427ff002,0x437ff023,0xf8c44313,0x23053664,0x3660f8c4,
+0x2664f8d4,0xf0024b1a,0xea4202ff,0xf8c40303,0x69fb3664,0xdd052b01,
+0x3600f8d4,0x6380f443,0x3600f8c4,0xf8d478aa,0x88290600,0xf64f0092,
+0xea007383,0xf0020303,0x317f027c,0x11c9431a,0x39016b7b,0x4001ea42,
+0xf8d4b93b,0xf4203630,0x041b7080,0xf8c40c1b,0xf8c43630,0x46380600,
+0xf7fe4641,0xe8bdfb65,0x46c081f0,0x1ff00000,0x88888800,0x4616b570,
+0x460d6b42,0x2312f240,0x490d2000,0xbf8c2a01,0x2412461c,0xf95ef7ff,
+0x2100b120,0xf7ff460a,0x4604f825,0x49072000,0xf954f7ff,0x4806b908,
+0x2100e003,0xf7ff460a,0x602cf819,0xbd706030,0x000178c4,0x000178c9,
+0x003ff63e,0x43f0e92d,0x4607b085,0x4690460c,0xf964f7fe,0x28004605,
+0x4638d145,0xf91cf7fe,0x46814629,0xf7fe4638,0x2301fb23,0x46214606,
+0x46329300,0x6380f44f,0xf7ff4638,0xaa02fd6f,0xa9034604,0x95034638,
+0xf7ff9502,0x9b03ffb3,0x0203ea24,0x0f00f1b8,0xf8d6d019,0xf44f3618,
+0xf443707a,0x43136380,0x3618f8c6,0xfa62f002,0x24a1f643,0x200ae003,
+0xfa5cf002,0xf8d63c0a,0xf413360c,0xd10a6f80,0xd1f42c09,0xf8d6e007,
+0xf4423618,0xea236280,0xf8c60302,0x46383618,0xf7fe4649,0xb005fae5,
+0x83f0e8bd,0x4ff0e92d,0xb0852400,0x94034607,0xf7fe9402,0x4621f8cd,
+0x46384683,0xfad4f7fe,0x4a466b7b,0x4b4642a3,0xbf144605,0x46994691,
+0x4a446a3b,0x2a04f3c3,0xbf147813,0x26012602,0x3620f8c0,0x46a08853,
+0x3628f8c0,0x2108e014,0x4a3d4668,0xf7ff4643,0x2000fbc5,0xf7ff4669,
+0xb138f8c1,0xf8c52100,0x460a8620,0xff86f7fe,0x0628f8c5,0x0801f108,
+0xd1e845d0,0x1406eb09,0x3c04f854,0xb1133e01,0x47984638,0x2100b330,
+0x2301e022,0xf854408b,0x42132c10,0xf8c5d01b,0xf9141620,0xb12b3c0c,
+0xd0062b01,0x3ffff1b3,0xe010d009,0x3c08f854,0xf8d5e00b,0xf8543624,
+0x43132c08,0xf8d5e005,0xf8543624,0xea232c08,0xf8c50302,0x31013624,
+0xd1da4551,0x2e003c10,0xe014d1ce,0x46682108,0x46334a18,0xfb7af7ff,
+0x46692000,0xf7ff466c,0xb138f875,0xf8c52100,0x460a6620,0xff3af7fe,
+0x0624f8c5,0x45463601,0x4638d1e8,0xaa02a903,0xfef8f7ff,0xb10b9b03,
+0x3618f8c5,0xb10b9b02,0x361cf8c5,0x46594638,0xfa4af7fe,0xe8bdb005,
+0x46c08ff0,0x000178e8,0x000178d8,0x000177fe,0x000178ce,0x000178d3,
+0x30b4f890,0xf8d0b1a3,0xb91330c0,0x30c4f8d0,0x461ab173,0xf443681b,
+0x60136300,0xf4136813,0xd0056f00,0x6300f423,0x23016013,0x3140f8c0,
+0x46c04770,0x477020a4,0xf890b510,0xb10b30b4,0xe0004903,0x22904903,
+0xfadaf7ff,0x46c0bd10,0x00017908,0x00017998,0x9c03b530,0x4619468c,
+0x46969b04,0x682204db,0x43130cdb,0x46056023,0x0138f8d0,0x4f80f1b0,
+0xf01ed102,0xd1094240,0xeb0e00c9,0xeb0c0300,0x60530201,0xf84c6823,
+0xe00e3001,0x3392ea43,0xf8d56023,0x00c82138,0x4340f02e,0xeb0c189b,
+0x604b0100,0xf84c6823,0xbd303000,0x469cb570,0x468e9b05,0xf8d0045d,
+0x0c6d3138,0x4f80f1b3,0x9e044614,0xf012d102,0xd1054240,0x110cea4f,
+0x0201eb0e,0xe00918e3,0x110cea4f,0x4340f024,0x3592ea45,0x4380f103,
+0x0201eb0e,0xf8d06093,0x60d3313c,0xf84e6833,0x60553001,0x3140f8d0,
+0xea4fb1db,0xeb0e120c,0x68a00402,0xf85e68e3,0x40432002,0x40536861,
+0xea83404b,0xea834313,0xea832313,0xea831313,0xea830393,0xf0130353,
+0xbf1c0f01,0x2380f445,0xbd706063,0xf443680b,0x600b3340,0x680b6808,
+0x3040f400,0x3340f423,0x3f40f5b0,0x2000bf14,0x600b2001,0x46c04770,
+0x30b4f890,0x468eb500,0x1130f8d0,0xf1b1b32b,0xd1024f80,0x4c40f012,
+0xf1bed10d,0xeb020f01,0xbf0c0301,0x20c0f8d0,0x20c4f8d0,0xf8d06093,
+0x60d33134,0xf1bee035,0xf0220f01,0xbf0c4340,0x20c0f8d0,0x20c4f8d0,
+0x4380f103,0xf8d06093,0xea4f3134,0x60d3319c,0xf1b1e01d,0xd1024f80,
+0x4c40f012,0xf1bed109,0xbf0c0f01,0x30b8f8d0,0x30bcf8d0,0x605a440a,
+0xf1bee013,0xf0220f01,0xbf0c4340,0x20b8f8d0,0x20bcf8d0,0x4380f103,
+0x319cea4f,0x68136053,0x3340f423,0x0303ea41,0xbd006013,0x30b4f890,
+0xf8d0b113,0xe00120c0,0x20b8f8d0,0xf0436813,0x60130304,0x46c04770,
+0x30b4f890,0xf8d0b153,0xf8d03140,0xf8d020c4,0xb10b012c,0xe0080043,
+0xe0040043,0x312cf8d0,0x20bcf8d0,0xf443005b,0xf0436300,0x60130301,
+0x46c04770,0xf8d0b510,0x460140d4,0xf890b1d4,0xb12b30b4,0x30c0f8d0,
+0xf3c3691b,0xe0041e08,0x30b8f8d0,0xf3c368db,0xf8d10ec8,0xe00720d8,
+0x30e0f8d1,0x0022f853,0x3201b928,0x401a1e63,0xd1f54572,0xbd102000,
+0xf8c02300,0x47703090,0x10d4f8d0,0x30dcf8d0,0x20d8f8d0,0x1a9bb510,
+0x401c1e4c,0x39011b09,0x1090f8c0,0x46c0bd10,0xf8d04603,0xf8d320d4,
+0xf8d030d8,0x3a0100dc,0xea021ac0,0x47700000,0x30b4f890,0xf8d0b12b,
+0x691b30c0,0x1208f3c3,0xf8d0e004,0x68db30b8,0x02c8f3c3,0x30dcf8d0,
+0x00d4f8d0,0x38011a9b,0x0000ea03,0x46c04770,0xf8d04603,0xf8d32100,
+0xf8d03104,0x3a010108,0xea021ac0,0x47700000,0xf8c02300,0xf8c03094,
+0xf8c03098,0x4770309c,0x30b8f8d0,0xf1b06818,0xd1013fff,0xe0013001,
+0x0001f000,0x46c04770,0x30d4f8d0,0xf8d0b12b,0x681320b8,0x0302f043,
+0x47706013,0x30d4f8d0,0xf8d0b12b,0x681320b8,0x0302f023,0x47706013,
+0x30d4f8d0,0x2001b90b,0xf8d0e004,0x681b30b8,0x0040f3c3,0x46c04770,
+0x30b8f8d0,0xf40068d8,0xf5b04070,0xbf145f40,0x20012000,0x46c04770,
+0x30bcf8d0,0xf40068d8,0xf5b04070,0xbf145f40,0x20012000,0x46c04770,
+0x3100f8d0,0x2001b90b,0xf8d0e009,0x68da30bc,0x0512689b,0x429a0d12,
+0x2000bf14,0x47702001,0x30bcf8d0,0xf1b06818,0xd1013fff,0xe0013001,
+0x0001f000,0x46c04770,0x30d4f8d0,0x2b00b530,0xf8d0d038,0xb11120d8,
+0x40dcf8d0,0xf8d0e004,0x68db30b8,0x04c8f3c3,0x4611b112,0xe0172500,
+0x30dcf8d0,0xd825429c,0xf8d0e7f7,0x4a1330cc,0x03c1eb03,0xf8d0605a,
+0x230020e0,0x5021f852,0x3021f842,0x30d4f8d0,0x3b011c4a,0x0103ea02,
+0xd00142a1,0xd0e82d00,0x30d4f8d0,0x20dcf8d0,0x10d8f8c0,0x1e591a52,
+0x1a9b400a,0xf8c03b01,0xe0003090,0x46282500,0x46c0bd30,0xdeadbeef,
+0x47f0e92d,0xf7ff4604,0xf8d4ff1f,0xf8d430b8,0x68db90d8,0x58d3ea4f,
+0x30d4f8d4,0x0208ebc9,0xea021e59,0x1a1b0701,0xd24c429f,0x30dcf8d4,
+0xea033b01,0xe0260c01,0x00ccf8d4,0x0307eb0c,0x050eea03,0x03ccea4f,
+0x58c318c6,0xf0234575,0xbf085180,0x5180f041,0x50c100eb,0x687318c2,
+0x018cea4f,0xf8d46053,0x4b1820e0,0x58536073,0x3025f842,0x50532300,
+0x30d4f8d4,0x32fff10c,0xea023b01,0xf8d40c03,0xf10910d4,0xf10133ff,
+0xea0e3eff,0x459c0303,0xf8d4d1ce,0xf8c430dc,0x18fb80d8,0x030eea03,
+0x0203ebc8,0x020eea02,0x0201ebc2,0xf8c43a01,0xf8d42090,0xf8c420b8,
+0x00db30dc,0xe8bd6093,0x46c087f0,0xdeadbeef,0x30c0f8d0,0xf1b06818,
+0xd1013fff,0xe0013001,0x0001f000,0x46c04770,0x30d4f8d0,0xf8d0b12b,
+0x681320c0,0x0302f043,0x47706013,0x30d4f8d0,0xf8d0b12b,0x681320c0,
+0x0302f023,0x47706013,0x30d4f8d0,0x2001b90b,0xf8d0e004,0x681b30c0,
+0x0040f3c3,0x46c04770,0x30c0f8d0,0xf0006918,0xf1b04070,0xbf145f40,
+0x20012000,0x46c04770,0x30c4f8d0,0xf0006918,0xf1b04070,0xbf145f40,
+0x20012000,0x46c04770,0x3100f8d0,0x2001b90b,0xf8d0e009,0x691a30c4,
+0x04d2685b,0x429a0cd2,0x2000bf14,0x47702001,0x30c4f8d0,0xf1b06818,
+0xd1013fff,0xe0013001,0x0001f000,0x46c04770,0x30d4f8d0,0x2001b90b,
+0xf8d0e00d,0x681320c0,0x0002f013,0x6913d007,0x4370f003,0x5f00f1b3,
+0x2000bf14,0x47702001,0x30d4f8d0,0x2b00b530,0xf8d0d039,0xb11120d8,
+0x40dcf8d0,0xf8d0e004,0x691b30c0,0x1408f3c3,0x4611b112,0xe0182500,
+0x30dcf8d0,0xd826429c,0xf8d0e7f7,0x4a1330d0,0x1301eb03,0x60da609a,
+0x20e0f8d0,0xf8522300,0xf8425021,0xf8d03021,0x1c4a30d4,0xea023b01,
+0x42a10103,0x2d00d001,0xf8d0d0e7,0xf8d030d4,0xf8c020dc,0x1a5210d8,
+0x400a1e59,0x3b011a9b,0x3090f8c0,0x2500e000,0xbd304628,0xdeadbeef,
+0x4604b530,0x0100f8d0,0xb908460a,0xe03e4605,0x00b4f894,0x1104f8d4,
+0x3108f8d4,0x4299b1c0,0xb932d034,0x30c4f8d4,0xf3c3691b,0x42991308,
+0xf8d4d02c,0x2300210c,0x5021f852,0x3021f842,0x30fcf8d4,0xeb034a13,
+0x609a1301,0xe01560da,0xd01b4299,0xf8d4b932,0x68db30bc,0x03c8f3c3,
+0xd0134299,0x310cf8d4,0xf8534a0a,0xf8435021,0xf8d40021,0xeb0330f8,
+0x605a03c1,0x3100f8d4,0x3b011c4a,0xf8c44013,0xe0003104,0x46282500,
+0x46c0bd30,0xdeadbeef,0xf443680b,0x600b3340,0x680b6808,0x3040f400,
+0x3340f423,0x3f40f5b0,0x2000bf14,0x600b2001,0x46c04770,0x47f0e92d,
+0xf7ff4605,0xf8d5fda1,0xf8d530c0,0x695b90d8,0x180cf3c3,0x30d4f8d5,
+0x0208ebc9,0xea021e59,0x1a1b0701,0xd251429f,0x30dcf8d5,0xea033b01,
+0xe02b0c01,0x00d0f8d5,0x0307eb0c,0x060eea03,0x130cea4f,0x58c318c4,
+0xf0234576,0xbf085180,0x5180f041,0x50c10133,0x686318c2,0x018cea4f,
+0x68a36053,0x68e36093,0xf8d560d3,0x4b1820e0,0x60e360a3,0xf8425853,
+0x23003026,0xf8d55053,0xf10c30d4,0x3b0132ff,0x0c03ea02,0x10d4f8d5,
+0x33fff109,0x3efff101,0x0303ea0e,0xd1c9459c,0x30dcf8d5,0x80d8f8c5,
+0xea0318fb,0xebc8030e,0xea020203,0xebc2020e,0x3a010201,0x2090f8c5,
+0x20c0f8d5,0x30dcf8c5,0x6053011b,0x87f0e8bd,0xdeadbeef,0x4604b510,
+0xfbcef7fd,0x46202100,0xf7fd460a,0xf410fded,0xd0055f80,0xf7fd4620,
+0xb108fc13,0xe0002040,0xbd102020,0x20d4f8d0,0x4604b510,0x1e53b1e2,
+0xf8c02100,0xf8c03090,0xf8c010dc,0x011210d8,0x00d0f8d0,0xfe90f7fe,
+0x3140f8d4,0x20c0f8d4,0x2301b10b,0xf640e001,0x60130301,0x21014620,
+0x20ecf8d4,0xfc54f7ff,0x46c0bd10,0x20d4f8d0,0x4604b510,0x2100b1ba,
+0xf8c01e53,0xf8c010dc,0xf8c010d8,0x00d23090,0x00ccf8d0,0xfe6cf7fe,
+0x20b8f8d4,0x0301f640,0x46206013,0xf8d42101,0xf7ff20ec,0xbd10fc35,
+0x2100f8d0,0x4604b510,0xf890b1d2,0x230010b4,0x3108f8c0,0x3104f8c0,
+0xf8d0b121,0x461900fc,0xe0020112,0x00f8f8d0,0xf7fe00d2,0x4620fe49,
+0xfc7af7ff,0x21024620,0x2118f8d4,0xfc14f7ff,0x46c0bd10,0x41f0e92d,
+0x30b4f890,0x46884604,0xd0442b00,0xf8d02901,0xbf0c50c8,0x30d4f8d0,
+0x3100f8d0,0x011e1e6f,0x5f80f417,0x1976bf18,0xd1182901,0xf1044630,
+0xf00101ec,0xb358fc6f,0xfbb3183b,0xfb05f3f5,0xf8d4f303,0xf8c420ec,
+0x1a1b30d0,0x464118d2,0x30f0f8c4,0x20ecf8c4,0x60f4f8c4,0x4630e019,
+0x718cf504,0xfc56f001,0x183bb190,0xf3f5fbb3,0xf303fb05,0x2118f8d4,
+0x30fcf8c4,0x18d21a1b,0xf8c42101,0xf8c4311c,0xf8c42118,0xe0006120,
+0xb2c82100,0x2901e040,0xf8d0d109,0xf10430d4,0x00dd01ec,0xf0014628,
+0xb398fc35,0xf8d0e009,0xf5043100,0x00dd718c,0xf0014628,0xb348fc2b,
+0xf500e013,0x331f637e,0x637ef423,0x031ff023,0x20ecf8d4,0x30ccf8c4,
+0x18d21a1b,0x30f0f8c4,0x20ecf8c4,0x50f4f8c4,0xf500e012,0x331f637e,
+0x637ef423,0x031ff023,0x2118f8d4,0x30f8f8c4,0x18d21a1b,0x311cf8c4,
+0x2118f8c4,0x5120f8c4,0xe0002001,0xb2c02000,0x81f0e8bd,0x4604b510,
+0xd04f2800,0x30b4f890,0xf8d0b15b,0xb12b30d0,0x00f0f8d0,0x0003ebc0,
+0xfbe8f001,0x30fcf8d4,0xf8d0e00a,0xb12b30cc,0x00f0f8d0,0x0003ebc0,
+0xfbdcf001,0x30f8f8d4,0xf8d4b12b,0xebc0011c,0xf0010003,0xf8d4fbd3,
+0xb13110e0,0x20d4f8d4,0x00acf8d4,0xf0010092,0xf8d4f8cf,0xb131110c,
+0x2100f8d4,0x00acf8d4,0xf0010092,0xf8d4f8c5,0xb13110e8,0x20d4f8d4,
+0x00acf8d4,0xf0010092,0xf8d4f8bb,0xb1311114,0x2100f8d4,0x00acf8d4,
+0xf0010092,0xf8d4f8b1,0x462100ac,0x72a2f44f,0xf8aaf001,0x46c0bd10,
+0x4ff7e92d,0x91014683,0x70a2f44f,0x46162100,0xf8dd461f,0xf8dd9034,
+0xf8dda038,0x9d12803c,0xfebaf000,0x28004604,0x8126f000,0xf44f2100,
+0xf7fe72a2,0x4b94fd3d,0x2d002100,0x461dbf08,0x50a0f8c4,0x460a4630,
+0xfc72f7fd,0xf3c02300,0xf8c43000,0xb2c33140,0x00b4f884,0xb0acf8c4,
+0x60b0f8c4,0x9b0cb1b3,0x0ffff1b9,0x30c4f8c4,0x5300f44f,0x70c0f8c4,
+0x30c8f8c4,0xf1bad806,0xbf9c0fff,0x5380f5a3,0x30c8f8c4,0xf7ff4620,
+0xe004fa2f,0xf8c49b0c,0xf8c470b8,0x220830bc,0xf1049901,0xf7fe00a4,
+0x2300fc47,0x30abf884,0x90d4f8c4,0xa100f8c4,0xfa34f7ff,0xbf864580,
+0x0308ebc0,0x3124f8c4,0x8124f8c4,0x22009b10,0x3128f8c4,0xf8c49b11,
+0xf8c42130,0xf8c4312c,0x68732138,0xd11f2b01,0xf5b368b3,0xd1056f02,
+0x30b4f894,0xf04fb113,0xe00b4300,0xf2446b32,0x429a3322,0xf04fbf0c,
+0xf04f4300,0xf8c44380,0x23003130,0x3134f8c4,0x3130f8d4,0x3138f8c4,
+0x3134f8d4,0x313cf8c4,0xf7fd4630,0xf640fa07,0x42980329,0x4630d10c,
+0xfcd4f7fd,0x4630b140,0xfcd0f7fd,0xd8032802,0xf8842300,0xe01c30b5,
+0x30b4f894,0xf8d4b15b,0xb91110c0,0x10c4f8d4,0xf8d4b181,0xf7ff00ac,
+0x2001fd6f,0xf8d4e00b,0xb91110b8,0x10bcf8d4,0xf8d4b121,0xf7ff00ac,
+0xe000fa59,0xf8842000,0xf1b900b5,0xd00d0f00,0x0589ea4f,0x21004628,
+0xfdfef000,0x00e0f8c4,0xd06b2800,0x462a2100,0xfc82f7fe,0x0f00f1ba,
+0xea4fd00d,0x4628058a,0xf0002100,0xf8c4fded,0x2800010c,0x2100d05a,
+0xf7fe462a,0xf1b9fc71,0xd0050f00,0x21014620,0xfe2cf7ff,0xd04d2800,
+0x0f00f1ba,0x4620d005,0xf7ff2102,0x2800fe23,0xf8d4d044,0xf1b33130,
+0xd1074f80,0x30ecf8d4,0x4f80f1b3,0xf894d902,0xb3bb30b5,0x3130f8d4,
+0x4f80f1b3,0xf8d4d107,0xf1b33118,0xd9024f80,0x30b5f894,0xf1b9b353,
+0xd00d0f00,0x0589ea4f,0x21004628,0xfdb0f000,0x00e8f8c4,0x2100b1f0,
+0xf7fe462a,0xe001fc35,0x90e8f8c4,0x0f00f1ba,0xea4fd00d,0x4628058a,
+0xf0002100,0xf8c4fd9d,0xb1580114,0x462a2100,0xfc22f7fe,0xf8c4e001,
+0x4620a114,0xf958f7ff,0xe0034620,0xf7ff4620,0x2000fe69,0x8ffee8bd,
+0x0001c618,0x3100f8d0,0x4604b570,0x2001b90b,0xf8d0e016,0x230020c4,
+0x7519f242,0xe0036013,0xf001200a,0x3d0afabf,0x30c4f8d4,0xf013691b,
+0xd0014070,0xd1f32d09,0x0001f1d0,0x2000bf38,0x46c0bd70,0x30d4f8d0,
+0x4604b570,0x2001b90b,0xf8d0e033,0x230220c0,0x7519f242,0xe0036013,
+0xf001200a,0x3d0afa9f,0x30c0f8d4,0xf013691b,0xd0074370,0x5f00f1b3,
+0xf1b3d004,0xd0015f40,0xd1ed2d09,0x20c0f8d4,0xf2422300,0x60137519,
+0x200ae003,0xfa86f001,0xf8d43d0a,0x691b30c0,0x4670f013,0x2d09d001,
+0xf44fd1f3,0xf0017096,0xf1d6fa79,0xbf380001,0xbd702000,0x30d4f8d0,
+0x4604b510,0x2001b90b,0xf8d0e01a,0x681320b8,0x0f02f013,0x68d3d013,
+0x4370f403,0x5f00f5b3,0x2002d10d,0xfa5ef001,0x30b8f8d4,0xf40368db,
+0xf5b34370,0xbf145f00,0x20012000,0x2000e000,0x46c0bd10,0x3100f8d0,
+0x4604b570,0x2001b90b,0xf8d0e016,0x230020bc,0x7519f242,0xe0036013,
+0xf001200a,0x3d0afa3f,0x30bcf8d4,0xf41368db,0xd0014070,0xd1f32d09,
+0x0001f1d0,0x2000bf38,0x46c0bd70,0x30d4f8d0,0x4604b570,0x2001b90b,
+0xf8d0e033,0x230220b8,0x7519f242,0xe0036013,0xf001200a,0x3d0afa1f,
+0x30b8f8d4,0xf41368db,0xd0074370,0x5f00f5b3,0xf5b3d004,0xd0015f40,
+0xd1ed2d09,0x20b8f8d4,0xf2422300,0x60137519,0x200ae003,0xfa06f001,
+0xf8d43d0a,0x68db30b8,0x4670f413,0x2d09d001,0xf44fd1f3,0xf0017096,
+0xf1d6f9f9,0xbf380001,0xbd702000,0x47ffe92d,0x93032300,0x60dcf8d0,
+0x460f4604,0x460d4692,0xf8d4e037,0xf10630d4,0xf8d40801,0xf10320d8,
+0xea083eff,0x4293030e,0xc010f8d5,0x8b298aa8,0x9000f8d5,0x180ad057,
+0x2300d022,0x930342bd,0xf103bf04,0x93034300,0x0f00f1b9,0x9b03d103,
+0x43c0f043,0x45769303,0x9b03d103,0x5380f043,0xab039303,0x92019300,
+0xf8d44633,0x462010d0,0xf7ff4662,0xf8d4f873,0x3b0130d4,0x0603ea08,
+0x2d00464d,0x9803d1c5,0x4f80f010,0xf8d4d10a,0x1e7230d4,0x401a3b01,
+0x10d0f8d4,0xf0400112,0x508b43c0,0x20d4f8d4,0x30e0f8d4,0x3a011e71,
+0xf8434011,0xf8c47021,0xf1ba60dc,0xd0030f00,0x20c0f8d4,0x60530133,
+0x00d8f8d4,0x20d4f8d4,0x10dcf8d4,0x1a091e53,0x1ad2400b,0x46283a01,
+0x2090f8c4,0xf8d4e00f,0x463900ac,0xf0002201,0x2300fdeb,0x3090f8c4,
+0x309cf8d4,0x30fff04f,0xf8c43301,0xb004309c,0x87f0e8bd,0x4604b570,
+0xe004460d,0x00acf8d4,0xf0002201,0x4629fdd5,0xf7ff4620,0x4601fadd,
+0xd1f32800,0x46c0bd70,0x47ffe92d,0x93032300,0x60dcf8d0,0x460f4604,
+0x460d4692,0xf8d4e037,0xf10630d4,0xf8d40801,0xf10320d8,0xea083eff,
+0x4293030e,0xc010f8d5,0x8b298aa8,0x9000f8d5,0x180ad057,0x2300d022,
+0x930342bd,0xf103bf04,0x93034300,0x0f00f1b9,0x9b03d103,0x43c0f043,
+0x45769303,0x9b03d103,0x5380f043,0xab039303,0x92019300,0xf8d44633,
+0x462010cc,0xf7fe4662,0xf8d4ffab,0x3b0130d4,0x0603ea08,0x2d00464d,
+0x9803d1c5,0x4f80f010,0xf8d4d10a,0x1e7230d4,0x401a3b01,0x10ccf8d4,
+0xf04000d2,0x508b43c0,0x20d4f8d4,0x30e0f8d4,0x3a011e71,0xf8434011,
+0xf8c47021,0xf1ba60dc,0xd0030f00,0x20b8f8d4,0x609300f3,0x00d8f8d4,
+0x20d4f8d4,0x10dcf8d4,0x1a091e53,0x1ad2400b,0x46283a01,0x2090f8c4,
+0xf8d4e00f,0x463900ac,0xf0002201,0x2300fd51,0x3090f8c4,0x309cf8d4,
+0x30fff04f,0xf8c43301,0xb004309c,0x87f0e8bd,0x4604b570,0xe004460d,
+0x00acf8d4,0xf0002201,0x4629fd3b,0xf7ff4620,0x4601f923,0xd1f32800,
+0x46c0bd70,0x4604b510,0xf8d4e004,0x220000ac,0xfd2af000,0x46202101,
+0xfa76f7ff,0x28004601,0xbd10d1f3,0x4604b570,0xe0252500,0xf8d42d00,
+0xdd092124,0x0305ebc2,0x00acf8d4,0xea232200,0xf00075e3,0xe017fd11,
+0xf8d4690b,0x881b012c,0x42931a12,0xb10bd90d,0x0503ebc2,0x00acf8d4,
+0xf0002200,0xf8d4fd01,0x33013094,0x3094f8c4,0x18c3e002,0xe006828b,
+0x46202100,0xfa44f7ff,0x28004601,0x4608d1d2,0x46c0bd70,0x4604b510,
+0x49044608,0xf916f7fe,0x2000b108,0xf104e001,0xbd100090,0x00017a28,
+0x43f0e92d,0x2100f8d0,0x5108f8d0,0x3104f8d0,0xebc33a01,0x401a0305,
+0x3128f8d0,0xebc2b085,0xf8d00903,0x46043124,0xbf8c2ba4,0x270027a4,
+0x46982300,0xe0519303,0x1124f8d4,0x00acf8d4,0xf0001879,0x4601fcd3,
+0xf8d4b928,0x33013098,0x3098f8c4,0xb12fe044,0x19db6903,0x8a836103,
+0x82831bdb,0x210cf8d4,0x2300690e,0xf8426033,0x93031025,0x30b4f894,
+0x2100f8d4,0x1e53b19b,0xbf08429d,0x5380f04f,0x2124f8d4,0x9303bf08,
+0x9300ab03,0xf8d49201,0x462010fc,0x462b4632,0xfed8f7fe,0x1e53e012,
+0xbf08429d,0x5380f04f,0x2124f8d4,0x9303bf08,0x9300ab03,0xf8d49201,
+0x462010f8,0x462b4632,0xfe96f7fe,0x3100f8d4,0x3b011c6a,0x0503ea02,
+0x0801f108,0xd1ab45c8,0x30b4f894,0x5108f8c4,0xf8d4b123,0x012b20c4,
+0xe0036053,0x20bcf8d4,0x609300eb,0xe8bdb005,0x46c083f0,0x4b15b537,
+0x60134615,0x4b13e001,0x32046013,0x037cf1ad,0xd3f8429a,0xf0203003,
+0x4b0f0003,0x0401ebc0,0x4b0e601c,0x60192100,0xf5054b0d,0x60195200,
+0x3c084b0c,0x4b0c6019,0x601d6041,0x601a4b0b,0x22084b0b,0x4b0b6019,
+0x4b0b601a,0x60586004,0x46c0bd3e,0x5354414b,0x0001c680,0x0001c628,
+0x0001c654,0x0001c684,0x0001c62c,0x0001c630,0x0001c63c,0x0001c61c,
+0x0001c670,0xe0074906,0xd1044282,0x600b6813,0x60932300,0x4611e003,
+0x2a00680a,0x4770d1f4,0x0001c658,0xb5106a83,0x2300b123,0x30106283,
+0xffe8f7ff,0xbd102001,0xf000b510,0xbd10fee7,0x4604b510,0xfedcf000,
+0xf0004620,0x4620fe91,0xfff2f7ff,0x46c0e7fb,0x4d03b570,0xf000682c,
+0x1900fe63,0xbd706028,0x0001c620,0xb5104b0d,0xf7ff681c,0x490cfff1,
+0x1ac2680b,0x6008d010,0x6863e00c,0xd8064293,0x23001ad2,0x33016063,
+0x68247423,0x1a9be002,0xe0016063,0xd1f02c00,0x46c0bd10,0x0001c658,
+0x0001c650,0xb5104b03,0x4b036818,0xf7fe6819,0xbd10f987,0x0001c634,
+0x0001c64c,0xb5704b09,0xf7fc6818,0x4b08fdbb,0x681c4605,0x68e3e007,
+0xd003421d,0xb10b6863,0x479868a0,0x2c006824,0xbd70d1f5,0x0001c634,
+0x0001c648,0x6fe0f5b1,0x4605b573,0x4616460c,0x6a03d106,0x21009100,
+0x681c9101,0xe00c460a,0x22004b0d,0xf7fc6818,0x4601ffcd,0x6a2bb180,
+0x94002200,0x681c9201,0x46334628,0xb13847a0,0x62a84a06,0x20006813,
+0x626e632b,0xe0016015,0x30fff04f,0x46c0bd7c,0x0001c634,0x0001c638,
+0x4b07b570,0x681c4605,0x4620e005,0xf7fd4629,0xb110ff9d,0x2c006b24,
+0x4620d1f7,0x46c0bd70,0x0001c638,0x41f0e92d,0x4616460d,0x4604461f,
+0x6883b310,0xf7ffbb03,0x4912ff71,0xe0014628,0x46111ac0,0xb122680a,
+0x42836853,0x1a1bd9f8,0x4b0c6053,0x600c6022,0x60a6681b,0x60e7429c,
+0xd10b6060,0x781b4b08,0xf000b143,0x2201fe2b,0x46104b06,0xe002701a,
+0xe0002000,0xe8bd2001,0x46c081f0,0x0001c658,0x0001bc44,0x0001c644,
+0x460db570,0xb1484604,0x62832301,0x626162c2,0x0010f100,0x46234a02,
+0xffbcf7ff,0x46c0bd70,0x00003c7d,0xb5104a11,0x4c112300,0x68237013,
+0xf7ffb17b,0xe007ff2b,0x688a680b,0x23006023,0x740b608b,0x479068c8,
+0xb1116821,0x2b017c0b,0x4b06d0f2,0xb943781b,0x681b4b05,0x6858b11b,
+0xfde8f000,0xf000e001,0xbd10fd89,0x0001c644,0x0001c658,0x41f0e92d,
+0x4a3e4b3d,0x8140f8df,0x4e3d1ad2,0xf8d84b3d,0x1af65000,0x4b3d4c3c,
+0xf505b08e,0x483c5500,0x18ad1ae4,0xf7fd920b,0x0ab3ffef,0x19ad9a0b,
+0x23089300,0x4611192d,0x0a929401,0x93030aa4,0x46334834,0x4e349402,
+0xffdef7fd,0x68304b33,0xf8d86819,0xebc04000,0x0a9a0301,0x0a809001,
+0x90029200,0x94030a8a,0x0aa4482d,0xf7fd9404,0x4b2cffcb,0x6819482c,
+0x18c96833,0x0a8a0aab,0x462b9300,0xffc0f7fd,0x48294b28,0xf7fd6819,
+0x4b28ffbb,0x4b28681f,0x429a683a,0x4827d003,0xffb2f7fd,0x970de024,
+0x6832e005,0x429a4b22,0x1d33d105,0x9e0d930d,0x429eab0c,0x4b20d3f5,
+0x0006ebc7,0xab0d681a,0x0103ebc7,0x0402ebc3,0x0502ebc6,0x91019200,
+0x90039102,0x46399004,0x46324818,0x94069405,0x95089507,0xff8cf7fd,
+0xe8bdb00e,0x46c081f0,0x00000000,0x0001bc35,0x0001c530,0x0001bc38,
+0x0001c710,0x0001c530,0x00017a31,0x00017a40,0x0001c628,0x0001c680,
+0x00017a78,0x0001c654,0x00017abc,0x0001c63c,0x00017af4,0x0001c62c,
+0x5354414b,0x00017b0e,0x0001c630,0x00017b31,0x0001c684,0xb5704b19,
+0x4a19681e,0xebc64686,0x68040000,0x4d176813,0x60131b1b,0x68134a16,
+0x60131b9b,0x4281e002,0x460dd203,0x29006869,0xeb0ed1f9,0x428b0304,
+0xf85ed107,0x19332004,0x6003189b,0x6043684b,0x6041e000,0xf102682a,
+0x194b0108,0xd1064283,0x594a1993,0x602b189b,0x606b6843,0x6068e000,
+0xbd702000,0x0001c61c,0x0001c628,0x0001c670,0x0001c654,0xb108b510,
+0xffc0f7ff,0x46c0bd10,0x4604b510,0x6a83b1b8,0x6ac3b1ab,0x6283b90b,
+0xf100e006,0x6a610010,0x46234a07,0xfe96f7ff,0xb10b68a3,0x47984620,
+0x3030f894,0xd1022b01,0xf7ff4620,0xbd10ffdf,0x00003c7d,0xb5701cc3,
+0x0503f023,0xebc0460a,0x42910105,0xebc1d81c,0xf0230302,0x4b0e0003,
+0xf1016819,0x42980308,0x4a0cd312,0x0400ebc1,0x18c36813,0x4a0a6013,
+0x6813602c,0x18e31868,0x4a086013,0x185b6813,0xf7ff6013,0xe000ff7b,
+0x46202400,0x46c0bd70,0x0001c61c,0x0001c680,0x0001c628,0x0001c654,
+0x408b2301,0x5f80f5b3,0xf44fbf28,0xe92d5380,0x2b044ff7,0x469bbf2c,
+0x0b04f04f,0xf04f4b3a,0xf8d30900,0x4b39a000,0x681f3003,0xc0f0f8df,
+0x0503f020,0x46c8464e,0x9004f8cd,0x6820e017,0xd31342a8,0xeb0119e1,
+0xf1cb0e00,0xebc50200,0x401a030e,0xd309428a,0x0300ebc5,0xd2054553,
+0x462646f1,0xc004f8cd,0x4690469a,0xf8dc46a4,0x2c004004,0x4634d1e3,
+0xd03b2e00,0x0309ebc8,0x0103ebc5,0x0008f107,0xd8014281,0xe00b186d,
+0xeb086833,0x1a5b0205,0xebc76033,0xf8480301,0x68733005,0x60726053,
+0x1b5b6833,0xf1bbd004,0xd1050f04,0xd8034283,0x9a016873,0xe00a6053,
+0xd20442bb,0x68134a12,0x60133301,0x511de012,0x1bdb199e,0x490f6023,
+0x680b6832,0x4a0e18d0,0x68136008,0x601319db,0x68134a0c,0xbf884298,
+0xb92e6010,0x20004a06,0x33016813,0xe0006013,0xe8bd19f0,0x46c08ffe,
+0x0001c680,0x0001c61c,0x0001c63c,0x0001c628,0x0001c654,0x0001c684,
+0x0001c670,0x47f0e92d,0x460f2010,0x46902100,0xf7ff4699,0x4606ff65,
+0xf06fb910,0xe01c001a,0x68204c0f,0xfb38f7fc,0x46424639,0x68204605,
+0xfd4cf7fc,0xf7fc6820,0x2301fe07,0x4a094083,0x9b0860f3,0x9004f8c6,
+0x681360b3,0x60336820,0x60164629,0xfd2cf7fc,0xe8bd2000,0x46c087f0,
+0x0001c634,0x0001c648,0x4b21b530,0xa904b085,0x3d04f841,0x5100f5a1,
+0x481e460a,0xfc8ef7ff,0xfbc4f000,0xf9b4f000,0xf0002000,0x4b1af911,
+0x60184d1a,0xfd46f018,0x60282100,0xfd08f7fc,0x24004b17,0x4b176018,
+0x6070f500,0xf44f4622,0x60186100,0x46204b14,0xf7ff9400,0x6828ffa3,
+0xfbf0f000,0xfb3cf000,0xf0006828,0x4622f9c3,0x490f480e,0xf974f000,
+0x490f480e,0xf0004622,0x4b0ef96f,0x605c6828,0x601c4b0d,0xbd30b005,
+0xdeaddead,0x00025014,0x0001c66c,0x0001c634,0x0001c64c,0x0001c624,
+0x00003901,0x00017bae,0x00003aa9,0x00017bb1,0x00003fc9,0x0001c678,
+0x0001c640,0x41f0e92d,0x46884607,0x21002034,0x461e4615,0xfed4f7ff,
+0xb1584604,0x22342100,0xfd5af7fd,0x60272300,0x60e660a5,0x8004f8c4,
+0x62e362a3,0xe8bd4620,0x46c081f0,0x461db570,0xf7ff2300,0x4604ffdf,
+0x2301b160,0x3030f880,0x22004629,0xfd40f7ff,0x2000b108,0x4620e004,
+0xfe58f7ff,0x0015f06f,0x46c0bd70,0xb5702901,0x6850d940,0x220a2100,
+0xfcd4f7fd,0x46044b20,0x4290681a,0x491fd91d,0xb10b684b,0xe7fb4619,
+0x0504ebc2,0xe011460c,0x6080f44f,0xf7ff2100,0x6060fe8f,0xf44fb330,
+0x21006280,0xfd14f7fd,0x68644a13,0x3d016813,0x60133301,0xd1eb2d00,
+0xd217e018,0xebc44b0f,0x68580502,0x6843e00a,0x3d014c0c,0xf7ff6063,
+0x4a09fde1,0x68136860,0x60133b01,0x2800b10d,0x4b05d1f1,0xb90a681a,
+0x605a4b04,0x48044b02,0xf7fd6819,0xbd70fd2d,0x0001c640,0x0001c678,
+0x00017bb4,0xe003460a,0x68126803,0x60033301,0xd1f92a00,0x47704608,
+0x460ab510,0x46084604,0x6823e003,0x3b016812,0x2a006023,0xbd10d1f9,
+0x4604b570,0xb122460d,0xb1136883,0x220068c0,0x462a4798,0x6823e003,
+0x3b016812,0x2a006023,0x4628d1f9,0xf826f000,0x46c0bd70,0x4604b510,
+0xf0004608,0xb110f82d,0x33016823,0xbd106023,0x4608b510,0xfd8ef7ff,
+0x46c0bd10,0xb108b510,0xfd88f7ff,0x46c0bd10,0x2100b570,0x20104605,
+0xfe12f7ff,0x22102100,0xf7fd4604,0x4620fc99,0xbd706065,0xe005b510,
+0x68044b04,0xf7ff6103,0x4620fd71,0xd1f72800,0x46c0bd10,0xdeadbeef,
+0xe92d1cc3,0xf02341f0,0x46070603,0x013cf106,0x4b102200,0x320458d5,
+0xd90242a9,0xd1f82a18,0xb19de014,0x21004628,0xfde6f7ff,0x2100b170,
+0x4604223c,0xfc6cf7fd,0x033cf104,0x195b60a3,0x60e33b3c,0x61231b9b,
+0xe00082a7,0x46202400,0x81f0e8bd,0x00017bc4,0x40998983,0x5cc86883,
+0x46c04770,0xb2d28983,0x68834099,0x477054ca,0xb5704b17,0x4605681c,
+0x280ab34c,0x200dd102,0xfff6f7ff,0xb1726962,0x54d56923,0x33014a11,
+0x0202ea03,0xda052a00,0xea6f3a01,0xea6f5282,0x32015292,0xf8d46122,
+0xb183309c,0x3ffff1b3,0x2105d00d,0x009cf8d4,0xffcef7ff,0x0f20f010,
+0xf8d4d0f7,0x2100009c,0xf7ff462a,0xbd70ffcb,0x0001c69c,0x800003ff,
+0xe92d4b0a,0x460541f0,0x2010460e,0x681c2100,0xf7ff4690,0xf8d4fd85,
+0x600530a0,0x604660c3,0x8008f8c0,0x00a0f8c4,0x81f0e8bd,0x0001c69c,
+0x20a4b570,0xf7ff2100,0x4d14fd73,0xb1806028,0x22a42100,0xfbf8f7fd,
+0x6080f44f,0x682c2100,0xfd66f7ff,0x68286160,0xb92c6944,0xfccef7ff,
+0xf04f602c,0xe00f30ff,0xf44f6144,0x46206280,0xf7fd2100,0x682afbe1,
+0x69532000,0xf44f6093,0x60d36380,0x601a4b02,0x46c0bd70,0x0001c698,
+0x0001c69c,0x2240b570,0x49272300,0x4d274606,0xfce0f7fd,0x23004a26,
+0x682b6093,0x4c25b933,0xb90b6823,0xffbcf7ff,0x602b6823,0x23884c1f,
+0x605a6822,0xd0362a00,0x3b0e6bb3,0xd9032b01,0x491d4630,0xfcfaf7fd,
+0x688a4919,0x6823b132,0x109cf8c3,0x25004b15,0xe01c681c,0x601a6823,
+0xf04f605a,0xf8c332ff,0xe7f3209c,0x309cf8d4,0x3ffff1b3,0x2105d00e,
+0x009cf8d4,0xff38f7ff,0x0f20f010,0x6963d0f7,0x009cf8d4,0x5d5a2100,
+0xff34f7ff,0x69233501,0xd3e7429d,0x49084807,0xf7ff4622,0xbd70ff65,
+0x000043e1,0x0001c69c,0x0001c688,0x0001c698,0x0000436d,0x00017bdc,
+0x00004351,0xf8d0b510,0xe00440a0,0x48036821,0xfbaaf7fd,0x2c0068e4,
+0xbd10d1f8,0x0001a52e,0x4d1bb570,0x2e0068ae,0x0914d131,0x81ab602c,
+0x4461f504,0x33e1f44f,0xf4f3fb94,0x606960a8,0x21034628,0xf7ff2280,
+0x4628fef9,0xb2e24631,0xfef4f7ff,0x21014628,0xf7ff1222,0x2103feef,
+0x4628460a,0xfeeaf7ff,0x460a2101,0xf7ff4628,0x4628fee5,0x22082104,
+0xfee0f7ff,0x21024628,0xf7ff2201,0xf44ffedb,0xf000707a,0xbd70f9eb,
+0x0001c688,0xe92d4b64,0x681e47f0,0x009cf8d6,0xf0002800,0xf1b080be,
+0xd0073fff,0xf7ff2102,0xf000febf,0x2801000f,0x80b3f000,0x009cf8d6,
+0x3ffff1b0,0x6834d110,0xf0002c00,0x61b480aa,0x19732500,0x35017f18,
+0xfeb6f7ff,0xd1f842a5,0xf7ff200a,0xe031feb1,0xf7ff2105,0xf010fea1,
+0xf0000f01,0x21008096,0x009cf8d6,0xfe98f7ff,0x4604280d,0x2808d011,
+0x287fd001,0x69b3d10e,0xf0002b00,0x3b018086,0x200861b3,0xfe94f7ff,
+0xf7ff2020,0x2008fe91,0x240ae074,0xf7ff4620,0x69b3fe8b,0xeb032c0a,
+0xd0050206,0x2b7f3301,0x61b37714,0xe001d96d,0x77132300,0xf8d67f33,
+0x2b0080a0,0xf04fd052,0x464d0900,0xf1062700,0x4638011c,0x3101e000,
+0x2c20780c,0xb304d0fb,0xf849b10d,0x37011027,0x2b22e00d,0xf080d10a,
+0xb13d0001,0xf812460a,0xf8023f01,0x2b003c01,0x3901d1f9,0x780b3101,
+0x2800b11b,0x2b20d1ed,0x2d00d1eb,0x2b00d0e0,0x2300d0de,0x3b01f801,
+0xb92de7da,0x00801c78,0xf7ff4621,0x4681fc09,0x2d023501,0xf849d1ca,
+0xb94f4027,0xf8d8e013,0xf8d90000,0xf7fd1000,0xb128f9e5,0x800cf8d8,
+0x0f00f1b8,0xe018d1f3,0x3004f8d8,0x0008f8d8,0x464a4639,0x46484798,
+0xfb58f7ff,0x309cf8d6,0xf1b32200,0xbf083fff,0x61b26032,0xf7ff203e,
+0x2020fe1b,0xfe18f7ff,0x4804e003,0xfaa4f7fd,0xe8bde7e9,0x46c087f0,
+0x0001c69c,0x00017bde,0xb5104b09,0x4c09681b,0x1614f8d3,0xebc36823,
+0x4b070201,0x42826818,0x2000d201,0x6021e002,0xf0f0fbb2,0x46c0bd10,
+0x0001c64c,0x0001c6ac,0x0001bc48,0x681a4b03,0xf8c22300,0xf8d23644,
+0x47703644,0x0001c64c,0x46c04770,0x6801b513,0xf1a14604,0x2b0f0310,
+0xf7ffd802,0xe02af99f,0x686268c3,0x48149300,0xf7fd68a3,0x69e3fa65,
+0x93006921,0x69a36962,0xf7fd4810,0x6ae3fa5d,0x93006a21,0x6aa36a62,
+0xf7fd480d,0x6be3fa55,0x93006b21,0x6ba36b62,0xf7fd480a,0x6ce3fa4d,
+0x93004809,0x6c626c21,0xf7fd6ca3,0xf240fa45,0xf7fb10e3,0xbd1cfdd3,
+0x00017be1,0x00017c12,0x00017c44,0x00017c76,0x00017ca8,0xf04fb510,
+0xf7fb4000,0xbd10fd81,0xf04fb510,0xf7fb4000,0xbd10fd5d,0xf000b510,
+0xbd10f8e1,0x4c12b510,0x68234a12,0xd90a4298,0x0300ebc3,0xf7ff6013,
+0x4b0ff917,0x61a0f04f,0x68206018,0x2300e003,0xf04f6013,0xb9086110,
+0xe0033002,0x681b4b09,0xf000fb03,0x681a4b08,0x0301ea40,0x3644f8c2,
+0x3644f8d2,0x46c0bd10,0x0001bc4c,0x0001c6a8,0x0001c6a4,0x0001bc48,
+0x0001c64c,0xf7ffb510,0xbd10fa95,0x460cb510,0xf7ff210c,0xb100fb21,
+0xbd106020,0x4604b510,0xf8eef000,0xf7fb4816,0x4620fd6d,0xf89cf000,
+0x4a154b14,0xfbb318c3,0x4a14f3f2,0x60134620,0xffdaf7fb,0x7078f500,
+0xf44f3007,0xfbb0737a,0x4b0ff0f3,0x60184a0f,0x490f69e3,0xbfcc2b00,
+0x437ff06f,0x33fff240,0x4a0a6013,0xfbb36813,0x6013f3f0,0x22204620,
+0xf7fd2300,0xbd10fa8f,0x000045c9,0x000f423f,0x000f4240,0x0001bc50,
+0x0001bc48,0x0001bc4c,0x00004761,0xb5104b10,0xf8d2681a,0xf0133644,
+0xd0187f00,0x4c0d2340,0x3608f8c2,0x3608f8d2,0xff18f7ff,0xb1636823,
+0xf892f7ff,0x681b4b08,0x0300ebc3,0x42986820,0x1ac0d903,0xff66f7ff,
+0xf7ffe001,0xbd10f95b,0x0001c64c,0x0001c6a8,0x0001c6a4,0x4604b570,
+0xfcecf7fb,0x46054b07,0xfb03681b,0x42840404,0xf7fbd203,0x42a8fce3,
+0xf7fbd8fb,0x42a0fcdf,0xbd70d3fb,0x0001bc50,0x41f0e92d,0x783e4f0c,
+0x4b0cb9a6,0x1b5c4d0c,0x4631d008,0x46224628,0xf91ef7fd,0x46214628,
+0xfa5cf7ff,0x46214807,0xf956f7fd,0x701e4b06,0x703b2301,0x81f0e8bd,
+0x0001c6a0,0x00025014,0x0001c710,0x00017cd9,0x0001c6b0,0x4770bf30,
+0x4604b510,0xfe1cf7fb,0x46204601,0xfb6cf7fd,0x46c0bd10,0x47f0e92d,
+0x461e4607,0x460c4615,0xfe0ef7fb,0xf7fb4638,0x4629fe3f,0x46814632,
+0xf7fc4638,0x4638f853,0xf90ef7fc,0x012af640,0x22004606,0xf7fc4638,
+0x4605f849,0x2401b18c,0xf306fa14,0xea326982,0xd1020803,0xf7fb4620,
+0x1c70fc63,0xf000fa14,0xfc40f7fb,0x8018f8c5,0x2401e00c,0xfa141c70,
+0xf7fbf000,0x4620fc55,0xf7fb40b4,0x69abfc33,0x61ac431c,0x46494638,
+0xf816f7fc,0x87f0e8bd,0x4605b570,0xfdd0f7fb,0xf6404628,0x2200010e,
+0xf818f7fc,0xb1c84604,0x46286806,0xf8c2f7fc,0xd9132804,0x49312000,
+0xfe30f7fc,0xf3c6b970,0xe0031203,0x3a014b2e,0x61636122,0xd1f92a00,
+0x31e8f8d4,0x0310f023,0x31e8f8c4,0xf6402200,0x4628012a,0xfff6f7fb,
+0x60204c26,0xf7fc4628,0x4b25f8a1,0x60186822,0x24a1f643,0xf8c22300,
+0xe00331e0,0xf7ff200a,0x3c0aff39,0x68334e1d,0x31e0f8d3,0x3f00f413,
+0x2c09d101,0x2100d1f2,0x4628460b,0x6200f44f,0xff70f7ff,0x460b2100,
+0xf6404628,0xf7ff0212,0x2100ff69,0x0229f640,0x4628460b,0xff62f7ff,
+0xf2476832,0x68135439,0x7380f043,0xe0036013,0xf7ff200a,0x3c0aff0f,
+0x681a4b08,0x31e0f8d2,0x3f00f413,0x2c09d101,0x6a13d1f2,0x0303f043,
+0xbd706213,0x00017d0b,0x21017fff,0x0001c6b4,0x0001c6b8,0x4604b570,
+0xfd52f7fb,0xf7fc4620,0x4605f85b,0xf7fb4620,0x2200fd7f,0xf6404606,
+0x4620012a,0xff92f7fb,0x40ab2301,0x42136982,0x2500d001,0x3501e000,
+0x46314620,0xff78f7fb,0xbd704628,0x8a934602,0x1a406900,0x611018c9,
+0x47708291,0x8a934602,0x1a5b6900,0x61101840,0x47708293,0x47708281,
+0x69c06942,0x40186a13,0x47706210,0x4604b510,0xfff6f7ff,0x6220b108,
+0xbd102001,0x22006943,0x6a9b629a,0x47706182,0x694369c2,0x629a6182,
+0x46c04770,0x4604b510,0xffe2f7ff,0x43036a23,0xbd106223,0x30fcf8d0,
+0xf8904319,0xf8c03177,0xb1e310fc,0x0f04f011,0xf890d005,0xea413178,
+0xf8c06303,0xf8d030fc,0x694230fc,0x0f0af013,0xf443bf1c,0xf8c02380,
+0xf8d030fc,0x64d330fc,0xf8c02300,0xf88030fc,0x33083177,0x47706453,
+0x41f3e92d,0x5020f89d,0x4607460e,0x21004698,0x5d8be002,0x3101b113,
+0xd1fa4291,0xb1135c73,0x0001f06f,0xb15de07c,0x1c4c1d4b,0xd9024293,
+0x000df06f,0xa801e074,0x22041931,0xffc0f7fc,0x46201d34,0xf7fc4937,
+0xb928fef9,0xd0542d00,0x2b0f9b01,0xe04ad85f,0x49334620,0xfeeef7fc,
+0x3001b908,0x4620e042,0xf7fc4930,0xb908fee7,0xe03b3002,0x492e4620,
+0xfee0f7fc,0xb90db990,0xe03b3003,0x2a009a01,0x68fbd02f,0xf0136bdb,
+0xd1430f04,0xd83e2a07,0x40932301,0x0f83f013,0xe038d123,0x49234620,
+0xfec8f7fc,0x3004b908,0x4620e01c,0xf7fc4920,0xb908fec1,0xe0153005,
+0x491e4620,0xfebaf7fc,0x3006b908,0x4620e00e,0xf7fc491b,0xb908feb3,
+0xe0073007,0x49194620,0xfeacf7fc,0x3008b9d0,0x2003e000,0x9b01b135,
+0x0280eb07,0x3194f8c2,0x4628e00b,0x0180eb07,0x71caf501,0x22044630,
+0xff5af7fc,0xf8c82304,0x20003000,0xf06fe004,0xe001001c,0x0016f06f,
+0x81fce8bd,0x00017d34,0x00017d41,0x00017d4d,0x00017d59,0x00017d60,
+0x00017d69,0x00017d70,0x00017d7b,0x00017d87,0x4604b570,0xe0062500,
+0x68a0b125,0x22014629,0xfa42f7ff,0x6a604635,0x6ac32100,0x46064798,
+0xd1f12800,0xf8d4b175,0xb11910f4,0x220168a0,0xfa32f7ff,0x30f8f8d4,
+0x50f4f8c4,0xbf0842ab,0x60f8f8c4,0x46c0bd70,0x41f0e92d,0x27004605,
+0xf895e055,0xb12331b9,0x31b8f895,0x4620b10b,0x68a8e00a,0xf7fc4631,
+0xf8d5fa57,0x681b30f0,0xd9064298,0x0028f105,0x46322100,0xfa70f7fc,
+0x6a68e04a,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0xf8851824,
+0x69344106,0x71a32300,0x3178f895,0x72234631,0x3106f895,0xf8852201,
+0xb2db3107,0xf8d57263,0x6a6831c4,0xf8c53301,0x6a0331c4,0xb9d04798,
+0x10f8f8d5,0x29007963,0xf013d033,0xd0300f0f,0x78237862,0x2302ea43,
+0x091b330f,0x690a0a1a,0x2300bf18,0xf8957193,0x72133178,0x2301e021,
+0x31b8f885,0xf8d5461f,0x681b30f0,0xf105b143,0x46200428,0xf7fc2100,
+0x4606fa41,0xd19c2800,0x696ab117,0x64532304,0x2b0c8deb,0x6928d903,
+0xf8e6f001,0x2b07e00d,0x6928d80b,0xf8e2f001,0xf895e007,0xf8c531b9,
+0x2b0060f8,0x2701d1d7,0xe8bde7d9,0x46c081f0,0xf8d0b570,0x461531a4,
+0x46048dc2,0x468e429a,0x2d02d30c,0x6880d10a,0xf7ff2201,0xf8d4f995,
+0x200031a8,0xf8c43301,0xe00e31a8,0xf1042100,0x46720028,0xf9d0f7fc,
+0xd1022d02,0x31a0f8d4,0x4620b913,0xff58f7ff,0xbd702001,0x4ff0e92d,
+0xb0872400,0x94049201,0xf8909403,0x4680a174,0xf8d0460e,0xf1ba9008,
+0xd0010f00,0xe0134648,0x688a690b,0x0501f003,0x0b0cf105,0x455b1a9b,
+0x8a8fd21f,0xf1074648,0x1949010c,0xf972f7ff,0xb9304604,0x46314648,
+0xf7ff2201,0x4620f955,0x4659e07b,0xfe0ef7ff,0x463a6931,0xf7fc6920,
+0x6833fe3b,0x60234631,0x46524648,0xf944f7ff,0xb1454626,0x46302101,
+0xfdf4f7ff,0x21006930,0xf7fc2201,0x210cfe09,0xf7ff4630,0x4648fdeb,
+0x69374631,0xf960f7fc,0x300cf8d8,0x0016f8ad,0xa034f8d3,0x0f02f1ba,
+0x6bdbd124,0x0f04f013,0xf898d020,0x2b0131ba,0x4631d11c,0xf7fc4648,
+0xf8bdf953,0x8a843016,0x4605330f,0x030ff023,0x4638a905,0xf8ad4652,
+0xf7fc3014,0xf8bdfdfd,0x46283014,0xf8bd18e4,0x1ae43016,0xf7ffb2a1,
+0xe005fdc9,0xf10d4638,0x22020116,0xfdecf7fc,0x3016f8bd,0x43dba906,
+0x3d02f821,0x1cb82202,0xfde2f7fc,0xa9039a01,0xf8980213,0xf4032104,
+0x43136370,0x630bea43,0x1d382208,0xf7fc9303,0x4640fdd3,0x9a014631,
+0xff3af7ff,0xf898b128,0x20013104,0xf8883301,0xb0073104,0x8ff0e8bd,
+0x2200b510,0xff52f7ff,0x46c0bd10,0x690bb510,0xf002791a,0x2a6002f0,
+0x2201bf14,0xf7ff2202,0xbd10ff45,0xb5708dc3,0xbb4b4605,0x211c6880,
+0xf8d0f7ff,0xb3184606,0xf7ff210c,0x6a68fd7b,0x47986e03,0xf8956a68,
+0xf8d04105,0x47983084,0x210c1824,0x4106f885,0xf7ff4630,0x4628fd63,
+0x22014631,0xff22f7ff,0xf8d5b928,0x330131cc,0x31ccf8c5,0xf8d5e004,
+0x330131c8,0x31c8f8c5,0x46c0bd70,0xf890b510,0xb90b3178,0xffcaf7ff,
+0x46c0bd10,0x3ffff1b2,0xd101b510,0xe00723ff,0xd0002a02,0xf082b90a,
+0x23010202,0xb2db4093,0xf8902901,0xd1012178,0xe0014313,0x0303ea22,
+0x3178f880,0xffaef7ff,0x46c0bd10,0x4604b570,0x25006a40,0x47986c83,
+0x68836a60,0x6a604798,0x47986e43,0x21016a60,0x47986a83,0x460a2100,
+0xf7fb68e0,0x68e0fbb5,0xfbacf7fb,0x10f4f8d4,0x5105f884,0x5104f884,
+0x50fcf8c4,0x68a0b129,0xf7ff2201,0xf8c4f849,0xf8c450f4,0x622550f8,
+0x5174f884,0x46c0bd70,0xe92d68c2,0x6b5341f3,0x2b024605,0x690f460e,
+0x6bd3d112,0x0f04f013,0xf890d00e,0x2b0131ba,0x883bd10a,0xb29b4630,
+0xb29b009b,0x8a89803b,0x39180089,0xfceaf7ff,0x46302108,0xfcdef7ff,
+0xb299887b,0x020ff011,0xf011d021,0xd0040f01,0x3154f8d5,0xf8c53301,
+0xf0113154,0xd0040f02,0x3158f8d5,0xf8c53301,0xf0113158,0xd0040f04,
+0x315cf8d5,0xf8c53301,0xf011315c,0xf0000f08,0xf8d580c2,0x33013160,
+0x3160f8c5,0x8ab3e0bb,0xd8072b03,0x3144f8d5,0x330168a8,0xf8c54631,
+0xe0b33144,0x69312202,0x0006f10d,0xfcd8f7fc,0x22026931,0xa8013102,
+0xfcd2f7fc,0x6b5368ea,0xd1262b02,0xf0136bd3,0xd0220f04,0x31baf895,
+0xd11e2b01,0xf8bd883b,0xb29b2006,0xd004429a,0x3148f8d5,0xf8c53301,
+0xf8bd3148,0x69303004,0xb29c43db,0xf1048801,0xf64f020f,0xea0273f0,
+0x42990303,0xb2a3d105,0x803b8004,0xf8ad883b,0x883b3006,0x1006f8bd,
+0x428bb29b,0x43cbd106,0xf8bd041b,0x0c1b2004,0xd015429a,0xb29b883b,
+0xd004428b,0x3148f8d5,0xf8c53301,0x43cb3148,0xf8bd041b,0x0c1b2004,
+0xd05c429a,0x314cf8d5,0xf8c53301,0xe056314c,0x46302104,0xfc4ef7ff,
+0x2b078ab3,0x6933d94f,0x78dc2108,0xf8934630,0x781f8001,0xf7ff3c0c,
+0x8ab3fc41,0x428bb2e1,0x4630d341,0xfc3af7ff,0x3105f895,0xd006429f,
+0x3150f8d5,0x7105f885,0xf8c53301,0xf8953150,0xf0083105,0x3301040f,
+0x3105f885,0x31b9f895,0xf018b1e3,0xd1010f40,0xd1172c01,0x31b4f8d5,
+0x2c013301,0x31b4f8c5,0xf8d5d105,0x330131bc,0x31bcf8c5,0xf8d5e004,
+0x330131c0,0x31c0f8c5,0xf8852300,0x462831b8,0xfd22f7ff,0x6928b924,
+0xf0004631,0xe00bfee1,0xd1042c02,0x46316928,0xfee0f000,0x68a8e004,
+0x22004631,0xff38f7fe,0x81fce8bd,0x4605b570,0x6c836a40,0xe0024798,
+0xf7ff4628,0x6a68feed,0x47986dc3,0x28004601,0x6a68d1f6,0x47986e43,
+0x6c436a68,0x6a684798,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,
+0xf8851824,0x46284106,0xfe50f7ff,0x46c0bd70,0xf8d0b5f0,0xb0e521a4,
+0x2101460c,0x18524605,0xaf324668,0xf96cf7fc,0x21014638,0xf7fc2210,
+0x4628f967,0xfcb0f7ff,0x26006a68,0x60f8f8c5,0x47986883,0xf8d5b1ac,
+0xb19220f4,0x46314638,0xff36f7fb,0x60f4f8c5,0xf8bde00b,0xf8bd20ce,
+0x429a30cc,0x4668bf2c,0x4622a832,0xf7fb2100,0x6a68ff27,0x6ac32101,
+0x46044798,0xd1ec2800,0x4668e00e,0x888388c2,0xd204429a,0x46222100,
+0xff16f7fb,0x68a8e004,0x22014621,0xfec8f7fe,0x0628f105,0x21004630,
+0xff40f7fb,0x28004604,0x6a68d1e7,0x47986843,0x690be006,0x795a4628,
+0x020ff002,0xfd10f7ff,0xa8322100,0xff2ef7fb,0x28004601,0xe014d1f1,
+0xf8d58dea,0x429a31a4,0x68a8d90a,0x22014621,0xfea2f7fe,0x31a8f8d5,
+0xf8c53301,0xe00431a8,0x21004630,0xf7fb4622,0x4668fedf,0xf7fb2100,
+0x4604ff11,0xd1e32800,0xbdf0b065,0x4605b570,0x68436a40,0x6a684798,
+0x47986c43,0x6e036a68,0x6a684798,0x4105f895,0x3084f8d0,0x18244798,
+0xf8856a68,0x49224106,0x47986f03,0x1180f8d5,0x00f0f8c5,0xf8d5b189,
+0x23022184,0x0202ea81,0xf7fb68e8,0xf8d5fa17,0x23021180,0x460a68e8,
+0xfa2cf7fb,0xf8852300,0xf895317c,0xb10b3176,0xe0004b14,0x68ea4b14,
+0x6b5361eb,0xd8052b01,0xf0136bd3,0xd0010f04,0xe0002301,0xf8852300,
+0x696a31b9,0xf8852301,0xf8853175,0xf04f3177,0xf8c27380,0xf1033100,
+0x4628437f,0x317af885,0xfb16f7ff,0x21084628,0xfb20f7ff,0x46c0bd70,
+0x00017a28,0xc701ff0f,0x0701ff0f,0x41f0e92d,0x26006a04,0x4780f014,
+0x62064605,0xf7ffd006,0x4628fdb5,0xff92f7ff,0xe12c4634,0xda2e2c00,
+0x685b6943,0x0604f013,0xf890d017,0xb92b3174,0xf7ff4639,0x4628ff01,
+0xfed8f7ff,0xf8856928,0xf0007174,0x696afd3d,0x68134628,0xf0432102,
+0x60130304,0xfaeaf7ff,0x2301e011,0x3174f880,0xf0006900,0x4628fd2f,
+0xf7ff4631,0x4628fee5,0xfebcf7ff,0x6813696a,0x0304f023,0xf8956013,
+0xb10e6174,0xe0f62400,0x0f01f014,0x4628d007,0xf7ff2101,0x4628fed1,
+0xf7ff2101,0xf014fac7,0xd0090f02,0xf8852301,0xf8d53177,0xb11b30fc,
+0x46314628,0xfabaf7ff,0x7f80f414,0xf8d5d004,0x33013164,0x3164f8c5,
+0x7f00f414,0xf8d5d012,0xf8d53168,0x330110f4,0x3168f8c5,0x68a8b131,
+0xf7fe2201,0x2300fdb9,0x30f4f8c5,0x21004628,0xfea2f7ff,0x7f00f014,
+0xf8d5d004,0x3301316c,0x316cf8c5,0x6f80f014,0xf8d5d004,0x33013170,
+0x3170f8c5,0xea044859,0xb9080000,0xe0a24604,0x4f7cf414,0xf414d063,
+0xd1026080,0x46064607,0x6a68e00b,0x47986d03,0xbf181e07,0x6a682701,
+0x47986a43,0xbf181e06,0xf4142601,0xd00b6f00,0x6d036a68,0x28004798,
+0x2701bf18,0x6a436a68,0x28004798,0x2601bf18,0x5f80f414,0x6a68d00b,
+0x47986d03,0xbf182800,0x6a682701,0x47986a43,0xbf182800,0xf4142601,
+0xd0045f00,0x3138f8d5,0xf8c53301,0xf4143138,0xd0094f80,0x313cf8d5,
+0x33012701,0x313cf8c5,0x313cf8d5,0x3138f8d5,0x4f00f414,0xf8d5d00f,
+0xf8d53140,0x330110f4,0x3140f8c5,0x68a8b131,0xf7fe2201,0x2300fd45,
+0x30f4f8c5,0xb90f2601,0xe008b90e,0x4628b126,0xf7ff2100,0xb117fe29,
+0xf7ff4628,0xf014fdff,0xd0027f80,0xf7ff4628,0xf414fae3,0xd10c3390,
+0xe02c461e,0x36014628,0xfce6f7ff,0xd1052e04,0xf4436a2b,0x622b3380,
+0x2600e006,0x6dc36a68,0x46014798,0xd1ed2800,0x6e036a68,0x6a684798,
+0x4105f895,0x3084f8d0,0xf8954798,0x18242107,0x4293b2e3,0x4106f885,
+0xf895d009,0xebc33105,0xb2db0302,0xd8022b02,0xf7ff4628,0x2e03fc3b,
+0x2400bf94,0x8deb2401,0xf8d5b12b,0xb91331a0,0xf7ff4628,0x4620fac9,
+0x81f0e8bd,0x0101fc00,0x2400b570,0xf8804605,0x69004175,0xfccaf000,
+0xf7ff4628,0x68e8fc73,0xf7fb4621,0xf8d5f845,0xb1280190,0xf8caf7fe,
+0x0190f8d5,0xfac2f7fe,0x018cf8d5,0xf7feb128,0xf8d5f8c1,0xf7fe018c,
+0x68e8fab9,0xff5cf7fa,0x462968a8,0x72e8f44f,0xfce2f7fe,0x46c0bd70,
+0xb5102901,0xdd074604,0xf8c02300,0xf8c031b4,0xf8c031bc,0xe02831c0,
+0x21a4f8d4,0x48138de1,0xf9bef7fc,0x11a8f8d4,0xf7fc4811,0xf8d4f9b9,
+0xf8d431c0,0xf8d421bc,0x480e11b4,0xf9b0f7fc,0x113cf8d4,0xf7fc480c,
+0xf894f9ab,0xf8941106,0x480a2107,0xf9a4f7fc,0xf8d44809,0xf8d411c4,
+0xf8d421c8,0xf7fc31cc,0xbd10f99b,0x00017d8e,0x00017da4,0x00017db7,
+0x00017de2,0x00017dfe,0x00017e27,0x43f0e92d,0xf2414698,0xb08943e4,
+0x46164299,0xd1059f10,0x33f4f244,0xd101429a,0xe0002301,0x2b002300,
+0x80a6f000,0x70e8f44f,0xf7fe2100,0x4604faa9,0xf0002800,0x2100809d,
+0x72e8f44f,0xf7fc4605,0x2310f92b,0x31a4f8c4,0x0028f104,0x22312101,
+0x8008f8c4,0xf7fb6167,0x2300feb7,0x93019300,0x46309302,0x463a4641,
+0xf0179b11,0x60e8f8e7,0xd0772800,0xfe56f7fa,0x68e06020,0xf926f7fb,
+0x46066068,0x4a3d6960,0x493d6843,0x0301f083,0x0301f003,0xbf182b00,
+0x68224611,0x3176f884,0x0329f640,0xf8d4429a,0xf8d49008,0xd10ac00c,
+0xf500b926,0xf5007e00,0xe0087304,0x7e00f500,0x7308f500,0xf500e003,
+0xf5007e00,0x93007304,0x7344f240,0x23069303,0x33029304,0x93052710,
+0x46482600,0x46734662,0x97029701,0xf7fd9606,0x6260fb7b,0xd0352800,
+0x46314620,0x464368e2,0xfbecf000,0xb3686120,0xf8c42305,0x23023194,
+0x3198f8c4,0xf8c4331e,0x3344319c,0x31b0f8c4,0xf88468e3,0xf8c46179,
+0xf8c471a4,0xf8c461ac,0x6b5b61a0,0xd9092b01,0x49124630,0xfe3af7fb,
+0x4811b120,0xf8e8f7fc,0xe0032301,0xf7fc480f,0x2300f8e3,0x31baf884,
+0x490e480d,0xf7fe4622,0xe006fc7f,0x462168a0,0x72e8f44f,0xfbe4f7fe,
+0x46282500,0xe8bdb009,0x46c083f0,0x00017e5b,0x00017e63,0x00017e6d,
+0x00017e77,0x00017e90,0x00017eaa,0x00005715,0x30fff04f,0x46c04770,
+0xb5106a83,0xf0006998,0xbd10fb81,0x4604b510,0xf7ff6880,0xb130fd73,
+0xf1042100,0x460a001c,0xf86af7fe,0x68a0e002,0xf872f7ff,0x46c0bd10,
+0x6a84b510,0xf7ff68a0,0xb128f85d,0xf7ff68a0,0x4620f861,0xffe2f7ff,
+0x46c0bd10,0xb5106a83,0xf0006998,0xbd10fb61,0xb5106a8b,0x46116998,
+0xfb36f000,0x46c0bd10,0x6a84b510,0xf7ff68a0,0x68e0fe87,0xfb96f7fe,
+0xbd102000,0x6a84b570,0x69a04601,0xfadcf000,0x69a04605,0xfaa8f000,
+0x22342100,0x001cf104,0xf82ef7fc,0x68a04b03,0x62246263,0xfccaf7ff,
+0xbd704628,0x000059ed,0x6844b510,0xf7ff68a0,0x4620f831,0xffa6f7ff,
+0x46c0bd10,0x47f3e92d,0x46994f25,0x4605683b,0x46882b07,0xdc3f4692,
+0xfb6af7fe,0x46062100,0xf7fe2050,0x4604f97d,0xd0352800,0x22502100,
+0xf802f7fc,0x6065683b,0xf8a46023,0xf8c49014,0x60e68010,0xf2414620,
+0x464a41e4,0xf8cd4633,0xf8cd8000,0xf7ffa004,0x60a0fea1,0x2000b1e0,
+0x9a0b990a,0x95004b0f,0xf9ecf7fe,0x68a0b118,0xfe26f7ff,0x4b0ce010,
+0x681b490c,0x61a3683a,0xf7fc4628,0x480af837,0xf7fc4629,0x683bf815,
+0x33014620,0xe000603b,0xe8bd2000,0x46c087fc,0x0001c6bc,0x0000596d,
+0x0001c70c,0x00017eb3,0x00017ebf,0x8a934602,0x1a5b6900,0x61101840,
+0x47708293,0xf0008ac0,0x47700007,0xf0018ac3,0xf0230107,0x43190307,
+0x477082c1,0xf3c08ac0,0x47701000,0xb5708a8b,0x460c2b03,0xd9266880,
+0x782b690d,0x2b01091b,0x8acbd121,0xf64f78aa,0xea03611f,0xf0120101,
+0xbf18020f,0x1342ea41,0xbf1882e1,0x786982e3,0xf0014620,0xf7ff0107,
+0x782bffd5,0x0f08f013,0x8ae3d003,0x0308f043,0x462082e3,0xf7ff2104,
+0x2000ffbd,0x4621e004,0xf7fe2200,0x2001faa9,0x46c0bd70,0x688b690a,
+0x41f0e92d,0x0302ebc3,0x460c2b03,0xdc2c6886,0x46308a8f,0xf7fe1d39,
+0x4605faad,0x4621b930,0x22014630,0xfa90f7fe,0xe038462c,0xf7ff4620,
+0x4601ffa1,0xf7ff4628,0x4620ffa1,0xffa6f7ff,0xb1108aeb,0x0310f043,
+0xf023e001,0x69280310,0x82eb6921,0x3004463a,0xff66f7fb,0x46304621,
+0xf7fe2201,0x462cfa71,0x1f13e004,0x8a8b610b,0x828b3304,0x23106925,
+0x4620702b,0xff86f7ff,0x2314b108,0x4620702b,0xff74f7ff,0x8ae37068,
+0xf3c378aa,0x431a1343,0x8b6370aa,0x462070eb,0x81f0e8bd,0xb5104601,
+0x68802234,0xfa6cf7fe,0x46c0bd10,0x4ff0e92d,0x4688690d,0x6014f8b8,
+0xb08d68aa,0x2e0f2100,0x4682682f,0x910b9205,0x468bd803,0x91079106,
+0x686ce01b,0x041b0c23,0xb16b940b,0x04230c1a,0x42960c1b,0xd206930b,
+0xf06f468b,0x910b040d,0x91079106,0x4614e0b6,0xf5b0980b,0xd9075f00,
+0x930b2300,0x469b9306,0xf06f9307,0xe0a90417,0xbf284284,0x90074620,
+0x2100b158,0xf854f7fe,0xb1084683,0xe0089006,0x041af06f,0x9006900b,
+0xf8dde098,0xf8cdb01c,0xb14cb018,0x0210f1a6,0xf1054658,0x42940110,
+0x4622bf38,0xfee8f7fb,0x429f4b7c,0x463dd001,0x2c07e00a,0x9a05d9d5,
+0x5004f8db,0x0202f042,0x0b08f10b,0x92053c08,0x19ef4f75,0x7f99f5b7,
+0x462fbf88,0x7f83f5b7,0xd804d038,0xd0442f02,0xd0102ffd,0xf240e047,
+0x429f1307,0x3304d01f,0xd140429f,0x0000f8da,0x4a6a2100,0x737af44f,
+0xf94cf7fe,0xf89be035,0xf89b1002,0x04093001,0x2103ea41,0x3000f89b,
+0x0000f8da,0xf89b4319,0x24003003,0x6103ea41,0xf91cf000,0x4658e046,
+0x2204495d,0xfdf8f7fb,0xb9e04606,0xf8da2301,0x93000004,0x46224659,
+0xe00b4633,0x49564658,0xf7fb2204,0xb970fde9,0x9a0b9000,0x0004f8da,
+0xab0b4659,0xfea8f7fe,0xf8dae003,0xf0000000,0x4604f8cb,0x2300e022,
+0x930a9309,0xa90a9b05,0x0202f013,0xab09d00a,0xf8da9300,0x23010000,
+0x93029101,0x465a4629,0xe0084623,0x9300ab0b,0x0000f8da,0x91019b0b,
+0x46299202,0xf000465a,0x4604f895,0x9b0ab108,0x462f930b,0xf8da4641,
+0x22000008,0xf968f7fe,0x902cf8dd,0x7343f240,0xbf0c2c00,0x2600464e,
+0x022cf106,0xbf94429a,0xf44f4635,0xf8da65e3,0xf1050008,0xf7fe012c,
+0x4680f969,0xd0462800,0x031cf105,0x210c8283,0xfe58f7ff,0xf8d89a05,
+0x0c130010,0xf8c06007,0x041b9004,0xf043b10c,0x60c40301,0xf1bb6083,
+0xd0070f00,0x4659b135,0x462a3010,0xfe24f7fb,0x1b7644ab,0xe01c4647,
+0x7344f240,0xbf34429e,0x461c4634,0x0008f8da,0xf7fe4621,0x4605f93b,
+0xf8dab930,0x46410008,0xf7fe2201,0xe012f91d,0x69004659,0xf7fb4622,
+0x44a3fe07,0x1b36603d,0xf1bb462f,0xd0010f00,0xd1dd2e00,0x0004f8da,
+0xf7ff4641,0x9b06f835,0xf8dab12b,0x46190008,0xf7fe9a07,0xb00df921,
+0x8ff0e8bd,0xfffeda3e,0x001bebe0,0x00005f6d,0x00017edf,0x41f0e92d,
+0x460e4680,0x21002034,0x461d4617,0xff30f7fd,0xb1404604,0x22342100,
+0xfdb6f7fb,0x602660e5,0xf8c46067,0x46208008,0x81f0e8bd,0x9c08b57f,
+0xf89d6c00,0x6a056028,0x9c099400,0x94019602,0x47a0696c,0xbd70b004,
+0x46c04770,0x46c04770,0x46c04770,0x46c04770,0x4604b510,0x6a036c00,
+0x4798685b,0x2301b910,0x3045f884,0x46c0bd10,0xf890b570,0xb0864044,
+0xb9bc4605,0xb1936c03,0xffeaf7ff,0x23042601,0x46214628,0x9400aa05,
+0x96029401,0xffcaf7ff,0xdb042800,0x4b049a05,0xbf08429a,0x230163ae,
+0x3044f885,0xbd70b006,0x14e46c77,0x6880b510,0xfd76f7fa,0x46c0bd10,
+0xb5106803,0x21016898,0xfd3cf7fa,0x46c0bd10,0x4604b537,0x460d4811,
+0xfd0ef7fd,0x46286420,0xfd0af7fd,0x63e06c23,0xb198b1a3,0x6be26358,
+0x68606c23,0x6c236353,0xf1d34621,0xbf380301,0x93002300,0x462b6822,
+0xff78f7ff,0xb10860e0,0xe0012000,0x30fff04f,0x46c0bd3e,0x00017ee4,
+0x68c0b510,0xfe16f7ff,0x46c0bd10,0x4604b570,0x460d68c0,0xfd7ef7ff,
+0x4629b988,0xf7fe6860,0x6c21f847,0x6a0b4602,0x68db6be0,0xb1184798,
+0x33016aa3,0xe00262a3,0x33016923,0xbd706123,0x4604b570,0xf7fe6840,
+0x4601f829,0xf7ff68e0,0x4605fd95,0x6820b178,0xf7fe4629,0xb138ff67,
+0x69e28aab,0x696318d2,0x330161e2,0xe0026163,0x33016ae3,0x200062e3,
+0x46c0bd70,0x6800b510,0xff90f7fe,0x46c0bd10,0x6800b510,0xff92f7fe,
+0x46c0bd10,0xb5106c03,0x2200b11b,0x6bc3635a,0x68c0635a,0xfdbef7ff,
+0x46c0bd10,0x41f0e92d,0x461e4d0f,0x4607682b,0x46902b07,0x2048dc14,
+0xf7fd2100,0x4604fe45,0x2100b170,0xf7fb2248,0x682bfccb,0x63636027,
+0x602b3301,0x60664b05,0x8008f8c4,0xe000601c,0x46202400,0x81f0e8bd,
+0x0001c6c0,0x0001c70c,0xf5020052,0x5a886200,0x4770b280,0xb570690b,
+0x68036103,0x695b4604,0x2b15460d,0x2b18d003,0x2b1bd001,0x230cd101,
+0x2b17e004,0x2b18d001,0x2314dd01,0x6a226223,0x82a31d13,0x82e38923,
+0xf4136923,0xd0087f80,0x46294620,0xffd8f7ff,0x100ff3c0,0x82e0b283,
+0x8aa3e000,0x89238323,0x69238363,0x7f00f413,0x6a22d00a,0x46294620,
+0xf7ff3201,0xf3c0ffc5,0xb283100f,0xe0008360,0x83a38b23,0x83e38923,
+0x46c0bd70,0x00408900,0x46c04770,0xb5108983,0xfbb2460c,0xfb03f1f3,
+0x02092311,0x03fff003,0x4321f043,0x417ff401,0x2200430b,0xe00061a3,
+0x69a33201,0xda032b00,0x429a4b05,0xe004d1f8,0x429a4b04,0x2000d801,
+0xf04fe001,0xbd1030ff,0x00989680,0x0098967f,0x41f0e92d,0x460f4680,
+0x0115461e,0xfa562400,0xf013f304,0xd0060f01,0x46394640,0xf7ff1962,
+0x4603ffc9,0x3401b918,0xd1f02c10,0x46182300,0x81f0e8bd,0x30fff04f,
+0x46c04770,0xb5108983,0xfbb2460c,0xfb03f1f3,0x02092311,0x03fff003,
+0x4300f043,0x417ff401,0x2200430b,0xe00061a3,0x69a03201,0xda032800,
+0x429a4b07,0xe008d1f8,0x429a4b06,0xf010d805,0xd1025f80,0x7040f3c0,
+0xf04fe001,0xbd1030ff,0x00989680,0x0098967f,0xe92d3901,0x46044ff8,
+0x461e4693,0xd8052907,0xf001e8df,0x17040f07,0x2b040404,0x0001f06f,
+0x8ac3e051,0xebc28a82,0x69030503,0x7f80f413,0x8b43e022,0xebc28b02,
+0x69030503,0x7f00f413,0x6903e01a,0x6f80f413,0x2302d104,0xf06f6033,
+0xe038001d,0x2b016833,0x2302d802,0xe0126033,0x25026a03,0x0802f103,
+0x8bc3e011,0xebc28b82,0x69030503,0x6f00f413,0x6035d101,0x6833e7e7,
+0xd20342ab,0xf06f6035,0xe01c000d,0x68204690,0xf906f7fa,0x46822100,
+0xf7fa6820,0x2700fb0d,0xe0084681,0x0208eb07,0x46494620,0xfef0f7ff,
+0x0017f82b,0x42af3701,0x6820d1f4,0xf7fa4651,0x6035fafb,0xe8bd2000,
+0x46c08ff8,0x4ff0e92d,0xb0874607,0x46146800,0x9101461d,0xf8e0f7fa,
+0x46832100,0xf7fa6838,0x4681fae7,0xf7ff4638,0x4621ff15,0x462a4682,
+0xf7fba802,0x2600f88b,0xf016e02d,0xd1040f03,0x491ea802,0xf7fb0072,
+0x9b01f887,0x4638b933,0x46324649,0xfeb8f7ff,0xe0164604,0xea4f2400,
+0x46251806,0x46494638,0x0208eb05,0xff3af7ff,0x3ffff1b0,0xf64fd102,
+0xe00674ff,0xf305fa10,0x43233501,0xb29c2d10,0xa802d1ec,0x4622490c,
+0xf862f7fb,0xebb63601,0xd3ce0f5a,0x4909a802,0xf85af7fb,0x46596838,
+0xfaa2f7fa,0x98049b02,0x0003ebc0,0xe8bdb007,0x46c08ff0,0x00017ef0,
+0x00017ef9,0x0001a336,0x4ff8e92d,0x46041e0d,0x469a4690,0x2500da0f,
+0xf894e008,0x23012027,0x409318aa,0x420b6921,0x3501d005,0x3026f894,
+0x429d3b01,0xf894dbf1,0x23012027,0x409318aa,0xea136921,0xd0020601,
+0x30fff04f,0x6820e047,0xf862f7fa,0x46834631,0xf7fa6820,0xf894fa69,
+0xf04f3024,0xfa1131ff,0xea6ff303,0xf8940903,0x46073025,0x40911c5a,
+0xf303fa0a,0x0101ea48,0x0803ea41,0xf0436943,0x61434300,0x2301e00e,
+0xea0840b3,0x421a0209,0xeb04d007,0x8d1a0345,0x46394620,0xf7ff18b2,
+0x3601fe79,0x3024f894,0xd3ec429e,0x6820697b,0x4300f023,0x2100617b,
+0xf98ef7fa,0x21016820,0xf98af7fa,0x46394620,0xfe20f7ff,0x46596820,
+0xfa2af7fa,0xe8bd2000,0x46c08ff8,0x41f0e92d,0x46144607,0x010d461e,
+0xf014e00f,0xd0090f01,0x0301f006,0xf04f4638,0x462a31ff,0xff80f7ff,
+0xb9284603,0x08643501,0x2c000876,0x4623d1ed,0xe8bd4618,0x46c081f0,
+0x4ff0e92d,0x9200b085,0x46996a02,0x46041e4b,0x92029101,0xf2002b07,
+0xe8df810d,0x0008f013,0x010b0012,0x010b001d,0x010b010b,0x8ac3002b,
+0x1a9b8a82,0xf2004599,0x690380fa,0x2500f3c3,0x8b43e008,0x1a9b8b02,
+0xf2004599,0x690380f0,0x2540f3c3,0xe01c4690,0xf4136903,0xf0406280,
+0xf1b980e9,0xf2000f02,0x6a0380e2,0xf1034615,0xe00e0802,0xf4136903,
+0xf0406100,0x8bc280db,0xebc38b83,0x45990302,0x80d1f200,0x0802ebc9,
+0x6820460d,0xffb0f7f9,0x90032100,0xf7fa6820,0x4606f9b7,0x46abb90d,
+0xea4fe028,0x21000049,0xfbc6f7fd,0xb9104683,0x051af06f,0x2700e0b2,
+0xe019463d,0x46209a00,0x46315aaa,0x200bf825,0x0208eb07,0xfd88f7ff,
+0x52e89b00,0x300bf835,0x0203ea30,0xf06fd002,0xe0920501,0xea809a00,
+0x52ab0303,0x35023701,0xd1e3454f,0xf04f6973,0xf0430a00,0x61734300,
+0x9d00e00a,0x0208eb0a,0x301af835,0x46314620,0xfdd6f7ff,0x0a01f10a,
+0xd1f245ca,0x01159a02,0x1e539a01,0xd83e2b07,0xf003e8df,0x293d1204,
+0x2e3d3d3d,0x0309eb08,0x4631011b,0xb29b6a22,0xf7ff4620,0x4620fdbd,
+0xf1054631,0xe028023c,0x1308ea4f,0x4631b29b,0x46206a22,0xfdb0f7ff,
+0xeb086a22,0x011b030a,0x32014631,0x4620b29b,0xfda6f7ff,0x46314620,
+0x023df105,0x4620e011,0xf1054631,0xe00c023e,0xea4f6a22,0x46311308,
+0xb29b3201,0xf7ff4620,0x4620fd93,0xf1054631,0xf7ff023f,0x6973fd67,
+0xf0236820,0x61734300,0xf7fa2100,0x6820f881,0xf7fa2101,0x4620f87d,
+0xf7ff4631,0xf1bbfd13,0xd0050f00,0x46599800,0x024aea4f,0xf9dcf7fb,
+0xe0132700,0x0508eb07,0x4620462a,0xf7ff4631,0x9a00fcfb,0x3017f832,
+0xb2824058,0x4629b12a,0xf7ff4620,0x4605fedf,0x3701b918,0xd1e94557,
+0xf1bb2500,0xd0050f00,0x46596860,0x0249ea4f,0xfceaf7fd,0x99036820,
+0xf8f2f7fa,0xf06fe004,0xe001050e,0x35fff04f,0xb0054628,0x8ff0e8bd,
+0x6943b5f0,0x2b14b08d,0xf3404607,0xf7f98095,0x4605ff15,0xf0402800,
+0x4638808f,0xff36f7f9,0xf0002800,0x4c468089,0x4629223c,0xf7fb4620,
+0x6027f973,0xf7f94638,0x69bbfe8b,0xf3c36060,0x2b0143c2,0x2b05d002,
+0xe075d009,0x0320f04f,0xf04f8163,0x81a30340,0x0380f04f,0xf04fe007,
+0x81630360,0x0340f04f,0xf44f81a3,0x812373c0,0x2b15697b,0x2b18d001,
+0x4c31d119,0xae062510,0x462a4930,0xf7fb4630,0xf104f967,0x46310028,
+0xf7fb462a,0x2308f961,0x3026f884,0xf8843307,0x230b3024,0x3025f884,
+0x5027f884,0x2b1be032,0xd1164d23,0x4924ac0a,0x46202208,0xf94cf7fb,
+0x0028f105,0x22084621,0xf946f7fb,0xf8852304,0x330b3026,0x3024f885,
+0xf885230b,0x33093025,0xf10de016,0x49190406,0x46202212,0xf934f7fb,
+0x0028f105,0x22124621,0xf92ef7fb,0xf8852309,0x33083026,0x3024f885,
+0xf885230d,0x33033025,0x3027f885,0xf7f94638,0x2100fe4f,0x46384604,
+0xf856f7fa,0x48064601,0xfc44f7ff,0x46214638,0xf84ef7fa,0xe0004802,
+0xb00d2000,0x46c0bdf0,0x0001c6c4,0x00017f02,0x00017ee8,0x00017f12,
+0x41f0e92d,0x46804b13,0xe01e681e,0x68b368f4,0x18e74640,0xf82ef7fb,
+0xe0104605,0x46414620,0xf7fa462a,0xb930fffd,0x2b3d5d63,0x1c63d103,
+0xd10d1958,0xf814e008,0x2b003b01,0x42bcd1fb,0x7823d202,0xd1e92b00,
+0x2e006836,0x4630d1de,0x81f0e8bd,0x0001c700,0x2010b570,0x2100460c,
+0xf7fd4615,0xb910fa25,0x001af06f,0x4a05e008,0x60432310,0x60c46813,
+0x60856003,0x20006010,0x46c0bd70,0x0001c700,0xb5104b06,0xb93b681b,
+0x68194b05,0x4b05b121,0xb10a681a,0xffdcf7ff,0xbd102000,0x0001c700,
+0x0001bc3c,0x0001bc40,0xf001fb00,0x46c04770,0xf001fb00,0x46c04770,
+0x4604b570,0x460d1400,0xfff6f7ff,0x4606b2a1,0xf7ff4628,0xeb06ffed,
+0xbd704020,0x47702000,0x47706880,0xb51068c3,0x47986840,0x46c0bd10,
+0xb5106883,0xb1186b58,0x699b6a03,0x4798b103,0x46c0bd10,0x4608b510,
+0x4611b119,0xf7fd461a,0xbd10f85b,0x6803b510,0x7c584604,0x6860b118,
+0xf0032101,0x6823ff5d,0xb1537c5b,0x2100b130,0x0038f104,0xf7fd460a,
+0xe002f847,0xf0006860,0xbd10fdff,0x6a84b513,0x0107f10d,0xf0016860,
+0xb128fee9,0x3007f89d,0x4620b113,0xffdaf7ff,0x46c0bd1c,0x6840b510,
+0xfdeaf000,0x46c0bd10,0x6a83b507,0x92002200,0x21026858,0xf0044613,
+0xbd0efd5b,0x47ffe92d,0xf46f4699,0x440b4309,0x46174688,0x468a6a85,
+0xd80a2b0a,0xf003e8df,0x2c29130d,0x64615c57,0x00200667,0x08a2f04f,
+0x2000e074,0x3afff04f,0x2200e071,0xf8cd9700,0x92029004,0x2301e005,
+0xf8cd9700,0x93029004,0x92032200,0x49386868,0xf0044613,0xe05efcb3,
+0x97002200,0x9004f8cd,0x92039202,0x49336868,0xf240e7f2,0xe02d53dc,
+0x7c5b682b,0x6868b113,0xfe1cf000,0x2400682a,0x33e0f8d2,0x612b62ac,
+0x33a4f8d2,0x616b62ec,0x33e4f8d2,0x61ab4638,0x33a8f8d2,0x0110f105,
+0xf8d261eb,0x622b33e8,0x33b0f8d2,0xf8d2626b,0xf1b93570,0xbf340f24,
+0x2224464a,0xf7fa632b,0x4620ffdf,0x682be027,0x3022f893,0xe021603b,
+0x683b682a,0x3022f882,0xf04fe01c,0xe0190809,0x080af04f,0x682ae016,
+0x24002306,0xf3f3fb99,0xf8c24626,0xe0083114,0xfb042206,0x19f11002,
+0xf7fa3052,0x3401ffbd,0x68293606,0x3114f8d1,0xd3f1429c,0x45d02000,
+0x2300d007,0x68689300,0x463a4641,0xf004464b,0xb004fcc3,0x87f0e8bd,
+0x0001a020,0x0001a02e,0x6a8cb510,0x68234611,0xf7fd6c98,0x6862fa97,
+0x03a0f243,0x58d04601,0xfdf4f006,0x46c0bd10,0x4ff0e92d,0xb0894606,
+0x2084460d,0x46172100,0xf8dd4699,0xf7fd804c,0x4604f8db,0xd0442800,
+0x22842100,0xff60f7fa,0xf7fd4630,0xab07fab9,0x93059001,0xf04f4683,
+0x46200a00,0x41e4f241,0x4643464a,0xf8cd9502,0x9703a000,0xf0169404,
+0x4605ff4f,0xd02a2800,0x60206060,0x465060a6,0x46429912,0x96004b1a,
+0xf944f7fd,0xb9f04607,0x49194b18,0x67236363,0x67a36763,0x464267e3,
+0xf7fa4630,0x68abff8f,0x6b1a4641,0x4b144813,0xff6af7fa,0x46284b13,
+0x49139300,0x46234a13,0x97029701,0xf946f016,0x4620b908,0x9907e00c,
+0xf7fa480f,0x6860ff59,0xf968f016,0x46214658,0xf7fd2284,0x2000fa61,
+0xe8bdb009,0x46c08ff0,0x000069b1,0x0dadbeef,0x0001a03d,0x0001a042,
+0x0001a078,0x00006949,0x0001a0ec,0x0001a082,0x0001a085,0xe92d6883,
+0x460541f0,0x69106b5f,0x89824616,0xd0422f00,0x036cf648,0xd026429a,
+0xf0136afb,0xd0220f01,0xb3027b6a,0x0f01f012,0x7803d005,0x0f01f013,
+0x2301d101,0xf012e011,0xd00e0302,0x78427803,0x401a7901,0x40137883,
+0x401a78c2,0x40117943,0x2bff400b,0x2300bf14,0x461a2301,0x682bb91b,
+0x6c984631,0x682be01b,0x6c984631,0xf9e4f7fd,0xf9968b42,0xf0223027,
+0x431302ff,0x6a3b8343,0x68db4604,0x463968a8,0x47984622,0x4620b148,
+0xfa18f7fd,0x682be005,0x6c984631,0xf7fd463a,0xe8bdf9d7,0x46c081f0,
+0x4608b510,0x2001b909,0xf7fce001,0xbd10fdbf,0x4608b510,0xffb6f7fc,
+0x46c0bd10,0xb510460b,0x4a024611,0xf926f7fd,0x46c0bd10,0x00006951,
+0x4a06b507,0x92006803,0x46084a05,0x681a9201,0x4b054904,0xfb90f7fa,
+0x46c0bd0e,0x0001a0d0,0x0001a078,0x0001a0ac,0x0001a0c4,0x6803b510,
+0x7c5b4604,0x6840b12b,0xfd06f004,0x23006822,0xbd107493,0x6a80b510,
+0xfff0f7ff,0xbd102000,0x6803b510,0x7c5b6842,0x2400b10b,0xf243e007,
+0x58d003a0,0xf946f006,0xf7fd4604,0x4620fd29,0x46c0bd10,0x6840b510,
+0xfc14f000,0x46c0bd10,0x6840b510,0xf926f001,0x46c0bd10,0x6840b510,
+0xff36f001,0xbd102000,0x2100b510,0x22344604,0x0038f100,0xfe38f7fa,
+0x63e44b04,0x46206423,0xffecf7ff,0xf0056860,0xbd10f81b,0x00006ddd,
+0x6844b510,0x7c5b6823,0x6860b12b,0xfce8f001,0xf7ff4620,0xbd10fdc7,
+0x8a934602,0x1a406900,0x611018c9,0x47708291,0x8a934602,0x1a5b6900,
+0x61101840,0x47708293,0x47708281,0xf0008ac0,0x47700007,0xf0018ac3,
+0xf0230107,0x43190307,0x477082c1,0xf4004602,0x0600437f,0x2003ea40,
+0x037ff402,0x2013ea40,0x6012ea40,0x46c04770,0x78007843,0x2003ea40,
+0x46c04770,0x47706ac0,0x47702000,0x37fcf8d0,0x38007818,0x2001bf18,
+0x46c04770,0xf8d0b510,0xf8904328,0x4602e32c,0xe0092100,0xf8931853,
+0xf010032c,0xd0020f80,0x007ff000,0x3101e004,0xd1f342a1,0x007ff00e,
+0x46c0bd10,0x290e3901,0xe8dfd827,0x0b08f001,0x2626110e,0x14262626,
+0x201d1a17,0xf6420023,0xe01923d0,0x23d1f642,0xf642e016,0xe01323d2,
+0x23d3f642,0xf642e010,0xe00d23d4,0x23d5f642,0xf642e00a,0xe00723d6,
+0x23d7f642,0xf642e004,0xe00123d8,0x23d9f642,0x477054c2,0x43e4f241,
+0xd0014298,0xe0592000,0x3320f244,0xd0544299,0x42993305,0x3b22d051,
+0xd04e4299,0x4299331e,0x3303d04b,0xd0484299,0x42993b0c,0x3301d045,
+0xd0424299,0x42993301,0x3b09d03f,0xd03c4299,0x42993302,0x3b01d039,
+0xd0364299,0x433cf501,0xb29b33d8,0xd9302b02,0x43d5f64b,0xb29b18cb,
+0xd92a2b02,0x3314f244,0xd0264299,0x42993301,0x3301d023,0xd0204299,
+0x42993305,0x3301d01d,0xd01a4299,0x42993301,0x3312d017,0xd0144299,
+0x42993305,0x3301d011,0xd00e4299,0x42993301,0x3301d00b,0xd0084299,
+0x42993301,0x3301d005,0xbf144299,0x20012000,0x2001e000,0x46c04770,
+0xf1d07d80,0xbf380001,0x47702000,0x7d82b510,0xb10a4604,0x32fff04f,
+0x3308f642,0x230054e2,0x3db4f8c4,0xf7ff4620,0xf884ffeb,0xbd100d09,
+0xd9022902,0x001cf06f,0xb139e00e,0x3848f8d0,0x4299685b,0xf06fd002,
+0xe005000c,0xbf181e0b,0xf8802301,0x20003cf4,0x46c04770,0xf8d0b139,
+0x685b3848,0xd0024299,0x000cf06f,0xf8d0e007,0x7a1b3844,0xbf142b00,
+0xf06f2000,0x4770000a,0x2a07b530,0xf89d4604,0x4618500c,0x2100dc01,
+0x6849e00b,0x2903b149,0xf8d4d007,0x685b3848,0xd0024299,0x000cf06f,
+0xb135e00a,0x3844f8d4,0xb9137a1b,0x000af06f,0xb108e002,0x20006001,
+0x46c0bd30,0x0deaf8b0,0x46c04770,0xf44169d1,0x61d17100,0x180cf8d0,
+0x1180f8d1,0x6293185b,0x46c04770,0x4604b510,0x4608b10a,0xf8d0e019,
+0x7b030848,0xf642b183,0x5ce323d0,0xf001b163,0x2b02037f,0x2b04d008,
+0x2b0bd006,0x2b16d004,0xf890d002,0xe00400b2,0x037ff001,0xf89318c3,
+0xbd10009c,0x380cf8d0,0x71a0f503,0xf013680b,0xd1fb0f08,0xb12a7d82,
+0x3de0f890,0x0f08f013,0xb912d000,0x0302f04f,0x4770800b,0x469eb510,
+0xf0014b12,0x565b017f,0x2b004604,0x004ada11,0x0315f102,0x03ceeb03,
+0xf3f2fbb3,0xf8d40099,0xf1013848,0x685b0014,0xd10d2b02,0x001af101,
+0x1e4be00a,0x130eeb03,0x0f01f012,0xf0f1fbb3,0x3060d001,0x30c0e000,
+0x46c0bd10,0x0001bae4,0xf8d0b510,0xf0013848,0x185b017f,0x109cf893,
+0xf7ff230e,0xbd10ffcb,0x47f0e92d,0xf8d0461f,0x46063848,0x4688685b,
+0xbf142b01,0x2510250a,0xf7ff4691,0x1828ffe5,0xb157b280,0x46410044,
+0x464a4630,0xf7ff463b,0xb2a4ffb1,0x19001828,0xe8bdb280,0x46c087f0,
+0x41f0e92d,0xf8d04698,0x46063848,0xf89d685b,0x2b015018,0x230abf14,
+0xb9492310,0x24034611,0xfb03462a,0xf7fff404,0x1824ffbf,0xe000b2a7,
+0x4641005f,0x4630462a,0xffb6f7ff,0x46044641,0x4630462a,0xf7ff9b07,
+0x1824ff85,0xb2a019e4,0x81f0e8bd,0x468cb500,0xb1224696,0x3848f8d0,
+0x429a685b,0xf8d0d113,0xf04f0848,0x6f410e00,0xeb00e00b,0xf893030e,
+0xf00c2078,0x429a037f,0x2001d101,0xf10ee004,0x458e0e01,0x2000d1f1,
+0x46c0bd00,0x690cb510,0x304cf894,0x0107f003,0x3844f8d0,0xeb036011,
+0x68db0381,0x2b02681b,0xeb00d80c,0xf8b30341,0xf8b02dba,0xea233db8,
+0xf8a00302,0xf06f3db8,0xe00a000f,0xf3c37923,0x2b020381,0xf8d0d004,
+0x330133b4,0x33b4f8c0,0xbd102000,0x4615b530,0x522cf500,0x469c4604,
+0xf04f3248,0x68100e01,0xf10eb178,0xfa5f0301,0x320cfe83,0x0f41f1be,
+0xf8d4d1f5,0xf04f3460,0x330130ff,0x3460f8c4,0x230ce00f,0x4303fb0e,
+0x323cf642,0xf5035099,0x601d532d,0xf10c7158,0x7a0a011c,0xf881711a,
+0xbd30e008,0x47f0e92d,0x071cf101,0x7a3a4691,0xb1ca4680,0x240ce012,
+0x8404fb02,0xf5042301,0xf642552d,0x716b363c,0x59a3682a,0x46494640,
+0x23004798,0x51a3792a,0x712b716b,0xb2db1e53,0xd9e82b3f,0x723b2300,
+0x87f0e8bd,0xb5102a2f,0xd8024696,0x000df06f,0xf8b0e02d,0x600b3826,
+0x3828f8b0,0xf8d0604b,0x681c3848,0x8a227ca3,0xea43071b,0x68823302,
+0x6b53608b,0x0f3bf1be,0x684360cb,0x6a53610b,0x6a93614b,0xf8b0618b,
+0x61cb3384,0x382cf8d0,0x4b07624b,0x6853620b,0x6b13628b,0xd90562cb,
+0x630b6823,0x634b6863,0x638b68e3,0xbd102000,0x04da0000,0x468eb500,
+0xf06fb111,0xe00b0001,0x338cf8d0,0xf0132203,0xf8c00380,0xbf162814,
+0x2814f8c0,0x46084618,0x46c0bd00,0x2200b500,0x48074686,0xf8300091,
+0x45733022,0x180bd102,0xe0038858,0x2a0e3201,0x2000d1f3,0x46c0bd00,
+0x0001a860,0x3848f8d0,0x47706858,0x3848f8d0,0x47706818,0x3088f8d0,
+0x2084f8d0,0xf042b10b,0xf8d06280,0xb11b308c,0x2380f422,0x3200f443,
+0xf8c36983,0x47702120,0x37c4f8d0,0xea23b510,0x43110101,0xd0054299,
+0x17c4f8c0,0x60e8f500,0xffe0f7ff,0x46c0bd10,0xb5107c03,0x7d83b13b,
+0xf890b92b,0xb9133d48,0x7280f04f,0x2200e000,0x71a0f04f,0xffe0f7ff,
+0x46c0bd10,0x7d83b510,0xb11b4601,0x3848f8d0,0xb9237b1b,0x3d34f8d1,
+0x02fff033,0x4608d004,0x1180f44f,0xe001460a,0x1180f44f,0xffc8f7ff,
+0x46c0bd10,0x3088f8d0,0xea23b510,0xf8c00301,0xb9333088,0x3084f8d0,
+0x6f80f013,0xf7ffd101,0xbd10ffa5,0xb5707853,0x78947816,0x2603ea46,
+0xf8d078d3,0xea44580c,0x79102403,0xf0417953,0xea400120,0xb2892003,
+0x1420f8a5,0x6422f8a5,0x4422f8a5,0x0422f8a5,0x46c0bd70,0x5342f500,
+0x42993368,0x460ab510,0x2103d103,0xf7ff32d4,0xbd10ffd9,0x2103b510,
+0xf7ff4a01,0xbd10ffd3,0x0001a847,0x5342f500,0x42993368,0x460ab510,
+0x2100d103,0xf7ff32da,0x2000ffc5,0x46c0bd10,0x3848f8d0,0x280cf8d0,
+0x1130f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020003,0x3848f8d0,
+0x280cf8d0,0x1132f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020004,
+0x468cb500,0xf04f6981,0xe00d0e00,0x030eeb0c,0x2a02885a,0x889bd102,
+0xe003520b,0xbf042a04,0x500b685b,0x0e08f10e,0x000cf83e,0x73fff64f,
+0xd1eb4298,0x46c0bd00,0x2d00f8d0,0x380cf8d0,0x2cfcf8c0,0x212cf8c3,
+0x46c04770,0x3844f8d0,0xb12b7a1b,0x380cf8d0,0x1cfcf8c0,0x112cf8c3,
+0x46c04770,0x0381eb00,0x4604b570,0x0778f8d3,0x6983460d,0xb1484798,
+0x380cf8d4,0x2150f8d3,0x40ab2301,0xbf144213,0x20012000,0x46c0bd70,
+0x2101b510,0xffe6f7ff,0x46c0bd10,0x0381eb00,0x4604b570,0x0778f8d3,
+0xb108460d,0x47986943,0x17c1f894,0x2301b159,0xea2140ab,0xf8840303,
+0xb92337c1,0x60e8f504,0xf7ff2108,0xbd70ff2f,0x280cf8d0,0xf443088b,
+0xf8c23380,0xf0113160,0xbf140f02,0x3166f8b2,0x3164f8b2,0x4770b298,
+0x41f0e92d,0x4844f8d0,0x343431e0,0x18a74615,0xf7ff4606,0x4601ffe5,
+0x42815960,0x2000d101,0xbf98e00d,0x3380f5c0,0x628cf506,0xebc0bf8c,
+0x18580001,0x59533204,0x5153181b,0xe8bd6039,0x46c081f0,0x7c43b570,
+0x2b004604,0x8181f000,0x460a2100,0xffd4f7ff,0x22042102,0xf7ff4620,
+0x2104ffcf,0x46202208,0xffcaf7ff,0x220c2106,0xf7ff4620,0x2108ffc5,
+0x46202210,0xffc0f7ff,0x210a4620,0xf7ff2214,0x2500ffbb,0x00aa260c,
+0x32184631,0x35014620,0xffb2f7ff,0x2d063602,0x211cd1f5,0x46202238,
+0xffaaf7ff,0x223c211e,0xf7ff4620,0x2124ffa5,0x46202240,0xffa0f7ff,
+0x22442126,0xf7ff4620,0x2128ff9b,0x46202248,0xff96f7ff,0x224c212a,
+0xf7ff4620,0x212cff91,0x46202250,0xff8cf7ff,0x2254212e,0xf7ff4620,
+0x2130ff87,0x46202258,0xff82f7ff,0x225c2132,0xf7ff4620,0x2260ff7d,
+0x46202134,0xff78f7ff,0x46202136,0xf7ff2264,0x2138ff73,0x46202268,
+0xff6ef7ff,0x226c213a,0xf7ff4620,0x213cff69,0x46202270,0xff64f7ff,
+0x2274213e,0xf7ff4620,0x2140ff5f,0x46202278,0xff5af7ff,0x227c2142,
+0xf7ff4620,0x2144ff55,0x46202280,0xff50f7ff,0x22842146,0xf7ff4620,
+0x2148ff4b,0x46202288,0xff46f7ff,0x214a228c,0xf7ff4620,0x214cff41,
+0x22904620,0xff3cf7ff,0x2294214e,0xf7ff4620,0x2150ff37,0x46202298,
+0xff32f7ff,0x229c2152,0xf7ff4620,0x2154ff2d,0x462022a0,0xff28f7ff,
+0x22a42156,0xf7ff4620,0x215aff23,0x462022a8,0xff1ef7ff,0x22ac215c,
+0xf7ff4620,0x215eff19,0x462022b0,0xff14f7ff,0x22b42160,0xf7ff4620,
+0x22b8ff0f,0x46202162,0xff0af7ff,0x46202164,0xf7ff22bc,0x2166ff05,
+0x462022c0,0xff00f7ff,0x22c42168,0xf7ff4620,0x216afefb,0x462022c8,
+0xfef6f7ff,0x22cc216c,0xf7ff4620,0x216efef1,0x462022d0,0xfeecf7ff,
+0x22d42170,0xf7ff4620,0x2172fee7,0x462022d8,0xfee2f7ff,0x22dc2174,
+0xf7ff4620,0x2176fedd,0x462022e0,0xfed8f7ff,0xf44f217a,0x462072aa,
+0xfed2f7ff,0xf44f2120,0x462072e4,0xfeccf7ff,0xf44f2122,0x462072e6,
+0xfec6f7ff,0x14d0f8d4,0x343cf8d4,0x2440f8d4,0x0301ebc3,0x3560f8c4,
+0x34b0f8d4,0x1a9b4625,0x3574f8c4,0x3468f8d4,0x2444f8d4,0x1a9b1a5b,
+0x3564f8c4,0x0778f8d5,0xf8d0b1b0,0xf8d4209c,0x189b33c0,0x33c0f8c4,
+0x2098f8d0,0x33f0f8d4,0xf8c4189b,0xf8d033f0,0xf8d42094,0x189b3408,
+0x3408f8c4,0x47986f43,0xf1043504,0x429d0318,0xf8d4d1e0,0xf8d423c0,
+0x210033c4,0xf8d4189b,0x189b23d4,0x23c8f8d4,0xf8d4189b,0x189b2448,
+0x244cf8d4,0xf8d4189b,0x189b2450,0x33b0f8c4,0x2420f8d4,0x33f0f8d4,
+0xf8d4189b,0x189b2400,0x2404f8d4,0xf8d4189b,0x189b2408,0x240cf8d4,
+0xf8d4189b,0x189b2414,0x33e8f8c4,0xf8d41863,0xf8d323e8,0x31043424,
+0x291818d2,0x23e8f8c4,0xbd70d1f4,0xf0014a0a,0x56d3037f,0x2b005c51,
+0xf44fbfac,0xf44f7300,0xf00173e0,0xb510010f,0x0141eb03,0xfe34f7ff,
+0xb2800040,0x46c0bd10,0x0001bae4,0x080cf8d0,0xf443088b,0xf0113380,
+0xf8c00f02,0xbf143160,0x2166f8a0,0x2164f8a0,0x46c04770,0xf642b570,
+0x5341350e,0x71c4f44f,0xf7ff4604,0x5b63fe15,0x7270f420,0x4620431a,
+0xf44fb292,0xf7ff71c4,0x2122ffdd,0xf7ff4620,0x5b63fe07,0x7270f420,
+0x4620431a,0xb2922122,0xffd0f7ff,0x46c0bd70,0x330af642,0xb5105cc3,
+0xf642b923,0xf04f330e,0xe0070240,0xbf072b01,0x330ef642,0xf6422280,
+0x2200330e,0x7c4352c2,0xf642b123,0x5ac1330e,0xffc4f7ff,0x46c0bd10,
+0x2208b573,0x460d4606,0x49074668,0xfff0f7f9,0xf83d2400,0x5b621004,
+0x34024630,0xffa2f7ff,0xd1f62c08,0x46c0bd7c,0x0001a11c,0x41f3e92d,
+0x46049e08,0x46174688,0x22084668,0x461d4924,0xffd6f7f9,0xd82d2e03,
+0xf006e8df,0x02090502,0x1848f8d4,0xf504e006,0x311c613a,0xf504e002,
+0x31046128,0xea4fb1f1,0xeb0c0c48,0xf8b20201,0xea20006c,0xea430307,
+0xf8d40e05,0xf8a23844,0x7a1be06c,0x4586b173,0xf8d4d00c,0x42993848,
+0xaa02d108,0x0302eb0c,0xf8334620,0x46721c08,0xff60f7ff,0xd1102e03,
+0x0148eb04,0x3af0f8b1,0xb29243fa,0x0303ea02,0xf8a1432b,0xf8b13af0,
+0x401a3c28,0xf8a1432a,0xe8bd2c28,0x46c081fc,0x0001a124,0xf8d0b537,
+0x00494844,0x19084605,0x19498c83,0x84831a9b,0x2db8f8b5,0x3dbaf8b1,
+0xf8a54313,0x7dab3db8,0xc024f8b4,0xe026f8b4,0x8d618d20,0xf895b1a3,
+0xf0122de0,0xd00f0f08,0x030ceb0e,0x185b181b,0xb94bb29b,0x03f7f002,
+0x3de0f885,0x380cf8d5,0x0202f04f,0x2140f8a3,0xb1737dab,0x3de1f895,
+0xf8d5b15b,0x8d9b3844,0xf885b93b,0x46283de1,0x22402101,0xf7ff9300,
+0xbd3eff6d,0x4602b507,0xb159468e,0xf8802300,0x33013d3c,0x3d3bf880,
+0x33022280,0x21029300,0xe0064613,0xf8822303,0x93001d3b,0x22802102,
+0xf7ff4673,0xbd0eff53,0x460cb570,0xbf0c2a00,0x21b421a4,0x46062c64,
+0x46184615,0xf06fd902,0xe016001c,0x4622b90c,0xf1c4e004,0x011b0364,
+0xf2f4fb93,0x4630b118,0xf7ffb292,0xb125fed3,0x2310f243,0x52f42000,
+0xf243e003,0x52f42312,0xbd704628,0x41f0e92d,0x460c4606,0x0725f101,
+0xe00d2500,0xf893192b,0x5d7a3026,0x71b0f505,0x2203eb02,0xb2924630,
+0xfeb4f7ff,0xb29d1cab,0x2024f894,0xd3ed4295,0x21484630,0xfeaaf7ff,
+0x81f0e8bd,0x47f0e92d,0x46064b1f,0x9000f8d3,0x2700791b,0x087ff003,
+0x4b1be031,0x18fb4a1b,0xf8d67918,0xf0003848,0xf000007f,0x18e3047f,
+0x109cf893,0x29005715,0x4641bf08,0x037ff001,0x5c5156d3,0xbfac2b00,
+0x7300f44f,0x73e0f44f,0x010ff001,0xeb035c14,0x46300141,0xfca8f7ff,
+0xbfac2d00,0x7508f44f,0x75f0f44f,0x040ff004,0xeb054602,0x46300144,
+0xfe6cf7ff,0x454f3701,0xe8bdd1cb,0x46c087f0,0x0001b9bc,0x0001bae4,
+0x41f0e92d,0x22004616,0x4607460d,0x1018f99d,0x469862f2,0xf8d0b133,
+0xeb022844,0x8c930245,0x849318cb,0xd1092d04,0x21a86933,0x404cf893,
+0x204df893,0x2202ea44,0xfe44f7ff,0x0385eb07,0x0778f8d3,0x6a034631,
+0x47984642,0x81f0e8bd,0xf642b570,0x2154330e,0x5ac44605,0xfc60f7ff,
+0x7070f420,0x21544304,0xb2a24628,0xfe2af7ff,0x46c0bd70,0xf8d0b510,
+0xb131380c,0x2207f240,0x2684f8a3,0x22092110,0xf240e005,0xf8a32212,
+0x21102684,0xf7ff2214,0xbd10fe15,0x41f0e92d,0x46801e1e,0x4615460f,
+0x2400dd0b,0x464019e1,0xfc36f7ff,0x5560192b,0x0a003402,0x705842b4,
+0xe8bddbf4,0x46c081f0,0x2101b510,0x480cf8d0,0xf8d4460a,0xf7ff3120,
+0x2301fb17,0x3128f8c4,0x3120f8d4,0x3128f8d4,0x46c0bd10,0x380cf8d0,
+0x0180f8d3,0xf8d36008,0x60133184,0x46c04770,0x460cb513,0xa901466a,
+0xfff0f7ff,0x0c139a01,0x041b0412,0xea440c12,0x42940003,0xf5a0bf88,
+0xbd1c3080,0x180cf8d0,0xf44f4a19,0xf8c13080,0xb5100160,0x4164f8d1,
+0x0160f8c1,0x2164f8c1,0x0160f8c1,0x3164f8d1,0xd11e4293,0xf8c14a11,
+0xf8c10160,0xf8c12164,0xf8d10160,0x42933164,0x2300d113,0x0160f8c1,
+0x4164f8c1,0x318cf8c1,0x0120f8d1,0x42984b08,0x2001d101,0x4b07e006,
+0xbf144298,0x20012000,0x2000e000,0x46c0bd10,0xaa5555aa,0x55aaaa55,
+0x04000400,0x84000400,0xf2412200,0xb57073f0,0x460450c2,0x19634615,
+0x0778f8d3,0x6a83b110,0x47982101,0x2d183504,0xf8d4d1f5,0x6e430778,
+0xbd704798,0xf8d0b570,0x46053844,0xb1637a1b,0x380cf8d0,0x2120f8d3,
+0x4304f240,0x0303ea02,0x6180f5b3,0x2101bf18,0x6880e003,0xfb1cf7f8,
+0xbb494601,0x4d08f895,0xf8d5b144,0xb31b3710,0x3848f8d5,0xf0066818,
+0xe01dfdf1,0x3848f8d5,0x68184621,0xfdeaf006,0x3848f8d5,0x68184621,
+0xf81af006,0x73f4f241,0xb13358eb,0xf04f68a8,0x462231ff,0xf7f84623,
+0xf8d5fc7d,0x46213844,0x68a8721c,0xfbf8f7f8,0x46c0bd70,0xb5102301,
+0xf8804604,0xf8d03d08,0xf7fe073c,0x2300fedf,0x3d08f884,0xbd1074a3,
+0xf8d0b570,0x4606480c,0x3120f8d4,0x3ffff1b3,0xf8d4d01c,0xf1b33128,
+0xd0173fff,0x22002101,0xfa3af7ff,0xe0034d0c,0xf7fc200a,0x3d0afbf7,
+0x3128f8d4,0x0f01f013,0x2d09d101,0xf8d4d1f4,0xf8d43128,0xf1b33120,
+0xd1033fff,0x073cf8d6,0xfeb0f7fe,0x46c0bd70,0x00014441,0xf8d0b570,
+0x46053844,0xb9087a18,0xe0124606,0x380cf8d5,0xf8d52400,0x20016cfc,
+0x412cf8c3,0x312cf8d3,0xfbccf7fc,0x3cf8f8d5,0x4cfcf8c5,0xbf1842a3,
+0x46304626,0x46c0bd70,0xf8d0b570,0x46043844,0x460e7a1b,0xd03e2b00,
+0xf8d0b9d9,0x2021280c,0x31e0f8d2,0x25a1f643,0x0302f043,0x31e0f8c2,
+0xfbacf7fc,0x200ae003,0xfba8f7fc,0xf8d43d0a,0xf8d3380c,0xf41331e0,
+0xd1243f00,0xd1f22d09,0x6883e021,0xb9b369db,0x380cf8d0,0x31e0f8d3,
+0x0f12f013,0xf643d00f,0xe00325a1,0xf7fc200a,0x3d0afb8d,0x380cf8d4,
+0x31e0f8d3,0x3f00f413,0x2d09d101,0xf8d4d1f2,0xf8d2280c,0xf02331e0,
+0xf8c20302,0xf1d631e0,0xbf380301,0xf8842300,0xbd70381d,0x4605b570,
+0xf7fc2028,0xf8b5fb6f,0xf1033824,0xe0030409,0xf7fc200a,0x3c0afb67,
+0x46282140,0xfaacf7ff,0xd1012804,0xd8f32c09,0x46c0bd70,0xf8d0460a,
+0xb51017c8,0xb9214604,0x37c4f8d0,0x6f80f013,0xea42d004,0xf8c40301,
+0xe00837c8,0x27c8f8c0,0x60e8f500,0xf972f7ff,0xf7ff4620,0xbd10ffcf,
+0x408b2301,0xf890b570,0xb2dc27c1,0x0302ea04,0x460542a3,0xd010460e,
+0x2108b912,0xffd6f7ff,0x37c1f895,0x0303ea44,0x37c1f885,0x0386eb05,
+0x0778f8d3,0x6903b108,0xbd704798,0xf10db573,0x460d0602,0x21004604,
+0x22064630,0xfc5cf7f9,0x4620b175,0xf7ff2101,0x4620ffd3,0xf7ff2103,
+0x4620ffcf,0x46322100,0xf994f7ff,0xe0142301,0x3dc6f894,0x4620b91b,
+0xf7ff2101,0x4620fa33,0xf7ff2103,0x4620fa2f,0xf1044629,0xf7ff024c,
+0xf8d4f981,0xb16b37cc,0xf8c42300,0xf8d437cc,0xf40337c4,0xf5b323c0,
+0xd0033f00,0x60e8f504,0xf914f7ff,0x46c0bd7c,0xb5102101,0x1dc6f880,
+0xff9ef7ff,0x46c0bd10,0x7d83b570,0xb98b4605,0x380cf8d0,0x61c0f04f,
+0x4120f8d3,0x6280f04f,0x64c0f004,0xf90cf7ff,0x7f00f1b4,0x4628d102,
+0xff54f7ff,0x46c0bd70,0x3ffff1b1,0x41f0e92d,0x460e4604,0xf8d0d106,
+0x68193848,0x460eb909,0x688ee000,0x781df894,0x4620b91f,0xf7ff4639,
+0x68a0feef,0xfb22f7f8,0x2500b170,0xf8d31963,0xb1080778,0x47986883,
+0x2d183504,0xf8d4d1f6,0xb1080778,0x47986c83,0x5d08f894,0x2200b13d,
+0x2cf8f8c4,0x21034620,0xf8d2f7ff,0xf8d4e033,0x46313844,0x68a0721d,
+0xf7f8462a,0xf8d4fa59,0x23012844,0x46207213,0xf04f4a14,0xf8c431ff,
+0xf8c457c4,0xf8c457c8,0xf7ff57cc,0x4620f8b9,0xf7ff4629,0xf8d4feb5,
+0x68a13848,0xf0076818,0xf44ff821,0x460a6180,0xf7ff4620,0x4620f8a9,
+0x462a2104,0xf8a4f7ff,0x5cf8f8c4,0x4620b91f,0xf7ff2102,0xe8bdfe9d,
+0x46c081f0,0x04000400,0xf890b510,0x46023d05,0xf8d0b97b,0xf0133394,
+0xd10a0f04,0xf8802301,0xf8d23d05,0xf8d01d2c,0xf44f073c,0xf7fe7248,
+0x2001fb25,0x46c0bd10,0x7c43b510,0xb12b4604,0xffe2f7ff,0x073cf8d4,
+0xfd04f7fe,0x46c0bd10,0x738ef44f,0x0303fb01,0x2844f8d0,0x6304f503,
+0x429a330c,0x4604b570,0xd016460d,0x3844f8c0,0x381cf890,0xf890b13b,
+0xb9222d08,0xf44f6880,0xf7f85100,0x68a0faab,0x0112f640,0xf7f8462a,
+0xf8c4fac1,0xf8c4080c,0xbd700758,0x739cf44f,0xf303fb01,0x6328f503,
+0x330418c3,0xf8c0b570,0x460d3848,0x03c1eb00,0x1840f8d0,0x63ecf503,
+0xf8c04604,0x2901375c,0x4629bf8c,0xf7ff2100,0xf894ffbf,0xb15b381c,
+0x3d08f894,0xf44fb943,0x68a05100,0xbf0c2d00,0x2200460a,0xfa76f7f8,
+0x46c0bd70,0xf890b570,0x4604581d,0xb915460e,0xf7ff4629,0xf8d4fe19,
+0xb2713848,0xf0066818,0xf8d4fbff,0x68a13848,0xf0066818,0xf8d4ff7f,
+0x68183848,0xfae4f00b,0x4620b91d,0xf7ff2102,0xbd70fe03,0x6984b5f7,
+0xf8c4461d,0xf8d41130,0x46163120,0x3780f403,0xa801e00e,0x22044629,
+0xfb16f7f9,0x9801b11f,0xfcf0f7fe,0x9b019001,0xf8c43504,0x3e043134,
+0xdcee2e00,0x46c0bdfe,0x4615b570,0x460b3203,0xf44f4604,0xf500618d,
+0xf02260e8,0x69860203,0xffd4f7ff,0x211a4620,0xf7ffb2aa,0xf8d6faaf,
+0xf0433124,0xf8c60302,0xbd703124,0x4615b570,0x460b3203,0x21684604,
+0x60e8f500,0x0203f022,0xf7ff6986,0x4620ffbb,0xb2aa2118,0xfa96f7ff,
+0x3124f8d6,0x0301f043,0x3124f8c6,0x46c0bd70,0x41f0e92d,0x460e4605,
+0xf8d04617,0xb12b480c,0xffdcf7ff,0x46314628,0xe00c463a,0x3124f8d4,
+0x0f01f013,0xf7ffd102,0xe006ffd1,0x3124f8d4,0x0f02f013,0xf7ffd101,
+0xe8bdffaf,0x46c081f0,0x784cb570,0x34024605,0xf7f94622,0x1928faad,
+0x46c0bd70,0x2a00b570,0x70014604,0x70624615,0x3002dd03,0xf7f94619,
+0x1ca0fa9f,0xbd701940,0xf8d0b570,0xb19557d0,0x22006884,0x46294613,
+0xf7f84620,0x4629f987,0x2300462a,0xf7f84620,0x2200f965,0x46294620,
+0xf7f84613,0xbd70f943,0x41f0e92d,0xf8d0461d,0x46043848,0x460e6818,
+0xf00a4690,0xf8d4ff5d,0x46293848,0x46326818,0xfbb4f006,0x3848f8d4,
+0x31fff04f,0x22006818,0xff3ef008,0x46414620,0xfde0f7ff,0x81f0e8bd,
+0x7c43b530,0x4605b085,0xb11b460c,0xf06fb111,0xe0920004,0xd9022c03,
+0x0001f06f,0xd107e08d,0x3814f8d5,0xd1012b02,0xe0122400,0xe0002402,
+0xf8d5b17c,0x2b023814,0xf8d5d104,0xf0133388,0xe0050f01,0xd1042b03,
+0x3834f8d5,0x5f00f013,0xf8c5d071,0xa8024810,0x22082100,0xfa14f7f9,
+0x3008f8bd,0xd03f2c00,0x0310f043,0x3008f8ad,0x3814f8d5,0xf8d52b02,
+0xd1203830,0x5300f023,0x3830f8c5,0x3388f8d5,0x4f80f413,0x300af8bd,
+0xf443d008,0xf8ad7380,0x2330300a,0x37d0f8c5,0xe0092320,0x7380f423,
+0x300af8ad,0x73c0f44f,0x37d0f8c5,0x7380f44f,0x37d4f8c5,0xf043e009,
+0xf8c55300,0xf8bd3830,0xf423300c,0xf8ad5380,0xf8bd300c,0x2c02300a,
+0xf443bf0c,0xf4237300,0xf8ad7300,0xe009300a,0x0310f023,0x3008f8ad,
+0x3830f8d5,0x5300f023,0x3830f8c5,0xf8bd2402,0x46283008,0x22102100,
+0xf7ff9400,0xf8bdf9fb,0x4628300a,0xf44f2101,0x94007240,0xf9f2f7ff,
+0xf8bd4628,0x4621300c,0x1208f241,0xf7ff9400,0x2000f9e9,0xf06fe001,
+0xb0050002,0x46c0bd30,0x41f0e92d,0x3844f8d0,0x780cf8d0,0x46047a1b,
+0xf8d7460e,0xb1535128,0x2120f8d7,0x4304f240,0x0303ea02,0x6080f5b3,
+0x2001bf18,0x6880e005,0xff1af7f7,0xbf183800,0xb1102001,0x36fff04f,
+0xf1b5e02d,0xd1013fff,0xe0284606,0xf8d4b116,0xe0013cfc,0x3d00f8d4,
+0x0605ea13,0xf8d4d01f,0x2500380c,0x512cf8c3,0x0f80f416,0x312cf8d3,
+0x5cfcf8c4,0x2301d00a,0xf8844629,0x46203d3c,0xff1ef7ff,0x46294620,
+0xfa30f7ff,0x4f00f416,0xf44fbf18,0xf8c73380,0xbf186128,0x4630623b,
+0x81f0e8bd,0x2300b570,0x7c43700b,0x460d4604,0xf8d0b163,0xb14b3cfc,
+0xf7ff2101,0xb128ffa1,0x702b2301,0x0cf8f8c4,0xe0004618,0xbd702000,
+0x2100b510,0xf7ff4604,0xf1b0ff93,0xd1013fff,0xe0053001,0x3cf8f8d4,
+0xf8c44303,0x20013cf8,0x46c0bd10,0x4ff0e92d,0x4682b0d3,0x9848f8d0,
+0x4693460f,0x226d2100,0x00dbf10d,0xf8dd461c,0xf7f98170,0x2100f919,
+0xf10d226d,0xf7f9006e,0xa801f913,0x21003803,0xf7f9226d,0xf8daf90d,
+0x7b1b3848,0x4620b93b,0x7b04f840,0x463a4659,0xf922f7f9,0x6822e07e,
+0x21004b4b,0xbf142a00,0x46184620,0x1843e007,0xab01791a,0x027ff002,
+0x549a3b03,0x68033101,0xd3f44299,0x46352600,0xe0124630,0x100bf810,
+0xf001aa01,0x3a03037f,0xf50d5cd2,0x44737ea4,0x3501b11a,0x1c6df803,
+0xf803e002,0x36011cda,0x42b83001,0x6823d1ea,0xf8d8bb13,0xb9fb3000,
+0x1074f8d9,0xe0134628,0x3901f815,0xf003af52,0x18fa037f,0x3cdaf812,
+0xf802b133,0x3e013c6d,0xf8022300,0xe0023cda,0x29003901,0x3001daec,
+0xd8052807,0xeb01b126,0xf1030309,0xe7f40578,0x22282100,0xf7f94620,
+0x4640f8ab,0x22282100,0xf8a6f7f9,0xe01d2500,0x0305eb09,0x3078f893,
+0x7ea4f50d,0x037ff003,0x0003eb0e,0x1c6df810,0x6823b121,0x330118e2,
+0x60237111,0x1cdaf810,0xf8d8b139,0xeb083000,0x33010203,0xf8c87111,
+0x35013000,0x3074f8d9,0xd3dd429d,0x038cf243,0x0003f81a,0x6822b188,
+0xd8042a07,0x711818a3,0x60231c53,0xf8d8e009,0x2a072000,0xeb08d805,
+0x71180302,0xf8c81c53,0xb0533000,0x8ff0e8bd,0x0001bb54,0xf6422100,
+0x50c1634c,0x5038f500,0x3050b510,0x7200f44f,0xf85af7f9,0x46c0bd10,
+0x41f0e92d,0x3ffff1b2,0x4615bf14,0x46062500,0x460a461f,0x2902b111,
+0xe033d003,0x4848f8d0,0xf8d0e007,0x685b3848,0xd12b2b02,0x6428f500,
+0xb12d3404,0x46294630,0xf7fe2301,0xb308fc23,0x2b026863,0x7b23d10c,
+0xb14db953,0x037ff005,0xd0052b02,0xd0032b04,0xd0012b0b,0xd1112b16,
+0x5f60f415,0xf642d004,0x5cf3330d,0xd0092b01,0x2000b117,0xe0076425,
+0x63e54630,0xffb2f7ff,0xe0014638,0x30fff04f,0x81f0e8bd,0x3848f8d0,
+0x41f0e92d,0x049cf103,0x4607226d,0x4620460d,0xf7f92100,0x2200f805,
+0x18abe00a,0xf013791b,0xd0040f80,0x037ff003,0xbf982b6c,0x320154e3,
+0x429a682b,0xf04fd3f1,0x46750e00,0xe02646f4,0x0302eb0c,0x2078f893,
+0x5ca34814,0xf00218a6,0xb133017f,0x2b005643,0x4696bfb8,0x4615bfa8,
+0x5641e013,0x0321ea1e,0x462bbf38,0xb96354a3,0xdb012900,0xe0074613,
+0xd9012a2f,0xe0032330,0xbf942a17,0x2318230c,0xf10c7033,0xf8d70c01,
+0x6f532848,0xd3d3459c,0x81f0e8bd,0x0001bae4,0x4616b570,0xf0014a2f,
+0x461d017f,0x2b005653,0x5c54da1a,0x22064628,0xf7f82100,0x782bffb1,
+0x040ff004,0x030ff023,0x431c0532,0x78ab0d12,0xea430152,0x70ab4312,
+0xea43786b,0x706b2312,0x4313b2e3,0xe03b702b,0xd00c2904,0x2902dc02,
+0xe003d007,0xd008290b,0xd0112916,0x46022000,0x00f3e021,0x00b3e00a,
+0x0133e008,0xf2f1fbb3,0xfb00b290,0x4293f201,0x1c43d014,0xe011b298,
+0x00f2240b,0xf3f4fbb2,0xfb00b298,0x429af304,0x1c43d008,0xfb00b298,
+0x1a9bf304,0xd9012b07,0xe0002280,0x23052200,0xf303fb01,0xf042702b,
+0x706b0304,0x70eb0a03,0x70a82300,0x716b712b,0x46c0bd70,0x0001bae4,
+0x3848f8d0,0x47f3e92d,0x4606685b,0xbf142b01,0x0a0af04f,0x0a10f04f,
+0x46884b20,0x9000f8d3,0xe0372700,0x46304b1d,0x791c18fb,0xf0043701,
+0x4621047f,0xff02f7fe,0x46054621,0x46304642,0x0302f10d,0xff78f7ff,
+0x22004621,0x46304643,0xfa9cf7fe,0x3003f89d,0x2002f89d,0xeb02b284,
+0x46302203,0x010af105,0xf7feb292,0xf89dfeff,0xf89d3005,0x46302004,
+0x2203eb02,0x010cf105,0x4454b292,0xfef2f7fe,0xf1054630,0xb2a20110,
+0xfeecf7fe,0xd1c5454f,0x87fce8bd,0x0001b9bc,0x3454f8d0,0x3301b510,
+0xf8c04604,0x68803454,0xfe34f7f7,0x4620b110,0xfd38f7fe,0xf8842300,
+0xf8d43d54,0x7a1b3844,0xf8d4b16b,0xf8d3380c,0xf2402120,0xea024304,
+0xf5b30303,0xbf146f80,0x20012000,0x68a0e006,0xfc76f7f7,0x0001f1d0,
+0x2000bf38,0x4620b120,0x31fff04f,0xfad4f7ff,0xf7ff4620,0xf8d4f921,
+0x21000844,0x6348f642,0x84c18481,0x85418501,0x85c18581,0x303450e1,
+0xf7f822e8,0xbd10fec9,0xb5702300,0x3dc6f880,0x3848f8d0,0x68184605,
+0xffacf005,0x00c4f3c0,0xf2411828,0x5cc4436c,0x3848f8d5,0xf0056818,
+0xf000ffa1,0x41040007,0x0f01f014,0x4628d103,0xf7fe2101,0xbd70fc97,
+0xf890b570,0x46053024,0xf8d0b17b,0xf8b03848,0x68184324,0xff8af005,
+0xd1064284,0x5142f505,0x31684628,0xfbf6f7fe,0x4628e00b,0xfbfef7fe,
+0xf44f2300,0xf8853100,0x46283d35,0xf7fe460a,0x4628fb83,0xfba2f7fe,
+0xf7fe4628,0xbd70fb8d,0xf001b510,0x460c007f,0xf8def00d,0xb203b280,
+0x3ffff1b3,0x2000bf08,0x0200b200,0x0002f040,0x24c2f3c4,0xea40b280,
+0xbd1000c4,0x4ff0e92d,0xbf0c2b00,0x23032302,0x690db09d,0xf101460c,
+0x930d011c,0x786b9112,0x782a4693,0xea424607,0xf3c32303,0xf1ba0a81,
+0xf8dd0f02,0x6c8080ac,0xd0019305,0xe0022300,0xf3c29a05,0xb2db13c0,
+0x93104621,0xf9a4f7f8,0x30049b2a,0xb11b9007,0x300ff993,0x900718c0,
+0x3830f8d7,0xda1e2b00,0xb1e0982a,0x2b027a03,0xf642d119,0x5cfb1385,
+0xf8d7b9ab,0xf8d33dc8,0xf0133094,0xd10e0f08,0x2b357983,0x2b03d80b,
+0x2b0bd909,0x9927d807,0xd1042901,0x91139a07,0x92073208,0x2300e001,
+0x21069313,0xf7fd4620,0x2168fff3,0x46209006,0xffeef7fd,0x21002268,
+0xf7f84606,0xf8dbfe09,0x4baa2004,0x0303ea02,0x9805b1c3,0x03fcf000,
+0xd1132b88,0xf013792b,0xd10f0f01,0xf7fd4620,0x9c27ffe9,0x0140eb0b,
+0x1e639826,0xf8b14298,0xd10a2168,0xf8a11c53,0xe0063168,0x0f01f1ba,
+0x2200d012,0x0910f04f,0xf1bae004,0xd00b0f01,0x0900f04f,0xf0019926,
+0xea43030f,0xb29b1302,0x0a1b75ab,0xe00175eb,0x0900f04f,0x2a049a28,
+0xf896d118,0xf896204d,0xf507304c,0x882054bf,0x2302ea43,0x0218f248,
+0x0202ea03,0xf6470141,0xf04273e0,0xea010204,0x431a0303,0x92093001,
+0xe0188020,0x98269c27,0xf2411e63,0x429871de,0xd1015a7a,0x527b1c53,
+0x9c289926,0x030ff001,0x1302ea43,0xf647015b,0xea0372e0,0xf0040202,
+0x431a0307,0x98059209,0x03fcf000,0x4b742b80,0xf049bf08,0xea080920,
+0xb93b0303,0x3848f8d7,0x803cf8d3,0xea084b6e,0xb10b0303,0xe01d4642,
+0x3848f8d7,0x4b6a6c1a,0x0303ea02,0x792bb11b,0x0f01f013,0x792bd112,
+0x0f01f013,0xf1bad10a,0xd0070f00,0x0f01f1ba,0x9912d004,0xf013680b,
+0xd0030210,0x30f4f89b,0x027ff003,0x461168bb,0xb9636b5b,0x7a239c2a,
+0xd1082b02,0x037ff002,0xd9042b30,0x037ff022,0x0230f043,0xf4214611,
+0xf44363e0,0xf4227300,0xf44262e0,0xf0037200,0xf1ba007f,0x93170f02,
+0x90119216,0xf1bad002,0xd10c0f00,0x5327f507,0x9907881b,0xdd064299,
+0xf083792b,0xf0030301,0x930c0301,0x2200e001,0xf8d7920c,0x7b1b3848,
+0xf642b1c3,0x5cfb23d0,0x4b40b1a3,0x571b9c11,0xda0f2b00,0x99169827,
+0x28029a17,0x2116bf28,0x2216bf28,0xf04fbf2c,0xf04f0800,0x91160801,
+0xe0019217,0x0800f04f,0x9c179b16,0xf0049812,0xf003047f,0xea4b0b7f,
+0x61434304,0x46389415,0x9a079917,0xf10d9b06,0xf7ff046a,0x4638fd45,
+0x9a079916,0xf7ff4623,0x2206fd3f,0x0036f106,0xf7f84621,0xf1bbfd19,
+0xd0080f02,0x0f04f1bb,0xf1bbd005,0xd0020f0b,0x0f16f1bb,0x9907d106,
+0x2307f3c1,0x103af886,0x303bf886,0x9a154b1b,0x2b00569b,0x9c06da05,
+0xf0037823,0x930a030f,0x9806e002,0x900a7800,0x29a49905,0x792bd00f,
+0xf0131d2c,0xd1120f01,0x9a0d9917,0x46389b29,0xf86af7fe,0xf3c070a8,
+0x70e8200f,0x78abe007,0xea4378ea,0xf8862302,0x0a1b303c,0x7823e006,
+0x0f01f013,0x2300d00c,0x303cf886,0x303df886,0x46c0e012,0x00010040,
+0x0800007f,0x0001bae4,0x9a0d9916,0x46389b29,0xf846f7fe,0x003cf886,
+0x200ff3c0,0x003df886,0x68139a12,0x7f00f413,0x8993d00d,0x5900f449,
+0x3042f886,0xf8860a1b,0x89d33043,0x3044f886,0xf8860a1b,0x9b263045,
+0xf049b90b,0x1d2c0908,0x792b9414,0x0f01f013,0x9812d10b,0xf4136803,
+0xd1065f80,0xb1119910,0x3d7bf897,0xf049b90b,0xf1ba0901,0xd1070f02,
+0x3d3df897,0x9a11b123,0xbf882a04,0x5980f449,0xb10b9b13,0x4900f449,
+0x2319ea4f,0x9000f886,0x9c2a7073,0xf642b19c,0x5cfb1385,0xf8d7b97b,
+0xf8d33dc8,0xf0133094,0xd1080f08,0x2a3579a2,0x7b23d805,0x0307f003,
+0x1302ea43,0x2300e000,0x0a1b70b3,0x70f32400,0x46291d30,0xf7f82202,
+0x71b4fc63,0xf88671f4,0xf886402c,0x982a402d,0xd0392800,0x1385f642,
+0x2b005cfb,0xf8d7d134,0xf8d33dc8,0xf0133094,0xd12d0008,0x798b992a,
+0xd8292b35,0xf1059a05,0xf4020118,0xf5b37340,0x9b107f40,0xf105bf08,
+0xb103011e,0x9c2a3102,0x2b027a23,0x4632d111,0x18239c2a,0x30bcf8b3,
+0xf3c37593,0x75d32307,0x32021c83,0x46182b0a,0xf106d1f2,0x22030020,
+0x9b2ae004,0x0016f106,0x200ef993,0xfc20f7f8,0xf1062206,0x99140026,
+0xfc1af7f8,0x22009c09,0xf8860a23,0xf886404c,0xf886304d,0xf886204e,
+0x980c204f,0x4690b108,0xf1b8e003,0xf0000f00,0x99178093,0x23022200,
+0xf7fd4638,0x2200ff17,0x2302900f,0x99164638,0xff10f7fd,0x46827832,
+0xf1b87873,0xd0040f00,0x2303ea42,0x6300f443,0xea42e003,0xf0432303,
+0x70330306,0x0f00f1b8,0x2114bf0c,0x0a1b210e,0xf1067073,0x91080950,
+0x4638ac19,0x9a08990f,0xf7ff464b,0x4623fbf9,0x46514638,0xf7ff9a08,
+0x4621fbf3,0xf1062206,0xf7f8002e,0x9c07fbcd,0xf1069b0d,0x94010256,
+0x920e2400,0x9a0f9300,0x46419b17,0x46389402,0xff5ef7fd,0x0058f886,
+0x200ff3c0,0x0059f886,0x9907980d,0x90009b16,0x94029101,0x46414638,
+0xf7fd4652,0xf886ff4d,0xf3c00034,0xf886200f,0xf1060035,0xf1b8005a,
+0xd0090f00,0x033bf06f,0x010af105,0xf8862206,0xf8863056,0xe0074057,
+0x034bf06f,0x3056f886,0x8057f886,0x220c9914,0xfb8ef7f8,0x9c0a9a0f,
+0x037ff002,0x98164a92,0x2b0056d3,0xf899bfb6,0xf8963000,0xf0033050,
+0x021b030f,0x0404ea43,0x037ff00a,0xbf88459b,0x940a4650,0xe01c900b,
+0x22064641,0x0050f106,0xfb4ef7f8,0x22104641,0x0056f106,0xfb48f7f8,
+0xf1064641,0x2206002e,0xfb42f7f8,0x8034f886,0x8035f886,0xf8cd9916,
+0x910b8038,0xf8cd46c2,0x9a0a803c,0xf1bb0a13,0x74b20f02,0xd00b74f3,
+0x0f04f1bb,0xf1bbd008,0xd0050f0b,0x0b16f1bb,0xf04fbf18,0xe0010b01,
+0x0b00f04f,0xf0049c0f,0x2b02037f,0x2b04d009,0x2b0bd007,0xf1b3d005,
+0xbf180916,0x0901f04f,0xf04fe001,0xf00a0900,0x2b02037f,0x2b04d008,
+0x2b0bd006,0xf1b3d004,0xbf180416,0xe0002401,0xf8d72400,0x68183848,
+0xfbecf005,0x3848f8d7,0x681bb2c0,0xf0056819,0xea4bfbe7,0xea430389,
+0xea431304,0xb29b2300,0x7533b29b,0x75730a1b,0x28029815,0x2804d008,
+0x280bd006,0xf1b0d004,0xbf180316,0xe0002301,0x990d2300,0xf983fa1f,
+0x0f01f011,0x9a0bd05b,0x037ff002,0xd0042b02,0x3308f642,0x2b0156fb,
+0x78aad14a,0xea5278eb,0xd0092303,0x9b299917,0x22004638,0xfe64f7fd,
+0xf3c070a8,0x70e8200f,0x203cf896,0x303df896,0x2303ea52,0x9916d00b,
+0x46389b29,0xf7fd2200,0xf886fe53,0xf3c0003c,0xf886200f,0x9b0e003d,
+0xd02c2b00,0x78db789a,0x2303ea52,0x9807d027,0x9a0f2400,0x90019b17,
+0x94004641,0x46389402,0xfe5af7fd,0x7088990e,0x200ff3c0,0x9a0770c8,
+0x92019b16,0x94029400,0x46414638,0xf7fd4652,0xf886fe4b,0xf3c00034,
+0xf886200f,0xe0060035,0x33b8f8d7,0x0910f049,0xf8c73301,0xf64233b8,
+0x5afb330e,0xf4034638,0xea497370,0x72330303,0x230ff3c3,0x99177273,
+0xfbeef7ff,0xf3c072b0,0x72f0200f,0x46389916,0xfbe6f7ff,0xf3c07330,
+0x7370200f,0xb9139b0c,0x0f00f1b8,0x990fd00f,0xf7ff4638,0x73b0fbd9,
+0x200ff3c0,0x465173f0,0xf7ff4638,0x7430fbd1,0x200ff3c0,0x9c127470,
+0x68239809,0x0304f043,0xb01d6023,0x8ff0e8bd,0x0001bae4,0x2325b570,
+0x2303700b,0xf641704b,0x5cc3032c,0x708b4605,0x032ef641,0x460c5ac0,
+0xfca0f003,0x032df641,0x5ceb70e0,0x71231d60,0x46c0bd70,0x4ff7e92d,
+0x9de4f8b0,0xfb09230c,0xf5000303,0xf503675e,0x4680665e,0x360c3704,
+0x0a00f04f,0xe01f9101,0x46384659,0xfdc2f7f7,0xf7fd4604,0x9b01fc23,
+0xd0084298,0x46594638,0x2d004622,0x4625bf08,0xfd7ef7f7,0xf8d8e005,
+0x46210048,0xf7fa2201,0xf856fd2f,0x42ab3c0c,0xf10ad1e2,0x3e0c0a01,
+0x0309ebca,0xf10345ca,0xd0013bff,0xe7f02500,0x8ffee8bd,0x4ff0e92d,
+0x9107b089,0x461d9206,0x7c43680f,0xf8b74604,0xb1a39014,0x3de0f890,
+0xd1352b00,0xf7fd4638,0xf8b4fbed,0x6a823324,0x4370f403,0x5f80f5b3,
+0x2300bf14,0x429a2301,0x69464683,0xf8d4d005,0x330133c4,0x33c4f8c4,
+0x4638e081,0xfbb6f7fd,0xf8134b48,0xf8d48000,0xea4f3844,0x18cb0148,
+0x2024f9b3,0x36fcf8b4,0x8000f8c5,0xdb0e429a,0x0f03f1b8,0x190bd80b,
+0x2dbaf8b3,0x3db8f8b4,0x0302ea23,0x3db8f8a4,0x000ff06f,0xf8d4e06f,
+0x330133d0,0x33d0f8c4,0x785b693b,0xf413021b,0xd15f4380,0xe00a461d,
+0x30acf8d6,0x3ffff1b3,0xeb06d04d,0xf8d30383,0x2d0050b0,0xf8d4d047,
+0xeb033844,0x68db0388,0x2b03681b,0xeb04d802,0xe7d10348,0xb155464e,
+0x300ff995,0x1af64638,0x2b027a2b,0x3e08bf08,0xf7fd4631,0xf8dbfb65,
+0xf04f3004,0x465a0a00,0x0380f3c3,0x0901f04f,0x46394620,0xa000f8cd,
+0x9004f8cd,0x8008f8cd,0xa00cf8cd,0xf8cd9504,0xf7ffa014,0x9a07faf3,
+0x42bb6813,0x6ca0d004,0x464a4639,0xfc84f7fa,0x46509b06,0x9000f8c3,
+0x33a4f8d4,0xf8c43301,0xf8d433a4,0x199b33a8,0x33a8f8c4,0x9a06e00f,
+0x60132300,0x46396ca0,0xf7fa2201,0xf04ffc6d,0xe00430ff,0x5010f8db,
+0xd1a82d00,0xb009e79c,0x8ff0e8bd,0x0001bd7a,0x41f0e92d,0x46047c45,
+0x680e4617,0xf7ffb115,0xe010ff39,0x33c4f8d0,0x33014631,0x33c4f8c0,
+0x6c806015,0xfc7cf7f7,0x46316ca0,0xf7fa2201,0xf04ffc47,0xe8bd30ff,
+0x46c081f0,0x2207b510,0xf840f00d,0x46c0bd10,0x47f0e92d,0x46812600,
+0x46b0460d,0xeb05e016,0x687c0708,0x6e21b17c,0xf8d9b129,0xf8b40048,
+0xf7fa2064,0xf8d9fc49,0x46210048,0xf7fa2290,0x2300fc43,0x3601607b,
+0x0804f108,0x429e682b,0x2300d3e5,0xe8bd602b,0x46c087f0,0xf8d0b57f,
+0x460e3848,0x685d6818,0xf0056804,0x23fff9c1,0x2100b2c0,0x90039301,
+0x46304622,0x9100462b,0xf00c9102,0xbd7ffb9d,0x41f0e92d,0x3024f890,
+0x7d1af5ad,0xf8d04606,0xb16b7848,0x2324f8b0,0x6328f500,0x4270f402,
+0x5f00f5b2,0xf44fbf14,0x2200729c,0x189f3304,0x2c006bfc,0x4621d14c,
+0x72daf44f,0xf7f8a802,0xf506f8af,0xa86f5538,0x22844621,0xf8a8f7f8,
+0x46a43550,0x682b46a0,0xf003a802,0xea4f0e7f,0x686b018e,0xf10c5842,
+0x18d20c01,0xbf844542,0x46744690,0xf1bc3508,0x50420f40,0xbb3cd1eb,
+0x3d44f8d6,0xbf181e1a,0xf8962201,0xb1333024,0xf5064621,0xf00c704a,
+0x4604fafb,0xf107e018,0x46210574,0xf00c4628,0x687bfaf3,0x2b024604,
+0x7b3ad10e,0x33fdb962,0x46289300,0xa9902301,0xf00c9201,0x9b90faab,
+0x18d3aa9a,0x4c25f813,0xf50d4620,0xe8bd7d1a,0x46c081f0,0x9c04b513,
+0x9c059400,0xf2439401,0x590004a0,0xfac0f003,0x46c0bd1c,0x47f0e92d,
+0x46049d09,0x6c804688,0x01baf105,0x469a4691,0xfb90f7fa,0x0718f105,
+0xb9284606,0x33c0f8d4,0xf8c43301,0xe03033c0,0xf7fd21a2,0x4630fa25,
+0xf7fd4639,0x6932fa29,0xe0023517,0x54ab1c6b,0x2d003d01,0x6934d1fa,
+0x2318ea4f,0xf8847063,0x70a58000,0x1d2070e5,0x22064649,0xf844f7f8,
+0x000af104,0x22064651,0xf83ef7f8,0x0010f104,0x22069908,0xf838f7f8,
+0x75e575a5,0x34189b0a,0x4630601c,0xf7fd2107,0x4630fa05,0x87f0e8bd,
+0x41f0e92d,0x4698b088,0x460d9b0e,0x93014614,0x9200ab07,0x21089302,
+0x4623462a,0xf7ff4606,0x4607ffa5,0x3801b908,0x2401e01a,0xf8d62500,
+0x95002848,0x94029401,0x95049503,0x8014f8cd,0x23baf642,0x46395cf3,
+0x46306912,0xf97af7ff,0x46214630,0x4623463a,0xf7fe9400,0x4628f955,
+0xe8bdb008,0x46c081f0,0xf241b537,0x59034454,0x68194605,0xf00ca801,
+0x592bfe0b,0x68182400,0x7b03e008,0x0f02f013,0x1c63d001,0xa801b2dc,
+0xfe04f00c,0xd1f42800,0xbd3e4620,0x2300b513,0x3007f88d,0x3006f88d,
+0x3007f88d,0xf5007d83,0x3418542c,0xf243b153,0x58c30388,0xb12b781b,
+0x3007f89d,0x0304f043,0x3007f88d,0xffccf7ff,0x428379a3,0xf89dd10b,
+0x79e32007,0xd1064293,0x2006f89d,0x42937a23,0x2000d101,0x71a0e007,
+0x3007f89d,0x71e32001,0x3006f89d,0xbd1c7223,0x43f0e92d,0xac0db0a1,
+0x46894605,0x21004690,0x46202228,0xf7f7461e,0xa803ff7f,0x22282100,
+0xff7af7f7,0x5026f505,0x68033008,0x7dabb93b,0xf8d5b97b,0x7b1b3848,
+0xd1042b05,0x46214889,0xf9e8f00c,0x2b04e005,0x4628d103,0xf7ff4621,
+0xab03fe7d,0x46289300,0xf8d5ab0d,0xf5051328,0xf7fe724b,0x220cfe2f,
+0x21004630,0xff54f7f7,0x3320f895,0xf8957233,0x72733321,0x2326f995,
+0x2301b122,0x3b0172b3,0xe00272f3,0x72b32302,0xf8d572f2,0x685b3848,
+0xd10d2b02,0x3352f8b5,0x0f20f013,0x7ab3d008,0xea437af2,0xf0432302,
+0x72b30320,0x72f30a1b,0x3848f8d5,0xb1637b1b,0x23bbf642,0xb1435ceb,
+0x7af27ab3,0x2302ea43,0x6380f443,0x0a1b72b3,0xf1b972f3,0xf1060f80,
+0xd110070c,0x3045f898,0xf10db16b,0x2100045f,0x2024f898,0xf7f74620,
+0xf898ff0f,0x46382024,0x46232100,0xf898e005,0x46382024,0xf1082100,
+0xf7fe0325,0x2101fc77,0x9a0dab0e,0xfc72f7fe,0x3324f8b5,0xf4034604,
+0xf5b34370,0xd1095f00,0x70032303,0x70432301,0x0324f8b5,0xf95af003,
+0x340370a0,0x3326f995,0xf1b9b18b,0xd10e0f80,0x70232305,0x70633b01,
+0x720cf241,0x3b015cab,0x5cab70a3,0x230070e3,0x71637123,0xf9953406,
+0xb95b3326,0x70233306,0x70632302,0x3322f8b5,0xf8b570a3,0x0a1b3322,
+0x340470e3,0x032df641,0xb13b5ceb,0x3326f995,0x4621b123,0xf7ff4628,
+0x4604fc79,0x3848f8d5,0xb3837b1b,0xf88d2300,0xf642307f,0x5ceb23bd,
+0x2301b113,0x307ff88d,0x23bcf642,0xb12b5ceb,0x307ff89d,0x0302f043,
+0x307ff88d,0x23bef642,0xb12b56eb,0x307ff89d,0x0304f043,0x307ff88d,
+0x077ff10d,0x463b4620,0x2201212a,0xfc06f7fe,0x532bf505,0x4604781b,
+0x212fb12b,0x463b2201,0xfbfcf7fe,0xf8d54604,0x7b1b3848,0xf243b91b,
+0x5ceb038c,0x9a03b13b,0x4620b12a,0xab042132,0xfbecf7fe,0xf1b94604,
+0xbf140f80,0x22012202,0x00d0f8d8,0xf0034621,0xf642f86b,0x5ceb3319,
+0xb12b4602,0x512cf505,0xf7fe3118,0x4602fbcd,0x1b929b28,0xb021601a,
+0x83f0e8bd,0x0001ba34,0x43f0e92d,0x9d0db085,0x682c9e0c,0x3c1e4691,
+0xf842aa04,0x92004d04,0xf106461a,0x460f031e,0xf7ff4680,0x9b03feb9,
+0x331e2100,0x602b221e,0xf7f74630,0x2f80fe3d,0x9a03d10a,0x46494640,
+0x4633321c,0xfe74f7fe,0x46494640,0xffd0f7fd,0x71b3b2bb,0x2f800a1b,
+0xd10571f3,0x000af106,0x2206490a,0xfe44f7f7,0x014cf108,0xf1062206,
+0xf7f70010,0xf508fe3d,0xf10651be,0x31160016,0xf7f72206,0xb005fe35,
+0x83f0e8bd,0x0001a898,0xf44fb5f0,0xf5ad7300,0x460d7d05,0xab839383,
+0xae034617,0x21509301,0x462b2200,0x96004604,0xffa6f7ff,0x4620b117,
+0xf8aaf7fe,0x46339a83,0xf5043203,0xf44f60e8,0xf022711a,0xf7fe0203,
+0x4620fae9,0xf8bd214a,0xf7fd220c,0x4620fdc3,0xf7fd4629,0x9983fef7,
+0x39024620,0xb2899183,0xfe82f7fe,0x4620b117,0xffb6f7fd,0x7d05f50d,
+0x46c0bdf0,0x4605b570,0x2400460e,0xf8d3192b,0xb1391dc8,0xb12b798b,
+0xb11b790b,0x46324628,0xffb6f7ff,0x2c103404,0xbd70d1f0,0xf8d0b570,
+0xf5ad3d00,0xf0237d04,0xf8c00302,0x790b3d00,0x460e4605,0xd0342b00,
+0x30e4f8d1,0x0f20f013,0xf8d0d02f,0xf8d2280c,0xf0033124,0x2b030303,
+0x3b01d102,0x3128f8c2,0x3124f8d2,0x0303f003,0xd1062b03,0x3d00f8d5,
+0x0302f043,0x3d00f8c5,0xf44fe017,0x93837300,0xffb0f7fc,0x0370f243,
+0xab8350e8,0xac034602,0x46289301,0x46332180,0xf7ff9400,0x4628ff2d,
+0x9a834621,0xf7fe2300,0xf50dfacb,0xbd707d04,0x4605b570,0x192b2400,
+0x1dc8f8d3,0x798bb131,0x790bb123,0x4628b113,0xffacf7ff,0x2c103404,
+0xbd70d1f1,0xf890b510,0x46043d4b,0xf002b1b3,0xf894ff23,0x21003d48,
+0x18624318,0x13b4f642,0x31025ad2,0x1329f640,0xbf98429a,0x0001f040,
+0xd1f2290c,0x0301f1d0,0x2300bf38,0x3d4af884,0x46c0bd10,0x4ff0e92d,
+0x468b4681,0x1048f8d9,0x9100b089,0x302af892,0x8b904617,0x9301b90b,
+0xf892e002,0x92012022,0x302cf897,0xf410b9a3,0xd0116f00,0x683a9b01,
+0x0143eb0b,0x7dd27d93,0x1158f8b1,0x2302ea43,0xd1054299,0x355cf8d9,
+0xf8c93301,0xe184355c,0xf0138c3b,0xf0400204,0xf4008180,0x637b4380,
+0xf243b13b,0xf85903a0,0x63ba0003,0x22024639,0xf897e15b,0xf3c0502c,
+0x2d002a80,0x8111f040,0xeb0b9901,0x68390041,0x4158f8b0,0x7d8b7dca,
+0x2302ea43,0x3158f8a0,0x7d8a7dcb,0xea429901,0xf0122203,0xea4f000f,
+0xd14b0381,0x040beb03,0x1118f8d4,0x9800b149,0xf7fa462a,0xf8c4f819,
+0xf8c45118,0xf8c45138,0xf1ba524c,0xf0000f00,0x697b80eb,0xf8c448a5,
+0x68fb3118,0xf5c36879,0xf8c463e4,0x22083138,0xfbfef7f7,0x3004f8db,
+0xf023b110,0xe0010308,0x0308f043,0x3004f8cb,0x03a0f243,0x2003f859,
+0x4b999801,0x4b995c19,0xeb025c5b,0x6b130283,0xf243b933,0xf8390394,
+0x2b003003,0x811ef000,0x464869bb,0x7c597c1a,0x2101ea42,0xfea4f7fd,
+0xeb0b9901,0xf8c30381,0xe10f024c,0x060beb03,0x1118f8d6,0xf022b1a1,
+0xf024020f,0x429a030f,0xf004d104,0x3301030f,0xd00f4298,0x462a9800,
+0xffc2f7f9,0x5118f8c6,0x5138f8c6,0x524cf8c6,0x3400f8d9,0xf8c93301,
+0xe0ea3400,0xf8d668ba,0x429a3138,0xf243d8ea,0xf85903a0,0x98012003,
+0x5c194b75,0x5c5b4b75,0x0283eb02,0xb9248e14,0x0394f243,0x4003f839,
+0x69bbb1cc,0x7c1a4648,0xea427c59,0xf7fd2101,0xf8d6fe5f,0x1ac0324c,
+0xd30c42a0,0xf8d69800,0x462a1118,0xff8cf7f9,0x5118f8c6,0x5138f8c6,
+0x524cf8c6,0x9901e0b9,0xeb0b68bd,0xf8d60681,0x462a4118,0x8014f8b4,
+0x68796920,0xf7f74440,0x4620fc67,0x0105eb08,0xfe32f7fc,0x3138f8d6,
+0x1b5b9800,0x3138f8c6,0x22006979,0xff68f7f9,0x0f00f1ba,0x809ef040,
+0x3118f8d6,0xa138f8c6,0xf8c6617b,0x697ba118,0xa24cf8c6,0x8a99691a,
+0x0318f102,0xf1a1607b,0x60bb0318,0x3029f897,0x60f9603a,0xf102b12b,
+0x607b031e,0x031ef1a1,0xf89760bb,0xb143302a,0x9a01687b,0x607b3302,
+0xf88768bb,0x3b022022,0x683a60bb,0x78527813,0x2302ea43,0x6b7b83bb,
+0x6bb9b173,0xf991687b,0x189b200e,0xf991607b,0x68bb200e,0x60bb1a9b,
+0xf1bae002,0xd15d0f00,0xf10d6839,0x3104061a,0x46302206,0xfc0cf7f7,
+0xad056839,0x2206310a,0xf7f74628,0x6839fc05,0x040ef10d,0x31104620,
+0xf7f72206,0xf897fbfd,0xb12b3029,0xa8026839,0x22063118,0xfbf4f7f7,
+0xf4138bbb,0xf4037f80,0xd1057300,0xbf142b00,0x462b4623,0xe004677e,
+0xb90b677c,0xe001673d,0x673bab02,0x66fb683b,0xb16b6bbb,0x2b017a1b,
+0x2b03d00a,0xf243d008,0xf85903a0,0x46390003,0xf0032203,0xe019f84f,
+0x781b6f7b,0x0f01f013,0xf8d9d004,0x33013570,0x3570f8c9,0x370cf8d9,
+0xf8cb4639,0xf2433020,0xf85903a0,0x22000003,0x9800e7e7,0x22006979,
+0xfec6f7f9,0xe8bdb009,0x46c08ff0,0x0001bbec,0x0001bd7a,0x0001a110,
+0x47f0e92d,0xb0a22400,0x4026f88d,0x402ff88d,0x402cf88d,0x4064f88d,
+0x9306461f,0x46058a9b,0x468a2b21,0x94214691,0x940a940f,0xd93f9207,
+0x8010f8d7,0xa81f2206,0xf7f74641,0xf108fb8d,0x92010206,0xf8987852,
+0xea433006,0xf8ad2302,0xf3c33020,0xf8ad0381,0xf8bd3022,0xf3c33020,
+0xf4031203,0xf5b37340,0xbf147f40,0x23012300,0x302df88d,0x3022f8bd,
+0x2024f8ad,0xbf0a2b02,0x3024f8bd,0xf3c34623,0xf89d03c0,0xb2db402d,
+0x302ef88d,0xbf0c2c00,0x22282222,0x3202b103,0x302ff89d,0x3204b103,
+0x8a9b9b06,0xd2054293,0x3404f8d5,0xf8c53301,0xe1cd3404,0x7da89901,
+0xf003790b,0xf88d0201,0x28002030,0x7c2bd144,0xd0412b00,0x3024f895,
+0xb99cb1a3,0x3020f8bd,0x7f80f413,0x3104d001,0xf413e005,0xd0017f00,
+0xe000310a,0x46283110,0xf0022201,0x3800fcef,0x2001bf18,0x0034f88d,
+0xf1059801,0x3004014c,0xf7f72206,0xb340fa2d,0x3020f8bd,0x7f80f413,
+0xf89dd105,0xb1133030,0x3034f89d,0xf89db9eb,0xb113302d,0x3030f89d,
+0x7c2bb9bb,0xf0002b00,0xf89d818b,0x2b003034,0x8186f000,0x2b007dab,
+0x8182f040,0xe0092601,0x9901b93a,0x31044628,0xfcbcf002,0xf0002800,
+0x26008177,0x21069806,0xfcbaf7fc,0xf1029a01,0x93020318,0x302df89d,
+0xf102b113,0x9302031e,0xf88d2300,0xf89d3031,0xb1eb302e,0xf7fc9802,
+0xf3c0fccb,0xf88d13c0,0x2b003031,0x8158f040,0xf0004ba9,0xf88d0207,
+0x5c9a2026,0x5c9b4ba7,0xf3c0930a,0xf88d1300,0x9b02302c,0x93023302,
+0x3026f89d,0x3064f88d,0x3031f89d,0x9806b90b,0x4650e003,0xf7f69906,
+0x8a81fe03,0xf7fc3904,0x9a06fc87,0x8a939c02,0x93046912,0x1b1b1aa4,
+0x46394650,0xf7f69303,0x1b00fdeb,0xbb269005,0x03a0f243,0x990158e8,
+0xab219a07,0xfceaf002,0xf0402800,0xe121811d,0x3020f8bd,0x7f80f413,
+0xe012d00d,0x2020f8bd,0x3023f895,0x7240f402,0xbf142b00,0x7300f44f,
+0x429a2300,0xf8d5d005,0x330133f8,0x33f8f8c5,0x7dabe102,0xf89db1bb,
+0x9a21302d,0x6953b11b,0x309ef8b3,0xf8b2e036,0xf8ad30e8,0xf8bd306c,
+0xf4133020,0x68535f80,0xf443bf14,0xf4233300,0x60533300,0xf895e028,
+0xb1033023,0x9b21b1fe,0xf899b9eb,0xf8992012,0x99013013,0x2203ea42,
+0x02c7f3c2,0x310a4628,0xbfd42a0e,0x22012200,0xfb6af00c,0xb9509021,
+0x3023f895,0xf0402b00,0xf8d580cb,0x3301340c,0x340cf8c5,0x9b21e0c4,
+0x30e8f8b3,0x306cf8ad,0x3030f89d,0x2b007daa,0x2a00d03e,0x80b8f040,
+0x3023f895,0x9801b14b,0x014cf105,0x32063010,0xf93af7f7,0xf0002800,
+0x990180ab,0x78a31d0c,0x401a7862,0x7921790b,0x78e24013,0x7963401a,
+0x400b4011,0xd01f2bff,0x3022f895,0x461eb9e3,0x2206e008,0x5102fb06,
+0x31524620,0xf91cf7f7,0x3601b168,0x3114f8d5,0xd3f2429e,0x03a4f243,
+0xb13358eb,0xf2438822,0x429a3333,0x2300d101,0x2301e000,0xd17b2b00,
+0x46414648,0xfc00f00b,0xf89d6338,0x2b003030,0xf000d167,0x2816007f,
+0xd80cd03a,0xd025280b,0x2802d804,0x2804d016,0xe05ad01a,0xd023280c,
+0xd0272812,0x2830e055,0xd804d03c,0xd02d2818,0xd0312824,0x2860e04d,
+0x286cd040,0x2848d044,0xe046d036,0x35d8f8d5,0xf8c53301,0xe04035d8,
+0x35dcf8d5,0xf8c53301,0xe03a35dc,0x35e0f8d5,0xf8c53301,0xe03435e0,
+0x35e4f8d5,0xf8c53301,0xe02e35e4,0x35e8f8d5,0xf8c53301,0xe02835e8,
+0x35ecf8d5,0xf8c53301,0xe02235ec,0x35f0f8d5,0xf8c53301,0xe01c35f0,
+0x35f4f8d5,0xf8c53301,0xe01635f4,0x35f8f8d5,0xf8c53301,0xe01035f8,
+0x35fcf8d5,0xf8c53301,0xe00a35fc,0x3600f8d5,0xf8c53301,0xe0043600,
+0x3604f8d5,0xf8c53301,0x46283604,0xaa019921,0xfc1cf7ff,0x46c0e00f,
+0x0001bd7a,0x0001a110,0x99064650,0xf7f92200,0xe004fc8b,0x2b007dab,
+0xaee0f43f,0xb022e6d8,0x87f0e8bd,0x4a2db5f0,0x7813b097,0x460f4604,
+0xd1512b00,0x70133301,0x6db8f8b0,0x69cbe02f,0xf013ad13,0xd0060f04,
+0x46202301,0x9314462a,0xfd44f7fc,0x4620e005,0xaa14a903,0xf7ff462b,
+0xb978f803,0xe0094605,0x93002301,0xf852aa03,0x46202025,0xf7fd9913,
+0x3501fa9f,0x429d9b14,0xe00cdbf2,0x0f10f110,0x4638d109,0x9a039915,
+0xfcaef7f6,0x3db8f8b4,0xd00a429e,0xb146461e,0x46384631,0xf7f6aa15,
+0x4601fd09,0x28009003,0x6aa1d1c5,0xf8b4b169,0x2b0f3dea,0xf421d809,
+0x62a17180,0xf8d4b929,0xf04f073c,0xf7fc32ff,0x4b02f88f,0x701a2200,
+0xbdf0b017,0x0001c708,0x4ff0e92d,0x9105b09f,0x180cf8d0,0x3844f8d0,
+0x7a1b9107,0xb1534607,0x2120f8d1,0x4304f240,0x0303ea02,0x6080f5b3,
+0x2001bf18,0x6880e005,0xfe6af7f5,0xbf183800,0xb1282001,0x073cf8d7,
+0xfa5cf7fc,0xe3782000,0x2cf8f8d7,0x0cf8f8c7,0x0f40f012,0xd0029206,
+0xf7fc4638,0x7dbbfc1b,0x9b06b133,0x0f02f013,0x4638d002,0xfb40f7ff,
+0xf0119906,0xf0005f00,0x9a0581aa,0x2a002300,0xf04fbf0c,0x220832ff,
+0x93099208,0xf8ade17e,0x0c12206e,0x206cf8ad,0xf8d36cba,0x920c3174,
+0x206ef8bd,0x3072f8ad,0x4307f3c3,0x3074f8ad,0x0360f002,0x0100f04f,
+0xf8ad2b40,0xf8bd1070,0xd106106c,0x3568f8d7,0x3312eb03,0x3568f8c7,
+0xf001e156,0xeb070107,0xf8d30381,0x910d0778,0x21006ac3,0x091cf002,
+0x69044798,0x78224680,0xea427863,0xf1002503,0x930a031c,0x306ff894,
+0x206ef894,0x2b03ea42,0x3026f894,0x0f01f013,0x990ad013,0x3009f991,
+0x0383eb07,0x2dc8f8d3,0x3324f8b7,0x4370f403,0x5f80f5b3,0x2300bf14,
+0xeb022301,0x6d150283,0xf3c5e007,0x463812c0,0x0126f104,0xffe2f00b,
+0xb10d4605,0x502cf8c8,0xf0037823,0x930b0304,0x306ef8bd,0xf3c30b1e,
+0xd0052a03,0x33acf8d7,0x199b3b01,0x33acf8c7,0x0f00f1ba,0xf8d7d005,
+0x3b0133ac,0xf8c74453,0xf48b33ac,0x6cb86380,0xf3c34641,0xf7f62b80,
+0xf8bdfb8b,0xf013306e,0xd02e0f02,0x3548f8d7,0xf8c73301,0xf8d73548,
+0x3b013568,0x2e01199b,0x3568f8c7,0xf642dd05,0x58bb6248,0x199b3b01,
+0xf1bb50bb,0xd0150f00,0x3578f8d7,0x6248f642,0xf8c73301,0x58bb3578,
+0xf8d7b123,0x33013554,0x3554f8c7,0x2b0158bb,0xf8d7d904,0x33013558,
+0x3558f8c7,0x3501b9c5,0xf013e096,0xd1170ffe,0x68139a0a,0x5f80f413,
+0xf8d7d012,0x33013548,0x3548f8c7,0x0f00f1bb,0xf8d7d004,0x33013578,
+0x3578f8c7,0xd07c2d00,0x370cf8d7,0xe078622b,0x0f0cf1b9,0xf1b9d075,
+0xd1050f10,0x35b0f8d7,0xf8c73301,0xe06c35b0,0x0f14f1b9,0xf8d7d105,
+0x330136d8,0x36d8f8c7,0xf1b9e063,0xd1100f04,0x2b007dbb,0x2d00d05d,
+0x4638d05b,0xfb12f7fc,0xf0137b2b,0xd1560f02,0xf0137e6b,0xd1520f01,
+0xf1b9e04f,0xd04e0f08,0x0f18f1b9,0xf8bdd049,0xb12b3074,0x33d8f8d7,
+0xf8c73301,0xe04033d8,0x3026f894,0x0f01f013,0xb126d019,0x3548f8d7,
+0xf8c73301,0xf1bb3548,0xd0320f00,0xb9137dbb,0x3023f897,0xf8d7bb6b,
+0x33013578,0x3578f8c7,0xf8d7b33e,0x3301354c,0x354cf8c7,0x9b0be021,
+0xf642b913,0xe00613c2,0x13c2f642,0x459a5afb,0xf642d004,0x5afb13c4,
+0xd10d429e,0x3568f8d7,0xf8c718f3,0xf1bb3568,0xd00a0f00,0x3550f8d7,
+0xf8c73301,0xe0043550,0x33bcf8d7,0xf8c73301,0x250133bc,0x2500e000,
+0x990d4638,0xf7fc2201,0x990bffed,0x03a0f243,0x290058f8,0xf04fbf08,
+0x464b0a00,0x46412400,0x9600aa1a,0xa004f8cd,0xf0029402,0xf898fbef,
+0xb12b3024,0x46414638,0x206ef8bd,0xfb9ef7fc,0x980cb125,0x22014641,
+0xfa6af7f9,0x0f00f1bb,0xf642d002,0x50fc6348,0x9b089a09,0x429a3201,
+0xd2079209,0x380cf8d7,0x2170f8d3,0x0f01f012,0xae79f47f,0x03a0f243,
+0x210058f8,0xfa76f002,0x3deaf8b7,0xf507b12b,0x4638615e,0xf7ff3104,
+0x9909fdc5,0x42919a08,0xf8d7d305,0xf0433cf8,0xf8c75300,0x9b063cf8,
+0x0f04f013,0xf8d7d00a,0x99073458,0xf8c73301,0xf2433458,0x58f803a0,
+0xf96af002,0xf0119906,0xd00b0f20,0xf6429b07,0xf8d33138,0x587b2124,
+0x9a074313,0x3124f8c2,0x507b2300,0xf4139b06,0xd0046f00,0x33d8f8d7,
+0xf8c73301,0x990633d8,0x4f00f411,0x8094f000,0x25009a05,0xbf0c2a00,
+0x3afff04f,0x0a08f04f,0x46a8462c,0xb90ce008,0xe000461d,0xf1086063,
+0x45d00801,0x461cd207,0x0778f8d7,0x47986dc3,0x28004603,0xf8d7d1ef,
+0x6e030778,0xe0694798,0x692e2300,0xb004f8d5,0x606b211e,0xf8d74628,
+0xf7fc9048,0x7b33f89d,0x0f04f013,0x8aabd006,0xd9102b01,0x21024628,
+0xf892f7fc,0x69288aab,0xd9082b07,0x79c27983,0x2202ea43,0xf0137bb3,
+0xd0060f01,0xf8d7e040,0x33013404,0x3404f8c7,0xf3c2e03a,0x2c020481,
+0xbb2cd000,0x0110f100,0x784a788b,0x431a7c00,0xea4078cb,0x43130202,
+0x431a790a,0x4313794b,0xf010d002,0xd0050f01,0x3414f8d7,0xf8c73301,
+0xe01d3414,0x356cf8d7,0x2c023301,0x356cf8c7,0x4638d106,0x46324649,
+0xf7ff462b,0xe014fae1,0xd8082c01,0x03a0f243,0x6cb958f8,0x462b4632,
+0xfaf8f002,0xf8d7e009,0x33013410,0x3410f8c7,0x46294648,0xf7f92200,
+0x465df987,0xd1932d00,0xd30545d0,0x3cf8f8d7,0x4300f443,0x3cf8f8c7,
+0xf4139b06,0xd0083f80,0x21014638,0xfc16f7fc,0xf8d7b118,0xf00b07f8,
+0x9906f9dd,0x2f80f411,0xf8d7d004,0x68183848,0xf840f004,0xf4129a06,
+0xf0005f00,0x683980c2,0x270cf8d7,0xf7f6486c,0xf8d7fe6b,0x6839680c,
+0x270cf8d7,0xf7f64869,0xf8d6fe63,0xf8d62154,0xf8b63158,0xb2891434,
+0xf8b69111,0xf8b61436,0xb289b3e8,0x83eaf8b6,0xf8b69110,0xf8b6a50e,
+0xf8d693ee,0xf8b61180,0x910e0490,0x17c0f8b6,0x57d0f8b6,0x47d2f8b6,
+0xf8adb280,0xb2891012,0xb2ad910f,0xb2a46839,0x48559000,0xfe38f7f6,
+0x4623462a,0x4853990f,0xfe32f7f6,0xfb8bfa1f,0x4851990e,0xfe2cf7f6,
+0xf888fa1f,0x9911465b,0xfa1f9a10,0xfa1ffa8a,0x484cf989,0x8000f8cd,
+0xfe1ef7f6,0x4651464a,0xf7f64849,0xf8d7fe19,0x4848380c,0x14d0f8b3,
+0xf7f6b289,0xf8d7fe11,0x4845380c,0x14d2f8b3,0xf7f6b289,0xf8d7fe09,
+0x4842380c,0x14d4f8b3,0xf7f6b289,0x217efe01,0xf7fc4638,0x21a2fbc5,
+0x46384604,0xfbc0f7fc,0x46024621,0xf7f6483a,0xf241fdf3,0x4638311a,
+0xfbb6f7fc,0x3116f241,0x46384605,0xfbb0f7fc,0x3118f241,0x46384604,
+0xfbaaf7fc,0x46034622,0x48304629,0xfddcf7f6,0x3126f241,0xf7fc4638,
+0x4601fb9f,0xf7f6482c,0x482cfdd3,0xfdd0f7f6,0xe0342500,0x2154f8d6,
+0x50caab12,0x29203104,0x2400d1f8,0x58e1ab12,0x34044825,0xfdc0f7f6,
+0xd1f72c20,0x35014823,0xfdbaf7f6,0xd11e2d08,0x35b4f8d7,0x073cf8d7,
+0xf8c73301,0xf7fb35b4,0x9a06ff2f,0xda032a00,0x280cf8d7,0x61932300,
+0x3deaf8b7,0xf507b12b,0x4638615e,0xf7ff3104,0xf8d7fc0d,0x1e183cf8,
+0x2001bf18,0x2100e001,0xb01fe7c8,0x8ff0e8bd,0x0001a12c,0x0001a16c,
+0x0001a1a0,0x0001a1d8,0x0001a20b,0x0001a21e,0x0001a267,0x0001a286,
+0x0001a298,0x0001a2aa,0x0001a2bc,0x0001a2d9,0x0001a31c,0x0001a331,
+0x0001a338,0x0001a336,0x41f0e92d,0x46084606,0xf7fb4688,0x4604ff1f,
+0x0010f8d8,0x78437802,0x2303ea42,0x0281f3c3,0xd1052a02,0x7f40f413,
+0x2200bf14,0xe0082201,0x2200b10a,0xf3c3e005,0x2b091303,0x2200bf14,
+0x79032201,0xf0131d01,0xd00d0f01,0x3324f8b6,0x1238f243,0x4370f403,
+0x113cf243,0x5f80f5b3,0x460abf08,0xe02558b7,0xf8b6b19a,0x46302324,
+0x4270f402,0x5f80f5b2,0x2200bf14,0xf00b2201,0x4607fe2b,0xf8d6b9b0,
+0x330133c0,0x33c0f8c6,0x4630e03c,0xfc7ef00b,0xb1284607,0x5342f506,
+0x33686942,0xd005429a,0x33c4f8d6,0xf8c63301,0xe02b33c4,0xb2e44b19,
+0x4b195d1a,0xeb065c9b,0xf8d30383,0xb91b3eb0,0x0390f243,0xb12358f3,
+0x46394630,0xf7fb4642,0xf506fff1,0x781b5345,0x021cf108,0x4b0f7253,
+0x0407f004,0xf8d76117,0x463901f0,0x51ecf8d7,0x5d1b4642,0xf50647a8,
+0x4630615e,0xf7ff3104,0xe004fb5d,0x46416cb0,0xf7f82201,0x2000ffd9,
+0x81f0e8bd,0x0001bd7a,0x0001a110,0x0001a89e,0x461db5f7,0x33fff04f,
+0x330d9301,0x1303fb05,0x8a19460c,0x46068a5b,0x46174299,0x88e1d206,
+0x429988a3,0x4620d204,0xe0294629,0xe0069501,0xa9014620,0xf868f7f6,
+0x42ab9b01,0x9901dc24,0xdb1a2900,0x3d7cf896,0x42a9410b,0x0301f003,
+0xb1cbd101,0xb11be000,0xf7f64620,0xe002f81f,0xf7f64620,0x4601f82f,
+0x6cb02201,0xff98f7f8,0x33c0f8d6,0xf8c63301,0x462033c0,0x463a4629,
+0xffd6f7f5,0xe0002001,0xbdfe2000,0x615ef500,0x3104b570,0x46154604,
+0xffb2f7ff,0x6ca0b920,0x22014629,0xff7cf7f8,0xb96b6aa3,0x3deaf8b4,
+0xd9092b1f,0x7380f44f,0xf8d462a3,0x2101073c,0x32fff04f,0xfbd0f7fb,
+0x46c0bd70,0x47f0e92d,0x46894605,0x0881f100,0xbf342a20,0x27204617,
+0x26004604,0xf816e01d,0xf1bee009,0xd1060f5c,0xf8034623,0xf884eb01,
+0x1c5ce001,0x4b0de010,0x300ef813,0x0f97f013,0xf804d002,0xe007eb01,
+0xebc44620,0x4a080108,0xf7f64673,0x1824fc7b,0x42be3601,0x2300d1df,
+0x0004ebc5,0xe8bd7023,0x46c087f0,0x00016efe,0x0001a341,0xf890b510,
+0x46023d05,0x2001b90b,0x2300e008,0x3d05f880,0x1d2cf8d2,0x073cf8d0,
+0xfd4ef7fb,0x46c0bd10,0xf89db5f7,0x460e5020,0x88c94617,0xb165461a,
+0x0f80f011,0x7c43d001,0xf011b98b,0xd0010f40,0xb1637c43,0x7f80f411,
+0xf411e013,0xd0016f00,0xb9237c43,0x6f80f411,0x7c43d009,0x7c43b93b,
+0xbf0c2b00,0x0403f06f,0x0404f06f,0xf411e059,0xd0045f80,0x3844f8d0,
+0x2b007a1b,0x2300d04f,0x46309301,0x462b4639,0xf86af7f6,0x28004604,
+0x2d00d147,0x8933d045,0x2b063b01,0x4639d841,0x2204a801,0xfbccf7f6,
+0x99018933,0x2b053b02,0xe8dfd837,0x0305f003,0x22070a0c,0xe0222200,
+0xe0092300,0x4300f06f,0x2300e002,0x2300e017,0x33d3ea6f,0x33c3ea6f,
+0xf04388f0,0xf010027f,0xd0010320,0xe0032301,0x0f10f010,0x43d3bf08,
+0xdb114299,0xdc0f4291,0xf04fe013,0xea6f33ff,0xea6f4213,0x88f34202,
+0x0f20f013,0xb119d000,0x03fff042,0xd9044299,0x041cf06f,0xf06fe001,
+0x4620040a,0x46c0bdfe,0x4ff8e92d,0x646ef500,0x468b4680,0x34044691,
+0xf04f2700,0xfb070a34,0xf503f30a,0xeb08636c,0x46300603,0xf7f64659,
+0x4605fab5,0x6823b948,0xd106454b,0x46294630,0xf7f64652,0x4628fb4d,
+0x3701e005,0x2f163434,0xf06fd1e3,0xe8bd001d,0x46c08ff8,0x4ff0e92d,
+0x4690b089,0x2050f89d,0xb04cf8dd,0x46894607,0x92069307,0x646ef500,
+0x0a00f04f,0xb1956825,0x213a4648,0xfac4f7f6,0x464eb908,0x1c46e006,
+0x4631e004,0xfa82f7f6,0x350cb120,0x28006828,0xe000d1f7,0xf10ab945,
+0x34340a01,0x0f16f1ba,0xf06fd1e4,0xe0370416,0x0f00f1b8,0xf8ddd103,
+0xf8cd8048,0x892bb01c,0x4619b90b,0x2b08e003,0x4659bf0c,0x9b062104,
+0xb11388aa,0x1c5e0053,0x0056e000,0x23349a07,0x9a129201,0x7303fb0a,
+0x9a159202,0x92059104,0x8000f8cd,0xb00cf8cd,0x4eecf8d3,0x0ee4f8d3,
+0x46324629,0x47a0464b,0x0f01f016,0xd0074604,0xf7fe4638,0xf8d7fd77,
+0x33013d50,0x3d50f8c7,0xb0094620,0x8ff0e8bd,0xab06b57f,0x2d04f843,
+0x23049300,0x93012200,0x93022301,0x92034613,0xff88f7ff,0xbd00b007,
+0x41f3e92d,0xf8d0461f,0x46053844,0x460c7a1b,0xf8dd4616,0xb1638020,
+0x380cf8d0,0x2120f8d3,0x4304f240,0x0303ea02,0x6080f5b3,0x2001bf18,
+0x6880e005,0xf83cf7f5,0xbf183800,0xb1302001,0x073cf8d5,0xfc2ef7fb,
+0x30fff04f,0x2c34e038,0xdc05d014,0xdb0e2c02,0xdd0f2c03,0xe0092c1b,
+0xd00b2cd6,0x2ca3dc01,0x2cfbe004,0xf240d006,0x429c130b,0xb1ced002,
+0xdd172f00,0x46214628,0x463b4632,0x8000f8cd,0xf9fef001,0x0f17f110,
+0xf243d10a,0x58e803a0,0x46324621,0xf8cd463b,0xf0018000,0xe00bff2f,
+0xe009b910,0x0001f06f,0x0325f100,0xd9012b25,0xe0012000,0x0708f8c5,
+0x81fce8bd,0x4603b510,0xb1187c40,0x073cf8d3,0xfc12f7fb,0x46c0bd10,
+0x7c43b510,0xf8d0b11b,0xf7fb073c,0xbd10fc03,0x4604b570,0xb929460d,
+0x37c0f890,0xf890b17b,0xb9633d05,0xb11868a0,0x462a2103,0xffd0f7f4,
+0x581cf884,0xf884b91d,0xf8845970,0xbd705854,0x41f0e92d,0x681cf890,
+0xb9164604,0xf7ff2101,0xf8d4ffdf,0x7a1d3844,0x68a0b955,0x462a4629,
+0xf8b6f7f5,0x6180f44f,0x460a4620,0xff20f7fb,0x380cf8d4,0x7158f8d3,
+0x68a0b91d,0xf7f54629,0xb91ef8b3,0x46314620,0xffc2f7ff,0x3710f8d4,
+0x3f80f417,0xf043bf14,0xf0230302,0xf8c40302,0xe8bd3710,0x46c081f0,
+0x4605b570,0x4616460c,0xfcccf001,0x3024f895,0xd06c2b00,0xf0014620,
+0x4604fc69,0x0324f8b5,0xfc64f001,0xd1624284,0x2700f895,0x36fff995,
+0x1a9b4631,0x78330098,0x42984632,0x4603bfb8,0x78737033,0xbfb84298,
+0x70734603,0x428378b3,0x4603bfa8,0x78f370b3,0xbfa84283,0x70f34603,
+0x42987913,0x4603bfb8,0x7b137113,0xbfb84298,0x73134603,0xf1063201,
+0x429a0308,0x4632d1f0,0x7d132400,0x42983401,0x4603bfb8,0x7f137513,
+0xbfb84298,0x77134603,0x302cf892,0xbfb84298,0xf8824603,0xf892302c,
+0x42983034,0x4603bfb8,0x3034f882,0x2c083201,0x2200d1e3,0x3024f891,
+0x42983201,0x4603bfb8,0x3024f881,0x303cf891,0xbfb84298,0xf8814603,
+0x3101303c,0xd1ed2a08,0x3044f896,0xbfb84298,0xf8864603,0xbd703044,
+0x2201b570,0x4605b092,0xf001460e,0xb1e0fc33,0x0403f10d,0x46314628,
+0xf7ff4622,0xb2f3ff79,0x01d3eb05,0x426cf241,0xf0035c8a,0x411a0307,
+0x46234628,0xf0024631,0xf7fc0201,0xf642ff0d,0x52ee13b0,0xf7fd4628,
+0xb012fac3,0x46c0bd70,0x41f0e92d,0x3d07f890,0x2b004604,0x80c0f040,
+0x2b007c43,0x80bcf000,0xf8802301,0xf8d03d07,0x7a1b3844,0xf8d0b163,
+0xf8d3380c,0xf2402120,0xea024304,0xf5b30303,0xbf186780,0xe0032701,
+0xf7f46880,0x4607fed5,0x2300b11f,0x3cfcf8c4,0x2104e00c,0x07f8f8d4,
+0xff62f00a,0x073cf8d4,0xfaeaf7fb,0x46394620,0xfc2ef7fc,0x1354f8d4,
+0x6ca0b149,0x2358f8b4,0xfc7af7f8,0xf8c42300,0xf8a43354,0x26003358,
+0x23344635,0x4203fb05,0x3ef0f8d2,0xf8d2b11b,0x47980ee4,0x35011836,
+0xd1f22d16,0x3d64f894,0xf8d4b153,0xf8d4073c,0xf7fb1d14,0xb900fa69,
+0x23003601,0x3d64f884,0x0334f641,0x073cf8d4,0xf7fb58e1,0xb900fa5d,
+0x6aa33601,0x74652500,0x5044f884,0x62a5b13b,0x073cf8d4,0xf04f4629,
+0xf7fb32ff,0xf504f885,0x6ca0615e,0x22013104,0xfec0f7f5,0xb17b7da3,
+0x0385eb04,0x1dc8f8d3,0x798bb139,0x790bb12b,0x4620b11b,0xfaaef001,
+0x35011836,0xd1ef2d04,0x2300b157,0x381cf884,0x3970f884,0x3854f884,
+0xf7fc4620,0xe01ffb15,0x3d08f894,0x4620b913,0xfe4af7fc,0xf7f468a0,
+0xb188fff5,0x380cf8d4,0x3120f8d3,0x0f01f013,0x4620d002,0xfb68f7fc,
+0x073cf8d4,0xfa6ef7fb,0x46201836,0xfb0ef7fc,0x2848f8d4,0x73532300,
+0x3d08f894,0xb91fb923,0x46394620,0xfe50f7ff,0xf8842300,0xe0003d07,
+0x46302600,0x81f0e8bd,0x4ff0e92d,0xb08d7c84,0xb99c4607,0xf7ff2101,
+0x68b8fe3f,0xfe1af7f4,0x46384621,0xfb88f7fc,0xf7fc4638,0xf8d7fe0d,
+0x68183848,0xfb42f002,0x74bb2301,0x46382101,0xfe2af7ff,0xf7f468b8,
+0x2100fe05,0xf7fc4638,0xf8b7fb73,0xf2442828,0x429a3321,0x3b0ed010,
+0xd00d429a,0x429a3307,0x3310d00a,0xd007429a,0x429a3b14,0x3307d004,
+0xd001429a,0xe0052300,0x3840f8d7,0xbf142b02,0x23012300,0x0840f8d7,
+0xe0004619,0x28023101,0xf244d114,0x429a3321,0x3b0ed00e,0xd00b429a,
+0x429a3307,0x3310d008,0xd005429a,0x429a3b14,0x3307d002,0xd101429a,
+0xe0002302,0x42992301,0x4638d3e4,0xfdfcf7ff,0x3710f8d7,0x4638b13b,
+0xfc96f7fc,0x21004638,0xfddaf7ff,0x4638e114,0xfc28f7ff,0xf04f4638,
+0xf7fc31ff,0xf8b7fc1d,0xf2441828,0x42993321,0x3b0ed012,0xd00f4299,
+0x42993307,0x3310d00c,0xd0094299,0x42993b14,0x3307d006,0xbf144299,
+0x21012100,0xe0019109,0x93092301,0x99094638,0x0b28f10d,0xfcb2f7fc,
+0x21084658,0xf8d74a76,0xf7f63740,0xf8d7f867,0x2e006778,0xf8d7d16e,
+0xf8d71758,0xf501074c,0xf8d77100,0xf7f79748,0xf8d7f939,0xf8d73758,
+0xf503274c,0x93007308,0x93022310,0x7344f240,0x23089303,0x93044d67,
+0x93053316,0x46334659,0x96014648,0xf7f79506,0xf8d7fa7f,0xf8c73758,
+0xf8d70778,0x4604274c,0x0a20f04f,0xf5034659,0x46487310,0xf8cd9600,
+0x9602a004,0x96049603,0x95069605,0xfa68f7f7,0x3758f8d7,0x077cf8c7,
+0x274cf8d7,0xf5034680,0x46487330,0x96004659,0xa004f8cd,0x96039602,
+0x96059604,0xf7f79506,0xf1d4fa53,0xbf380401,0xf1b82400,0xbf080f00,
+0x0401f044,0xbf142800,0xf0444623,0xf8c70301,0xb10b0784,0xe0304633,
+0x461d463c,0x0778f8d4,0x6f03b120,0x47984940,0x07a8f8c4,0x34043501,
+0xd1f32d06,0x4848f8d7,0x22082100,0x006cf104,0xf7f56825,0xf8d7ff81,
+0xf0133388,0xd0050f20,0x306cf8b4,0x6380f443,0x306cf8a4,0xf2428a2a,
+0x429a0350,0x7cabd108,0xd8052b05,0x306ef8b4,0x0304f043,0x306ef8a4,
+0xf0132301,0xd04b0fff,0xf1b39b09,0xf43f3fff,0xf8d7af3a,0xf8d72844,
+0xf8d737a8,0x60d3073c,0x37acf8d7,0x61132401,0x37b0f8d7,0xf8d76153,
+0x619337b4,0x37b8f8d7,0xf8d761d3,0x621337bc,0xf906f7fb,0x23032100,
+0x7280f44f,0x46389300,0xf7fb460b,0x4638ff7b,0xf00a747c,0xf8d7ff49,
+0xf8d7073c,0xf44f1d14,0x4623727a,0xfecef7fa,0xf8874638,0xf7fe4d64,
+0x4638f9c1,0xff6af7fd,0x4638b130,0xf9a8f7fe,0x46214638,0xf94af7fe,
+0x21024638,0xfa18f7fc,0x073cf8d7,0xfee6f7fa,0xb00d2000,0x8ff0e8bd,
+0x0001a03d,0x0001c704,0x00017a28,0x5142f500,0x4f70e92d,0xf04f3168,
+0xf8c00901,0xf8801dc8,0x46049d04,0xf0012600,0xf642f943,0x54e623ba,
+0xf04f330a,0xf80435ff,0x3b059003,0x3b0454e5,0x330654e6,0x9003f804,
+0x54e63b03,0x539ff504,0x2102701d,0x4620462a,0xf91cf7fb,0x46494620,
+0xf7fb4632,0x210cf917,0x4620462a,0xf912f7fb,0x4620210b,0xf7fb4632,
+0x210ef90d,0x4620462a,0xf908f7fb,0x4620210d,0xf7fb4632,0x2104f903,
+0x46202202,0xf8fef7fb,0x532bf504,0x0a03f04f,0x9000f883,0x3309f642,
+0xa003f804,0xf804444b,0xf5a3a003,0xf64073c2,0x52e6122a,0x52e2332c,
+0x52e23302,0x52e23302,0x52e23302,0x52e23302,0x52e23302,0x52e23302,
+0x5327f504,0x122bf640,0xf642801a,0xf04f13c2,0x52e20207,0xf04f3302,
+0xf04f0204,0x52e20b02,0xf8243302,0x445ba003,0xb003f824,0xf6414b3c,
+0xf8c4023c,0xf6423d00,0x54e61385,0x53c8f504,0x50a33314,0x131af641,
+0x9016f884,0x9023f884,0x6d5bf884,0x6d55f884,0x6d56f884,0x6d57f884,
+0x6d58f884,0x6d59f884,0x6d5ef884,0x6da0f884,0x6d60f884,0x6d5af884,
+0x9d7df884,0xf50454e6,0x333053e8,0x52c2f504,0xf6416013,0xf8045336,
+0xf5049003,0x334c5304,0x0244f641,0xf24250a3,0xf8041352,0xf504b003,
+0x33685314,0x50a33204,0x3818f642,0x536ef242,0xa003f804,0x0508eb04,
+0xf8842364,0x463136fe,0xf884220b,0x61e6603e,0x903ff884,0x6d4af884,
+0x9d4bf884,0x6d50f8c4,0x6d4cf884,0x6708f8c4,0xf7f54628,0xf06ffe31,
+0xf8040322,0x332c3008,0xeb05706b,0x4909000b,0xf7f54652,0xf241fe45,
+0xf88573e4,0xf804b005,0x444b9003,0x9003f804,0x603cf884,0x8f70e8bd,
+0xb0e7a864,0x00016e89,0x4ff0e92d,0xb81df890,0x4605b0a3,0x0f00f1bb,
+0x4659d102,0xf904f7fc,0x073cf8d5,0xffb8f7fa,0x57b7f505,0x3848f8d5,
+0xf8d3883e,0xf4069008,0xf04f6340,0xf5b30800,0xf8956f40,0x9003acf4,
+0x8cf4f885,0x4630d110,0xf85cf001,0x88384604,0xf858f001,0x6430f444,
+0xbf8c280e,0x5080f44f,0x5000f44f,0xb2a64304,0x4628ac16,0xf7fc4649,
+0x4628fa89,0xf7fd4621,0xf8d5fcf1,0x237f1848,0x93004642,0x31744620,
+0xf8cd4643,0xf00a8004,0x4628f809,0xf7fc4621,0x4628fdb5,0x46424631,
+0xf86cf001,0x4628b920,0xf0012101,0x4606f88f,0x3848f8d5,0x0413f10d,
+0x46316818,0xfea0f002,0x46284622,0xf7ff4631,0xf8d5fba7,0x46213848,
+0x46326818,0xff0af002,0x3848f8d5,0x68184642,0x31fff04f,0xfa94f005,
+0x3848f8d5,0xacf4f885,0xf0026818,0x2201fde9,0x2310f243,0x46285ae9,
+0xf7fb4613,0xf243fe7d,0x5ae92312,0x23014642,0xf7fb4628,0x68a8fe75,
+0x7758f8d5,0xfc0af7f4,0x4204f240,0xf04f4628,0xf7fb31ff,0xf8d5fa79,
+0x46281810,0xfb34f7fc,0x31fff04f,0x1128f8c7,0x4a144628,0xfa6cf7fb,
+0xf5054c13,0xe00368e8,0xf7f8200a,0x3c0afc27,0x3128f8d7,0x0f01f013,
+0x2c09d101,0x4628d1f4,0x4140f44f,0xf8d72200,0xf8d53128,0xf7fb680c,
+0xf8d5fa53,0xb16c47d4,0x349ef8b6,0x0303ea44,0x47d0f8d5,0xf8a6b29b,
+0xe006349e,0x00020402,0x000f4249,0xf7fc4628,0xf8d5fac7,0x68a83388,
+0x0f02f013,0x46216a42,0x43a4f240,0xf444bf1c,0x43217400,0xd002429a,
+0x6f96f5b2,0xf8b5d11f,0x051b3384,0xf5b30d1b,0xdb187f00,0xf2446b02,
+0x429a3322,0x6b43d113,0xf8b6b98b,0xf444349e,0xb29b5480,0x5380f443,
+0x349ef8a6,0x349cf8b6,0xf4234321,0x041b5380,0xf8a60c1b,0x4622349c,
+0x68a82300,0xfc22f7f4,0x49b24640,0xfaa8f7fb,0x080cf8d5,0x26002406,
+0x3844f8d5,0x6b190232,0x4200f442,0xb2925d8b,0xb29b18e3,0xea443b01,
+0xb29b2303,0x2540f8a0,0x3520f8a0,0x2540f8a0,0x36015d8b,0x2e0618e3,
+0xd1e5b29c,0x780a784b,0xea424628,0x21982203,0xfcbcf7fb,0x3844f8d5,
+0x6b1b4628,0x78dc219a,0xea42789a,0xf7fb2204,0xf8d5fcb1,0x46283844,
+0x219c6b1b,0x791a795c,0x2204ea42,0xfca6f7fb,0x219e4628,0xf7fb2200,
+0x4633fca1,0x21984628,0x0282f10d,0xfe86f7fb,0x33012300,0xd1fc2b06,
+0x21804628,0xf7fb2208,0x4628fc91,0x220a215c,0xfc8cf7fb,0x7380f04f,
+0x3100f8c7,0xf44f4628,0x22002180,0xf9a4f7fb,0x3100f44f,0x4628460a,
+0xf99ef7fb,0x1386f642,0x46285aea,0xf7fb2174,0xf895fc75,0xf2423d40,
+0x21827210,0xbf182b00,0x62bcf44f,0xf7fb4628,0xf642fc69,0x5ce923bb,
+0x4628b111,0xfe3af7fb,0x4300f04f,0x3188f8c7,0x4302f103,0x318cf8c7,
+0x4380f44f,0xf8c72110,0xf5033128,0x460a4340,0x68a8627b,0xfbc2f7f4,
+0xf7f468a8,0xb283fa87,0x0824f8a5,0xf8a72100,0x462836a8,0xfa70f7fb,
+0x46042102,0xf7fb4628,0xea40fa6b,0xf8c54004,0x2156082c,0xf7fb4628,
+0xf241fa63,0x00404358,0xf8d550e8,0x2b003830,0x4628da07,0xf7fb21b2,
+0xf241fa57,0x0040435c,0x462850e8,0x88aa2116,0xfc20f7fb,0x21c04628,
+0x2830f8b5,0xfc1af7fb,0x21c24628,0x2832f8b5,0xfc14f7fb,0x46284b4a,
+0x3160f8c7,0x13c2f642,0x21445aeb,0x3164f8c7,0x24004b46,0x3160f8c7,
+0x13c4f642,0xf8c75aeb,0xf6423164,0x5aea13c6,0xfbfcf7fb,0x13c8f642,
+0x21464628,0xf7fb5aea,0x4628fbf5,0xfbb2f7fc,0x0384eb05,0x1dc8f8d3,
+0x4628b111,0xf986f7fb,0x2c043401,0xf505d1f4,0x46285142,0xf7fb3168,
+0x2200f969,0x73f0f241,0x461450ea,0x0384eb05,0x0778f8d3,0x6843b108,
+0x34014798,0xd1f52c06,0x0778f8d5,0x64e8f505,0x47986c43,0x0778f8d5,
+0x47986e03,0x1848f8d5,0x316c4628,0xfc10f7fb,0x46204923,0xf984f7fb,
+0x3848f8d5,0xf0076818,0xf642fbb7,0x5ae9330e,0xf7fb4628,0xf8d5fbc3,
+0x46283848,0x1130f8b3,0xf956f7fb,0x3848f8d5,0xf8b34628,0xf7fb1132,
+0xf642f95d,0x5ce923bb,0xf7fb4628,0x4628fd77,0xfcf4f7fb,0x3848f8d5,
+0x681b4628,0x881a2152,0xfb94f7fb,0x3848f8d5,0x681b4628,0x889a2150,
+0xfb8cf7fb,0xf7fc4628,0x7dabfd07,0xf895b973,0xb15b3023,0x7496f44f,
+0x46c0e00a,0x00017f28,0x00020006,0x00020007,0x00018ca8,0x74faf44f,
+0x3848f8d5,0x681b4a2e,0xf023691b,0x4293437f,0xf5b4d104,0xbf386f16,
+0x6416f44f,0x21944628,0xf7fb4622,0xf8d5fb63,0x23012848,0xf5057353,
+0xf04f605a,0x210033ff,0xf8a5220c,0x301a3db8,0xfb7af7f5,0x33fff04f,
+0x3dbcf8a5,0x3dc0f8a5,0x37c8f8d5,0xf0434628,0xf8c50304,0xf7fb37c8,
+0xf8d5fd47,0x9903073c,0xfd14f7fa,0xb13b6aab,0x62a92100,0x073cf8d5,
+0x32fff04f,0xfaf0f7fa,0x2100686b,0xf8852b09,0xd9041dc6,0x280cf8d5,
+0xf8c24b0c,0x7dab33dc,0x7c6bb11b,0xf8c5b10b,0xf1bb1ddc,0xd1030f00,
+0x21024628,0xfe40f7fb,0x3848f8d5,0xf0066818,0xb023fcaf,0x8ff0e8bd,
+0x00082050,0x00989680,0x43f0e92d,0xb0bd4606,0xf8d0460f,0xf7fa073c,
+0x4968fca3,0xf7f54638,0xf8d6f83b,0x49662454,0xf7f54638,0xf506f835,
+0x30186002,0xf7f5a934,0xf10df871,0x460408b0,0xf1064641,0xf7f5004c,
+0x4622f869,0x495d4603,0xf7f54638,0x68b3f821,0xf8b64641,0x6a5c0384,
+0xf838f7f5,0x46034958,0x46384622,0xf814f7f5,0x3384f8b6,0xd1042b01,
+0x49544638,0xf7f522ff,0x494ef80b,0xf7f54638,0x4951f807,0x2bf8f8d6,
+0x3ac0f8d6,0xf7f44638,0xf642ffff,0x5cf23309,0x46383301,0x56f3494b,
+0xfff6f7f4,0x655cf506,0xf04f3508,0x682b0900,0xd04f2b00,0x4638493f,
+0xffeaf7f4,0x21004b44,0x221f7f5b,0x0091f10d,0x3090f88d,0xfad0f7f5,
+0xf10d682b,0xf893080f,0xf1032024,0x46400125,0xfe8cf7fe,0xf8d6682b,
+0x68d9073c,0xfa4cf7fa,0x4601ac24,0x4620221f,0xf9fef7f5,0xf88d2300,
+0x493430af,0x4643464a,0xf7f44638,0x6829ffc1,0x794a4638,0x68c9790b,
+0x91009401,0xf7f4492e,0x682bffb7,0x10acf8d3,0x2094f8d3,0x3ffff1b1,
+0x4098f8d3,0xeb03d006,0xf8d30381,0xb10b30b0,0xe0007a1b,0x91002300,
+0x46389301,0x46234923,0xff9ef7f4,0x0901f109,0xf1b93504,0xd1a60f04,
+0x46384914,0xff94f7f4,0xf506a934,0xf7f4703d,0x491bffd1,0x46384602,
+0xff8af7f4,0x040ff10d,0x713ef506,0xf8963105,0x462022fc,0xfe36f7fe,
+0x49144638,0xf7f44622,0x7db3ff7b,0x4638b12b,0xf8d64911,0xf7f42ddc,
+0x2000ff73,0xe8bdb03d,0x46c083f0,0x0001a336,0x0001a42c,0x0001a437,
+0x0001a45b,0x0001a474,0x0001a487,0x0001a4a2,0x00016e70,0x0001a4ba,
+0x0001a4cf,0x0001a4ef,0x0001a51c,0x0001a532,0x0001a549,0x294bb500,
+0xe004f8dd,0xd0269a02,0x2921dc06,0x293dd01b,0x291fd015,0xe005d01c,
+0xd006298d,0xd01d29a2,0xd01d294c,0x0016f06f,0xf890e028,0xb90b3cf4,
+0xe0024618,0x3848f8d0,0x60106858,0xf642e01d,0x56c3330a,0xf642e002,
+0x5ac313c4,0xe0146013,0x13c2f642,0xf241e7f9,0xe7f663dc,0xe7f57c43,
+0x32fff10e,0x73fef64f,0xd902429a,0x001cf06f,0xf241e004,0xf82063dc,
+0x2000e003,0x46c0bd00,0x47f3e92d,0x2d40460d,0x46044616,0x990a461f,
+0x902cf8dd,0x8030f8dd,0xa038f8dd,0x280cf8d0,0x80ccf000,0x2d20dc11,
+0x8115f000,0x2d1ddc04,0x2d1ed024,0xe019d044,0xf0002d3e,0xf3008081,
+0x2d2280a1,0x80f5f000,0x2d8ee010,0xdc05d034,0xd00e2d62,0xf0002d7f,
+0xe00780c3,0xd0672da3,0xf5a5db04,0x2b017389,0x8102f240,0x0516f06f,
+0x4631e13b,0xf7fa461a,0xe01ffe45,0x3848f8d0,0xf0026818,0xb2c0faab,
+0xf8946030,0xb1133024,0x3324f894,0xf504e002,0x781b53b7,0xf8d42500,
+0x607307f8,0x788360b5,0xf0002b00,0xf00980d2,0xb2c0fcf1,0xe11860b0,
+0xfc7ef7fa,0xe1144605,0xbfcc290e,0x5280f44f,0x5200f44f,0xd90229e0,
+0x0512f06f,0xf441e109,0xea426330,0xb29d0303,0x22014629,0xfc36f000,
+0xf06fb910,0xe0fc0513,0x53b7f504,0x7c63801d,0xf0002b00,0xf89480aa,
+0x2e006024,0x80a5f040,0x3848f8d4,0xf0026818,0x42a8fa65,0x809df000,
+0xf7fb4620,0x4629fc21,0xf7fe4620,0x4620ffdd,0xfb46f7fb,0xe0dc4635,
+0xf8802301,0xf8803d0a,0xf7fb3d06,0xe088fc03,0x2b041c4b,0x80ccf200,
+0xf013e8df,0x00060005,0x00ca0006,0x21030005,0x330af642,0x7c6354e1,
+0xd0762b00,0xf7fb4620,0x4620fbfb,0xf954f7fb,0x0370f243,0x58e14620,
+0xfae2f7fb,0xf7fb4620,0xe066fb1b,0xb9287c40,0x3309f642,0xf8c95ce3,
+0xe7933000,0x3848f8d4,0x0107f10d,0xf0026818,0xb120fac3,0x3007f89d,
+0x3000f8c9,0xf642e051,0x5ce33309,0xf8c94605,0xe0963000,0x2b041c4b,
+0x808ef200,0x3ffff1b1,0x2103bf08,0xf642b2c9,0x54c13309,0x3848f8d0,
+0xf0046818,0xe038fd6b,0x0f00f1b8,0x2b0cd07f,0xf898d117,0xf1083004,
+0xf0130104,0xd1760501,0xf898f00a,0xf241b138,0x58e24354,0x71132301,
+0x5000f8c8,0xf89ae06d,0xb1400006,0x051df06f,0x2b04e067,0xf89ad163,
+0x28000006,0xf642d15f,0x58e313cc,0x3000f8c8,0x1e4be744,0xd8532bfe,
+0x10c4f642,0x3844f8d4,0x7a1b5221,0x4b2ab12b,0x3160f8c2,0xf8c2b28b,
+0x25003164,0x1e4be049,0xd8412bfe,0x10c2f642,0x3844f8d4,0x7a1b5221,
+0xd0f22b00,0xe7eb4b21,0x0f01f017,0xf8d0d137,0xf7fa073c,0x4681fa75,
+0xf7f368a0,0x4680fe77,0x68a0b918,0xf7f32101,0x68a0ff6b,0xff28f7f9,
+0xf06fb910,0xe012051d,0x1313f240,0xd107429d,0x21012302,0xfb974632,
+0xf7f9f3f3,0xe005fdf9,0x46312202,0xf2f2fb97,0xfc70f7f9,0xf1b84605,
+0xd1030f00,0x464168a0,0xff4af7f3,0x073cf8d4,0xf7fa4649,0xe004fa3f,
+0x051cf06f,0xf06fe001,0x46280501,0x87fce8bd,0x00020007,0x00020006,
+0x41f0e92d,0x4614b088,0x46059a0e,0x461e4688,0xf8d0b91a,0xf1033dc8,
+0x68130208,0xbf0c2b01,0xf8d56897,0xb13c7dc8,0xd9052e03,0x4621a807,
+0xf7f52204,0xe001f889,0x93072300,0x46289b07,0x6cab9300,0x93034641,
+0x46334622,0x94029401,0xf7ff9704,0xf110fe59,0xd1080f17,0x46289b07,
+0x46419300,0x46334622,0xf7ff9401,0xb008fe0b,0x81f0e8bd,0x4ff0e92d,
+0x6805b08f,0xf8dd9f1a,0x2300806c,0xf002930d,0x93000301,0x46284614,
+0x4643463a,0xa060f8dd,0x9064f8dd,0xfc44f7fe,0x28004606,0x81ecf040,
+0x0f03f1b9,0xa80dd904,0x22044651,0xf848f7f5,0x2c169a0d,0x81d5f200,
+0xf014e8df,0x0041003e,0x00490044,0x01d30058,0x01d30050,0x01d3005c,
+0x01d30033,0x00260023,0x01d30074,0x01d30067,0x009501d3,0x01d30110,
+0xac050017,0x46394620,0xf7f44642,0xf8d5fd0f,0x4621073c,0xf974f7fa,
+0xf895e1ba,0xe0333d09,0xbf181e14,0xb12c2401,0xf7fa4628,0x2800fab9,
+0x81a3f000,0x4d09f885,0xac05e1aa,0x46394620,0xf7f44642,0x4628fcf3,
+0xf7ff4621,0xe00ffcad,0x3bf8f8d5,0x4628e004,0xe0062101,0x3ac0f8d5,
+0x037ff003,0x4628e010,0x23002102,0xff7cf7fb,0xe18d4606,0x21404638,
+0xf8d54a92,0xf7f53708,0xe185f835,0x3708f8d5,0xe181603b,0xf7fa4628,
+0x4638fdfd,0x7168f505,0x7225f44f,0xffdcf7f4,0x68a8e176,0xfd52f7f3,
+0xd0052801,0xd0032802,0xf04fb110,0xe16b36ff,0xe1696038,0xf7f368a8,
+0x4604fd65,0x68a8b918,0xf7f32101,0x68a8fe59,0xfe16f7f9,0xf06fb910,
+0xe008061d,0x463a990d,0xf7f94643,0x2800fbff,0xf06fbfd8,0x2c00060d,
+0x814ef040,0x462168a8,0xfe42f7f3,0xa809e148,0x220c4639,0xffa8f7f4,
+0x2b009b09,0x8138f040,0xf011990a,0xf0400f01,0x980b8133,0x0f01f010,
+0x812ef040,0xf0402900,0xf1a8812b,0x4283030c,0x8129f2c0,0xf8e4f7f7,
+0x28004680,0x8126f000,0x010cf107,0xf7f49a0b,0x68a8ff87,0xfcfef7f3,
+0x46042801,0x2802d02b,0xf06fd002,0xe045061d,0x073cf8d5,0xf90cf7fa,
+0x68a84607,0xfd0ef7f3,0xb9184604,0x210168a8,0xfe02f7f3,0xf7f968a8,
+0xb910fdbf,0x061df06f,0x9b0be006,0x46422101,0xf7f940cb,0x4606fc95,
+0x68a8b91c,0xf7f34621,0xf8d5fdef,0x4639073c,0xf8e4f7fa,0x68a8e01e,
+0xfce2f7f3,0xb9184607,0x462168a8,0xfcd0f7f3,0x68a89b0a,0x9b0b9300,
+0x8008f8cd,0x68419301,0x280cf8d5,0xf7f46cab,0x2800ffa7,0xf04fbf18,
+0xb91f36ff,0x463968a8,0xfcbaf7f3,0x9a0b6ca8,0xe0bf4641,0x0f0bf1b9,
+0x80c5f240,0x0f0bf1b8,0x80c1f240,0x4651a809,0xf7f4220c,0x9b09ff25,
+0xf0402b00,0x9b0a80b5,0xf0402b00,0x9b0b80b1,0x0401f013,0x80acf040,
+0x7f00f5b3,0x80a8f200,0x7000f44f,0xf7f74621,0x4681f863,0xf0002800,
+0x462180a5,0x7200f44f,0xfee6f7f4,0xf7f368a8,0x2801fc7d,0x0a0cf1a8,
+0x2802d002,0xe074d034,0x90099b0b,0xb913940a,0x7300f503,0x3301e002,
+0x0301f023,0x930b459a,0xf06fda02,0xe06a060d,0xf7f368a8,0x4604fc79,
+0x68a8b918,0xf7f32101,0x9b0bfc67,0x220068a8,0x93019200,0x9008f8cd,
+0x68419203,0x280cf8d5,0xf7f46cab,0x2800ff2b,0xf04fbf18,0x2c0036ff,
+0x68a8d14d,0xf7f34621,0xe048fc4f,0x0001701e,0xf8d59009,0x940a073c,
+0xf856f7fa,0x68a84683,0xfc58f7f3,0xb9184680,0x210168a8,0xfd4cf7f3,
+0xf7f968a8,0x4604fd09,0xf7f9b1d8,0x0840fa1f,0x464a900c,0x4620ab0c,
+0xf7f92101,0x9b0cfa89,0x005b9a0b,0xf110930c,0xbf180f1e,0xb1124606,
+0xf0231c53,0x459a0301,0xda05930b,0x060df06f,0x900be002,0x061df06f,
+0x0f00f1b8,0x68a8d103,0xf7f34641,0xf8d5fd21,0x4659073c,0xf816f7fa,
+0x2300e005,0x930a9309,0xf06f930b,0xa909061d,0x4638220c,0xfe7cf7f4,
+0x9a0b4649,0x000cf107,0xfe76f7f4,0x46496ca8,0x7200f44f,0xf9a0f7f7,
+0xf06fe00a,0xe0070616,0x0601f06f,0xf06fe004,0xe001060d,0x061af06f,
+0xb00f4630,0x8ff0e8bd,0x18432100,0x2dc8f8d3,0xf8d2b12a,0xb93b3094,
+0x309df892,0x3104b923,0xd1f22910,0xe0002000,0x47702001,0x790bb510,
+0xb143460c,0xb1316cc9,0xf44f6c80,0xf7f77200,0x2300f973,0x200064e3,
+0x46c0bd10,0x41f0e92d,0x460f4680,0x25004616,0x0305eb08,0x4dc8f8d3,
+0xb116b154,0x01d4f104,0xf104e001,0x463801da,0xf7f42206,0xb118fd35,
+0x2d103504,0x2400d1ec,0xe8bd4620,0x46c081f0,0x4615b570,0xe0114604,
+0x421d6863,0xf413d00d,0xbf167f80,0x46084608,0x7a627a21,0x21ddbf08,
+0x030af104,0xfb62f7fb,0x68244601,0xd1eb2c00,0xbd704608,0x41f0e92d,
+0x0482eb01,0x460e6d27,0xb10f4615,0xe01a2000,0x719cf44f,0xf101fb02,
+0x6128f501,0x31041841,0xfe1cf009,0xb9106520,0x001af06f,0x2301e00b,
+0x61467603,0x49056d20,0x22063019,0xfde4f7f4,0x46386d23,0xe8bd629d,
+0x46c081f0,0x0001a9c4,0xf44fb570,0x460c7294,0x46084605,0xf7f42100,
+0x2201fdb3,0x33fff04f,0x30acf8c4,0xf8c4189b,0xf8843094,0xf8a4309d,
+0xf8d4309e,0x60a230e4,0x0303f003,0x0360f043,0x60256124,0x209cf884,
+0x30e4f8c4,0x46c0bd70,0x46c04770,0x47702001,0x46c04770,0x7340f400,
+0x7f40f5b3,0xb2c0d101,0xf5b3e00d,0xb2c07f00,0x28ddd103,0x1c83d803,
+0x2802e004,0x2000d801,0x1e83e001,0x4770b2d8,0x4370f401,0x5f80f5b3,
+0xf5b3d002,0xd10b5f00,0x6340f401,0x6f00f5b3,0xf401d106,0xf5b37340,
+0xbf187040,0xe0002001,0x47702001,0xb5102901,0xdd024602,0xf8c02300,
+0xf8d232d0,0x480212d0,0xfd9af7f4,0x46c0bd10,0x0001aa68,0x4605b570,
+0xf7ff460c,0xb138ffd5,0x6829480a,0x46234a0a,0xfd8af7f4,0xe00c2000,
+0x4370f404,0xf5b3b2e2,0xbf145f80,0x23012300,0xbf8c2a0e,0xf0834618,
+0xbd700001,0x0001abde,0x0001ae37,0x504cf500,0x6800b510,0xfde6f000,
+0x46c0bd10,0x3848f8d0,0x6818b510,0xf0016859,0xbd10fe19,0x0ffff011,
+0xd103b510,0xf7ff2101,0xe004fff1,0x3848f8d0,0xf0016818,0xbd10fe07,
+0x6800b510,0xfbacf7fe,0x46c0bd10,0x6805b570,0xf7fe4628,0xf642fc71,
+0x5aeb13b0,0xb9734606,0x46282101,0xffd6f7ff,0x46284604,0xffb0f7fa,
+0x46214628,0xfb6cf7fe,0xf7fa4628,0x2300fed5,0x7274f241,0x463050ab,
+0x7370f241,0x02fff04f,0xbd7052ea,0x6804b570,0xf8d44606,0x3301370c,
+0x370cf8c4,0x3710f8d4,0x4620b11b,0xf95cf7fb,0xf894e033,0xb1c33024,
+0x3844f8d4,0xf44f4620,0xf8d3719d,0xf7fa50dc,0x42a8fadb,0xf5c5bf36,
+0xebc53380,0x181a0200,0x32d0f8d6,0xf8c6189b,0xf8d432d0,0xf8c33844,
+0xf89600dc,0xb11b3230,0x21014630,0xfa1cf000,0x0778f8d4,0x646ef504,
+0x47986e03,0x25003408,0xb1136823,0x0c04f854,0x35014798,0x2d163434,
+0xbd70d1f6,0xf000b510,0xbd10fa07,0x47f0e92d,0x6804b0e2,0x91b0f8dd,
+0x23009e6d,0xf0029361,0x93000301,0x46154680,0x464a4620,0xf7fe4633,
+0x4682f8a3,0x4985b128,0x4885462a,0xfcccf7f4,0x9b6be100,0xd9042b03,
+0x996aa861,0xf7f42204,0x1eabfca3,0x2b0f9961,0x80edf200,0xf013e8df,
+0x00f20010,0x00eb0014,0x009d00eb,0x00a300eb,0x00ac00a8,0x00bf00eb,
+0x00c800eb,0x00e800eb,0xf8c94b74,0xe0dd3000,0x7f9cf5b6,0x7000f8d8,
+0x4871d209,0x46324971,0x739cf44f,0xfc9cf7f4,0x0a0df06f,0xae02e0ce,
+0xf44f2100,0x4630729c,0xfc52f7f4,0x21004b6a,0x23056033,0xf04f7633,
+0x83b303a0,0x76b32320,0x25022301,0xab5e76f3,0x83f17675,0xaa609300,
+0xf8d7ab5f,0xac500a84,0xf0019150,0xf507fee7,0x4620612e,0xf0083118,
+0x9b60ff2b,0x0a84f8d7,0x9b5f6233,0x02b8f106,0x9b5e6273,0xf8d762b3,
+0xf0021a88,0xf8d7f8c1,0x9a503a84,0x1d218a1b,0xa8046072,0xf7f4932e,
+0x2304fc3b,0xf886220a,0xf8863049,0x330c304a,0x2048f886,0x504bf886,
+0x304ef886,0x304ff886,0x32c4f8d8,0x204cf8a6,0xbf0c42ab,0x4b464b45,
+0x6473a91f,0x4638223c,0xf880f7fa,0xad024b43,0x4b43681a,0x681b992a,
+0xea43ac5a,0x48414302,0x2080f8d5,0xf7f49328,0x2240fc2f,0xf1054620,
+0xf7f401f8,0xf8d7f8f3,0x4621073c,0xfd58f7f9,0x46294648,0x729cf44f,
+0xf8d4e01e,0xf7f9073c,0x4682fd77,0xf8d4e04e,0xf7f9073c,0xe049fd5f,
+0xf1044648,0xe00e014c,0xb1137c63,0x0a04f06f,0x4649e040,0x004cf104,
+0xf7f42206,0xf8d4fbe5,0x46490dc8,0x220630da,0xfbdef7f4,0x0089e032,
+0x534cf504,0x68189161,0xf000b249,0xe029fd63,0x4000f8d8,0x5000f899,
+0x37f8f8d4,0xbf942d0e,0x5600f44f,0x5680f44f,0xb123789b,0x481b491a,
+0xfbe2f7f4,0x4620e016,0xfe4ef7fa,0x6130f445,0x43314620,0xfa08f7fe,
+0xf7fa4620,0xe009fd71,0x1218f8c8,0x4812e006,0x462a4904,0xfbccf7f4,
+0x0a16f06f,0xb0624650,0x87f0e8bd,0x0001ae4a,0x0001ad14,0x00012345,
+0x0001ad2d,0x0001a9df,0xdeadbeef,0x004480f1,0x004080f1,0x00018dc8,
+0x00017f24,0x0001ad5f,0x0001a9ca,0x0001ad89,0x0001adc4,0xb5106842,
+0x46196c90,0xf7f62200,0xbd10fe93,0xb5106843,0x69496c98,0xf7f62200,
+0xbd10fe8b,0x69ccb57f,0xf414460d,0xf89d4f00,0xd0096028,0x4400f424,
+0x9c0861cc,0x94009602,0x94019c09,0xf92af000,0x46c0bd7f,0x43f0e92d,
+0x9f0eb087,0x460c4681,0x46984615,0xb91f6806,0x3dc8f8d6,0x0708f103,
+0xf1b8b145,0xd9050f03,0x4629a804,0xf7f42204,0xe001fb4f,0x93042300,
+0x9a042c03,0xdc04d022,0xd0112c01,0xb164dc15,0x2c0ee051,0xdc02d00e,
+0xd01b2c0c,0xf5a4e04b,0x2b017383,0x2300d847,0x4b31e021,0xe00b602b,
+0xe058602c,0x602b6833,0x7c74e055,0xd1522c00,0x073cf8d6,0xfca4f7f9,
+0xe04d4620,0xf7ff4648,0xe048fdeb,0xf7fc4630,0xf44ffa2f,0xf00073fa,
+0xfb00007f,0xfbb0f003,0x6028f0f3,0x4543e03b,0xf06fd102,0xe02f000d,
+0x33015d5a,0xd1f62a00,0x7f83f5b4,0x0403eb05,0x0308ebc3,0x9202d108,
+0x46294630,0x95004622,0x8004f8cd,0xe0079703,0x23019301,0x94009302,
+0x46309703,0x46134629,0xff90f7fd,0x3a00e00f,0x2201bf18,0x3848f8d6,
+0xf10d9200,0x92020217,0x68189501,0x46424621,0xf006462b,0xb138f815,
+0x0325f100,0xd8022b25,0x0708f8c6,0x2000e000,0xe8bdb007,0x46c083f0,
+0x14e46c77,0x8a934602,0x1a406900,0x611018c9,0x47708291,0x8a934602,
+0x1a5b6900,0x61101840,0x47708293,0x47708281,0x41f0e92d,0xf8d04607,
+0x28000224,0xb9f1d077,0xf8d3683b,0xf9b11844,0xf9b12024,0x189b3026,
+0x2028f9b1,0xf9b1189b,0x42d3202a,0xf8d7d00f,0xf5c03218,0x2b0162e1,
+0x2318bf14,0x429a2398,0xf8d7dd05,0xf8d72228,0x429a322c,0x687bd357,
+0x7144f240,0xf7f66c98,0x4606fdb9,0x2301b940,0x3230f887,0x3231f897,
+0xf8873301,0xe0463231,0x21802500,0x5230f887,0xffb8f7ff,0xf04f6934,
+0x78230801,0xf3682204,0xb2db0303,0x1307f362,0xf8d77023,0x18a03224,
+0xb29b189b,0x0a1b70a3,0xf8d770e3,0xf8d72224,0xf7f41220,0x78a3fa69,
+0x463078e1,0x2101ea43,0xffa0f7ff,0xf8d74629,0xf8d72224,0xf7f40220,
+0xf8d7fa3b,0xf8d71228,0xf8c722c0,0xf8525224,0x44433021,0x3021f842,
+0xf8c7683b,0xf8d35228,0x4629073c,0x46324643,0xfb2cf7f9,0xf8d3683b,
+0x6e030778,0x20004798,0x81f0e8bd,0x4ff8e92d,0xf890469b,0x46063230,
+0x46174689,0x8028f8dd,0xa030f89d,0x2101b113,0xff6ef7ff,0x3224f8d6,
+0x2220f8d6,0x0418f103,0xf8d6189d,0xf8c63218,0x2b014224,0xb167d112,
+0x46391914,0x46202210,0xfa1af7f4,0x0010f104,0x1010f8d9,0xf7f4226e,
+0xf8d6fa13,0x33803224,0x3224f8c6,0xf1bab117,0xd0020f00,0x23012200,
+0x990be012,0xb9116832,0x13c2f642,0xf642e007,0x5ad313c2,0x4299990b,
+0xf642d004,0x5ad313c4,0xd1064598,0x23072200,0x716a712b,0x71ea71aa,
+0xf1bbe00a,0xd1020f14,0x23082200,0x2300e7f4,0x716b712b,0x71eb71ab,
+0x011cf109,0x702b7e0b,0x706b7e4b,0x70ab7e8b,0x70eb7ecb,0x0f00f1b8,
+0xf108d003,0x752b33ff,0xf885e001,0x23008014,0x736b732b,0x73eb73ab,
+0x746b742b,0x74eb74ab,0x3016f8b9,0xf0034a10,0x5cd30307,0x9a0b756b,
+0xb112694b,0x0f02f1b8,0xf1b8e001,0xbfcc0f03,0x0c1ab29a,0x726b0a13,
+0x72ab2300,0x722a0e13,0xf8d672eb,0x46303228,0xf8c63301,0x21003228,
+0xfee6f7ff,0x8ff8e8bd,0x0001af03,0x41f0e92d,0x8a884607,0x2803b086,
+0xf240460e,0x690c8123,0xf0037823,0x2d01050f,0x811cf040,0x78e378a2,
+0x2103ea42,0xf2004281,0x46308115,0xfec6f7ff,0x46302104,0xfebaf7ff,
+0x091b7823,0xd0472b02,0xf0002b03,0x2b0180a1,0x8104f040,0x21146934,
+0xf7ff4630,0x7862feab,0x68387823,0x2302ea43,0x498178a2,0x4302ea43,
+0xea4378e2,0x63736302,0x4b7e7c22,0x8af35c9a,0x0207f002,0x0307f023,
+0x69f3431a,0xf44382f2,0x61f34300,0x46334632,0xfd68f7f9,0xdb052800,
+0x46316838,0xf7fd2200,0xe0d5fbfb,0x46382400,0x46224631,0x94004623,
+0x94029401,0xff06f7ff,0x4631687b,0x46226c98,0xfc4ef7f6,0x46294638,
+0xfe7af7ff,0xe0c84620,0x46302104,0xf7ff6934,0x687bfe69,0x6c984631,
+0xf7f36935,0x2100fc6d,0x3101e000,0xd1014281,0xe0024601,0x2b005d4b,
+0x7862d1f7,0x31017823,0x2302ea43,0xea4378a2,0x78e24302,0x0400ebc1,
+0x6302ea43,0x7f83f5b3,0x0201eb05,0xf5a3d109,0x93027383,0x95009303,
+0x68389001,0x46234629,0x9200e008,0x22002301,0x94019302,0x68389203,
+0x46134629,0xfd9af7fd,0x46042104,0xf7ff4630,0x6932fe25,0x2307f3c4,
+0xf3c47053,0x70934307,0x70d30e23,0x21047014,0xf7ff4630,0x6934fe17,
+0x46202204,0xf7f42100,0x7823f8c3,0xf3652501,0xb2db0303,0xe04f2205,
+0x46302104,0x5017f88d,0xf7ff6934,0x687bfe0b,0x6c984631,0xf7f36935,
+0x4680fc0f,0xa804b12d,0x22044629,0xf8c8f7f4,0x9504e000,0x7821683b,
+0x0848f8d3,0x78e27863,0x2103ea41,0x950178a3,0x4103ea41,0xea419b04,
+0x3b006102,0x2301bf18,0xf10d9300,0x93020317,0x462b4642,0xf0056800,
+0x2104fddf,0x46304604,0xfdd4f7ff,0xf3c46932,0x70142307,0xf3c47053,
+0x0e244307,0x70d47093,0x46302104,0xfdc6f7ff,0x22046934,0x21004620,
+0xf872f7f4,0x25017823,0x0303f365,0x2208b2db,0x1307f362,0x687b7023,
+0x6c984631,0xfbc4f7f3,0x70a0b280,0x70e00a00,0x2100683b,0x073cf8d3,
+0x462b4632,0xf95ef7f9,0xe0062000,0x4631687b,0x22006c98,0xfb80f7f6,
+0xb0062001,0x81f0e8bd,0x0000d9a5,0x0001aefe,0xf243b530,0x58c403a0,
+0xb08569d3,0x4f00f413,0xd0194611,0x46202500,0x462b462a,0x95019500,
+0xf7ff9502,0x6863fe17,0x7144f240,0xf7f66c98,0x4601fb75,0x6863b140,
+0x6c98462a,0xfb58f7f6,0x21014620,0xfd84f7ff,0xbd30b005,0xb5102901,
+0xdd086804,0x68502100,0xf7f3460a,0x2806fc4f,0xf8a4bfd8,0xf8b406fc,
+0x480216fc,0xf850f7f4,0x46c0bd10,0x0001ae72,0xb5702901,0xdc014605,
+0xe0112400,0x02c0f8d0,0x22802100,0xf800f7f4,0xf8852300,0xe0153231,
+0xdd052c03,0x0f03f014,0x4810d102,0xf834f7f4,0x32c0f8d5,0xf8534621,
+0x480d2024,0xf7f43401,0x2c20f82b,0x4809d1ec,0xf826f7f4,0x122cf8d5,
+0x2228f8d5,0xf7f44807,0xf895f81f,0xf8951231,0x48052230,0xf818f7f4,
+0x46c0bd70,0x0001a336,0x0001ae86,0x0001ae90,0x0001aebe,0xb5102901,
+0xdd094604,0x68502100,0xf7f3460a,0x1e43fbfb,0xbf982b1e,0x022cf8c4,
+0x122cf8d4,0xf7f34801,0xbd10fffb,0x0001aee6,0x7943b510,0xb10b460c,
+0xe01eb2d8,0xb9097901,0xe01a2001,0xf8931903,0xf04fc01f,0xb9140e01,
+0x3024f890,0xf890e001,0x44633049,0xb25bb24a,0x0f43ebb2,0xfa5fdd02,
+0xe006f08e,0x0e01f10e,0xf1be3009,0xd1ea0f05,0xbd102004,0x468cb530,
+0x461d4614,0x0209f1a2,0xfb0c2309,0xf89d2303,0xb2db100c,0xb911181b,
+0x2024f893,0xf893e001,0x18432048,0xe01ff893,0x0f01f1bc,0x0302eb0e,
+0xd102b2da,0xfe82fa5f,0x1903e009,0xf893b911,0xe0013024,0x3048f893,
+0xfa5f4473,0xb939fe83,0xb9141940,0x006cf890,0xf890e005,0xe002007b,
+0xf8931943,0xf1bc008a,0xd0040f01,0x2b00b243,0x4610dc01,0x1813e008,
+0xb242b2d8,0xf38efa4f,0xbfc8429a,0xf08efa5f,0x46c0bd30,0x41f3e92d,
+0xf881fa5f,0x4170f401,0x5f00f5b1,0x2602bf14,0x79412600,0x46144607,
+0xb2cdb109,0x4631e003,0xff7ef7ff,0x46294605,0x46432200,0x46389600,
+0xff9cf7ff,0xf0000040,0x702000fe,0x70a07060,0x462970e0,0x46432201,
+0x46389600,0xff8ef7ff,0xf0000040,0x712000fe,0x46297160,0x46432202,
+0x46389600,0xff82f7ff,0xf0000040,0x71a000fe,0x462971e0,0x46432203,
+0x46389600,0xff76f7ff,0xf0000040,0x722000fe,0x96007260,0x46294638,
+0x46432204,0xff6af7ff,0xf0000040,0x72a000fe,0xe8bd72e0,0x46c081fc,
+0x460cb5f7,0xf4027941,0x46064370,0xf5b34617,0xbf145f00,0x25002502,
+0xb2cbb109,0x4629e003,0xff2af7ff,0xf0044603,0x2916017f,0xdc0cd020,
+0xd01d290b,0x2902dc04,0x2904d01a,0xe015d018,0xd017290c,0xd0152912,
+0x2930e010,0xdc04d016,0xd0112918,0xd00f2924,0x2960e008,0x296cd004,
+0x2948d002,0xe001d00a,0xe0082204,0xe00622ff,0xe0042200,0xe0022201,
+0xe0002202,0x46192203,0x46309500,0xf7ffb2fb,0xf340ff1d,0x00400006,
+0x46c0bdfe,0x4370f402,0x504cf500,0x5f80f5b3,0x468eb500,0xd11c6801,
+0xf102b2d2,0xb2db0348,0xd8012b0c,0xe0152001,0x0322f1a2,0x2b0eb2db,
+0x2002d801,0xf1a2e00e,0xb2db0334,0xd8012b0c,0xe0072003,0x0364f1a2,
+0x2b3db2db,0x2004d801,0x2000e000,0xf893180b,0x44700177,0xbd00b240,
+0x2904b570,0x6806b092,0x20ffd901,0x7141e020,0x3848f8d6,0x0503f10d,
+0xf0006818,0x462aff5b,0x46304601,0xfc60f7fd,0x3848f8d6,0x4620681c,
+0xff50f000,0x46024629,0xf0004620,0xf8d6ffbf,0xf04f3848,0x681831ff,
+0xf0032200,0x2000fb49,0xbd70b012,0x6805b570,0xf8d57101,0xb0923848,
+0xf0006818,0xf10dff37,0x46010603,0x46284632,0xfc3af7fd,0x3848f8d5,
+0x4620681c,0xff2af000,0x46024631,0xf0004620,0xf8d5ff99,0xf04f3848,
+0x681831ff,0xf0032200,0xb012fb23,0x46c0bd70,0x460eb573,0x24004615,
+0x2200e00c,0xf7f3a901,0x55a0fa59,0x1c629801,0xb90b7803,0xe0044610,
+0x46143001,0xd1f042ac,0xbd7c4628,0xf8a36c83,0xf8b313f6,0xb28003fa,
+0x46c04770,0xf8a36c83,0xf8a313f6,0x477023fa,0xf7ffb510,0xbd10fff7,
+0x2b066983,0x2901d103,0xf441bf18,0x46087100,0x46c04770,0x4604b510,
+0xfff2f7ff,0x46204601,0xffdcf7ff,0x46c0bd10,0x4604b570,0x4615460e,
+0xffe6f7ff,0x46204601,0xffd0f7ff,0xea004631,0x46200205,0xffd2f7ff,
+0x46c0bd70,0x4604b570,0x4615460e,0xffd4f7ff,0x46204601,0xffbef7ff,
+0x0205ea40,0x46204631,0xf7ffb292,0xbd70ffbf,0x41f0e92d,0x46064615,
+0x461c4688,0xffc0f7ff,0x46304601,0xffaaf7ff,0xea20402c,0x43220205,
+0x46414630,0xf7ffb292,0xe8bdffa9,0x46c081f0,0xf8a36c83,0xf8b313fc,
+0xb28003fe,0x46c04770,0xf8a36c83,0xf8a313fc,0x477023fe,0xf8a36c83,
+0xf8b313fc,0x400a13fe,0x23fef8a3,0x46c04770,0xf8a06c80,0xf8b013fc,
+0xb29b33fe,0xf8a0431a,0x477023fe,0x40136c80,0x13fcf8a0,0x13fef8b0,
+0xea21b289,0x430b0102,0x33fef8a0,0x46c04770,0x2100b500,0x32fff04f,
+0x4300f06f,0xf880468e,0xf8a01039,0xf8c02cde,0xf8a03664,0xf8a02660,
+0xf880226e,0xf8a02cdc,0xe00b2252,0xf04f3201,0x2a0933ff,0x3b01f801,
+0xf10ed1f8,0xf1be0e01,0xd0080f20,0xfb0e2309,0xf503f303,0x18c36396,
+0x22001c99,0xbd00e7ea,0x4604b510,0xf240b131,0xf64f413b,0xf7ff72f8,
+0xe00affa9,0x413cf240,0xf7ff2207,0x4620ffad,0x413bf240,0xf7ff2207,
+0xbd10ffa7,0xf8802301,0x47703037,0x47f0e92d,0x680d460c,0x6889469a,
+0x460668e3,0x2381ea43,0xb29a4611,0x8020f8bd,0xff82f7ff,0x46b92700,
+0x6923e01d,0xd10b2b20,0x2005f859,0x46514630,0xf7ff0c12,0xf839ff75,
+0x46302005,0xe0094641,0xd1042b10,0x2017f835,0x46414630,0x5d7ae002,
+0x46414630,0xff64f7ff,0xf1093701,0x68630904,0xd3de429f,0x87f0e8bd,
+0x4ff8e92d,0x680e460d,0x6889469b,0x460768eb,0x2381ea43,0xb29a4611,
+0x9028f8bd,0xff4cf7ff,0x0800f04f,0xe02546c2,0x2b20692b,0x4649d10f,
+0xf7ff4638,0x4659ff39,0xf84a4604,0x46380006,0xff32f7ff,0x4400ea44,
+0x4006f84a,0x2b10e00e,0x4638d106,0xf7ff4649,0xf826ff27,0xe0050018,
+0x46494638,0xff20f7ff,0x0006f808,0x0801f108,0x0a04f10a,0x4598686b,
+0xe8bdd3d6,0x46c08ff8,0x21feb510,0x22884604,0xfebaf7ff,0x21ff4620,
+0xf7ff2288,0x4620feb5,0x228821fc,0xfeb0f7ff,0x21fd4620,0xf7ff2288,
+0xbd10feab,0x43f0e92d,0x41dff240,0x4604b08b,0xfef6f7ff,0x2b7fb2c3,
+0x3fb8f8a4,0x2007f3c0,0xf5a3bfc4,0xf8a47380,0x287f3fb8,0xf5a0bfc8,
+0xf8a47380,0xbfc80fba,0x3fbaf8a4,0x93052311,0x080cf10d,0x2702332f,
+0x26209306,0x4357f240,0x0920f10d,0x4556f240,0x46414620,0x4255f240,
+0x900cf8cd,0x96079704,0xf7ff9500,0x9b08ff75,0xd9012b3f,0x93083b80,
+0xf8c49b08,0x9b093fbc,0xd9012b3f,0x93093b80,0xf2409b09,0xf8c44134,
+0x46203fc0,0xfeb4f7ff,0x287fb2c0,0xf5a0bfc4,0xb2987380,0x0fc4f884,
+0x4124f240,0xf7ff4620,0xf3c0fea7,0xf8a42007,0xf2400fc6,0x46204125,
+0xfe9ef7ff,0xb2c0230d,0x330f9305,0x0fc8f8a4,0x46209306,0x4357f240,
+0xf2404641,0xf8cd4255,0x9704900c,0x95009607,0xff36f7ff,0xf8c49b08,
+0x9b093fa8,0x3facf8c4,0xf8c44b04,0x4b043fb0,0x3fb4f8c4,0xe8bdb00b,
+0x46c083f0,0xf1e64d96,0xf1e60018,0x47f0e92d,0x463cf240,0x46044631,
+0xfe6ef7ff,0x483bf240,0x46414682,0xf7ff4620,0xf04afe67,0x46810201,
+0x46204631,0xf7ffb292,0xf049fe67,0x46200201,0xf64f4641,0xb29275fe,
+0xfe5ef7ff,0x46314620,0x0205ea0a,0xfe58f7ff,0x46414620,0x0205ea09,
+0xfe52f7ff,0x46314620,0xf7ff4652,0x4620fe4d,0x464a4641,0xfe48f7ff,
+0x87f0e8bd,0x4b61b570,0xe8934604,0x4b600003,0x681eb08a,0x2500aa08,
+0x0003e882,0xf240e00d,0x495c4356,0x23149300,0x1103fb02,0xf2404620,
+0xf2404255,0xf7ff4357,0xb2aafe99,0x42b23501,0x22ffd3ed,0x462023a2,
+0x4116f240,0xfe3af7ff,0x231422ff,0xf44f4620,0xf7ff6184,0x4620fe33,
+0x41fff240,0x427cf44f,0x53c0f44f,0xfe2af7ff,0x230b220f,0xf44f4620,
+0xf7ff6185,0x2207fe23,0x46132130,0xf7ff4620,0x2207fe1d,0x46202303,
+0x412ff240,0xfe16f7ff,0x22382320,0xf2404620,0xf7ff412f,0x6c63fe0f,
+0x6a5b689b,0x639ef5a3,0x2b013b0d,0x4b38d85c,0x681e2500,0xf240e00d,
+0x49364356,0x23149300,0x1103fb02,0xf2404620,0xf2404255,0xf7ff4357,
+0xb2aafe49,0x42b23501,0x2208d3ed,0x46204613,0x41def240,0xfdeaf7ff,
+0xf2404620,0x227f41e1,0x3020f8bd,0xfde2f7ff,0x46209b09,0xf240021b,
+0xf44f41e1,0xf40342fe,0xf7ff437f,0xab08fdd7,0x23029303,0x330f9304,
+0x33319305,0x23209306,0xf2409307,0x93004356,0xa9034620,0x4255f240,
+0xf7ff3301,0x4620fe17,0x6184f44f,0x427ff44f,0x5390f44f,0xfdbaf7ff,
+0xf2404620,0xf44f4124,0xf44f427f,0xf7ff5300,0x4620fdb1,0x514bf240,
+0x3233f246,0xfd90f7ff,0x22444620,0x414af240,0xfd9af7ff,0xf2404620,
+0x2280414a,0xfd84f7ff,0xbd70b00a,0x0001b4e8,0x00019858,0x0001981c,
+0x00019dcc,0x00019b64,0x2900b570,0x2380bf14,0x1e0c2300,0x2401bf18,
+0xf44f2280,0x46056196,0xfd84f7ff,0x01a403a3,0xf44f4628,0xf44f6196,
+0xf4034280,0xb2a44340,0xfd78f7ff,0xf2404628,0x2240413b,0xf7ff4623,
+0xbd70fd71,0xf240b510,0xf7ff41fb,0xf3c0fd49,0xbd102006,0x4370e92d,
+0x4605460c,0xfff2f7ff,0x88238862,0x79fff64f,0x2302ea43,0x464a4606,
+0xf2404628,0xb29b41b5,0xfd54f7ff,0x88a30236,0xf647b2b6,0x462878ff,
+0xea464642,0xf2400303,0xf7ff41fb,0x8862fd47,0x46288823,0x2302ea43,
+0x41fcf240,0xb29b464a,0xfd3cf7ff,0x464288a3,0x0303ea46,0xf2404628,
+0xf7ff41fd,0x88e6fd33,0x4439f240,0x46284621,0xfd0af7ff,0x437ff640,
+0x0303ea00,0x13c6ea43,0x46214628,0x72fff640,0xf7ffb29b,0x4628fd1f,
+0xf7ff2101,0xe8bdff89,0x46c08370,0xb089b500,0x0209ab08,0x1d02f823,
+0x23019302,0x3b019303,0x33579304,0x23109305,0xf2409306,0x93004356,
+0xf240a902,0x33014255,0xfd54f7ff,0xbd00b009,0xf8d36bc3,0xf0133830,
+0xd0085f00,0xf04f6c83,0xf8a30203,0xf04f26b4,0xf8a302ff,0x477026b8,
+0xf101fb00,0x01400252,0x2000fb03,0x4100f501,0x0040eb01,0xfb900049,
+0x4770f0f1,0xb089b500,0x031ef10d,0x23019302,0x3b019303,0x33579304,
+0x23109305,0xf2409306,0x93004356,0xf240a902,0x33014255,0xfd54f7ff,
+0x001ef8bd,0xb0090a00,0x46c0bd00,0x020cb570,0x4605b2a4,0xf2404623,
+0xf44f41fb,0xf7ff42fe,0x4628fcb9,0x41fdf240,0x42fef44f,0xf7ff4623,
+0xbd70fcb1,0x4370e92d,0x21fe460e,0x46904699,0xf7ff4605,0x21fefc3f,
+0x46284604,0xfc3af7ff,0x040ff004,0x1003f3c0,0x70341a24,0x462821ff,
+0xfc30f7ff,0x460421ff,0xf7ff4628,0xf004fc2b,0xf3c0040f,0x1a241003,
+0x4000f888,0x462821fc,0xfc20f7ff,0x460421fc,0xf7ff4628,0xf004fc1b,
+0xf3c0040f,0x1a241003,0x4000f889,0x462821fd,0xfc10f7ff,0x460421fd,
+0xf7ff4628,0xf004fc0b,0xf3c0040f,0x9b061003,0x701c1a24,0x8370e8bd,
+0x460db570,0x4139f240,0xf7ff4606,0xf3c0fc41,0x80e810c2,0x41b5f240,
+0xf7ff4630,0xf240fc39,0x460441fb,0xf7ff4630,0xf004fc33,0xb2c003ff,
+0x2407f3c4,0x806c802b,0xbd7080a8,0x2300b500,0x9307b08b,0x93093310,
+0x030ef10d,0x23019305,0x33549306,0xf2409308,0xf8ad4356,0x9300100e,
+0xf240a905,0x33014255,0xfc88f7ff,0xbd00b00b,0xbf142900,0x23002302,
+0x2a00b510,0xf043bf18,0x46040301,0xf2402203,0xf7ff414d,0x4620fc23,
+0x414cf240,0xf7ff2203,0xbd10fc13,0x2940b530,0x4605b089,0xf240d105,
+0x2200414e,0xfbf8f7ff,0x2310e02a,0xf10d9306,0x9302031e,0x93032301,
+0x4356f240,0x9105240f,0xa9029300,0xf2403301,0x94044255,0xfc88f7ff,
+0xf2404628,0x22ff414e,0xfbdef7ff,0x301ef8bd,0xf2404628,0x4622414f,
+0xf7ff4023,0xf8bdfbef,0x22f0301e,0xf2404628,0x4013414f,0xfbe6f7ff,
+0xbd30b009,0xf240b510,0xf64f414c,0xf7ff72fc,0xbd10fbc9,0x460cb570,
+0x22074605,0xf2404623,0xf7ff41ea,0x4628fbd3,0x41ebf240,0x46232207,
+0xfbccf7ff,0x46c0bd70,0xb5702280,0x46044613,0xf240460e,0xf24061d1,
+0xf7ff65d7,0x4620fbbf,0xf44f2207,0xf7ff61da,0x4620fb9f,0x22014629,
+0xf7ff2300,0x2202fbb3,0x46294620,0xf7ff4613,0x2204fbad,0x46294620,
+0xf7ff4613,0x4620fba7,0x22084629,0xf7ff2300,0x4620fba1,0x22104629,
+0xf7ff2300,0x4620fb9b,0x22204629,0xf7ff2300,0x4620fb95,0x22404629,
+0xf7ff2300,0x4620fb8f,0x22804629,0x23003506,0xfb88f7ff,0x46294620,
+0x46332201,0xfb82f7ff,0x46200073,0x22024629,0xf7ff3d01,0x2201fb7b,
+0x46294620,0xf7ff2300,0x2202fb75,0x46294620,0xf7ff4613,0x2204fb6f,
+0x46294620,0xf5a54613,0xf7ff75ec,0x3d01fb67,0x7200f44f,0x46294620,
+0xf7ff4613,0x4620fb5f,0xf44f4629,0x23007200,0xfb58f7ff,0xf7ff4620,
+0xbd70fcbd,0x2a3fb570,0x4614b088,0x9e0c461d,0x2900dc23,0x004adb21,
+0x00642318,0x3201b264,0x33089305,0xeb059307,0xb2550384,0xebc49303,
+0x33010305,0xf2409304,0x93004356,0x4255f240,0x3301a903,0xf7ff9406,
+0xb2a2fbbb,0x2301e003,0x18d354b3,0x42aab29a,0xb008ddf9,0x46c0bd70,
+0x47f0e92d,0xf2404688,0x460461b7,0xf7ff4691,0xf240fafb,0x460561b6,
+0xf7ff4620,0xf240faf5,0x460661b5,0xf7ff4620,0xf240faef,0x460761b4,
+0xf7ff4620,0xf04ffae9,0x46620c00,0xfa504664,0xf013f304,0xd0010101,
+0xe0032101,0x0301f10c,0xfc83fa5f,0xb2da1c53,0xd0122a10,0x29003401,
+0xe00ed0ed,0x0310f1a2,0xf303fa57,0x0f01f013,0x2101d001,0xf10ce003,
+0xfa5f0301,0x1c53fc83,0x2a1fb2da,0x2900d811,0xe00ed0ec,0x0320f1a2,
+0xf303fa56,0x0f01f013,0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,
+0x2a2fb2da,0x2900d811,0xe00ed0ec,0x0330f1a2,0xf303fa55,0x0f01f013,
+0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,0x2a3fb2da,0x2900d801,
+0xf04fd0ec,0x22000e3f,0xfa55240f,0xf013f304,0xd0010101,0xe0032101,
+0x33fff10e,0xfe83fa5f,0xb2da1c53,0xd0122a10,0x29003c01,0xe00ed0ed,
+0x031ff1c2,0xf303fa56,0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,
+0x1c53fe83,0x2a1fb2da,0x2900d811,0xe00ed0ec,0x032ff1c2,0xf303fa57,
+0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a2fb2da,
+0x2900d811,0xe00ed0ec,0x033ff1c2,0xf303fa50,0x0f01f013,0x2101d001,
+0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a3fb2da,0x2900d801,0xf888d0ec,
+0xf889e000,0xe8bdc000,0x46c087f0,0x2202b510,0x23004604,0x41e7f240,
+0xfa58f7ff,0x22204620,0x6189f44f,0xf7ff2300,0x4620fa51,0x61daf240,
+0x72eff64f,0xfa36f7ff,0x46c0bd10,0x460db570,0x41a4f240,0x46164604,
+0xfa1ef7ff,0x4f60f410,0x4620d019,0x41abf240,0xfa16f7ff,0x4f00f410,
+0x7028d011,0x41a4f240,0xf7ff4620,0xf400fa0d,0xf5b04060,0xd0014f60,
+0xe0012000,0x0169f894,0x181b782b,0x2300e001,0x7033702b,0x46c0bd70,
+0x46c04770,0x13c3f640,0xd8014298,0xe00b2000,0x43c8f241,0xd8014298,
+0xe0052001,0x6344f241,0xbf8c4298,0x20022003,0x46c04770,0x47702000,
+0x313cf890,0xb112600b,0x324cf890,0x20007013,0x46c04770,0xb5106c83,
+0x3120f8d3,0x46046c43,0x3710f8d3,0x0f01f013,0xb1a1d115,0x414cf240,
+0x02fff24e,0xf9d6f7ff,0xf44f4620,0xf24f6196,0xf7ff72f7,0x4620f9cf,
+0x41f9f240,0x72f7f64f,0xf9c8f7ff,0x4620e02f,0x414df240,0x32fff248,
+0xf9c0f7ff,0xf2404620,0xf44f414c,0xf7ff52f8,0x4620f9c3,0x41b7f240,
+0x02fff248,0xf9b2f7ff,0xf2404620,0xf64d41b1,0xf7ff72ff,0x4620f9ab,
+0x6196f44f,0x0208f640,0xf9aef7ff,0xf2404620,0xf64f41fa,0xf7ff72f7,
+0x4620f99d,0x41f9f240,0xf7ff2208,0xbd10f9a1,0xfbb0b500,0xfb01fef1,
+0xf001001e,0xeb0c0c01,0xe00b0151,0xbf284288,0x0300ebc1,0x0e4eea4f,
+0xeb0cbf26,0xf10e0043,0x00400e01,0xb2da1e53,0xd1ef2aff,0xbf284288,
+0x0e01f10e,0xbd004670,0x0030f990,0x46c04770,0x1030f880,0x46c04770,
+0x47708581,0x47708d80,0x46c04770,0xf890b510,0x468c4cdd,0x0e00f04f,
+0xf85e4b11,0x290e1003,0xf44fbf8c,0xf44f5380,0xf4415300,0x43136230,
+0xb11cb298,0xd9012994,0xd90a29a5,0x0f02f1bc,0x290ed102,0xe004d90b,
+0x0f01f1bc,0x290ed101,0xf10ed805,0xf5be0e14,0xd1dd7f8c,0xbd1020ff,
+0x0001b508,0xb510468c,0x23204619,0x0f0ef1bc,0x98024604,0xd8067013,
+0xbfac2800,0x1c231823,0x3088f893,0x237fe02d,0x700b2200,0x0020ea30,
+0x2004bf28,0x4b144696,0x3003f85e,0xd004459c,0x2a0e3201,0x0e14f10e,
+0xf8d4d1f5,0xb10b3d48,0xe0165c9b,0x030ef1a2,0xd8032b15,0xf8931823,
+0x700b30e2,0x0324f1a2,0xd8032b05,0xf8931823,0x700b310f,0x032af1a2,
+0xd8032b08,0xf8931823,0x700b30b5,0x46c0bd10,0x0001b508,0xf04fb500,
+0xeb000e00,0xf81e020e,0xf10e3001,0xf1be0e01,0xf8820f04,0xd1f431c9,
+0x0e00f04f,0x020eeb01,0x030eeb00,0xf10e7912,0xf1be0e01,0xf8830f08,
+0xd1f321cd,0x0e00f04f,0x020eeb01,0xb9037d13,0xf10e7913,0xf8800e01,
+0x300131d5,0x0f08f1be,0xbd00d1f2,0x20006c43,0x0025f883,0x46c04770,
+0x47702000,0x2300b122,0x3da8f8c0,0x3dacf8a0,0x1d50f8c0,0x47702001,
+0x3258f890,0x4696b510,0x2b006bc4,0xf013d036,0xd0160f01,0x3260f8d0,
+0xd10c428b,0x6a1a6943,0xf883189b,0x6942e015,0x2b076a13,0x2300d101,
+0x3301e000,0xf8906213,0xf0233258,0xf8800301,0xf8903258,0xf0133258,
+0xd00e0f02,0x2264f8d0,0xd104428a,0xf6421912,0xf80213d0,0xf890e003,
+0xf0233258,0xf8800302,0xf8903258,0xf0133258,0xbf1c0f04,0x0304f023,
+0x3258f880,0x46c0bd10,0xb5302902,0x46146bc3,0x5258f890,0x2903d008,
+0x2901d013,0xf045d117,0xf8c00301,0xe0102260,0xf64218d1,0xf06f13d0,
+0x54ca025b,0x3258f890,0x4264f8c0,0x0302f043,0xf8c0e003,0xf0452268,
+0xf8800304,0xb9253258,0xf8d36c43,0xf8c0370c,0xbd30325c,0xb5102100,
+0x025bf06f,0xf7ff460b,0xbd10ff8f,0x3375f649,0x2300604b,0xb5f0600b,
+0x4298460c,0x2101bfac,0x31fff04f,0x0334f503,0xf103fb01,0x0334f503,
+0xfb901808,0xfb02f2f3,0x1a580313,0x13c3d403,0x105b3301,0x4243e004,
+0x330113db,0x425b105b,0xbfd42b5a,0x23012300,0xf5a0b113,0xe0140034,
+0xdb032800,0x330113c3,0xe004105b,0x13db4243,0x105b3301,0xf113425b,
+0xbfac0f5a,0x23012300,0x2601b90b,0xf500e003,0xf04f0034,0xf04f36ff,
+0x46f40e00,0x45604675,0x68226861,0xdd0b4f14,0xf30efa41,0x6023189b,
+0xf30efa42,0x0301ebc3,0x59eb6063,0xe00b449c,0xf30efa41,0x0302ebc3,
+0xfa426023,0x185bf30e,0x59eb6063,0x0c0cebc3,0x0e01f10e,0xf1be3504,
+0xd1dc0f12,0xfb066863,0x6063f303,0xfb066823,0x6023f303,0x46c0bdf0,
+0x0001b3b0,0x46c04770,0x71e0ea80,0x71e0eba1,0xb2d02200,0xf300fa51,
+0x2b003201,0x4770dcf9,0x20004601,0x4686b500,0x4380f04f,0xf30efa43,
+0x428a181a,0x0050ea4f,0x1a89d802,0x0000ea43,0x0e02f10e,0x0f20f1be,
+0x4288d1ee,0x3001bf38,0x46c0bd00,0x46c04770,0x47f0e92d,0xf240460c,
+0x4605413b,0xf8dd461f,0xf7fe9020,0x2204ff91,0xf2404613,0x4680413b,
+0xf7fe4628,0x4628ffab,0x413cf240,0x23002204,0xffa4f7fe,0x7200f44f,
+0x46284613,0x5103f240,0xff9cf7fe,0xf2404628,0xf44f5103,0x23007200,
+0xff94f7fe,0x4628b2a3,0x5105f240,0x72fff64f,0xff8cf7fe,0xf2404628,
+0xf64f5104,0x236472ff,0xff84f7fe,0x46282220,0x5103f240,0xf7fe4613,
+0x2400ff7d,0xf7f52001,0x4628fbc9,0x5103f240,0xff52f7fe,0x0f20f010,
+0x2600bf14,0x34012601,0x7f7af5b4,0x2e00d002,0xe000d0ec,0xf240b30e,
+0x46285106,0xff40f7fe,0x5107f240,0x46284604,0xff3af7fe,0x0c240424,
+0x4400eb04,0xf44f603c,0x462861a1,0xff30f7fe,0x5109f240,0x46284604,
+0xff2af7fe,0x0c240424,0x4400eb04,0x4000f8c9,0x603ee002,0x6000f8c9,
+0x46282204,0x413bf240,0x0302ea08,0xff3af7fe,0xe8bd4630,0x46c087f0,
+0x41f0e92d,0x460c4606,0xf2404615,0x222061da,0xf7fe461f,0x4630ff21,
+0x6182f44f,0x23002208,0xff24f7fe,0x46304623,0x4182f240,0x72fff64f,
+0xff1cf7fe,0xf2404630,0x22ff4181,0xf7fe462b,0x4630ff15,0x4181f240,
+0x7280f44f,0xf7fe2300,0xf44fff0d,0x46307200,0x4181f240,0xf7fe4613,
+0x2400ff05,0xf241e009,0x429c3389,0x2400d101,0x2064e036,0xfb4af7f5,
+0x46303401,0x4181f240,0xfed2f7fe,0x7f00f410,0xf240d1ed,0x46304183,
+0xfecaf7fe,0x4184f240,0x46304604,0xfec4f7fe,0x4004ea40,0xf2406038,
+0x46304185,0xfebcf7fe,0x4186f240,0x46304604,0xfeb6f7fe,0x4004ea40,
+0xf2406078,0x46304187,0xfeaef7fe,0x6191f44f,0x46304604,0xfea8f7fe,
+0x4004ea40,0x240160b8,0x46302208,0x6182f44f,0xf7fe4613,0x4620febf,
+0x81f0e8bd,0x4a0ab530,0x4604b085,0xab01460d,0xe883ca07,0x46200007,
+0x22204629,0xff78f7ff,0x9b03b120,0x189b9a02,0xf0f5fbb3,0xbd30b005,
+0x0001b35c,0x4ff0e92d,0xb0854b4f,0xad014680,0xe893460c,0xe8850007,
+0xf2400007,0x46406145,0xfe72f7fe,0x6146f240,0x46400587,0xfe6cf7fe,
+0x61d1f240,0x22040586,0x23004640,0xfe86f7fe,0x46132240,0xf2404640,
+0xf7fe614b,0x4640fe7f,0x6145f240,0x32fff240,0xf7fe2300,0x4640fe77,
+0x6146f240,0x32fff240,0xf7fe2300,0x4640fe6f,0x22204621,0xf7ff462b,
+0x0dbfff33,0x46830db6,0xd04a2800,0xf8dd9d02,0xf8dda00c,0xeb0a9004,
+0x2b010305,0xf04fd802,0xe03e0b00,0xf7ff4648,0x4604fe6f,0xf7ff4650,
+0xf1a4fe6b,0xb21a0314,0xdb062a00,0xf102fa35,0x3201d041,0xf202fa35,
+0x4253e006,0xf103fa15,0x43d2d039,0xf202fa15,0xf1c3b223,0xfa09031e,
+0xebc3f303,0xf1a00402,0xb21b030b,0x460a2b00,0xfa35db02,0xe002f103,
+0xfa15425b,0xd022f103,0xf1c3b203,0xfa0a031f,0xfb94f303,0xfb93f4f2,
+0xfb04f0f1,0xf7ff0014,0x05a7fe43,0x0dbf0586,0x46400db6,0x6145f240,
+0x32fff240,0xf7fe463b,0x4640fe11,0x6146f240,0x32fff240,0xf7fe4633,
+0x4658fe09,0x2000e000,0xe8bdb005,0x46c08ff0,0x0001b318,0x460cb570,
+0xb1484605,0x3030f890,0xd0032b14,0xd1032b28,0xe0022280,0xe0002240,
+0x21cc2200,0x020cf042,0xf7f14620,0x2002facb,0xfa38f7f5,0x2202210a,
+0xf7f14620,0x2001fac3,0xfa30f7f5,0x21024620,0xf7f12200,0x2001fabb,
+0xfa28f7f5,0x4628b11d,0xf7fe2101,0xbd70fe0d,0x4606b570,0x4610460d,
+0x21004614,0xf7f2221c,0x2000fb5b,0x58c24b0f,0x3cddf896,0x2a94b11b,
+0x2aa5d901,0x2d02d910,0x2a0ed102,0xe00bd904,0xd1092d01,0xd9072a0e,
+0xf00208d1,0x22010307,0x5c63409a,0x54634313,0xf5b03014,0xd1e17f8c,
+0x46c0bd70,0x0001b508,0x2380b530,0x7d09f5ad,0x9384ac03,0x93852318,
+0x33082100,0x7200f44f,0x46204605,0x93879483,0xf7f29186,0x4622fb25,
+0x2300f44f,0x32086053,0x7300f504,0xd1f7429a,0x4356f240,0x46289300,
+0xf240a983,0x33014255,0xfdd4f7fe,0x7d09f50d,0x46c0bd30,0x4ff0e92d,
+0x7d0bf5ad,0xf8bd461f,0x46893258,0xf89d9303,0xf240325c,0x005b61a3,
+0x46052202,0x4250f89d,0xb254f8bd,0x8260f8bd,0xa264f8bd,0xfd62f7fe,
+0x93862380,0xae052318,0x21009387,0x96853308,0x91889389,0xf44fb1bc,
+0x46307200,0xfae4f7f2,0xf44f4632,0x60532300,0xf5063208,0x429a7300,
+0xf240d1f7,0x93004356,0xa9854628,0x4255f240,0xf7fe3301,0xf1b9fd93,
+0xd12f0f00,0xf2404628,0x464261a1,0xfd1cf7fe,0xf2404628,0x465261a2,
+0xfd16f7fe,0xf2404628,0x463a617e,0xfd10f7fe,0x1c7a2314,0xf203fb02,
+0x46283a01,0x61c8f44f,0xf7feb292,0x4628fd05,0x617bf240,0xf7fe465a,
+0x4628fcff,0x617cf240,0xf7fe9a03,0x4628fcf9,0x6176f240,0x02a1f24b,
+0xfcf2f7fe,0xe0034c0d,0xf7f5200a,0x3c0af957,0xf2404628,0xf7fe6176,
+0xf010fcdf,0xd0010f01,0xd1f12c09,0x46282280,0x6176f240,0xf7fe4613,
+0xf50dfcf5,0xe8bd7d0b,0x46c08ff0,0x000f4249,0x4770e92d,0xac03b0c9,
+0x21004682,0xf44f4620,0xf7f27280,0x2307fa75,0x33199345,0xae439347,
+0xf2402318,0xf2404855,0x94434957,0x25409344,0x4456f240,0x46314650,
+0x464b4642,0x94009546,0xfd20f7fe,0x93462380,0x46314650,0x464b4642,
+0x94009544,0xfd16f7fe,0xe8bdb049,0x46c08770,0x4604b510,0xf7f76bc0,
+0xf44fff2d,0x28026182,0x2320bf14,0x22e02360,0xf7fe4620,0xbd10fcaf,
+0x4605b570,0xf240b9a1,0xf64f413b,0xf7fe72ed,0x4628fc91,0x414cf240,
+0x72f0f64e,0xfc8af7fe,0xf2404628,0xf64f41f9,0xf7fe72f8,0xe096fc83,
+0x46132202,0x413bf240,0xfc90f7fe,0x23002202,0xf2404628,0xf7fe413c,
+0x2210fc89,0x46284613,0x413bf240,0xfc82f7fe,0x23002240,0xf2404628,
+0xf7fe413c,0xf241fc7b,0x46130208,0xf2404628,0xf7fe414c,0xf244fc73,
+0x46130208,0xf2404628,0xf7fe414d,0x2101fc6b,0x46282200,0xf834f7ff,
+0x23002204,0xf2404628,0xf7fe414d,0x2204fc5f,0xf2404628,0x4613414c,
+0xfc58f7fe,0xf7f76be8,0x2802fec9,0xd1284604,0xf2404628,0x462241f9,
+0xf7fe4623,0x4628fc4b,0x41faf240,0x46234622,0xfc44f7fe,0x46132204,
+0xf2404628,0xf7fe41f9,0x2204fc3d,0x46284613,0x41faf240,0xfc36f7fe,
+0x46132201,0xf2404628,0xf7fe41f9,0x2201fc2f,0xf2404628,0x461341fa,
+0x2202e027,0x46284613,0x41f9f240,0xfc22f7fe,0xf2404628,0x220241fa,
+0xf7fe2300,0x2204fc1b,0x46284613,0x41f9f240,0xfc14f7fe,0xf2404628,
+0x220441fa,0xf7fe2300,0x2201fc0d,0x46284613,0x41f9f240,0xfc06f7fe,
+0xf2404628,0x220141fa,0xf7fe2300,0xbd70fbff,0xb5102300,0x3de8f8c0,
+0x6144f240,0xf7fe4604,0xf010fbd3,0xd0050301,0x46202202,0x613ff240,
+0xe0074613,0x0f02f010,0x4620d006,0x4153f240,0x4200f44f,0xfbe2f7fe,
+0x22084620,0xf2402300,0xf7fe61da,0x4620fbdb,0x23002280,0x61daf240,
+0xfbd4f7fe,0x23012203,0xf2404620,0xf7fe61d6,0x2100fbcd,0xf7ff4620,
+0x6be0ff1b,0xfe3af7f7,0x6182f44f,0xbf142802,0x23602320,0x462022e0,
+0xfbbcf7fe,0x46c0bd10,0x41f0e92d,0x4616460c,0x3c012280,0xf2404605,
+0x461f61da,0xf89d4613,0xf7fe8018,0xb2a3fbab,0xf2404628,0xf2406142,
+0xf64f32ff,0xf7fe74ff,0x42a6fba1,0x1e73d001,0x4628b29e,0x61c8f44f,
+0x46334622,0xfb96f7fe,0xf2404628,0x46226141,0xf7fe463b,0xf1b8fb8f,
+0xd00e0f00,0xf2404628,0xf6474153,0xf7fe72ff,0x4628fb71,0x4153f240,
+0x4200f44f,0xfb74f7fe,0x4628e009,0x613ff240,0xf7fe2201,0x4628fb5d,
+0xf7ff2101,0xe8bdfec5,0x46c081f0,0x4ff0e92d,0x460c4605,0x469b4692,
+0x1de8f8c5,0xf44fb0cb,0x22e06182,0xf7fe2380,0xb914fb61,0x0802f04f,
+0x2001e012,0x4140f649,0xf101fb00,0x72e4ea84,0x72e4eba2,0xf3f2fbb1,
+0xf883fa1f,0xf208fb02,0x428a1c43,0xd1edb298,0xfb042324,0x2228f303,
+0xf3f2fb93,0x041b2400,0xfb93323c,0x4627f9f2,0xe02d4626,0xa9484638,
+0xfadcf7ff,0xfb039b49,0x2b00f30a,0x13dbdb04,0xf3c33301,0xe0060249,
+0x13db425b,0x105b3301,0x059a425b,0x9b480d92,0xf30afb03,0xdb042b00,
+0x330113db,0x0349f3c3,0x425be006,0x330113db,0x425b105b,0x0d9b059b,
+0x2382ea43,0x50b3aa03,0x444f1c63,0x3604b29c,0xd1cf4544,0x22034628,
+0xf2402300,0xf7fe61d6,0x2208fb05,0x46134628,0x61daf240,0xfafef7fe,
+0x46282202,0xf2404613,0xf7fe61da,0xab03faf7,0x23159343,0x330b9345,
+0xf2409347,0x24004356,0x46289300,0x3301a943,0x4255f240,0x8110f8cd,
+0xf7fe9446,0x4628fb37,0xf64f4641,0x462372ff,0xb000f8cd,0xff20f7ff,
+0xe8bdb04b,0x46c08ff0,0x2900b570,0xf44fbf14,0x23007380,0x1e0e4605,
+0x2601bf18,0x7280f44f,0x6196f44f,0xfac6f7fe,0x46282201,0x414cf240,
+0xf7fe4633,0x01b4fabf,0x22100133,0x4628b29b,0x414cf240,0xf7feb2a4,
+0x2240fab5,0xf2404628,0x4623414c,0xfaaef7fe,0x22200173,0x4628b29b,
+0x6196f44f,0xfaa6f7fe,0x46282240,0x6196f44f,0xf7fe4623,0x6be8fa9f,
+0xfd10f7f7,0xd1112802,0x462802b3,0x6196f44f,0x6280f44f,0x437cf403,
+0xfa90f7fe,0xb29b00f3,0xf2404628,0x220841e5,0xfa88f7fe,0x46c0bd70,
+0x1380f481,0x2201b570,0x460e4605,0x5440f3c1,0x5300f3c3,0x414df240,
+0xfa78f7fe,0x46280263,0x41b1f240,0x7200f44f,0xfa70f7fe,0x462802a3,
+0x41b1f240,0x6280f44f,0xfa68f7fe,0xf2404628,0xf64f41b6,0xb2b372ff,
+0xfa60f7fe,0x4628220f,0x41b7f240,0x4303f3c6,0xfa58f7fe,0xf7f76be8,
+0x2802fcc9,0xf3c6d110,0x46280481,0x41b1f240,0x52c0f44f,0xf7fe02e3,
+0x4628fa49,0x41e6f240,0x00e32218,0xfa42f7fe,0x21014628,0xff68f7ff,
+0x46c0bd70,0x47f0e92d,0x46061e0f,0x4b3edb03,0x1027f853,0xf1b7e018,
+0xd1143fff,0x4b3a2500,0xf8534630,0xf7ff1025,0x4630ffa3,0x1f9ef8b6,
+0xfb68f7ff,0x2d243501,0xd0024604,0x7f2ff5b0,0x1e6fd3ed,0x2100e009,
+0xf7ff4630,0x4630ff91,0x1f9ef8b6,0xfb56f7ff,0x4b2c4604,0xf2404630,
+0xf8134125,0xf7fea007,0x0124f9e7,0x46810c22,0xb9120413,0x46184622,
+0x2010e000,0x4f7ff412,0x0a12d001,0xf0123008,0xd0010ff0,0x30040912,
+0x0f0cf012,0x0892d001,0xf0123002,0xbf180f02,0x1c433001,0xfa122201,
+0x409af100,0x0104ebc1,0x42911b12,0x4698bf2c,0x46304680,0x4134f240,
+0xf9baf7fe,0xf44f4b12,0x57da718f,0x3fcaf996,0xfb03b2c5,0x2d7ff301,
+0x531cf5a3,0xf5a5bf88,0x3b1a7580,0x3223eb02,0x0202ebca,0x234ef3c9,
+0x46301ad2,0xf5a12403,0xfb08718f,0xf7ff2404,0x1960fee7,0x87f0e8bd,
+0x0001c420,0x0001bdce,0x0001bd82,0xf8bdb570,0x460c601c,0x72fff64f,
+0x41b6f240,0x0303f006,0xf7fe4605,0x220ff9a7,0xf2404628,0xea0441b7,
+0xf7fe0302,0x6be8f99f,0xfc10f7f7,0xd1112802,0x462802f3,0x41b1f240,
+0x52c0f44f,0x4378f403,0xf990f7fe,0xb29b00f3,0xf2404628,0x221841e6,
+0xf988f7fe,0x46c0bd70,0x4604b530,0x460db085,0xf240b979,0xf24f414c,
+0xf7fe72ff,0x4620f967,0x6196f44f,0x62fff64f,0xf960f7fe,0x46294620,
+0xf44fe023,0x46136200,0x414cf240,0xf96af7fe,0x5200f44f,0x46204613,
+0x414df240,0xf962f7fe,0x7280f44f,0x46204613,0x6196f44f,0xf95af7fe,
+0x23032207,0x46209201,0x2201210f,0x93029300,0xf7ff9303,0x4620ff9b,
+0xf7ff2101,0xb005fe75,0x46c0bd30,0xf241b510,0x5cc3033d,0xb92b4604,
+0xf7f76bc0,0xf04ffbb3,0xe0060320,0xf7f76bc0,0x2801fbad,0x2340bf0c,
+0xf8a42346,0xf04f3f96,0xf8a40300,0xbd103f98,0x47f0e92d,0x4d544b53,
+0xb088681e,0x24004607,0xf240e00b,0x93004356,0x46384629,0x4255f240,
+0xf7fe3301,0x3401f96f,0x42b43514,0x6bf8d1f1,0xfb88f7f7,0xd1492802,
+0xf7f76bf8,0x2307fb83,0x33199304,0x23019306,0xab079303,0xbf142801,
+0x0a70f04f,0x0a10f04f,0xf04f9302,0xf04f0800,0x493e09c0,0xeb08ae02,
+0x78630401,0x021b78a2,0x4302ea43,0x2001f818,0x4556f240,0xea434313,
+0x9307630a,0x46314638,0x4255f240,0x4357f240,0x9014f8cd,0xf7fe9500,
+0x78e3f935,0x071b7922,0x5302ea43,0xf1099307,0x93050380,0x46314638,
+0x4255f240,0x4357f240,0x0805f108,0xf7fe9500,0xf5b8f921,0xf1097f20,
+0xd1ca0901,0x689b6c7b,0xf2406a5a,0x429a5304,0x3baed108,0x46389300,
+0xf240491f,0x33014255,0xf90cf7fe,0x93042307,0x93063319,0x93032301,
+0xab072400,0xe0119302,0x220a014b,0xf3f2fb93,0xf5019307,0x93057310,
+0x4356f240,0x46389300,0xf240a902,0x33014255,0xf8f0f7fe,0x3401b2e1,
+0xd1e92c81,0xf7f76bf8,0x2802fb09,0x4638d116,0x6189f44f,0x4200f44f,
+0xf882f7fe,0xf44f4638,0x22406182,0xf87cf7fe,0x46c0e016,0x00019b8c,
+0x000192ec,0x0001985c,0x00019b90,0xf44f4638,0xf6476189,0xf7fe72ff,
+0x4638f861,0x6182f44f,0x72bff64f,0xf85af7fe,0x7380f44f,0xf44f4638,
+0xf44f6189,0xf7fe7240,0x4638f865,0xf2402250,0xf7fe4139,0x4638f845,
+0x413af240,0x4208f44f,0xf83ef7fe,0x22004638,0x413bf240,0xf838f7fe,
+0x22004638,0x413cf240,0xf832f7fe,0x22004638,0x41e5f240,0xf82cf7fe,
+0x22004638,0x414cf240,0xf826f7fe,0x22004638,0x6196f44f,0xf820f7fe,
+0x22004638,0x41f9f240,0xf81af7fe,0x22004638,0x414ef240,0xf814f7fe,
+0x3f89f897,0x22ff4638,0x4134f240,0xf826f7fe,0x22444638,0x414af240,
+0xf816f7fe,0x22804638,0x414af240,0xf800f7fe,0xf2404638,0xf64a413d,
+0xf7fd1254,0xf897fff9,0xf8972f8a,0xf4423f8b,0xea425200,0xf8971203,
+0x46383f8c,0x2283ea42,0x413ef240,0xf7fdb292,0x4638ffe7,0x4127f240,
+0x4260f44f,0x43c0f44f,0xfff8f7fd,0x220f4638,0xf44f230a,0xf7fd6185,
+0x4638fff1,0x6184f44f,0x427ff44f,0x53f0f44f,0xffe8f7fd,0x46382201,
+0xf2404613,0xf7fd510e,0x2332ffe1,0xf2404638,0xf44f510e,0xf7fd72ff,
+0x2201ffd9,0x46134638,0x510af240,0xffd2f7fd,0x463823a4,0xf24022ff,
+0xf7fd4116,0x4638ffcb,0x514bf240,0x0233f246,0xffaaf7fd,0x22ff4638,
+0xf2402346,0xf7fd4123,0x4638ffbd,0x4123f240,0x427ff44f,0x5334f44f,
+0xffb4f7fd,0x22ff4638,0xf2402306,0xf7fd4125,0x4638ffad,0x4125f240,
+0x427ff44f,0x43bef44f,0xffa4f7fd,0x220f4638,0xf240230a,0xf7fd4126,
+0x4638ff9d,0x23002208,0x515af240,0xff96f7fd,0x22ff4638,0xf44f2312,
+0xf7fd6184,0x4638ff8f,0x4124f240,0x427ff44f,0x53e8f44f,0xff86f7fd,
+0x220f4638,0xf2402309,0xf7fd4129,0x4638ff7f,0x4112f240,0x427ff44f,
+0x5340f44f,0xff76f7fd,0x23004638,0x4127f240,0x52f8f44f,0xff6ef7fd,
+0x463822ff,0xf2404613,0xf7fd4134,0x4638ff67,0x41dff240,0x427ff44f,
+0x4374f44f,0xff5ef7fd,0x22ff4638,0xf2402300,0xf7fd5145,0x4638ff57,
+0x4392f44f,0x5145f240,0x427ff44f,0xff4ef7fd,0x22034638,0x6156f240,
+0xff2ef7fd,0xf44f4638,0xf2406340,0xf44f41ff,0xf7fd427c,0x4638ff3f,
+0xf240226c,0xf7fd411f,0x4638ff1f,0x230c227f,0x510ff240,0xff32f7fd,
+0x22ff4638,0xf240230c,0xf7fd6134,0x4638ff2b,0xf44f2217,0xf7fd61c1,
+0x4638ff0b,0x6104f240,0x32eaf240,0xff04f7fd,0xe8bdb008,0x46c087f0,
+0x41f0e92d,0x460521e0,0xf7f76bc0,0xf8b5faad,0x46074f94,0x0400ebc4,
+0x41a5f240,0xf7fd4628,0x2301fee7,0x2602f3c0,0xb2a440b3,0xdd0c429c,
+0x7f94f8a5,0xf2404628,0xf7fd41ab,0xf3c0fed9,0xf8a52006,0xf8a50f96,
+0xe8bd6f98,0x46c081f0,0x4604b530,0xf890b0a1,0xf7f7002c,0x2307f94b,
+0x3319931c,0x2000931e,0xf9931823,0xad022169,0xf8454252,0x30012020,
+0x0110f241,0x545a2804,0xf994d1f2,0xf241316d,0x425b0214,0x320154a3,
+0x930654a3,0xf9949307,0x3201316e,0x54a3425b,0x54a33201,0x93099308,
+0x316ff994,0x425b3201,0x320154a3,0x930a54a3,0xf994930b,0x32013170,
+0x54a3425b,0x54a33201,0x930d930c,0x3171f994,0x425b3201,0x320154a3,
+0x930e54a3,0xf994930f,0x32013172,0x54a3425b,0x54a33201,0x93119310,
+0x3173f994,0x5281f504,0x9312425b,0xf2417013,0x93130221,0xf99454a3,
+0x32013174,0x54a3425b,0xf9949314,0x3201317c,0x54a3425b,0x23189315,
+0x3328931b,0xf240931d,0x93004356,0x33014620,0xf240a91a,0x951a4255,
+0xfed0f7fd,0x037ff10d,0x2301931a,0x3307931b,0x3378931e,0x2300931d,
+0x307ff88d,0xf240461d,0x93004356,0x33014620,0xf240a91a,0xf7fd4255,
+0x9b1dfeb9,0x931d3301,0x307ff89d,0xb2db3301,0xf88d2b20,0xbf04307f,
+0x031ff06f,0x307ff88d,0x2d403501,0x4620d1e3,0x41a7f240,0xfe2cf7fd,
+0x31c8f894,0x4298b2c0,0x4620d006,0x41a7f240,0xf7fd22ff,0xe003fe43,
+0x033df241,0xb1135ce3,0xf7ff4620,0xb021fcf3,0x46c0bd30,0xb08bb5f0,
+0x9303ab08,0x93042302,0x9305330b,0x93073313,0x7fcaf990,0xf1174606,
+0xda2d0f0f,0xfb0733fe,0xf503f303,0x331c53a0,0x3b02131b,0x3fcbf880,
+0x231aad03,0x4456f240,0x46299306,0x4255f240,0x4357f240,0xf7fd9400,
+0x231cfe9b,0x46309306,0xf2404629,0xf2404255,0x94004357,0xfe5af7fd,
+0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0xf5a4fe87,0xe095648a,
+0xdc462f12,0x738ff44f,0xf303fb07,0x6344f5a3,0x131b3b0a,0x3fcbf880,
+0x231aad03,0x4456f240,0x46299306,0x4255f240,0x4357f240,0xf7fd9400,
+0x231cfe6b,0x46309306,0xf2404629,0xf2404255,0x94004357,0xfe2af7fd,
+0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x2336fe57,0xf8d69306,
+0x46303fb0,0xf8d69308,0x46293fb4,0xf2409309,0xf2404255,0x94004357,
+0xfe10f7fd,0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x2403fe3d,
+0x2f45e04c,0xf8d0ad03,0xf8d02fa8,0xdc221fac,0x738ff44f,0xf303fb07,
+0x531cf5a3,0x131b3b1a,0x3fcbf880,0xf240231c,0x93064456,0x91099208,
+0x4255f240,0xf2404629,0x94004357,0xfde6f7fd,0x46294630,0x4255f240,
+0x4357f240,0xf7fd9400,0x2400fe13,0xf44fe022,0xfb07738f,0xf5a3f303,
+0x3b62438c,0xf880131b,0x231c3fcb,0x4456f240,0x92089306,0xf2409109,
+0x46294255,0x4357f240,0xf7fd9400,0x4630fdc3,0xf2404629,0xf2404255,
+0x94004357,0xfdf0f7fd,0x0402f06f,0x3fb8f8b6,0x18ebb2a5,0x463022ff,
+0x41dff240,0xf7fdb29b,0xf8b6fd59,0xf44f3fba,0x18eb427f,0x4013021b,
+0xf2404630,0xf7fd41df,0xab08fd4d,0xf8d69303,0x46303fbc,0x930818e3,
+0x3fc0f8d6,0x18e3a903,0x23029309,0x330f9304,0x332f9305,0x23209306,
+0xf2409307,0x93004356,0x4255f240,0xf7fd3301,0xf996fd85,0x22ff3fc4,
+0xb29b18eb,0xf2404630,0xf7fd4134,0xf107fd27,0x2b21030f,0xf896d808,
+0xf7f6002c,0xf640ff7f,0x4298137b,0xe00bd82f,0x0332f1a7,0xd8132b13,
+0x002cf896,0xff72f7f6,0x137bf640,0xd8054298,0x463022ff,0x4134f240,
+0xe01a4613,0xf2404630,0x22ff4134,0xe0142300,0xdd142f45,0x002cf896,
+0xff5cf7f6,0x137bf640,0xd8054298,0xf2404630,0x22ff4134,0xe00423fd,
+0xf2404630,0x22ff4134,0xf7fd23fe,0xf8b6fceb,0xf44f3fc6,0x18eb427f,
+0x4013021b,0xf2404630,0xf7fd4124,0xf8b6fcdf,0x46303fc8,0xb29b18eb,
+0xf24022ff,0xf7fd4125,0x4630fcd5,0xf2402244,0xf7fd414a,0x4630fcc5,
+0x414af240,0xf7fd2280,0x4630fcaf,0xfdd4f7ff,0xbdf0b00b,0x460db570,
+0x41a4f240,0xf7fd4604,0xf400fc9b,0x42a84060,0xf5b0d045,0xd1094f60,
+0xf7ff4620,0x4620fd99,0xffc2f7fe,0x4f60f5b5,0xe027d12a,0x4f60f5b5,
+0x4620d126,0xfdb4f7ff,0xf2404620,0x227f41a4,0x3f96f8b4,0xfc9ef7fd,
+0x3f98f8b4,0x62e0f44f,0xf403021b,0x4620437f,0x41a5f240,0xfc92f7fd,
+0x6be021e0,0xf828f7f7,0xf8a42100,0x46200f94,0xfef6f7fd,0x33fff04f,
+0x3f9cf884,0xe0002300,0x46202310,0x61a3f240,0xf7fd2210,0x4620fc7b,
+0x41a4f240,0x4260f44f,0xf7fd462b,0xbd70fc73,0x41f0e92d,0xb0942307,
+0xf8864606,0x930a1f9c,0x3319460f,0x0801f04f,0x41a4f240,0xf8cd930c,
+0xf7fd8024,0xf410fc3d,0xd0044f60,0xf44f4630,0xf7ff4100,0xf507ff93,
+0xad0873a0,0xab13930b,0x4456f240,0x46309308,0xf2404629,0xf2404255,
+0x94004357,0xfcd0f7fd,0x03c0f107,0xab12930b,0x46309308,0xf2404629,
+0xf2404255,0x94004357,0xfcc2f7fd,0x46309b12,0x02fff003,0x2034f8ad,
+0x2207f3c3,0x4307f3c3,0x3038f8ad,0xa90d9b13,0x7302f3c3,0x2036f8ad,
+0x303af8ad,0xfebaf7fd,0x104bf89d,0xf0014630,0xf7fd017f,0x9913ff57,
+0xf3c14630,0xf7fd5107,0x9b13fefd,0xf3c34630,0x059b2289,0xf8ad0d9b,
+0x2300303e,0x33109305,0xab0f9307,0x23029303,0x334e9304,0x203cf8ad,
+0xa9039306,0x4255f240,0x4357f240,0xf7fd9400,0xf507fc4d,0x930b73e0,
+0x9308ab11,0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x4630fc75,
+0x1044f8bd,0xff9af7fd,0x7310f507,0xab10930b,0x46309308,0xf2404629,
+0xf2404255,0x94004357,0xfc62f7fd,0x46309b10,0xb29b00db,0x61a6f240,
+0x72fff641,0xfbcef7fd,0x46414630,0xfe38f7fd,0xe8bdb014,0x46c081f0,
+0x4ff0e92d,0x4607b0b3,0x4615460c,0x22162100,0x004ef10d,0xf7f19302,
+0x4973f94b,0xf10d220c,0xf7f10092,0x4971f965,0xf10d220c,0xf7f10086,
+0xf10df95f,0x496e007a,0xf7f1220c,0x2300f959,0x3310931b,0x2d03931d,
+0xe8dfd80e,0x1402f005,0x2206091c,0x034ef10d,0x0892f10d,0xe055920d,
+0x46982300,0xe023930d,0x0800f04f,0x46c24643,0x8034f8cd,0xf507e04c,
+0x21066376,0xf10d330c,0x910d0886,0xf10de042,0x9319034e,0x931a2307,
+0x931c3349,0x4356f240,0xf2409300,0x46384255,0x3301a919,0xfbfcf7fd,
+0xf10d2206,0x920d0886,0x9300ab31,0x01c7f10d,0x02c6f10d,0x03c5f10d,
+0xf7fd4638,0xf89dfeb3,0xf89d20c7,0xf04f30c6,0xea430100,0xf8ad2302,
+0xf04f305c,0xf8ad0300,0xf89d305e,0xf89d20c5,0x2d0230c4,0x2302ea43,
+0x3060f8ad,0x1062f8ad,0x034ef10d,0x2206d006,0x0892f10d,0x0a02f04f,
+0xe001920d,0x0a00f04f,0x230b9319,0x3335931a,0xf240931c,0xf2404356,
+0x93004255,0x33014638,0xf7fda919,0xf240fb83,0x463841a4,0xfb08f7fd,
+0x90032100,0xf7ff4638,0x4638fe61,0x413bf240,0xfafef7fd,0x1080f3c0,
+0xb118900c,0xa92a4638,0xfeaef7fd,0x9b0cb95c,0x4638b923,0x1f96f8b7,
+0xfe9ef7ff,0x4638ac2c,0xf7fd4621,0x8863fea1,0x011b8822,0x2302ea43,
+0x462188a2,0xb29e4313,0x22088dbb,0x4370f403,0xf5b3a82e,0xbf145f80,
+0x25012500,0xf8a8f7f1,0xf10d220a,0x2100009e,0xf882f7f1,0x22004b11,
+0x4015f833,0xe0224610,0xf8534b0f,0x18c13025,0x3012880b,0xd11942b3,
+0xf10d884a,0xf8ad009e,0x888b20b8,0x30baf8ad,0x2f06f831,0x20bcf8ad,
+0xf7f1220a,0xe00cf885,0x0001b39a,0x0001b4f4,0x0001b628,0x0001b4f0,
+0x0001b3a8,0x42a23201,0x4638d1da,0xf7fda92e,0x2240fd59,0x46384613,
+0x61daf240,0xfabaf7fd,0x46382118,0xfe9af7fd,0x413cf240,0xf7fd4638,
+0xf240fa8f,0x9008110b,0xf7fd4638,0x214cfa43,0x46389009,0xfa3ef7fd,
+0x41f3f240,0x4638900a,0xfa7ef7fd,0x22382300,0xf240900b,0x4638413c,
+0xfa98f7fd,0x22fe214c,0xf7fd4638,0x214cfa35,0x46382202,0xfa42f7fd,
+0x5280f44f,0xf2404638,0xf7fd41f3,0xf240fa7d,0x4638413e,0xfa60f7fd,
+0xf24023af,0x900532ff,0x413ef240,0xf7fd4638,0xf240fa79,0x46381121,
+0xfa0cf7fd,0x900422f2,0x1121f240,0xf7fd4638,0x227ffa0f,0xf2404638,
+0xf7fd111f,0xf240fa09,0x46386176,0xfa40f7fd,0x22802300,0xf2409006,
+0x46386176,0xfa5af7fd,0x5103f240,0xf7fd4638,0x2208fa33,0x90074613,
+0x5103f240,0xf7fd4638,0x4638fa4d,0x5103f240,0x23002204,0xfa46f7fd,
+0xae194b3f,0x23009319,0x931c2514,0x4456f240,0x46314638,0x4255f240,
+0x4357f240,0x9400951a,0xfa88f7fd,0x46384b37,0x23209319,0x4631931c,
+0x4357f240,0x4255f240,0x9400951a,0xfa7af7fd,0xf2404638,0xf6404153,
+0xf7fd22a9,0xf8d7fa05,0xb9333de8,0xf6404638,0x225861a6,0xf7fe3301,
+0xea4ffea5,0xf10d024a,0xeb08037a,0xeb030602,0x46d00902,0xf04fe0a8,
+0xf8ad0300,0x883330c0,0xf3c3a932,0xeb012403,0xf8330344,0xf8b91c2a,
+0xb1212000,0x03fff002,0x2301ea43,0x4638b29a,0x4152f240,0xf9d8f7fd,
+0xfa1f1ee3,0xf1bafa83,0xd81d0f01,0x03c2f10d,0x23019319,0xad19931a,
+0x931c3344,0x4456f240,0x46294638,0x4255f240,0x4357f240,0xf7fd9400,
+0xab30fa63,0x46389319,0xf2404629,0xf2404255,0x94004357,0xfa22f7fd,
+0xf2404638,0x88324151,0xf9aef7fd,0xe00b2400,0x0001b1d0,0x0001b3f8,
+0xf7f32064,0x3401fe0f,0x3389f241,0xd007429c,0xf2404638,0xf7fd4151,
+0xf410f993,0xd1ef4f40,0xf2404638,0xf7fd4151,0xf410f98b,0xd17e4f40,
+0xab0e220b,0x9319ad19,0xf240921a,0x46384456,0xf2404629,0xf2404255,
+0xf04f4357,0xf8cd0b60,0x9400b070,0xfa20f7fd,0x931c2340,0x46294638,
+0x4255f240,0x4357f240,0xf7fd9400,0xf1baf9df,0xd80f0f01,0x03c2f10d,
+0x23019319,0x3344931a,0x4638931c,0xf2404629,0xf2404255,0x94004357,
+0xf9ccf7fd,0x6376f507,0x9319330c,0x931a230b,0x46294638,0x4255f240,
+0x4357f240,0xb070f8cd,0xf7fd9400,0xf108f9f1,0x36020801,0x0902f109,
+0x4588990d,0xaf53f4ff,0xae19230b,0xf507931a,0x33556476,0x4556f240,
+0x931c340c,0x46314638,0x4255f240,0x4357f240,0x95009419,0xf9d4f7fd,
+0x931a2304,0x931c334c,0x46314638,0x4255f240,0x4357f240,0x95009419,
+0xf990f7fd,0x6376f507,0x93193316,0x931a2302,0x931c3353,0x46314638,
+0x4255f240,0x4357f240,0xf7fd9500,0x9a02f97f,0x4638b912,0xfd28f7fe,
+0x46382300,0x5103f240,0xf7fd2208,0x4638f91f,0x111ff240,0xf7fd2280,
+0x4638f8cd,0x413ef240,0xf7fd9a05,0x9b04f8f9,0xb2da4638,0x1121f240,
+0xf896f7fd,0xf2404638,0x9a066176,0xf8ecf7fd,0xf2404638,0x9a075103,
+0xf8e6f7fd,0xf2404638,0x9a08413c,0xf8e0f7fd,0xf2404638,0x9a09110b,
+0xf87ef7fd,0x214c4638,0xf7fd9a0a,0x9a0bf879,0xf2404638,0xf7fd41f3,
+0x4638f8cf,0xf7fd2140,0x4638fcc9,0x413bf240,0x72fbf64f,0xf8caf7fd,
+0x61daf240,0x22404638,0xf7fd2300,0x990cf8d7,0x4638b119,0xf7fda92a,
+0x9a03fb69,0xf4024638,0xf7ff4160,0xb033fc07,0x8ff0e8bd,0x4ff0e92d,
+0x46072380,0x22e0b097,0x6182f44f,0xf8bef7fd,0x6c7b2400,0x4f83f887,
+0x370cf8d3,0x4df0f887,0x3decf8c7,0x302cf897,0x3f83f887,0xf8d36cbb,
+0xf0833120,0xf0130301,0x93030301,0x6bf8d102,0xf8e6f7f7,0x46382280,
+0x6131f240,0xf7fd4623,0xf44ff89d,0x46235280,0x61daf240,0xf7fd4638,
+0x4638f895,0xfb94f7fd,0x41a4f240,0xf7fd4638,0x4621f86b,0x46389004,
+0xfbc4f7ff,0xf7fd4638,0x4683fba5,0xf7fd4638,0x2110fb11,0x46389005,
+0xfbb8f7fd,0xf7f66bf8,0x2801faed,0xf04fd10a,0xf8ad03ff,0xf04f3040,
+0xf8ad033c,0xf04f3042,0xe00903ff,0x0307f04f,0x3040f8ad,0x033cf04f,
+0x3042f8ad,0x03f8f04f,0xf8ad2200,0xac104046,0x3044f8ad,0x46134638,
+0xf7ff4621,0xf10dfc91,0x93000352,0xf10d4638,0xf10d0355,0xf10d0157,
+0xf7fd0256,0xf99dfb9b,0x2b003055,0x425bbfb8,0xd11c2b0f,0x3052f99d,
+0xbfb82b00,0x2b0f425b,0xf04fd115,0xf8ad0307,0xf04f3040,0xf8ad032d,
+0xf04f3042,0xf8ad03ba,0x22003044,0x0300f04f,0x3046f8ad,0x46214638,
+0xf7ff4613,0xab12fc61,0x23029306,0x0818f10d,0x334e9307,0xf2402410,
+0x46414656,0x93092500,0xf2404638,0xf2404255,0x940a4357,0x95089600,
+0xf89af7fd,0x0352f10d,0x23559306,0x9309940a,0x46412401,0x4357f240,
+0xf2404638,0x96004255,0xa048f8bd,0x904af8bd,0x94079508,0xf884f7fd,
+0x930d2307,0x930f3319,0x8052f8bd,0x940cab13,0xf44f930b,0xad0b76a0,
+0x4456f240,0x46294638,0x4255f240,0x4357f240,0x9400960e,0xf86cf7fd,
+0xea4f9b13,0x0d1b5289,0x0d92051b,0xea4f431a,0x0d9b538a,0x2283ea42,
+0x46389213,0xf2404629,0xf2404255,0x94004357,0xf820f7fd,0x0380f106,
+0x4638930e,0xf2404629,0xf2404255,0x36014357,0x804cf8cd,0xf7fd9400,
+0xf5b6f811,0xd1ca7fe0,0x46594638,0xfa9ef7fd,0x99054638,0xfaeef7fd,
+0x46389b04,0x4160f403,0xfae8f7ff,0x22002101,0xf7fd4638,0x6bf8fb75,
+0xfa18f7f6,0x46042802,0x2208d164,0x46134638,0x414cf240,0xff9af7fc,
+0x46382208,0xf2404613,0xf7fc414d,0x4638ff93,0x46234622,0x41f9f240,
+0xff8cf7fc,0x46224638,0xf2402300,0xf7fc41fa,0x2201ff85,0x46134638,
+0x41f9f240,0xff7ef7fc,0x22014638,0xf2402300,0xf7fc41fa,0x4638ff77,
+0xf2402300,0xf44f41b1,0xf7fc5200,0xf44fff6f,0x46386200,0xf44f4613,
+0xf7fc6196,0x4638ff67,0x41b7f240,0x42fef44f,0x5300f44f,0xff5ef7fc,
+0x46382208,0xf44f4613,0xf7fc6196,0x4638ff57,0x23002280,0x41e6f240,
+0xff50f7fc,0x46132240,0xf2404638,0xf7fc41e5,0x4638ff49,0xf44f228c,
+0xf7fc7192,0x4638fecd,0x1125f240,0xf7fc2200,0xe00dfec7,0x46132220,
+0xf2404638,0xf7fc414c,0x2220ff35,0xf2404638,0x4613414d,0xff2ef7fc,
+0x41a4f240,0xf7fc4638,0x2100ff07,0x46384605,0xfa60f7ff,0xf2404638,
+0xf7fc413b,0xf3c0fefd,0xb11c1480,0xa9104638,0xfaaef7fd,0x4638217f,
+0xfaa2f7ff,0x497e4638,0xfc8af7fe,0x46132201,0xf2404638,0xf7fc413b,
+0x2201ff09,0x46382300,0x413cf240,0xff02f7fc,0x6200f44f,0x46384613,
+0x414cf240,0xfefaf7fc,0x5200f44f,0xf2404613,0x4638414d,0xfef2f7fc,
+0xf7fd4638,0x227ffc8f,0x46382300,0x619df44f,0xfee8f7fc,0x46382300,
+0x619df44f,0x42fef44f,0xfee0f7fc,0x2305227f,0xf2404638,0xf7fc41e9,
+0x4638fed9,0x41e9f240,0x42fef44f,0x63a0f44f,0xfed0f7fc,0x46132208,
+0xf2404638,0xf7fc41e7,0x2210fec9,0x46384613,0x41e7f240,0xfec2f7fc,
+0x23002260,0xf2404638,0xf7fc41e7,0x2204febb,0x46382300,0x41e7f240,
+0xfeb4f7fc,0x46132202,0xf2404638,0xf7fc41e7,0x4638fead,0x61daf240,
+0xf7fc2210,0x2220fe9d,0x46384613,0x6189f44f,0xfea0f7fc,0x4180f44f,
+0xf7fd4638,0x4638fff7,0xfc38f7fd,0xf7fd4638,0x4638fab1,0x414cf240,
+0x23002208,0xfe8ef7fc,0xf2404638,0x2220414c,0xf7fc2300,0x4638fe87,
+0x41f9f240,0x23002202,0xfe80f7fc,0xf2404638,0x220141f9,0xf7fc2300,
+0xb124fe79,0xa9104638,0xf90cf7fd,0x4638e003,0xf7fd4621,0x4638f8dd,
+0x4160f405,0xf9a6f7ff,0x21004638,0xfb90f7fe,0xf44f4638,0xf44f6196,
+0x23006200,0xfe5ef7fc,0xf44f4638,0x22086196,0xf7fc2300,0x4638fe57,
+0x41e5f240,0x23002240,0xfe50f7fc,0xf44f4638,0x22106196,0xf7fc2300,
+0x4638fe49,0x413bf240,0x23002201,0xfe42f7fc,0xf2404638,0xf44f414c,
+0x23006200,0xfe3af7fc,0x46132280,0xf2404638,0xf7fc6131,0xf44ffe33,
+0x46135280,0xf2404638,0xf7fc61da,0x9b03fe2b,0x6bf8b913,0xfd94f7f6,
+0xf7f66bf8,0xf44ff897,0x28026182,0x2320bf14,0x22e02360,0xf7fc4638,
+0xb017fe19,0x8ff0e8bd,0x001007f0,0x29016943,0x7519b507,0x2303d906,
+0x22019300,0x21006bc0,0xe0054613,0x93002303,0x6bc02100,0x460b2201,
+0xfbd0f7f6,0x46c0bd0e,0xf647b570,0x4604757f,0x462a2158,0xf7f66bc0,
+0x6be0fb61,0x462a215a,0xfb5cf7f6,0x21706be0,0xf7f6462a,0x6be0fb57,
+0x462a2172,0xfb52f7f6,0x46c0bd70,0x6bc5b5f7,0xf8d54604,0x7a1b3844,
+0xd05d2b00,0x3033f890,0xd0412b00,0x21284628,0xf7f6223f,0x4628fb3f,
+0x22102124,0xfb3af7f6,0x21c8f894,0x21264628,0xf7f60112,0x4628fb33,
+0xf8b42132,0xf7f62250,0x4626fb2d,0x4b212700,0x18fb4628,0x37017919,
+0x017ff001,0xfb0af7f6,0x216df996,0x1da14604,0xb2924628,0xfb1af7f6,
+0x216df996,0xfb922302,0x4252f2f3,0xf1044628,0xb292010e,0xfb0ef7f6,
+0x2f083601,0x2303d1df,0x93002280,0x21014628,0xf7f64613,0xe017fb67,
+0x20044601,0x316df991,0x33072208,0xf3f2fb93,0x300100db,0x316df881,
+0x280c3101,0xf994d1f2,0x4628216d,0x214e3207,0x02cff3c2,0xfaeaf7f6,
+0x46c0bdfe,0x0001b9e4,0x4ff0e92d,0x3ffff1b1,0x4605b093,0x92029103,
+0x8d81d119,0x7340f401,0x7f40f5b3,0xfa5fd102,0xe012f881,0x7f00f5b3,
+0xd104b2c9,0xd80429dd,0x0802f101,0x2902e009,0xf04fd802,0xe0040800,
+0x0802f1a1,0xf8dde001,0xf995800c,0xf8953fca,0x2b00affa,0xf1aabfb8,
+0x22000a03,0x46ab23ff,0x920446a9,0x46149305,0x613cf899,0x0719f10d,
+0xf89555e6,0x2b00324c,0x4641d14e,0x0246f10d,0x0347f10d,0x94004628,
+0xfbe4f7fd,0x21c9f999,0x3047f89d,0xbfa84293,0xb2d94613,0xbf3442b1,
+0x4633460b,0x55e32b27,0x3b04d801,0xf1bae00a,0xdc090f28,0xb2da3b14,
+0xf99555e2,0x2b413fca,0x1f13dd1c,0xe01955e3,0x0f33f1ba,0x2fcaf895,
+0xb252dc0a,0xdc032a27,0x2a003b04,0xe00755e3,0x302cf89d,0xe0073b05,
+0x2b27b253,0x2b41dd01,0xf89ddd04,0x3b02302c,0x302cf88d,0xf88d6c6b,
+0xf10d1047,0xf8930119,0x5c6326fe,0xf302fb03,0xfb932264,0x5463f3f2,
+0x0319f10d,0x9a045ce3,0x429a3401,0x461abf38,0x9a059204,0x0901f109,
+0xbf28429a,0x2c0c461a,0xd1959205,0xf1b39b03,0xd0033fff,0x9a029b04,
+0xe0427013,0x70b4f505,0x222d2100,0xf7f03001,0x9a04fa5f,0xf8859b05,
+0xf8852031,0x210031c8,0x0319f10d,0xf8955cca,0xf88b3033,0xb91b2196,
+0x3031f895,0xe0031a9b,0x31c8f895,0x0302ebc3,0x290c3101,0x3169f88b,
+0x0b01f10b,0x4628d1e8,0x6193f501,0xfc88f7fc,0x4f60f410,0x4628d012,
+0x41a4f240,0xfc80f7fc,0x46042100,0xf7fe4628,0x4628ffd9,0xfda8f7fe,
+0xf4044628,0xf7fe4160,0xe002ffd1,0xf7ff4628,0xb013fead,0x8ff0e8bd,
+0xb570297f,0xd9014604,0xe0192005,0x18232000,0x282d3001,0x113cf883,
+0x6c63d1f9,0x224cf884,0xb1637c5b,0xf0046be0,0x4605fd51,0x4620b938,
+0x31fff04f,0xf7ff462a,0x4628fef7,0x2000e000,0x46c0bd70,0x6c43b570,
+0x4606b088,0x6898b2cc,0x71fff640,0x7272f44f,0xf9b4f7ef,0x031ff10d,
+0x23019302,0x33139303,0x23089304,0x6c739306,0x6a5b689b,0x639ef5a3,
+0x2b013b0d,0x4630d869,0x61aaf44f,0x72a5f44f,0xfc2ef7fc,0xd8052c04,
+0xf2404630,0x22ff4134,0xe00823fd,0xb2db1f63,0xd8072b03,0xf2404630,
+0x22ff4134,0xf7fc23fe,0xe012fc35,0x0309f1a4,0x2b05b2db,0x22ffd80d,
+0xf2404630,0x46134134,0xfc28f7fc,0xf44f4630,0xf44f61aa,0xf7fc72af,
+0x2302fc07,0xf88d2c07,0xd117301f,0xad023337,0xf2409305,0x46304456,
+0xf2404629,0xf2404255,0x94004357,0xfc62f7fc,0x9305233a,0x46294630,
+0x4255f240,0x4357f240,0xe0d99400,0xd1172c0b,0xad022306,0xf2409305,
+0x46304456,0xf2404629,0xf2404255,0x94004357,0xfc48f7fc,0x93052307,
+0x46294630,0x4255f240,0x638af503,0xe0bf9400,0xf0402c0d,0x231980bf,
+0x4630e08e,0x61aaf44f,0x72aff44f,0xfbc4f7fc,0xd1222c01,0x93052317,
+0x4356f240,0x93003404,0xa9024630,0x4255f240,0xf88d3301,0xf7fc401f,
+0x4630fc21,0x412ff240,0x46232207,0xfbc6f7fc,0xf2404630,0x22ff4134,
+0xf7fc23fd,0x4630fbbf,0x4116f240,0x23a322ff,0x2c02e041,0x2505d114,
+0x4356f240,0x93001964,0xa9024630,0x4255f240,0xf88d3301,0x9405501f,
+0xfbfcf7fc,0xf2404630,0x4622412f,0xe01c462b,0xd1042c03,0x23373402,
+0x401ff88d,0x2c04e005,0x3401d13c,0x401ff88d,0x93052327,0x4356f240,
+0x46309300,0xf240a902,0x33014255,0xfbdef7fc,0xf2404630,0x2207412f,
+0xf7fc4623,0x4630fb83,0x4134f240,0x23fd22ff,0xfb7cf7fc,0xf2404630,
+0x22ff4116,0xf7fc23a2,0x4630fb75,0xf2402300,0xf44f5152,0xf7fc4278,
+0x4630fb6d,0x5153f240,0x42c0f44f,0x4380f44f,0xfb64f7fc,0xf2404630,
+0x22ff4117,0xf7fc2378,0xe033fb5d,0xd1312c0d,0xf88d2302,0x3317301f,
+0xf240ad02,0x93054456,0x46294630,0x4255f240,0x4357f240,0xf7fc9400,
+0x231afb9d,0x46309305,0xf2404629,0xf2404255,0x94004357,0xfb92f7fc,
+0x93052326,0x46294630,0x4255f240,0x4357f240,0xf7fc9400,0x2327fb87,
+0x94009305,0x46294630,0x4255f240,0x6386f503,0xfb7cf7fc,0xbd70b008,
+0x4f70e92d,0x46054b47,0x0003e893,0xb08a4b46,0x23149303,0x23089305,
+0x9307ac08,0x080cf10d,0xf2402300,0xf2404955,0xe8844a57,0xf04f0003,
+0x93060b40,0x4656f240,0x46414628,0x4653464a,0xb010f8cd,0xf7fc9600,
+0x6c6bfb55,0x71fff640,0xf44f6898,0xf7ef627e,0x4628f84d,0x23032207,
+0x412ff240,0xfaf2f7fc,0x462822ff,0xf2404613,0xf7fc4134,0x4628faeb,
+0x23a422ff,0x4116f240,0xfae4f7fc,0xf2404628,0xf44f5152,0xf44f4278,
+0xf7fc43b0,0x4628fadb,0x5153f240,0x42c0f44f,0x5300f44f,0xfad2f7fc,
+0x46282364,0xf24022ff,0xf7fc4117,0x4628facb,0x41dff240,0x42f1f24f,
+0xfaaaf7fc,0xf2404628,0xf44f4124,0xf44f427f,0xf7fc53e8,0x4628fabb,
+0x230622ff,0x4125f240,0xfab4f7fc,0x93042302,0x9305330f,0x9403330f,
+0x46289307,0x464a4641,0xf2404653,0xf8cd444a,0x9600b018,0xfaf6f7fc,
+0x46214628,0xf7fc2244,0x4628fa93,0x22804621,0xfa7ef7fc,0xe8bdb00a,
+0x46c08f70,0x0001b500,0x00019d8c,0x4ff0e92d,0xb089b2ca,0x92014607,
+0xf7fd9100,0x4638f905,0xff5ef7ff,0x461a2300,0xf8dd49b3,0x58508004,
+0x90074540,0x3301d004,0x2b0e321c,0xe21fd1f4,0xfb03241c,0x46381404,
+0x7a2221a2,0xf9f8f7fc,0x463821a4,0xf7fc7a62,0x21a6f9f3,0x7aa24638,
+0xf9eef7fc,0x463821a1,0xf7fc7ae2,0x21b4f9e9,0x7b224638,0xf9e4f7fc,
+0x463821b6,0xf7fc7b62,0x21d0f9df,0x7ba24638,0xf9daf7fc,0x463821d3,
+0xf7fc7be2,0x21d6f9d5,0x7c224638,0xf9d0f7fc,0x463821d9,0xf7fc7c62,
+0x21dff9cb,0x7ca24638,0xf9c6f7fc,0xf44f4638,0x7d227180,0xf9c0f7fc,
+0xf2404638,0x7d621103,0xf9baf7fc,0x46387da2,0x1115f240,0xf9b4f7fc,
+0x4638210f,0xf9bef7fc,0x021ef040,0x210f9004,0xb2924638,0xf9a8f7fc,
+0xf8d74b82,0x68605df4,0xbf8c429d,0x0b02f04f,0x0b01f04f,0x13b4f640,
+0xd9014298,0xe0000040,0x4e7b0080,0x46312210,0xf8d79002,0xf7fd0df4,
+0x4631f85b,0x46282210,0xf856f7fd,0xf106fb0b,0x90032210,0xf7fd4628,
+0x2403f84f,0x22104621,0x98029006,0xf848f7fd,0xf904fb05,0x217940a5,
+0x90052202,0xf7fc4638,0x4b6af973,0xfb0b217c,0xfbb5f303,0x3301f3f3,
+0x3b01085b,0xfa83fa5f,0x46382207,0x039aea4f,0xf99ef7fc,0x0801f10a,
+0x2260217d,0xea4f4638,0xf7fc134a,0xfb0bf995,0x4c5df308,0xf5f3fbb5,
+0xfbb4192c,0x3c01f4f6,0x217bb2e4,0x46384622,0xf94af7fc,0x98059a06,
+0x46290115,0xf7fd2210,0x3401f80f,0xf604fb08,0xf006fb00,0xdb0b2800,
+0x46299805,0xf7fd2210,0xfb00f803,0x13c0f006,0x10403001,0xe00e1e44,
+0x46299805,0xf7fc2210,0xea6ffff7,0xfb03030a,0xfb00f304,0x13c0f003,
+0xea6f3001,0xf3c40460,0x46382307,0x220f217d,0xf956f7fc,0xb2e24638,
+0xf7fc217e,0x9b02f915,0x4224f24f,0xf202fb03,0xf3f9fbb2,0xfb09011d,
+0x01182313,0x3501e002,0x0000ebc9,0xd2fa4548,0x22144649,0xffccf7fc,
+0x1307f3c5,0x21704604,0x221f4638,0xf934f7fc,0x4638012b,0xf44f2171,
+0xf00372f8,0xf7fc03f0,0xf3c4f92b,0x46384307,0x220f2171,0xf924f7fc,
+0x2207f3c4,0x21724638,0xf8e2f7fc,0x4638b2e2,0xf7fc2173,0x4638f8dd,
+0x22b9216c,0xf8d8f7fc,0x216d4638,0xf7fc2288,0x4638f8d3,0x2228216e,
+0xf8cef7fc,0x216f4638,0xf7fc2263,0x9805f8c9,0xf1002229,0xf5034374,
+0xfb030390,0x4813f302,0x6296f44f,0xf3f2fb93,0xf000fb05,0x6294f5a2,
+0x1103f242,0x14d8f503,0xff7ef7fc,0x1e531902,0xf3f4fb93,0xbfd42b3c,
+0x25012500,0x0063b185,0xf3f3fb92,0x46c0e010,0x0001bdf4,0x018cba80,
+0x000f4240,0x004c4b40,0x000f423f,0x000203a0,0x0364eb00,0xf3f4fb93,
+0xb2dc3b08,0x223f2168,0x46384623,0xf8c8f7fc,0x216801ab,0x46382240,
+0xf8c2f7fc,0x20649a03,0xf000fb02,0x22109905,0xff4af7fc,0xfb031c6b,
+0xf104f300,0xfb010108,0xf5b1f103,0xbfd40f16,0x24012400,0x22061c63,
+0xf302fb03,0xf0f3fb91,0x3f00f5b0,0x2300d501,0xf5a0e005,0x13db33c0,
+0xf3c33301,0x21690347,0x4638221f,0xf898f7fc,0x22202169,0x46380163,
+0xf892f7fc,0x46132204,0x46382181,0xf88cf7fc,0x2df4f8d7,0x429a4b52,
+0x4638d905,0x22022181,0xf870f7fc,0x4638e004,0x22fd2181,0xf858f7fc,
+0x22fe2181,0xf7fc4638,0x9b03f853,0x1f34f5b3,0x4638dd05,0x22022175,
+0xf85cf7fc,0x4638e004,0x22fd2175,0xf844f7fc,0x211b2203,0x46384613,
+0xf862f7fc,0xf7f22001,0x211bfce9,0x23002203,0xf7fc4638,0x2300f859,
+0x211a2240,0xf7fc4638,0x2164f853,0xf7fc4638,0xf000f821,0x216404f8,
+0x46384622,0xf80cf7fc,0xf7f22001,0x2164fccf,0x0204f044,0xf7fc4638,
+0x2001f803,0xfcc6f7f2,0xf0442164,0x46380206,0xfffaf7fb,0xf7f22001,
+0x2164fcbd,0x0207f044,0xf7fb4638,0xf44ffff1,0xf7f27096,0x2240fcb3,
+0x46384613,0xf7fc211a,0x4638f823,0x9a04210f,0xffe2f7fb,0x801cf8dd,
+0x707af44f,0xfca2f7f2,0xf7fc4638,0x9a00f9b7,0xf4029801,0xf5b34370,
+0x9b015f80,0x4c15b286,0xf446bf08,0x1e5d7680,0x2025f834,0xf24085f8,
+0x46386157,0x0485eb04,0xf81ef7fc,0xf44f4638,0x886261cb,0xf818f7fc,
+0x6bf84632,0xf7f521a0,0x6cbafd99,0xf388fa1f,0x33f0f8a2,0xf8872301,
+0x22003df0,0x033df241,0xb00954fa,0x8ff0e8bd,0x018cba80,0x0001b324,
+0xe92d6c83,0xf8d347f0,0xb0863120,0x0301f083,0x0a01f013,0xd1024607,
+0xf7f66bc0,0xf240f84d,0x463861da,0xffe4f7fb,0x46132240,0xf2404681,
+0x463861da,0xfffef7fb,0x413ef240,0xf7fb4638,0xf240ffd7,0x46065103,
+0xf7fb4638,0x2204ffd1,0x46804613,0x5103f240,0xf7fb4638,0x2300ffeb,
+0xf2404638,0xf44f413e,0xf7fb5200,0x220fffe3,0x46382300,0x413ef240,
+0xffdcf7fb,0x23b022f0,0xf2404638,0xf7fb413e,0xf44fffd5,0xf44f52e0,
+0x463853a0,0x413ef240,0xffccf7fb,0x4638210d,0xff60f7fb,0x413cf240,
+0x46384604,0xffa0f7fb,0x23282238,0xf2404605,0x4638413c,0xffbaf7fb,
+0x7200f44f,0x46384613,0x5103f240,0xffb2f7fb,0x46382300,0x5103f240,
+0x7200f44f,0xffaaf7fb,0x46132280,0xf44f4638,0xf7fb7191,0x2240ff69,
+0x46382300,0x7191f44f,0xff62f7fb,0x46382300,0x7191f44f,0xf7fb2220,
+0x220fff5b,0x0302ea04,0xf44f4638,0xf7fb7191,0x4638ff53,0x7191f44f,
+0x23002210,0xff4cf7fb,0x9300ab04,0x71c8f44f,0xab052200,0xf7fc4638,
+0xf44fffbf,0x46137200,0xf2404638,0xf7fb5103,0x4638ff75,0x5103f240,
+0x7200f44f,0xf7fb2300,0x2210ff6d,0x46384613,0x7191f44f,0xff2cf7fb,
+0x9300ab02,0x71c8f44f,0xab032200,0xf7fc4638,0x9b05ff9f,0x46389c03,
+0x413ef240,0x18e44632,0xff3af7fb,0xea082204,0x46380302,0x5103f240,
+0xff4cf7fb,0xea052238,0x46380302,0x413cf240,0xff44f7fb,0x46132240,
+0x46381064,0x7191f44f,0xff02f7fb,0xf640b220,0xf7f4213d,0x1240fc41,
+0x40c0f500,0x5155f244,0xf7f430cb,0x3080fc3d,0xf2401204,0x463861da,
+0xf7fb464a,0xf1baff0d,0xd1020f00,0xf7f56bf8,0x4620fe8f,0x4fcaf887,
+0xe8bdb006,0x46c087f0,0x4ff0e92d,0xb08b6c43,0xaa064605,0xf2406898,
+0xa9076ada,0xfc3cf7ee,0x46284651,0xfee8f7fb,0xf2402240,0x4613443e,
+0x46519005,0xf7fb4628,0x4621ff01,0xf7fb4628,0xf240fedb,0x90045903,
+0x46284649,0xfed4f7fb,0x90032204,0x46284649,0xf7fb4613,0x4628feef,
+0x23004621,0x5200f44f,0xfee8f7fb,0x46214628,0x230d220f,0xfee2f7fb,
+0x46214628,0x238022f0,0xfedcf7fb,0x483cf240,0x46214628,0x52e0f44f,
+0x5380f44f,0xfed2f7fb,0x46284641,0xfeacf7fb,0x1621f240,0x23202238,
+0x46414607,0xf7fb4628,0x4631fec5,0xf7fb4628,0x4631fe59,0x220f4683,
+0x23044628,0xfe80f7fb,0x7200f44f,0x46494628,0xf7fb4613,0x4628feb3,
+0x23004649,0x7200f44f,0xfeacf7fb,0x9300ab08,0xab092128,0x46282200,
+0xfee6f7fc,0x46214628,0xf7fb9a04,0x9c03fe85,0xea042204,0x46280302,
+0xf7fb4649,0x2238fe97,0x0302ea07,0x46414628,0xfe90f7fb,0x46314628,
+0xf7fb465a,0x9a05fe15,0x46514628,0xfe6cf7fb,0x0024f9bd,0x6166f246,
+0xfb8af7f4,0x61f4f247,0xfb8af7f4,0xf6476c6b,0xeb0464b1,0x990724a0,
+0x9a066898,0xfb84f7ee,0xb00b1260,0x8ff0e8bd,0x4ff0e92d,0x9108b0b9,
+0x1108f89d,0x46144607,0xf89d9107,0xf7fcb10c,0x2101f981,0x46389009,
+0xf9aef7fd,0x21014638,0xfcd2f7fd,0x41eaf240,0xf7fb4638,0xf240fe31,
+0x901141eb,0xf7fb4638,0x2155fe2b,0x46389012,0xfde0f7fb,0x719cf44f,
+0x46389013,0xfddaf7fb,0x90142105,0xf7fc4638,0xb15cfa61,0xb12b7a23,
+0xf9944638,0xf7fe1009,0xe003f9c3,0x46214638,0xf8c8f7fc,0x4638214c,
+0xfdc4f7fb,0x900c21f3,0xf7fb4638,0x6c7bfdbf,0x689b900d,0xf5a36a5b,
+0x3b0d639e,0xd8092b01,0x21f34638,0x23102218,0xfddef7fb,0x21f34638,
+0xe0022202,0x21f34638,0x46132218,0xfdd4f7fb,0xf7f56bf8,0x2802f87f,
+0x4638d104,0x2230214c,0xe0032320,0x214c4638,0x23102230,0xfdc4f7fb,
+0x46382100,0xfa30f7fc,0x6131f240,0xf7fb4638,0x2215fdd3,0x900a4613,
+0x6131f240,0xf7fb4638,0xf240fded,0x463861d6,0xfdc6f7fb,0x22032300,
+0xf240900b,0x463861d6,0xfde0f7fb,0x61daf240,0xf7fb4638,0x228ffdb9,
+0xf2409010,0x463861da,0xfdcaf7fb,0xf04f2607,0xab360801,0x80c4f8cd,
+0x96329330,0x3009f994,0x0920f04f,0x7310f503,0xf2409333,0xf2404a56,
+0x46384357,0xf240a930,0xf8cd4255,0xf8cd90d0,0xf7fba000,0x9a36fe41,
+0x00d24638,0xf2409236,0xb2926171,0xfd94f7fb,0x46382103,0xfd42f7fb,
+0x900e2121,0xf7fb4638,0x2103fd3d,0x900f2218,0xf7fb4638,0x2121fd29,
+0x4638221e,0xfd24f7fb,0xac1b4ba2,0xcd0f461d,0xe895c40f,0xe884000f,
+0x2221000f,0xf2404638,0xf7fb6189,0x2303fd71,0x4638221f,0x617af240,
+0xfd84f7fb,0xf2404638,0xf2416173,0xf7fb7270,0x22c8fd63,0xf2404638,
+0xf7fb6179,0x4638fd5d,0x6174f240,0x4244f240,0xfd56f7fb,0x4638223f,
+0x6175f240,0xfd50f7fb,0xf44f4638,0xf24061ce,0xf7fb6281,0x4638fd49,
+0x6182f240,0x42d8f640,0xfd42f7fb,0xf2404638,0xf24c619b,0xf7fb125c,
+0x221bfd3b,0xf2404638,0xf7fb619c,0x2249fd35,0xf2404638,0xf7fb618c,
+0x2227fd2f,0xf2404638,0xf7fb617f,0x22fffd29,0xf44f4638,0xf7fb61d0,
+0x4638fd23,0x6181f240,0x123ff240,0xfd1cf7fb,0x463822ff,0x6183f240,
+0xfd16f7fb,0x46384642,0x618df240,0xfd10f7fb,0xf2404638,0xf240619d,
+0xf7fb72ff,0x2200fd09,0xf2404638,0xf7fb618a,0x2200fd03,0xf2404638,
+0xf7fb619f,0x4638fcfd,0x61d4f44f,0xf7fb4632,0x2200fcf7,0xf2404638,
+0xf7fb61a4,0x2200fcf1,0xf2404638,0xf7fb61a5,0x2208fceb,0xf2404638,
+0xf7fb619a,0x4638fce5,0x6187f240,0xf7fb2260,0x4638fcdf,0x6142f240,
+0xf7fb4632,0x4638fcd9,0x6177f240,0xf7fb2200,0x2315fcd3,0xab1b932d,
+0x932b2400,0xf2404638,0xa92b4357,0x4255f240,0xf8cd2508,0x952c90bc,
+0xf8cd942e,0xf7fba000,0x4638fd2d,0x617df240,0xf7fb4622,0x4638fcb9,
+0x618bf240,0x7280f44f,0xfcb2f7fb,0x0904f04f,0x240046a0,0xbfa82d0f,
+0x4638250f,0x4622b2a9,0x94004623,0x94029401,0xf7fd9403,0x4626fb07,
+0x1c73e003,0x2e05b2de,0x4638d01f,0xfd98f7ff,0x63aff44f,0xf44f9301,
+0x21004382,0xf5a39302,0x22014381,0x91034604,0x91059304,0x46383316,
+0x92009908,0xff22f7fc,0xf7ff4638,0xf897fd81,0x429c3ff9,0x4298dbdd,
+0x9a08dbdb,0xf240bb1a,0x463861ba,0xfc6cf7fb,0x61bbf240,0x4638b204,
+0xfc66f7fb,0xb2a401a4,0x1489f344,0xf404fb04,0x0009f340,0x4300fb00,
+0x5f00f5b3,0xfa5fda07,0x2b04f388,0x0505ebc9,0x3d01d105,0xf5b3e003,
+0xdb084f80,0xf108444d,0xf1b80801,0xd0020f05,0x0959ea4f,0x2400e79d,
+0x71e5ea25,0x1fa0f8c7,0xb2894638,0x46234622,0x94019400,0x94039402,
+0xfaa4f7fd,0xf7fc4638,0xe003feaf,0x0001b368,0xd82c2c04,0xf7ff4638,
+0x2301fd33,0xf44f9300,0x930163af,0x4382f44f,0xf5a39302,0x22004381,
+0x93044606,0x23464638,0x92039908,0xf7fc9205,0x4638febd,0xfd1cf7ff,
+0x3ff9f897,0x429e4605,0x4298db01,0xf44fda05,0xf7f27096,0x1c63f87b,
+0xf897b2dc,0x429e3ff9,0x429ddbd2,0xf1bbdbd0,0xf0400f01,0xf2408103,
+0x463861ba,0xfbf8f7fb,0x61bbf240,0x46389015,0xfbf2f7fb,0x64aff44f,
+0x21009016,0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,
+0xb29474ff,0xb2991c4b,0xd1ef296e,0xf8ada923,0x4608408c,0x4382f44f,
+0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29474ff,0x4f02f821,
+0x031ef100,0xd1ed4299,0xf2404638,0xf7fb61b7,0xf04ffbc3,0x4606097d,
+0x0a01f04f,0x0b00f04f,0x905cf8cd,0xf10be0b5,0xfa5f0301,0xf1bbfb83,
+0xf0000f10,0x260081ee,0x2e04e001,0x4638d82a,0xfcb2f7ff,0x4382f44f,
+0x99162201,0x9b159302,0x92039200,0x46803a01,0x91059304,0x46384613,
+0x94019908,0xfe3ef7fc,0xf7ff4638,0xf897fc9d,0x46053ff9,0xdb014598,
+0xda054298,0x7016f44f,0xfffcf7f1,0xb2de1c73,0x3ff9f897,0xdbd44598,
+0xdbd2429d,0xf2404638,0xf7fb61b7,0xf410fb7d,0x46064f00,0xf1bad02c,
+0xf0000f00,0xf1a981b2,0xb2da0305,0x429a9b17,0x1e53d101,0xf1a2b2da,
+0xb2db036e,0xd9032b0f,0x64aff44f,0xe0142000,0xeb01a938,0xf5a30342,
+0x881c7398,0xf44fe058,0xfb044382,0x1399f303,0x73fef64f,0xbf8c4299,
+0x74fff64f,0x1c43b28c,0x4290b298,0xe047d1ef,0x5f00f5b0,0xf44fd311,
+0xfb044382,0x139af303,0x73fef64f,0xf109429a,0xbf940301,0xf64fb294,
+0xb2da74ff,0x0a00f04f,0x4638e032,0x01dff10d,0x02def10d,0xf82cf7fc,
+0x30dff99d,0x005b2202,0xb2dd3301,0x3b01b26b,0xf3f2fb93,0x033df1c3,
+0xe0def89d,0x2100b2d8,0xf44fe00d,0xfb044382,0x139af303,0x73fef64f,
+0xbf8c429a,0x74fff64f,0x1c4bb294,0x4281b299,0xea4fd1ef,0xf88d034e,
+0xeb0930de,0xf88d0300,0xb2da50df,0x905cf8cd,0xf4164691,0xf43f4f00,
+0xf1baaf46,0xf47f0f00,0xe136af42,0x02def10d,0xf10d4638,0xf7fb01df,
+0x2100ffef,0x7000f44f,0xfa16f7f1,0x46832100,0xf7f12080,0x2300fa11,
+0x24004682,0x400af803,0x2b803301,0xf99dd1f9,0x465b20de,0x10dff99d,
+0xf8cd4638,0xf7fba000,0xf240ffa5,0x463861ba,0xfad2f7fb,0x61bbf240,
+0x46389019,0xfaccf7fb,0x65aff44f,0x46219018,0x4382f44f,0xf303fb05,
+0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29575ff,0xb2991c4b,0xd1ef2946,
+0xf1a29a07,0xe0710346,0x4382f44f,0xf303fb05,0xf64f139a,0x429a73fe,
+0xf64fbf8c,0xb29575ff,0xe0012600,0xd82a2e04,0xf7ff4638,0xf44ffba9,
+0x22014382,0x93029918,0x92009b19,0x3a019203,0x93044680,0x46139105,
+0x99084638,0xf7fc9501,0x4638fd35,0xfb94f7ff,0x3ff9f897,0x45984604,
+0x4298db01,0xf44fda05,0xf7f17016,0x1c73fef3,0xf897b2de,0x45983ff9,
+0x429cdbd4,0x4638dbd2,0x01dff10d,0x02def10d,0xff6ef7fb,0x20def99d,
+0xf99d465b,0x463810df,0xa000f8cd,0xff36f7fb,0x20dff99d,0x30def99d,
+0x32010052,0xf88db2d2,0xb25220df,0x2a00005b,0x30def88d,0x2320dd10,
+0x23189334,0xab369332,0xf2409330,0x92334356,0x46389300,0xf240a930,
+0x33014255,0xfaf4f7fb,0x30dff99d,0xd0062b7f,0x33fff109,0xf983fa1f,
+0x0f00f1b9,0xf44fd188,0x93352300,0x932bab35,0x932d2318,0x22013308,
+0xf240932f,0x922c4356,0x9300922e,0xa92b4638,0x4255f240,0xf7fb3301,
+0x2503fa9d,0x3005f81a,0x2b01ae2b,0xf85bd10c,0x46383025,0xf2409335,
+0x93004356,0xf2404631,0x33014255,0xe014952e,0x932e1eab,0x4456f240,
+0x46314638,0x4255f240,0x4357f240,0xf7fb9400,0x952efab3,0x46389400,
+0xf2404631,0xf2404255,0xf7fb4357,0x1cabfa73,0x2d81b2dd,0x2600d1d2,
+0xad2b1c73,0x4456f240,0x4638932e,0xf2404629,0xf2404255,0x94004357,
+0xfa96f7fb,0x932e1cf3,0x46294638,0x4255f240,0x4357f240,0xf7fb9400,
+0x2300fa8b,0x962e9335,0x46294638,0x4255f240,0x4357f240,0x94003602,
+0xfa48f7fb,0xd1d72e7e,0x46596c7b,0xf44f6c98,0xf7f17200,0x6c7bfacd,
+0x6c984651,0xf7f12280,0x4638fac7,0x9a0e2103,0xf96af7fb,0x21214638,
+0xf7fb9a0f,0x4638f965,0xf2409a11,0xf7fb41ea,0x4638f9bb,0xf2409a12,
+0xf7fb41eb,0x4638f9b5,0x9a132155,0xf954f7fb,0x9a144638,0x719cf44f,
+0xf94ef7fb,0x9a0a4638,0x6131f240,0xf9a4f7fb,0x9a0b4638,0x61d6f240,
+0xf99ef7fb,0x46389b10,0x0201f043,0xf240b292,0xf7fb61da,0x2101f995,
+0xf7fb4638,0x4638fde1,0xfdc4f7fb,0x214c4638,0xf7fb9a0c,0x4638f92d,
+0x9a0d21f3,0xf928f7fb,0xf44f2300,0x46386200,0x414cf240,0xf996f7fb,
+0x21004638,0xf80cf7fd,0x21004638,0xfce0f7fc,0x21004638,0xfeb4f7fc,
+0xf2404638,0x2201413b,0xf7fb2300,0x4638f983,0xf7fb9909,0xb039fc67,
+0x8ff0e8bd,0x41ffe92d,0x460e4605,0x461c4617,0x238022e0,0x6182f44f,
+0xf970f7fb,0xf8d36cab,0xf0833120,0xf0130301,0xd0020801,0xf7f56be8,
+0x68b2f8d3,0x3201b90a,0x6be8e00b,0xb29221dc,0xfec8f7f4,0x6be88972,
+0xf7f421de,0xf240fec3,0x68f31201,0xb1a36be8,0xf7f421d8,0x6872febb,
+0x00d26be8,0x21da3a7c,0xf7f4b292,0x68f3feb3,0x93006be8,0x0111f106,
+0x463b4622,0xfec4f7f6,0xf042e00a,0x21da0408,0xf7f488b2,0x6be8fea3,
+0x462221d8,0xfe9ef7f4,0x21dc6be8,0xfcc8f7f4,0xf8ad2400,0xe00c000e,
+0xf7f12064,0x21dcfd77,0xf7f46be8,0x1c63fcbd,0x2c64b2dc,0x000ef8ad,
+0xf8bdd003,0x2b00300e,0x6be8d1ee,0x220021d8,0xfe80f7f4,0x0f00f1b8,
+0x6be8d002,0xf950f7f5,0xf7f46be8,0xf44ffb7f,0x28026182,0x2320bf14,
+0x22e02360,0xf7fb4628,0xe8bdf901,0x46c081ff,0x4ff0e92d,0xf5ad2280,
+0x46077d01,0xf2402300,0xf7fb6131,0x2300f8f3,0x46382280,0x6176f240,
+0xf8ecf7fb,0xf8d36cbb,0xf0833120,0xf0130301,0x93040301,0x6bf8d102,
+0xf922f7f5,0x463821a5,0x2ffcf8b7,0xf864f7fb,0x4638218e,0x2ffef8b7,
+0xf85ef7fb,0x5380f507,0x881a21a2,0xf7fb4638,0xf241f857,0x21940302,
+0x46385afa,0xf850f7fb,0x0304f241,0x5afa2193,0xf7fb4638,0xf241f849,
+0x21a40306,0x46385afa,0xf842f7fb,0x0308f241,0x21a35afa,0x4638ac10,
+0xf83af7fb,0x46202100,0x7280f44f,0xfe3cf7ee,0x93732307,0x93753319,
+0x2318ae71,0x4556f240,0x93729471,0x46382440,0xf2404631,0xf2404255,
+0xf04f4357,0x94740880,0xf7fb9500,0x4638f8e7,0xf2404631,0xf2404255,
+0x94724357,0xf8cd9500,0xf7fb81d0,0x22fff8db,0x46382338,0x41a7f240,
+0xf880f7fb,0xf2402300,0x46426131,0xf7fb4638,0x4638f879,0xfad0f7fc,
+0x230122ff,0xf44f4638,0xf7fb6195,0x230af86f,0xf88d2501,0x332831f6,
+0x231e9365,0xf2429366,0x24007310,0x9300226c,0xf50d4638,0xa96473fb,
+0x94679564,0x41a0f88d,0xfedcf7ff,0x41abf240,0xf7fb4638,0xf3c0f831,
+0x90052006,0x61daf240,0xf44f4638,0x46235280,0xf848f7fb,0x464322e0,
+0x6182f44f,0xf7fb4638,0x4638f841,0xfb40f7fb,0x41a4f240,0xf7fb4638,
+0x4621f817,0x46389002,0xfb70f7fd,0xf8c79b05,0xb2db4fa4,0x93034638,
+0x31edf88d,0x51ecf88d,0xfb48f7fb,0x900c4629,0xf7fc4638,0x4638fb75,
+0xf7fc4629,0xf240fe99,0x463841ea,0xfff8f7fa,0x41ebf240,0x46389009,
+0xfff2f7fa,0x90082155,0xf7fa4638,0xf44fffa7,0x9007719c,0xf7fa4638,
+0x2105ffa1,0x46389006,0xfc28f7fb,0x31ecf89d,0x4638b12b,0x11edf99d,
+0xfb8af7fd,0x4638e003,0xf7fba979,0x214cfa8f,0xf7fa4638,0x21f3ff8b,
+0x4638900b,0xff86f7fa,0x900a6c7b,0x6a5b689b,0x639ef5a3,0x2b013b0d,
+0x4638d809,0x221821f3,0xf7fa2310,0x4638ffa5,0x220221f3,0x4638e002,
+0x221821f3,0xf7fa4613,0x6bf8ff9b,0xfa46f7f4,0xd1042802,0x214c4638,
+0x23202230,0x4638e003,0x2230214c,0xf7fa2310,0x4638ff8b,0xf7fb2100,
+0xf240fbf7,0x46386131,0xff9af7fa,0x46132215,0x6131f240,0x46384683,
+0xffb4f7fa,0x61d6f240,0xf7fa4638,0x2300ff8d,0xf2402203,0x468261d6,
+0xf7fa4638,0xf240ffa7,0x463861da,0xff80f7fa,0x61daf240,0x4681228f,
+0xf7fa4638,0xab7fff91,0x2301936c,0x3306936d,0xf99d936e,0x463831ed,
+0x7310f503,0x2320936f,0xf2409370,0x93004356,0x3301a96c,0x4255f240,
+0xf80ef7fb,0x46389a7f,0x927f00d2,0x6171f240,0xf7fab292,0x2103ff61,
+0xf7fa4638,0x2121ff0f,0x46384606,0xff0af7fa,0x22182103,0x46384680,
+0xfef6f7fa,0x21214638,0xf7fa221e,0x2500fef1,0x4638462c,0xf848f7ff,
+0x50e0ab50,0x3404182d,0x7061f44f,0xfbaaf7f1,0xd1f22c40,0x112a2000,
+0xab504601,0x310458cb,0xbfb84298,0x429a4618,0x461abfa8,0xd1f42940,
+0xf8871e83,0x21033ff9,0x2ffaf887,0x46324638,0xfecaf7fa,0x46382121,
+0xf7fa4642,0x4638fec5,0x41eaf240,0xf7fa9a09,0x4638ff1b,0x41ebf240,
+0xf7fa9a08,0x2155ff15,0x9a074638,0xfeb4f7fa,0xf44f4638,0x9a06719c,
+0xfeaef7fa,0xf2404638,0x465a6131,0xff04f7fa,0xf2404638,0x465261d6,
+0xfefef7fa,0x0201f049,0x4638b292,0x61daf240,0xfef6f7fa,0x46382101,
+0xfb42f7fb,0xf7fb4638,0x214cfb25,0x9a0b4638,0xfe8ef7fa,0x463821f3,
+0xf7fa9a0a,0x2300fe89,0x6200f44f,0xf2404638,0xf7fa414c,0x2100fef7,
+0xf7fc4638,0x2100fd6d,0xf7fc4638,0x2100fa41,0xf7fc4638,0x2201fc15,
+0x46382300,0x413bf240,0xfee4f7fa,0x4638990c,0xf9c8f7fb,0xf7fb4638,
+0xf240f9fd,0x900d41a4,0xf7fa4638,0xf240feb5,0x900f413b,0xf7fa4638,
+0xf3c0feaf,0x900e1080,0x4638b120,0x71f7f50d,0xfa5ef7fb,0xf7fc4638,
+0x4638ffab,0xf7fd2100,0x2301f9fd,0x31e2f88d,0xf04f9b03,0xf88d0800,
+0x9b0531e3,0x2660f64e,0x46a9b2dd,0x46b346c2,0x23db2100,0x93002401,
+0x460b4638,0x72edf50d,0xf7ff9401,0xab7ff839,0x2318936c,0x3308936e,
+0x335f9370,0xf240936f,0x93004356,0x191ba96c,0xf2404638,0x946d4255,
+0xff1ef7fa,0xf3439b7f,0xb911010b,0x2260f64e,0x2264e00a,0x330bf343,
+0xf302fb03,0xf3f1fb93,0x72e3ea83,0x72e3eba2,0xdc0242b2,0x0a00f04f,
+0xf10ae006,0xfa5f0301,0xf1bafa83,0xd0160f02,0x31e3f89d,0xbfdc455a,
+0x51e3f89d,0x3b044693,0xf013b2db,0xf88d0f80,0xd10831e3,0x0301f108,
+0xf883fa5f,0x0f04f1b8,0x4616d001,0x454de7ac,0xebc5d007,0x2b100309,
+0x1d2bd101,0x1cabe000,0xf04fb2dd,0xf64e0800,0xf88d2660,0x46c151e3,
+0x210046b2,0x240123db,0x46389300,0xf50d460b,0x940172ed,0xffd4f7fe,
+0x936cab7f,0x936e2318,0x93703308,0x936f335f,0x4356f240,0xa96c9300,
+0x4638191b,0x4255f240,0xf7fa946d,0x9b7ffeb9,0x010bf343,0x2264b181,
+0x330bf343,0xf302fb03,0xf3f1fb93,0x72e3ea83,0x72e3eba2,0x7ffaf5b2,
+0xf89dda04,0xe02451e3,0x2260f64e,0xdc0242b2,0x0900f04f,0xf109e006,
+0xfa5f0301,0xf1b9f983,0xd0160f02,0x31e3f89d,0xbfbc4552,0x51e3f89d,
+0x3b014692,0xf013b2db,0xf88d0f80,0xd10831e3,0x0301f108,0xf883fa5f,
+0x0f05f1b8,0x4616d001,0x2400e7a7,0x930023db,0x46234638,0xf50d4621,
+0xf88d72ed,0x940151e3,0xff7af7fe,0xb1239b0e,0xf50d4638,0xf7fb71f7,
+0x4638f879,0xf7fb990d,0x9b0ff8c5,0xf4034638,0xf7fd4160,0x4638f913,
+0xfebaf7fc,0x46389b02,0x4160f403,0xf90af7fd,0x46382301,0x6195f44f,
+0xf7fa22ff,0x9b04fdc7,0x6bf8b913,0xfd30f7f4,0xf7f46bf8,0x22e0f833,
+0xbf142802,0x23602320,0x6182f44f,0xf7fa4638,0x2280fdb5,0x46134638,
+0x6131f240,0xfdaef7fa,0x5280f44f,0x46134638,0x61daf240,0xfda6f7fa,
+0x7200f44f,0x46134638,0x6131f240,0xfd9ef7fa,0x7280f44f,0x46134638,
+0x6131f240,0xfd96f7fa,0x033df241,0x54fa2201,0x21a54638,0xf7fa3205,
+0x4638fd17,0x220f218e,0xfd12f7fa,0x21a24638,0xf7fa4622,0x4638fd0d,
+0x22ff2194,0xfd08f7fa,0x21934638,0xf7fa22ff,0x4638fd03,0x220c21a4,
+0xfcfef7fa,0x21a34638,0xf7fa2266,0xf50dfcf9,0xe8bd7d01,0x46c08ff0,
+0x4604b510,0xfad6f7fe,0x46208da1,0xf8f6f7fe,0xf7fa4620,0x4620feff,
+0xfe3cf7fa,0xf0026be0,0xb978fe31,0xf7f36be0,0xb958fcfb,0xf7fd4620,
+0x4620fc89,0xfc50f7ff,0xf7fe4620,0x4620fd31,0xff10f7fc,0x46c0bd10,
+0xb51029e0,0x4604460b,0xf06fdd02,0xe0210012,0x6330f443,0xbfd4290e,
+0x5100f44f,0x5180f44f,0xb2894319,0xffc8f7ff,0x23016c62,0x3025f882,
+0xf7fb4620,0x4620f82d,0xf7fd2100,0x2240f863,0xf2404620,0x46136176,
+0xfd20f7fa,0xf7fd4620,0x2000fc55,0x46c0bd10,0x41f0e92d,0x4605b092,
+0x8064f8dd,0x461c981a,0x461fb90b,0x681fe000,0xf00029a8,0xdc138091,
+0xf000295c,0xdc08819e,0xf000293c,0x294a80e5,0x8092f000,0xd021291b,
+0x295ee01d,0xf2c0d027,0x295f81bd,0xe016d038,0xd07129c3,0x29aadc05,
+0xdb70d047,0xd06629c2,0x29d4e00d,0x8221f000,0x29d3dc03,0x8211f000,
+0x29dce005,0x81f0f000,0xf00029dd,0xf06f81f3,0xe2410616,0x7c5c6c6b,
+0xf0402c00,0x46288230,0xfce2f7fa,0x2301e1fb,0x70032a07,0x2100dc01,
+0xf8d8e001,0x6be81004,0xfd4cf7f3,0x28004606,0x822af040,0xb2b94628,
+0xfc9ef7fa,0xe2236020,0x2a072301,0xdc017003,0xe0012100,0x1004f8d8,
+0xf7f36be8,0x4606fd37,0xf0402800,0x46288215,0x0c3ab2b9,0xfc90f7fa,
+0x6be8e20e,0xf7f32100,0x4606fd29,0xf0402800,0x60208207,0x2b0669ab,
+0x8202f040,0x0047f88d,0x0046f88d,0x0246f10d,0xf10d4628,0xf7fb0147,
+0xf99dfa49,0xf99d2047,0xb2923046,0xea43b29b,0x60232302,0x6be8e1ec,
+0xf7f32100,0xe00efd07,0x2b028823,0x6c6bd879,0x2b007c5b,0x81d9f000,
+0x6be82100,0x460b460a,0xf7f39100,0x4606fd09,0xf0402800,0xe1c981d5,
+0x21006be8,0xfceef7f3,0x28004606,0x81ccf040,0x7c536c6a,0xf0402b00,
+0xf89281ba,0xb1133025,0xf7fb4628,0xb987fb7b,0xf7fc4628,0x6be8f859,
+0xfec8f7f3,0x6182f44f,0xbf142802,0x23602320,0x462822e0,0xfc4af7fa,
+0x4628e1ae,0x22014639,0xfefef7ff,0x2601b108,0x4628e1a6,0x238022e0,
+0x6182f44f,0xfc3af7fa,0x24404ba5,0x2315930c,0x2310930e,0xf2409310,
+0x93004356,0xa90c4628,0xf2403301,0x940d4255,0xf7fa960f,0x4628fc7b,
+0xf64f4621,0x463372ff,0xf7fc9600,0xe183f865,0x7c596c6b,0xf0402900,
+0x6be88172,0xfc9af7f3,0x28004606,0x8178f040,0x3004f8d8,0xf0036cac,
+0x2902017f,0x2904d008,0x290bd006,0x2916d004,0xf06fd002,0xe1670601,
+0xf8936c6b,0xb1133025,0xf7fb4628,0xbb9ffb1b,0x210a4628,0x2d1af8b5,
+0xfbdaf7fa,0xf2404628,0x463a414b,0xfbd4f7fa,0x46394628,0xff3cf7fb,
+0x303af895,0x7d1af8a5,0x8d2ab14b,0x0350f242,0xd104429a,0x21514628,
+0xf7fa2204,0x6c6bfb8f,0x3388f8d3,0x0f02f013,0x813af000,0xf8b56cab,
+0xf44f2d1c,0xf8a3707a,0xf8b5249c,0xf8a32d20,0xf7f1249e,0xe12bf817,
+0xf8d36c6b,0xf0133388,0xd01d0f02,0xf44f6caa,0xf8b2707a,0xb29b349c,
+0x3d1cf8c5,0x349ef8b2,0xf8c5b29b,0xf8b43d20,0xf423349c,0x041b7300,
+0xf8a40c1b,0xf8b4349c,0xb29b349e,0x7300f443,0x349ef8a4,0xfff2f7f0,
+0x6be8ac02,0xf7f64621,0x6be8f849,0xf7f54621,0x4628f919,0x22014639,
+0xfe4ef7ff,0x28004606,0x80f6f040,0x303af895,0x8d2ab153,0x0350f242,
+0xd105429a,0x21514628,0x72fbf64f,0xfb24f7fa,0x3d1af8b5,0x210ab963,
+0xf7fa4628,0xf240fb59,0xf8a5414b,0xf64f0d1a,0x462872ff,0xfb58f7fa,
+0x21014628,0xfec0f7fb,0x210a4628,0x7294f44f,0x6be8e073,0xf7f32100,
+0x4606fbe9,0xf0402800,0x6c6b80c7,0x3025f893,0x4628b113,0xfa7af7fb,
+0x4628b947,0xff58f7fb,0xf44f4628,0xf7fc4160,0xe0b5fe8d,0x46284632,
+0xf7ff4639,0x4606fe05,0xf0402800,0x462880ad,0x22704631,0xf7fb4633,
+0x4628ffd1,0xf7fc2114,0xe0a1fecb,0x7c596c6b,0xf0402900,0x6be88090,
+0xfbb8f7f3,0x28004606,0x8096f040,0xf8936c6b,0xb1133025,0xf7fb4628,
+0xb997fa49,0xf2404628,0x4632414b,0xfb08f7fa,0x210a4628,0x2d0af8b5,
+0xfb08f7fa,0x46314628,0xfe6af7fb,0x6d0af8a5,0x4628e07a,0x22014639,
+0xfdcaf7ff,0x28004606,0xf8b5d172,0xb92b3d0a,0x210a4628,0xfae4f7fa,
+0x0d0af8a5,0x21014628,0xfe52f7fb,0xf2404628,0xf64f414b,0xf7fa72ff,
+0x4628fadf,0xf44f210a,0xf7fa720a,0xe057fae9,0xf8936c6b,0xe02236fe,
+0x0001c4b0,0xd84d2f64,0xf8836c6b,0x6c6b76fe,0x2b007c5b,0x6be8d044,
+0xfbb8f002,0x28004604,0x4628d13e,0x31fff04f,0xf7fd4622,0x4626fd5d,
+0x696be03a,0x6022691a,0x3db8f8d5,0x0f02f013,0xf042d02e,0x60230380,
+0x2f03e02a,0x696ad82a,0x42bb6913,0x6c6bd024,0x7c5b6117,0x6be8b303,
+0xfafef7f4,0x4628b127,0x22012100,0xf9def7fb,0x2201696b,0x69194628,
+0xf9d8f7fb,0x6be82800,0x2600bf14,0x0602f06f,0xfa16f7f4,0xf06fe00c,
+0xe0090604,0x060cf06f,0xf06fe006,0xe0030603,0xe0012600,0x061cf06f,
+0xb0124630,0x81f0e8bd,0xf890b570,0x46045038,0xd1402d00,0x26016c83,
+0x6038f880,0x3120f8d3,0xf8c04631,0xf7fa5d50,0x6be0fabf,0x462a8da1,
+0xfabcf7f9,0x4631b938,0xf7f96be0,0x4601fadf,0xf7fb4620,0x8da3f8f5,
+0x6340f403,0x6f40f5b3,0x2114bf14,0xf8942128,0x42993030,0x6be0d002,
+0xfcd4f7f4,0x46204631,0xf868f7fb,0xf0004620,0x4620fa27,0x5037f884,
+0xfc78f7fd,0x462a6963,0x46206919,0xf97ef7fb,0x46206963,0xf7fd7d19,
+0xf884fc3d,0xbd705038,0x4ff0e92d,0xb0914605,0x002cf890,0xfca6f7f3,
+0x4d54f895,0xbb244680,0xf7f36be8,0x2802fcb3,0xf04fd108,0xf8ad0304,
+0xf04f3030,0xf8ad030c,0xe0093032,0x0307f04f,0x3030f8ad,0x030ff04f,
+0x3032f8ad,0x030ef04f,0xa90c4628,0x3034f8ad,0x4036f8ad,0xfcbaf7fa,
+0x21964628,0xfd06f7fa,0xf8b5e1dc,0xb2832f9a,0xd104429a,0x46b92700,
+0x46ba46bb,0xf640e05c,0x429813c3,0xf995d838,0x2b043fca,0xf9b5dc0c,
+0xf9b57066,0xf9b5a068,0xf895906a,0xf8952f8d,0xf8953f8e,0xe01a1f8f,
+0xdc0c2b36,0x7060f9b5,0xa062f9b5,0x9064f9b5,0x2f8af895,0x3f8bf895,
+0x1f8cf895,0xf9b5e00b,0xf9b5706c,0xf9b5a06e,0xf8959070,0xf8952f90,
+0xf8953f91,0xf4421f92,0xea425200,0xea421203,0x46282281,0x413ef240,
+0xf7fab292,0xe01bf9bd,0x43c8f241,0xd8064298,0x7072f9b5,0xa074f9b5,
+0x9076f9b5,0xf241e010,0x42986344,0xf9b5d806,0xf9b57078,0xf9b5a07a,
+0xe005907c,0x707ef9b5,0xa080f9b5,0x9082f9b5,0x8f9af8a5,0x0b01f04f,
+0xf7fb4628,0x2307fcc5,0x33199309,0xab0e930b,0x23019307,0x3b019308,
+0xe00e930a,0x4356f240,0x46289300,0xa9073301,0x4255f240,0xf9f2f7fa,
+0x33019b0a,0x9b0e930a,0x930e3301,0x2b3f9b0e,0x22ffd9ec,0x46284613,
+0x41a5f240,0xf98ef7fa,0xf2404628,0xf44f41a5,0xf44f42e0,0xf7fa43a0,
+0x2300f985,0xf2404628,0xf44f41a5,0xf7fa62e0,0x223ff97d,0x4628231f,
+0x41a6f240,0xf976f7fa,0x23002201,0xf2404628,0xf7fa5103,0x2204f96f,
+0x46284613,0x5103f240,0xf968f7fa,0x46132210,0xf2404628,0xf7fa5103,
+0xf240f961,0x46281121,0xf8f4f7fa,0x02f3f000,0x1121f240,0xf0424628,
+0xf7fa0201,0x214cf8dd,0x46282202,0xf902f7fa,0xf2404628,0xf44f41f3,
+0xf7fa5280,0x2251f93d,0xf44f4628,0xf7fa718a,0x214cf8cb,0x23002201,
+0xf7fa4628,0x2238f901,0x46282300,0x413cf240,0xf934f7fa,0x4200f44f,
+0x46284613,0x41a6f240,0xf92cf7fa,0x46282300,0x6195f44f,0x427ff44f,
+0xf924f7fa,0x46282201,0x6195f44f,0xf904f7fa,0xf2404628,0x227f41a4,
+0xf7fa2300,0x4628f917,0x41a5f240,0x62e0f44f,0xf7fa2300,0xf44ff90f,
+0xf44f4260,0xf2404300,0x462841a4,0xf906f7fa,0xf7fa4628,0x4628fc05,
+0xf7fa2101,0xf44ffb6d,0x46135280,0xf2404628,0xf7fa414c,0xac02f8f7,
+0x46282300,0x414df240,0x4280f44f,0xf8eef7fa,0x49584620,0x6cae2214,
+0xfe9af7ed,0x6c284623,0x22142100,0xfb6ef7f4,0x0300f04f,0x3568f8a6,
+0x7380f44f,0x37c0f8a6,0x0341f04f,0x350cf8a6,0x2302f641,0x3514f8a6,
+0x0300f04f,0x3508f8a6,0x350af8a6,0x354cf8a6,0x0314f04f,0x356af8a6,
+0x0326f640,0x3568f8a6,0x0300f04f,0x3500f8a6,0xf04f2400,0xf8a603d0,
+0xe0023502,0xf7f0200a,0x3401fd05,0xd0092c1f,0x350ef8b6,0x0f80f013,
+0xe003d1f4,0xf7f0200a,0xe000fcf9,0x34012400,0xd0092c0b,0x350ef8b6,
+0x6f80f413,0xe003d0f2,0xf7f0200a,0xe000fceb,0x34012400,0xd0042c0b,
+0x3690f8b6,0x7f80f413,0x4628d1f2,0x41abf240,0xf86af7fa,0x4f00f410,
+0xf000d009,0x3b2003ff,0xf2404628,0x223f41a6,0xf7fab29b,0x4628f87f,
+0x414cf240,0x5280f44f,0x24002300,0xf876f7fa,0x7340f44f,0x4f9af8a5,
+0xf44f4628,0xf44f6195,0xf7fa427f,0xab0ff86b,0x23019307,0x940a9308,
+0x46494620,0x4653463a,0xfb72f7fa,0x4356f240,0x9300900f,0x33014628,
+0xf240a907,0xf7fa4255,0x9b0af8a9,0x33013401,0x930a2c40,0xf1bbd1e8,
+0xd1030f00,0x033df241,0xb1135ceb,0xf7fb4628,0x4628fefd,0x4160f44f,
+0xfb7cf7fc,0xe8bdb011,0x46c08ff0,0x0001b1a9,0x47f0e92d,0xf7fd4607,
+0x2101fd0f,0xf7fa4638,0x4638fc67,0xff00f7fb,0x41a2f240,0x46382202,
+0xa03cf8d7,0xf81cf7fa,0xf7f02001,0x4638fc73,0x41a2f240,0x72fdf64f,
+0xf808f7fa,0xf7f02001,0x4cc3fc69,0xb1706bf8,0xfa88f7f3,0xd10a2801,
+0x1c04f834,0x4f00f411,0x0489d011,0x2c02f814,0x0c894638,0xf834e009,
+0xf4111c04,0xd0064f80,0xf8140489,0x46382c01,0xf7f90c89,0xf834ff85,
+0xf64f2b04,0x429a73ff,0x2120d1dc,0x46382200,0xff7af7f9,0x22382108,
+0xf7f94638,0x2157ff9f,0x46382256,0xff70f7f9,0x21f32300,0x46382202,
+0xffa6f7f9,0x22002152,0xf7f94638,0x2220ff65,0x46382140,0xff60f7f9,
+0x33e4f241,0xf1b258fa,0xd0033fff,0x21434638,0xe002b292,0x21434638,
+0xf7f922ff,0x2105ff51,0x46382282,0xff4cf7f9,0x22502140,0xf7f94638,
+0x2143ff47,0x46382280,0xff42f7f9,0x2215214e,0xf7f94638,0x214fff3d,
+0x46382215,0xff38f7f9,0x2215214d,0xf7f94638,0x23ffff33,0x22f82104,
+0xf7f94638,0x2105ff69,0x463822ff,0xff28f7f9,0x22ff2106,0xf7f94638,
+0x2107ff23,0x22ff4638,0xff1ef7f9,0x46382108,0x23ff2207,0xff54f7f9,
+0x0900f04f,0x46384c7d,0x8004f839,0x78e1444c,0x796578a6,0xff1af7f9,
+0x40b57923,0xf303fa50,0x40b3b29b,0x4638b2ad,0x462a4641,0xf109b29b,
+0xf7f90906,0xf1b9ff73,0xd1e30fc6,0x21042300,0x463822f8,0xff30f7f9,
+0x22002105,0xf7f94638,0x2106feef,0x46382200,0xfeeaf7f9,0x22002107,
+0xf7f94638,0x2300fee5,0x22072108,0xf7f94638,0x4638ff1b,0x619ef44f,
+0x42bff44f,0xff34f7f9,0x46382200,0x41f1f240,0xff2ef7f9,0x23032207,
+0xf2404638,0xf7f941ea,0x2302ff41,0x46382207,0x41ebf240,0xff3af7f9,
+0xf44f221f,0x4638719c,0xfebef7f9,0x073cf8da,0xfe76f7f2,0x46046c7b,
+0x68986c99,0xff68f7ed,0x073cf8da,0xf7f24621,0x2181fe65,0xf7f94638,
+0x2181feb9,0x22044606,0xf7f94638,0x213afea5,0xf7f94638,0x213afeaf,
+0x46052200,0xf7f94638,0x215afe9b,0x4638227e,0xfe96f7f9,0x22f7211a,
+0xf7f94638,0x215afea9,0x4638227c,0xfe8cf7f9,0x2215215b,0xf7f94638,
+0x2270fe87,0x4638215c,0xfe82f7f9,0x2df4f8d7,0x429a4b33,0x4638d103,
+0x22a0215d,0x4b31e005,0xd104429a,0x215d4638,0xf7f92252,0x4638fe71,
+0x2201215e,0xfe6cf7f9,0x215a4638,0xf7f9227d,0x2032fe67,0xfb2af7f0,
+0xe0034c27,0xf7f0200a,0x3c0afb25,0x4638215f,0xfe68f7f9,0x0f02f010,
+0x2c09d101,0x215fd1f2,0xf7f94638,0xf010fe5f,0xd1040f02,0x213a4638,
+0xf7f9b2ea,0x2155fe49,0xf7f94638,0x2155fe53,0x46052200,0xf7f94638,
+0x215afe3f,0x4638227e,0xfe3af7f9,0x227c215a,0xf7f94638,0x215bfe35,
+0x46382255,0xfe30f7f9,0x215c2276,0xf7f94638,0xf8d7fe2b,0x4b0b2df4,
+0xd115429a,0x215d4638,0xf7f922fc,0x4638fe21,0x2200215e,0x46c0e022,
+0x0001bf80,0x0001b420,0x0249f000,0x01c9c380,0x00989689,0x016e3600,
+0x429a4bc4,0x4638d103,0x2296215d,0x4bc2e009,0xd103429a,0x215d4638,
+0xe002223d,0x215d4638,0xf7f92213,0x4638fdfd,0x2201215e,0xfdf8f7f9,
+0x215a4638,0xf7f9227d,0x2032fdf3,0xfab6f7f0,0xe0034cb6,0xf7f0200a,
+0x3c0afab1,0x4638215f,0xfdf4f7f9,0x0f02f010,0x2c09d101,0x215fd1f2,
+0xf7f94638,0xf010fdeb,0xd1040f02,0x21554638,0xf7f9b2ea,0x4638fdd5,
+0x227e215a,0xfdd0f7f9,0x21814638,0xf7f9b2f2,0x223ffdcb,0x21554638,
+0xfdc6f7f9,0x8db94638,0xfba8f7fd,0x46388db9,0xf9c8f7fd,0xf7f94638,
+0x4638ffd1,0xff0ef7f9,0xf7fd4638,0x4638fe11,0xfbdaf7ff,0x187a2100,
+0x31c9f892,0x292d3101,0x3fccf882,0x4638d1f7,0xfd54f7fc,0xf7fb4638,
+0x4638ffe1,0xfbc8f7ff,0x463822bf,0x61aef44f,0xfdf6f7f9,0x463822ff,
+0x5171f240,0xfdf0f7f9,0xf2404638,0xf64f5172,0xf7f97233,0x4638fde9,
+0x5173f240,0x7243f64f,0xfde2f7f9,0x463822cc,0x5174f240,0xfddcf7f9,
+0xf2404638,0xf44f5175,0xf7f97280,0x2200fdd5,0xf2404638,0xf7f95176,
+0x2200fdcf,0xf2404638,0xf7f95177,0x2200fdc9,0xf44f4638,0xf7f961af,
+0x2200fdc3,0xf2404638,0xf7f95179,0x2278fdbd,0xf44f4638,0xf7f961bc,
+0x4638fdb7,0x51e1f240,0x72c1f64f,0xfdb0f7f9,0xf2404638,0xf44f51e2,
+0xf7f97280,0x4638fda9,0x51e3f240,0x72c1f64f,0xfda2f7f9,0x46382278,
+0x51e4f240,0xfd9cf7f9,0xf2404638,0xf64f51e5,0xf7f9727a,0x4638fd95,
+0x51e6f240,0x72eef64f,0xfd8ef7f9,0x46382200,0x51e7f240,0xfd88f7f9,
+0xf44f4638,0x221261bd,0xfd82f7f9,0x46382286,0x51e9f240,0xfd7cf7f9,
+0x4638228f,0x51eaf240,0xfd76f7f9,0xf2404638,0xf64f51eb,0xf7f9727b,
+0x2201fd6f,0xf2404638,0xf7f951ec,0x4638fd69,0x51edf240,0x72f8f64f,
+0xfd62f7f9,0x463822fb,0x51eef240,0xfd5cf7f9,0xf2404638,0xf64f51ef,
+0xf7f972db,0x224efd55,0xf44f4638,0xf7f961be,0x4638fd4f,0x51f1f240,
+0x72ebf64f,0xfd48f7f9,0xf2404638,0xf64f51f2,0xf7f972bb,0x2231fd41,
+0xf2404638,0xf7f951f3,0x2280fd3b,0x46384613,0x6131f240,0xfd4ef7f9,
+0x5280f44f,0x46384613,0x61daf240,0xfd46f7f9,0x22402300,0xf2404638,
+0xf7f96131,0x4638fd3f,0x612cf240,0x72fff647,0xfd1ef7f9,0x72fff647,
+0xf2404638,0xf7f9612d,0xf241fd17,0xf8a73388,0x21a53f9e,0xf7f94638,
+0x218efcc1,0x0ffcf8a7,0xf7f94638,0x21a2fcbb,0x0ffef8a7,0xf7f94638,
+0xf507fcb5,0x80185380,0x46382194,0xfcaef7f9,0x0302f241,0x52f82193,
+0xf7f94638,0xf241fca7,0x52f80304,0x463821a4,0xfca0f7f9,0x0306f241,
+0x21a352f8,0xf7f94638,0xf241fc99,0x52f80308,0x87f0e8bd,0x0249f000,
+0x01c9c380,0x00989689,0x4605b570,0xff6af7f2,0x3054f890,0x2b004604,
+0x4628d053,0xfc90f7f2,0x2da4f8d4,0x6c63b13a,0x370cf8d3,0x69621a9b,
+0x42936852,0x4628d30c,0xfdb4f001,0x4620b940,0xfad0f7fa,0x6c63b120,
+0x370cf8d3,0x3da4f8c4,0x69626c63,0x170cf8d3,0x3df0f894,0xf8d4b933,
+0x68d23dec,0x0301ebc3,0xd30a4293,0xf0014628,0xb930fd99,0xf7f24628,
+0xb910fc63,0xf7f24628,0x6be0fc61,0xfd8ef001,0x6be0b968,0xfc58f7f2,
+0x6be0b948,0xfc56f7f2,0x4620b928,0xf8942101,0xf7fa202c,0xf894fc19,
+0xb1533258,0xf8d46c63,0xf8d3225c,0x1a9b370c,0xd9022b05,0xf8842300,
+0xbd703258,0xf7f2b570,0xf241ff0d,0x58c11390,0xb1394604,0xf8d36bc3,
+0xf7f2073c,0xb908fb79,0xe0002501,0xf8d42500,0xb1311c24,0xf8d36be3,
+0xf7f2073c,0xb900fb6d,0xf04f3501,0xf2410200,0x52e21388,0x33024628,
+0xbd7052e2,0x4ff0e92d,0xb0a72300,0x460c4615,0x90c8f8dd,0x46079324,
+0x80c0f8dd,0xa0d0f8dd,0xfedcf7f2,0x0301f005,0x46214606,0x464a6c40,
+0x9b339300,0xfdfcf7f6,0x28009004,0x8793f040,0x2b039b31,0xa824d904,
+0x22044641,0xfa00f7ed,0x1e119a24,0x2101bf18,0xf0002d9f,0xd85483af,
+0xf0002d71,0xd82b8102,0xf0002d10,0xd81380cb,0xf0002d0c,0xd80780d4,
+0xf0002d00,0x2d0180a2,0x80b3f000,0xbf64f000,0xf0002d0e,0x2d0f80d9,
+0x80d9f000,0xbf5cf000,0xf0002d6e,0xd8078426,0xf0002d12,0x2d1380d4,
+0x80d4f000,0xbf50f000,0xf0002d6f,0x2d708421,0x80d0f000,0xbf48f000,
+0xf0002d7e,0xd80c8624,0xf0002d78,0xf20080d3,0x2d72873f,0x842bf000,
+0xf0002d75,0xf0008253,0x2d82bf37,0x861df000,0x2d80d807,0x8612f000,
+0xf0002d81,0xf0008613,0x2d88bf2b,0x8323f000,0xf0002d89,0xf000833f,
+0x2daebf23,0x83edf000,0x2da8d82b,0x83acf000,0x2da4d813,0x837df000,
+0x2da0d807,0x8376f000,0xf0002da2,0xf0008376,0x2da6bf0f,0x8376f000,
+0xf0002da7,0xf0008382,0x2dabbf07,0x83c6f000,0x2da9d807,0x83a3f000,
+0xf0002daa,0xf00083b5,0x2dacbefb,0x84a8f000,0xf0002dad,0xf00084a2,
+0x2db7bef3,0x84d5f000,0x2db2d813,0x83ecf000,0x2dafd807,0x83bcf000,
+0xf0002db0,0xf00083d4,0x2db5bee3,0x8402f000,0xf0002db6,0xf0008490,
+0x2dbbbedb,0x856bf000,0x2db8d807,0x8516f000,0xf0002dba,0xf0008515,
+0x2dbcbecf,0x86acf000,0xf0002dbe,0xf00086ad,0x4630bec7,0xf10da923,
+0xf7fa0297,0x9004f989,0xf0402800,0xf89d86c8,0x9a233097,0xbf142b00,
+0x4300f04f,0x43132300,0xf022e03b,0x29ff4100,0x21ffbfa8,0xb2c94630,
+0xf7fc0fd2,0x9004fee9,0xbeb1f000,0x9904ac20,0x4620220c,0xf900f7ed,
+0x23019a04,0x46214648,0x92219320,0xf896e3b8,0x2b003033,0x869ff000,
+0xf1094630,0x464a0102,0xf914f7fa,0x3002f899,0x3001f889,0xbe93f000,
+0x3054f896,0xf886e00d,0xf0001054,0xf896be8c,0xe006326c,0x126cf886,
+0xbe85f000,0x33def241,0xf8c95cf3,0xf0003000,0xf241be7e,0x54f133de,
+0xbe79f000,0x463821de,0xfed2f7f2,0x460421dc,0xf7f24638,0xea40fecd,
+0x901d4004,0x312af241,0xf7f24638,0xb240fec5,0x3130f241,0xfb80fa1f,
+0xf7f24638,0xf241febd,0x46803136,0xf7f24638,0xf241feb7,0x9002313c,
+0xf7f24638,0xf241feb1,0x9003312a,0xf7f24638,0xf241feab,0xf3c03130,
+0x46382546,0xfea4f7f2,0x3136f241,0x2446f3c0,0xf7f24638,0xf241fe9d,
+0xf3c0313c,0x46382a46,0xfe96f7f2,0x2046f3c0,0xf2419005,0x4638312a,
+0xfe8ef7f2,0x7f80f410,0x2d0cd005,0xf1abbf04,0xfa1f0304,0xfa0ffb83,
+0xf113f38b,0xdd050f2e,0xbf842d12,0x0306f10b,0xfb83fa1f,0xfa4f4bb1,
+0x571bf288,0x189b4638,0x3130f241,0xf883fa1f,0xfe6ef7f2,0x7f80f410,
+0x2c0cd005,0xf1a8bf04,0xfa1f0304,0xfa0ff883,0xf113f388,0xdd050f2e,
+0xbf842c12,0x0306f108,0xf883fa1f,0x99024ba1,0x300af913,0x189bb24a,
+0xf2414638,0xb29d3136,0xfe4ef7f2,0x7f80f410,0xf1bad004,0xd1010f0c,
+0xb29d1f2b,0xf113b22b,0xdd040f2e,0x0f12f1ba,0x1dabd901,0x9a05b29d,
+0x99034b92,0xb24a569b,0x4638189b,0x313cf241,0xf7f2b29c,0xf410fe31,
+0xd0047f80,0x2a0c9a05,0x1f23d101,0xb223b29c,0x0f2ef113,0x9b05dd04,
+0xd9012b12,0xb29c1da3,0xf38bfa0f,0xf288fa0f,0xb22b18d2,0xb22318d2,
+0x109218d2,0xf996921e,0x46383fcb,0x189b3302,0x3130f241,0xf7f2931e,
+0xf410fe0b,0xd0087f80,0xf1139b1e,0xdd040f55,0x0f20f113,0x3301da01,
+0xf241931e,0x4638312c,0xfdfaf7f2,0x312ef241,0x46384605,0xfdf4f7f2,
+0x46049b1e,0x0f5cf113,0x4638db10,0x312af241,0xfdeaf7f2,0x7f80f410,
+0xb222d108,0x1a9bb22b,0xfb032203,0xf3c3f302,0xe0031b47,0x335e9b1e,
+0xfb83fa5f,0x3132f241,0xf7f24638,0xf241fdd5,0x46053134,0xf7f24638,
+0x9b1efdcf,0xf1134604,0xdb100f5c,0xf2414638,0xf7f23130,0xf410fdc5,
+0xd1087f80,0xb22bb222,0x22031a9b,0xf302fb03,0x1a47f3c3,0x9b1ee003,
+0xfa5f335e,0xf241fa83,0x46383138,0xfdb0f7f2,0x313af241,0x46384605,
+0xfdaaf7f2,0x46049b1e,0x0f5cf113,0x4638db10,0x3136f241,0xfda0f7f2,
+0x7f80f410,0xb222d108,0x1a9bb22b,0xfb032203,0xf3c3f302,0xe0031847,
+0x335e9b1e,0xf883fa5f,0x313ef241,0xf7f24638,0xf44ffd8b,0x4605519a,
+0xf7f24638,0x9b1efd85,0xf1134604,0xdb100f5c,0xf2414638,0xf7f2313c,
+0xf410fd7b,0xd1087f80,0xb22bb222,0x22031a9b,0xf302fb03,0x1047f3c3,
+0x9b1ee002,0xb2d8335e,0xf38bfa4f,0xf28afa4f,0xbfa82b1f,0x2a1f231f,
+0x189bbfd4,0xfa4f331f,0x2a1ff288,0x189bbfd4,0xb242331f,0xbfd42a1f,
+0x331f189b,0x1078f99d,0xfb932204,0x4638f3f2,0xe1fe931f,0x4649a806,
+0xf7ec2220,0x9b06ff61,0x04fff003,0x2500f3c3,0x2b071e63,0x84d8f200,
+0xf013e8df,0x00c3005a,0x000804d6,0x005a0008,0x004e04d6,0x21dc6bf0,
+0xf7f22200,0x6bf0ff03,0x220021de,0xfefef7f2,0x46a8b90d,0x4638e007,
+0xf44f2120,0xf7f272e4,0xf8d7fd33,0x2201862c,0x033ef241,0x54f22c04,
+0xd1056bf0,0x189221d8,0x46c0e005,0x0001bda8,0xf24021d8,0xf7f24202,
+0x4638fee1,0xf10d2100,0xf7f20229,0x2d00fc47,0x84a9f000,0xf44f2400,
+0xf7ef707a,0x2120fdb7,0x72e4f44f,0xf7f24638,0xf8d7fd0b,0x9a08362c,
+0x0303ebc8,0xd2034293,0x34019b07,0xd3ea429c,0xf2412400,0x6bf0033e,
+0x54f421d8,0xf7f24622,0x4638feb9,0xe1c24621,0xf2412101,0x54f1033e,
+0xf5a39807,0xf1a06346,0x429a020a,0x2802d902,0x8472f040,0xd1072c01,
+0xf44f4630,0x22e06182,0xf7f92380,0xe002f933,0xf7fa4630,0x9a08fc71,
+0x3201b90a,0x4638e00c,0xb29221dc,0xfe92f7f2,0x2022f8bd,0x21de4638,
+0xfe8cf7f2,0x1201f240,0x46389b07,0xbf082b02,0x0204f042,0xf7f221d8,
+0x9a07fe81,0x00d221da,0xb2923a7c,0xf7f24638,0xf10dfe79,0x788b012f,
+0x4638784a,0xf89d431a,0x4313302f,0x431a78ca,0x4313790b,0x431a794a,
+0xbf149b09,0xf107460a,0x9300024c,0x0129f10d,0xf7f42300,0x2d00fe79,
+0x842df000,0x707af44f,0xfd3cf7ef,0x463821d8,0xfc82f7f2,0x0001f010,
+0xf241d1f4,0x54f0033e,0x2200e007,0x033ef241,0x463854f2,0xf7f221d8,
+0x4630fe45,0xf7fa2101,0xf000fc17,0x4641bc10,0xa813220c,0xfe80f7ec,
+0x930f2301,0xac249b13,0x9b149310,0x93114630,0xa90e9b15,0xf2409312,
+0x93004356,0x4255f240,0x940e3301,0xf944f7f9,0x46214648,0xf7ec2204,
+0xe3f0fe67,0x22104649,0xf7eca813,0x9b16fe61,0x93244630,0x930eab24,
+0x930f2301,0xa90e9b13,0x9b149310,0x4255f240,0x9b159311,0xf2409312,
+0x93004356,0xf7f93301,0xe3d4f8ed,0x2de8f8c6,0xb98a6bf0,0xf8d4f7f3,
+0xf7fa4630,0x6c73fc91,0x68982110,0xf7eb460a,0x6bf0fd69,0xfff4f7f2,
+0xf8862301,0xe3be3054,0xf8869a04,0xf7f32054,0x2270f8bf,0x46309b04,
+0xf7fa9924,0x4630fd07,0xf7fb213c,0x6c73fc01,0x68982110,0xf7eb9a04,
+0xe029fd4d,0xf8869b04,0x23013f83,0x3df0f886,0xe51e3b01,0xf2404630,
+0xf7f941a4,0xf400f83d,0xf5b04060,0xbf144f60,0x20012000,0x0000f8c9,
+0x6bf0e391,0xf894f7f3,0x46309924,0xbf0c2900,0x4100f44f,0x4160f44f,
+0xfb84f7fb,0xf8862300,0x33013f83,0x3df0f886,0xf7f26bf0,0xe37affad,
+0xf2404630,0xf7f941a4,0xf400f817,0xf5b04060,0xd1054f60,0xf7fb4630,
+0xf8b6f917,0xe4e83f96,0x3f9cf996,0x6bf0e4e5,0xf86af7f3,0xf1b19924,
+0xd1033fff,0xf44f4630,0xe7d54160,0xd903297f,0x011cf06f,0xe7d79104,
+0xf7fb4630,0xe7d3fba5,0xf44f4630,0xf7f86182,0xf080ffef,0xf3c00080,
+0xe7b310c0,0xf0402a00,0x463080dc,0x6182f44f,0x238022e0,0xf802f7f9,
+0xf996e33d,0xf1d33df9,0xbf380301,0xe4b42300,0x1df9f886,0xf0002900,
+0x46308332,0xf8bcf7f9,0xf2404630,0xf7f841a4,0xf400ffcb,0xf5b04060,
+0xd1034f60,0xf7fa4630,0xe320faf7,0x21004630,0xfb94f7f9,0x6c73e31b,
+0x2b007c5b,0x8309f000,0x31fff04f,0xf7fa4630,0x8db2fd99,0x4638b241,
+0xfeb8f7f8,0xe775b240,0x7c5b6c73,0xf0002b00,0x21de82f8,0xf7f24638,
+0x21dcfb5f,0x46384604,0xfb5af7f2,0x380cf8d7,0x4004ea40,0x1414f8b3,
+0xb2c9901d,0x4638911e,0x8db2b249,0xfe9af7f8,0x901eb240,0x4648a91d,
+0xe6f4220c,0x4649a806,0xf7ec2220,0x9b06fd59,0x2b073b01,0x82d4f200,
+0xf013e8df,0x006e001f,0x000802d2,0x02d202d2,0x001202d2,0x21d86bf0,
+0xf7f22202,0x4638fcff,0xf10d2100,0xe0090229,0x21d86bf0,0xf7f22200,
+0x4638fcf5,0xf5002100,0x32425246,0xfa5af7f2,0x9b07e2bd,0x32def240,
+0x42933b0a,0x82b0f200,0x463022e0,0x6182f44f,0xf7f82380,0x9a08ff73,
+0x3201b90a,0xf642e015,0x5afb13c2,0x429a4638,0xebc3bf84,0x93080302,
+0x2020f8bd,0xf7f221dc,0xf8bdfccd,0x46382022,0xf7f221de,0xf240fcc7,
+0x46381201,0xf7f221d8,0x9a07fcc1,0x00d24638,0x21da3a7c,0xf7f2b292,
+0xf10dfcb9,0x788b012f,0x4638784a,0xf89d431a,0x4313302f,0x431a78ca,
+0x4313790b,0x431a794a,0xbf149b09,0xf107460a,0x9300024c,0x0129f10d,
+0xf7f42300,0xe26efcb9,0x21d84638,0xf7f22200,0x6bf0fc99,0xf99ef7f2,
+0x6182f44f,0xbf142802,0x23602320,0x463022e0,0xf8a6e71c,0xe25a2f9e,
+0x3f9ef8b6,0xf896e22e,0xf7f2002c,0xf7f9f977,0x2801fcf9,0x2802d00b,
+0xb9d0d012,0x3060f9b6,0xf9b6931a,0x931b3062,0x3064f9b6,0xf9b6e019,
+0x931a3072,0x3074f9b6,0xf9b6931b,0xe0103076,0x3078f9b6,0xf9b6931a,
+0x931b307a,0x307cf9b6,0xf9b6e007,0x931a307e,0x3080f9b6,0xf9b6931b,
+0x46483082,0x931ca91a,0x4641e73a,0x220ca81a,0xfc96f7ec,0x93102307,
+0x93123319,0x930eab23,0x930f2301,0xf8dd9b04,0x9f1b8068,0x93119d1c,
+0x4620461c,0x46424629,0xf7f9463b,0xf240f9e1,0x90234356,0x46309300,
+0xa90e3301,0x4255f240,0xff18f7f8,0x34019b11,0x2c403301,0xd1e89311,
+0x002cf896,0xf91af7f2,0xfc9cf7f9,0xd00a2801,0xd0152802,0x9a1b9b1a,
+0xb9f0991c,0x3060f8a6,0x2062f8a6,0xf8bde091,0xf8bd1068,0xf8bd206c,
+0xf8a63070,0xf8a61072,0xf8a62074,0xe1da3076,0x1068f8bd,0x206cf8bd,
+0x3070f8bd,0x1078f8a6,0x207af8a6,0x307cf8a6,0xf8a6e1cd,0xf8a6307e,
+0xe0992080,0xe19d2300,0x2000f8b8,0xd0042a06,0x010ff04f,0x1000f8a9,
+0xf8b8e1bd,0x2b003004,0x81b6f040,0x2000f8a9,0x2002f8b8,0x2002f8a9,
+0x3004f8b8,0x3004f8a9,0x3002f8b8,0xf2002b03,0xe8df81aa,0x0d02f003,
+0xf8b62318,0xf8a92060,0xf8b62006,0xf8a93062,0xf8b63008,0xe01f6064,
+0x1072f8b6,0x1006f8a9,0x2074f8b6,0x2008f8a9,0x6076f8b6,0xf8b6e014,
+0xf8a93078,0xf8b63006,0xf8a9107a,0xf8b61008,0xe009607c,0x207ef8b6,
+0x2006f8a9,0x3080f8b6,0x3008f8a9,0x6082f8b6,0x600af8a9,0x220ce177,
+0x4641a817,0xfbe8f7ec,0x305cf8bd,0xf0402b06,0xf8bd816e,0x2b003060,
+0x8166f040,0x305ef8bd,0xf2002b03,0xe8df8164,0x0f02f003,0xf8bd291c,
+0xf8a62062,0xf8bd2060,0xf8a63064,0xf8bd3062,0xf8a61066,0xe1521064,
+0x2062f8bd,0x2072f8a6,0x3064f8bd,0x3074f8a6,0x1066f8bd,0x1076f8a6,
+0xf8bde145,0xf8a62062,0xf8bd2078,0xf8a63064,0xf8bd307a,0xf8a61066,
+0xe138107c,0x2062f8bd,0x207ef8a6,0x3064f8bd,0x3080f8a6,0x1066f8bd,
+0x1082f8a6,0x9a04e12b,0xe0fa9224,0x3e16f996,0xe0f69324,0x2e16f886,
+0x6bf0e121,0xfe24f7f2,0x413ef240,0xf7f84630,0xf240fdbb,0x46805103,
+0xf7f84630,0x2204fdb5,0xf2404613,0x46825103,0xf7f84630,0x4630fdcf,
+0x413ef240,0x5200f44f,0xf7f89b04,0x220ffdc7,0x46302308,0x413ef240,
+0xfdc0f7f8,0x23a022f0,0xf2404630,0xf7f8413e,0xf44ffdb9,0xf44f52e0,
+0x46306340,0x413ef240,0xfdb0f7f8,0x413cf240,0xf7f84630,0x2238fd89,
+0xf2402320,0x4607413c,0xf7f84630,0x220ffda3,0x46302304,0x1121f240,
+0xfd62f7f8,0x7200f44f,0x46304613,0x5103f240,0xfd94f7f8,0x7200f44f,
+0x46309b04,0x5103f240,0xfd8cf7f8,0x413bf240,0xf7f84630,0x2204fd65,
+0xf2404613,0x4605413b,0xf7f84630,0x2204fd7f,0xf2404630,0x9b04413c,
+0xfd78f7f8,0x7200f44f,0x46304613,0x5103f240,0xfd70f7f8,0xf2404630,
+0xf44f5103,0x9b047200,0xfd68f7f8,0x46302328,0x5105f240,0x72fff64f,
+0xfd60f7f8,0xf2404630,0xf64f5104,0x9b0472ff,0xfd58f7f8,0x46302220,
+0x5103f240,0xf7f84613,0x9c04fd51,0xf7ef2001,0x4630f99d,0x5103f240,
+0xfd26f7f8,0x0f20f010,0x2000bf14,0x34012001,0xd0022c02,0xd0ed2800,
+0xb908e002,0xe0184604,0x5106f240,0xf7f84630,0xf240fd13,0x46045107,
+0xf7f84630,0x0424fd0d,0xf44f0c24,0xeb0461a1,0x46304400,0xfd04f7f8,
+0xf2404630,0xf7f85109,0x2204fcff,0x0302ea05,0xf2404630,0xf7f8413b,
+0x4630fd19,0x413ef240,0xf7f84642,0x2204fcf9,0x0302ea0a,0xf2404630,
+0xf7f85103,0x2238fd0b,0x0302ea07,0xf2404630,0xf7f8413c,0xb220fd03,
+0x6166f246,0xfa08f7f1,0x61f4f247,0xfa08f7f1,0xf5041284,0x34b144fc,
+0x12646bf0,0xfc60f7f2,0x46489424,0xe435a924,0x33fff04f,0xe0149324,
+0xf8962200,0x4611002c,0x590b4c13,0xd1044283,0xfb022314,0x68584303,
+0x3201e004,0x2a0e3114,0x2000d1f2,0xfabaf7f9,0x46489024,0x4652a924,
+0xf06fe419,0xe0090303,0x0116f06f,0xe0069104,0x021cf06f,0xe0029204,
+0x0301f06f,0x98049304,0xe8bdb027,0x46c08ff0,0x0001b508,0x2201b909,
+0x2200e000,0x3308f642,0x200054c2,0x46c04770,0x466bb5f7,0x0006e883,
+0x21006846,0x4605460b,0xf89d4630,0x46147000,0xf9def7f3,0xb9484601,
+0x46224630,0xf7f32301,0x4601f9d7,0x63ecb910,0x7033f885,0xbdfe4608,
+0x2400b57f,0xf846ae04,0x68454d04,0x3038f890,0xf8807004,0x63444044,
+0xf8854621,0xf8803d09,0x46284038,0xfcf0f7f1,0x21749400,0x23044632,
+0x07f8f8d5,0xfd5cf000,0x073cf8d5,0xfba4f7f1,0x073cf8d5,0xfb8ef7f1,
+0x46c0bd7f,0x6845b5f0,0x4606b089,0x460f224c,0x212a4628,0xf810f7f2,
+0x2250212c,0xf7f24628,0x2120f80b,0x72e4f44f,0xf7f24628,0x4628f805,
+0xf44f2122,0xf7f172e6,0xf896ffff,0xb1133030,0x3630f8d5,0xf8d5e001,
+0x61f3362c,0x34b0f8d5,0x6273ac05,0x34b4f8d5,0x62b32100,0x4620220c,
+0xf9d2f7ec,0x230c2200,0x46289301,0x490c4613,0x92029400,0xf7f59203,
+0x9b05fe85,0x9b076233,0x302cf886,0xf8869b06,0xb137302d,0x0008f106,
+0x011cf106,0xf7ec2214,0xb009f9d7,0x46c0bdf0,0x0001b75b,0x47ffe92d,
+0xf04f6844,0xf8cd0a01,0xf894a00c,0x26003d09,0x3038f880,0x46057c63,
+0x4691460f,0xbfd4290e,0x5800f44f,0x5880f44f,0x6d09f884,0xf8d4b91b,
+0xf7f1073c,0x7c63fb31,0xf06fb913,0xe0250303,0x07f8f8d4,0xf0002104,
+0x9600ffb3,0xaa032304,0xf8d42174,0xf00007f8,0x4620fcd3,0xfc30f7f2,
+0x6130f447,0x0101ea48,0x4620b289,0xffe8f7f5,0xf7f24620,0x4620fb51,
+0xf7f14649,0x4603fc4d,0xf885b920,0x63680044,0xa000f885,0xb0044618,
+0x87f0e8bd,0x41f0e92d,0x7045f890,0x68424606,0x2000b10f,0xf502e01b,
+0x681d534c,0x3848f8d2,0x68186bc4,0xfa42f7f9,0x047ff004,0x46214602,
+0xf7f84628,0xb2c2fa59,0xb250b12a,0xbfcc2860,0xf1c0463a,0x68700260,
+0xf7f54902,0xe8bdfe69,0x46c081f0,0x0001b778,0x47f0e92d,0xb0b64605,
+0x20006846,0x46142a0f,0x80f8f8dd,0x90fcf8dd,0xa100f8dd,0xd0019034,
+0xd1012a13,0xe00b4607,0x0301f002,0x46309300,0x9b414652,0xfd30f7f5,
+0x28004607,0x833ff040,0x0f03f1b9,0xa834d904,0x22044641,0xf934f7ec,
+0x2b1c1ea3,0x8331f200,0xf013e8df,0x032f001d,0x0059032f,0x032f032f,
+0x005e032f,0x00e3032f,0x0124032f,0x01a0032f,0x01d4032f,0x022b032f,
+0x02500264,0x02a0032f,0x032f02b3,0x02cb02c6,0x0311032f,0xf10d02e6,
+0x497e04c3,0x46202205,0xf90af7ec,0x223c2100,0xf7ec4650,0x4630f8e5,
+0x223ca904,0xfd62f7f1,0x28004607,0x82fff040,0xf7ec4620,0x4621f82f,
+0xbf342808,0x22084602,0xf7ec4650,0x4870f815,0xf824f7ec,0x2820496e,
+0x4602bf34,0xf10a2220,0xf7ec0008,0x9b0ff809,0x3028f8ca,0xf8ca9b07,
+0x9b0b302c,0x3030f8ca,0xf8ca9b09,0x9b0d3034,0x3038f8ca,0xf8d6e2d7,
+0xf7f1073c,0xe2d2fa3b,0x0f13f1b9,0x82c7f240,0x4641a828,0xf7ec2214,
+0x6b6bf8c7,0xf0402b00,0x462882c1,0x10a1f99d,0x20a0f99d,0xf7ff3301,
+0x4607fee9,0xf0402800,0xab2b82ba,0xe8934628,0xf7ff0006,0x4607fe4d,
+0xf0402800,0x463082b0,0x10a2f99d,0x20acf89d,0xfe38f7ff,0x28004607,
+0x82a5f040,0x30a4f89d,0x3045f885,0x534cf506,0xf89d6818,0xf7f810a5,
+0xb108f9fb,0xe2964607,0xf7ff4628,0x4607ff0b,0xf0402800,0x6beb8290,
+0xf003493e,0x2b04037f,0xf88dbf18,0xf89d00a3,0x463020a3,0xfd88f7f5,
+0x28004607,0x827ff040,0xa8132220,0xf7ec4639,0x2301f857,0x9b2a9313,
+0x6beb9314,0x037ff003,0xd0052b02,0xd0032b04,0xd0012b0b,0xd1022b16,
+0x7380f44f,0xf44fe001,0x93166380,0x2200ab13,0x23209300,0x24019301,
+0x49274630,0x94024613,0xf7f59203,0x4607fcf3,0xf0402800,0x6b6b8254,
+0x4044f885,0x636b4323,0xf1b9e24d,0xf2400f01,0xf10d8242,0x464100d5,
+0xf7ec2202,0x6b6bf841,0xf0402b00,0x4628823b,0x10d6f99d,0x20d5f99d,
+0xf7ff3301,0x4607fe63,0xf0402800,0x46308234,0xfab0f7f2,0x30d6f89d,
+0x70d7f88d,0x23019333,0x2848f8d6,0xf10d9300,0x970103d7,0x68109302,
+0x2204215c,0xf7fdab33,0x4607fd4f,0xf0402800,0x6b6b821a,0x0302f043,
+0xe214636b,0x0001b833,0x0001a078,0x0001b729,0x0001b754,0x0f1ff1b9,
+0x8201f240,0x0a6cf10d,0x46414650,0xf7eb2220,0x6b6bffff,0xf0402b00,
+0x462881f9,0x106df99d,0x206cf99d,0xf7ff3301,0x4607fe21,0xf0402800,
+0xab2181f2,0xe8934628,0xf7ff0006,0x4607fd85,0xf0402800,0x463081e8,
+0x106ef99d,0x2084f89d,0xfd70f7ff,0x28004607,0x81ddf040,0x3070f89d,
+0xf8856c29,0xb1293045,0x534cf506,0xb2496818,0xf95cf7f8,0xf7ff4628,
+0x4607fe45,0xf0402800,0xf10d81ca,0x4640084c,0x22204639,0xffa0f7eb,
+0x9314231c,0xf04f9b20,0x93150901,0x3072f8bd,0x904cf8cd,0xf89d9316,
+0xb10b306f,0x905cf88d,0x0411f108,0x0108f10a,0x46202206,0xffa8f7eb,
+0x010ef10a,0x46202206,0xffa2f7eb,0x93012320,0x463b463a,0x49a84630,
+0xf8cd9703,0xf8cd8000,0xf7f59008,0x4607fc33,0xf0402800,0xf8858194,
+0xe1909044,0xb9236b6b,0x3044f895,0xf0002b00,0xf506818a,0x6818534c,
+0xf7f82100,0x4607f8e5,0x28004680,0x817ff040,0x3044f895,0xac13b1bb,
+0x22204639,0xf7eb4620,0x2302ff53,0x331e9313,0x23019301,0x463a9302,
+0x4630463b,0x9703498e,0xf7f59400,0x4607fc03,0xf0402800,0x6b6b8164,
+0xf0002b00,0xf8c58160,0xe0778034,0x0f0bf1b9,0x8151f240,0x09b7f10d,
+0x220c4641,0xf7eb4648,0x4628ff4f,0x10b8f99d,0x20b7f99d,0xf7ff2301,
+0x4607fd75,0xf0402800,0x21018146,0xac134628,0xfd1cf7ff,0x46202220,
+0xf7eb4639,0x2304ff19,0xf89d9313,0xf10430ba,0xf0130011,0xd0090f01,
+0xf5062301,0xf8855146,0x31423030,0xf7eb2206,0xe006ff27,0x0103f109,
+0xf7eb2206,0xf885ff21,0xf89d7030,0xb11330b9,0xf88d2301,0xf885305c,
+0xab133031,0x93002200,0x93012320,0x46302401,0x46134961,0x92039402,
+0xfba8f7f5,0x28004607,0x8109f040,0x4032f885,0xf895e105,0x2b003032,
+0x8101f000,0x4620ac13,0x22202100,0xfed8f7eb,0x93132308,0x94003318,
+0x24009301,0x93022301,0x46224951,0x46304623,0xf7f59403,0x4621fb87,
+0x46284607,0xfcc2f7ff,0x4032f885,0xf7ff4628,0xe0e0fc97,0xb9647c74,
+0x0008f105,0x011cf105,0xf7eb2214,0x235ffed5,0x402df885,0x302cf885,
+0x4628e0d1,0xf7ff2101,0xe0ccfca9,0xb1337c73,0x3032f895,0x4628b11b,
+0xf7ff2100,0x69ebfc9f,0x429368aa,0x1a9bd301,0x43dbe001,0x9323189b,
+0x3031f895,0x6a2bb13b,0x429368ea,0x1a9bd301,0x43dbe001,0x9324189b,
+0x6a6b692a,0xd3014293,0xe0011a9b,0x189b43db,0x696a9325,0x42936aab,
+0x1a9bd301,0x43dbe001,0x9326189b,0x302df895,0xf88d4650,0xf895309d,
+0xa923302c,0xf88d2214,0xe06d309c,0x0f01f1b9,0x8085f240,0x22024641,
+0x00d5f10d,0xfe84f7eb,0xf99d4628,0xf99d10d6,0x230120d5,0xfcaaf7ff,
+0x2200e073,0x2404ad33,0x49164630,0x95004613,0x92029401,0xf7f59203,
+0x4607fb0d,0xd16e2800,0x46294650,0xe0474622,0xf1064650,0x2206014c,
+0xf8d6e042,0xf7f0073c,0x4641ffc9,0xf1062206,0xf7eb004c,0xf8d6fe59,
+0x46410dc8,0x220630da,0xfe52f7eb,0x073cf8d6,0xffcaf7f0,0x46c0e04f,
+0x0001b754,0x0001b749,0x08c8f10d,0x46502400,0x22044641,0xf7eb9432,
+0x7c73fe3f,0xd03e2b00,0xf8d62201,0x92003848,0x02d7f10d,0x94019202,
+0x21aa6818,0xab332204,0xfb62f7fd,0xbb704607,0x3033f895,0xd0282b01,
+0x30ccf89d,0xfb932204,0x9332f3f2,0x46414650,0xfe1ef7eb,0x7c73e01f,
+0xf8d6b91b,0xf7f0073c,0x9b34ff93,0x91340099,0x0044f895,0xb1406429,
+0x534cf506,0xb2496818,0xff98f7f7,0xf7ff4628,0x4607fc81,0xf06fe007,
+0xe004070d,0x37fff04f,0xf06fe001,0x46380716,0xe8bdb036,0x46c087f0,
+0xf0137c83,0xd0030f07,0xf0137903,0xd0050f01,0x4a05780b,0x0307f003,
+0xe0035cd0,0x2305780a,0xf0f3fbb2,0x46c04770,0x0001b620,0x9f05b5f0,
+0x46162400,0x46a4461d,0xeb00e015,0xf893030c,0xb116e004,0x0f80f01e,
+0xb12dd00b,0xf00e4a09,0x56d3037f,0xdb042b00,0xea0e190a,0x71130307,
+0xf10c3401,0x68030c01,0xd3e6459c,0x600c7d03,0xbdf0750b,0x0001bae4,
+0x2200b500,0x48074686,0xf85000d1,0x459e3032,0x180bd102,0xe0047918,
+0x2a0c3201,0xf04fd1f3,0xbd0030ff,0x0001ba84,0x18c06803,0xf00078c0,
+0x4770007f,0xb5104603,0x22284608,0xf7eb4619,0xbd10fd9b,0xb09db5f0,
+0x460e4604,0xf10d4617,0x21000003,0xf7eb226d,0x6825fd6f,0xe00f2000,
+0x79191823,0x027ff001,0xd8082a6c,0x5c9b4b17,0xf10db12b,0xeb0e0e70,
+0xf8030302,0x30011c6d,0xd1ed42a8,0x46082100,0x1833e00c,0xaa1c791b,
+0x037ff003,0xf81318d3,0xb1122c6d,0x711a1863,0x30013101,0x42986833,
+0x6021d3ef,0xb157b149,0x18a32200,0x3004f993,0xdb042b00,0x428a3201,
+0x2000d1f7,0x2001e000,0xbdf0b01d,0x0001bae4,0x4370e92d,0x4606b08c,
+0x2054f89d,0x48114b10,0x2a14ac02,0x4618bf08,0xbf142900,0x46804688,
+0xf89d4621,0xf89d9048,0xf7ff5050,0x9b13ff9b,0x93004620,0x22004631,
+0x9501464b,0xff52f7ff,0x46414630,0xf7ff2200,0xb00cff95,0x8370e8bd,
+0x0001ba0c,0x0001ba5c,0xb09db530,0x460d4604,0x0003f10d,0x226d2100,
+0xfcfef7eb,0xe0112000,0x79191823,0x027ff001,0xd80a2a6c,0x5c9b4b1c,
+0xab1cb13b,0xf812189a,0xea413c6d,0xf8020303,0x30013c6d,0x42986823,
+0x2000d3ea,0x182be011,0xf0017919,0x2a6c027f,0x4b11d80a,0xb13b5c9b,
+0x189aab1c,0x3c6df812,0x0303ea41,0x3c6df802,0x682b3001,0xd3ea4298,
+0x60232300,0xf10d4618,0x5cc10303,0x6823b131,0x330118e2,0x71112b10,
+0xd8026023,0x286d3001,0xb01dd1f1,0x46c0bd30,0x0001bae4,0x37f8f8d0,
+0x47707898,0xeb006983,0x8b800043,0x46c04770,0x29beb530,0x461cb085,
+0x69009d08,0xdc04d02d,0xd01c29bc,0xd02129bd,0xf240e008,0x42991301,
+0xf5b1d007,0xd00b7f81,0xd02529bf,0x0016f06f,0x4917e02c,0x22009200,
+0x92029401,0xe0229503,0x23014913,0x94019200,0x95039302,0x4911e01a,
+0x22009200,0x92029301,0xe0149503,0x9301490d,0x92002301,0x95039302,
+0x490be00c,0x22009200,0x92029301,0xe0069503,0x49072301,0x94019200,
+0x95039302,0x46132200,0xf928f7f5,0xbd30b005,0x0001bb7c,0x0001bb8e,
+0x0001bb9d,0x7883b510,0x69014602,0x8803b183,0x0f08f013,0xf023d00c,
+0xf0430308,0x80030380,0x073cf8d1,0x11f8f8d2,0x46132200,0xfbeaf7f0,
+0x46c0bd10,0xb5106903,0xf8d44604,0xf8d311f8,0xf7f0073c,0xb908fd9d,
+0xe0043001,0x33fff04f,0x31e2f884,0xf04f2000,0x61a333ff,0x70a33301,
+0x46c0bd10,0x41ffe92d,0x320ef890,0xf8d04604,0xb1431214,0x21e2f990,
+0x23243924,0x1503fb02,0x81e3f990,0xf8d0e002,0x460d8210,0xe0172600,
+0x320ef894,0x682f6920,0x461ab90b,0xf8d4e001,0x4b092230,0x22009201,
+0x92039202,0x463a1d29,0xf7f39300,0xf894fba7,0xb903320e,0x36013524,
+0xdbe54546,0x81ffe8bd,0x0001bbc4,0x6905b537,0x46284604,0xfea8f7f1,
+0x11e0f8b4,0x24004628,0xfa62f7f5,0xf8854628,0xf7f14d36,0x4628f90b,
+0xfdc6f7f1,0x3848f8d5,0xf7fb6818,0x4628f855,0xfd1af7f2,0x3de0f895,
+0xf0234628,0xf8850301,0x23033de0,0x21019300,0xf44f4623,0xf7f16282,
+0xf8b5fc11,0xb12b3dea,0x615ef505,0x31044628,0xfa78f7f4,0x46c0bd3e,
+0x41ffe92d,0x46046905,0x3844f8d5,0xb1637a1b,0x380cf8d5,0x2120f8d3,
+0x4304f240,0x0303ea02,0x6080f5b3,0x2001bf18,0x68a8e005,0xf940f7ea,
+0xbf183800,0xb1202001,0x073cf8d5,0xfd32f7f0,0xf994e181,0xf11331e2,
+0xd1030f02,0xf8843301,0xe17831e2,0x2b007c6b,0x8175f000,0xf0128822,
+0xd0100f40,0x73bff64f,0x0303ea02,0x46288023,0xf976f7f1,0x4628b938,
+0xff62f7f1,0xf0438823,0x80230308,0xf894e15f,0x330131e2,0x31e2f884,
+0xeb0469a3,0x8b9e0343,0x53a2f505,0x332cb2f2,0x0ed2ea4f,0x300ef813,
+0x0707f002,0xf013413b,0xbf0c0f01,0x81e4f894,0x0801f04f,0x21e2f994,
+0xf388fa4f,0xdd59429a,0x428a1c59,0x8822d105,0x73eff64f,0x0303ea02,
+0xf8d48023,0x69a231dc,0x429a3b01,0x20ffdb01,0xeb04e002,0x8bd80342,
+0xf0138823,0xbf1c0380,0x31f0f8d4,0xf8c43301,0xf99431f0,0x428b31e2,
+0xf8b4d12f,0xb36331e6,0xd03328ff,0x21f0f8d4,0x31ecf8d4,0xda11429a,
+0x51a2f505,0xf811312c,0x413b300e,0x0f01f013,0xb2c3d108,0x5c8a08da,
+0x0307f003,0xf012411a,0xd0140f01,0xf7ff4620,0x8822ff25,0x737ff64f,
+0x0303ea02,0xf8d58023,0xf8d4073c,0xf8b411f8,0x230021e6,0xfab2f7f0,
+0x28ffe0ed,0x69a3d006,0x33014606,0x230061a3,0x31e2f884,0x31e2f894,
+0xf895bb4b,0xb31b3024,0xf0138823,0xd11f0f80,0x3848f8d5,0xf7f86818,
+0xf8b4fbe9,0x429831e0,0x4628d116,0xf8dcf7f1,0x8823b968,0x0f20f013,
+0x4628d106,0xfec4f7f1,0xf0438823,0xe0010308,0x0340f043,0x88238023,
+0x0f28f013,0x80bbf040,0xf8842301,0xf99431e2,0x2a0021e2,0x808ff340,
+0xf388fa4f,0xf300429a,0xf8b4808a,0xf7f601e0,0xb2f7fd3d,0xd0084287,
+0xf44f2303,0x93006282,0x21014628,0xf7f14613,0xf8d5fb01,0x68183848,
+0xfbacf7f8,0xd0094286,0xf7f14628,0x4628fd69,0xf7f54631,0x4628f925,
+0xfc8ef7f1,0x3024f895,0xf8b4b143,0x429e31e0,0xf895d004,0xf0433de0,
+0xe0030301,0x3de0f895,0x03fef003,0x3de0f885,0x23016925,0x3d36f885,
+0xf7f04628,0x8823ffb7,0x0f04f013,0xf505d10a,0x08fa53a2,0x5c9b332c,
+0x0207f007,0xf0134113,0xd01a0f01,0x320ef894,0x69a2b13b,0x1224f8d4,
+0xfb02230c,0x689a1303,0xf8b4b90a,0xf8d521ea,0xf8d4073c,0x230011f8,
+0xfa14f7f0,0xf5044628,0xaa0371fa,0xfc5ef7f1,0xf894e01d,0xb14b320e,
+0xf8d469a2,0x230c1224,0x1303fb02,0xb10a689a,0xe0054616,0x21e8f8b4,
+0x31e4f994,0xf6f3fb92,0xf7ff4620,0xf8d5fe27,0xf8d4073c,0x463211f8,
+0xf7f02300,0xf8d5f9ef,0x21023848,0x463a6818,0xfc2af7f8,0x4620e023,
+0xfe48f7ff,0xf64f8822,0xea02737f,0x26000303,0xf04f8023,0x61a333ff,
+0x70a64628,0xfe18f7f1,0x37f8f8d5,0x21fcf8d3,0x0200f8d3,0x61fcf8c3,
+0x6200f8c3,0x4631b10a,0xf5054790,0x462851a4,0xf7f3311c,0xe8bdf919,
+0x46c081ff,0x7883b537,0x69054604,0xd0412b00,0x3848f8d5,0xf7f86818,
+0xf8b4fb05,0x428331e0,0x4628d00a,0xfcc0f7f1,0xf8b44628,0xf7f511e0,
+0x4628f87b,0xfbe4f7f1,0x3848f8d5,0xf7fa6818,0x4628fe73,0xfb38f7f2,
+0x3de0f895,0xf0232101,0xf8850301,0x23033de0,0x46289300,0xf44f2300,
+0xf7f16282,0x8823fa2f,0x0380f023,0xf06f8023,0xf8840301,0x330131e2,
+0x330161a3,0x882370a3,0x0f28f013,0xf023d006,0x80230328,0x07f8f8d5,
+0xfe12f7ff,0x46c0bd3e,0x4604b570,0x460d78a3,0xb1436900,0x51a4f500,
+0xf7f3311c,0x4620f8c1,0xf7ff4629,0xbd70ffa7,0xf8d0b108,0x47700270,
+0xb109460b,0x3270f8d1,0x47706003,0x68004602,0xf8d0b118,0x60133270,
+0x6010e000,0x46c04770,0x461db530,0x4354f241,0x58c1468e,0x6a4a4614,
+0xd9022a09,0x30fff04f,0x1c53e010,0x9b03624b,0x1202eb01,0x9b046313,
+0x63536294,0x6a0a62d5,0x44731cd3,0x0303f023,0x4610620b,0x46c0bd30,
+0x20004684,0x4686b500,0xfb002314,0xf241c303,0x589b323c,0xd0054299,
+0x0e01f10e,0xf1be3001,0xd1f10f08,0x46c0bd00,0xb530b082,0xfb012414,
+0xf2410404,0x9304313c,0x9b065063,0xf5049d07,0x600b519a,0x3344f241,
+0x50e59905,0x50e13304,0x50e23304,0x4030e8bd,0x4770b002,0x4ff0e92d,
+0xfb022414,0xb0870404,0x5498f504,0x343cad01,0x46804617,0xcc0f4689,
+0x6823c50f,0xa00cf8dd,0x4b1d602b,0xb014f8dd,0x5027f853,0x230c2400,
+0x9303fb04,0xf8d34640,0xf7ff11ec,0x4686ffb1,0x4b15b130,0x3020f853,
+0xd20142ab,0xe7ee4604,0xfb072214,0x210c8002,0x9501fb04,0x363cf241,
+0xfb0e5983,0xf2418202,0xf8c5344c,0xfb0731ec,0x59039101,0x31f0f8c5,
+0xf8c15993,0x591331ec,0x31f0f8c1,0x0f00f1ba,0x4658d002,0x47d04649,
+0xe8bdb007,0x46c08ff0,0x0001bbcc,0x43f0e92d,0xfb022414,0xb0870404,
+0x5498f504,0x343cad01,0x46174689,0xcc0f4680,0x6823c50f,0x602b9a02,
+0xfb07230c,0xf8d39303,0x980531ec,0xb10ab35b,0x47904649,0x240c2000,
+0x9604fb00,0xf8d64640,0xf7ff11ec,0x42b8ff5d,0xfb07d1f5,0x46409504,
+0x11ecf8d5,0xff54f7ff,0xfb002414,0xf2418004,0x58c3333c,0xf8c64640,
+0xf8d531ec,0xf7ff11ec,0xfb00ff47,0xf2418404,0x58e3334c,0x31f0f8c6,
+0xf8c52300,0xb00731ec,0x83f0e8bd,0xfb022314,0xb5700303,0xf2414614,
+0x589b323c,0x460d4606,0xd0312b00,0xfb04230c,0xf5031303,0x791372f8,
+0x3301bb53,0x71132c02,0xf8d1d105,0xbb1b321c,0x3210f8d1,0x2c03e01a,
+0x2202d106,0xff96f7ff,0x46294630,0xe0022204,0xd1032c06,0xf7ff2205,
+0xe00cff8d,0xd0022c04,0xd0052c05,0xf8d1e007,0xb94b3210,0xe7f22202,
+0x3234f8d1,0x4630b923,0x46224629,0xff2af7ff,0x46c0bd70,0x1274f8d0,
+0x30f0b510,0x22003174,0xfb0cf7ff,0x46c0bd10,0x4354f241,0x58c3b570,
+0xeb03460d,0x699c0382,0x4628e008,0x0119f104,0xf7ea2206,0xb118ffa1,
+0x426cf8d4,0xd1f42c00,0xbd704620,0xf7ffb510,0xbd10ffe7,0x3848f8d0,
+0x689ab510,0xffe0f7ff,0x46c0bd10,0x41f0e92d,0x4354f241,0x7e0b58c6,
+0x460c4680,0xd1642b00,0xf413684b,0xd1600280,0x0380f443,0x46174635,
+0xe006604b,0xb1136aeb,0x46216b68,0x37014798,0x6a733510,0xd3f5429f,
+0x27004625,0x1118f8d5,0xf8d8b149,0x22000048,0xfb6af7ed,0xf8c52300,
+0xf8c53118,0x1c7b3138,0x3504b2df,0xd1ed2f08,0x73232300,0xf0137e63,
+0xd1170f01,0x3274f8d4,0xeb06689b,0x698a0183,0xd10d42a2,0x326cf8d4,
+0xe00b618b,0x326cf8d2,0xd10442a3,0x326cf8d4,0x326cf8c2,0x461ae002,
+0xd1f32a00,0x42a26832,0x4620d10e,0xfe44f7ff,0xe00b6030,0x3270f8d2,
+0xd10442a3,0x3270f8d4,0x3270f8c2,0x461ae002,0xd1f32a00,0x0048f8d8,
+0x6a324621,0xfb48f7ed,0x20018ab3,0x82b33b01,0x2000e000,0x81f0e8bd,
+0xf241b537,0x59034454,0x68194605,0xf7ffa801,0x592bfe23,0xe00d681c,
+0xf7ff4620,0xf8d4ff53,0xb91b30f0,0x46214628,0xff78f7ff,0xf7ffa801,
+0x4604fe19,0xd1ef2c00,0x46c0bd3e,0xf241b573,0x460e4554,0x46045941,
+0x6809b191,0xf7ffa801,0x5963fe03,0xe0096819,0x2300b10e,0x4620760b,
+0xff5cf7ff,0xf7ffa801,0x4601fdfd,0xd1f32900,0x46c0bd7c,0x47ffe92d,
+0x4354f241,0x8003f850,0xf8b84605,0x468a3014,0xd8072b07,0xf8d82100,
+0xf7ed0020,0x4601f919,0xd1292800,0x4454f241,0x6819592b,0xf0002900,
+0xa803809a,0x770cf8d5,0xfdd2f7ff,0x2400592b,0x46266818,0x7e03e00b,
+0x6a03b933,0x0307ebc3,0xbf2442b3,0x4604461e,0xf7ffa803,0x2800fdc7,
+0x2c00d1f1,0xe081d07f,0xf8d82100,0xf7ed0020,0x4601f8ef,0xd0762800,
+0x3014f8b8,0x3301460e,0x3014f8a8,0xf8d84608,0x21002020,0xff6cf7ea,
+0x370cf8d5,0x623346b1,0x5342f505,0xf8c63368,0x6173a274,0x18b32200,
+0xf04f3202,0x2a1031ff,0x1158f8a3,0x4644d1f7,0xe0062700,0xb1136aa3,
+0x46316b60,0x37014798,0xf8d83410,0x429f3024,0x7c6bd3f4,0xf241b18b,
+0x46287370,0x22005ae9,0xf9ecf7f6,0xf895b148,0xb1133024,0x744af505,
+0xf505e005,0x343454ba,0xf10ae001,0x7dab0414,0x237fb143,0x46209300,
+0xf1062300,0x220101f0,0xe01f9301,0x2023f895,0xf89ab9a2,0xb18b300c,
+0x05f0f106,0x4620277f,0x23014629,0x97009201,0xf958f7ff,0x20f0f8d6,
+0x4620b972,0x97004629,0xe0069201,0x2200237f,0x92019300,0xf1064620,
+0x461301f0,0xf946f7ff,0x3000f8d8,0x6000f8c8,0x3270f8c6,0xf04fe009,
+0xe0060900,0x46214628,0xfe98f7ff,0xd0f62800,0x4648e776,0xe8bdb004,
+0x46c087f0,0x41f0e92d,0x460f4605,0xf7ff4616,0x4604fe67,0xf44fb9e0,
+0xfb06719c,0xf501f101,0x18696128,0x31044628,0xff28f7ff,0xb1784604,
+0xf1002206,0x46390019,0xfef6f7ea,0x4354f241,0x62a658eb,0x0386eb03,
+0x619c699a,0x226cf8c4,0xe8bd4620,0x46c081f0,0xf7ffb510,0xbd10ffd3,
+0x4ff0e92d,0xb08d4f59,0x49596838,0xfc4af7ea,0xd0452801,0xe184f8df,
+0xf8de4c56,0x48561000,0x6821910b,0x91096803,0x930a4954,0x2200680b,
+0x4b539308,0xb000f8d2,0x4d534e52,0x6003600a,0x48534952,0x8000f8d7,
+0x9000f8d6,0xa000f8d5,0xf8ce603a,0x602a2000,0x60226032,0x3a011a09,
+0xfb72f7ea,0x42984b4b,0x4b40d1fc,0xf8c32100,0x4b448000,0x9000f8c3,
+0xf8c34b43,0x680aa000,0x601a4b45,0xb000f8c1,0x990b4b44,0x60199a0a,
+0x99094b39,0x4b37601a,0x60199a08,0x601a4b37,0xf8aaf7ed,0x46072100,
+0xfe4cf7e9,0x21004638,0xfdc6f7e9,0x6a03b128,0xbfbc2b00,0x4300f04f,
+0x46386203,0x8030f8d7,0x9034f8d7,0xfcaaf7e9,0xfbb04c33,0x4638f6f4,
+0xfcaef7e9,0xf5f4fbb0,0xf7ed4638,0x4b2ffd4d,0xf0f4fbb0,0x4b2e9300,
+0x93019006,0x4a2e492d,0x4b2f482e,0x8008f8cd,0x900cf8cd,0x95059604,
+0xfe7ef7ea,0xf640482b,0xf244010d,0xf7ec32f4,0xb148fdc1,0xf6404827,
+0xf2440129,0xf7ec32f4,0xb108fdb9,0xe0002400,0x46382401,0xfc22f7e9,
+0x73fff64f,0x3218f244,0xbf184298,0xf6404602,0x481d0112,0xfda6f7ec,
+0x481ab11c,0x685b6a03,0xf7ed4798,0x4638fce9,0xfd42f7ec,0xe8bdb00d,
+0x46c08ff0,0x0001bc3c,0x0001bbf4,0x000001bc,0x000001b0,0x000001c4,
+0xbbadbadd,0x0001bc40,0x0001bc38,0x00025018,0x00000000,0xdebb20e3,
+0x000001b4,0x000001c0,0x000f4240,0x0001a337,0x0001a078,0x0001bc2a,
+0x0001bc2f,0x0001bbfa,0x0001bc33,0x0001bc78,0x0001bcb4,0x004c9000,
+0x02f25000,0x50000000,0x000102f2,0x01f25000,0xf2500000,0x18100000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000002,
+0x00000001,0x69766564,0x6c770064,0x00646930,0x252f6273,0x70002f75,
+0x69646f72,0x6f620064,0x74647261,0x00657079,0x72616f62,0x616c6664,
+0x78007367,0x666c6174,0x00716572,0x6464656c,0x08080063,0x08080808,
+0x28080808,0x28282828,0x08080808,0x08080808,0x08080808,0x08080808,
+0x10a00808,0x10101010,0x10101010,0x10101010,0x04041010,0x04040404,
+0x04040404,0x10101010,0x41101010,0x41414141,0x01010141,0x01010101,
+0x01010101,0x01010101,0x01010101,0x10101001,0x42101010,0x42424242,
+0x02020242,0x02020202,0x02020202,0x02020202,0x02020202,0x10101002,
+0x00000810,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x10a00000,0x10101010,0x10101010,0x10101010,
+0x10101010,0x10101010,0x10101010,0x10101010,0x01011010,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01011001,0x01010101,
+0x02020201,0x02020202,0x02020202,0x02020202,0x02020202,0x02020202,
+0x02021002,0x02020202,0x73250202,0x6425203a,0x25000a20,0x20783230,
+0x25632500,0x00783330,0x65646e55,0x656e6966,0x72652064,0x20726f72,
+0x25006425,0x64252e64,0x2e64252e,0x67006425,0x256f6970,0x70670064,
+0x58586f69,0x4f005858,0x6e55004b,0x69666564,0x2064656e,0x6f727265,
+0x61420072,0x72412064,0x656d7567,0x4200746e,0x4f206461,0x6f697470,
+0x6f4e006e,0x70752074,0x746f4e00,0x776f6420,0x6f4e006e,0x50412074,
+0x746f4e00,0x41545320,0x64614200,0x79654b20,0x646e4920,0x52007865,
+0x6f696461,0x66664f20,0x746f4e00,0x6e616220,0x6f6c2064,0x64656b63,
+0x206f4e00,0x636f6c63,0x6142006b,0x61522064,0x76206574,0x65756c61,
+0x00746573,0x20646142,0x646e6142,0x66754200,0x20726566,0x206f6f74,
+0x726f6873,0x75420074,0x72656666,0x6f6f7420,0x6e6f6c20,0x75420067,
+0x4e007973,0x4120746f,0x636f7373,0x65746169,0x61420064,0x53532064,
+0x6c204449,0x4f006e65,0x6f207475,0x61522066,0x2065676e,0x6e616843,
+0x006c656e,0x20646142,0x6e616843,0x006c656e,0x20646142,0x72646441,
+0x00737365,0x20746f4e,0x756f6e45,0x52206867,0x756f7365,0x73656372,
+0x736e5500,0x6f707075,0x64657472,0x64614200,0x6e656c20,0x00687467,
+0x20746f4e,0x64616552,0x6f4e0079,0x65502074,0x74696d72,0x00646574,
+0x4d206f4e,0x726f6d65,0x6f4e0079,0x6e492074,0x6e615220,0x57006567,
+0x4e20454d,0x4520746f,0x6c62616e,0x54006465,0x43455053,0x746f4e20,
+0x756f4620,0x4100646e,0x4e204d43,0x5320746f,0x6f707075,0x64657472,
+0x746f4e00,0x454d5720,0x73734120,0x6169636f,0x6e6f6974,0x49445300,
+0x7542204f,0x72452073,0x00726f72,0x676e6f44,0x4e20656c,0x4120746f,
+0x73656363,0x6c626973,0x6e490065,0x72726f63,0x20746365,0x73726576,
+0x006e6f69,0x78323025,0x3230253a,0x30253a78,0x253a7832,0x3a783230,
+0x78323025,0x3230253a,0x00000078,0x00000000,0x77073096,0xee0e612c,
+0x990951ba,0x076dc419,0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,
+0x79dcb8a4,0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,
+0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,0x1adad47d,
+0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,0x646ba8c0,0xfd62f97a,
+0x8a65c9ec,0x14015c4f,0x63066cd9,0xfa0f3d63,0x8d080df5,0x3b6e20c8,
+0x4c69105e,0xd56041e4,0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,
+0xa50ab56b,0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,
+0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,0xc8d75180,
+0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,0xb8bda50f,0x2802b89e,
+0x5f058808,0xc60cd9b2,0xb10be924,0x2f6f7c87,0x58684c11,0xc1611dab,
+0xb6662d3d,0x76dc4190,0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,
+0x06b6b51f,0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,
+0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,0x6b6b51f4,
+0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,0x1b01a57b,0x8208f4c1,
+0xf50fc457,0x65b0d9c6,0x12b7e950,0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,
+0x15da2d49,0x8cd37cf3,0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,
+0xd4bb30e2,0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,
+0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,0xaa0a4c5f,
+0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,0xc90c2086,0x5768b525,
+0x206f85b3,0xb966d409,0xce61e49f,0x5edef90e,0x29d9c998,0xb0d09822,
+0xc7d7a8b4,0x59b33d17,0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,
+0x9abfb3b6,0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,
+0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,0xe40ecf0b,
+0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,0x8708a3d2,0x1e01f268,
+0x6906c2fe,0xf762575d,0x806567cb,0x196c3671,0x6e6b06e7,0xfed41b76,
+0x89d32be0,0x10da7a5a,0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,
+0x60b08ed5,0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,
+0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,0x36034af6,
+0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,0x4669be79,0xcb61b38c,
+0xbc66831a,0x256fd2a0,0x5268e236,0xcc0c7795,0xbb0b4703,0x220216b9,
+0x5505262f,0xc5ba3bbe,0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,
+0xb5d0cf31,0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,
+0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,0x95bf4a82,
+0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,0xe5d5be0d,0x7cdcefb7,
+0x0bdbdf21,0x86d3d2d4,0xf1d4e242,0x68ddb3f8,0x1fda836e,0x81be16cd,
+0xf6b9265b,0x6fb077e1,0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,
+0x11010b5c,0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,
+0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,0x4969474d,
+0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,0x37d83bf0,0xa9bcae53,
+0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,0xbdbdf21c,0xcabac28a,0x53b39330,
+0x24b4a3a6,0xbad03605,0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,
+0xc4614ab8,0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,
+0x2d02ef8d,0x4eb9f700,0x6b9cd225,0x04f3bd4a,0x21d6986f,0xda2d6394,
+0xff0846b1,0x906729de,0xb5420cfb,0x31c6887f,0x14e3ad5a,0x7b8cc235,
+0x5ea9e710,0xa5521ceb,0x807739ce,0xef1856a1,0xca3d7384,0xb04709fe,
+0x95622cdb,0xfa0d43b4,0xdf286691,0x24d39d6a,0x01f6b84f,0x6e99d720,
+0x4bbcf205,0xcf387681,0xea1d53a4,0x85723ccb,0xa05719ee,0x5bace215,
+0x7e89c730,0x11e6a85f,0x34c38d7a,0xe5125cab,0xc037798e,0xaf5816e1,
+0x8a7d33c4,0x7186c83f,0x54a3ed1a,0x3bcc8275,0x1ee9a750,0x9a6d23d4,
+0xbf4806f1,0xd027699e,0xf5024cbb,0x0ef9b740,0x2bdc9265,0x44b3fd0a,
+0x6196d82f,0x1beca255,0x3ec98770,0x51a6e81f,0x7483cd3a,0x8f7836c1,
+0xaa5d13e4,0xc5327c8b,0xe01759ae,0x6493dd2a,0x41b6f80f,0x2ed99760,
+0x0bfcb245,0xf00749be,0xd5226c9b,0xba4d03f4,0x9f6826d1,0x33323130,
+0x37363534,0x62613938,0x66656463,0x756e2800,0x00296c6c,0x33323130,
+0x37363534,0x42413938,0x46454443,0x70746f00,0x696e695f,0x61662074,
+0x64656c69,0x4f000a2e,0x6c205054,0x20746665,0x62207825,0x73657479,
+0x7562203b,0x72656666,0x20782520,0x65747962,0x42000a73,0x65666675,
+0x666f2072,0x7a697320,0x64252065,0x74796220,0x74207365,0x7277206f,
+0x3a657469,0x6761000a,0x72730030,0x775f6d6f,0x65746972,0x6c6f203a,
+0x52535b64,0x5f344d4f,0x4e474953,0x7830205d,0x202c7825,0x5b646c6f,
+0x4d4f5253,0x49535f38,0x205d4e47,0x78257830,0x000d000a,0x00001501,
+0x03012ee0,0x00090016,0x00ffffef,0x010232c8,0x000b0006,0x00483483,
+0x01033840,0x000a000a,0x001c71c7,0x01043c00,0x000b0005,0x00755555,
+0x01053f48,0x0005000a,0x006e9e06,0x010641a0,0x0005000a,0x003cf3cf,
+0x01074b00,0x000b0004,0x00755555,0x01084d58,0x0004000b,0x000a57eb,
+0x01094e20,0x0004000b,0x00000000,0x030a5dc0,0x000a000b,0x00000000,
+0x050b61a8,0x000b0010,0x00000000,0x010c6590,0x00100002,0x00ec4ec4,
+0x030d7530,0x000b0008,0x00000000,0x0c0e9600,0x01130001,0x00000000,
+0x010f9c40,0x000b0002,0x00000000,0x00000000,0x00000000,0x00000000,
+0x6e696d72,0x616d7200,0x25720078,0x72007464,0x00646425,0x00200000,
+0x00000001,0x000d8020,0x00000000,0x00000200,0x000000ff,0x0000000c,
+0x00000000,0x00200000,0x00000001,0x000d8020,0x00000000,0x00002ed9,
+0x00002cf1,0x00003251,0x000029c5,0x000029dd,0x000029f1,0x00002a05,
+0x00002a85,0x000033c9,0x00002a1d,0x000034d9,0x00002aad,0x000026d1,
+0x00002715,0x0000271d,0x0000273d,0x00002bf1,0x00002d75,0x00003211,
+0x00002a4d,0x00002a35,0x0000269d,0x00002a6d,0x00003651,0x000036d5,
+0x00003631,0x00002b35,0x00002681,0x000036b9,0x0000279d,0x00000000,
+0x00000000,0x00000000,0x00002785,0x00002755,0x00000024,0x00002ed9,
+0x00002d39,0x00003351,0x000027ad,0x000027c5,0x000027d9,0x000027ed,
+0x000032c9,0x000034fd,0x00002805,0x0000360d,0x0000286d,0x000026d1,
+0x00002715,0x0000271d,0x0000273d,0x000028f5,0x00002d75,0x00003311,
+0x00002835,0x0000281d,0x0000269d,0x00002855,0x00003651,0x000036d5,
+0x00003631,0x00002b35,0x00002681,0x000036b9,0x0000279d,0x00000000,
+0x00000000,0x00000000,0x00002785,0x00002755,0x00000024,0x61787426,
+0x6c696176,0x6d654d00,0x2079726f,0x67617375,0x000a3a65,0x74786554,
+0x6425203a,0x4b642528,0x44202c29,0x3a617461,0x28642520,0x294b6425,
+0x7342202c,0x25203a73,0x64252864,0x202c294b,0x63617453,0x25203a6b,
+0x000a4b64,0x6e657241,0x6f742061,0x3a6c6174,0x28642520,0x294b6425,
+0x7246202c,0x203a6565,0x25286425,0x2c294b64,0x206e4920,0x3a657375,
+0x28642520,0x294b6425,0x5748202c,0x25203a4d,0x64252864,0x000a294b,
+0x75206e49,0x2b206573,0x65766f20,0x61656872,0x25203a64,0x64252864,
+0x202c294b,0x2078614d,0x6f6d656d,0x69207972,0x7375206e,0x25203a65,
+0x64252864,0x000a294b,0x6c6c614d,0x6620636f,0x756c6961,0x63206572,
+0x746e756f,0x6425203a,0x7453000a,0x206b6361,0x74746f62,0x68206d6f,
+0x62207361,0x206e6565,0x7265766f,0x74697277,0x0a6e6574,0x61745300,
+0x62206b63,0x6f74746f,0x30203a6d,0x2c702578,0x6d776c20,0x7830203a,
+0x202c7025,0x72727563,0x7830203a,0x202c7025,0x3a706f74,0x25783020,
+0x72460a70,0x73206565,0x6b636174,0x7830203a,0x25287825,0x6c202964,
+0x203a6d77,0x78257830,0x29642528,0x756e490a,0x73206573,0x6b636174,
+0x7830203a,0x25287825,0x68202964,0x203a6d77,0x78257830,0x29642528,
+0x756d000a,0x00776d00,0x7420776d,0x6c61746f,0x4b642520,0x0000000a,
+0x00000078,0x000000f0,0x000001e0,0x000003c0,0x00000780,0x0000103c,
+0x0a3f003f,0x52540a00,0x203a5041,0x65707974,0x2c642520,0x63706520,
+0x25783020,0x63202c78,0x20727370,0x78257830,0x7073202c,0x30207273,
+0x2c782578,0x2020000a,0x20203072,0x30257830,0x202c7838,0x30203172,
+0x38302578,0x72202c78,0x30202032,0x38302578,0x72202c78,0x30202033,
+0x38302578,0x000a2c78,0x34722020,0x78302020,0x78383025,0x3572202c,
+0x25783020,0x2c783830,0x20367220,0x25783020,0x2c783830,0x20377220,
+0x25783020,0x2c783830,0x2020000a,0x20203872,0x30257830,0x202c7838,
+0x30203972,0x38302578,0x72202c78,0x30203031,0x38302578,0x72202c78,
+0x30203131,0x38302578,0x000a2c78,0x31722020,0x78302032,0x78383025,
+0x7073202c,0x25783020,0x2c783830,0x20726c20,0x25783020,0x2c783830,
+0x20637020,0x25783020,0x0a783830,0x63657200,0x6d69616c,0x63657320,
+0x6e6f6974,0x203a3120,0x75746552,0x64656e72,0x20642520,0x65747962,
+0x6f742073,0x65687420,0x61656820,0x72000a70,0x74736d61,0x69647962,
+0x4e280073,0x7564206f,0x6572706d,0x77207367,0x6f687469,0x42207475,
+0x42444d43,0x000a2947,0x7478616d,0x746b7078,0x6d6f6c67,0x6c787400,
+0x64797a61,0x79616c65,0x67787400,0x616d6f6c,0x6e67696c,0x67787400,
+0x006d6f6c,0x77737874,0x6e656c71,0x64787400,0x00706f72,0x666b6361,
+0x66747361,0x61006477,0x69736b63,0x6874657a,0x72006473,0x6b636178,
+0x78740073,0x656c2071,0x25203a6e,0x6d203a64,0x25287861,0x000a2964,
+0x706f7264,0x20646570,0x6d617266,0x25207365,0x48000a64,0x2074736f,
+0x736b6341,0x28642520,0x6c707865,0x74696369,0x20642520,0x6970202b,
+0x62796767,0x656b6361,0x64252064,0x7562000a,0x72652073,0x73726f72,
+0x7872203a,0x6f666966,0x776f6c66,0x6425203a,0x7562000a,0x6c662073,
+0x6f63776f,0x6f72746e,0x72203a6c,0x6d696c78,0x6425203a,0x7872202c,
+0x696c5f68,0x25203a6d,0x64000a64,0x6c676e6f,0x6c662065,0x6f63776f,
+0x6f72746e,0x66203a6c,0x25203a63,0x65202c64,0x696c7078,0x3a746963,
+0x2c642520,0x69616620,0x25203a6c,0x53000a64,0x444f4944,0x50005645,
+0x49434d43,0x56454441,0x70736700,0x6f776469,0x47006472,0x20495053,
+0x726f7744,0x6f4d2064,0x65206564,0x6c62616e,0x000a6465,0x49505347,
+0x6f774420,0x4d206472,0x2065646f,0x61736944,0x64656c62,0x7562000a,
+0x61747373,0x73007374,0x6d637064,0x63646364,0x25006425,0x42203a73,
+0x64616f72,0x206d6f63,0x43504453,0x4320444d,0x64204344,0x65766972,
+0x62000a72,0x003a7375,0x00306c77,0x008f0080,0x00ad009e,0x2578300a,
+0x3a783430,0x78302000,0x78343025,0x00400000,0x005e004f,0x0080006d,
+0x009e008f,0x008d00ad,0x00af009e,0x00de00cd,0x010d00ef,0x012f011e,
+0x00000002,0x00040160,0x03010005,0x00040164,0x00140000,0x00040124,
+0x00000004,0x00040128,0x00000000,0x0004012c,0x00000000,0x00040130,
+0x00000000,0x00040134,0x0070040a,0x00040134,0x00d4beef,0x00040134,
+0xff000005,0x00040134,0xff02ff01,0x00040130,0x00000018,0x00040134,
+0x00e0040a,0x00040134,0x0048beef,0x00040134,0xff000005,0x00040134,
+0xff02ff01,0x00040134,0x01181000,0x00040134,0x10000302,0x00040134,
+0xf3f2f118,0x00040134,0x0000ccbb,0x00040130,0x00000038,0x00040134,
+0x00000000,0x00040130,0x00000058,0x00040134,0x00000000,0x00040130,
+0x00000038,0x00040134,0x0700200f,0x00040134,0x00940000,0x00040134,
+0x90000000,0x00040134,0x77767574,0x00040134,0x00000000,0x00040134,
+0x00050000,0x00040134,0xffffffff,0x00040130,0x00000268,0x00040134,
+0x0033846e,0x00040134,0x0050badc,0x00040134,0xab0000d4,0x00040134,
+0xdabadaba,0x00040134,0xf1181000,0x00040134,0x1000f3f2,0x00040134,
+0xf3f2f118,0x00040134,0x00000010,0x00040134,0x00000000,0x00040134,
+0x000a0000,0x00040134,0x0e000001,0x00040134,0x4d435242,0x00040134,
+0x5345545f,0x00040134,0x53535f54,0x00040134,0x04014449,0x00040134,
+0x968b8482,0x00040134,0x06010103,0x00040134,0x00000002,0x00040130,
+0x00000068,0x00040134,0x0228040a,0x00040134,0x0080badc,0x00040134,
+0xffff0000,0x00040134,0xffffffff,0x00040134,0xf1181000,0x00040134,
+0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,0x0000afd0,0x00040134,
+0x00000000,0x00040134,0x01000000,0x00040134,0x0e000002,0x00040134,
+0x4d435242,0x00040134,0x5345545f,0x00040134,0x53535f54,0x00040134,
+0x04014449,0x00040134,0x968b8482,0x00040134,0x06010103,0x00040134,
+0x00000102,0x00040130,0x00000468,0x00040134,0x0228040a,0x00040134,
+0x0080badc,0x00040134,0xffff0000,0x00040134,0xffffffff,0x00040134,
+0xf1181000,0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,
+0x0000afd0,0x00040134,0x00000000,0x00040134,0x01000000,0x00040134,
+0x0e000002,0x00040134,0x4d435242,0x00040134,0x5345545f,0x00040134,
+0x53535f54,0x00040134,0x04014449,0x00040134,0x968b8482,0x00040134,
+0x06010103,0x00040134,0x00000102,0x00040100,0x01000000,0x00020490,
+0x00000000,0x000204a0,0x0000f3f1,0x000204b0,0x0000fdef,0x000204a8,
+0x0000ffff,0x000204a8,0x00000000,0x000204aa,0x00000000,0x000204a4,
+0x00001acf,0x000204ac,0x00000000,0x000204bc,0x00000000,0x000204a6,
+0x000002c7,0x000204b6,0x0000fdff,0x000204ae,0x0000ffff,0x00020406,
+0x00000001,0x00020406,0x00000000,0x0002040c,0x00000014,0x00020406,
+0x00000000,0x00020448,0x00000c00,0x00020402,0x00000630,0x00020502,
+0x00000000,0x00020500,0x00004000,0x00020502,0x00000004,0x00020500,
+0x00004000,0x00020502,0x00000008,0x00020500,0x00004000,0x00020502,
+0x0000000c,0x00020500,0x00004000,0x00020502,0x000000c0,0x00020580,
+0x0000ffff,0x00020582,0x0000ffff,0x00020584,0x0000ffff,0x00020586,
+0x0000ffff,0x00020588,0x0000ffff,0x0002059c,0x0000fff0,0x00020540,
+0x00008000,0x00020520,0x00000f06,0x00020540,0x00008000,0x00020540,
+0x00008100,0x00020520,0x00001d10,0x00020540,0x00008100,0x00020540,
+0x00008200,0x00020520,0x0000281e,0x00020540,0x00008200,0x00020540,
+0x00008300,0x00020520,0x00003129,0x00020540,0x00008300,0x00020540,
+0x00008400,0x00020520,0x00003f32,0x00020540,0x00008400,0x00020540,
+0x00008500,0x00020520,0x00004140,0x00020540,0x00008500,0x00020612,
+0x00000001,0x0002062e,0x0000a2e9,0x00020630,0x0000000b,0x00020600,
+0x00008004,0x00020696,0x00000008,0x0002069a,0x000000e4,0x00020688,
+0x00000000,0x0002069c,0x00000002,0x00020688,0x00001000,0x0002069c,
+0x00000002,0x00020688,0x00002000,0x0002069c,0x00000002,0x00020688,
+0x00003000,0x0002069c,0x00000002,0x00020688,0x00000f0b,0x0002069e,
+0x00000007,0x00020510,0x0000000b,0x00020450,0x00004e01,0x00020452,
+0x0000015b,0x000204e4,0x00000090,0x00040160,0x03010004,0x00040164,
+0x00000000,0x00040164,0x00000080,0x00040164,0x00470047,0x00040164,
+0x00640000,0x00040164,0x00400930,0x00040160,0x0301000d,0x00040164,
+0x00020002,0x00040164,0x00040001,0x00040164,0x00000005,0x00040160,
+0x03010011,0x00040164,0x00640064,0x00040164,0x0047000e,0x00040164,
+0x00002800,0x00040160,0x03010015,0x00040164,0x06b40000,0x00040164,
+0xffffffff,0x00040164,0x0000000a,0x00040160,0x0301001d,0x00040164,
+0x00002710,0x00040164,0x08d80000,0x00040160,0x03010020,0x00040164,
+0x27100006,0x00040160,0x03010024,0x00040164,0x08ee0000,0x00040164,
+0x00320000,0x00040164,0x090b0e0a,0x00040164,0x0000020e,0x00040160,
+0x03010029,0x00040164,0x013f0000,0x00040164,0x0c00ffff,0x00040164,
+0x7b420474,0x00040164,0x08640002,0x00040160,0x0301002e,0x00040164,
+0x80000000,0x00040160,0x03010058,0x00040164,0x4d435242,0x00040164,
+0x5345545f,0x00040164,0x53535f54,0x00040164,0x00004449,0x00040160,
+0x03010060,0x00040164,0x00000039,0x00040164,0x00000050,0x00040164,
+0x000000c0,0x00040160,0x03010070,0x00040164,0x03f803f8,0x00040164,
+0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,
+0x04200434,0x00040164,0x03f8040c,0x00040164,0x042a043e,0x00040164,
+0x04020416,0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,
+0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x04200434,0x00040164,
+0x03f8040c,0x00040164,0x042a043e,0x00040164,0x04020416,0x00040164,
+0x04480448,0x00040164,0x04480448,0x00040164,0x04480453,0x00040164,
+0x045e0448,0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,
+0x04480448,0x00040164,0x04480469,0x00040164,0x04480448,0x00040164,
+0x04480448,0x00040164,0x04480453,0x00040164,0x045e0448,0x00040164,
+0x04480448,0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,
+0x04480469,0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,
+0x00000002,0x00040164,0x00000002,0x00040160,0x03010098,0x00040164,
+0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000001,0x00040164,
+0x00000001,0x00040160,0x030100a0,0x00040164,0x001f0000,0x00040164,
+0x001f03ff,0x00040164,0x00000001,0x00040164,0x00000001,0x00040160,
+0x030100a8,0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,
+0x00000001,0x00040164,0x00000001,0x00040160,0x030100c0,0x00040164,
+0x24372437,0x00040164,0x24372437,0x00040160,0x03010192,0x00040164,
+0x0000048c,0x00040160,0x030101a0,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040160,0x030101fc,0x00040164,0x01cb0020,0x00040164,
+0x00540000,0x00040164,0x08ab0000,0x00040164,0x04100000,0x00040164,
+0x00020084,0x00040164,0x01cf0014,0x00040164,0x00440002,0x00040164,
+0x08af0000,0x00040164,0x04100002,0x00040164,0x02020064,0x00040164,
+0x01ca0010,0x00040164,0x003c0002,0x00040164,0x08aa0000,0x00040164,
+0x04100002,0x00040164,0x08020054,0x00040164,0x01ce0008,0x00040164,
+0x00340000,0x00040164,0x08ae0000,0x00040164,0x04100000,0x00040164,
+0x0a020044,0x00040164,0x01c90008,0x00040164,0x00300002,0x00040164,
+0x08a90000,0x00040164,0x04100002,0x00040164,0x1002003c,0x00040164,
+0x01cd0004,0x00040164,0x002c0000,0x00040164,0x08ad0000,0x00040164,
+0x04100000,0x00040164,0x12020034,0x00040164,0x01c80004,0x00040164,
+0x002c0000,0x00040164,0x08a80000,0x00040164,0x04100000,0x00040164,
+0x19020030,0x00040164,0x01cc0000,0x00040164,0x002c0002,0x00040164,
+0x08ac0000,0x00040164,0x04100002,0x00040164,0x1a020030,0x00040164,
+0x040a00c0,0x00040164,0x00000070,0x00040164,0x040a013a,0x00040164,
+0xc02c0228,0x00040164,0x040a02f2,0x00040164,0x00600100,0x00040164,
+0x00380414,0x00040164,0x01020000,0x00040164,0x01140414,0x00040164,
+0x01dec02c,0x00040164,0x00800414,0x00040164,0x04370022,0x00040164,
+0x00000015,0x00040164,0x043700df,0x00040164,0xc02c0065,0x00040164,
+0x0437012e,0x00040164,0x0011002f,0x00040164,0x000b846e,0x00040164,
+0x00d40000,0x00040164,0x0033846e,0x00040164,0x00fcc02c,0x00040164,
+0x0018846e,0x00040164,0x9d8a0002,0x00040164,0x080200fb,0x00040164,
+0x00fa4ec5,0x00040164,0x34830a02,0x00040164,0x100200fe,0x00040164,
+0x00f92762,0x00040164,0x1a421202,0x00040164,0x190200fd,0x00040164,
+0x00f813b1,0x00040164,0x11811a02,0x00040164,0x1c0200fc,0x00040164,
+0x00fc0fc1,0x00040160,0x03010346,0x00040164,0x00000207,0x00040160,
+0x0301034e,0x00040164,0x00010000,0x00040160,0x03010350,0x00040164,
+0x000c0000,0x00040160,0x0301046c,0x00040164,0xeb300035,0x00040164,
+0x4444eb24,0x00040164,0x40200000,0x00040164,0x10080020,0x00040164,
+0xde5e0008,0x00040164,0xe331e832,0x00040164,0x00264d26,0x00040164,
+0x00201420,0x00040164,0x0008fe08,0x00040164,0x00180000,0x00040160,
+0x03010477,0x00040164,0x1d4c0bb8,0x00040164,0x00640ea6,0x00040164,
+0x01f40000,0x00040164,0x00000041,0x00040164,0x3a9861a8,0x00040164,
+0x001e0000,0x00040160,0x0301047f,0x00040164,0x0000c350,0x00040160,
+0x03010481,0x00040164,0x05140000,0x00040164,0x00002008,0x00040160,
+0x03010485,0x00040164,0x00004e20,0x00040164,0x000f0000,0x00040164,
+0x000601f4,0x00040160,0x0301048b,0x00040164,0x00010000,0x00040164,
+0x00060000,0x00040164,0x000f0002,0x00040164,0x0000afc8,0x00040164,
+0x00001388,0x00040164,0x000f17ec,0x00040160,0x03010492,0x00040164,
+0x012c0000,0x00040164,0x0fa00000,0x00040160,0x030104c3,0x00040164,
+0x00070000,0x00040164,0x001e0014,0x00040160,0x030104d1,0x00040164,
+0x00be0000,0x00040160,0x00020003,0x00040164,0x0000001f,0x00040160,
+0x00020004,0x00040164,0x000003ff,0x00040160,0x00020005,0x00040164,
+0x0000001f,0x00040160,0x00020006,0x00040164,0x00000007,0x00040160,
+0x00020007,0x00040164,0x00000004,0x00040160,0x00020008,0x00040164,
+0x0000ffff,0x00040160,0x00020009,0x00040164,0x00000000,0x00040160,
+0x0002000a,0x00040164,0x00000000,0x00040160,0x0002000b,0x00040164,
+0x00000000,0x00040160,0x0002000c,0x00040164,0x00000000,0x00040160,
+0x0002000d,0x00040164,0x00000000,0x00040160,0x0002000e,0x00040164,
+0x00000000,0x00040160,0x0002000f,0x00040164,0x00000000,0x00040160,
+0x00020010,0x00040164,0x0000001f,0x00040160,0x00020011,0x00040164,
+0x00000000,0x00040160,0x00020012,0x00040164,0x00000000,0x00040160,
+0x00020013,0x00040164,0x00000000,0x00040160,0x00020015,0x00040164,
+0x00000000,0x00040160,0x00020016,0x00040164,0x00000000,0x0000ffff,
+0x00000000,0x00020686,0x000009d0,0x00020680,0x00003e3e,0x00020682,
+0x0000023e,0x00020700,0x0000003c,0x00020684,0x00000212,0x00040160,
+0x00010003,0x00020164,0x000000c0,0x00040160,0x00010003,0x00020166,
+0x0000000a,0x00040160,0x00010004,0x00020164,0x00000014,0x00040160,
+0x00010007,0x00020164,0x00000183,0x00040160,0x00010025,0x00020164,
+0x000001f4,0x00040160,0x000104d2,0x00020166,0x0000042b,0x00040160,
+0x000104d3,0x00020164,0x00000100,0x00040160,0x000101fe,0x00020164,
+0x0000003c,0x00040160,0x00010203,0x00020164,0x00000034,0x00040160,
+0x00010208,0x00020164,0x00000030,0x00040160,0x0001020d,0x00020164,
+0x0000002c,0x00040160,0x00010212,0x00020164,0x0000002c,0x00040160,
+0x00010217,0x00020164,0x00000028,0x00040160,0x0001021c,0x00020164,
+0x00000028,0x00040160,0x00010221,0x00020164,0x00000028,0x0000ffff,
+0x00000000,0x00000207,0x00000000,0x00000060,0x00000000,0x00000060,
+0x10000000,0x00000065,0x20000000,0x00000065,0x10000000,0x0000006d,
+0x20000000,0x0000006d,0xc0000000,0x0000006c,0x20000001,0x00000075,
+0x20000002,0x00000070,0x30000002,0x00000070,0x20000083,0x00000078,
+0x30000104,0x00000078,0x40004185,0x00000078,0x10004185,0x0000002d,
+0x20008206,0x0000002d,0x3020c287,0x0000002d,0x40410308,0x0000002d,
+0x50614389,0x0000002d,0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,
+0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,0x31028698,0x0000002c,
+0x71230b91,0x0000003d,0xb143481a,0x0000003a,0xc185cc94,0x00000038,
+0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,
+0xb246cea1,0x0000003d,0xc2655024,0x0000003d,0xd36751a6,0x0000003d,
+0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,
+0x94ea162e,0x00000039,0x24ea162e,0x0000003a,0x00000000,0x00000060,
+0x00000000,0x00000060,0x10000000,0x00000065,0x20000000,0x00000065,
+0x10000000,0x0000006d,0x20000000,0x0000006d,0xc0000000,0x0000006c,
+0x20000001,0x00000075,0x20000002,0x00000070,0x30000002,0x00000070,
+0x20000083,0x00000078,0x30000104,0x00000078,0x00000104,0x00000028,
+0x10004185,0x0000002d,0x20008206,0x0000002d,0x3020c287,0x0000002d,
+0x40410308,0x0000002d,0x50614389,0x0000002d,0x6081840a,0x0000002d,
+0x70a1c48b,0x0000002d,0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,
+0x31028698,0x0000002c,0x71230b91,0x0000003d,0xb143481a,0x0000003a,
+0xc185cc94,0x00000038,0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,
+0xa204ca9e,0x0000003d,0xb246cea1,0x0000003d,0xc2655024,0x0000003d,
+0xd36751a6,0x0000003d,0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,
+0x24aa95ae,0x00000039,0x94ea162e,0x00000039,0x24ea162e,0x0000003a,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x18cd08ce,0x194d2051,
+0x214d24cd,0x0829254d,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b00c1,0x044f0833,0x04570453,0x045b0157,0x0c5b085b,0x083308db,
+0x015b084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x0757015f,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x000408ce,0x00240008,
+0x00440040,0x00410048,0x00360409,0x0056003a,0x005b005a,0x00db00d7,
+0x01280128,0x00090009,0x00280028,0x00280028,0x01280128,0x00090009,
+0x00280028,0x00280028,0x00090009,0x00090009,0x00090009,0x00090009,
+0x00180018,0x00180018,0x00180018,0x00180018,0x01280128,0x00090009,
+0x00280028,0x00280028,0x01280128,0x00090009,0x00280028,0x00280028,
+0x00090009,0x00090009,0x00090009,0x00090009,0x00180018,0x00180018,
+0x00180018,0x00180018,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x2d364c00,0x00000000,0x2d364c00,0x01100120,0x00080001,
+0x00100020,0x00100020,0x01200120,0x00080001,0x00100020,0x00100020,
+0x00010001,0x00010001,0x00010001,0x00010001,0x00200020,0x00200020,
+0x00200020,0x00200020,0x01200120,0x00080001,0x00100020,0x00100020,
+0x01200120,0x00080001,0x00100020,0x00100020,0x00010001,0x00010001,
+0x00010001,0x00010001,0x00200020,0x00200020,0x00200020,0x00200020,
+0x00019d0c,0x00000040,0x00000002,0x00000000,0x00000010,0x0001921c,
+0x00000028,0x00000001,0x00000000,0x00000010,0x00019adc,0x0000000a,
+0x0000000b,0x00000000,0x00000020,0x00019b14,0x00000014,0x0000000c,
+0x00000000,0x00000020,0x00019dd0,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00019cd8,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x0001919c,0x00000040,0x0000000f,0x00000000,0x00000010,0x00019b04,
+0x00000010,0x00000010,0x00000000,0x00000008,0x00019588,0x00000044,
+0x00000011,0x00000000,0x00000008,0x000194c8,0x00000060,0x00000012,
+0x00000000,0x00000010,0x00019d8c,0x00000040,0x00000014,0x00000000,
+0x00000008,0x00019ba4,0x0000009a,0x00000017,0x00000000,0x00000010,
+0x000193f0,0x0000006c,0x00000000,0x00000000,0x00000010,0x03000200,
+0x06000400,0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,
+0x20071707,0x40072d07,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,
+0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00200000,
+0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,0x044b0447,
+0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,0x0457084f,
+0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,0x055b0b57,
+0x07570b5b,0x0f5b1cd7,0x1357075b,0x175b135b,0x00000000,0x00000000,
+0x08000400,0x10000a00,0x18001400,0x14011c00,0x1c011801,0x04012001,
+0x0c010801,0x14011001,0x1c011801,0x1c211821,0x24212021,0x200d2041,
+0x0c561849,0x14491849,0x184d14c5,0x18cd1c4d,0x194d2051,0x214d24cd,
+0x0829254d,0x00000409,0x00000000,0x00000000,0x00000000,0x19130d07,
+0x0d0905fc,0x0a060401,0x14120f0c,0x000c0600,0x00120000,0x00180000,
+0x00000000,0x00000000,0x00000000,0x001e0000,0x00000000,0x09060300,
+0x15120f0c,0x001e1b18,0x00000000,0x0000e803,0x10000000,0x00000040,
+0x20000000,0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,
+0x50000000,0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,
+0x60000001,0x00000048,0x70000002,0x00000048,0x80000002,0x00000048,
+0x50000083,0x00000058,0x60000104,0x00000058,0x70004185,0x00000058,
+0xd0004185,0x0000000b,0xe0008206,0x0000000b,0xf020c287,0x0000000b,
+0x00410308,0x0000000c,0x10614389,0x00000014,0x6081840a,0x00000010,
+0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,0x30e2458e,0x00000014,
+0x41028698,0x0000001c,0x31230b91,0x0000001c,0x5143481a,0x0000001c,
+0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,0x81e64d96,0x0000001c,
+0x9204ca9e,0x0000001c,0xa246cea1,0x0000001c,0xb2655024,0x0000001c,
+0x436751a6,0x00000019,0xc3e95529,0x00000019,0x6449d42e,0x00000019,
+0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,0x44ea162e,0x0000001a,
+0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,0x00000040,
+0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,0x00000048,
+0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,0x00000048,
+0x40000002,0x00000058,0x50000083,0x00000058,0x60000104,0x00000058,
+0xc0000104,0x0000000c,0xd0004185,0x0000000b,0xd0008206,0x0000000c,
+0xf020c287,0x0000000b,0x00410308,0x0000000c,0x10614389,0x00000014,
+0x6081840a,0x00000010,0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,
+0x30e2458e,0x00000014,0x51028698,0x00000014,0x31230b91,0x0000001c,
+0x5143481a,0x0000001c,0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,
+0xe1e64d96,0x0000001c,0xf204ca9e,0x0000001c,0x0246cea1,0x0000001d,
+0xb2655024,0x0000001c,0x436751a6,0x00000019,0xc3e95529,0x00000019,
+0x6449d42e,0x00000019,0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,
+0x44ea162e,0x0000001a,0x000195cc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00019cd8,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x0001901c,0x00000060,0x00000012,0x00000000,0x00000010,0x00000003,
+0x00ffff07,0xfff60755,0xea075500,0x075500ff,0x5500ffdc,0x00f1dc07,
+0xf1d10755,0xc5075500,0x075500f1,0x5500f1bf,0x00f1ba07,0xf1b40755,
+0xaf075500,0x075500f1,0x5500f1aa,0x00f1a507,0xf1a10755,0x9c075500,
+0x075500f1,0x5500f198,0x00f19307,0xf18f0755,0x8b075500,0x075500f1,
+0x5500f187,0x00f18307,0xf1800755,0x7c075500,0x075500f1,0x5500f179,
+0x00f17507,0xf1720755,0x6f075500,0x075500f1,0x5500f16b,0x00f16807,
+0xf1650755,0x63075500,0x075500f1,0x5500f160,0x00f15d07,0xf15a0755,
+0x58075500,0x075500f1,0x5500f155,0x00f15307,0xf1510755,0x4e075500,
+0x075500f1,0x5500f14c,0x00f14a07,0xf1480755,0x46075500,0x075500f1,
+0x5500f144,0x00f14207,0xf1400755,0x3e075500,0x075500f1,0x5500f13c,
+0x00f13b07,0xea3b0755,0x39075500,0x075500ea,0x5500e339,0x00e33707,
+0xdd370755,0x36075500,0x075500dd,0x5500d736,0x00d73407,0xd0340755,
+0x33075500,0x075500d0,0x5500cb33,0x00cb3107,0xc5310755,0x30075500,
+0x075500c5,0x5500bf30,0x00bf2f07,0xba2f0755,0x2d075500,0x075500ba,
+0x5500b52d,0x00b52c07,0xaf2c0755,0x2b075500,0x075500af,0x5500aa2b,
+0x00aa2a07,0xa62a0755,0x28075500,0x075500a6,0x5500a128,0x00a12707,
+0x9c270755,0x26075500,0x0755009c,0x55009826,0x00982507,0x94250755,
+0x24075500,0x07550094,0x55008f24,0x008f2307,0x8b230755,0x22075500,
+0x0755008b,0x55008722,0x00872107,0x84210755,0x20075500,0x07550084,
+0x55008020,0x00801f07,0x7c1f0755,0x1e075500,0x0755007c,0x5500791e,
+0x00791d07,0x751d0755,0x1d075500,0x07550075,0x5500721d,0x00721c07,
+0x6f1c0755,0x1b075500,0x0755006f,0x55006c1b,0x006c1a07,0x681a0755,
+0x19075500,0x07550068,0x55006619,0x00661907,0x63190755,0x18075500,
+0x07550063,0x55006018,0x00601707,0x5d170755,0x17075500,0x0755005d,
+0x55005a17,0x005a1607,0x58160755,0x15075500,0x07550058,0x55005515,
+0x00551507,0x53150755,0x14075500,0x07550053,0x55005114,0x00511407,
+0x4e140755,0x13075500,0x0755004e,0x55004c13,0x000141fc,0x000021fc,
+0x000021b7,0x0000416f,0x0001ff27,0x0000217f,0x00002137,0x000040ef,
+0x0001fea7,0x0000024f,0x1f29365f,0x1f29365f,0x1f29365f,0x1f29365f,
+0x00e38e08,0x00e08e38,0x00000000,0x00000000,0x00000000,0x00002080,
+0x00006180,0x00003002,0x00000040,0x00002042,0x00180047,0x00080043,
+0x00000041,0x000020c1,0x00046006,0x00042002,0x00040000,0x00002003,
+0x00180006,0x00080002,0x00018dcc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x000190dc,0x00000060,0x00000012,0x00000000,0x00000010,
+0x0000000d,0x0001926c,0x00000040,0x0000000f,0x00000000,0x00000010,
+0x0034001a,0x0068004e,0x00d0009c,0x010400ea,0x00680034,0x00d0009c,
+0x01a00138,0x020801d4,0x009c004e,0x013800ea,0x027001d4,0x030c02be,
+0x00d00068,0x01a00138,0x03400270,0x041003a8,0x009c0018,0x010400d0,
+0x013800ea,0x00d00186,0x01040104,0x016c0138,0x01a0016c,0x01860138,
+0x01d40186,0x02220222,0x01040270,0x016c0138,0x016c0138,0x01d401a0,
+0x01d401a0,0x02080208,0x0186023c,0x022201d4,0x022201d4,0x02be0270,
+0x02be0270,0x030c030c,0x0036035a,0x00a2006c,0x014400d8,0x01e601b0,
+0x006c021c,0x014400d8,0x028801b0,0x03cc0360,0x00a20438,0x01e60144,
+0x03cc0288,0x05b20510,0x00d80654,0x028801b0,0x05100360,0x079806c0,
+0x00180870,0x01b00144,0x01e6021c,0x032a0288,0x021c01b0,0x0288021c,
+0x02f402f4,0x02880360,0x032a032a,0x046e03cc,0x0510046e,0x0288021c,
+0x028802f4,0x036002f4,0x036003cc,0x043803cc,0x04a40438,0x03cc032a,
+0x03cc046e,0x0510046e,0x051005b2,0x065405b2,0x06f60654,0x00000000,
+0x00000000,0x00020001,0x00040003,0x00060005,0x00080007,0x00000085,
+0x00000000,0x00010000,0x00030002,0x00050004,0x00070006,0x00850084,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x01010101,0x01010101,0x01010101,0x01010101,
+0x01010101,0x01010101,0x01010101,0x03030101,0x01030301,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,
+0x00000002,0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,
+0x00000040,0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,
+0x00000048,0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,
+0x00000048,0x80000002,0x00000048,0x50000083,0x00000058,0x60000104,
+0x00000058,0x70004185,0x00000058,0x50004185,0x00000000,0x60008206,
+0x00000000,0x5020c287,0x00000008,0x60410308,0x00000008,0x70614389,
+0x00000008,0x8081840a,0x00000008,0x50a1c48b,0x00000018,0x60c2050d,
+0x00000018,0x70e2458e,0x00000018,0x81028698,0x00000018,0x91230b91,
+0x00000018,0xa143481a,0x00000018,0xc185cc94,0x00000018,0xd1a4099c,
+0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,0x00000019,0x2246cea1,
+0x00000019,0x32655024,0x00000019,0xb36751a6,0x00000019,0xf3e95529,
+0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,0x0000001a,0x74ea162e,
+0x0000001a,0xa4ea162e,0x0000001a,0x10000000,0x00000040,0x20000000,
+0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,0x50000000,
+0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,0x60000001,
+0x00000048,0x70000002,0x00000048,0x40000002,0x00000058,0x50000083,
+0x00000058,0x60000104,0x00000058,0x40000104,0x00000000,0x50004185,
+0x00000000,0x40008206,0x00000008,0x5020c287,0x00000008,0x60410308,
+0x00000008,0x70614389,0x00000008,0x8081840a,0x00000008,0x50a1c48b,
+0x00000018,0x60c2050d,0x00000018,0x70e2458e,0x00000018,0x81028698,
+0x00000018,0x91230b91,0x00000018,0xa143481a,0x00000018,0xc185cc94,
+0x00000018,0xd1a4099c,0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,
+0x00000019,0x2246cea1,0x00000019,0x32655024,0x00000019,0xb36751a6,
+0x00000019,0xf3e95529,0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,
+0x0000001a,0x74ea162e,0x0000001a,0xa4ea162e,0x0000001a,0x5f727563,
+0x65687465,0x64646172,0x65700072,0x655f6d72,0x72656874,0x72646461,
+0x256c7700,0x6c770064,0x203a6425,0x616f7242,0x6d6f6364,0x4d434220,
+0x78343025,0x32303820,0x2031312e,0x65726957,0x7373656c,0x6e6f4320,
+0x6c6f7274,0x2072656c,0x000a7325,0x31322e34,0x2e302e38,0x6c770030,
+0x69616600,0x2064656c,0x69206f74,0x2074696e,0x65726977,0x7373656c,
+0x64697320,0x65202c65,0x203a7272,0x000a6425,0x64256c77,0x7325203a,
+0x20732520,0x73726576,0x206e6f69,0x000a7325,0x20636544,0x32203120,
+0x00383030,0x323a3931,0x39303a32,0x66776800,0x65746c69,0x65640072,
+0x6c737065,0x00706565,0x0001a0d9,0x00000000,0x00000008,0x0001a0e2,
+0x00000001,0x00000001,0x00000000,0x00000000,0x00000000,0x03020001,
+0x00020000,0x00000000,0x0060005e,0x00780062,0x0060005e,0x00780062,
+0x64256c77,0x5350203a,0x696d204d,0x636f7263,0x2065646f,0x63746177,
+0x676f6468,0x72696620,0x61206465,0x64252074,0x65732820,0x646e6f63,
+0x202e2973,0x65736552,0x6e697474,0x000a2e67,0x64256c77,0x5350203a,
+0x696d204d,0x636f7263,0x2065646f,0x63746177,0x676f6468,0x72696620,
+0x61206465,0x64252074,0x65732820,0x646e6f63,0x000a2973,0x64256c77,
+0x7370203a,0x6265646d,0x30206775,0x38302578,0x70202c78,0x65647968,
+0x20677562,0x30257830,0x202c7838,0x5f6d7370,0x20637262,0x30257830,
+0x000a7838,0x20202020,0x70657720,0x206c7463,0x30257830,0x202c7838,
+0x636d6370,0x30206c74,0x38302578,0x70202c78,0x74736d63,0x30207461,
+0x38302578,0x74000a78,0x745f6673,0x72656d69,0x20776f6c,0x78257830,
+0x7872000a,0x68705f65,0x5f737279,0x78302032,0x202c7825,0x5f657872,
+0x72796870,0x20335f73,0x78257830,0x79687020,0x74737872,0x73757461,
+0x78302030,0x202c7825,0x72796870,0x61747378,0x31737574,0x25783020,
+0x74000a78,0x735f6578,0x75746174,0x78302073,0x70207825,0x78747968,
+0x6f727265,0x64252072,0x4350000a,0x5243504d,0x20306765,0x7830203d,
+0x000a7825,0x504d4350,0x67655243,0x203d2031,0x78257830,0x4350000a,
+0x5243504d,0x20326765,0x7830203d,0x000a7825,0x5453414c,0x73657220,
+0x66207465,0x206d6f72,0x202c6425,0x65707974,0x0a642520,0x6d697400,
+0x616c2065,0x64207473,0x61637369,0x30206472,0x2c782578,0x746e6320,
+0x73616c20,0x69642074,0x72616373,0x78302064,0x202c7825,0x20727563,
+0x65736572,0x6e632074,0x78302074,0x000a7825,0x45534552,0x54532054,
+0x52205441,0x30204745,0x0a782578,0x20435000,0x000a203a,0x25783020,
+0x20202078,0x25785c00,0x00583230,0x63737362,0x003a6766,0x69646172,
+0x7363006f,0x73720061,0x655f6973,0x746e6576,0x65737700,0x656b5f63,
+0x6c630079,0x6465736f,0x0074656e,0x5f706165,0x74736572,0x74636972,
+0x65737700,0x766e0063,0x5f6d6172,0x00746567,0x5f636c77,0x61766f69,
+0x77007372,0x695f636c,0x7261766f,0x6f725f73,0x7665726d,0x65760030,
+0x6469646e,0x616f6200,0x65726472,0x72730076,0x65726d6f,0x6f620076,
+0x66647261,0x7367616c,0x61610032,0x61006735,0x00673261,0x00316161,
+0x00306161,0x00316761,0x68637874,0x006e6961,0x68637872,0x006e6961,
+0x6d306c69,0x64616361,0x74007264,0x75645f78,0x635f7974,0x656c6379,
+0x64666f5f,0x7874006d,0x7475645f,0x79635f79,0x5f656c63,0x006b6363,
+0x65736572,0x25207374,0x70000a64,0x5f6d7265,0x65687465,0x64646172,
+0x73252072,0x72756320,0x6874655f,0x64617265,0x25207264,0x62000a73,
+0x6472616f,0x25783020,0x62202c78,0x6472616f,0x76657220,0x00732520,
+0x63612820,0x6c617574,0x3020796c,0x32302578,0x72002978,0x5f657461,
+0x7265766f,0x65646972,0x2041203a,0x202c6425,0x64252042,0x6e61000a,
+0x78725f74,0x72766f5f,0x20642520,0x6e617874,0x64252074,0x5342000a,
+0x6f432053,0x6769666e,0x3a642520,0x73252220,0x65000a22,0x6c62616e,
+0x64252065,0x20707520,0x77206425,0x2066696c,0x70257830,0x73252220,
+0x77000a22,0x20636573,0x78257830,0x74756120,0x64252068,0x65737720,
+0x6e695f63,0x20786564,0x77206425,0x615f7065,0x206f676c,0x000a6425,
+0x72727563,0x5f746e65,0x2e737362,0x49535342,0x73252044,0x7563000a,
+0x6e657272,0x73625f74,0x53532e73,0x22204449,0x0a227325,0x73706100,
+0x7373615f,0x6169636f,0x20646574,0x000a6425,0x74737472,0x73657268,
+0x6c760068,0x6d5f6e61,0x0065646f,0x00656d77,0x5f656d77,0x5f737362,
+0x61736964,0x00656c62,0x5f656d77,0x63616f6e,0x6d77006b,0x70615f65,
+0x77006473,0x715f656d,0x6e69736f,0x77006f66,0x645f656d,0x6d770070,
+0x72705f65,0x715f6365,0x69756575,0x7700676e,0x635f656d,0x746e756f,
+0x00737265,0x5f656d77,0x61656c63,0x6f635f72,0x65746e75,0x77007372,
+0x6165666c,0x65727574,0x67616c66,0x656d7700,0x5f63615f,0x00617473,
+0x5f726570,0x6e616863,0x666e695f,0x7473006f,0x6e695f61,0x77006f66,
+0x6d5f6170,0x00736773,0x5f617077,0x68747561,0x61707700,0x7061635f,
+0x646e7600,0x65695f72,0x61707700,0x77006569,0x5f636573,0x74736572,
+0x74636972,0x61726600,0x72687467,0x00687365,0x726d5f61,0x00657461,
+0x6d5f6762,0x65746172,0x5f673500,0x7461726d,0x67320065,0x61726d5f,
+0x72006574,0x00646e61,0x6f737361,0x616f7263,0x7361006d,0x5f636f73,
+0x6f666e69,0x73736100,0x725f636f,0x695f7165,0x61007365,0x636f7373,
+0x7365725f,0x65695f70,0x76650073,0x5f746e65,0x7367736d,0x73657200,
+0x645f7465,0x6e633131,0x69007374,0x5f737362,0x6f6c6c61,0x00646577,
+0x6e756f63,0x5f797274,0x7473696c,0x7478655f,0x65646e65,0x636d0064,
+0x5f747361,0x7473696c,0x61686300,0x6570736e,0x696c0063,0x69746566,
+0x6300656d,0x746e756f,0x61007972,0x636f7475,0x746e756f,0x645f7972,
+0x75616665,0x6100746c,0x6e65746e,0x0073616e,0x73736269,0x616f635f,
+0x6373656c,0x6c615f65,0x65776f6c,0x736d0064,0x76656c67,0x64006c65,
+0x5f6e776f,0x7265766f,0x65646972,0x6c6c6100,0x746c756d,0x656c0069,
+0x79636167,0x6f72705f,0x70006562,0x735f326d,0x7065656c,0x7465725f,
+0x72696500,0x63630070,0x6f697067,0x6c727463,0x67636300,0x696f6970,
+0x6363006e,0x6f697067,0x0074756f,0x70676363,0x756f6f69,0x006e6574,
+0x5f637462,0x65646f6d,0x63746200,0x7269775f,0x75640065,0x79637974,
+0x5f656c63,0x006b6363,0x79747564,0x6c637963,0x666f5f65,0x62006d64,
+0x735f6374,0x6b637574,0x7261775f,0x63746200,0x7574735f,0x645f6b63,
+0x63657465,0x00646574,0x7461726e,0x766e0065,0x5f6d6172,0x706d7564,
+0x6c656400,0x735f6174,0x73746174,0x746e695f,0x61767265,0x6564006c,
+0x5f61746c,0x74617473,0x70690073,0x6d5f3676,0x74736163,0x76616e00,
+0x7365725f,0x775f7465,0x645f7261,0x62617369,0x0000656c,0x00000000,
+0x00000000,0x0000b181,0x00007081,0x00000000,0x00000000,0x096c0001,
+0x09710002,0x09760003,0x097b0004,0x09800005,0x09850006,0x098a0007,
+0x098f0008,0x09940009,0x0999000a,0x099e000b,0x09a3000c,0x09a8000d,
+0x09b4000e,0xffffffff,0x0204ffff,0x0a080600,0x00000e0c,0x0001a968,
+0x00000001,0x00000007,0x0001a970,0x00000000,0x00000007,0x0001a978,
+0x00000000,0x00000007,0x0001a97f,0x00000001,0x00000007,0x0001a987,
+0x00000003,0x00400008,0x0001a993,0x00000002,0x00000002,0x0001a5bf,
+0x00000004,0x02940008,0x0001a800,0x00000005,0x00000008,0x0001a99c,
+0x00000006,0x00000001,0x0001a9a0,0x00000007,0x20000008,0x0001a9a8,
+0x0000000a,0x000c0008,0x0001a9b0,0x00000008,0x00000006,0x0001a9bb,
+0x00000009,0x000c0008,0x0001aca6,0x0000000b,0x00000008,0x00000000,
+0x00000000,0x00000000,0x65736162,0x766f695f,0x00737261,0x725f6732,
+0x00657461,0x725f6735,0x00657461,0x61725f61,0x62006574,0x61725f67,
+0x62006574,0x72656d63,0x73726f72,0x62007274,0x72656d63,0x00726f72,
+0x0063706d,0x6470746f,0x00706d75,0x64736963,0x00706d75,0x5f736963,
+0x72756f73,0x63006563,0x72777369,0x00657469,0xffffffff,0x6c77ffff,
+0x6d6c5f63,0x735f6361,0x635f7465,0x6e6e6168,0x77006c65,0x6c5f636c,
+0x5f63616d,0x00706163,0x5f636c77,0x61747461,0x6c5f6863,0x0063616d,
+0x0001ade8,0x00000002,0x00000008,0x0001adf1,0x00000003,0x00000000,
+0x0001adf9,0x00000004,0x00000000,0x0001ae03,0x00000005,0x00000008,
+0x0001ae10,0x00000006,0x00000007,0x0001ae1d,0x00000008,0x00000007,
+0x0001a020,0x00000005,0x00000008,0x0001ae27,0x00000007,0x00000008,
+0x00000000,0x00000000,0x00000000,0x766f7872,0x776f6c66,0x73616320,
+0x61207365,0x25206572,0x6d000a64,0x635f7363,0x746e756f,0x6425203a,
+0x78300020,0x20783225,0x31314400,0x20544820,0x20504143,0x20657261,
+0x4c4c554e,0x2a2a000a,0x2054482a,0x49444441,0x75442045,0x203a706d,
+0x72617453,0x2a2a2a74,0x6461000a,0x65695f64,0x74633e2d,0x68635f6c,
+0x7830203a,0x78323025,0x6461000a,0x65695f64,0x79623e2d,0x3a316574,
+0x25783020,0x0a783230,0x64646100,0x2d65695f,0x6d706f3e,0x3a65646f,
+0x25783020,0x0a783430,0x64646100,0x2d65695f,0x73696d3e,0x69625f63,
+0x203a7374,0x30257830,0x000a7838,0x482a2a2a,0x44412054,0x20454944,
+0x706d7544,0x4e45203a,0x2a2a2a44,0x2a2a000a,0x2054482a,0x49504143,
+0x75442045,0x203a706d,0x72617453,0x2a2a2a74,0x6569000a,0x61633e2d,
+0x30203a70,0x34302578,0x69000a78,0x703e2d65,0x6d617261,0x30203a73,
+0x32302578,0x69000a78,0x653e2d65,0x685f7478,0x70616374,0x7830203a,
+0x78343025,0x6569000a,0x78743e2d,0x635f6662,0x203a7061,0x30257830,
+0x000a7838,0x3e2d6569,0x635f7361,0x203a7061,0x30257830,0x000a7832,
+0x482a2a2a,0x41432054,0x20454950,0x706d7544,0x6e45203a,0x2a2a2a64,
+0x6c77000a,0x203a6425,0x203a7325,0x666c616d,0x656d726f,0x68632064,
+0x70736e61,0x30206365,0x0a782578,0x256c7700,0x25203a64,0x77203a73,
+0x615f636c,0x63617474,0x61662068,0x64656c69,0x6c77000a,0x203a6425,
+0x203a7325,0x63616d6c,0x666e695f,0x6c61206f,0x20636f6c,0x6c696166,
+0x000a6465,0x5f636c77,0x63616d6c,0x766f695f,0x00737261,0x64256c77,
+0x7325203a,0x6c77203a,0x6f6d5f63,0x656c7564,0x6765725f,0x65747369,
+0x61662072,0x64656c69,0x6c77000a,0x203a6425,0x203a7325,0x695f6c77,
+0x5f74696e,0x656d6974,0x6f662072,0x64772072,0x656d6974,0x61662072,
+0x64656c69,0x3673000a,0x65765f30,0x6f670072,0x36732074,0x65765f30,
+0x73692072,0x0a732520,0x302e3500,0x30367300,0x7265765f,0x6e6f6973,
+0x20736920,0x20746573,0x25206f74,0x77000a64,0x3a64256c,0x3a732520,
+0x72726520,0x6920726f,0x6974696e,0x7420676e,0x4c206568,0x2043414d,
+0x746f7250,0x6f6d206f,0x656c7564,0x6c77000a,0x72647872,0x0073706f,
+0x203a7325,0x6e6b6e75,0x206e776f,0x69746361,0x64696e6f,0x0a642520,
+0x3a732500,0x66756220,0x20726566,0x676e656c,0x25206874,0x6f742064,
+0x6873206f,0x2074726f,0x20726f66,0x43414d4c,0x70616320,0x64252820,
+0x63000a29,0x69706968,0x78302064,0x203a7825,0x70696863,0x20766572,
+0x78257830,0x6375202c,0x7265646f,0x30207665,0x0a782578,0x3a732500,
+0x6e614320,0x63207427,0x676e6168,0x68742065,0x68632065,0x656e6e61,
+0x6877206c,0x74206e65,0x73206568,0x206e6163,0x69207369,0x7270206e,
+0x6572676f,0x000a7373,0x203a7325,0x75736e55,0x726f7070,0x20646574,
+0x61766f69,0x61202c72,0x6f697463,0x2064696e,0x000a6425,0x63616d6c,
+0x7061635f,0x616d6c00,0x70755f63,0x616d6c00,0x6f645f63,0x6c006e77,
+0x5f63616d,0x6163616d,0x00726464,0x63616d6c,0x7078745f,0x7265776f,
+0x616d6c00,0x6f6d5f63,0x6c006564,0x5f63616d,0x63746573,0x6e6e6168,
+0x77006c65,0x765f636c,0x64696c61,0x6168635f,0x6570736e,0x6c770063,
+0x6d6c5f63,0x645f6361,0x766f696f,0x74007261,0x74737378,0x00737461,
+0x67737874,0x006d6f6c,0x7478616d,0x75700078,0x616d2e62,0x20787478,
+0x62206f74,0x64252065,0x3225000a,0x34252864,0x00202964,0x7478616d,
+0x6f6c6778,0x7369206d,0x2c642520,0x72756320,0x746e6572,0x6e657020,
+0x676e6964,0x756f6320,0x6920746e,0x64252073,0x7874000a,0x616d2073,
+0x636f6c6c,0x69616620,0x6572756c,0x72612073,0x64252065,0x6570202c,
+0x6e69646e,0x64252067,0x616d000a,0x67787478,0x206d6f6c,0x73207369,
+0x74207465,0x6425206f,0x0100000a,0x00060605,0x02000101,0x00030302,
+0x325f4c50,0x64685f47,0x00000062,0x01030000,0x4c50001f,0x5f47355f,
+0x00626468,0x00000000,0x00200103,0x5f716672,0x00004732,0x00000000,
+0x01050000,0x66720006,0x47345f71,0x00000000,0x00000000,0x00080105,
+0x5f716672,0x6c5f4735,0x00000000,0x01050000,0x6672000a,0x47355f71,
+0x00006d5f,0x00000000,0x000c0105,0x5f716672,0x685f4735,0x00000000,
+0x01050000,0x6470000e,0x0047325f,0x00000000,0x00000000,0x00100105,
+0x345f6470,0x00000047,0x00000000,0x01050000,0x64700012,0x5f47355f,
+0x0000006c,0x00000000,0x00140105,0x355f6470,0x006d5f47,0x00000000,
+0x01050000,0x64700016,0x5f47355f,0x00000068,0x00000000,0x00180105,
+0x5f677874,0x00004732,0x00000000,0x01020000,0x7874001a,0x47345f67,
+0x00000000,0x00000000,0x001b0102,0x5f677874,0x6c5f4735,0x00000000,
+0x01020000,0x7874001c,0x47355f67,0x00006d5f,0x00000000,0x001d0102,
+0x5f677874,0x685f4735,0x00000000,0x01020000,0x4732001e,0x314c505f,
+0x6264685f,0x00000000,0x00240902,0x505f4732,0x685f324c,0x00006264,
+0x09020000,0x4732002d,0x334c505f,0x6264685f,0x00000000,0x00360902,
+0x505f4732,0x685f344c,0x00006264,0x09020000,0x4735003f,0x314c505f,
+0x6264685f,0x00000000,0x00480802,0x505f4735,0x685f324c,0x00006264,
+0x08020000,0x47350051,0x334c505f,0x6264685f,0x00000000,0x005a0802,
+0x505f4735,0x685f344c,0x00006264,0x08020000,0x67630063,0x63635f61,
+0x47325f6b,0x00000000,0x006d0e02,0x5f616763,0x6d64666f,0x0047325f,
+0x0d020000,0x6170007c,0x47325f62,0x00000000,0x00000000,0x016b0603,
+0x5f626170,0x00004735,0x00000000,0x06030000,0x73720171,0x615f6973,
+0x325f6a64,0x00000047,0x01770103,0x69737372,0x6a64615f,0x355f6a5f,
+0x01030047,0x73720178,0x615f6973,0x355f6a64,0x006c5f47,0x01790103,
+0x69737372,0x6a64615f,0x5f47355f,0x0103006d,0x7372017a,0x615f6973,
+0x355f6a64,0x00685f47,0x017b0103,0x5f616763,0x47345f6a,0x61676300,
+0x355f6a5f,0x67630047,0x47355f61,0x63006c5f,0x355f6167,0x006d5f47,
+0x5f616763,0x755f4735,0x67630031,0x47355f61,0x3131755f,0x0201cc00,
+0xd4000000,0x00000000,0x00000000,0x00000001,0x07ef0000,0x000e0007,
+0x0000000e,0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,
+0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,
+0x80075b07,0x0001b6eb,0x00100000,0x00000007,0x0001b6f4,0x00000008,
+0x000c0008,0x0001b701,0x30000006,0x00030008,0x0001b70b,0x00000007,
+0x00000001,0x0001b718,0x00000009,0x00000001,0x0001b729,0x00400037,
+0x00000001,0x0001b73a,0x00000038,0x00000001,0x0001b749,0x00000039,
+0x00000006,0x0001b754,0x0040003a,0x00200008,0x0001b75b,0x0400003c,
+0x000c0008,0x0001b768,0x04400044,0x00100008,0x0001b771,0x0080005d,
+0x000c0008,0x0001b778,0x04400054,0x00000002,0x0001b78c,0x0040005b,
+0x000c0008,0x0001b79e,0x0400005c,0x00000003,0x0001b7af,0x0080001c,
+0x00000003,0x0001b7bf,0x00800014,0x00000002,0x0001b7cd,0x0040003d,
+0x00070007,0x0001b7d9,0x0400003f,0x00000006,0x0001b7e9,0x00000040,
+0x00000006,0x0001b7fe,0x04000041,0x00000006,0x0001b80e,0x0000005e,
+0x00000006,0x0001b819,0x0000005f,0x00000002,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x043f03c5,0x043d03c7,
+0x043a03c9,0x043803cb,0x043603cd,0x043403cf,0x043103d1,0x042f03d3,
+0x042d03d5,0x042b03d7,0x042903d9,0x042703db,0x042403dd,0x041f03e2,
+0x00000000,0x00000000,0x00000000,0x0007fc00,0x0005a569,0x000001ff,
+0x000a5d69,0x00080400,0x000a5e97,0x00000201,0x0005a697,0x00000000,
+0x00000000,0x00000000,0x00000000,0x84340000,0x80848334,0x80568267,
+0x00008234,0x0001b388,0x0001b1be,0x002d0000,0x001a90a7,0x000e0947,
+0x00072001,0x0003938b,0x0001ca38,0x0000e52a,0x00007297,0x0000394c,
+0x00001ca6,0x00000e53,0x00000729,0x00000395,0x000001ca,0x000000e5,
+0x00000073,0x00000039,0x0000001d,0x02000100,0x06000400,0x0b000800,
+0x17001000,0x2d002000,0x40014000,0x40034002,0x40054004,0x40074006,
+0x80075b07,0x3d0604f4,0x04f30103,0x01014c0c,0x500804f3,0x04f27f00,
+0xff004408,0x4a0004f3,0x04f2ff00,0xff004d04,0x4e0404f3,0x04f2ff00,
+0x0f004f0c,0x4f0004f3,0x04f50f04,0x0f004900,0x460304f6,0x04f50704,
+0x0100460f,0x460004f6,0x04f50701,0x07044808,0x480b04f5,0x04f50f00,
+0x0f044904,0x450f04f4,0x04f70100,0x0704520d,0x520004f8,0x04f70107,
+0x07054103,0x410604f7,0x04f70f00,0x0705420a,0x420f04f6,0x04f70100,
+0x07014200,0x430b04f6,0x04f60f04,0x0f004307,0x450604f6,0x04f40101,
+0x0f044007,0x400b04f4,0x04f30f00,0x03033c0e,0x3c0004f4,0x04f40705,
+0x07003c03,0x520004f2,0x00000f00,0x00000000,0x00000009,0x00010001,
+0x83238423,0x82568073,0x82238045,0x00000003,0xffffffe8,0x00000001,
+0x0000096c,0x0000000c,0x00000000,0x00000000,0x00000002,0x00000971,
+0x00000011,0x00000000,0x00000000,0x00000003,0x00000976,0x00000016,
+0x00000000,0x00000000,0x00000004,0x0000097b,0x0000001b,0x00000000,
+0x00000000,0x00000005,0x00000980,0x00000020,0x00000000,0x00000000,
+0x00000006,0x00000985,0x00000025,0x00000000,0x00000000,0x00000007,
+0x0000098a,0x0000002a,0x00000000,0x00000000,0x00000008,0x0000098f,
+0x0000002f,0x00000000,0x00000000,0x00000009,0x00000994,0x00000034,
+0x00000000,0x00000000,0x0000000a,0x00000999,0x00000039,0x00000000,
+0x00000000,0x0000000b,0x0000099e,0x0000003e,0x00000000,0x00000000,
+0x0000000c,0x000009a3,0x00000043,0x00000000,0x00000000,0x0000000d,
+0x000009a8,0x00000048,0x00000000,0x00000000,0x0000000e,0x000009b4,
+0x00000054,0x00000000,0x00000000,0x0c183060,0x1224486c,0x7a977a97,
+0x7a877a97,0x7b977a87,0x32697274,0x78620067,0x00673261,0x6f707872,
+0x72006732,0x73697373,0x6732666d,0x73737200,0x636d7369,0x72006732,
+0x73697373,0x67327661,0x73737200,0x666d7369,0x6c5f6732,0x0030776f,
+0x69737372,0x32636d73,0x6f6c5f67,0x72003177,0x73697373,0x67327661,
+0x776f6c5f,0x73720032,0x6d736973,0x5f673266,0x00306968,0x69737372,
+0x32636d73,0x69685f67,0x73720031,0x61736973,0x5f673276,0x00326968,
+0x6d306170,0x77707861,0x61700072,0x64256230,0x6b636300,0x6f006f70,
+0x706d6466,0x706f006f,0x6870006f,0x696f6e79,0x70006573,0x71007968,
+0x6f707874,0x00726577,0x5f796870,0x69737372,0x746e615f,0x69787400,
+0x7074736e,0x70007277,0x775f7968,0x68637461,0x00676f64,0x6e796870,
+0x6573696f,0x6c6f705f,0x676e696c,0x72616300,0x72656972,0x7075735f,
+0x73657270,0x69640073,0x6c626173,0x65705f65,0x6c616372,0x6d6e7500,
+0x725f646f,0x00697373,0x65746b70,0x7000676e,0x6e65746b,0x74735f67,
+0x00737461,0x74796870,0x656c6261,0x76617000,0x00737261,0x706c7373,
+0x7968706e,0x7078745f,0x6e697277,0x00786564,0x706c7373,0x7968706e,
+0x7061705f,0x6d617261,0x73730073,0x706e706c,0x665f7968,0x636c6c75,
+0x6e006c61,0x5f796870,0x705f6735,0x61677277,0x6d006e69,0x5f6f6d69,
+0x61657270,0x656c626d,0x79687000,0x6978725f,0x74736571,0x70706c00,
+0x745f7968,0x73706d65,0x65736e65,0x70706c00,0x635f7968,0x645f6c61,
+0x61746c65,0x6d65745f,0x706c0070,0x5f796870,0x74616276,0x736e6573,
+0x756e0065,0x74735f6d,0x6d616572,0x6e616200,0x61725f64,0x0065676e,
+0x5f636c77,0x5f746c70,0x61766f69,0x4c007372,0x0043414d,0x5f746c70,
+0x69766564,0x765f6563,0x70007265,0x695f746c,0x0074696e,0x5f746c70,
+0x706f7473,0x746c7000,0x5f78745f,0x746e6f63,0x6f756e69,0x70007375,
+0x745f746c,0x77635f78,0x746c7000,0x7078745f,0x735f7265,0x74726174,
+0x746c7000,0x5f78745f,0x706f7473,0x746c7000,0x7078725f,0x735f7265,
+0x74726174,0x746c7000,0x7078725f,0x735f7265,0x00706f74,0x5f746c70,
+0x65707872,0x65725f72,0x746c7573,0x6c700073,0x78725f74,0x0077635f,
+0x5f746c70,0x725f7872,0x00697373,0x5f746c70,0x6163616d,0x00726464,
+0x5f746c70,0x6f707874,0x00726577,0x5f746c70,0x69737374,0x00000000,
+0x0001b838,0x00000001,0x00000008,0x0001b847,0x00000002,0x00000000,
+0x0001b850,0x00000003,0x00000000,0x0001b859,0x00000004,0x00140008,
+0x0001b86b,0x00000005,0x00020008,0x0001b875,0x00000006,0x00200008,
+0x0001b885,0x00000007,0x00000000,0x0001b891,0x00000008,0x00000008,
+0x0001b8a1,0x00000009,0x00000000,0x0001b8b0,0x0000000a,0x00000008,
+0x0001b8c2,0x0000000b,0x00020008,0x0001b8cc,0x0000000c,0x00000007,
+0x0001b8d8,0x0000000d,0x00000008,0x0001b8e4,0x0000000e,0x00000007,
+0x0001b8f0,0x0000000f,0x00000007,0x00000000,0x00000000,0x00000000,
+0x0000000c,0x0c8b8482,0x24189612,0x6c604830,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000008,0x2498128c,
+0x6c6048b0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000000c,0x0c8b8482,0x24189612,0x6c604830,
+0x00000000,0x00ffff00,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000004,0x160b8482,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x0000000c,0x0c8b8482,
+0x24189612,0x6c604830,0x00000000,0x00ffff00,0x00000100,0x00000000,
+0x00000000,0x00000000,0x00000002,0x00000000,0x00000004,0x00000008,
+0x0000000b,0x00000010,0x00000016,0x00000018,0x0000000c,0x00000000,
+0x00000012,0x00000002,0x00000018,0x00000008,0x00000024,0x0000000a,
+0x00000030,0x00000010,0x00000048,0x00000012,0x00000060,0x00000019,
+0x0000006c,0x0000001a,0x000a0000,0x00000014,0x37000000,0x0000008b,
+0x008f0000,0x006e0000,0x0000008a,0x00000000,0x00000000,0x0000008e,
+0x00000000,0x00000000,0x00000089,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000008d,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000088,0x00000000,0x00000000,0x0000008c,
+0x00000008,0x160b0402,0x6c483024,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x6e616373,0x7361705f,
+0x65766973,0x6d69745f,0x63730065,0x685f6e61,0x5f656d6f,0x656d6974,
+0x61637300,0x706e5f6e,0x65626f72,0x6c770073,0x63735f63,0x695f6e61,
+0x7261766f,0x63730073,0x69746e61,0x0072656d,0xffffffff,0x0000ffff,
+0x00000000,0x00000001,0x00000002,0x00000004,0x00000002,0x00000003,
+0x00000003,0x00000005,0x0003aaaa,0x8e880000,0x72636f6e,0x520a0063,
+0x28204554,0x73257325,0x73257325,0x73252029,0x206e6f20,0x254d4342,
+0x25722058,0x20402064,0x252f6425,0x64252f64,0x7a484d20,0x4453000a,
+0x43004f49,0x49004344,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000001,0x00000020,0x0000001f,0x00000050,0x00005a01,0x000059b9,
+0x000059a5,0x00005995,0x00000000,0x00005935,0x00005989,0x0000596d,
+0x0000593d,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0001bc54,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0001bcf0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00006b4d,0x000069dd,0x00006d61,0x00006b2d,0x00000000,
+0x000069f1,0x00000000,0x000069b1,0x00000000,0x0e0e0e0e,0x0d09020e,
+0x010d080a,0x080a0d09,0x0d09010d,0x010d080a,0x080a0d09,0x0e0a010d,
+0x020e090b,0x090b0e0a,0x3a09020e,0x050e0e16,0x0e163a09,0x0e0a050e,
+0x050e090b,0x090b0e0a,0x0e0a020e,0x020e090b,0x0e163a09,0x3a09050e,
+0x050e0e16,0x0e163a09,0x3a09050e,0x050e0e16,0x0e163a09,0x0001050e,
+0x02020100,0x07070303,0x07070707,0x07070807,0x09070906,0x02040202,
+0x04040402,0x03020202,0x02020302,0x02020203,0xfefefe00,0x08080808,
+0x09080808,0x0708080a,0x00000007,0x01000000,0x00000101,0x00000000,
+0x00000000,0x00000000,0xf5ef0000,0x01fdfbf8,0x0c090703,0x1915130f,
+0x24211f1b,0x302d2b27,0x3c383633,0x4744423e,0x53504d4a,0x005c5956,
+0x00000001,0x0000096c,0x043c3c6f,0x0505550e,0x44770505,0xf3708080,
+0x0000000c,0x00000002,0x00000971,0x043c3c6f,0x0505550e,0x44770505,
+0xf3708080,0x0000000b,0x00000003,0x00000976,0x043c3c6f,0x0505550e,
+0x44770505,0xf3708080,0x00000009,0x00000004,0x0000097b,0x042c2c6f,
+0x0505550d,0x44770505,0xf3708080,0x00000008,0x00000005,0x00000980,
+0x042c2c6f,0x0505550d,0x44770505,0xf3708080,0x00000007,0x00000006,
+0x00000985,0x042c2c6f,0x0505550c,0x44770505,0xf3708080,0x00000006,
+0x00000007,0x0000098a,0x042c2c6f,0x0505550b,0x44770505,0xf3708080,
+0x00000005,0x00000008,0x0000098f,0x042c2c6f,0x0505550b,0x44770505,
+0xf3708080,0x00000004,0x00000009,0x00000994,0x041c1c6f,0x0505550a,
+0x44770505,0xf3708080,0x00000004,0x0000000a,0x00000999,0x041c1c6f,
+0x05055509,0x44770505,0xf3708080,0x00000003,0x0000000b,0x0000099e,
+0x041c1c6e,0x05055508,0x44770505,0xf3708080,0x00000003,0x0000000c,
+0x000009a3,0x041c1c6e,0x05055507,0x44770505,0xf3708080,0x00000002,
+0x0000000d,0x000009a8,0x041c1c6e,0x05055506,0x44770505,0xf3708080,
+0x00000002,0x0000000e,0x000009b4,0x040c0c6e,0x05055502,0x44770505,
+0xf3708080,0x00000001,0x00004000,0x00000002,0x00000003,0x00000004,
+0x00000005,0x00000006,0x00000007,0x00000008,0x00000009,0x0001800a,
+0x0000000b,0x0000000c,0x0000000d,0x0606000e,0x0f0f000f,0x00004010,
+0x00004011,0x00004012,0x00004013,0x00004014,0x00004015,0x00004016,
+0x00004017,0x00004018,0x7f7f0019,0x3f3f001a,0x0000001b,0xd4e8c01c,
+0x53a7c01d,0xffff001e,0x0ff0c01f,0x01010020,0x5e1f4021,0x7e7f4022,
+0xf0304023,0x35350024,0x3f3f0025,0x0202c026,0x7f7fc027,0x00000028,
+0x00000029,0x0c0cc02a,0x0000002b,0x3f3c802c,0xfefc802d,0xffff002e,
+0xffff002f,0x00000030,0x00000031,0x0808c032,0x0f0f0033,0x22220034,
+0xa8a80035,0x6060c036,0x11110037,0x00000038,0x00000039,0x3030c03a,
+0x0101003b,0x0303003c,0x0b0cc03d,0x0f10c03e,0x0f0f003f,0x80800040,
+0x68680041,0x68680042,0x80800043,0xffff0044,0x03030045,0x38380046,
+0xffff0047,0x38380048,0xc0c00049,0xffff004a,0xffff004b,0xfd3dc04c,
+0x0c0c004d,0x9696004e,0x5a5a004f,0x7f7f0050,0x7f7f0051,0x33330052,
+0x0202c053,0x00000054,0x30300055,0x00000056,0x5656c057,0x06060058,
+0x0e0e0059,0x7e7e005a,0x1515005b,0x0f0f005c,0x0000005d,0x0000005e,
+0x0000005f,0x00000060,0x00000061,0x00000062,0x00000063,0x04040064,
+0x00000065,0x00000066,0xcfcf0067,0x59590068,0x07070069,0x4242006a,
+0x0000006b,0xdbdb006c,0x9494006d,0x2828006e,0x6363006f,0x07070070,
+0xd3d30071,0xb1b10072,0x3b3b0073,0x06060074,0x58580075,0xf7f7c076,
+0x00000077,0x00000078,0x02020079,0x0000007a,0x0909007b,0x0505007c,
+0x1616007d,0x6b6b007e,0x0000007f,0xb3b30080,0x04040081,0x00000082,
+0x00000083,0x00000084,0x00000085,0x00000086,0x00000087,0x00000088,
+0x00000089,0x0000008a,0x0000008b,0x0202008c,0x0000008d,0x0000008e,
+0x6666008f,0x66660090,0x66660091,0x66660092,0x66660093,0x66660094,
+0x66660095,0x00000096,0x00000097,0x00000098,0x00000099,0x0000009a,
+0x0000009b,0x0000009c,0x0000009d,0x0000009e,0x0000009f,0xffff00a0,
+0x000000a1,0x606000a2,0x666600a3,0x0c0c00a4,0x666600a5,0x0c0c00a6,
+0x010100a7,0x666600a8,0x666600a9,0x666600aa,0x666600ab,0x666600ac,
+0x666600ad,0x000000ae,0x010100af,0x000000b0,0x000000b1,0xf0f0c0b2,
+0x000000b3,0x050500b4,0x303000b5,0x555500b6,0x333300b7,0x000000b8,
+0x333300b9,0x000000ba,0x353500bb,0x000000bc,0x333300bd,0x000000be,
+0x333300bf,0x000000c0,0x000000c1,0x444400c2,0x000000c3,0x7171c0c4,
+0x7171c0c5,0x030300c6,0x888800c7,0x444400c8,0x010100c9,0x000000ca,
+0x000000cb,0x000000cc,0x000000cd,0x000000ce,0x30f080cf,0x050500d0,
+0x333300d1,0x000000d2,0x050500d3,0x000000d4,0x000000d5,0x050500d6,
+0x000000d7,0x000000d8,0x050500d9,0x000000da,0x333300db,0x000000dc,
+0x333300dd,0x000000de,0x7777c0df,0x888800e0,0x000000e1,0x444400e2,
+0x0303c0e3,0x0f0fc0e4,0x0f0fc0e5,0x444400e6,0x010100e7,0x000000e8,
+0x000000e9,0x000000ea,0x000000eb,0x7777c0ec,0x585800ed,0x7777c0ee,
+0x585800ef,0x000000f0,0x000000f1,0x747400f2,0x0404c0f3,0xa2a200f4,
+0xaaaa00f5,0x242400f6,0x0909c0f7,0x282800f8,0x101000f9,0x555500fa,
+0x808000fb,0x888800fc,0x888800fd,0x888800fe,0x888800ff,0x80800100,
+0x38380101,0xb8b80102,0x80800103,0x38380104,0x78780105,0xc0c00106,
+0x03030107,0x00000108,0x00000109,0x0000010a,0x0400810b,0x0c0c010c,
+0x0000010d,0x0000010e,0x9696010f,0x77770110,0x5a5a0111,0x00000112,
+0x00000113,0x21210114,0x70700115,0x00000116,0x00000117,0x00000118,
+0xb3b30119,0x5555011a,0x0b0b011b,0x0000011c,0x0303c11d,0x0000011e,
+0xb3b3011f,0x55550120,0x30300121,0x46460122,0x00000123,0x00000124,
+0x00000125,0x21210126,0x23230127,0x02020128,0x0000ffff,0x00100000,
+0x00100800,0x00100050,0x00100150,0x00100250,0x00100950,0x00100255,
+0x00100955,0x00100a55,0x00110a55,0x001009f5,0x0010095f,0x00100a5f,
+0x00110a5f,0x00000a50,0x00000955,0x00000a55,0x00010a55,0x000009f5,
+0x0000095f,0x00000a5f,0x00010a5f,0x000009ff,0x000109ff,0x00010aff,
+0x000111ff,0x000112ff,0x000113ff,0x000114ff,0x000115ff,0x000116ff,
+0x000135ff,0x000136ff,0x000155ff,0x000156ff,0x0001d5ff,0x0d0118f9,
+0xdef400e4,0x0ffc06f1,0x1dfffa27,0x091810f0,0xe010f20a,0x11041417,
+0xf2faf114,0xe2fcf7db,0x13eee1fb,0xe91cff0d,0x0318171a,0x03e8da00,
+0xe9e417e6,0x1312fff3,0xe204e105,0xf206f725,0x11fcf1ec,0xe0f014e9,
+0x09e8f2f6,0x1d011010,0x0f04fad9,0xde0c060f,0x0dff001c,0xf61a1807,
+0x0f16e40e,0x18ec05f9,0xff1e0a1b,0xffe22600,0x18140ae5,0x0fea0507,
+0xf6e6e4f2,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x4ff7e92d,0x468a4f8a,0x21004691,0x46052290,0x9e0c4698,
+0xb038f8dd,0xf984f7e5,0xb96c683c,0x7032f44f,0xf7e74621,0x6038faf1,
+0xf0002800,0x462180fa,0x7232f44f,0xf974f7e5,0x2e01683a,0x2600bf08,
+0x208cf8c5,0x32c4f892,0xf8823301,0x231132c4,0x807cf8c5,0x9b0d612b,
+0x652b606e,0x904cf8c5,0xf0402e00,0xf04f80de,0x680a51c0,0x602b0f13,
+0x0c1b0413,0xf3c2632b,0xf3c24303,0x636b5203,0xb10a63aa,0x63ab2301,
+0x3b0e6bab,0xbf8c2b01,0x23012300,0x3040f885,0xb92b682b,0x46414628,
+0xf0004652,0xe006f9ed,0xf0402b01,0x462880ba,0xf0004652,0xf8d5f9fd,
+0x2b003084,0x80b1f000,0x46282100,0xf888f7e4,0x46284604,0xf942f7e4,
+0x6168280a,0x6ae3bfc4,0x686363eb,0x5f80f013,0xd00561ab,0x3604f8d4,
+0xf003622b,0x61eb03ff,0x63e0f44f,0x270060ab,0x33fff04f,0x463c60eb,
+0x612b3312,0x4621e011,0xf7e44628,0x4628f865,0xfe4cf7e3,0xf7e44628,
+0xf8d5f91d,0xf853308c,0x45983024,0x4627bf08,0xf8d53401,0x429c3084,
+0x4639d3e9,0xf7e44628,0x4628f84f,0xf850f7ea,0x6ceb9a0f,0x92014628,
+0x46422100,0xb000f8cd,0xf95ef7e5,0xd1642800,0x0f00f1bb,0x465ed101,
+0xf8dbe001,0xf2416000,0x62ab43e4,0x4630b12e,0xf7e4492f,0x6268fe63,
+0x2000b940,0xf7e4492d,0x6268fe5d,0xf64fb910,0x626b73ff,0x492a4630,
+0xfe54f7e4,0x80b0f8df,0xf89862e8,0x2c004000,0x696bd12b,0xdd0b2b13,
+0x6100f44f,0x46224628,0xf820f7e4,0x65844639,0x462865c4,0xf80cf7e4,
+0x6ce94628,0xfac4f7e5,0x6ce94628,0xfaa0f7e5,0x4630491a,0xf7e46cec,
+0x4621fe31,0x46284602,0xfbdcf7e5,0x6ce94628,0xfd14f7e5,0x6ce94628,
+0xfa6ef7e5,0xf8882301,0x696b3000,0xdd112b0f,0x490f4630,0xfe1af7e4,
+0x21004b0e,0xbf082800,0x90004618,0x46282288,0x33fff04f,0xff24f7e3,
+0x2500e000,0xe8bd4628,0x46c08ffe,0x0001c538,0x00016ed3,0x00016eda,
+0x00016ee4,0x00016eef,0x00016ef8,0x000a005a,0x0001c5d0,0x4f18b5f0,
+0x7839b085,0xb1094604,0xe0274816,0x4b174a16,0x4e142800,0x4602bf08,
+0x4603bf08,0x91019100,0x92039302,0xf2444630,0x46227110,0x53c0f04f,
+0xfebcf7ff,0xb9584605,0x108cf8d6,0x4608b909,0x4620e00c,0x7232f44f,
+0xfb92f7e7,0xe0054628,0x23204a07,0x23016013,0x4630703b,0xbdf0b005,
+0x0001c530,0x0001c540,0x0001c5b8,0x0001c5b4,0x0001c53c,0x47ffe92d,
+0x46884681,0x21002090,0x461d4692,0x9f0e9e0d,0xf996f7e7,0xb1e04604,
+0x46499b0c,0x46429301,0x95004653,0x97039602,0xfe84f7ff,0xb9304605,
+0x46214640,0xf7e72290,0x4628fb5f,0xb90ee00a,0xe0004633,0x67636833,
+0x463bb90f,0x683be000,0x462067a3,0xe8bdb004,0x46c087f0,0x4ff0e92d,
+0xb0872b01,0x91054605,0x93039204,0xd9019f11,0xe09d2000,0x0b00f04f,
+0x8084f8d0,0x9040f8dd,0xe08a46da,0x208cf8d5,0x0688ea4f,0xf8c318b3,
+0x9b0591c0,0x45994641,0x9c04bf08,0xbf084628,0x4028f842,0xf88ef7e4,
+0x8080f8c5,0x462867e8,0x408cf8d5,0xf80af7e4,0x308cf8d5,0x18f31934,
+0x0080f8c4,0x3080f8d3,0x6f00f5b3,0x4628d11f,0xf7e46fec,0x2804f813,
+0x2805d001,0x6823d903,0x6703f3c3,0x6b2ae053,0x3306f244,0xd101429a,
+0xe04c2706,0x7304f244,0xd101429a,0xe0462709,0x3365f245,0xbf14429a,
+0x27072701,0xf5b3e03f,0xd13c6f03,0x46286fe9,0x6670f501,0x6177f501,
+0xffd0f7e3,0x0301f108,0x3084f8c5,0x051b0d03,0x5fc0f1b3,0xf420d12b,
+0xf024647e,0x2200041f,0xf8d5e008,0xeb03308c,0xf8d30382,0x429c31c0,
+0x3201d005,0x3084f8d5,0xd3f2429a,0x2a11e001,0xf106d115,0x4628019c,
+0xffacf7e3,0x9c039400,0x4003f3c0,0x90011c63,0x46289905,0xf7ff9a04,
+0x9b10ff6d,0xf1b34483,0xbf085fc0,0xf10a1a3f,0xf1080a01,0xf5090801,
+0x45ba5980,0xf1b8d203,0xf67f0f0f,0xeb0aaf6f,0xf8c5030b,0x46183084,
+0xe8bdb007,0x46c08ff0,0x460db537,0x46046fc1,0x617bf501,0xff7ef7e3,
+0xf81cf7e4,0x53c0f04f,0x23019300,0x93014601,0x462a4620,0xf7ff3b01,
+0xf8c4ff3d,0xbd3e0084,0x4ff0e92d,0x30fcf8d1,0x930fb091,0xf5034605,
+0x93076360,0xae0fe147,0x2300220e,0x46314628,0xf94cf7e4,0x4604280f,
+0x8145f000,0x46282200,0x46134631,0xf942f7e4,0x070ef010,0x8138f040,
+0x433bf240,0x5f14ebb3,0x210bf3c4,0x1804f3c0,0xf640d104,0x429973ff,
+0x8125f000,0x2244f3c0,0x2a009209,0x811ff000,0x43c4f3c0,0x3b84f3c0,
+0x020beb13,0xd11b9308,0x3367f240,0xf0404299,0xab0e8112,0xab0d9301,
+0xab0c9302,0xab0b9303,0x46289304,0x46134631,0xf7e49200,0x2800f921,
+0x8101f000,0x208cf8d5,0xf8c29b0e,0xe0fa32c0,0xa084f8d5,0x308cf8d5,
+0x038aeb03,0x40c0f8c3,0xf8c3463c,0xf8c30100,0xe00b1080,0x46282201,
+0x46134631,0xf8f2f7e4,0x000ef000,0xf0402802,0x340180e7,0xae0f4544,
+0x2200d1f0,0xf10d4613,0xf10d0938,0xaf0c0834,0x4628ac0b,0x92004631,
+0x9004f8cd,0x8008f8cd,0x94049703,0xf8e8f7e4,0xb9e84602,0x93002340,
+0x46314628,0xf8cd4613,0xf8cd9004,0x97038008,0xf7e49404,0xb110f8d9,
+0x0801f04f,0x9b0de00e,0xf0402b00,0x9b0b80b9,0xf0402b00,0x9b0c80b5,
+0x5f80f5b3,0x80b0f040,0x0800f04f,0x308cf8d5,0xeb039a0e,0xf8c3038a,
+0x9a0c21c0,0xf8c32401,0xab0e2140,0xab0d9301,0xab0c9302,0xab0b9303,
+0x93042200,0x4628a90f,0x92004623,0xf8acf7e4,0xb1604601,0xd10a2c01,
+0xf5b39b0c,0xd1065f80,0x308cf8d5,0xeb039a0e,0xf8c3038a,0xf8d52200,
+0x9a0c308c,0x038aeb03,0x2180f8c3,0x2701b909,0x3401e019,0x2400e7d5,
+0x93002300,0x9301ab0e,0x9302ab0d,0x9303ab0c,0x9304ab0b,0xa90f4628,
+0x4623463a,0xf7e41c66,0xb108f87f,0xe7eb4634,0xd0612e00,0x9a093701,
+0xd1e44297,0xe0212400,0x930023c0,0x9301ab0e,0x9302ab0d,0x9303ab0c,
+0x9304ab0b,0xa90f4628,0x23004622,0xf864f7e4,0xd0492800,0x2b009b0b,
+0x9b0cd146,0x5f80f5b3,0xb934d142,0x308cf8d5,0xeb039a0e,0xf8c3038a,
+0x34012280,0xd1db455c,0xe0252400,0x93002380,0x9301ab0e,0x9302ab0d,
+0x9303ab0c,0x9304ab0b,0xa90f4628,0xbf0c2f01,0x1c624622,0xf7e42300,
+0xb308f83b,0xb9fb9b0b,0xf5b39b0c,0xd11b5f80,0x0f00f1bb,0xb934d107,
+0x308cf8d5,0xeb039a0e,0xf8c3038a,0x34012280,0x429c9b08,0xf1b8d1d6,
+0xd1040f00,0x3084f8d5,0xf8c53301,0x9b0f3084,0x42939a07,0xaeb3f4ff,
+0xf8c52300,0xb0113084,0x8ff0e8bd,0x41f0e92d,0x46884605,0x4611461f,
+0x636cf500,0x781e2000,0x2434b9c6,0xf404fb00,0x606cf504,0x221f1828,
+0xfd0af7e4,0x19649b06,0x3eecf8c4,0x46309b07,0x3ee8f8c4,0xf8c49b08,
+0xf8c48ee0,0xf8c47ee4,0xe0053ef0,0x33343001,0xd1e02816,0x0015f06f,
+0x81f0e8bd,0x4604b570,0x4605b908,0x6880e09e,0xf7e3b108,0x4625fad3,
+0xf8d52600,0xb1200778,0x47986803,0xf8c52300,0x36013778,0x2e063504,
+0xf8d4d1f3,0x68285848,0xf001b118,0x2300f877,0x4620602b,0xf98af7ee,
+0x1818f8d4,0x46204606,0xfaaef001,0x46202101,0xfdb0f7f9,0x1d14f8d4,
+0xf8d4b131,0xf7e9073c,0x2300fedf,0x3d14f8c4,0x1d2cf8d4,0xf8d4b131,
+0xf7e9073c,0x2300fed5,0x3d2cf8c4,0x0534f641,0xb1295961,0x073cf8d4,
+0xfecaf7e9,0x51632300,0x07fcf8d4,0xf001b120,0x2300fac5,0x37fcf8c4,
+0x554cf504,0xb1186828,0xfe6af000,0x602b2300,0x37d8f8d4,0x2300b113,
+0x37d8f8c4,0x4554f241,0xb1185960,0xfb82f001,0x51632300,0x1750f8d4,
+0x6ca0b141,0x2754f8d4,0xf88ef7e7,0x60e32300,0x3750f8c4,0x46224918,
+0xf7ee4620,0x4620f9c9,0x46224916,0xf9c4f7ee,0xb11868a0,0xfaf0f7e3,
+0x60a32300,0x0288f243,0xb10b58a3,0x50a32300,0x0800f8d4,0xf000b120,
+0x2300fced,0x3800f8c4,0x07f8f8d4,0xf001b120,0x2300fac3,0x37f8f8c4,
+0x46216ca0,0x3204f243,0x0501f1d6,0x2500bf38,0xf85af7e7,0xbd704628,
+0x0001a394,0x0001a39f,0x4ff0e92d,0x9005b091,0xf243460c,0x21003004,
+0x46994615,0xa06cf8dd,0x8078f8dd,0x6068f89d,0xfe66f7e6,0x28004607,
+0x8478f000,0xf2432100,0xf7e43204,0xf507fce9,0x33046328,0xf8c79a05,
+0xf5073848,0x330c6304,0x3844f8c7,0x273cf8c7,0x46384649,0x9000f8c7,
+0xa048f8c7,0x8808f8c7,0x603df887,0xfdc2f7ee,0xf7e94638,0x683bff97,
+0x6774f887,0x3740f8c7,0x63ecf507,0x375cf8c7,0x62eaf507,0xf8c73b0c,
+0x4628a748,0x93029201,0x9a1c4651,0xf8cd9b1d,0xf7ff8000,0xf8c7fc87,
+0xb908074c,0xe333230b,0x8750f8d7,0xf8c760b8,0x4640800c,0xf7e44991,
+0xb120fa11,0x460a2100,0xf8d8f7e4,0x4640b284,0xf7e4498d,0xb120fa07,
+0x460a2100,0xf8cef7e4,0x4620b285,0xf7e94629,0xb908fef5,0xe313230c,
+0xf6402200,0xf8a70112,0xf8a74826,0xf8d75828,0xf7e3074c,0xf8c7fbef,
+0xf8d70758,0xf7e3074c,0x68bafc99,0x0744f8c7,0x6b116078,0xb758f8d7,
+0x3306f244,0xf8c74299,0xd117b80c,0x2b026b53,0x6b91d91a,0xd1052902,
+0x2828f8b7,0x3303f244,0xd117429a,0x2828f8b7,0x3321f244,0xd002429a,
+0x429a3303,0x2901d108,0xe005d10c,0x3311f244,0xd1014299,0xb12b6b53,
+0x1380f44f,0xf0034103,0xe0000001,0xb9082000,0xe2cd230d,0x074cf8d7,
+0xf9d0f7e3,0x21004638,0xff3ef7ea,0xf04f4638,0xf7eb31ff,0x4638f835,
+0xfe44f7ea,0x230eb908,0x495ae2ba,0xf7e44640,0x68baf9c1,0xbf0828ff,
+0xb2802001,0x0384f8a7,0xb1b86a51,0xd80128ff,0xe0142401,0x3b010b03,
+0xd80f2b01,0x2303f3c0,0xd80b2b09,0xf3c0b153,0x2b091303,0xf000d806,
+0x2b09030f,0x2400bf8c,0xe0002401,0x6a922400,0x43e4f241,0xd110429a,
+0x6382f5a1,0x2b013b07,0x283fd801,0xf240e007,0x4299430c,0x3315d004,
+0xd1024299,0xd8002850,0xb90c2400,0xe27b230f,0x4640493b,0xf982f7e4,
+0xf887493a,0x46400386,0xf97cf7e4,0xf8c74938,0x46400388,0xf976f7e4,
+0x174cf8d7,0x038cf8c7,0xf2416a8a,0x429a036b,0x6a4bd10c,0xd1092b4e,
+0x3384f8b7,0xd9052b40,0x3388f8d7,0x0302f043,0x3388f8c7,0x3388f8d7,
+0x0f20f013,0x2301d102,0x37c0f887,0x3324f244,0xd014429d,0x429d3b0b,
+0x3b07d011,0xd00e429d,0x429d3316,0x3303d00b,0xd008429d,0x429d3b17,
+0x3307d005,0xd002429d,0x429d3319,0x2302d101,0x2301e000,0x3770f8c7,
+0x3770f8d7,0xf8c74638,0x230132f0,0x3840f8c7,0xf8daf001,0x0818f8c7,
+0x2310b908,0xf244e220,0x429d3321,0x3b0ed01e,0xd01b429d,0x429d3307,
+0x3310d018,0xd015429d,0x429d3b14,0x3307d012,0xbf14429d,0x26012600,
+0x46c0e00d,0x0001a3b2,0x00016ec0,0x0001a3b9,0x0001a3c2,0x00016ee4,
+0x0001a3ca,0x46312601,0xf7eb4638,0xf8d7f823,0x2e002848,0x2302bf0c,
+0x60532301,0xf8d76096,0xf8d7074c,0xf7e34844,0x6020f8bb,0x074cf8d7,
+0x4844f8d7,0xf8b0f7e3,0x380cf8d7,0xf8d36060,0x6879315c,0xf8c74ab6,
+0xf8c73830,0x23063834,0x2303fb01,0x0844f8d7,0x475cf8d7,0xf8d76303,
+0x46383848,0xf8d7685a,0x46593818,0x463b9300,0xfe84f000,0xb9086020,
+0xe1c12311,0x375cf8d7,0x684b6819,0xd0012b01,0xe1b92312,0x2848f8d7,
+0x030ff04f,0x3130f8a2,0x33fff240,0x3132f8a2,0x60116853,0xd1152b02,
+0x73133b01,0xf24468b9,0x6b0a3306,0xd106429a,0x2b026b8b,0xf8d7d103,
+0x23002848,0xf8d77313,0x46383848,0x7b1a2103,0xfd48f7e9,0x2848f8d7,
+0x2b026853,0x3b01d101,0xf8d77313,0xf2422848,0x68100356,0x42998a01,
+0x3b01d806,0xd2344299,0x42993b05,0xe030d009,0x0360f242,0xd01f4299,
+0x43f5f24e,0xd0214299,0x7c83e027,0xd1052b01,0x033bf06f,0x3120f8c2,
+0xe004334b,0x0345f06f,0x3120f8c2,0xf8c2335a,0xf8d73124,0xf4133388,
+0xd0195f80,0x3120f8d2,0xf8c23b02,0xe0133120,0x034af06f,0x3120f8c2,
+0xe00b335a,0x0395f06f,0x3120f8c2,0x7396f503,0xf06fe004,0xf8c2034a,
+0x335f3120,0x3124f8c2,0x1848f8d7,0xf8d14638,0xf8c13120,0xf8c1311c,
+0xf8d13114,0xf8c13124,0x31143118,0xf9cef7ec,0x1848f8d7,0x237f2200,
+0x0014f101,0x31749300,0x92014613,0xfce6f7f8,0x495f4b5e,0x0750f8d7,
+0xbf082e00,0xf7e44619,0xb2c0f82d,0x4b5bb940,0xf8d7495b,0x2e000750,
+0x4619bf08,0xf822f7e4,0x1e43b240,0xd9012b0e,0xe0392300,0x6b1a68bb,
+0x3325f244,0xd001429a,0xd1052801,0x3209f642,0x54bb2300,0xe0063201,
+0xd1052802,0xf6422301,0x54bb3209,0x54bb18d2,0x494b4b4a,0x0750f8d7,
+0xbf082e00,0xf8d74619,0xf7e34848,0xf884fffb,0xf8d70109,0xf8911848,
+0x2bff3109,0xf897d108,0x2a012386,0x2308d104,0x3109f881,0xe0074613,
+0x0205f343,0xeb03099b,0xf8810382,0x23013109,0x3314b90b,0xf1b6e0d4,
+0xf43f3fff,0x2100aeb0,0xf7e94638,0x2103ff03,0xf7eb4638,0x4b33f801,
+0x681c4d33,0x0758f8d7,0x7340f04f,0xf8c04629,0xe0153160,0x78ca790b,
+0xea43041b,0x798a6302,0x794a4313,0x2302ea43,0x3164f8c0,0x780a784b,
+0xea43021b,0x788a4302,0x43133107,0x3164f8c0,0x0301ebc5,0xd3e542a3,
+0x49224640,0xffaaf7e3,0x360bf642,0x492055b8,0xf7e34640,0xf507ffa3,
+0x340b542c,0xf6427823,0xf5073810,0x3510552c,0x0008f807,0x3301b90b,
+0x462055bb,0xf7e32101,0xf642fef9,0xb2c0330c,0x330154f8,0x782b54f8,
+0x3301b913,0x3008f807,0x21014628,0xfeeaf7e3,0x3311f642,0x54f8b2c0,
+0x33012400,0xe01d54f8,0x0001bcfc,0x0001a3db,0x0001a3d6,0x0001a3e4,
+0x0001a3e0,0x000177c2,0x0001a3e8,0x00025010,0x0001e6e4,0x0001a3ec,
+0x0001a3f4,0x46384621,0xfe5af7ea,0xf7ea4638,0x3401fc2d,0x3840f8d7,
+0xd3f3429c,0xf8d72300,0x4aad074c,0x970049ad,0xfee0f7e2,0x21004638,
+0xff6af7ed,0x0750f8d7,0xf7e349a9,0x4603ff23,0xf10db978,0x49a7041a,
+0x4620221f,0xf8f4f7e4,0x0750f8d7,0xf7e34621,0x4603ff15,0x2315b908,
+0xf507e02a,0xf1086802,0x46180818,0xf7e34641,0xf897fe37,0xf8971839,
+0xf897283a,0xf8976838,0xea01083b,0xf8970302,0xea06483c,0xf8970303,
+0xea00583d,0xea040303,0xea050303,0x2bff0303,0xea41d009,0xea460302,
+0xea400303,0xea440303,0x431d0303,0x2316d102,0xe140461c,0x99054638,
+0x464b4652,0xff3cf000,0x07f8f8c7,0x241fb908,0x4638e135,0xf94cf000,
+0x0800f8c7,0x243db908,0x4981e12d,0xf7e368f8,0xf243fef1,0x52f82310,
+0x68f8497e,0xfeeaf7e3,0x2312f243,0x463852f8,0xf962f7ea,0x3848f8d7,
+0xf6426818,0x5cf93309,0xfda8f7f3,0x5046f507,0x22064641,0xf7e43042,
+0x4641f967,0xf1072206,0xf7e4004c,0x4638f961,0xff82f000,0x4354f241,
+0xb90850f8,0xe0fe2429,0xf0004638,0xf8c7fead,0xb90807fc,0xe0f62435,
+0xf0004638,0xf507fa4d,0x6018534c,0xf0402800,0x243680d1,0xf8d7e0eb,
+0x68183848,0xf7f16859,0xf507fa11,0x801853b7,0x3848f8d7,0x54b6f507,
+0xf8d36818,0x68068004,0xf9f6f7f1,0x34242500,0x23ffb2c0,0x90039301,
+0x46204643,0x46324629,0x95029500,0xfbd0f7f8,0x22904649,0x50baf507,
+0xf91ef7e4,0x22904649,0x703df507,0xf918f7e4,0x0206f04f,0x26fcf8a7,
+0x0305f04f,0x7225f44f,0x33a0f8a7,0x23a2f8a7,0x0301f04f,0x02c4f04f,
+0xf8a74c43,0xf8a73634,0x46292636,0x4b424a41,0x95004638,0xf7f89701,
+0x1d23ff27,0x0007e893,0xe883466b,0x68230007,0x21074638,0xf7f8463a,
+0x2206ff4f,0x003af10d,0xf7e44938,0xf8b7f8e9,0xf2442828,0x429a3321,
+0x3b0ed011,0xd00e429a,0x429a3307,0x3310d00b,0xd008429a,0x429a3b14,
+0x3307d005,0xbf14429a,0x24012400,0x2401e000,0xf8d74638,0x46221dc8,
+0xfac4f7ef,0xb1084605,0xe06c2439,0x013af10d,0x46384622,0xf9d8f7f9,
+0x739cf44f,0xf103fb04,0xf8c219ca,0x28000a94,0x2301d05c,0xf8d27603,
+0xf5010a94,0x1879612f,0x310830f0,0xf7e42228,0xf1b4f8ab,0xd0b83fff,
+0x2398f8d7,0x605ef507,0x300432c0,0xf7e32110,0x6cbafe17,0x60d74b12,
+0x9a1f6093,0x6015b102,0xe0404638,0x9b1f241e,0x4618b90b,0x9a1fe03b,
+0x60142000,0x46c0e037,0x0000b57d,0x0000b569,0x0001a3ff,0x0001a3fc,
+0x0001a407,0x0001a41a,0x0001a850,0x00009811,0x000095e1,0x0001a116,
+0x000072f1,0x59b4f507,0x0930f109,0x22902100,0xf7e44648,0xf241f84d,
+0xf04f63dc,0x52fa0264,0x33302203,0x463854fa,0x23012200,0x512cf44f,
+0xfb18f7ef,0xf43f28ff,0xe71aaf16,0x46382437,0xfa88f7ff,0xb011e7bf,
+0x8ff0e8bd,0x4604b510,0x4906b150,0x68004622,0xfcbef7ed,0x46216823,
+0x22046c98,0xfb74f7e6,0x46c0bd10,0x0001a95c,0x2100b530,0xb0854605,
+0xf7e62004,0xb908f98d,0xe0104604,0x22042100,0xf7e44604,0x4b07f811,
+0x93006025,0x93012300,0x46289302,0x4a054904,0xf7ff4623,0x4620fa2b,
+0xbd30b005,0x0000c9a1,0x0001a8a8,0x0001a95c,0x43f0e92d,0xf89db087,
+0xf8dd4038,0x9400904c,0x46989c0f,0x9c109401,0x9014f8cd,0x9c119402,
+0x9c129403,0xf7ff9404,0x4605fae3,0xf8d9b918,0x48494000,0xf44fe00a,
+0x21007035,0xf950f7e6,0x07a0f243,0x51e84604,0x4844b928,0x4a444641,
+0xf812f7e4,0x2100e063,0x7235f44f,0xffccf7e3,0x237f59ea,0x60156055,
+0x36fff885,0x24006853,0x4700f883,0x94014b3b,0x94029300,0x493a4628,
+0x59eb4a3a,0xf9def7ff,0xb1084606,0xe7dd4838,0x073cf8d5,0x59ea4937,
+0xf7e94b37,0xf8c5f917,0xb9300d14,0x46414835,0xf7e34a2d,0x4634ffe5,
+0x59eae035,0xf8852301,0x49316d09,0x32c4f8c2,0xf7e368e8,0x4604fd03,
+0x482e4621,0xffd4f7e3,0x4620b144,0xf7e3492c,0xb918feed,0x230259ea,
+0x32c4f8c2,0x04a0f243,0x4828592b,0x12c4f8d3,0xffc2f7e3,0xf0005928,
+0x4603f851,0x4604b110,0xe7a34823,0x0f00f1b9,0xf8c9d001,0x592a0000,
+0xf8c24820,0x49203218,0xfb52f7e6,0xf8c9e002,0xb90d4000,0xe0134628,
+0x04a0f243,0xb15a592a,0x4628490e,0xfbf4f7ed,0x59296ca8,0x7235f44f,
+0xfaaaf7e6,0x512b2300,0xf7ff4628,0x2000f9a7,0xe8bdb007,0x46c083f0,
+0x0001ac01,0x0001ac1e,0x0001a9ec,0x0000d0e9,0x0001a9fc,0x0001ac40,
+0x0001ac50,0x0000d059,0x0001b70f,0x0001ac76,0x0001aca2,0x0001acaa,
+0x0001acbd,0x0001acc1,0x0001acdb,0x0001ad0a,0x0000cf69,0x2100b510,
+0xf44f4604,0xf7e660e1,0xf8c4f89b,0xb3400220,0xf44f2100,0xf7e362e1,
+0x2080ff1f,0xf7e62100,0xf8c4f88f,0xb1e002c0,0x22802100,0xff14f7e3,
+0x490e480d,0xf7e64622,0x480dfaf3,0x4622490d,0xfaeef7e6,0x4622480c,
+0xf7e6490c,0x2200fae9,0x46102308,0x2224f8c4,0x322cf8c4,0x2230f884,
+0x2001e000,0x46c0bd10,0x0001ae5b,0x0000da1d,0x0001ae64,0x0000da99,
+0x0001ae6c,0x0000d9f1,0x4601b510,0x6803b128,0x72bef44f,0xf7e66c98,
+0x2000fa33,0x46c0bd10,0x2100b5f0,0x4604b087,0x70bef44f,0xf84cf7e6,
+0x28004605,0x81a9f000,0xf44f2100,0xf7e372be,0xf640fecf,0xf44f108a,
+0x80e8539b,0x4050f241,0x8168812b,0x53a4f241,0x6044f241,0x81ab602c,
+0x462e81e8,0x2100462a,0xf44f186b,0x82186080,0x76932350,0x231d3102,
+0x320177d3,0xd1f3290a,0xf8852308,0x3b013024,0x3025f885,0x3026f885,
+0xf8852303,0xf06f3027,0xf8850301,0xf8853029,0xf885302a,0xf885302b,
+0xf06f302c,0x24000305,0x3036f885,0x3037f885,0x3038f885,0x3039f885,
+0x303af885,0x303bf885,0x303cf885,0x303df885,0x303ef885,0x030df06f,
+0x4028f885,0x402df885,0x402ef885,0x402ff885,0x4030f885,0x4031f885,
+0x4032f885,0x4033f885,0x4034f885,0x4035f885,0x303ff885,0x3040f885,
+0x3041f885,0x3042f885,0x3043f885,0x3044f885,0x0048f105,0x3045f885,
+0x0124f105,0x3046f885,0x3047f885,0xf7e32224,0x1c63fe77,0xb2dc2200,
+0x206cf886,0x207bf886,0x2c0f3601,0x18abd1f5,0x24003201,0xf8832ae1,
+0xd1f8408a,0xf8852328,0x2324316b,0x316cf885,0x70b8f505,0xf5052320,
+0xf88571b4,0xf885316d,0xf885316e,0xf885316f,0x30013170,0x22063103,
+0xfe4ef7e3,0x46274e82,0x23124881,0x0003fb07,0xfd42f7e8,0x7bf2b318,
+0x2a018a34,0xd1187bb3,0xd0102b03,0xd0022b05,0xd00c2b02,0x2100e017,
+0xf7e3460a,0xa906fa4b,0x0d02f821,0x19282202,0xfe2ef7e3,0x2100e00b,
+0xf7e3460a,0x5528fa3f,0x3b02e005,0xd8022b01,0xf7ef1929,0x3701ffd5,
+0x2f223612,0xf895d1d0,0x486a3020,0x3021f885,0x3022f885,0x3023f885,
+0xfd0ef7e8,0x2210b1b0,0x0106f10d,0xffc0f7ef,0xd10f2804,0x3006f89d,
+0x3143f885,0x3007f89d,0x3147f885,0x3008f89d,0x314bf885,0x3009f89d,
+0x314ff885,0xf7e8485a,0xb190fcf3,0xf10d2210,0xf7ef0106,0x2803ffa5,
+0xf89dd10b,0xf8853006,0xf89d3093,0xf8853007,0xf89d3097,0xf8853008,
+0x4850309b,0xfcdcf7e8,0x2210b330,0x0106f10d,0xff8ef7ef,0xd11f2808,
+0x3006f89d,0x30adf885,0x3007f89d,0x30aff885,0x3008f89d,0x30b1f885,
+0x3009f89d,0x30b3f885,0x300af89d,0x30b5f885,0x300bf89d,0x30b7f885,
+0x300cf89d,0x30b9f885,0x300df89d,0x30bbf885,0xf7e8483b,0xb1b0fcb1,
+0xf10d2210,0xf7ef0106,0x2804ff63,0xf89dd10f,0xf8853006,0xf89d30bf,
+0xf8853007,0xf89d30c3,0xf8853008,0xf89d30c7,0xf8853009,0x482f30cb,
+0xfc96f7e8,0x2210b390,0x0106f10d,0xff48f7ef,0xd12b280b,0x3006f89d,
+0x30eff885,0x3007f89d,0x30f3f885,0x3008f89d,0x30f7f885,0x3009f89d,
+0x30fbf885,0x300af89d,0x30fff885,0x300bf89d,0x3103f885,0x300cf89d,
+0x3107f885,0x300df89d,0x310bf885,0x300ef89d,0x310ff885,0x300ff89d,
+0x3113f885,0x3010f89d,0x3117f885,0xf7e84814,0xb1b0fc5f,0xf10d2210,
+0xf7ef0106,0x2804ff11,0xf89dd10f,0xf8853006,0xf89d3120,0xf8853007,
+0xf89d3124,0xf8853008,0xf89d3128,0xf8853009,0x4628312c,0xbdf0b007,
+0x0001af0c,0x0001b170,0x0001b179,0x0001b182,0x0001b18b,0x0001b194,
+0x0001b19e,0x4604b570,0xd0562800,0x1e5d6d03,0x2d006505,0xf8d0d151,
+0xb1291d38,0xf44f6c43,0x6c987280,0xf858f7e6,0x1d40f8d4,0x6c63b129,
+0x7280f44f,0xf7e66c98,0xf8d4f84f,0xb1291d3c,0xf44f6c63,0x6c987280,
+0xf846f7e6,0x1d44f8d4,0x6c63b129,0x7280f44f,0xf7e66c98,0xf8d4f83d,
+0xb1211d48,0x220e6c63,0xf7e66c98,0xf241f835,0x59a11690,0x6be3b129,
+0x073cf8d3,0xfe40f7e8,0xf8d451a5,0xb1311c24,0xf8d36be3,0xf7e8073c,
+0xf8c4fe37,0x69615c24,0x42a2680a,0x6ce3d102,0xe003600b,0x42a36cd3,
+0x64d5bf08,0x46216c63,0xf2416c98,0xf7e632ec,0xbd70f80f,0x4ff0e92d,
+0x21004688,0x4607b089,0x68804691,0x469a460a,0xb048f8dd,0xfbf0f7e2,
+0x0f08f010,0xd00a4606,0x4000f8db,0x4650b13c,0xf7ea6a21,0x6d23f89d,
+0x65233301,0xf241e18e,0x210030ec,0xfe10f7e5,0x28004605,0x818ef000,
+0xf2412100,0xf7e332ec,0xf50afc93,0x642b63e8,0xf1b92301,0xf8c50f02,
+0x646fa03c,0x8048f8c5,0xb014f8c5,0x3037f885,0xf016d105,0xbf1c0f01,
+0x5300f44f,0x6a29622b,0xf7ea4650,0x6cabf871,0x33e0f8b3,0xf3c3b29b,
+0xf0032103,0x0b1b020f,0x61a92902,0x626b61ea,0x2904d906,0x2905d004,
+0x2906d002,0x815cf040,0x46282101,0xff08f7ef,0x46282101,0xfe62f7ef,
+0x24016cab,0x43f6f8a3,0x33f8f8b3,0xea404626,0xf3c04003,0xb29a330f,
+0xf242852b,0x0f000363,0xf885429a,0xf040002a,0x2100813f,0xf7f04628,
+0x4628fcb5,0xfebcf7ef,0xf8c5233c,0x23143db4,0xf885220a,0xf2413030,
+0x54ea13f0,0x2203191b,0x54ea2100,0x0308f04f,0x1db8f8c5,0x4054f885,
+0x3dc2f8a5,0x426cf885,0x3101186a,0x292d237f,0x31c9f882,0x313cf882,
+0xf04fd1f6,0xf8a533ff,0x6c6b324e,0x3388f8d3,0x3f80f413,0x2301d104,
+0x3033f885,0x3d54f885,0x24006c6b,0xf7e26898,0xf8c5fa59,0xf8c54fa4,
+0x6be80df4,0xf7e96c6e,0x2802f8e5,0x80d4f040,0x68f04980,0xf98af7e3,
+0x0f85f885,0x68f0497e,0xf984f7e3,0x0f88f885,0x68f0497c,0xf97ef7e3,
+0x0f89f885,0x68f0497a,0xf978f7e3,0x0f8af885,0x68f04978,0xf972f7e3,
+0x0f8bf885,0x68f04976,0xf96cf7e3,0x0f8cf885,0x68f04974,0xf966f7e3,
+0x0f8df885,0x68f04972,0xf960f7e3,0x0f8ef885,0x68f04970,0xf95af7e3,
+0x0f8ff885,0x68f0496e,0xf954f7e3,0x0f90f885,0x68f0496c,0xf94ef7e3,
+0x0f91f885,0x68f0496a,0xf948f7e3,0x0f92f885,0x496868f0,0xf942f7e3,
+0xf980fa5f,0xf889fa5f,0x8084f885,0x463b4627,0x4a632120,0xf7e34668,
+0x68f0fc11,0xf7e34669,0xeb05f931,0x37010347,0xf8a32f03,0xd1ee0060,
+0x1cfb2700,0x4a5a2120,0xf7e34668,0x68f0fbff,0xf7e34669,0xeb05f91f,
+0x37010347,0xf8a32f03,0xd1ee0066,0x1dbb2700,0x4a512120,0xf7e34668,
+0x68f0fbed,0xf7e34669,0xeb05f90d,0x37010347,0xf8a32f03,0xd1ee006c,
+0x494a68f0,0xf8def7e3,0xb3184604,0x460a2100,0xffa4f7e2,0xf789fa4f,
+0x2400b280,0xf000192a,0x3401030f,0x0343eba7,0x2c040900,0x3088f882,
+0x68f0d1f4,0xb2ff493e,0xf8e8f7e3,0xf000192a,0x3401030f,0x0343eba7,
+0x2c0c0900,0x3088f882,0xe021d1f4,0x493768f0,0xf8b4f7e3,0x4621b120,
+0xf7e24622,0xb2c0ff7b,0x8088f885,0x8089f885,0x808af885,0x808bf885,
+0xebc02204,0xb2d90308,0x320118ab,0xf8832a0c,0xd1f61088,0x320118ab,
+0xf8832a14,0xd1f91088,0xf8da6d2b,0x3301073c,0x696b652b,0x681b4924,
+0x64eb462a,0x5000f8cb,0xf7e84b22,0x4604fc87,0x0c24f8c5,0x6c6bb940,
+0x6c984629,0x32ecf241,0xfe62f7e5,0xe00e4620,0xf1054628,0x22140118,
+0xfb2af7e3,0xe0064628,0x46296cb8,0x32ecf241,0xfe52f7e5,0xb0092000,
+0x8ff0e8bd,0x0001b634,0x0001b63a,0x0001b640,0x0001b647,0x0001b651,
+0x0001b65b,0x0001b665,0x0001b674,0x0001b683,0x0001b692,0x0001b6a0,
+0x0001b6ae,0x0001b6bc,0x0001b6c6,0x0001b6cd,0x0001b6d3,0x0001b6da,
+0x0000ef41,0x0001b6de,0x4602b570,0x4905460d,0xf7ec4604,0xb125ff65,
+0x46296ca0,0xf7e52224,0xbd70fe1b,0x0001b6e7,0x2100b530,0x4605b085,
+0xf7e52024,0x4604fc35,0x2100b1b8,0xf7e32224,0x230ffabb,0x332d6063,
+0x333c60a3,0x230360e3,0x4b076123,0x93004628,0x49074b06,0x4b079301,
+0x93024a07,0xf7fe462b,0x4620fccd,0xbd30b005,0x00014629,0x00014525,
+0x0001b1f8,0x000145e1,0x0001b6e7,0x4605b570,0x6844b150,0x462a4905,
+0xf7ec4620,0x6ca0ff25,0x22484629,0xfddcf7e5,0xbd702000,0x0001b824,
+0x4605b57f,0x20482100,0xfbf6f7e5,0xb1b04604,0x22482100,0xfa7cf7e3,
+0x60654b10,0x93002600,0x490f4628,0x46234a0f,0x96029601,0xfc96f7fe,
+0x4621b128,0x22486ca8,0xfdbaf7e5,0x22004634,0xf8842301,0x4620202d,
+0xf884325f,0xf8843045,0xf884202c,0xb0043031,0x46c0bd70,0x000157bd,
+0x0001b8fc,0x0001b824,0x4604b570,0xf8d0b1a0,0x690511f8,0xf8d5b131,
+0xf7e8073c,0x2300fbad,0x31f8f8c4,0x46224905,0xf7ec4628,0x6ca8fed5,
+0x69624621,0xfd8cf7e5,0x46c0bd70,0x0001bbaa,0x47ffe92d,0x56bcf240,
+0x46894680,0x21004630,0xf7e54692,0x4604fba1,0xd0562800,0x46322100,
+0xfa26f7e3,0x33fff04f,0xf04f61a3,0xf8a40314,0xf04f3208,0xf8a40328,
+0xf04f3206,0xf8a4032d,0xf04f3204,0x270003fa,0x320af8a4,0xf8842302,
+0x4920320c,0x4b204622,0xf8c46166,0x70a78010,0x720df884,0xf7e84648,
+0x2305fb6d,0x710ef504,0x723bf504,0x321cf8c4,0xbf0c42b8,0x35fff04f,
+0x3337463d,0x01f8f8c4,0x1218f8c4,0x2228f8c4,0x322cf8c4,0x1214f8c4,
+0x2224f8c4,0x4b0fb97d,0x93024640,0x4a0e4629,0x95004623,0xf7fe9501,
+0xb150fc05,0xf8d44648,0xf7e811f8,0x4621fb3d,0x46324650,0xfd24f7e5,
+0x4620463c,0xe8bdb004,0x46c087f0,0x000162a5,0x0001bbba,0x000161a1,
+0x0001bbaa,0x4601b510,0xf8d0b128,0x22cc30c8,0xf7e56c98,0xbd10fd0d,
+0x2100b570,0x20cc4605,0xfb2af7e5,0xb1404604,0x22cc2100,0xf9b0f7e3,
+0x731ef44f,0x50c8f8c4,0x46206223,0x46c0bd70,0x0360bc01,0x034e1000,
+0xf002debf,0xa803580a,0x00f0025e,0x5ea6030a,0x0a00f002,0x535e8202,
+0x020a0000,0x00af5e85,0x88020a00,0x0000b3de,0x8084020a,0x0a0000c3,
+0xff63bc01,0x0040f01f,0xf002de00,0x01000000,0x00f0025e,0x60800100,
+0x6c900d02,0x025e5903,0x030d00f0,0xf0025ed8,0xd8030e00,0x00f002de,
+0x0004020f,0x120000bf,0x23450102,0x01120000,0x000360bc,0x01021511,
+0x00002345,0x42000215,0x1900001f,0x025e0200,0x02d30bf0,0x00b3de01,
+0x6b001900,0x20d36444,0xc585021a,0x19000023,0x025e0200,0x019b0bf0,
+0xf502e089,0x0102ac97,0x000023c5,0xe088011c,0xac97f502,0x8361bc01,
+0x00291100,0x007b00b0,0xbc012b11,0x11000363,0x5e120323,0x1c09f002,
+0x025e9703,0x028509f0,0x00b38101,0x85022f00,0x000023c5,0x8187022f,
+0x280000b3,0x02dea303,0x032f00f0,0xf002dea0,0x02002f00,0x09f0025e,
+0xe0870175,0x6c800d04,0x6444e000,0x00bdb70d,0xf766446b,0xbc0129a0,
+0x97010360,0x60bc0180,0x81370003,0x6b60bc01,0x018a5000,0x060360bc,
+0xbf039237,0x01f002de,0x5ed003ee,0x3302f002,0x02ded003,0x03fb03f0,
+0xf002ded5,0x9103df08,0x04f0025e,0xde96036c,0xda08f002,0x025e0200,
+0x02c10bf0,0x0073c188,0xc4035400,0x05f0025e,0x5ec703bf,0xd905f002,
+0x02dedc03,0x03670df0,0xf0025eaa,0x83032006,0x07f0025e,0xde910328,
+0xe104f002,0x02dec203,0x014e09f0,0x020360bc,0x02003e00,0x0ef0025e,
+0xde0603a5,0x4100f002,0x025e2303,0x021509f0,0x0037c087,0xd4031509,
+0x05f002de,0xde230352,0x4600f002,0x025edb03,0x034500f0,0xf002debf,
+0x02000200,0x0cf0025e,0x5e02008c,0xa00cf002,0x025ea203,0x035100f0,
+0xf0025e56,0x86014f00,0x10090660,0x5e1f0348,0x4f00f002,0x235e6a00,
+0x004e0000,0x002700b0,0xe8008817,0x3700235e,0x5ea60388,0xa400f002,
+0x0e602800,0x03c5e008,0xf002dec4,0x2000ab09,0x200003c2,0xdebf03d5,
+0x1801f002,0x025e8103,0x035600f0,0xf002de00,0x88013600,0x900b02e0,
+0xdebf035c,0x2102f002,0x63408702,0x01580000,0xf4066086,0x86021830,
+0x00006340,0x5eb0005a,0xa1170087,0x02de0200,0x020000f0,0x00634087,
+0xb0005d00,0x10008b5e,0xe0860119,0x1830f406,0xafde8102,0x02620000,
+0x0063c086,0xb0006100,0x1700875e,0xde0200a1,0x0000f002,0x0360bc01,
+0x02068002,0x0007de80,0xda016e00,0x17f00260,0x5e080280,0x7e000007,
+0x0360bc01,0x00a1171e,0xf4025ee0,0xbc016530,0x171c0360,0x5ee000a1,
+0x6430f402,0x0360bc01,0x038d2600,0xf002debf,0x10018400,0x1700035e,
+0x5e8800a1,0xa2370087,0x865ee000,0x00a157f4,0xf45a01e0,0x86026330,
+0x0000c300,0x56b00077,0x6210000b,0x0354b000,0x01621000,0x000360bc,
+0xbf038d26,0x00f002de,0x41b00086,0x6210008f,0x03de0901,0x00a11700,
+0x00875e88,0xe000a157,0x37d4845e,0x5ee000a1,0x06c00387,0x0360bc01,
+0x038d4600,0xf002debf,0xbc018600,0x17020760,0x5ee000a1,0x6530f402,
+0x0760bc01,0x00a11700,0xf4025ee0,0xbc016430,0x00180360,0x60bc0106,
+0x8d060003,0x035ab000,0x00621000,0x000358b0,0x05016310,0x17004301,
+0x008800a1,0x0620f41a,0x02de0200,0x000000f0,0x003340e8,0xb000a197,
+0x17000b40,0x5e6d00a3,0x8e60f486,0x8f5e9000,0x03a33700,0xf002debf,
+0x90008f00,0x3700875e,0x5ee000a3,0xa337008e,0x9741f001,0x00a11700,
+0xf486de6d,0x8702a260,0x000097c1,0x5a380196,0xa1170003,0x035a3c01,
+0x03a21700,0xf002debf,0x3c019800,0x1700035a,0x5a3801a1,0xa2170007,
+0x865e6800,0x009d80f4,0x008b5ed8,0xe100a237,0x50f49641,0xc1e10065,
+0x65300097,0x02debf03,0x009000f0,0x008b5ed8,0xe100a237,0x57f49641,
+0xdee100a1,0xa1370087,0x875ef001,0x00a11700,0xf486de6e,0xbc01a360,
+0xf71fff63,0xde0200a4,0x0000f002,0x8ee32000,0x02020009,0x00b35e81,
+0xa8030200,0x00f002de,0xde1e030a,0xab00f002,0x025e9f03,0x00ab00f0,
+0xf0025e02,0xbf03cc00,0x00f002de,0x41080202,0xa900001f,0x025e0200,
+0x007509f0,0x00ab00b0,0xb0008610,0x10006301,0x5e02008a,0x500bf002,
+0x0360bc01,0x00921704,0x003b00b0,0x90011d11,0x10090660,0xdea10348,
+0xc000f002,0x06e08101,0x01481009,0x000360bc,0xbc014290,0x11000360,
+0xde9e032d,0xc300f002,0x02608401,0x009497f2,0x001745b0,0xb0008f17,
+0x1700175e,0x44000290,0xbe00001f,0x02608501,0x01481009,0x00076081,
+0xf0014710,0x37000fde,0x44a000a1,0x4531f4b6,0x02de9e03,0x01c300f0,
+0x123761bc,0xbf0380b0,0x00f002de,0x61bc0102,0x80701027,0x02debf03,
+0x000200f0,0x0982e020,0x0c010200,0x170053de,0x5e8801a1,0x47100087,
+0x0360bc01,0x01425000,0x001f4108,0x8c01a117,0x97f286de,0xdebf0394,
+0x0200f002,0x0360bc01,0x00429000,0x00235ee8,0x69008837,0x000023de,
+0x00e800d0,0x88370027,0x02608601,0x00481009,0x009b0088,0x90002671,
+0xb1019b00,0x63bc0128,0x24110003,0x02de0200,0x030000f0,0xf0025edb,
+0x2000d500,0x00097ee0,0xc5310102,0xa117001b,0x875e6d00,0x020a8000,
+0x001fc283,0x04020200,0x0000bf00,0x5e9403e0,0x0200f002,0x8f42a000,
+0x0080f701,0x2d005e68,0x020002c0,0x09f0025e,0xdebf0375,0x0a00f002,
+0x8fc20102,0x01020000,0x00630014,0x6800a117,0x6000875e,0x5e020002,
+0x7509f002,0x0f609401,0x00180000,0xf0025e02,0xbf03e700,0x00f002de,
+0x0014010a,0xa1170063,0x875eb000,0x01a51000,0x191360bc,0x68006010,
+0x0000875e,0x41e000ee,0x60500683,0x875ee800,0x03a13700,0xf002debf,
+0x8002ea00,0x0000b350,0x608701f8,0xa0100304,0x6300b000,0x00b41000,
+0x00d342b0,0x88000018,0x30008341,0x60bc01b6,0xb5100a03,0x6300b000,
+0x03b4b000,0xf002de17,0x9703f500,0x00f002de,0x608001f6,0x2c948506,
+0x02de0200,0x000000f0,0x8012e020,0x87011741,0x10030460,0x000302a0,
+0xff0000c7,0x975eb000,0x00b51000,0x086300b0,0x8302b470,0x0000d342,
+0x00b000fe,0xb4100063,0x0360bc01,0x00b5100d,0x006300b0,0xbc01b4f0,
+0x10114760,0x00b000b6,0xb4100063,0x0360bc01,0x02b5d002,0x000b5007,
+0xbc011301,0xd0030360,0x608e01b5,0x9497f202,0x0b500402,0x020c0100,
+0x000bd004,0x86010c01,0x97f20660,0x42e00094,0xb5d000d7,0x0b50a000,
+0x00a11711,0x1187de68,0x86011201,0x97f206e0,0x42e00094,0xb55000d7,
+0x0bd00702,0x00120100,0x00d742e0,0xb000b590,0x1100d742,0x00b000e1,
+0xb4b00063,0x025ea903,0x031701f0,0xf002de17,0x97031501,0x01f002de,
+0xde020016,0x0000f002,0xab1a6800,0x001b0100,0xd564c46c,0xbc010a40,
+0x06000360,0x1a6800aa,0x1e0100a7,0x64c46c00,0x010a20d5,0x000360bc,
+0xa803a906,0x00f002de,0x5edb030a,0x2001f002,0xbee02000,0x03020009,
+0xf0025e90,0x00020a00,0x01001f42,0x6083012c,0x6c900d02,0xbf000402,
+0x03280100,0xf0025e14,0x6e002801,0x61805644,0x60bc0129,0x15110003,
+0x025e2203,0x012e01f0,0x00630014,0x8800a117,0x37f40660,0xc22000a1,
+0x6021f48e,0x02608201,0x03481009,0xf002debf,0xb0000200,0x17007f01,
+0xde9e03a6,0x3401f002,0x02de3803,0x003501f0,0x048f4220,0x94010200,
+0x00001760,0xdebf0318,0x6001f002,0x025e1f03,0x024101f0,0x00c30003,
+0x20003701,0x01028fc2,0x5e25033b,0x4101f002,0x8fc22000,0x003b0102,
+0xff538168,0xbf030ae0,0x01f002de,0x6094013d,0x18000013,0x02debf03,
+0x036001f0,0xf002de9e,0x68004001,0xc10b98de,0x41010240,0xaf0a001f,
+0x02608501,0x00481009,0x0b985e68,0x690045c1,0x61009f5e,0x42980265,
+0x4501008f,0x02debf03,0x026501f0,0x001f4101,0x0402af0a,0x0100bf00,
+0x5e020050,0xe00cf002,0x025e0200,0x00020df0,0x00bb8568,0x84014c01,
+0x77f50660,0xdebf03ab,0xaf0af002,0x87059401,0x02180000,0x00af5e87,
+0x84016001,0x77f50260,0xdebf03ab,0x6001f002,0x9b140002,0x02590100,
+0x002b1600,0xb0005c01,0x17003714,0xde6800a1,0x5921ae84,0x3b14b000,
+0x00a11700,0xae84de68,0xb0005941,0x17003f14,0xde6800a1,0x5961ae84,
+0x87149e02,0x025c0100,0x008fc201,0x94015e01,0x00000f60,0xdebf0318,
+0x6001f002,0x8fc20102,0x015e0100,0x0d066080,0x00026c90,0x0a008fc2,
+0x609401af,0x18000007,0x025e0200,0x02e700f0,0x00bf0004,0x85029401,
+0x01006300,0x60830194,0x6c900d06,0x02debf03,0x019401f0,0x180360bc,
+0xb0006010,0x10007b01,0x00680065,0x6d0100eb,0x135a8800,0x00a11701,
+0xf46644e8,0x6e00a137,0x410784de,0x02e0006d,0xa620009b,0x02debf03,
+0x014b05f0,0x09126090,0x94014810,0x00001f60,0x5a080118,0x8117000f,
+0x065e8801,0x010a5481,0x000f5a34,0x02008017,0x00f0025e,0x01b00064,
+0x6510007b,0x2356b000,0x00a11700,0xa0865ee0,0xe800a197,0xf400845e,
+0x5ee80003,0x16f40084,0x035ab000,0x00131400,0x00075ab0,0xb0001414,
+0x14000b5a,0xde680015,0x85410007,0x9700e800,0x01a15700,0xf0865ebc,
+0x7c011b14,0xf400875e,0x1ab0001c,0x81170037,0x025e0200,0x00780bf0,
+0x007b01b0,0x08016510,0x17000f5a,0x5eb00081,0x1e140087,0x02debf03,
+0x008801f0,0x001756b0,0xb0001b14,0x14001b56,0x54b0001c,0x1e140013,
+0x1350b000,0x00861000,0x00a7006d,0x90018e81,0x10006301,0x41b0008a,
+0x6210008f,0x025e0200,0x004e0df0,0x002b42b0,0xbc010614,0x17180360,
+0xc16d00a1,0x9101208c,0x0360bc01,0x00a19702,0x03845ee0,0xe000a177,
+0x11b0865e,0xdebf031d,0xe701f002,0xc7000302,0x02a40100,0x0003d00c,
+0x1401a401,0x17006300,0x008502a1,0xa4010063,0x87de8000,0x01a2d701,
+0x1e1760bc,0xe000a297,0xb00d8a5e,0xde800065,0xa2b70087,0x0f60bc01,
+0x00a2971c,0x0d8a5ee0,0xb00064b0,0x14009741,0x41b0002e,0x2f140093,
+0x13d86800,0x02b40100,0x00135a00,0x8001a601,0xf4840660,0xdebf0327,
+0x7c04f002,0x03d00102,0x00a60100,0x009b50b0,0x81022b14,0x0200b7d0,
+0xd0060208,0xad010003,0x8650e900,0x00a13723,0x238ad0e8,0x6900a257,
+0x01008bde,0x609101ad,0x27f48416,0x02debf03,0x010b02f0,0x0003d00b,
+0x3c01a117,0x17002b50,0x5e8c01a2,0xa157f486,0x43014801,0x00a21700,
+0xf4865e68,0x9101b441,0xf4841260,0xdebf0327,0x0b02f002,0x0360bc01,
+0x00a51700,0xf0025e02,0xb000f900,0x10001350,0x50b00086,0x8a100017,
+0x03d00c02,0x02c10100,0x00c70003,0xb000be01,0x14009b50,0x5e02002b,
+0xfa0df002,0x46426d00,0x030a80c0,0xf002debf,0x6d00bf01,0x80844a42,
+0x5006010a,0xa1170007,0x86de8201,0x032db485,0xf0025ea2,0x2000d201,
+0x010403d0,0x50b000c7,0xf211004f,0x5350b000,0x00f31100,0x005750b0,
+0xbc01f411,0x91000360,0x010102f0,0xc90100b3,0x06e08701,0x02ab77f5,
+0x00035006,0x0702ce01,0x0100afde,0xde0002ce,0xd20100b3,0x331ae800,
+0x03425100,0xf002debf,0x8102d201,0x03000350,0xd00202e5,0xd10100b7,
+0x2b500802,0x02d20100,0x0003d085,0x9001f703,0xb4851260,0x5ea2032d,
+0xdf01f002,0x0f50b000,0x02161100,0x00b7d002,0xb000d701,0x11005b50,
+0xd0820216,0xdf010003,0xc3478102,0x02d80100,0x004f5080,0x2000dd01,
+0x813fc747,0xc72000df,0x0ac200db,0x02debf03,0x03df01f0,0xf0025ea5,
+0x8002df01,0x0200dfc7,0x5088020a,0xee0100b7,0xb7d08202,0x01e70100,
+0x00275038,0x08018017,0x17001350,0x50020181,0xa1170013,0x865e8201,
+0x008137f0,0x007f50b0,0xbf038910,0x01f002de,0x503801ed,0x8017006f,
+0x2b500801,0x01811700,0x0007d006,0x8201a117,0x37f0865e,0x50b00081,
+0x8a10001b,0x8350b000,0x01891000,0x000b5029,0x02009217,0x00f0025e,
+0x5e020064,0x4b0bf002,0x1b420201,0x01811700,0xd1045e82,0x020081b7,
+0x0bf0025e,0x5ee00078,0xa1170184,0x87ded901,0x02831000,0x00b30100,
+0xe001f701,0x1000b701,0x00040283,0xfa0100bf,0x03508702,0x03fa0100,
+0xf0025e94,0x2203fb01,0x01f0025e,0x61bc01fd,0x80300003,0x02debf03,
+0x010200f0,0x033361bc,0x2b0391b7,0x02f0025e,0x00900003,0xa1970063,
+0x8264e000,0x006530f4,0x00135a6e,0x88010322,0x37f206e0,0xde680091,
+0x0582024b,0x3761bc01,0x0091b703,0x044bde68,0xbc010782,0xb703bb61,
+0xdebf0391,0x0e02f002,0x0e609101,0x0327f484,0xf002debf,0x91010b02,
+0xf4840660,0x60bc0127,0xb4100003,0x06e08101,0x032db485,0xf002debf,
+0x68007c04,0x82044b5e,0xdec40329,0xab09f002,0x03500602,0x02190200,
+0x00afde07,0xbc011902,0x37000361,0x50070291,0x15020003,0x0362bc01,
+0x0291f700,0x00b3de00,0xbc011702,0x77000361,0x01e00091,0x4220000b,
+0x02debf03,0x011a02f0,0x000360bc,0xb0004220,0x1000475e,0x01000280,
+0x200200b3,0x06608201,0x02813010,0x00b38101,0xbc012002,0xb7050360,
+0xdebf0393,0x7a05f002,0x17c56800,0x03020000,0xf002de80,0x81032602,
+0x02f0025e,0xe0880125,0x5c900b0e,0x02debf03,0x030200f0,0xf0025ed0,
+0xbc013302,0x11000360,0x5e02002d,0x830bf002,0x02debf03,0x000200f0,
+0x0017c568,0x1e013102,0x17009f50,0x5e8800a1,0xa237f40e,0x06608800,
+0x00a137f4,0x00875ee8,0xb000a137,0x57f4865e,0x5ea000a1,0xa197f086,
+0xb644a000,0x004531f4,0x00475eb0,0xbf038010,0x00f002de,0x80070202,
+0x360200bf,0x331ab000,0x03421100,0xf0025ec4,0xbc013602,0x90000360,
+0x41a80004,0x48103023,0x0f62bc01,0x01e01100,0xf5026081,0x8701aed7,
+0x77f502e0,0x816800ab,0x3d22000b,0x6744b000,0x01430000,0x0906e082,
+0x81014810,0x900d0260,0x6082016c,0x44912806,0x02e08801,0x015c900b,
+0x000360bc,0xbc018510,0x10000360,0x5e2903b8,0x4602f002,0x02e0d201,
+0x03849010,0xf002debf,0xbc01e802,0x10000360,0x01e00084,0x702000c3,
+0xb3818102,0x035d0200,0xf002de20,0x81017202,0xb7f50660,0xde6800ad,
+0x5da2044b,0xbbde0302,0x004f0200,0x000b26e0,0xbf036510,0x02f002de,
+0x60bc0150,0x6590101b,0x7f5ea000,0x00ec10fe,0x00035ab0,0xb000ed10,
+0x1000075a,0x5ab000ee,0xef10000b,0x0f5ab000,0x01f01000,0x1ee363bc,
+0xbc0184f0,0x30000360,0x60bc0185,0xb4100003,0x0360bc01,0x01a6d001,
+0x040360bc,0xbc01b550,0xd0042360,0x02e000b4,0xab2000af,0x02debf03,
+0x01b602f0,0x1f0360bc,0x030184f0,0x170053de,0x5e8601a2,0xe3701c8a,
+0x93c36a00,0x00690200,0x009043e8,0x0202e4d0,0x02001b42,0x00900067,
+0xa137001b,0x1b422000,0x00664200,0x00871ab0,0xe000a117,0x30f49243,
+0xc36900e4,0x69020093,0x0360bc01,0x01e41000,0x000360bc,0xbc01b410,
+0x10000360,0x60bc01a6,0xb5100203,0x2360bc01,0x00b4d004,0x064b5e68,
+0xe00070a2,0x2000cb01,0xdebf0372,0xb602f002,0xcf01e000,0x03732000,
+0xf002debf,0x2003b602,0x02f0025e,0xe08101bd,0x48100902,0xd701e000,
+0x03752000,0xf002de1e,0xbc019e02,0x17000360,0x5e6a00a2,0x7a020023,
+0x8f420201,0x01a21700,0x098a5e85,0x80014810,0x301006e0,0xde840281,
+0x7e020053,0x1360bc01,0x03a1570d,0xf002debf,0xbc017f02,0x570d0360,
+0x006800a1,0x9e020027,0x845ee000,0x01a1f701,0x101b60bc,0x88006510,
+0x30009741,0x60bc01b6,0xb4100003,0x875e9000,0x01a65000,0x010360bc,
+0xbc01b510,0xb0002360,0xde1703b4,0x8702f002,0x02de9703,0x008802f0,
+0x0087de20,0x20009142,0x220087de,0x5eb8018e,0x8016d022,0x8a5e8001,
+0x038136d0,0xf002debf,0xbc019702,0x16d0225e,0x5e840180,0x8136d08a,
+0x02debf03,0x009702f0,0x0087de20,0xb8019522,0x36d0225e,0x5e800181,
+0x8256d08a,0x02debf03,0x019702f0,0xd0225ebc,0x84018136,0x56d08a5e,
+0x60880182,0xa830f402,0x035ab000,0x00b01000,0x00075ab0,0x8002b110,
+0x0200a342,0x42e0009a,0xa89000a3,0x0b5ab000,0x00b01000,0x000f5ab0,
+0x8701b110,0x90100660,0x5ee00084,0x89370027,0x275eda01,0x01ee1000,
+0x000360bc,0xbc01b410,0x50030360,0x00b000a6,0xb5100033,0x53de8402,
+0x01a70200,0x030760bc,0xb000a650,0x10003700,0x60bc01b5,0xb4d00423,
+0x06608401,0x019497f2,0x09026086,0x9e034810,0x02f002de,0x448002b1,
+0xb402001f,0x3f5eb000,0x01451100,0x000360bc,0xb0008f17,0x1700435e,
+0x5eb00085,0x9017000f,0x02debf03,0x00b402f0,0x000f5eb0,0x80028517,
+0x02001f44,0x44a000b4,0x45b1f0b6,0x0360bc01,0x01421001,0xf2066083,
+0x84019497,0x11000760,0x5ea003e0,0xb203f002,0xaf5e0602,0x01b40300,
+0xf506e086,0xbc01ab77,0x10000360,0x5e020080,0x7b09f002,0x02debf03,
+0x03e104f0,0xf0025ea1,0x81011303,0xd7f50660,0x602000ae,0xd6a2850e,
+0x04608701,0x00a01003,0x006300b0,0xbc01b410,0x100a0360,0x00b000b5,
+0xb4f00063,0xb7d00202,0x00ca0200,0x005f50b0,0xb000e010,0x10006350,
+0x50b000e1,0xe2100067,0x6b50b000,0x00e41000,0x021342b0,0x000284f0,
+0x0200b750,0x00b000d1,0xb4100063,0x0360bc01,0x00b51002,0x046300b0,
+0x8401b4d0,0x11000760,0x60bc01e0,0x8e170003,0x02debf03,0x00b803f0,
+0x00c701e0,0xb0007120,0x10006300,0x60bc01b4,0xb5d00203,0x6300b000,
+0x03b4d004,0xf002debf,0x03014303,0x17000350,0x5eb800a1,0xa1370087,
+0x865e8701,0x02801010,0x0003d00c,0x03021203,0x0200c700,0x60bc01dd,
+0xb2170003,0x27503801,0x02a31700,0x00b7d002,0xb000e802,0x17001323,
+0x50b801a1,0xe030f46e,0x7350b000,0x01a11700,0xf41623b8,0x8501e130,
+0x301c06e0,0x42b000e1,0x84700013,0x6f503801,0x02a31700,0x00134282,
+0xb000e802,0x10007b50,0x42b000e4,0x84100213,0x04608701,0x01a01003,
+0x00735038,0x7c01a117,0x37f46e50,0x5e8800a1,0xb9900087,0xc7000302,
+0x00fb0200,0x00cbde68,0xb000f702,0x1000bb50,0x5abc0165,0xe070f406,
+0x075a3c01,0x01a21700,0xf43e60bc,0xb000e150,0x70001342,0x5ab00084,
+0x8309000b,0x2360bc01,0x00b85001,0x000f2668,0xbf030323,0x03f002de,
+0x60bc0107,0xb8700103,0x0f266800,0x01032300,0x010360bc,0xbf03b870,
+0x03f002de,0xd00c0107,0xa1170003,0x025ea903,0x010003f0,0x012360bc,
+0x6800b850,0x6300875e,0xdebf0303,0x0703f002,0x0360bc01,0x00b87001,
+0x00875e68,0xbc010743,0x70010360,0x000302b8,0x050300c7,0x6750bc02,
+0x01060300,0x1702e081,0xbc01b810,0xf0000360,0x000302a5,0x0b0300c7,
+0xcb5eb000,0x00b51000,0x086300b0,0x8302b470,0x0300d342,0x60bc010a,
+0xb5100d03,0x6300b000,0x00b41000,0x006300b0,0xb000b4f0,0x1800d342,
+0x60880100,0xb4100308,0x06608101,0x036c900d,0xf002debf,0x02024303,
+0x0300b7d0,0x50b00019,0xe010006f,0x7350b000,0x00e11000,0x007750b0,
+0x8202e210,0x03001342,0x50b00018,0xe410007b,0x1342b000,0x0084f002,
+0x009f5ee0,0xa103a737,0x03f0025e,0x60bc0122,0xa7170003,0x04608701,
+0x00a01003,0x006300b0,0xbc01b410,0x100d0360,0x00b000b5,0xb4f00063,
+0x08608801,0x03b41003,0xf002debf,0xb0003803,0x10007b01,0x5ab00065,
+0xe5100003,0xff63bc01,0x00c5f01f,0x00075ab0,0xbc01e610,0xf01fff63,
+0x5ab000c6,0xe710000b,0xff63bc01,0x00c7f01f,0x003b9a68,0xe0002b03,
+0x3700275e,0x1a680089,0x2f03003b,0x07e08501,0x01e31000,0x0007e085,
+0xb000c310,0x10011342,0x5eda0184,0xee100027,0x06608701,0x00849010,
+0x1c1342b0,0xbc018410,0x10000360,0x60bc01b4,0xa6501303,0x9700b000,
+0x01b51000,0x042360bc,0x8401b4d0,0x11000760,0xdebf03e0,0xa303f002,
+0x4b5e0801,0x00a11700,0x00875e68,0x02024323,0x03000350,0x509e0242,
+0x3f03009f,0x03d00102,0x003f0300,0x00275ee0,0x58018937,0x1400275e,
+0x50da0129,0xee1000a7,0x06608701,0x03849010,0xf002debf,0xbc014303,
+0x14000360,0xc1040129,0xa1170007,0x025e2203,0x014603f0,0x0053de03,
+0xb000a117,0x1700875e,0x5e8802a2,0x4a03004b,0x4b5e6800,0x014a8306,
+0x000360bc,0x8301a217,0x97f286de,0xde830194,0x27f48486,0x13c28102,
+0x01510300,0x008b5e86,0x8601e310,0x10000760,0xe08101c3,0x84901006,
+0x02debf03,0x015303f0,0x1c8a5e86,0x8601e370,0x70180660,0x47b802c3,
+0x8c0300a7,0xb3de0002,0x01570300,0x1c06e087,0x8701e370,0x701806e0,
+0x5e0801c3,0xa117004b,0x875e6800,0x029a2300,0x009f501e,0x85015c03,
+0x701c06e0,0xe08501e3,0xc3701806,0x63001401,0x00a11700,0x0087de68,
+0xb0006583,0x17005301,0xde6800a2,0x61e3ff8b,0x47426800,0x00622300,
+0x848ade68,0x850165c3,0x10090260,0xe0860148,0xe3701c02,0x06e08601,
+0x01c37018,0x00075010,0x6800a617,0x03009b5e,0x60bc019a,0xe4110003,
+0x07503a01,0x00801700,0x00035e88,0xe0008077,0x10f0ae00,0xde680064,
+0x7643009b,0x03d00702,0x01700300,0x182360bc,0xe000a2f7,0x370b005e,
+0x5e0200a3,0x050cf002,0x1b60bc01,0x0081d715,0x018341e0,0xe0006370,
+0xb0008f41,0x5e020065,0xda0bf002,0x1b60bc01,0x01649015,0x004760bc,
+0x0200a217,0x0cf0025e,0x5e68002d,0xa143009b,0x4660a401,0x00e071f4,
+0x009b5e68,0x68007e63,0xa3009b5e,0x50b0007e,0xe211002f,0x3350b000,
+0x03e21100,0xf002debf,0x0201a103,0x1700c780,0xde8701a1,0xe8113d86,
+0x02608701,0x00e8113d,0x009bde68,0x870183a3,0x113d0660,0x422000e8,
+0x8a43001b,0x0360bc01,0x02ea1100,0x002b5088,0xb0008803,0x11007750,
+0xdebf03eb,0x8a03f002,0x6f503c01,0x01a21700,0xf47250bc,0x9201eb51,
+0xb7001bc2,0x5eb801a2,0xe8113d8a,0xc7800202,0x01a10300,0x090360bc,
+0xb000ea11,0x11002f50,0x50b000eb,0xeb110033,0x3750b000,0x00eb1100,
+0x003b50b0,0xb000eb11,0x11003f50,0x50b000eb,0xeb110043,0x4750b000,
+0x00eb1100,0x004b50b0,0x8601eb11,0x113d0660,0x60bc01e8,0x65901823,
+0x025e0200,0x03470ef0,0xf002debf,0x8401a103,0x11000760,0xde9e03e0,
+0xa103f002,0x02de3803,0x00a103f0,0x044bde68,0x8401a183,0x97f20660,
+0x50000294,0xa103004f,0x06608501,0x01481009,0x000360bc,0xb0002d11,
+0x14008344,0x60bc0128,0x8e170003,0x4b5e6800,0x02a6a305,0x00035000,
+0x8301af03,0x100906e0,0x41b00048,0x00180023,0x0360bc01,0x038eb704,
+0xf0025ea9,0x6800b403,0x23044b5e,0x60bc01b4,0x8e370603,0x4b5e6800,
+0x01b4a305,0x060360bc,0xbf038eb7,0x03f002de,0x608101b4,0xab77f506,
+0x0f5eb000,0x00851700,0xf0025e02,0xbc01830b,0x17000360,0x60bc018c,
+0x8d170003,0x02de2303,0x01b803f0,0x1006e087,0x00028370,0x0300b3de,
+0x62bc01b8,0x83300003,0xa7006d00,0x03ca8300,0xf0025e29,0x0302e203,
+0x0300c700,0xd08202c6,0xbe0300b7,0xb318e000,0x032c2600,0xf002debf,
+0xe000bf03,0x2600b718,0x2668002d,0xc623000f,0xcb5ee000,0x01b23700,
+0x00cb5e0a,0xe000a117,0x30f4ba50,0x60d00065,0xa257f606,0x125a2000,
+0x03c643f4,0xf002debf,0xd503c003,0x08f002de,0xded603df,0xf408f002,
+0x02de5003,0x03c603f0,0xf002debf,0x6800fb03,0x0300a700,0x428802ce,
+0xce03001b,0x6744e000,0x03a11705,0xf002debf,0xe000cf03,0x17026744,
+0x5e9103a1,0x0200f002,0x66c46800,0x00cf23f4,0x00a70068,0x8002d803,
+0x03001b42,0x60bc01d6,0xa1370503,0x0360bc01,0x03659005,0xf002debf,
+0xbc01dc03,0x770f1360,0xdebf03a1,0xdb03f002,0x0360bc01,0x01a1770f,
+0x060360bc,0xbf036590,0x03f002de,0x60bc01dc,0x65100703,0x025e0200,
+0x005800f0,0x01075ad8,0x3c018116,0x1700035a,0x5eb801a1,0x8136d086,
+0x035ad800,0x01801601,0xd06640b8,0x05028016,0x0300af5e,0xe08701e4,
+0x33712606,0x02debf03,0x010200f0,0x850a6090,0x82022db4,0x0300b7d0,
+0x503c01ee,0x80170027,0x2b500901,0x01811700,0x00075007,0x8201a117,
+0x37f0865e,0x50b00081,0x8a10001f,0x0f50b000,0x03161100,0xf002debf,
+0x3801f403,0x17005f50,0x500a0180,0x8117002b,0x07d00701,0x01a11700,
+0xf0865e82,0xb0008137,0x10002350,0x50b0008a,0x1611005b,0xb7508002,
+0x01f90300,0x050360bc,0xbf0392b7,0x01f002de,0x609001d7,0x2db48506,
+0x02debf03,0x01e603f0,0x060360bc,0xbf039237,0x01f002de,0x608e01d7,
+0xe8113d02,0x025e2b03,0x020904f0,0x00f30000,0xe8000004,0x51002300,
+0x60bc0142,0x4251280a,0x025e9403,0x000504f0,0x008b05b0,0x68006410,
+0x04000358,0x44b00005,0x12110067,0x0358b000,0x00151100,0x001f4568,
+0xa2030904,0x04f0025e,0xe0850109,0xab77f506,0x025e0200,0x02b30cf0,
+0x00e3c201,0x03023604,0x0400c700,0x2668000e,0x1724000f,0x46426e00,
+0x031744f6,0xf002debf,0x6e001004,0x24004742,0x00030217,0x140400c7,
+0x02de1503,0x011004f0,0x85026080,0xbc012c94,0x17000360,0xded503a3,
+0xdf08f002,0x06e08101,0x012db485,0x840e6091,0xbf0327f4,0x04f002de,
+0x503c0136,0xa1170067,0x865ebc01,0x01ba5017,0x010360bc,0x0302b890,
+0x0400c700,0xa6680027,0x2124000f,0x02e08101,0x03b81017,0xf002ded5,
+0xd603df08,0x08f002de,0xde5003f4,0x1d04f002,0x02debf03,0x003604f0,
+0x000f26e8,0xb0008329,0x1000cb5e,0x00b000b5,0xb4700863,0xd3428302,
+0x00240400,0x00cb5eb0,0xbf03a517,0x04f002de,0xe0860128,0xa0100304,
+0x025e0200,0x00f000f0,0xf0025e02,0xd503f900,0x08f002de,0xded603df,
+0xf408f002,0x02de5003,0x022a04f0,0x00a34700,0xbc014102,0x11000360,
+0x508802ea,0x3204002b,0x7750b000,0x03eb1100,0xf002debf,0x3c013404,
+0x17006f50,0x50bc01a2,0xeb51f472,0xa347b000,0x03e8d100,0xf002debf,
+0xbc014102,0xf0000360,0xe08201a5,0x48100902,0x1f62bc01,0x01e01100,
+0x000f60bc,0x8502e811,0x04000b50,0x6082013c,0x48100902,0xb3818102,
+0x03430400,0xf002dea0,0xd5034104,0x08f002de,0xded603df,0xf408f002,
+0x025e2003,0x014304f0,0x09026088,0xbf034810,0x00f002de,0x60bc010a,
+0xa1370003,0xb3010002,0x02510400,0x00b30104,0xe9005004,0x2000bb01,
+0x81e8006e,0x6f0000bf,0xbb816800,0x00500400,0x00bf8168,0x81025004,
+0x0400b381,0x60bc014d,0x6c000003,0x02debf03,0x017c04f0,0x000360bc,
+0x02006c00,0x09f0025e,0xdebf033b,0x0a00f002,0x0360bc01,0x00a11700,
+0xf0025e02,0x0102900a,0x0400b301,0xdebf0354,0x0a00f002,0x1360bc01,
+0x00a17715,0xf0025e02,0x34015800,0x17006740,0x016d00a1,0x5924f49a,
+0x875eb000,0x00660000,0xf49e016e,0xb0005b24,0x0000875e,0xdea30367,
+0x0a00f002,0xb7500002,0x01640400,0x000360bc,0x82018010,0x10090660,
+0x60800148,0x2db48502,0x07c10401,0x01a11700,0xf286de83,0xe0009497,
+0x2000cb01,0xdebf0372,0x1801f002,0xb3010102,0x01660400,0xf506e087,
+0xb000ab77,0x17000b01,0xde6d00a1,0x7c040884,0x6444e800,0x00a17708,
+0x08845e6e,0x87017c24,0x77f506e0,0xdebf03ab,0x7c04f002,0xaf5e8202,
+0x01780400,0xf5066082,0xb000ab77,0x06006744,0x01b00098,0xa217006b,
+0x1b428002,0x00720400,0x004b01b0,0x6800a217,0x04008b5e,0x45900077,
+0xa197002b,0x86de8000,0x00a157f4,0x00b741b0,0xe000a117,0x2623865e,
+0x61bc01a9,0x33110003,0x6444e800,0x00a517d3,0x01975e6d,0x82013300,
+0x77f50260,0x5ed103ab,0x0200f002,0xb3500002,0x03d80400,0xf002de25,
+0x83018004,0xf4840660,0xdebf0327,0xb504f002,0x03d00c02,0x02b30400,
+0x00c70003,0x1401a204,0x17006300,0xde6d00a1,0xb3840087,0xbb50b000,
+0x00651000,0x00bf50b0,0x91026410,0x04009f50,0xd081028a,0x8a0400b7,
+0x025e2903,0x038b04f0,0xf002debf,0xbc019004,0x16000360,0x60bc0104,
+0x80370003,0x025e0200,0x03310ef0,0xf0025e29,0xb000b304,0x1400af50,
+0xdebf0326,0xb304f002,0x06608201,0x002db485,0x00135ab0,0xb0008d14,
+0x1400175a,0x18b0008e,0xa11700b3,0x0360bc01,0x012c0600,0xf4ba18bc,
+0xbc01a137,0x06000360,0x5eb0002e,0x8f140087,0xb718b000,0x01a11700,
+0x000360bc,0xbc012d06,0x37f4be18,0x60bc01a1,0x2f060003,0x875eb000,
+0x00901400,0x00f701b0,0xbc019014,0x00000360,0x5e02007d,0x310ef002,
+0x0f58b000,0x038c1400,0xf002debf,0x6800ae04,0x040047c2,0xe08101a7,
+0x2db48506,0x0e609101,0x0127f484,0x000360bc,0xbf032c14,0x00f002de,
+0x50b00002,0xa117009f,0x025e0200,0x00ef00f0,0x00875eb0,0x86012714,
+0x100304e0,0x42b000a0,0x00180083,0x03d00c01,0x00a11700,0x0087de68,
+0x0201a264,0x1700b750,0x5e8001a1,0x27f48486,0x0ee08a01,0x0027f484,
+0x00af50b0,0xbf032614,0x04f002de,0xe08601b5,0xa0100304,0x9f500002,
+0x01b50400,0x100360bc,0x86024210,0x040007c1,0x5e2903d5,0xbb04f002,
+0x3352b000,0x00291400,0x003752b0,0x9e01a117,0xf484865e,0x50b00027,
+0xa117009f,0x86de8001,0x00a137f4,0xf0025e02,0x0702d30b,0x0400bf80,
+0x608001c8,0x8f26f402,0x9b50b000,0x00900600,0x00a750b0,0xb0009106,
+0x0600ab50,0x50b00092,0x9306009b,0x6300b000,0x00950600,0x008341b0,
+0x80019406,0x97f50660,0xdebf03ac,0xd504f002,0xab50b000,0x008f1000,
+0x00a750b0,0xb0008e10,0x10009b50,0x6080018d,0x8c30f406,0xb7500202,
+0x00d40400,0x004352b0,0xb0008f10,0x10003f52,0x52b0008e,0x8d10003b,
+0x37521a01,0x01a11700,0x0487de98,0xb801a137,0xb091865e,0x6082018c,
+0x2db48502,0x02608101,0x036c900d,0xf002de25,0x9c01d804,0xf4840260,
+0xdebf0327,0xdc04f002,0x0360bc01,0x012c1400,0xf5026081,0x8502aed7,
+0x04000b50,0x50a800dc,0x2d1405b7,0x02608301,0x0127f484,0x0902e085,
+0xbc014810,0x14000360,0x5ea2032a,0x1801f002,0x02debf03,0x030a00f0,
+0xf002de23,0xa3032f05,0x05f0025e,0xdea2032f,0x2f05f002,0x06608101,
+0x03ab77f5,0xf0025eaa,0x83012f05,0x100902e0,0xde510348,0xec04f002,
+0xb3de8002,0x00320500,0x006b02e0,0x80019a20,0x77f506e0,0xdebf03ab,
+0xf104f002,0x02de0103,0x00ef04f0,0x064f5e68,0xbc01ef24,0x17000360,
+0x5ea403a8,0xf104f002,0x02dec103,0x013205f0,0x09026084,0x04024810,
+0x0400bf00,0x60bc01f6,0x15110003,0x63001401,0x00a11700,0xf40266e0,
+0x02006530,0x0bf0025e,0x6082018b,0x48100902,0x025ea903,0x001105f0,
+0x043b5e68,0xf00101a5,0x370017de,0x5ea00085,0x8597f016,0x3b5e6800,
+0x02012506,0x00035001,0x87020005,0x0500bf80,0xe0850100,0x48100906,
+0x03d08002,0x00110500,0x001b5eb0,0xb000a317,0x17008b00,0x000402a4,
+0x070500bf,0x97416e00,0x01076530,0x00035a18,0x1a01a317,0x1700035a,
+0xc16800a4,0x0a051883,0x9302e000,0x03a42000,0xf002debf,0x6d000c05,
+0x85f42e5e,0xe082010c,0x2db48506,0x335ee000,0x008c3700,0xf432de68,
+0xb0000f65,0x17000f5e,0xde6d0085,0x1d65f42e,0x02debf03,0x002a05f0,
+0x001f5eb0,0xb000a317,0x17008f00,0x000402a4,0x170500bf,0x97416e00,
+0x01176530,0x00035a1c,0x1e01a317,0x1700035a,0x5e6d00a4,0x1985f42e,
+0x06e08201,0x002db485,0x00375ee0,0x68008d37,0x65f436de,0x5eb0001c,
+0x8517000f,0x2e5e6d00,0x012a65f4,0x0902e085,0xd1034810,0x05f002de,
+0x5e68001f,0x2485044b,0x025e0200,0x00830bf0,0x18834168,0x81014b05,
+0xb48506e0,0xdebf032d,0x7c04f002,0x4f50b000,0x00f21100,0x005350b0,
+0xb000f311,0x11005750,0x60bc01f4,0xf5110103,0x0360bc01,0x03f05100,
+0xf002debf,0x02007c04,0x0bf0025e,0x60810183,0x48100902,0x025e2903,
+0x022f05f0,0x00c70083,0xbf03ad0d,0x04f002de,0xded1037c,0x3005f002,
+0x02dea503,0x037c04f0,0xf002debf,0x80020a00,0x0000b301,0x5006020a,
+0x39050003,0x0b01b000,0x00a11700,0x0884de6d,0xe8003905,0x77086444,
+0x5e6e00a1,0x39250884,0x06e08701,0x01ab77f5,0x004b5e08,0x6800a117,
+0x2500875e,0x5eb0003c,0x8517000f,0x025e0200,0x00830bf0,0x063b5e68,
+0xbc014225,0x17000360,0xd000028c,0x44050003,0x0360bc01,0x038d1700,
+0xf002debf,0xbc014405,0x17000360,0xdebf038c,0x1801f002,0x83416800,
+0x014a0518,0x84066080,0x290327f4,0x04f0025e,0x6082017c,0x2db48506,
+0xc7008302,0x03ad0d00,0xf002debf,0xe0007c04,0x20009702,0x608101a5,
+0x48100902,0x0360bc01,0x008e0600,0x007b01e0,0xbc015ea0,0x17191360,
+0x016d00a1,0x0a20f47a,0x1360bc01,0x035e8011,0xf002debf,0x02000a00,
+0x09f0025e,0xde380375,0x0a00f002,0x02de9e03,0x000a00f0,0x004c44e8,
+0xe800a1f7,0x1701845e,0xde6a00a1,0x5b050184,0x845ee800,0x01871101,
+0x000360bc,0xa5018811,0x113022e0,0x60bc0180,0x13110003,0x0360bc01,
+0x00141100,0x006744b0,0xb000a117,0x17006b44,0x5eb000a2,0x04110087,
+0x8b5eb000,0x03051100,0xf002deb8,0xbf035d05,0x00f002de,0x5e87020a,
+0x8f070053,0x0360bc01,0x0192b704,0x040360bc,0xbc01a117,0xf01fff63,
+0x63bc01cb,0xccf01fff,0xff63bc01,0x01cdf01f,0x1fff63bc,0xbc01cef0,
+0xf01fff63,0x63bc01cf,0xd0f01fff,0x0360bc01,0x02e41000,0x00c30086,
+0xb0007d05,0x17000f54,0xde6900a2,0x7185908a,0x1252e800,0x00e450f4,
+0x00379a68,0xbc017d05,0x10000360,0x54b000e4,0xe0100027,0x2b54b000,
+0x03e11000,0xf002debf,0xa4038605,0x07f002de,0xdea90328,0x2807f002,
+0xbf800702,0x027a0500,0x000fd287,0xbc01bc05,0xd7010360,0x26e000a1,
+0x8c290033,0x05e08101,0x02936932,0x00c30006,0x80027f05,0x05005fde,
+0x54b00084,0xe0100007,0x371a6800,0x01820500,0xa086ded2,0xb000e030,
+0x10000b54,0xdebf03e1,0x8605f002,0x865ebc01,0x01e01090,0x001f60bc,
+0xbc01e110,0x10000360,0x52b000e2,0xe5100023,0xff63bc01,0x00c5f01f,
+0x002752b0,0xbc01e610,0xf01fff63,0x52b000c6,0xe710002b,0xff63bc01,
+0x00c7f01f,0x004700b0,0x08018610,0x1700371a,0x52380181,0x80170003,
+0x27c00201,0x00a61700,0xf0025e02,0xb000420d,0x17000754,0x81810280,
+0x950500b3,0x025e0200,0x004b0bf0,0x00371a68,0x68009e25,0x0500379a,
+0x541a0298,0x9e050007,0xa7006800,0x009c8500,0x00a70068,0x03019cc5,
+0x170027c0,0xdebf03a1,0x9d05f002,0x3bc00601,0x01a11700,0x10865e82,
+0xa90386d0,0x07f002de,0x5e680076,0xb725044f,0xff63bc01,0x00c3f01f,
+0x054f5e68,0xbc01a6a5,0x901a0360,0x60bc01e3,0x92b70603,0x4f5e6800,
+0x03b72505,0xf002debf,0xbc01b105,0x37060360,0x44980292,0x7c080007,
+0x07468002,0x017c0800,0x180360bc,0x0702e390,0x0500bf80,0xd20702b1,
+0xb105000f,0x06608101,0x01ac97f5,0x1c06e087,0xb000e370,0x10008f41,
+0x5e9f0362,0xb105f002,0x0360bc01,0x00453100,0x00371ab0,0x02008117,
+0x0bf0025e,0x5ee80078,0xa1d70084,0x865e6a00,0x00b78590,0xf41252e8,
+0xbf03e430,0x05f002de,0x60bc01ba,0xe4100003,0x02de3803,0x01ba05f0,
+0x1c06e087,0x9001e490,0x10090a60,0x61bc0148,0x91370403,0x4f5e6800,
+0x037ca805,0xf0025e83,0xbf032807,0x00f002de,0x41040202,0xc8050063,
+0x02e08901,0x01ac97f5,0x0b026084,0x05025810,0x0500af5e,0xe08701c4,
+0x33712606,0xbf000402,0x01c70500,0xf502e085,0x0200ab77,0x0cf0025e,
+0xdebf03b3,0x0200f002,0x23c58502,0x01ca0500,0x0b066084,0xbc015810,
+0x11000361,0x80050233,0xd10500bf,0x1360bc01,0x00a15711,0xf0025e02,
+0x96015800,0x30030e60,0x40b00019,0xa2170067,0x025e0200,0x005d00f0,
+0x006744e0,0x02029946,0x0500b35e,0xe08901d4,0xac97f506,0x37c08302,
+0x000a0000,0x001f02e0,0x02008720,0x0bf0025e,0xe08901af,0xac97f506,
+0x02debf03,0x010a00f0,0x3201e081,0x83019369,0x693201e0,0x5e020093,
+0xaf0bf002,0x13408102,0x01020000,0x000360bc,0xa3038010,0x05f002de,
+0x609001e0,0x48100902,0x6744b000,0x009e1700,0x006b44b0,0xb0009d17,
+0x17006f44,0x44b0009c,0x9b170073,0x7ade6800,0x00e02523,0x002302e0,
+0x15018820,0x17003b40,0x00680097,0xec8500a7,0xa7006800,0x00ecc500,
+0x005f5ea0,0x68009737,0x0500a780,0x60bc01ec,0x97370003,0x4301b000,
+0x01a11700,0x0584dec9,0x81017926,0x900d02e0,0x4086026c,0xf2050037,
+0xbb02e000,0x03ae2000,0xf002debf,0xbc011709,0x14000360,0x60bc0180,
+0x81140003,0x0a60b801,0x01249004,0x040360bc,0xbc01a006,0x46000360,
+0x60bc019f,0x2ad00003,0x0760b301,0x01041000,0x000360bc,0xbc018406,
+0x06000360,0x60bc0185,0x86060003,0x0360bc01,0x01870600,0xf502e083,
+0x8702aed7,0x090037c0,0x60bc0114,0x3e200003,0x025e0200,0x00a50ef0,
+0x005fde68,0x3c010546,0x17000352,0x52bc01a1,0xa137f406,0x845e6e00,
+0x035ba90b,0xf0025e43,0x6800fe05,0x46005f5e,0x5e680017,0x1426005f,
+0xa7806800,0x000aa600,0x906644e0,0xbc01aa26,0x1700c362,0x528002a1,
+0x0d060003,0x03529601,0x00a11700,0x9086de80,0x03029a37,0x06000352,
+0x5ee00012,0x9a37906a,0x03d20702,0x00120600,0x006b5ee8,0x9e029a37,
+0x09006b5e,0xdebf035b,0x1a06f002,0x03d25201,0x01a11700,0xf406d285,
+0xbf039a37,0x06f002de,0x523c011a,0xa1170003,0x0652bc01,0x009a37f4,
+0x0b685e6e,0x04025ba9,0x06003bc0,0x40870220,0x3b070037,0x0360bc01,
+0x003e4000,0xf0025e02,0x8702a50e,0x0600afc0,0x4058011b,0x9a1700af,
+0x025e2a03,0x022206f0,0x00afc087,0xb0001409,0x10282341,0x60800148,
+0x9497f202,0x02e08401,0x01481009,0x00af4058,0x01012a10,0x1700b3c1,
+0x5e8301a1,0xa1771087,0x865ebb01,0x00049000,0x001340b0,0x68000018,
+0x2900ab40,0xde290314,0x3206f002,0xab405801,0x029a1700,0x00a34700,
+0xbc013206,0x113c1e62,0x60bc01e0,0xea110003,0x6b5eb000,0x01eb1100,
+0x3d1e6098,0x8303e811,0x06f0025e,0x60bc0136,0x3e600003,0x025e0200,
+0x00a50ef0,0x0433406d,0xbc0132c6,0x06000360,0xe0880176,0x7706000f,
+0x33406d00,0x01230702,0x000f5229,0x09019317,0x17000f52,0x609601aa,
+0x9497f202,0x8741e000,0x0165f001,0x000f60bc,0x2800a117,0x669086de,
+0x60860142,0x9497f206,0x9741e000,0x00657000,0x00831ae0,0x0601a0c6,
+0x1700535e,0x5ea000a2,0xa177044f,0x87de6800,0x01504604,0xf206e086,
+0xb8009497,0x37008b5e,0x5ab000a2,0xa0170003,0x03da0a02,0x014a0600,
+0xf2066087,0x84029497,0x06003bc0,0xda030250,0x50060003,0x025eb003,
+0x024e06f0,0x00074104,0x80015006,0xe6ce0460,0x5e060177,0xa2170053,
+0x8ade8201,0x03049000,0xf002dea9,0xb0035b06,0x06f0025e,0xd2870257,
+0x57060013,0x1352b000,0x01861100,0x300ae0a5,0xbf038011,0x06f002de,
+0x52080257,0x5b06000f,0x1302e000,0x01842000,0xf2066080,0xbf039497,
+0x07f002de,0x52070224,0xc106000f,0xa3478002,0x00be0600,0x00831ae0,
+0xe800a086,0x86007f1a,0x60bc019f,0xe4110003,0xff63bc01,0x01a5f71f,
+0x030360bc,0x0602e1d1,0x0600535e,0x60bc0164,0xe1910403,0x53de0602,
+0x00680600,0x008747e0,0x0702e151,0x06000fd2,0x47e00068,0xe1910087,
+0x33406d00,0x0023c702,0x054f5e68,0x68006b86,0x4600abde,0x5eb003c1,
+0x6e06f002,0x17520002,0x03c10600,0xf002de9e,0x02007506,0x0af0025e,
+0xc00002a9,0x72060077,0x77402901,0x00a51700,0x00975ee0,0x6800a597,
+0xe6ff97de,0x52800275,0xc1060017,0xbf000702,0x01c10600,0x061b60bc,
+0x9000a217,0x30008747,0x41e00065,0x6550f496,0x8747e000,0x03960601,
+0xf0025e83,0xbc017d06,0x80000360,0x5e02003e,0xa50ef002,0x30406d00,
+0x0079c6d2,0xd230406d,0x680023c7,0xe6ff97de,0x5a0f0180,0xa5170007,
+0x0b60bc01,0x00a1571d,0xf4965ee0,0x2a016430,0x17000358,0xde9e0399,
+0x9006f002,0x02e08201,0x029937f3,0x00175200,0x16019006,0x170003d8,
+0x5a0f01a6,0xa4170007,0x03d80c01,0x00a11700,0xf492de68,0xe0008c26,
+0x1702675e,0xdebf0399,0x9106f002,0x03d80d01,0x00a11700,0xf492de68,
+0xe000c126,0x1704675e,0xdebf0399,0x9106f002,0x03581001,0x00a61700,
+0x00675e88,0xe000a277,0x50f4ae00,0xdeaa0164,0x76c6ce64,0x9bde6800,
+0x02ac4600,0x00878107,0x6d009f06,0x060c8bde,0x5285029f,0x9f06000f,
+0x3b521801,0x00a11700,0x0087de68,0x81019f06,0xe6ce04e0,0x5ee00077,
+0xa3370b88,0x8f5ee000,0x00a39700,0x008741e0,0x0200a277,0x0cf0025e,
+0x1ae80005,0x9f06017f,0x1b60bc01,0x0081d715,0x00975e88,0xe800a177,
+0xb0f4865e,0x60bc0163,0xa1170e07,0x8e41e000,0x006330f4,0x001756b0,
+0xb000a117,0x17001b56,0xde6800a2,0xc146d086,0x8ade6800,0x00c166d0,
+0xf0025e02,0xbc01da0b,0x90151b60,0x62bc0164,0xa217004f,0x025e0200,
+0x002d0cf0,0x009b5e68,0xbc01be46,0x71f41e62,0x5e6800e0,0xb166009b,
+0x9bde6800,0x01bea600,0x00c78002,0x8701a117,0x113d86de,0x609801e8,
+0xe8113d06,0x831ae000,0x00a08600,0x007f1ae8,0xbc019f86,0x11000360,
+0xde6800ea,0xb946005f,0x6b5eb000,0x01eb1100,0x3d5ede92,0x8701e811,
+0x113d0260,0xde6800e8,0xbda6009b,0x06608701,0x01e8113d,0x3d166098,
+0x8101e811,0xc6ce04e0,0xdeaa0176,0x76c6ce64,0x02debf03,0x01c506f0,
+0x000f62bc,0xbc01e011,0x11000360,0xe08101e4,0x77e6ce00,0x0f60bc01,
+0x02e81100,0x00df1900,0xe000cc06,0x46f37e1a,0x1ab0009f,0x25100083,
+0x7e1ae800,0x009fa604,0x017f9a6a,0xb801ccc6,0x90040660,0xe0820124,
+0x9497f206,0xa3c70702,0x01e60600,0x090360bc,0xe000ea11,0x17018747,
+0x5e8303a1,0xd106f002,0x32406d00,0x00cf26f4,0xf432406d,0xbc01e626,
+0x370b0360,0xde0602a1,0xd5060053,0x825e9c01,0x00a137f4,0x00875eb0,
+0xb000eb11,0x11002352,0x52b000eb,0xeb110027,0x2b52b000,0x00eb1100,
+0x00874790,0xbc016530,0x17061b60,0x41e000a1,0x6530f496,0x0f5ad800,
+0x00eb1101,0x010b5ad8,0xd800eb11,0x1101035a,0x5ee800eb,0xa1373c6a,
+0x875ee800,0x00a1d701,0x01875ed8,0x8601eb11,0x113d0660,0x60bc01e8,
+0x6510061b,0x025e0200,0x01470ef0,0x3d06e086,0x8801e811,0x90000a60,
+0xc0040104,0xa117003b,0x86de8101,0x036c900d,0xf002dea0,0x6800ee06,
+0xa6064f5e,0x523801f3,0x80170003,0x5f5eb000,0x00811700,0xf0025e02,
+0x68006400,0x4600abde,0x5ea000f3,0xa177044f,0x875e6800,0x00c94800,
+0x04875e68,0xbf03c948,0x0af002de,0xde86033d,0x1509f002,0x37c08702,
+0x00140900,0xf0025e02,0xbc01c10b,0xa0000360,0x5e02003e,0xa50ef002,
+0x025e0303,0x03f306f0,0xf002dea9,0xbc01fe06,0xc0000360,0x5e02003e,
+0xa50ef002,0x37400702,0x00fa0600,0xf0025e02,0x6e009d0a,0x07023040,
+0xde010328,0x2807f002,0xabde6800,0x03100700,0xf0025e30,0xe0000407,
+0x20002b02,0xdebf038a,0x0807f002,0x17528002,0x00070700,0x004302e0,
+0xbf039020,0x07f002de,0x02e00008,0x95200057,0x4f5e6800,0x00b60904,
+0x024f5e68,0x6800b689,0x08024f5e,0x5e680083,0xc288044f,0x4f5e6800,
+0x002f0a05,0x064f5e68,0x68002f0a,0x8a064f5e,0xdebf0338,0x3d0af002,
+0xabde6800,0x03212700,0xf0025e30,0xe0001407,0x20002f02,0xdebf038b,
+0x1807f002,0x17528002,0x00170700,0x004702e0,0xbf039120,0x07f002de,
+0x02e00018,0x9620005b,0x4f5e6800,0x0061a806,0x044f5e68,0x68004f2a,
+0xaa044f5e,0x5e68004f,0xcea8054f,0x4f5e6800,0x00612806,0x054f5e68,
+0xa0002d2a,0x77ff4f5e,0x5e6800a1,0x452a0787,0x02debf03,0x007c08f0,
+0x001302e0,0xbf038420,0x08f002de,0x02e00080,0x8320000f,0x0f60bc01,
+0x02e81100,0x003bc084,0x8401c106,0x100906e0,0xdebf0348,0xc106f002,
+0x93c00002,0x03020000,0xf0025ea3,0xc3032c07,0x07f0025e,0xdebf032b,
+0x5709f002,0x0360bc01,0x003e0001,0xf0025e02,0x0702a50e,0x0700afc0,
+0x40070230,0x2c070037,0xafc00701,0x00a11700,0x00875eb8,0x8201a137,
+0x900d865e,0x44b0006c,0x7806007f,0x02608301,0x00481009,0xf0025e02,
+0x8702c10b,0x090037c0,0xde860314,0x1509f002,0x0360bc01,0x003e2001,
+0xf0025e02,0x4303a50e,0x07f0025e,0xc0870235,0x14090037,0xb3810002,
+0x01600700,0xf2066080,0x01039497,0x07f002de,0x5eb00360,0x4207f002,
+0x0702e000,0x03812000,0xf002debf,0xe0004307,0x20000302,0x60bc0180,
+0x65b01227,0x9541e000,0x01659032,0x006b402d,0x8800a217,0x37018b5e,
+0x403801a2,0x8016002b,0x27408802,0x014a0700,0xd0066084,0xb0008016,
+0x56f4025a,0x60bc0180,0xa1d70d1b,0x025e0200,0x005800f0,0x006740b0,
+0xbc018116,0xf70d1b60,0x5e0200a1,0x5800f002,0x6740b000,0x00821600,
+0x005326e0,0x69009469,0x87015326,0x60bc0154,0x94090003,0xb3818402,
+0x01590700,0x0d04e084,0xbc016c80,0x00000360,0x60bc016e,0x6f000003,
+0x02debf03,0x005e07f0,0xf73a52e8,0xe800a1b7,0x1702875e,0x5e9000a1,
+0xa1970087,0xba01e100,0x006e20f4,0x00bf81e0,0xb0006f00,0x17003b52,
+0x010502bd,0x5b0900b3,0xdf198002,0x00620700,0x0230406e,0x81035d08,
+0x07f002de,0x02e0006c,0x85200017,0x02dea903,0x016707f0,0x0906e084,
+0x80014810,0x100902e0,0x5e020048,0x9b0bf002,0x02de8603,0x011509f0,
+0xce046080,0x800176c6,0x97f20660,0xdebf0394,0xe107f002,0x02de8603,
+0x031509f0,0xf0025e30,0xa9038f07,0x07f002de,0xde680074,0x8f4700ab,
+0x3b52b000,0x009f1700,0x003b52b0,0xbc01be17,0x26000360,0xdebf0384,
+0x8f07f002,0x02dea003,0x037e07f0,0xf002debf,0x90016305,0x10090a60,
+0x52b00048,0x9f17003b,0x3b52b000,0x01be1700,0x00835e9e,0x0601ebb0,
+0x17000f52,0x5eb800a1,0xa1370087,0x86de8201,0x01ab77f5,0x000361bc,
+0xe8008030,0xf7f33a52,0xd26b00a2,0x81e7f33a,0x7e5ee800,0x00a2d791,
+0x008b5e90,0xbc01a197,0x90101b60,0x526b0064,0x8ce7f33a,0x875e1801,
+0x01a21700,0x00875e0a,0x8800a317,0x57f40660,0x41e000a2,0x6470f492,
+0x0258b000,0x000056f4,0x91fade6b,0xb0008fc7,0x17003b52,0xdebf03be,
+0x8f07f002,0x025e0200,0x00820df0,0x00131ab0,0xb0008426,0x17003b52,
+0xde20039f,0x9c07f002,0x535e0702,0x01930700,0x0902e080,0xbf034810,
+0x07f002de,0xde68009c,0x9907005f,0x07541a02,0x01970700,0x0027c003,
+0x8201a117,0xd010865e,0xc0020186,0xa1170027,0x2a42e000,0x018a30f4,
+0xce04e080,0xa90376c6,0x07f002de,0x5eb0009c,0x80100047,0x4f5e0801,
+0x00a11700,0x00875e68,0xb003b927,0x07f0025e,0x520002bd,0xac070017,
+0xabde6800,0x00a24700,0x005302e0,0x86029420,0x0700535e,0x528402e1,
+0x5b09000f,0x0fd28402,0x03a70700,0xf0025eb3,0xbf03aa07,0x07f002de,
+0x5e3103b2,0xb207f002,0x4f5e6800,0x01aa0704,0xf2066084,0x68009497,
+0x07024f5e,0xdebf03e1,0xd107f002,0x02de1e03,0x03af07f0,0xf0025e31,
+0x8401af07,0x97f20260,0xde680094,0xb44700ab,0x3f02e000,0x038f2000,
+0xf002debf,0x6800b707,0x4700ab5e,0x528002b7,0xe107002f,0x07410202,
+0x00b70700,0x044f5e68,0x6800e107,0x87024f5e,0x410402e1,0x5b090007,
+0x02debf03,0x03e107f0,0xf0025e30,0x6800e107,0xa7054f5e,0x5e6800d1,
+0xd127054f,0x02debf03,0x02e107f0,0x00535e06,0xe000c007,0x20006302,
+0xdebf0398,0xe107f002,0x02de2303,0x01c807f0,0x000b5029,0x6800a317,
+0x27058fde,0xe08701c8,0x83701002,0x02608401,0x00481009,0x00875eb0,
+0x6e00a117,0x270003e0,0xded103c7,0xc807f002,0xabde6800,0x00ce4700,
+0x002702e0,0x07028920,0x0700bf80,0xd20701ce,0xa117000f,0x865e8101,
+0x01ac97f5,0x000360bc,0x6800a817,0x07004f5e,0x5e6800e1,0xe107014f,
+0x4f5e6800,0x02e18705,0x00c74780,0x29035b08,0x07f002de,0xde0201d7,
+0xa11700af,0x0f520601,0x00a21700,0xf4865e38,0x8201e147,0x77f58ade,
+0x52b000ab,0xf2110023,0x2752b000,0x00f31100,0x002b52b0,0x0601f411,
+0x17000f52,0x5ee000a1,0xf5310087,0x5b00b000,0x00f01100,0x00c347b0,
+0x34010018,0x1700c7c7,0xde6e00a1,0xe1a70284,0x0360bc01,0x02421008,
+0x0007c183,0x8002e307,0x0900535e,0x40b0005b,0xa1170033,0xdf990801,
+0x00a21700,0x008b5e68,0xe800eb67,0x17d43040,0x198102a1,0xeb0700df,
+0x831ab000,0x02a11700,0x00df9980,0xb000eb07,0x1700635e,0x5e6e00a1,
+0x5d080284,0x875eb000,0x01700600,0xce006081,0x020276c6,0x070013c0,
+0x5ee000f1,0x70460384,0x04608101,0x0276c6ce,0x00df1901,0x03010908,
+0x1700535e,0xde8701a1,0x76c6ce84,0x02de8603,0x011509f0,0x010360bc,
+0x02003e40,0x0ef0025e,0x5e8503a5,0xf407f002,0x02608e01,0x01e8113d,
+0x0083c707,0x8201a117,0xc6ce845e,0x99010276,0xfe0700df,0x97c70301,
+0x01a11700,0xce845e82,0x070277e6,0x0a00afc0,0x60bc0182,0xe811000f,
+0x04608401,0x0077e6ce,0x002740b0,0xb0007206,0x06002b40,0x40b00073,
+0x7406006b,0x6f40b000,0x01750600,0xce046084,0x020077e6,0x0af0025e,
+0x63bc019d,0xa8d71fff,0x025e0200,0x008b0bf0,0xf0025e02,0xa801820a,
+0x90000a60,0x19010204,0x6d0d00df,0x23016800,0x03590800,0xf002de20,
+0x06025908,0x080053de,0x5e680059,0x1228044f,0x4f5ea000,0x00a17704,
+0x0487de68,0xbc015948,0x10100360,0x52b00073,0x74100023,0x2752b000,
+0x00741000,0x002b52b0,0x1e017410,0x1000835e,0x60bc0174,0x71101203,
+0x0360bc01,0x0172f017,0x083360ac,0xb0007030,0x1800c341,0x41800200,
+0x1b0800c3,0xc3c18702,0x01590800,0xf506e083,0x8301aed7,0x700e0660,
+0x41280173,0xa11700cf,0x87de8000,0x01a1b700,0x062760bc,0xe0008249,
+0xa90d0a26,0x5e680082,0x4a28044f,0x0b26b000,0x00651000,0x00fb5e90,
+0xe800be97,0x97d0fa5e,0xde8502a1,0x49080087,0x7f5e9000,0x009f9700,
+0x07875ee8,0x0502a1f7,0x080087de,0x5ee80031,0xa197d07e,0x87de0502,
+0x00380800,0xf40260e8,0xbc01a137,0x90101b60,0x5e020064,0x970df002,
+0x02debf03,0x004008f0,0x07fb5ee8,0x9e0184f6,0x96d00260,0x609e0184,
+0xa137f402,0x875e6e00,0x003be807,0x009741e0,0x02006410,0x0df0025e,
+0x5ee80097,0xa197d07e,0x1b60bc01,0x00649010,0xf0025e02,0xbf03820d,
+0x08f002de,0x1ab00040,0x80160013,0x171ab000,0x00811600,0x001b1ab0,
+0xb0008216,0x16001f1a,0xdebf0383,0x4808f002,0x035ab000,0x00a11700,
+0xd0845eb0,0xb0008096,0x1700075a,0x5eb000a1,0x81b6d084,0x0b5ab000,
+0x00a11700,0xd0845eb0,0xb00082d6,0x17000f5a,0x5eb000a1,0x83f6d084,
+0x135a8800,0x039f9700,0xf002debf,0xb0005908,0x10000b26,0x5e900065,
+0xa297007f,0x8a5ee800,0x02a197d0,0x0087de85,0xb0005808,0x16008b5e,
+0x60e80084,0xa237f4fe,0x8bde8502,0x00540800,0x009741e0,0x02006410,
+0x0df0025e,0xdebf0397,0x5808f002,0x0360bc01,0x01801600,0x000360bc,
+0xbc018116,0x16000360,0x60bc0182,0x83160003,0x135ab000,0x009f1700,
+0x001340a8,0xbf030450,0x04f002de,0x02e000e1,0xa1200087,0x02debf03,
+0x005e08f0,0x000b02e0,0x84018220,0x10090660,0xe0840148,0x48100906,
+0x02debf03,0x035b09f0,0xf0025e30,0x68007408,0xa8064fde,0x02e00065,
+0x8e20003b,0x02debf03,0x006608f0,0x003702e0,0x23038d20,0x08f002de,
+0xde68007c,0x7cc8f14e,0x02e08701,0x01837010,0x09026084,0xb0004810,
+0x1700875e,0xe06e00a1,0x6c280003,0x02ded103,0x006d08f0,0x064f5e68,
+0x05026f28,0x08000b50,0x6082017c,0x48100906,0xbf800702,0x02730800,
+0x000fd207,0x80017308,0x97f506e0,0xdebf03ac,0x7c08f002,0xc3008702,
+0x00790800,0x064fde68,0x680079a8,0x080013d2,0x60bc0179,0x83110003,
+0x0360bc01,0x00821100,0x064fde68,0xe0007c28,0x20004f02,0xdebf0393,
+0x7c08f002,0x025eb003,0x027e08f0,0x00074104,0x83028108,0x07000741,
+0xdebf0328,0x8108f002,0x07418402,0x01280700,0xf2066080,0xbf039497,
+0x07f002de,0x5e9f0328,0x8608f002,0x02de9e03,0x023d0af0,0x00535e03,
+0x04023d0a,0x08004381,0x0100018a,0xa1170063,0x27c00201,0x00a21700,
+0xf486de38,0xb0038048,0x08f0025e,0x5200028c,0x80080017,0x2f528002,
+0x038e0800,0xf0025e33,0x3c023d0a,0x08003f52,0x523c019f,0xa117003f,
+0x84de6800,0x01be8804,0x160360bc,0xbc016410,0x10081b60,0x5e680065,
+0x9b280087,0x035ab000,0x00a21700,0xc08ade68,0xe000be08,0x30009741,
+0x41e00065,0x64300093,0x875ee800,0x00a15700,0x00875e6a,0x68009428,
+0x0800875e,0x5a3801a0,0xa1170003,0x03583801,0x00a21700,0xf486de68,
+0xbf03be48,0x08f002de,0xc18502a0,0x3d0a0007,0x1b60bc01,0x0165f007,
+0x050360bc,0x0200a4b7,0x00f0025e,0x00800289,0xbe0800c3,0x1360bc01,
+0x00a61719,0x007f01e0,0x6d00a5b7,0xc8f4965e,0x60bc01a8,0xa5971113,
+0x945e6800,0x00c0c80b,0x007b01b0,0xb0006510,0x17002752,0x52b000a2,
+0xa317002b,0x94416800,0x00b3e80b,0xd08ede68,0x6800af48,0x28d08a5e,
+0x41e000be,0x65b00097,0x96416d00,0x01acc8f4,0x111360bc,0xbf036590,
+0x08f002de,0x02e000ac,0xa220008b,0x7f01b000,0x00651000,0x002352b0,
+0xb0008016,0x16002752,0x52b00081,0x8216002b,0x0252bc01,0x01a1f7f2,
+0xf4025ea9,0x90008336,0x16016744,0xde680084,0xbda80593,0x06608401,
+0x008496d0,0x00975eb0,0xb0035f00,0x05f0025e,0xdebf0376,0x2807f002,
+0x8f02e000,0x03a32000,0xf002debf,0x9e038008,0x0af002de,0x5eb0033d,
+0xc508f002,0x17520002,0x03800800,0xf0025e33,0x84013d0a,0x97f20660,
+0x5eb00394,0x7605f002,0x02debf03,0x032807f0,0xf0025e83,0x6d00cb08,
+0x88033340,0x406d00c9,0x80880333,0x025e3003,0x033e0af0,0xf002debf,
+0x30037605,0x08f0025e,0x02e000d1,0x8c200033,0x02debf03,0x007a05f0,
+0x004b02e0,0x03019220,0x170027c0,0x5e820181,0x81b7d104,0x025e0200,
+0x00780bf0,0x00230088,0xe000a237,0xf700885e,0x5ee000a2,0x8951f486,
+0x06e08601,0x03801130,0xf002debf,0xa2037c08,0x00f002de,0xdea30334,
+0xf408f002,0xff01e000,0x017f2000,0x000360bc,0xbf03a317,0x08f002de,
+0x608701f6,0xa0100304,0x0360bc01,0x00e45100,0x009347b0,0xbc010018,
+0x90020360,0x62bc0104,0xe011000f,0x0f60bc01,0x00e83101,0x00a347b0,
+0xbc010018,0x11000f60,0x608401e8,0x48100906,0x1e602000,0x00eb0809,
+0x00fb01e0,0xbf037e20,0x08f002de,0x60bc01fc,0xa1d70e03,0x63001401,
+0x00a21700,0xf4865ee0,0xe0006550,0x3600035a,0x00030280,0xf10800c7,
+0x025ea903,0x02f608f0,0x009f5091,0x9101f508,0xf4841a60,0xdebf0327,
+0xf508f002,0xff01e000,0x017f2000,0x000360bc,0x2303a337,0x08f002de,
+0xe08301fc,0x48100902,0x0360bc01,0x018e1700,0x1002e087,0x82018370,
+0x10090260,0x5e020048,0x830bf002,0x02ded003,0x03fd08f0,0xf0025ed0,
+0x8201fe08,0x100902e0,0xded50348,0x0009f002,0x0360bc01,0x01b41000,
+0x000360bc,0x6800a1f7,0x0900a700,0x42850104,0xa137f41a,0x025e0200,
+0x005800f0,0x006740b0,0xbc01a517,0xf71fff63,0x5e0200a2,0x5d00f002,
+0x07608800,0x00a45701,0xf4865eb8,0x0200a197,0x00f0025e,0x5e68005d,
+0x0200008f,0xb3016800,0x010f0900,0x000360bc,0xbf032605,0x09f002de,
+0xe0200012,0x1209091e,0x975eb000,0x032a1400,0xf002debf,0xa8000b02,
+0xf0002341,0xdebf0348,0x0200f002,0x02608301,0x00481009,0x0230406e,
+0xe0001709,0x20007702,0x5e02009d,0x420ef002,0x025ea303,0x032807f0,
+0xf002dec6,0x84011a09,0x100906e0,0xdebf0348,0x5b09f002,0x8ae32000,
+0x02210009,0x00234584,0x91032100,0x00f0025e,0xde960321,0x2100f002,
+0x025e9603,0x002100f0,0xf0025e02,0xbc017509,0x30000360,0xe0870142,
+0x23712402,0x0360bc01,0x03206000,0xf0025e12,0xbc012509,0x40000360,
+0x61bc0120,0x25110083,0x7b00b000,0x01271100,0x111360bc,0xbc015e80,
+0x80111360,0xe080015f,0xaed7f506,0x07c10701,0x01ab1700,0x000f60bc,
+0xbc01e811,0x11000f62,0x5e0200e0,0x3b09f002,0xcf61bc01,0x015c100c,
+0x000360bc,0xbc015d10,0xf001cf61,0x60bc015e,0x5ff0083b,0xc7000302,
+0x010a0000,0x000360bc,0xbc01e803,0x03000360,0x60bc01ed,0xf2030003,
+0x0360bc01,0x01f70300,0x000360bc,0xbf03a906,0x00f002de,0x60bc010a,
+0x48100003,0xb35ea800,0x01ac5703,0x1fff63bc,0xbc0154f0,0xf01fff63,
+0x63bc0155,0x56f01fbf,0xff63bc01,0x0057f01f,0xf0025e02,0x8701420e,
+0x712406e0,0x60bc0123,0x54100003,0x0360bc01,0x01551000,0x000360bc,
+0xbc015610,0x10000360,0x60bc0157,0x1720000f,0x07c10601,0x01a11700,
+0x02845e82,0x070117e0,0x17000741,0x5eb800a1,0xa1370087,0x87de8001,
+0x00160000,0xf002de02,0x85020000,0x000037c0,0x60bc0102,0x3e600103,
+0x025e0200,0x02a50ef0,0x00374086,0x02004e09,0x0bf0025e,0x608201af,
+0xac97f506,0x1b02e000,0x03862000,0xf002de86,0x87021509,0x090037c0,
+0x60580115,0x2a100003,0x0360bc01,0x00049000,0x001340b0,0xbf03a117,
+0x00f002de,0x60b8010a,0x2490040a,0x025eaa03,0x015e09f0,0x00036058,
+0xbc012a10,0x90020360,0x40b00004,0x00180013,0x0360bc01,0x00e45100,
+0x009347b0,0xbc010018,0x11000f62,0x608001e0,0x77e6ce00,0x025e8503,
+0x016409f0,0x000f62bc,0xbc01e011,0x31010f60,0x47b000e8,0x001800a3,
+0x0f60bc01,0x01e81100,0x010360bc,0xe800a157,0x3700875e,0xde6800a1,
+0x6a090087,0x0360bc01,0x00049002,0x001340b0,0x24030018,0x04f002de,
+0x608601e1,0xab77f506,0x025e0200,0x017509f0,0x10066080,0xb0008130,
+0x1700875e,0x608001a1,0x81301002,0x02debf03,0x01e104f0,0x000361bc,
+0xb0008010,0x18000342,0xe06e0000,0x78290003,0x025e5003,0x007b09f0,
+0xf0025e01,0xbf030000,0x02f002de,0x41a80033,0x48f00423,0x02608201,
+0x02481009,0x00afde06,0xd5038009,0x09f002de,0xde500380,0x7e09f002,
+0x0360bc01,0x02b41000,0x0083c784,0xbc018309,0x11000b60,0x608e01e0,
+0xab77f502,0x02de0200,0x030000f0,0xf002dea2,0xbc022100,0x09008742,
+0x60bc018c,0xa4370003,0x0360bc01,0x01a3f71f,0x00630014,0x8800a217,
+0x57f40660,0xdebf03a2,0x9109f002,0x07608800,0x01a41701,0x00ff63bc,
+0x1401a317,0x17006300,0x5ee000a2,0xa217018b,0x06608800,0x01a257f4,
+0x191360bc,0x20006510,0x89f486c2,0x41e00097,0x65500697,0x935e8800,
+0x00a43700,0xf4925e20,0xbf032160,0x09f002de,0xde680092,0x9b49f492,
+0x02dea003,0x009b09f0,0x1623c120,0x02009309,0x09f0025e,0xde6d0075,
+0xa8092093,0xb35a0002,0x02a70900,0x00b35a3c,0x8503a709,0x00f002de,
+0x5e850321,0x2100f002,0x02dea203,0x032100f0,0xf002dea3,0x97032100,
+0x00f002de,0x41b00021,0x60100097,0x06608800,0x01a497f4,0x840a6091,
+0xbf0327f4,0x02f002de,0x6080010b,0xac96d502,0x935eb000,0x01a11000,
+0x000360bc,0xbf034330,0x09f002de,0xc2830293,0x0200001f,0x875eb000,
+0x03a11700,0xf002ded0,0xbc01fb03,0x10040360,0xde9e0342,0x0a00f002,
+0x3f5eb000,0x01451100,0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,
+0x9017000f,0x025e0200,0x037509f0,0xf002debf,0x6d000a00,0x88053340,
+0x5eb30381,0xbb09f002,0x4f5e6800,0x00ed8902,0x006702e0,0xbf039920,
+0x09f002de,0x5e6800ed,0xec89024f,0x5f02e000,0x03972000,0xf0025e9f,
+0x9e032b0a,0x09f002de,0xde2103cd,0xcd09f002,0x6f02e000,0x009b2000,
+0xf0025e02,0x86017509,0x10090260,0x60800148,0x48100902,0x02e08101,
+0x01481009,0x020360bc,0x80024210,0x09001f44,0x5eb000cc,0x4511003f,
+0x0360bc01,0x008f1700,0x00435eb0,0xb0008517,0x17000f5e,0xdebf0390,
+0xcd09f002,0xb644a000,0x034571f0,0xf0025e9f,0x82022b0a,0x0900c300,
+0x00b000ec,0xa1170073,0x865ee000,0x00a117b0,0xf47a5ee1,0xe1009e37,
+0x170077de,0xdee1009d,0x9c170073,0x6fdee000,0x039b1700,0xf002de9e,
+0x6e00dd09,0x4a926e5e,0x5e6d002b,0xdd49926e,0x725e6e00,0x002b2a92,
+0x92725e6d,0x6e00dd29,0x0a92765e,0x5e6d002b,0xdd099276,0x7ade6d00,
+0x002bea91,0x006744b0,0xb000a806,0x06006b44,0x44b000a7,0xa606006f,
+0x7344b000,0x00a50600,0x23a29a68,0xe900dd29,0xd7f3a21a,0x9ae9009e,
+0x9db7f39e,0x9a9ae900,0x009c97f3,0xf3969ae8,0xe1009b77,0xf7917a5e,
+0x5eb000a1,0x19110087,0x76dee100,0x001a1192,0x9272dee1,0xe0001b31,
+0x51926ede,0xde68001c,0xe6292386,0x02de1e03,0x002b0af0,0x024f5e68,
+0xbc012b8a,0xb0081b60,0x60bc0165,0xa4970003,0x025e0200,0x008900f0,
+0x0093de68,0x85021b8a,0x0a00c300,0xc107021b,0xf7090097,0x0f5a3c01,
+0x01a21700,0xf4125abc,0xbf03a257,0x09f002de,0x5ab000f8,0xa217000f,
+0x0360bc01,0x03321100,0xf0025e33,0x8002fe09,0x0a001f44,0x5eb0001b,
+0x8611008b,0x0ee0a501,0x03801130,0xf002debf,0x9b021b0a,0x0a002f40,
+0x44000214,0x0e0a0007,0x07c40002,0x02080a00,0x00074481,0x82011b0a,
+0x900107e0,0x52b00010,0x1110002f,0x3352b000,0x00111000,0x003752b0,
+0xb0001110,0x11008b5e,0xdebf030f,0x1b0af002,0x07e08201,0x00103001,
+0x002f52b0,0xb0001110,0x10003352,0x52b00011,0x11100037,0x8b5eb000,
+0x030d1100,0xf002debf,0x82011b0a,0xd00007e0,0x52b00010,0x1110002f,
+0x3352b000,0x00111000,0x003752b0,0xb0001110,0x11008b5e,0xdebf030b,
+0x1b0af002,0x02de3303,0x00170af0,0x008b5eb0,0xbf030b11,0x0af002de,
+0x5e34031b,0x1a0af002,0x8b5eb000,0x030d1100,0xf002debf,0xb0001b0a,
+0x11008b5e,0xde1e030f,0x2b0af002,0x025e9f03,0x002b0af0,0x024f5e68,
+0x33032b8a,0x0af0025e,0x60bc012b,0x65b0081b,0x0360bc01,0x00a4b700,
+0xf0025e02,0x68008900,0xaa0093de,0xc107022b,0x270a0097,0x075a3c01,
+0x01881700,0x000b5a3c,0xbf03a117,0x0af002de,0x5a380129,0x88170007,
+0x0b5a3801,0x01a11700,0xf2865e84,0x87019497,0x912486de,0x5eb00324,
+0x7605f002,0x02debf03,0x032807f0,0xf0025e30,0xbf038008,0x05f002de,
+0x5eb00376,0x320af002,0x025e3303,0x038008f0,0xf002debf,0xb0003e0a,
+0x11002352,0x52b000f2,0xf3110027,0x2b52b000,0x01f41100,0x000360bc,
+0xb000f591,0x11005b00,0xdebf03f0,0x7605f002,0x3f523801,0x02a11700,
+0x00535e06,0x38013b0a,0x17004b52,0xde6800a1,0x3d8a0087,0x02debf03,
+0x032807f0,0xf0025eb0,0x00027605,0x0a00f300,0xde060243,0x430a0053,
+0x835e1801,0x00a11700,0x0087de68,0xbc0143aa,0x51020b60,0x52000242,
+0x80080017,0x02debf03,0x012807f0,0x000360bc,0xbc018311,0x11000360,
+0x40190182,0xa117002f,0x875e6800,0x017c0800,0x2086de99,0x31030011,
+0x08f0025e,0x5ea0007c,0xa297003b,0x4e5e2000,0x017c48f4,0x09026084,
+0xbf034810,0x08f002de,0x5e30037c,0x7c08f002,0x4fde6800,0x00542a04,
+0x003352b0,0xb0009f17,0x10002f52,0x528102eb,0x6305002f,0xab02e000,
+0x02aa2000,0x002f5281,0x08026608,0x05002f52,0xdebf0376,0x2807f002,
+0x0360bc01,0x01671000,0x000360bc,0x80014610,0x300906e0,0xc1820249,
+0x600a001f,0x2f60bc01,0x0165f01f,0x000360bc,0xe8008016,0x30009741,
+0xc1690065,0x5d0a0097,0x0b60bc01,0x01941700,0x000360bc,0xbc01ab17,
+0x17000360,0x60bc01ac,0xad170003,0x0360bc01,0x01ae1700,0x000360bc,
+0xbc01bf17,0x20000360,0x60bc0120,0xa1170003,0x025e0200,0x015800f0,
+0x00674038,0x1c012800,0x00006740,0x60bc0129,0x49500003,0x0360bc01,
+0x01a71700,0x000360bc,0xbc01a817,0x17000360,0x60bc01a9,0xac170003,
+0x0360bc01,0x01ad1700,0x0f06e082,0x06027810,0x0a00e3c1,0x80680072,
+0x750a00a7,0x02debf03,0x00760af0,0x00a78068,0xbc01768a,0xe0000b60,
+0x60bc0100,0x01400003,0x2f62bc01,0x01022003,0x1b5b60bc,0xbc010340,
+0x00000360,0x60bc0104,0x05000003,0x1b60bc01,0x01611006,0x1f1360bc,
+0xbc016050,0x06000360,0x5eb0009e,0x8517000f,0xb644a000,0x034571f0,
+0xf002debf,0x88012209,0x46ce5c5e,0x60bc0172,0x07100e1b,0x0360bc01,
+0x01085001,0x00066088,0x07020490,0x0600afc0,0xde860320,0x1509f002,
+0x02de0503,0x03870af0,0xf002de86,0x85031509,0x0af002de,0x5eb00089,
+0xa1170087,0x03e06e00,0x038d2a00,0xf002de86,0xbc011509,0x10000760,
+0xde020042,0x0000f002,0x025e2103,0x00940af0,0xf43a1ae0,0xb0008e26,
+0x17003b1a,0xdebf038b,0x9c0af002,0xb7508102,0x01990a00,0x009f501c,
+0xe0008b17,0x37f42e5e,0x5e9c018b,0x27f4842e,0x02debf03,0x019c0af0,
+0x009f501e,0xe0008b17,0x37f42e5e,0x5e9e018b,0x27f4842e,0x02de0200,
+0x000000f0,0x00a70068,0x0201a28a,0x060027c0,0x8068009d,0xa8aa00a7,
+0x771ae000,0x009d2600,0xf002de02,0xbc010000,0x26000360,0x40bc019d,
+0xa117002b,0x875e9800,0x00a11701,0x012b4098,0x6a00a217,0x2af48ade,
+0x60bc01a8,0x9d860003,0x02de0200,0x000000f0,0x002352b0,0xb0001f10,
+0x10002752,0x52b00020,0x2110002b,0x07608001,0x021d1000,0x00774080,
+0x0200ad0a,0x00f002de,0xe0870100,0xab77f502,0x025e9103,0x000200f0,
+0x09fee320,0x81020200,0x0a00535e,0x418302bb,0xb50a001f,0x53de8102,
+0x01c10a00,0x000360bc,0xbc015111,0x11000360,0x62bc0152,0x53110003,
+0x0360bc01,0x01505100,0xf2066089,0xbf039497,0x00f002de,0xc5800202,
+0x02000043,0x47c5f001,0x01561100,0x0047c507,0xf001a117,0x31f44ac5,
+0x60890155,0x9497f20a,0x0360bc01,0x02471008,0x0007c104,0x92030200,
+0x00f002de,0xde9e0302,0xc80af002,0x02deb803,0x000200f0,0x007f01b0,
+0x6800a117,0xc00b84de,0xdebf0302,0xca0af002,0x53de0302,0x00020000,
+0x0023de68,0x8402cb0a,0x0000535e,0xc4870202,0x02000093,0x0361bc01,
+0x00231100,0x002b01b0,0xb000a317,0x17000b44,0x44b000a1,0xa217000f,
+0x865ee900,0x00a13723,0x238adee8,0xe900a257,0x66f4865e,0xdee8008a,
+0x8b06008b,0x6f816800,0x00d70a00,0x00235e68,0x6800eb2a,0x2a002700,
+0x5ee800eb,0xa1370023,0x87de6900,0x00da0a00,0x01845ee0,0xb000a137,
+0x18001f44,0x44880000,0xa3570123,0x23449000,0x01a4d700,0x006f013c,
+0x6800a517,0x0a0097de,0x013801e4,0xa517006f,0x975e6800,0x00e70a00,
+0x00975ee8,0x6800a137,0x0a00875e,0xdebf03eb,0xe70af002,0x975ee800,
+0x00a53700,0x0194de80,0xe000a537,0xb70d865e,0x1ae100a1,0x8a66f42a,
+0x2e9ae000,0x008b86f4,0x00875ee8,0x6a00a137,0x0a00875e,0x1a6900e7,
+0xf00a002f,0x2f9a6800,0x00ee0a00,0x2a2a9a6e,0x8001f08a,0x97f206e0,
+0xdebf0394,0xf20af002,0x02e08001,0x039497f2,0xf002debf,0x68000200,
+0x0a002741,0x458402fd,0xf30a0023,0xa7006800,0x00f6aa00,0x00a78068,
+0xb000f9ca,0x17006744,0x44e800a1,0xa237f466,0x8b5e6d00,0x03f74a00,
+0xf002de92,0x02002e09,0x0cf0025e,0x5e02005f,0x5a0cf002,0x025e0200,
+0x016a0cf0,0x000f60bc,0x1e03e811,0x0bf002de,0x60bc0104,0x5c100003,
+0x0360bc01,0x015d1000,0x045360bc,0xbc015e10,0x10000360,0xdebf035f,
+0x080bf002,0x0b60bc01,0x015c1000,0x000360bc,0xbc015d10,0x10044360,
+0x60bc015e,0x5f100003,0x0360bc01,0x02208000,0x00bf0085,0xb0003d0b,
+0x11002b1a,0x1ab00051,0x5211002f,0x0360bc01,0x01503100,0x0c0360bc,
+0x00004090,0x00f002de,0xc1680000,0x110b0003,0x43458002,0x010d0b00,
+0x000360bc,0x84025011,0x0b004345,0x44b00012,0xa1170067,0x865e6800,
+0x01142b23,0x000360bc,0x86012040,0x11200660,0x1ae90000,0xa1372a2a,
+0x2e9ae800,0x00a2572a,0xf46644e1,0xe1001931,0x51f46ac4,0xc4e1001a,
+0x1b11006f,0x73c4e000,0x001c1100,0x001f44b0,0x88000018,0x57012344,
+0x449000a3,0xa4d70023,0x0b44b000,0x00a11700,0x000f44b0,0xe900a217,
+0x3723865e,0xdee800a1,0xa257238a,0x8bde6900,0x002b0b00,0xf40a44e1,
+0xe0000271,0x91f40ec4,0x5ee80003,0x88370023,0x23de6900,0x00200b00,
+0x002700e8,0xbf038837,0x0bf002de,0x60860120,0x00112002,0x53de0002,
+0x013f0b00,0xf202e080,0x02009497,0x0cf0025e,0x60bc015d,0x40100003,
+0x02debf03,0x02320bf0,0x00c38000,0xe000360b,0x57096444,0x5ee800a1,
+0xa1372186,0x66c46c00,0x03342bf4,0xf002debf,0xe8003f0b,0x26212a01,
+0x60bc018a,0x8b060003,0x2b1ab000,0x01511100,0x000360bc,0xbc015211,
+0x31000360,0x45800250,0x3b0b0043,0x02debf03,0x01160bf0,0x000360bc,
+0xb0004010,0x11002b01,0xde000009,0x0000f002,0x025e5603,0x00420bf0,
+0xf0025e02,0xb000cc00,0x11002f01,0x61bc0109,0x5c100ccf,0x0360bc01,
+0x015d1000,0x01cf61bc,0xbc015ef0,0xf0083b60,0x5e02005f,0x660cf002,
+0x025e0200,0x006f0cf0,0xf0025e02,0xbf03630c,0x09f002de,0x5e88012e,
+0x86d01006,0x075e0201,0x01a11700,0x10865e82,0x680086d0,0x8b00a780,
+0x5e9d0150,0x86d01002,0x1b420802,0x01670b00,0x061b60bc,0x0200a137,
+0x00f0025e,0x608d0158,0xa2370306,0x025e0200,0x015d00f0,0x006f5018,
+0x8002a317,0x0b001bc2,0x60bc015b,0x81d71d03,0x8fde0002,0x02640b00,
+0x008f5e00,0xbf035e0b,0x0bf002de,0x60bc0161,0x81f70303,0x8f5e6e00,
+0x00644b00,0x008f5e68,0x8301610b,0x37030660,0x5e0200a2,0x5d00f002,
+0x02debf03,0x016c0bf0,0x03066083,0x0200a237,0x00f0025e,0xdebf035d,
+0x6c0bf002,0x02608301,0x00a23703,0xf0025e02,0xbf035d00,0x0bf002de,
+0x60bc016c,0xa137061b,0x025e0200,0x015800f0,0x0302608d,0x0200a237,
+0x00f0025e,0x60bc015d,0x81d71d03,0x07c18102,0x026c0b00,0x00634087,
+0xbc016d0b,0x10070760,0x60bc0119,0x18700183,0x63408702,0x00700b00,
+0x00075eb0,0xbc011910,0xb0018360,0x40870218,0x730b0063,0xa7006800,
+0x02778b00,0x001b420b,0xbf03770b,0x0bf002de,0xde020077,0x0000f002,
+0x1354b000,0x02a11700,0x0007de00,0xb000820b,0x10008b41,0x60bc0165,
+0xa1d70103,0x025e0200,0x00570df0,0x00845ee0,0xe000a1d7,0xf700845e,
+0x5e0202a1,0x820b0007,0x845ee800,0x03a137d4,0xf002debf,0x0200820b,
+0x00f002de,0x00040200,0x860b00bf,0x025e0200,0x03340df0,0xf002debf,
+0xa0008a0b,0xb1f0b644,0x80070245,0x8a0b00bf,0x17c56800,0x018a0b00,
+0x000360bc,0x02004531,0x00f002de,0x00000200,0x9a0b00bf,0xa35ee000,
+0x00a83700,0x05a05e6d,0xb0009acb,0x17009726,0x5e0200a1,0x5800f002,
+0x6740b000,0x00a21700,0xffa3de68,0xb00097eb,0xd734895e,0x006d00a2,
+0x968b00a7,0x779a6d00,0x03984b00,0xf002debf,0x6800970b,0x0b00779a,
+0x5eb80098,0xa2d73489,0x025e0200,0x015d00f0,0x000360bc,0x0200a817,
+0x00f002de,0x5e010200,0xae0b00b3,0x02608101,0x01ac97f5,0x1f0f60bc,
+0x90016210,0x30020460,0x54b00086,0x8a100027,0x0361bc01,0x0080f000,
+0x00a702e0,0xbc01a920,0x10000360,0x60bc0184,0x85100003,0x0754b000,
+0x00e01000,0x000b54b0,0xbc01e110,0x901a0360,0x60bc01e3,0xe4100003,
+0x0360bc01,0x0192b706,0x1fff63bc,0xbc01c3f0,0xf01fff63,0x60bc01c4,
+0x84f01f03,0x0a609001,0x01481009,0x0902e084,0x02004810,0x00f002de,
+0xde000200,0xc00b00b3,0xb35e0002,0x02c00b00,0x001f4200,0xbc01c00b,
+0x10000361,0x42b00080,0x00180003,0x03e06e00,0x03b52b00,0xf0025e50,
+0x0100b80b,0x00f0025e,0xdebf0300,0x3302f002,0x2341a800,0x0148f001,
+0xf502e087,0xb000ab77,0x1100331a,0x02e00042,0xa720009f,0x7060a001,
+0x008fe6d1,0xf0025e02,0x8001d30b,0x900d06e0,0x5e02006c,0x8b0bf002,
+0x02de0200,0x030000f0,0xf002de28,0x2000c00b,0x0b098ae0,0x1ab000c0,
+0x60100053,0x571ab000,0x00180000,0x006300b0,0xb000a010,0x18008342,
+0x42680000,0xc00b0047,0x02608001,0x002c9485,0xf0025e02,0xb000e700,
+0x17004f1a,0xde6800a5,0xcfcb8496,0x02e08001,0x016c900d,0x8506e082,
+0xbf032db4,0x0bf002de,0xe08601c0,0xa0100304,0x8342b000,0x00001800,
+0x00a302e0,0xbf03a820,0x0bf002de,0x5e0002c0,0xd90b00b3,0x4b1ab000,
+0x008f1000,0x00471ab0,0xb0008e10,0x1000431a,0x1ab0008d,0x8c30003f,
+0x02608001,0x00ac97f5,0xf002de02,0xd8000000,0x1701035a,0x5ab801a2,
+0xa257f406,0x0356b000,0x00ae0600,0x000756b0,0xb000af06,0x06000b56,
+0x56b000b0,0xb106000f,0x1356b000,0x00b20600,0xf41256e0,0xb000b346,
+0x0600035a,0x5e3801ac,0xad06008b,0xcf1ab000,0x01a41700,0x000360bc,
+0xb000a217,0x10009341,0x5eb80065,0xa417d092,0x065ee000,0x006350f4,
+0x00935ef0,0xf000a317,0x7700935e,0x5ee000a4,0xa237008b,0x925eb800,
+0x00a477f4,0xf49241e0,0xe0006550,0x95f40256,0x56b00080,0xa4170003,
+0x8bde6e00,0x00e7ab00,0xc0925eb8,0xd800a2d7,0x37008b5e,0x1ae000a2,
+0xae46f4ba,0xbb1ab000,0x00a41700,0xc0925eb8,0xd800a2f7,0x37008b5e,
+0x1ae000a2,0xaf46f4be,0xbf1ad800,0x00a23700,0xf4c21ae0,0xd800b046,
+0x3700c31a,0x1ae000a2,0xb146f4c6,0xc71ad800,0x00a23700,0xf4ca1ae0,
+0xd800b246,0x3700cb1a,0x1ae000a2,0xb346f4ce,0xcf1ab000,0x00a21700,
+0xc08a5eb8,0x9000a217,0x37008b5e,0x5ebc01a2,0xada6d588,0x02de0200,
+0x010000f0,0x3c066080,0x8701e491,0xd13c0660,0x60a801e6,0xe6d13c02,
+0x02608b01,0x00e6d13c,0x008f5eb0,0xb0006310,0x11000356,0x56b000e7,
+0xe7110007,0x0b56b000,0x00e71100,0x000f56b0,0xa901e711,0x913c4260,
+0x60a801e4,0xe6d13c02,0x06608b01,0x00e6d13c,0x008b5eb0,0xbc016310,
+0x57000360,0x560402a1,0x150c0003,0x0360bc01,0x00a11701,0xf48e41e0,
+0xb0006330,0x11000356,0x56b000e7,0xe7110007,0x0b56b000,0x00e71100,
+0x008b5eb0,0xbc016310,0xb7000360,0xd60402a1,0x1f0c0003,0x0360bc01,
+0x02a11701,0x00535e06,0xbc011f0c,0x97010360,0x41e000a1,0x6330f48e,
+0x0356b000,0x00e71100,0x000756b0,0xb000e711,0x11000b56,0x60bc01e7,
+0xa1170003,0x53de0602,0x002a0c00,0x008b5eb0,0x06026310,0x0c00535e,
+0x56a00029,0xa1f7013f,0x02debf03,0x002a0cf0,0x013356a0,0xb000a1f7,
+0x1100875e,0x60bc01e7,0xe7110003,0x02de0200,0x010000f0,0x020760bc,
+0x6800e311,0x4c009bde,0x47e80039,0xe1110187,0x0360bc01,0x01e21100,
+0x000360bc,0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,0x0360bc01,
+0x01e21100,0x000360bc,0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,
+0x4261b000,0x00e051f4,0x000358b0,0xb000e211,0x11000758,0x58b000e2,
+0xe211000b,0x0f58b000,0x00e21100,0x001358b0,0xb000e211,0x11001758,
+0x58b000e2,0xe211001b,0x1f58b000,0x00e21100,0x009b5eb0,0x6800a417,
+0xac009bde,0x60bc0144,0xa4770003,0x93de9201,0x00a31702,0xf002de02,
+0x81020000,0x0c0007c1,0x60bc014d,0xa1770103,0x035ea000,0x00a2f71f,
+0xf0025e02,0xbc015d00,0xb7010360,0x5e0200a1,0x5800f002,0x6740a000,
+0x0081f71f,0xf002de02,0x81020000,0x0c0007c1,0x60bc0157,0xa1770103,
+0x06e08101,0x00ab77f5,0x1f035ea0,0x0200a2f7,0x00f0025e,0x60bc015d,
+0xa1b70103,0x075eb000,0x00a21700,0xf0025e02,0x81015d00,0x77f502e0,
+0xde0200ab,0x0000f002,0xa7006800,0x0396ce00,0xf002debf,0x02006e0c,
+0x0cf0025e,0x5e02005d,0x6f0cf002,0x02de0200,0x000000f0,0x00a70068,
+0x020069ce,0x00f002de,0x60810100,0x49300906,0xa7006800,0x00628c00,
+0xf0025e02,0x02007f0c,0x00f002de,0x5e020000,0x7f0cf002,0x02608101,
+0x00493009,0xf002de02,0x88010000,0x30090ee0,0x41b00049,0x00180027,
+0x2b00b000,0x00021000,0xf002de02,0xbc010000,0x10000360,0xe0820102,
+0x78100f02,0x0360bc01,0x00491000,0x002741b0,0x02000018,0x00f002de,
+0x00680000,0x70cc00a7,0x53de8002,0x01760c00,0x071360bc,0x0200a177,
+0x00f0025e,0x60900158,0xa2370302,0x025e0200,0x005d00f0,0xf002de02,
+0xbc010000,0x97071360,0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,
+0xf0025e02,0xbc015d00,0x77071360,0x5e0200a1,0x5800f002,0x1e609001,
+0x00a23703,0xf0025e02,0x02005d00,0x00f002de,0xde000100,0xa6170053,
+0xa7806800,0x0184cc00,0x099ade81,0xb0004930,0x18002741,0xde020000,
+0x0000f002,0x0360bc01,0x03a13700,0xf002debf,0x0200860c,0x00f0025e,
+0x60870158,0xa2370306,0x9bde6800,0x018a0c00,0x03026087,0x0200a237,
+0x00f0025e,0xde02005d,0x0000f002,0x1f410202,0x029f0c00,0x00535e82,
+0x8201910c,0x97f20660,0x44b00094,0x00180067,0x6b44b000,0x00970600,
+0x006744b0,0xe8000018,0xf7d26844,0x006800a4,0x948c00a7,0x93de6d00,
+0x00994c00,0x036744e0,0x9003a317,0x0cf0025e,0xc585029c,0x9c0c0023,
+0x8ede6800,0x01962c23,0x020360bc,0xbc014710,0x90000360,0x60820143,
+0x9497f202,0x02608201,0x00adb7f5,0x00a70068,0x68009f8c,0xac00a700,
+0xde02009f,0x0000f002,0x1fc10102,0x02b20c00,0x00af5e85,0x8501a50c,
+0x77f50660,0x44b000ab,0x9a060067,0x6b44b000,0x009b0600,0xd36444e9,
+0xe800a157,0x77d368c4,0x5ed000a2,0xa1770087,0x8adee101,0x00a237f4,
+0x26865ee9,0xe800a197,0xb7268ade,0x5e6900a2,0xb20c008b,0x0361bc01,
+0x00331100,0xf4da44e1,0xe1003631,0x51f4de44,0x60850137,0xab77f502,
+0x0360bc01,0x01471001,0x000360bc,0x02004350,0x00f002de,0x45b00000,
+0x8117001f,0xb705b000,0x01a61700,0x040760bc,0xbc016410,0x10191360,
+0x60bc0165,0xa1170003,0xafde0502,0x00cb0c00,0x000f58b0,0x68008017,
+0x2c2c845e,0x5e0002d8,0xcb0c009b,0x03da8002,0x01c10c00,0x001f5818,
+0xe0008217,0x37000b5e,0x5e980182,0x07f6c00a,0x02debf03,0x01c40cf0,
+0x001fd819,0xe0008217,0x3700035e,0xde990182,0x07f6c00a,0x03def001,
+0x00803700,0xc0025ea0,0xb0008057,0x1600035e,0x44a00003,0x8217f0b6,
+0x0b5eb000,0x00051600,0xc00a5ee0,0xbf030696,0x0cf002de,0x58b000d8,
+0x82170013,0x065ee800,0x02a557f0,0x00afde00,0xe800d20c,0x97d4085e,
+0x5eb000a3,0xa5170007,0x8fde6a00,0x00d20c00,0xf4965ee8,0x6a00a577,
+0x0c0097de,0x58e800d6,0x05b6f416,0x17d86900,0x01d60c00,0x000360bc,
+0xb0000516,0x17001758,0x58e000a5,0x06b6f412,0x9341e000,0x00641002,
+0x069741e0,0xe0006550,0x3700875e,0x5e9000a1,0xa637009b,0x87de6800,
+0x01b88c00,0xf502e080,0xbc01ab77,0x11000360,0xde020047,0x0000f002,
+0x0360bc01,0x016c0100,0x000360bc,0xbc016d01,0x100a0760,0x60bc0164,
+0xa4d70b17,0x0360bc01,0x00a17700,0x008f42b0,0xa0008017,0xf701035e,
+0x5eb00080,0x6e010003,0xff63bc01,0x00a2f71f,0x0003de68,0xbc01eb0c,
+0x17000360,0x608800a2,0x8137f406,0xba052000,0x00f02cf0,0xc08ade68,
+0xe000f0cc,0x2100b305,0x05b0006c,0x6d21f0b6,0x035e6800,0x00f40c00,
+0xf0065e20,0x6e00fb0c,0xccc08ade,0xdebf03fb,0xf50cf002,0x8ade6d00,
+0x00fbccc0,0x00875eb0,0xb000a317,0x01009341,0x5eb00066,0x67010093,
+0x1b58b000,0x01a21700,0x000360bc,0xbc016c01,0x01000360,0x41e8006d,
+0x64100293,0x935ee800,0x00a45706,0x00875ee8,0x6900a137,0x0c0087de,
+0x5eb000eb,0x6501008f,0x8b5eb000,0x00640100,0xf002de02,0xb0000000,
+0x10009b05,0x58b00064,0x4511001b,0x9305b000,0x00600100,0x009b05b0,
+0xb0006201,0x01009f05,0x05b00063,0x61010097,0x0f58b000,0x00851700,
+0x000758b0,0xb0008317,0x17000b58,0x58980184,0x8c97f11e,0x1ed89901,
+0x008db7f1,0xf002de02,0x87010000,0x77f50260,0x05b000ab,0x80170097,
+0x005e6800,0x01322d2c,0x000360bc,0xbc011211,0x11000360,0x05b00015,
+0x6410009b,0x23450002,0x001c0d00,0x001f45b0,0xe8008117,0x37f09205,
+0xde6a0080,0x1a0d0003,0x035eb000,0x03451100,0xf002debf,0xbc011d0d,
+0x31000360,0xdebf0345,0x1d0df002,0x9305b000,0x00451100,0x008305b0,
+0xb0006901,0x01008b05,0x05b0006a,0x6b01008f,0x8705b000,0x00680100,
+0x00ab05b0,0x84026510,0x0d001f5a,0x5eb00026,0x83160017,0x325e9801,
+0x0187f6d0,0xd036de99,0x840187f6,0xf6d00260,0x05b00087,0x60010093,
+0x9b05b000,0x00620100,0x009f05b0,0xb0006301,0x01009705,0x05b00061,
+0x6410008b,0x0f58b000,0x00851700,0x000758b0,0xb0008317,0x17000b58,
+0x58980184,0x8c97f11e,0x1ed89901,0x038db7f1,0xf002debf,0x8701330d,
+0x77f50660,0xde0200ab,0x0000f002,0x8b05b000,0x00641000,0x2a93416e,
+0xa000400d,0xb7f0b644,0x5eb000a1,0x05160087,0x1258e000,0x020636f4,
+0x00f30000,0x6d003d0d,0x0d289341,0xde00023d,0x3d0d00af,0x0b60bc01,
+0x00425102,0x00875eb0,0x01026f01,0x0d00af5e,0x5eb00040,0x03160017,
+0x02608101,0x00ab77f5,0xf002de02,0x0c010000,0x17004381,0x60bc01a1,
+0x8a100003,0x875e6800,0x014e4d00,0x000360bc,0x68008a50,0x0d00075e,
+0x5e680056,0x4e0d0087,0x0360bc01,0x008ab000,0x00075e68,0x82024e2d,
+0x0d0003de,0x60bc014e,0x8a900003,0x03de8302,0x004e0d00,0xf40a60e0,
+0x68008ad0,0x0d00075e,0x42900156,0x8a30a12a,0x075e6800,0x01562d00,
+0xa02a4290,0x09018a10,0x170003de,0x5e8f01a2,0x8a50118a,0x8b5e6800,
+0x01560d00,0x110ee091,0x02008a50,0x00f002de,0xde090100,0xa4170003,
+0x065ae000,0x00a597f4,0xf4965e90,0x0302a597,0x0d0003de,0xde82025d,
+0x5d0d0003,0x94de8000,0x00a5f70a,0x00875e88,0xe000a177,0xd702875e,
+0xde8000a1,0xa137f496,0xb741e100,0x00a5f7ff,0x0187dee0,0x9000a1f7,
+0x9700875e,0x5e8800a1,0xa1570087,0x43010501,0x00a21700,0xf4865e88,
+0x0200a157,0x00f002de,0x19000200,0x0a0000df,0x53de8202,0x016d0d00,
+0x04026088,0xe0002490,0x06f3821a,0x1ae800a0,0x9f06f37e,0x02debf03,
+0x01e107f0,0x041660b8,0xbc012490,0xd0010360,0x5e050325,0x7f0df002,
+0x37c08702,0x03140900,0xf002de86,0xbc011509,0xe0000360,0x5e02003e,
+0xa50ef002,0x02de5c03,0x006f0df0,0x019b40d8,0xe000a117,0x3702875e,
+0x5ea80098,0x98770063,0x53de0201,0x01a11700,0xf202e082,0x88019497,
+0xe6ce84de,0x9a6e0077,0x7f0df37e,0x635ee800,0x0125d001,0x040660b8,
+0xbf032490,0x00f002de,0x60810102,0x77e6ce04,0x0a60b801,0x03249004,
+0xf002debf,0x28020200,0x0d00875e,0x41b00095,0xa4170093,0x9341e000,
+0x01647000,0x00875e0a,0xe800a217,0x50f49241,0x5e180163,0xa1170087,
+0x4260e800,0x00a237f4,0xf4025688,0x68000036,0x8df48e41,0x41e80091,
+0x6330008f,0x9341e800,0x00643000,0x028b5e68,0x9000890d,0x57f40256,
+0x58b000a3,0x0176f406,0x02debf03,0x00890df0,0xf4924168,0xe800958d,
+0x30009341,0x60bc0164,0x00160003,0x02debf03,0x00910df0,0x00875eb0,
+0x0200a117,0x00f002de,0x5e280200,0xab0d0087,0x875e0a01,0x00a21700,
+0xf49241e0,0x18016350,0x1700875e,0x60e800a1,0xa237f442,0x0360bc01,
+0x00a31700,0x009341e8,0xe0006430,0x97009341,0x58b000a4,0x0076f402,
+0x9341e000,0x00643000,0xf4025690,0x68000036,0x8df48e41,0x41e000a7,
+0x6330008f,0x8b5e6800,0x009f0d02,0xf4025688,0xbf03a357,0x0df002de,
+0x4168009f,0xab8df492,0x0360bc01,0x00011600,0x009341e0,0xbf036430,
+0x0df002de,0x5eb000a7,0xa1170087,0x02de0200,0x000000f0,0x00bb50b0,
+0xb0006510,0x17000b5a,0x01e000a1,0x7d2000f7,0xd201e000,0x007420f4,
+0x00bf50b0,0xb0006410,0x17001358,0x60bc0182,0x04160003,0x1b60bc01,
+0x0265d005,0x00b7d002,0xbc01b70d,0xf0051b60,0x50e00065,0x649000bb,
+0x0360bc01,0x01b41700,0x000360bc,0xbc018017,0x37000360,0x60bc0181,
+0xa5170003,0x0360bc01,0x00a61700,0x00335290,0xe000a497,0xb7018741,
+0x608701b5,0xa0100304,0x8342b000,0x00001800,0xf0d25e68,0xb000f64d,
+0x1000035e,0x00b000b5,0xb4700863,0xd3428302,0x01c40d00,0x090360bc,
+0xb000b510,0xf0006300,0x60bc01b4,0xb6101147,0x0360bc01,0x00b5d000,
+0x006300b0,0xb000b4b0,0x1800d342,0xde170300,0xcb0df002,0x02de9703,
+0x00cc0df0,0xf002d820,0x9000e32d,0x5700975e,0x50e000a1,0x6330f4ba,
+0x975e8901,0x00a21700,0xf41a5690,0x8800a357,0x57f43e60,0x5ea000a1,
+0xa3f7018f,0x8f5ee000,0x00a33700,0xf41a56a8,0xe0008635,0x3700975e,
+0x500202a5,0xe70d00b7,0x17239000,0x00a19700,0xf4865ee8,0x6900a197,
+0x0d00875e,0xde6900e7,0xe70d0487,0x875e0a01,0x00a21700,0xf4d65ee0,
+0xda016350,0x37f40260,0x608800a1,0xa137f406,0x02562000,0x00e72df4,
+0xf00258b0,0xe0000036,0x3600035a,0xde680080,0xf00d009b,0x1b23b000,
+0x012b1400,0x030ce08e,0xbf03a010,0x0df002de,0xde6d00f1,0xe4cdf08e,
+0x9b5e9000,0x01a25700,0x009b5e89,0xe000a117,0x50f4ba50,0x60880063,
+0xa237f43e,0x8e5e8800,0x00a337f4,0xf41a56a8,0xb0008655,0x75f41a56,
+0x5ee00086,0xa637009b,0x035ee000,0x00803700,0x00d35ee0,0xd000b437,
+0x3700075e,0x5e980281,0xc10d00d3,0x9341e000,0x03643000,0xf002debf,
+0x8001c10d,0x94850260,0x5ee8002c,0x8017f0d2,0x035e6800,0x030a0000,
+0xf002debf,0xd0008004,0x97c00660,0x41e00080,0xb5970097,0x13580a01,
+0x00a11700,0xf4d65ee0,0xb000b537,0x10000f58,0x56160163,0x81170003,
+0x13d86800,0x010d0e00,0x00630014,0xbc01a117,0x90090360,0x5e900062,
+0xa2370087,0x8a41e000,0x006250f4,0x01035488,0x00028016,0x0e00875e,
+0x54a00008,0x8016e003,0x035ae800,0x01801630,0x000360bc,0xbc018116,
+0x16000360,0x60bc0182,0x83160003,0x02debf03,0x00120ef0,0xc08e41e0,
+0x6e006390,0x2ec08ec1,0x41e80012,0x6330c08e,0x0358e800,0x00a13700,
+0xf48e41e0,0xbc016330,0x17000360,0x586800a5,0x2fee0313,0x8e416800,
+0x002f4ec0,0x040bda6d,0x16012f0e,0x17000356,0xde6800a1,0x2f2ef086,
+0x03565801,0x00a11700,0x0c875ee0,0xb000a257,0x1000d75e,0xde200062,
+0x260ea002,0x865ee000,0x00a337d0,0xd08e5ee0,0x6d00a377,0x4ef4025a,
+0x63bc012f,0xa4f71fff,0x8e5e6e00,0x002f8ef4,0xf40260e8,0xb0008336,
+0x16008f5e,0x5aa00081,0x8376000f,0x0360bc01,0x00a53700,0x000b5ae0,
+0xe8008236,0x56f4025a,0x5ed00080,0x80370003,0x1358e000,0x00043600,
+0x008f41e0,0x98026330,0x0e001358,0x5ee0002c,0xb53700d7,0x8ec16e00,
+0x00122ec0,0x000358b0,0xbf036310,0x0ef002de,0x5e680012,0x300e0097,
+0x02de0200,0x000000f0,0x000758b0,0xe000a117,0x16f00e58,0xd86e0003,
+0x372ef40e,0x865ee800,0x00a117c0,0xf40e58e8,0xe8000336,0x36000f58,
+0x5e180103,0xa1170003,0x03de6d00,0x003f0e02,0xf44260e8,0x9000a237,
+0x36f4125a,0x5a880084,0xa257f416,0x165a9000,0x008536f4,0xf4125ab0,
+0xbf038456,0x0ef002de,0x5a900041,0x8436f416,0x0360bc01,0x00851600,
+0xf002de02,0x58010000,0x10000360,0x60bc012a,0x04900203,0x0a60b801,
+0x01249004,0x0d02e089,0x02006c90,0x00f002de,0x47e80000,0xa1170187,
+0x875ed800,0x01eb1101,0x111f63bc,0xa000a1f7,0x31f40e5a,0x5ab000eb,
+0xeb110017,0x1b5ab000,0x00eb1100,0x001f5ab0,0xb000eb11,0x1100235a,
+0x5ab000eb,0xeb110027,0x2b5ab000,0x00eb1100,0x002f5ab0,0xb000eb11,
+0x1100335a,0x5ab000eb,0xeb110037,0x3b5aa000,0x00ebf101,0x009741b0,
+0x06026410,0x0e00535e,0x58b0005b,0xeb11003f,0x4358b000,0x00eb1100,
+0x004758b0,0xe000eb11,0x70009341,0xde060264,0x5e0e0053,0x3f58a000,
+0x00ebf101,0x009341e0,0x07026430,0x0e000fda,0x58b00061,0xeb11003f,
+0x4358b000,0x02eb1100,0x00ab4710,0xbc01640e,0x11000360,0xdebf03eb,
+0x610ef002,0xabc71101,0x01a11700,0x060360bc,0xe800ea11,0x5100875e,
+0xe08601eb,0xe8113d06,0x02de0200,0x020000f0,0x0053de00,0xbc01880e,
+0xb7091360,0x5e0200a1,0x5800f002,0x0260a501,0x00a23703,0xf0025e02,
+0xbc015d00,0x97091360,0x5e0200a1,0x5800f002,0x7e60a401,0x00a23703,
+0xf0025e02,0xbc015d00,0xf7161360,0x5e0200a1,0x5800f002,0x0260b401,
+0x00a23703,0xf0025e02,0xbc015d00,0x37161360,0x5e0200a1,0x5800f002,
+0x02e08601,0x00a23703,0xf0025e02,0xbc015d00,0x17161360,0x5e0200a1,
+0x5800f002,0x06e08101,0x01a23703,0x0306e085,0x0200a237,0x00f0025e,
+0x60bc015d,0xa1571f13,0x025e0200,0x015800f0,0x0302e081,0x0200a237,
+0x00f0025e,0x60bc015d,0xa1371f13,0x025e0200,0x015800f0,0x0306e081,
+0x0200a237,0x00f0025e,0xde02005d,0x0000f002,0x1360bc01,0x00a19709,
+0xf0025e02,0xa4015800,0x37030260,0x5e0200a2,0x5d00f002,0x1360bc01,
+0x00a11716,0xf0025e02,0x81015800,0x370302e0,0xe08501a2,0xa2370302,
+0x025e0200,0x015d00f0,0x1f1360bc,0x0200a137,0x00f0025e,0xe0810158,
+0xa2370302,0x025e0200,0x005d00f0,0xf002de02,0x00020000,0x0e0053de,
+0x60bc01a0,0xa1b70913,0x025e0200,0x015800f0,0x03026087,0x0200a237,
+0x00f0025e,0x60bc015d,0xa1970913,0x025e0200,0x015800f0,0x03066086,
+0x0200a237,0x00f0025e,0xde02005d,0x0000f002,0x1360bc01,0x00a19709,
+0xf0025e02,0x86015800,0x37030260,0x5e0200a2,0x5d00f002,0x02de0200,
+0x020000f0,0x00234584,0xbc01030f,0x17161760,0x5e0200a1,0x5800f002,
+0x67401e01,0x00a21700,0x008b5e68,0x6800b9ae,0x6e018bde,0x409c02d1,
+0xb60e0067,0x8726e000,0x00a12900,0x006744b0,0xe0000018,0x69006744,
+0x5e830391,0xb30ef002,0x46a66800,0x01af2e23,0x000360bc,0x83023b20,
+0x0e004fa6,0xe08201ed,0x93693205,0x0360bc01,0x033b4000,0xf002debf,
+0x1c01ed0e,0x17006740,0x5e6800a2,0xc5ce008b,0x02debf03,0x01d10ef0,
+0x32016081,0x80029369,0x0e004fa6,0xe08001bf,0x93693205,0x6744b000,
+0x00001800,0x006744b0,0xbf039109,0x0ef002de,0x266800d2,0xd20e0023,
+0x6544e800,0x01a13732,0x000360bc,0x6e003ba0,0x0e31855e,0x60bc01ed,
+0x3b000003,0x02debf03,0x01d20ef0,0x3201e080,0x81029369,0x0e004f26,
+0x608101cb,0x93693205,0x6744b000,0x00001800,0x006744b0,0xbf039209,
+0x0ef002de,0x266800d2,0xd10e0027,0x6544e800,0x01a15732,0x000360bc,
+0x6e003bc0,0x2e31855e,0x60bc01ed,0x3b000003,0x02debf03,0x01d20ef0,
+0x3201e088,0x81029369,0x0e004fa6,0x400602ec,0xd90e0037,0x37c00502,
+0x01d90e00,0x32056080,0xb0009369,0x18006744,0x44b00000,0x90090067,
+0x02debf03,0x02ec0ef0,0x004f2600,0xe800ec0e,0x17326544,0x266800a1,
+0xec0e001f,0x855e6e00,0x03deee30,0xf002debf,0x8001ec0e,0x69320160,
+0x42830293,0xea0e001f,0x23c58502,0x01e60e00,0x020360bc,0x83023b20,
+0x0e004fa6,0xe08201ed,0x93693205,0x0360bc01,0x033b4002,0xf002debf,
+0x8201ed0e,0x69320560,0x60bc0193,0xa1b70817,0x2761bc01,0x00a2970c,
+0xf0025e02,0xe0005d00,0x29003326,0x6080018c,0x93693201,0x02debf03,
+0x02040ff0,0x004f2602,0xbc01f10e,0xb7081760,0x61bc01a1,0xa2170027,
+0x025e0200,0x015d00f0,0x0906e081,0xb0004930,0x1700875e,0x5eb000a1,
+0xa1170087,0x875eb000,0x01a11700,0x0902e081,0xe0004930,0x29002b26,
+0x44b0008a,0x8e090067,0x4fa68202,0x00030f00,0x008b26e0,0xb000a229,
+0x09002b26,0x44b0008b,0x8d090067,0xef00b000,0x00510000,0x00fb00b0,
+0xc0013f00,0x69320160,0x5e020093,0x3b09f002,0x025e0100,0x010000f0,
+0x0906e084,0xbf034810,0x08f002de,0x60c0015e,0x93693201,0x02de0200,
+0x000000f0,0x00000000,0x00000000,0x0000692a,0x0193477e,0x00000000
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinit.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the class implementing MWlanHwInitInterface interface
+*
+*/
+
+
+#ifndef WLANHWINIT_H
+#define WLANHWINIT_H
+
+#include "wlanhwinitinterface.h"
+
+class CWlanHwInitMain;
+
+// CLASS DECLARATION
+/**
+* This class implements the MWlanHwInitInterface interface.
+*
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInit ) : public CBase, public MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+        
+        /**
+         * Two-phased constructor.
+         */
+        IMPORT_C static CWlanHwInit* NewL();
+        
+        /**
+         * Destructor.
+         */
+        IMPORT_C virtual ~CWlanHwInit();
+        
+        // Functions from base classes
+
+        /**
+         * From MWlanHwInitInterface Get pointer to hardware specific initialization data.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        IMPORT_C void GetHwInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength );
+
+        /**
+         * From MWlanHwInitInterface Get device MAC address.
+         * @since Series 60 3.1
+         * @param aMacAddress MAC address of the device.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt GetMacAddress(
+            TMacAddr& aMacAddress );
+
+        /**
+         * Methods for production testing.
+         */
+
+        /**
+         * From MWlanHwInitInterface Get pointer to hardware specific initialization data
+         * for production testing.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        IMPORT_C void GetHwTestInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength );
+
+        /**
+         * From MWlanHwInitInterface Get hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to read.
+         * @param aData Buffer for read data.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt GetHwTestData(
+            TUint aId,
+            TDes8& aData );
+
+        /**
+         * From MWlanHwInitInterface Set hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to store.
+         * @param aData Data to be stored.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt SetHwTestData(
+            TUint aId,
+            TDesC8& aData );
+
+    private:
+
+        /**
+         * C++ default constructor.
+         */
+        CWlanHwInit();
+
+        /**
+         * By default Symbian 2nd phase constructor is private.
+         */
+        void ConstructL();
+
+    private:    // Data
+
+        /** The main implemenation of HW specific functionality. */
+        CWlanHwInitMain* iMain;
+    };
+
+#endif // WLANHWINIT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitinterface.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the abstract interface for HW specific initialization
+*
+*/
+
+
+#ifndef WLANHWINITINTERFACE_H
+#define WLANHWINITINTERFACE_H
+
+#include <e32base.h>
+#include "wlanhwinittypes.h"
+
+/**
+ * This is the abstract base class used for HW specific initialization.
+ *
+ * @since Series 60 3.1
+ */
+class MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+
+        // New functions
+
+        /**
+         * Get pointer to hardware specific initialization data.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        virtual void GetHwInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength ) = 0;
+
+        /**
+         * Get device MAC address.
+         * @since Series 60 3.1
+         * @param aMacAddress MAC address of the device.
+         * @return A Symbian error code.
+         * @note If a special MAC address 00:00:00:00:00:00 is returned,
+         * the WLAN engine assumes the device to be a variant without
+         * WLAN support and will not start the up.
+         */
+        virtual TInt GetMacAddress(
+            TMacAddr& aMacAddress ) = 0;
+
+        /**
+         * Methods for production testing.
+         */
+
+        /**
+         * Get pointer to hardware specific initialization data for production testing.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        virtual void GetHwTestInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength ) = 0;
+
+        /**
+         * Get hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to read.
+         * @param aData Buffer for read data.
+         * @return A Symbian error code.
+         */
+        virtual TInt GetHwTestData(
+            TUint aId,
+            TDes8& aData ) = 0;
+
+        /**
+         * Set hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to store.
+         * @param aData Data to be stored.
+         * @return A Symbian error code.
+         */
+        virtual TInt SetHwTestData(
+            TUint aId,
+            TDesC8& aData ) = 0;
+    };
+
+#endif // WLANHWINITINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitmain.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the class implementing HW specific initialization
+*
+*/
+
+
+#ifndef WLANHWINITMAIN_H
+#define WLANHWINITMAIN_H
+
+#include <e32base.h>
+#include "wlanhwinittypes.h"
+#include "wlanhwinitinterface.h"
+
+// FORWARD DECLARATIONS
+class CIsiMsg;
+class CWlanHwInitPermParser;
+
+// CLASS DECLARATION
+/**
+* This class implements the actual HW specific initialization functionality.
+*
+* @lib wlanhwinit.lib
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInitMain ) : public CBase, public MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CWlanHwInitMain* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CWlanHwInitMain();
+
+        // Functions from base classes
+
+        /**
+        * From MWlanHwInitInterface Get pointer to hardware specific initialization data.
+        * @since Series 60 3.1
+        * @param aInitData Pointer to initialization data, NULL if none.
+        * @param aInitLength Length of initialization data.
+        * @param aFwData Pointer to firmware data, NULL if none.
+        * @param aFwLength Length of firmware data.
+        */
+        void GetHwInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength);
+
+        /**
+        * From MWlanHwInitInterface Get device MAC address.
+        * @since Series 60 3.1
+        * @param aMacAddress MAC address of the device.
+        * @return A Symbian error code.
+        */
+        TInt GetMacAddress(TMacAddr& aMacAddress);
+
+        /**
+        * Methods for production testing.
+        */
+
+        /**
+        * From MWlanHwInitInterface Get pointer to hardware specific initialization data
+        * for production testing.
+        * @since Series 60 3.1
+        * @param aInitData Pointer to initialization data, NULL if none.
+        * @param aInitLength Length of initialization data.
+        * @param aFwData Pointer to firmware data, NULL if none.
+        * @param aFwLength Length of firmware data.
+        */
+        void GetHwTestInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength);
+
+        /**
+        * From MWlanHwInitInterface Get hardware specific production testing data.
+        * @since Series 60 3.1
+        * @param aId Id of the parameter to read.
+        * @param aData Buffer for read data.
+        * @return A Symbian error code.
+        */
+        TInt GetHwTestData(TUint aId, TDes8& aData);
+
+        /**
+        * From MWlanHwInitInterface Set hardware specific production testing data.
+        * @since Series 60 3.1
+        * @param aId Id of the parameter to store.
+        * @param aData Data to be stored.
+        * @return A Symbian error code.
+        */
+        TInt SetHwTestData(TUint aId, TDesC8& aData);
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CWlanHwInitMain();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Read the MAC address of the device from permanent storage.
+        * @param aMacAddress Mac address.        
+        */
+        void GetMacAddressL(TMacAddr& aMacAddress);
+
+        /**
+        * Read the tuning data from permanent storage.
+        * @param aTuningData Tuning data.
+        */
+        void GetTuningDataL(TDes8& aTuningData);
+
+        /**
+        * Set the tuning data to permanent storage.
+        * @param aTuningData Tuning data.
+        */
+        void SetTuningDataL(TDesC8& aTuningData);
+
+        /**
+        * Send an ISI message and wait for the reply.
+        * @param aRequest Request to be sent.
+        * @param aReply Received reply.
+        */        
+        void SendIsiMessageL(TDes8& aRequest, TDes8& aReply);
+        
+        /**
+        * Checks if a firmware file can be found from
+        * the memory card.
+        * return False if not found or error occured, True if 
+        * the firmware was successfully read.
+        * The firmware is loaded only once.
+        */
+        TBool IsMMCFirmwareFound();
+
+    private:    // Data
+
+        /** Permanent MAC address. */
+        TMacAddr iMacAddressPerm;
+
+        /** Temporary MAC address. */
+        TMacAddr iMacAddressTemp;
+
+        /** Parser for tuning data. */
+        CWlanHwInitPermParser* iPermParser;
+
+        /** Transaction Id used for ISI messages. */
+        TUint8 iTransactionId;
+        
+        /** Pointer for NVS data */
+        TUint8* ipNvsData;
+        
+        /** Buffer for possible firmware loaded from MC. */
+        HBufC8* iFirmwareMC;
+        
+    };
+
+#endif // WLANHWINITMAIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitpermparser.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class for parsing the tuning data stored in PERM server
+*
+*/
+
+
+#ifndef WLANHWINITPERMPARSER_H
+#define WLANHWINITPERMPARSER_H
+
+#include <e32base.h>
+#include "wlanhwinitinterface.h"
+
+// Initialization Data Block constants
+const TUint32 KInitMagic = 0x19171513;
+const TUint32 KInitTypeEnd = 0;
+const TUint32 KInitTypeNvMem = 1;
+const TUint32 KInitTypeCode = 2;
+
+//These offsets are defined in Initialization Data Block document.
+const TUint32 KNvMemTypeOffset = 4;
+const TUint32 KNvMemLengthOffset = 8;
+const TUint32 KNvMemValueOffset = 12;
+
+const TUint32 KNvMemTypeOffset32 = 1;
+const TUint32 KNvMemLengthOffset32 = 2;
+const TUint32 KNvMemValueOffset32 = 3;
+
+typedef TUint nvsUpdateList;
+#define UPDATE_MAC_ADDR 		0x0080
+#define UPDATE_ALL 				  0xFFFF
+
+/**
+* The class for parsing the tuning data stored in PERM server.
+*
+* @lib wlanhwinit.lib
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInitPermParser ) : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CWlanHwInitPermParser* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CWlanHwInitPermParser();
+
+        // New functions
+
+        TPtr8 GetNvsBuffer();
+        void CompareNvsBuffer();
+        TPtr8 GetTuningBuffer();
+        void UpdateNvsData(nvsUpdateList updateList);
+        void GenerateDefaultTuningData();
+        void SetMacAddress(const TMacAddr& pMacAddress);
+        
+        /**
+        * Return the parsed tuning values from perm data.
+        * @since Series 60 3.1
+        * @param aData Parsed tuning values.
+        * @return Status code.
+        */
+        TInt GetTuningValues(
+            TDes8& aData );
+
+        /**
+        * Set tuning values to perm data.
+        * @since Series 60 3.1
+        * @param aData Tuning values to be stored.
+        * @return Status code.
+        */
+        TInt SetTuningValues(TDesC8& aData, nvsUpdateList updateList);
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CWlanHwInitPermParser();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        TMacAddr iMacAddress;
+        /** The current tuning data. */
+        HBufC8* iTuningData;
+        HBufC8* iNvsData;
+    };
+
+#endif // WLANHWINITPERMPARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinittypes.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*   Header file mainly for TMacAddr definition
+*
+*/
+
+
+#ifndef WLANHWINITTYPES_H
+#define WLANHWINITTYPES_H
+
+
+//  INCLUDES
+#ifdef __PACKED
+#undef __PACKED
+#endif
+
+#define __PACKED
+
+/**
+* Length of the MAC address
+*/
+const TUint8 KMacAddrLength = 6;
+
+/**
+* The one and only MAC address struct
+*/
+#pragma pack( 1 )
+struct TMacAddr
+    {
+    /** the MAC address */
+    TUint8 iMacAddress[KMacAddrLength];
+    } __PACKED; // 6 bytes
+
+/**
+* Broadcast MAC Address.
+*/
+const TMacAddr KBroadcastMacAddr = {{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }};
+
+/**
+* MAC address that all zeros
+*/
+const TMacAddr KZeroMacAddr = {{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }};
+
+
+#endif      // WLANHWINITTYPES_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The implementation of CWlanHwInit class
+*
+*/
+
+
+#include "gendebug.h"
+#include "wlanhwinit.h"
+#include "wlanhwinitmain.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitTraces.h"
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInit::CWlanHwInit() :
+    iMain( NULL )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::CWlanHwInit()" ) ) );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::CWlanHwInit()" ); 
+    }
+
+void CWlanHwInit::ConstructL()
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::ConstructL()" ) ) );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_CONSTRUCTL, "CWlanHwInit::ConstructL()" );   
+    iMain = CWlanHwInitMain::NewL();
+    }
+
+EXPORT_C CWlanHwInit* CWlanHwInit::NewL()
+    {
+    OstTrace0( TRACE_API, CWLANHWINIT_NEWL, "CWlanHwInit::NewL()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_NEWL, "CWlanHwInit::NewL()" );  
+    CWlanHwInit* self = new( ELeave ) CWlanHwInit;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+EXPORT_C CWlanHwInit::~CWlanHwInit()
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::~CWlanHwInit()" ) ) );
+    OstTrace0( TRACE_API, DUP1_CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::~CWlanHwInit()" );
+    OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::~CWlanHwInit()" );  
+    delete iMain;
+    iMain = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwInitData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWlanHwInit::GetHwInitData(
+    const TUint8** aInitData,
+    TUint& aInitLength,
+    const TUint8** aFwData,
+    TUint& aFwLength )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwInitData()" ) ) );
+    OstTrace0( TRACE_API, DUP1_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData()" );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData()" );
+    
+    //BOB10d initialization data block is in one piece (NVS + FW)
+    //InitData is not needed
+    *aInitData = NULL;
+    aInitLength = 0;
+
+    iMain->GetHwInitData( aInitData, aInitLength, aFwData, aFwLength );
+    
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwInitData() aInitData: 0x%x, aInitLength: %d, aFwData: 0x%x, aFwLength: %d " ),aInitData,  aInitLength, aFwData, aFwLength  ) );
+    OstTrace1( TRACE_NORMAL, DUP2_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aInitData: 0x%x", aInitData );
+    OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aInitLength: %d", aInitLength );
+    OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aFwData 0x%x", aFwData );
+    OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aFwLength: %d", aFwLength ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetMacAddress
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::GetMacAddress(
+    TMacAddr& aMacAddress )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetMacAddress()" ) ) );
+    OstTrace0( TRACE_API, CWLANHWINIT_GETMACADDRESS, "CWlanHwInit::GetMacAddress()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_GETMACADDRESS, "CWlanHwInit::GetMacAddress()" ); 
+    return iMain->GetMacAddress( aMacAddress );
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwTestInitData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWlanHwInit::GetHwTestInitData(
+    const TUint8** aInitData,
+    TUint& aInitLength,
+    const TUint8** aFwData,
+    TUint& aFwLength )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestInitData()" ) ) );
+    OstTrace0( TRACE_API, CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData()" );
+    
+    //BOB10d initialization data block is in one piece (NVS + FW)
+    //InitData is not needed
+    *aInitData = NULL;
+    aInitLength = 0;
+    
+    iMain->GetHwTestInitData( aInitData, aInitLength, aFwData, aFwLength );
+
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestInitData() aInitData: 0x%x, aInitLength: %d, aFwData: 0x%x, aFwLength: %d " ),aInitData,  aInitLength, aFwData, aFwLength  ) );
+    OstTrace1( TRACE_NORMAL, DUP2_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aInitData: 0x%x", aInitData );
+    OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aInitLength: %d", aInitLength );
+    OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aFwData: 0x%x", aFwData );
+    OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aFwLength: %d", aFwLength ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwTestData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::GetHwTestData(
+    TUint aId,
+    TDes8& aData )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestData()" ) ) );
+    OstTrace0( TRACE_API, DUP1_CWLANHWINIT_GETHWTESTDATA, "CWlanHwInit::GetHwTestData()" );   
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_GETHWTESTDATA, "CWlanHwInit::GetHwTestData()" );  
+    return iMain->GetHwTestData( aId, aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::SetHwTestData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::SetHwTestData(
+    TUint aId,
+    TDesC8& aData )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::SetHwTestData()" ) ) );
+    OstTrace0( TRACE_API, DUP1_CWLANHWINIT_SETHWTESTDATA, "CWlanHwInit::SetHwTestData()" ); 
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_SETHWTESTDATA, "CWlanHwInit::SetHwTestData()" );
+    return iMain->SetHwTestData( aId, aData );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitmain.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,749 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class implementing HW specific initialization
+*
+*/
+
+
+#include <iscapi.h>
+#include "gendebug.h"
+#include <IscNokiaDefinitions.h>
+#include <pn_const.h>
+#include <tisi.h>
+#include <infoisi.h>
+#include <permisi.h>
+#include <f32file.h>
+#include <stddef.h>
+
+#include "bcmnvmem.h"
+#include "lmac_firmware.h"
+#include "plt_firmware.h"
+
+#include "wlanhwinitmain.h"
+#include "wlanhwinitpermparser.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitmainTraces.h"
+#endif
+
+/** The default MAC address. */
+const TMacAddr KWlanHwInitDefaultMacAddr = { { 0x00, 0xE0, 0xDE, 0xAD, 0xBE, 0xEF } };
+// ISI constants
+const TUint KWlanHwInitIsiBufferSize         = 1024;
+const TUint16 KWlanHwInitIsiPermGroupId      = 313;
+const TUint16 KWlanHwInitIsiPermIndex        = 0;
+const TUint16 KWlanHwInitIsiPermOffset       = 0;
+const TUint32 KWlanHwInitIsiPermDataSize     = (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb));
+
+/**
+* HW specific settings
+*/
+/* should be using TWlanTestPlatformSetting in wlanTestServer.h */
+enum TWlanHwInitTestSetting
+    {
+    EWlanHwInitTestSettingMacAddressPerm,
+    EWlanHwInitTestSettingMacAddressTemp,
+    EWlanHwInitTestSettingTuningData,
+    EWlanHwInitTestSettingTempTuningData
+    };
+
+const TUint KIsiRespMessagePadding = 128;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInitMain::CWlanHwInitMain() :
+	iMacAddressPerm( KWlanHwInitDefaultMacAddr ),
+	iMacAddressTemp( KWlanHwInitDefaultMacAddr ),
+	iPermParser( NULL ),
+	iTransactionId( 0 ),
+	ipNvsData ( 0 ),
+	iFirmwareMC ( 0 )
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:CWlanHwInitMain()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:CWlanHwInitMain()" );
+}
+
+void CWlanHwInitMain::ConstructL()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:ConstructL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitMain:ConstructL()" );
+	
+	iPermParser = CWlanHwInitPermParser::NewL();
+/**
+* Initialize default NVS data.
+*/
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+	
+	//take only the nvmem part of the IDB. IDB = nvmem + firmware.
+  TUint32* dataPtr = (TUint32*)normal_firmware;
+  //first there is the magic number
+  if (*dataPtr != KInitMagic) 
+    {
+	  TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)"), *dataPtr ) );
+	  OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)", *dataPtr );  
+	  User::Leave( KErrGeneral );
+    }
+  //then there is type  
+  dataPtr++;
+  const TUint32 type = *dataPtr;
+
+  //and after type, there is the lenght of the data  
+  dataPtr++;
+  const TUint32 len = *dataPtr;
+
+  if (type != KInitTypeNvMem)
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)"), type ) );  
+    OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)", type ); 
+    User::Leave( KErrGeneral );
+    }
+
+    //after the length there is data
+    dataPtr++;	
+	nvsPtr.Append( reinterpret_cast<const TUint8*>(dataPtr), len );
+	
+/**
+* Update device data from the CMT permanent storage.
+*/
+	
+//	Discard the return value, we'll use the default value
+//	if this fails.
+	TRAPD( ret, GetMacAddressL( iMacAddressPerm ) );
+	iMacAddressTemp = iMacAddressPerm;    
+	iPermParser->SetMacAddress(iMacAddressTemp);
+
+	TPtr8 tuningPtr( iPermParser->GetTuningBuffer() );
+	TRAP( ret, GetTuningDataL( tuningPtr ) );
+	if(ret != KErrNone)
+	{
+		iPermParser->GenerateDefaultTuningData();
+	}
+	
+	iPermParser->UpdateNvsData(UPDATE_ALL);
+}
+
+CWlanHwInitMain* CWlanHwInitMain::NewL()
+{
+    OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_NEWL, "CWlanHwInitMain::NewL()" );
+	CWlanHwInitMain* self = new( ELeave ) CWlanHwInitMain;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+}
+    
+CWlanHwInitMain::~CWlanHwInitMain()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:~CWlanHwInitMain()" ) ) );
+	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:~CWlanHwInitMain()" );
+	
+	delete iPermParser;
+	iPermParser = NULL;
+	delete ipNvsData;
+	ipNvsData = NULL; 
+	delete iFirmwareMC;
+	iFirmwareMC = NULL; 
+}
+
+// -----------------------------------------------------------------------------
+// CWlanHwInitMain::GetMacAddressL
+// -----------------------------------------------------------------------------
+//
+void CWlanHwInitMain::GetMacAddressL(TMacAddr& aMacAddress)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL()" ) ) );   
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL()" );
+	
+	TUint8 readReq[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ];
+	memset( readReq, 0, sizeof( readReq));
+	TPtr8 readPtr( readReq, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ);
+	
+	TIsiSend readMac( readPtr);
+	
+	readMac.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PHONE_INFO);
+	readMac.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	readMac.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, INFO_WLAN_INFO_READ_REQ);
+	readMac.Set16bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_REQ_OFFSET_FILLERBYTE1, 0);
+	readMac.Complete();
+	
+	TUint8 readResp[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP];
+	memset( readResp, 0, sizeof( readResp));
+	TPtr8 respPtr( readResp, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP );
+	
+	SendIsiMessageL( readPtr, respPtr );
+	
+	TIsiReceiveC macResp( respPtr);
+	
+	if ( ( macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PHONE_INFO ) || (macResp.Get8bit(ISI_HEADER_OFFSET_MESSAGEID) != INFO_WLAN_INFO_READ_RESP) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - resource = %02X, message id = %02X" ),
+		macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - resource = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - message id = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+		
+		User::Leave( KErrGeneral );
+	}
+
+	if ( macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) != INFO_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - request failed, status = %02X" ),
+		macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - request failed, status = 0x%x", macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) );	
+		User::Leave( KErrGeneral );
+	}    
+	
+	TMacAddr tempMac;
+	
+	memcpy( &tempMac.iMacAddress, macResp.GetData( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_ADDRESS, INFO_WLAN_MAC_ADDR_LEN).Ptr(), INFO_WLAN_MAC_ADDR_LEN);
+	for( TInt i=0; i<INFO_WLAN_MAC_ADDR_LEN; i++)
+		{
+		aMacAddress.iMacAddress[INFO_WLAN_MAC_ADDR_LEN - i - 1] = tempMac.iMacAddress[i];
+		}
+	
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetTuningDataL(TDes8& aTuningData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL()" );
+	
+	TUint8 readBuf[ ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ];
+	memset( &readBuf, 0, sizeof( readBuf));
+	TPtr8 readReq( readBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ);
+	
+	TIsiSend sendReq( readReq);
+	
+	sendReq.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+	sendReq.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	sendReq.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_READ_REQ);
+	
+	sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+	sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+	sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_OFFSET, KWlanHwInitIsiPermOffset);
+	sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+	sendReq.Complete();
+	
+	HBufC8* respBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+	CleanupStack::PushL( respBuf );
+	respBuf->Des().FillZ();
+	
+	TPtr8 readResp( respBuf->Des());
+	
+	SendIsiMessageL( readReq, readResp);
+	
+	TIsiReceiveC recv( respBuf->Des());
+	
+	if ( ( recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_READ_RESP ) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - resource = %02X, message id = %02X" ),
+		recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP8_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - resource = %x", recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP9_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - message id = %x", recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+	}
+
+	if ( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, status = %02X" ),
+		recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, status = 0x%x", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) );	
+		User::Leave( KErrGeneral );
+	}       
+	
+	if( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) != 1)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d" ),
+		recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) );		
+		User::Leave( KErrNotFound );
+	}
+	
+	if( recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) != PERM_SB_PM_DATA)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d" ),
+		recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d", recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) );		
+		User::Leave( KErrNotFound );
+	}
+	
+	TUint32 size = recv.Get32bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SIZE);
+	
+	if( size != KWlanHwInitIsiPermDataSize)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u" ), size ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u" ), KWlanHwInitIsiPermDataSize ) );
+		OstTrace0( TRACE_IMPORTANT, DUP5_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" );	
+		OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u", size );
+		OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u", KWlanHwInitIsiPermDataSize );		
+		User::Leave( KErrTooBig ); 
+	}
+	
+	aTuningData.Append( recv.GetData( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_DATA, size));
+	
+	CleanupStack::PopAndDestroy( respBuf);
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SetTuningDataL(TDesC8& aTuningData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL()" );
+	
+	HBufC8* writeBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+	CleanupStack::PushL( writeBuf );
+	writeBuf->Des().FillZ();
+
+	TPtr8 writeReq( writeBuf->Des());
+
+	TIsiSend writeSend( writeReq);
+
+	writeSend.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+	writeSend.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	writeSend.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_WRITE_REQ);
+
+	writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+	writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+	writeSend.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+	writeSend.CopyData( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_DATA, aTuningData);
+	writeSend.Complete();
+
+	TUint8 respBuf[ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding];
+	memset( &respBuf, 0, sizeof( respBuf));
+	TPtr8 writeResp( respBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding);
+
+	SendIsiMessageL( writeReq, writeResp );
+
+	TIsiReceiveC resp( writeResp);
+
+	if ( ( resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_WRITE_RESP ) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - resource = %02X, message id = %02X" ), 
+					resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID),
+					resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - resource = %x", resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - message id = 0x%x", resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );		
+	}
+
+	if ( resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - request failed, status = %02X" ),
+					resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - request failed, status = 0x%x", resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) );
+		
+		User::Leave( KErrGeneral );
+	}
+
+	CleanupStack::PopAndDestroy( writeBuf );
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetHwTestData(TUint aId, TDes8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData()" );	
+	
+	switch ( aId )
+	{
+		case EWlanHwInitTestSettingMacAddressPerm:
+			aData.Copy( &iMacAddressPerm.iMacAddress[0], KMacAddrLength );
+		break;
+
+		case EWlanHwInitTestSettingMacAddressTemp:
+			aData.Copy( &iMacAddressTemp.iMacAddress[0], KMacAddrLength );
+		break;
+
+		case EWlanHwInitTestSettingTuningData:            
+			iPermParser->GetTuningValues( aData );
+		break;
+
+		case EWlanHwInitTestSettingTempTuningData:
+		default:
+			TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData() - not supported (%d)" ), aId ) );
+			OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData() - not supported (%d)", aId );			
+			return KErrNotSupported;
+	}
+	
+	return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::SetHwTestData(TUint aId, TDesC8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData()" );	
+	TInt ret( KErrNone );
+	
+	switch ( aId )
+	{
+		case EWlanHwInitTestSettingMacAddressTemp:
+		    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingMacAddressTemp" );		    
+			Mem::Copy( &iMacAddressTemp.iMacAddress[0], aData.Ptr(), KMacAddrLength );
+			iPermParser->SetMacAddress(iMacAddressTemp);
+			iPermParser->UpdateNvsData(UPDATE_MAC_ADDR);
+		break;
+
+		case EWlanHwInitTestSettingTuningData:
+		{
+			OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTuningData" );
+			iPermParser->SetTuningValues(aData, UPDATE_ALL);
+			TPtrC8 cmtDataPtr( iPermParser->GetTuningBuffer() );
+			TRAP( ret, SetTuningDataL(cmtDataPtr) );
+			iPermParser->UpdateNvsData(UPDATE_ALL);
+		}
+      break;
+
+		case EWlanHwInitTestSettingTempTuningData:
+		{
+		    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingTempTuningData" ) ) );
+		    OstTrace0( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTempTuningData" );
+		    iPermParser->SetTuningValues(aData, UPDATE_ALL);
+		    iPermParser->UpdateNvsData(UPDATE_ALL);
+		}
+		break;
+		
+		case EWlanHwInitTestSettingMacAddressPerm:
+		default:
+			TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() - no such id (%d)!" ), aId ) );
+			OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() - no such id (%d)", aId );
+			ret = KErrNotSupported;
+	    break;
+	}
+	
+	return ret;
+}
+
+
+TBool CWlanHwInitMain::IsMMCFirmwareFound()
+    {
+#ifdef LOAD_FW_FROM_MMC
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::IsMMCFirmwareFound()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain::IsMMCFirmwareFound()" );
+	
+	_LIT(KSearchPath,"E:\\firmware\\*.*");
+	_LIT(KFilePath,"E:\\firmware\\");
+	  
+	// Check if the firmware is already loaded,
+	// free the memory and continue
+	  
+	  if (iFirmwareMC)
+	  {
+	  	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain: Memory for MMC Firmware already reserved" ) ) );
+	  	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain: Memory for MMC Firmware already reserved" );
+	  	return ETrue;
+	  }
+	  
+	  // Init store	  
+	  RFs fs;
+	  RFile file;
+	  CDir* dirList;
+	  TInt fileSize = -1;
+	  TBuf<60> fileName;
+	  fileName = KFilePath;
+	  
+    
+	  // Connect to the file system	
+	  if ( fs.Connect() != KErrNone)
+	  {
+	  	return EFalse;
+	  }
+	  
+	  // If returns an error, the folder is not found
+	  // -> return false;	  
+	  if (fs.GetDir(KSearchPath,
+          		     KEntryAttMaskSupported,
+          		     ESortByName,
+                	 dirList) != KErrNone )
+	  {
+	  	fs.Close();
+	  	delete dirList;
+	  	return EFalse;
+	  }
+                
+ 	  // If no file is not found, return false.    
+	  if (dirList->Count() == 0)
+	  {
+	  	fs.Close();	  	
+	  	delete dirList;
+	  	return EFalse;
+	  }         
+      
+    // Take the first file in the list, further files
+    // are not handled           
+	  fileName.Append ((*dirList)[0].iName);  // Assume there is enough space, otherwise panics...
+	  
+	  // Try to open the firmware file
+	  if ( file.Open(fs, fileName, EFileStream != KErrNone))
+	  {
+	  	delete dirList;
+	  	fs.Close();
+	  	return EFalse;
+	  }
+	   
+	  // Get the size of the file 
+	  if (file.Size(fileSize) != KErrNone)
+	  {
+	  	delete dirList;
+	  	file.Close();
+	  	fs.Close();
+	  	return EFalse;
+	  	
+	  }
+    
+    // Reserve memory from heap for it
+    TRAPD(err, iFirmwareMC = HBufC8::NewL(fileSize));
+    
+    if (err != KErrNone)
+    {
+    	delete dirList;
+    	file.Close();
+      fs.Close();
+    	return EFalse;
+    }
+
+    // Get a pointer and read the contents
+    // of the file.
+	  TPtr8 pBuf = iFirmwareMC->Des();
+	  if (file.Read(pBuf) != KErrNone)
+	  {
+	  	delete dirList;
+    	file.Close();
+      fs.Close();
+    	return EFalse;
+	  }
+	  
+	  // Successful	  
+	  file.Close();
+    fs.Close();
+    delete dirList;
+
+	  return ETrue;	
+
+#else
+	return EFalse;
+#endif // LOAD_FW_FROM_MMC	
+		}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwInitData
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetHwInitData(const TUint8** ppConfigData, TUint& configLength, const TUint8** ppNvsData, TUint& nvsLength )
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwInitData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain:GetHwInitData()" );
+	
+	// Temporary pointer for firmware
+	const TUint8* fwPtr;
+	TUint fwSize = 0;	
+		
+	// Parse NVS
+	iPermParser->CompareNvsBuffer();
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+	
+	// Check if firmware can be found from the MMC	
+#ifdef LOAD_FW_FROM_MMC  // Enable MMC loading here
+  if (IsMMCFirmwareFound())
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" ) ) );	
+  	  OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" );
+  	  fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+  	  fwSize = iFirmwareMC->Length();  	  	
+      }
+  else
+	  {
+	  TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" ) ) );		
+      OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" );
+      fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+      fwSize = (sizeof( normal_firmware ));
+	  }	
+#else
+  fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+  fwSize = (sizeof( normal_firmware ));
+#endif	
+	
+	nvsLength = fwSize; 
+	
+	// Reserve memory if it has not yet already been reserved
+	if (ipNvsData == NULL)
+	{
+		ipNvsData = (TUint8*)User::Alloc(nvsLength);    
+		if (!ipNvsData)
+		{
+			// Out of memory
+			ASSERT(0);
+		}	
+	}	
+	
+	// Copy NVS data to correct position
+	//first copy the whole firmware
+	Mem::Copy(ipNvsData, fwPtr, nvsLength);
+		
+	// Length of NVS
+	*reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+	
+	// Copy NVS data to the NVS offset
+	Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+			
+	*ppNvsData = ipNvsData;
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetMacAddress
+// Status : Draft
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetMacAddress(TMacAddr& aMacAddress)
+{
+	aMacAddress = iMacAddressPerm;
+	return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestInitData
+// Status : Draft
+// ---------------------------------------------------------
+//    
+void CWlanHwInitMain::GetHwTestInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestInitData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain:GetHwTestInitData()" );
+
+	// Temporary pointer for firmware
+	const TUint8* fwPtr;
+	TUint fwSize = 0;	
+		
+	// Parse NVS
+	iPermParser->CompareNvsBuffer();
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+
+	// Check if firmware can be found from the MMC	
+#ifdef LOAD_FW_FROM_MMC  // Enable MMC loading here
+  if (IsMMCFirmwareFound())
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" ) ) );	
+  	  OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" );
+  	  fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+  	  fwSize = iFirmwareMC->Length();  	  	
+      }
+  else
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" ) ) );		
+      OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" );
+      fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+      fwSize = (sizeof( plt_firmware ));
+      }	
+#else
+  fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+  fwSize = (sizeof( plt_firmware ));
+#endif	
+		
+	aFwLength = fwSize; 
+	
+	// Reserve memory if it has not yet already been reserved
+	if (ipNvsData == NULL)
+	{
+		ipNvsData = (TUint8*)User::Alloc(aFwLength);     
+		if (!ipNvsData)
+		{
+			// Out of memory
+			ASSERT(0);
+		}	
+	}	
+	
+	// Copy NVS data to correct position
+	//first copy the whole firmware
+	Mem::Copy(ipNvsData, fwPtr, aFwLength);
+		
+	// Length of NVS
+	*reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+	
+	// Copy NVS data to the NVS offset
+	Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+			
+	*aFwData = ipNvsData;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SendIsiMessageL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SendIsiMessageL(TDes8& aRequest, TDes8& aReply)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL()" );
+	
+	RIscApi iscapi;
+	TRequestStatus status;
+	const TUint16 channelId = EIscNokiaStartup;
+
+	iscapi.Open( channelId, status );// codescanner::open IscApi::Open doesn't have return value. Error codes are passed in status parameter.
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d" ), status.Int() ) );
+		OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d", status.Int() );
+		User::Leave( status.Int() );
+	}
+	CleanupClosePushL( iscapi );
+
+	TInt ret = iscapi.Send( aRequest );
+	if ( ret != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d" ), ret ) );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d", ret );
+		User::Leave( ret );
+	}
+
+	TUint16 neededLength = 0;
+
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply Size() %d" ),aReply.Size() ) );
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxLength() %d" ),aReply.MaxLength() ) );
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxSize() %d" ),aReply.MaxSize() ) );
+	OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply Size() %d", aReply.Size() );
+	OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxLength() %d", aReply.MaxLength() );
+	OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxSize() %d", aReply.MaxSize() );
+	
+	iscapi.Receive( status, aReply, neededLength );
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d" ), status.Int() ) );
+		TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:neededLength %d" ),neededLength ) );
+		OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d", status.Int() );
+		OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:neededLength %d", neededLength );		
+		User::Leave( status.Int() );
+	}
+
+	CleanupStack::PopAndDestroy( &iscapi );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitpermparser.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class for parsing the tuning data stored in PERM server
+*
+*/
+
+
+#include <stddef.h>
+#include <es_sock.h>
+#include "gendebug.h"
+#include "wlanhwinitpermparser.h"
+#include "bcmnvmem.h"
+#include "lmac_firmware.h"
+#include "plt_firmware.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitpermparserTraces.h"
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInitPermParser::CWlanHwInitPermParser() :
+    iTuningData(NULL),
+    iNvsData(NULL)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CWlanHwInitPermParser()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:CWlanHwInitPermParser()" );	
+}
+
+
+void CWlanHwInitPermParser::ConstructL()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:ConstructL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CONSTRUCTL, "CWlanHwInitPermParser:ConstructL()" );	
+	iTuningData = HBufC8::NewL( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) );   
+	iNvsData = HBufC8::NewL( sizeof(WlanHalApi::SNvMem) );   
+}
+
+
+CWlanHwInitPermParser* CWlanHwInitPermParser::NewL()
+{
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_NEWL, "CWlanHwInitPermParser::NewL()" );
+	CWlanHwInitPermParser* self = new( ELeave ) CWlanHwInitPermParser;
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+
+	return self;
+}
+
+
+CWlanHwInitPermParser::~CWlanHwInitPermParser()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:~CWlanHwInitPermParser()" ) ) );
+	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:~CWlanHwInitPermParser()" );
+	delete iTuningData;
+	iTuningData = NULL;
+	delete iNvsData;
+	iNvsData = NULL;
+}
+
+void CWlanHwInitPermParser::CompareNvsBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer()") ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer()" );
+	TUint8* pNvsBuffer = (TUint8*)iNvsData->Ptr();
+	TUint8* normalFirmwareNvsBuffer = (TUint8*) (normal_firmware + KNvMemValueOffset32);
+	TUint8* pltFirmwareNvsBuffer = (TUint8*) (plt_firmware + KNvMemValueOffset32);
+	
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d"), sizeof(WlanHalApi::SNvMem) ) );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d", sizeof(WlanHalApi::SNvMem));
+	
+	/* checking the changes that have been made */
+	for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++)
+	{
+		if(normalFirmwareNvsBuffer[i] != pNvsBuffer[i])
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Normal NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, normalFirmwareNvsBuffer[i], pNvsBuffer[i]) );
+			OstTraceExt3( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:Normal NVS changed[0x%x]:orig 0x%x, new 0x%x", i, normalFirmwareNvsBuffer[i], pNvsBuffer[i] );
+		}
+	}
+
+	/* also for plt firmware */
+	for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++)
+	{
+		if(pltFirmwareNvsBuffer[i] != pNvsBuffer[i])
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:PLT NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, pltFirmwareNvsBuffer[i], pNvsBuffer[i]) );
+			OstTraceExt3( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:PLT NVS changed[0x%x]:orig 0x%x, new 0x%x", i, pltFirmwareNvsBuffer[i], pNvsBuffer[i] );		
+		}
+	}	
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetNvsBuffer
+// ---------------------------------------------------------
+//
+TPtr8 CWlanHwInitPermParser::GetNvsBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetNvsBuffer()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETNVSBUFFER, "CWlanHwInitPermParser:GetNvsBuffer()" );
+	return iNvsData->Des();
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetTuningBuffer
+// ---------------------------------------------------------
+//
+TPtr8 CWlanHwInitPermParser::GetTuningBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningBuffer()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGBUFFER, "CWlanHwInitPermParser:GetTuningBuffer()" );
+	return iTuningData->Des();
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::UpdateNvsData
+// ---------------------------------------------------------
+//
+void CWlanHwInitPermParser::UpdateNvsData(nvsUpdateList updateList)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData()" ) ) );
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData()" );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:updateList 0x%x", updateList );
+	
+	WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr();
+
+	if( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) == iTuningData->Length() ) //only use if the tuning data is the same size as the structure...
+	{
+		if(updateList == UPDATE_ALL)
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" ) ) );
+			OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" );
+			//void * memcpy ( void * destination, const void * source, size_t num );
+			memcpy( (&pNvsStruct->PL_2G_hdb), iTuningData->Ptr(), iTuningData->Length() );		
+		}
+	}
+	else
+	{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:size mismatch data-%d, structure-%d"), iTuningData->Length(), sizeof(WlanHalApi::SNvMem)) );
+			OstTraceExt2( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:size mismatch data-%d, structure-%d", iTuningData->Length(), sizeof(WlanHalApi::SNvMem) );			
+	}
+
+	if(updateList & UPDATE_MAC_ADDR)
+	{
+		//Update Mac address
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_MAC_ADDR" ) ) );
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) );
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5]) );
+		OstTrace0( TRACE_NORMAL, DUP4_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UPDATE_MAC_ADDR" );
+		TBuf<80> buf;
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] );
+		TPtrC16 currentMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP5_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", currentMacPtr );		
+		buf.Zero();
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5] );
+		TPtrC16 newMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP6_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", newMacPtr );
+		
+		/* Copy the MAC address */
+		for( TUint32 i = 0 ; i < KMacAddrLength ; i++)
+		{
+			pNvsStruct->whamac[i] = iMacAddress.iMacAddress[i];
+		}
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) );
+		buf.Zero();
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] );
+		TPtrC16 finalMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP7_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", finalMacPtr );
+	}
+
+	CompareNvsBuffer();
+}
+
+
+void CWlanHwInitPermParser::GenerateDefaultTuningData(void)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GenerateDefaultTuningData()" ) ) );    
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GENERATEDEFAULTTUNINGDATA, "CWlanHwInitPermParser:GenerateDefaultTuningData()" );
+	
+	//use nvs file to create default tuning data
+	TPtr8 tuningPtr( GetTuningBuffer() );
+	WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr();
+	
+	tuningPtr.Copy(&pNvsStruct->PL_2G_hdb, (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)));	
+}
+
+void CWlanHwInitPermParser::SetMacAddress(const TMacAddr& pMacAddress)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetMacAddress()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETMACADDRESS, "CWlanHwInitPermParser:SetMacAddress()" );
+	
+	memcpy(iMacAddress.iMacAddress, pMacAddress.iMacAddress, KMacAddrLength);
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetTuningValues
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitPermParser::GetTuningValues(TDes8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningValues()" ) ) );    
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGVALUES, "CWlanHwInitPermParser:GetTuningValues()" );
+	
+	aData.Copy(GetTuningBuffer());
+
+	return KErrNone;
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::SetTuningValues
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitPermParser::SetTuningValues(TDesC8& aData, nvsUpdateList updateList)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetTuningValues()" ) ) );
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:SetTuningValues()" );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:updateList 0x%x", updateList );
+	
+	TPtr8 tuningPtr( GetTuningBuffer() );
+	TUint8* pStoredTuningData = (TUint8*)tuningPtr.Ptr();
+		
+	if(updateList & UPDATE_ALL)
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_ALL" ) ) );
+		OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:UPDATE_ALL" );		
+		//void * memcpy ( void * destination, const void * source, size_t num );						
+		memcpy( pStoredTuningData, aData.Ptr(), (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb) ) );		
+	}
+
+	return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/traces/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+invariant_source.mmp
+variant_source.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/invariant_source.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,12 @@
+TARGET			invariant_source
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+SOURCEPATH		../src
+SOURCE			inv_source.cpp
+
+USERINCLUDE		../traces
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/variant_source.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,21 @@
+#include <var.hrh>
+
+TARGET			variant_source
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000003
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/internal
+
+SOURCEPATH		../src
+SOURCE			var_source1.cpp
+#if defined(MACRO_X)
+SOURCE			var_source2.cpp
+#endif
+#if defined(MACRO_Y)
+SOURCE			var_source3.cpp
+#endif
+
+USERINCLUDE		../traces
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/inv_source.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "inv_sourceTraces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "invariant source";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE0, "Invariant Source" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source1.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source1Traces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "variant source 1";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "Variant Source 1" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source2.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source2Traces.h"
+#endif
+
+#include "e32def.h"
+
+TInt var_source2()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "Variant Source 2" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source3.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source3Traces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt var_source3()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "Variant Source 3" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/OstTraceDefinitions.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <OpenSystemTrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/use_tc.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+	<!-- test trace compiler -->
+	<var name="tc_var_base">
+		<set name='USE_TRACE_COMPILER' value='1' />
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+	<var name="tc_var1" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/var1' />
+	</var>
+	<var name="tc_var2" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/var2' />
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var1/var.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+#define MACRO_X
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var2/var.hrh	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,3 @@
+
+#define MACRO_Y
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/CommonFramework.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+unfrozensymbols.mmp
+exeusingunfrozen.mmp
+unfrozensymbols_with_deffile.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/exeusingunfrozen.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test_unfrozen
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib unfrozensymbols.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/freeze.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+unfrozensymbols_for_freeze.mmp
+frozen_with_removed_export.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/frozen_with_removed_export.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp copy
+*
+*/
+
+
+TARGET			frozen_with_removed_export.dll
+TARGETTYPE		dll
+UID				0xE800004C
+CAPABILITY		All -TCB
+VENDORID		0x70000001
+SOURCE			missing_symbols.cpp
+SYSTEMINCLUDE	/epoc32/include
+LIBRARY			euser.lib
+DEFFILE			frozen/~/frozen.def
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/missing_symbols.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This program creates a dll.
+*
+*/
+
+
+#include "unfrozensymbols.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+extern "C" {
+EXPORT_C TInt test_dll(void)
+{
+	return 0;
+}
+}
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+//*This is commented out to provide a source file with a missing export for    *
+//*test: dll_armv5_winscw_freeze.py (parts b & c)                              *
+//
+//EXPORT_C void CMessenger::ShowMessage()
+//	{
+//	_LIT(KFormat1,"%S\n");
+//	iConsole.Printf(KFormat1, iString); // notify completion
+//	}
+
+EXPORT_C void CMessenger::ShowMessage2()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenarm.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME
+	_ZTV10CMessenger @ 4 NONAME
+	test_dll @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenwins.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,5 @@
+EXPORTS
+	test_dll @ 1 NONAME
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 3 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="unfrozen test";
+
+extern "C" {
+
+IMPORT_C TInt test_dll();
+
+}
+
+TInt E32Main()
+{
+	test_dll();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "unfrozensymbols.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+extern "C" {
+EXPORT_C TInt test_dll(void)
+{
+	return 0;
+}
+}
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+EXPORT_C void CMessenger::ShowMessage2()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+	IMPORT_C void ShowMessage2();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        unfrozensymbols.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        unfrozensymbols.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+
+#if 0
+#if defined(WINS)
+    deffile ./missingwins.def
+#elif defined(MARM)
+    deffile ./missingarm.def
+#endif
+#endif 
+
+exportunfrozen
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_for_freeze.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp copy
+*
+*/
+
+
+TARGET			unfrozensymbols_for_freeze.dll
+TARGETTYPE		dll
+UID				0xE800004C
+CAPABILITY		All -TCB
+VENDORID		0x70000001
+SOURCE			unfrozensymbols.cpp
+SYSTEMINCLUDE	/epoc32/include
+LIBRARY			euser.lib
+DEFFILE			frozen/~/frozen.def
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_with_deffile.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+* using relative paths for sourcepath and user includes
+* exports are unfrozen
+*
+*/
+
+
+TARGET        unfrozensymbols2.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        unfrozensymbols.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+
+#if defined(WINS)
+    deffile ./partfrozenwins.def
+#elif defined(MARM)
+    deffile ./partfrozenarm.def
+#endif
+
+exportunfrozen
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_MMPFILES
+versioned_lib01.mmp
+versioned_lib02.mmp
+versioned_lib03.mmp
+versioned_lib04.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/dllversioning.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+// DLL version selection and explicit dll versions
+testver.mmp
+testver_20.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+#include "testver.h"
+
+char test[]="Simple test";
+
+
+TInt E32Main()
+{
+	int i = CMessenger::somebldymethod();
+	return i;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "testver.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+#if ! defined(VERSION30)
+EXPORT_C int CMessenger::somebldymethod()
+   {
+   return 1;
+   }
+#endif
+
+
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.h	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+public:
+#if !defined(VERSION30) || defined(WINS)
+	IMPORT_C static int somebldymethod();
+#endif
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        testver.dll
+version       3.0
+TARGETTYPE    dll
+
+UID             0xE800004D
+CAPABILITY   All -TCB
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        testver.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+LIBRARY       euser.lib
+MACRO VERSION30
+
+#if defined(WINS)
+    deffile ./testver_wins.def
+#elif defined(MARM)
+    deffile ./testver_eabi.def
+#endif
+
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_20.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        testver.dll
+VERSION       2.0 explicit
+TARGETTYPE    dll
+
+UID             0xE800004D
+CAPABILITY   All -TCB
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        testver.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+LIBRARY       euser.lib
+MACRO VERSION20
+
+#if defined(WINS)
+    deffile ./testver_wins.def
+#elif defined(MARM)
+    deffile ./testver_eabi.def
+#endif
+
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME
+	_ZTV10CMessenger @ 4 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi{00020000}.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger14somebldymethodEv @ 2 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 3 NONAME
+	_ZTI10CMessenger @ 4 NONAME
+	_ZTV10CMessenger @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins{00020000}.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib.def	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib01.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        versionedlib01.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib02.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        versionedlib.02.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib03.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* versoned_lib03.mmp
+*
+*/
+
+
+TARGET        versioned.lib.03.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib04.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        version.ed.lib.04.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/xver_20.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET xver_20
+TARGETTYPE exe
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib testver{2.0}.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/bld.inf	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/simple.mmp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+#warning Some nasty un-escaped characters that break XML <a> & & >sdfsdf 
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+DEBUGGABLE
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/test.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	TInt t = 1;
+	t = 3;
+	TInt s = 5;
+	s = t + t*3;
+	t = s + s*3;
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/timeout.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,57 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.description = "test that long commands time out and get retried"
+	
+	exitCode = "15"
+	if t.onWindows:
+		exitCode = "128" # why are they different?
+
+	t.id = "60a"
+	t.name = "timeout"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -f-"
+
+	t.mustmatch = [
+		"status exit='failed' code='" + exitCode + "' attempt='1'",
+	]
+	t.errors = -1
+	t.returncode = 1
+	t.run()
+	
+	t.id = "60b"
+	t.name = "timeout with retries"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -t 3 -f-"
+
+	t.mustmatch = [
+		"status exit='retry' code='" + exitCode + "' attempt='1'",
+		"status exit='retry' code='" + exitCode + "' attempt='2'",
+		"status exit='failed' code='" + exitCode + "' attempt='3'",
+	]
+	t.errors = -1
+	t.returncode = 1
+	t.run()
+	
+	t.id = "60"
+	t.name = "timeout"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/toolcheck.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,94 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0092a"
+	t.name = "toolcheck"
+	t.description = """Test toolcheck works properly, with 3 options: on, off and forced. 
+				TOOL1 3 4 and 5 are expected to fail and 2 to pass"""
+	result = SmokeTest.PASS
+	toolcheckDir = os.environ["SBS_HOME"].replace("\\","/") + "/test/smoke_suite/test_resources/toolcheck"
+
+	# toolcheck ON
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=on"
+	
+	t.mustmatch = [
+		".*tool 'TOOLCHECK1' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK3' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK4' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK5' from config 'none' did not return version.*"
+		]
+	t.mustnotmatch = [
+		".*TOOLCHECK2.*",
+		".*TOOLCHECK6.*"
+		]
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# toolcheck OFF
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=off"
+
+	t.id = "0092b"
+	t.mustmatch = []
+	t.mustnotmatch = [
+		".*TOOLCHECK1.*",
+		".*TOOLCHECK3.*",
+		".*TOOLCHECK4.*",
+		".*TOOLCHECK5.*",
+		".*TOOLCHECK6.*"
+		]
+	t.errors = 0
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# force toolcheck
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=forced"
+
+	t.id = "0092c"
+	t.mustmatch = [
+		".*tool 'TOOLCHECK1' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK3' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK4' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK5' from config 'none' did not return version.*"
+		]
+	t.mustnotmatch = [
+		".*TOOLCHECK2.*",
+		".*TOOLCHECK6.*"
+	]
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0092"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():	
+	t = SmokeTest()
+	t.id = "52"
+	t.name = "tools"
+	# Do not run with j > 1 because of known issues
+	t.command = "sbs -b smoke_suite/test_resources/tools/bld.inf -c tools -j1"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.ilk",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.pdb",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.pdb",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.lib",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.pdb",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib2.lib",
+		"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/tools/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/tools/tool_lib2.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tools/bld.inf', [
+		"tool_exe_exe/tools/deb/tool_exe_a.obj",
+		"tool_exe_exe/tools/deb/tool_exe_a.sbr",
+		"tool_exe_exe/tools/deb/tool_exe_b.obj",
+		"tool_exe_exe/tools/deb/tool_exe_b.sbr",
+		"tool_exe_exe/tools/rel/tool_exe_a.obj",
+		"tool_exe_exe/tools/rel/tool_exe_a.sbr",
+		"tool_exe_exe/tools/rel/tool_exe_b.obj",
+		"tool_exe_exe/tools/rel/tool_exe_b.sbr",
+		"tool_lib1_lib/tools/deb/tool_lib1_a.obj",
+		"tool_lib1_lib/tools/deb/tool_lib1_a.sbr",
+		"tool_lib1_lib/tools/deb/tool_lib1_b.obj",
+		"tool_lib1_lib/tools/deb/tool_lib1_b.sbr",
+		"tool_lib1_lib/tools/rel/tool_lib1_a.obj",
+		"tool_lib1_lib/tools/rel/tool_lib1_a.sbr",
+		"tool_lib1_lib/tools/rel/tool_lib1_b.obj",
+		"tool_lib1_lib/tools/rel/tool_lib1_b.sbr",
+		"tool_lib2_lib/tools/deb/tool_lib2_a.obj",
+		"tool_lib2_lib/tools/deb/tool_lib2_a.sbr",
+		"tool_lib2_lib/tools/deb/tool_lib2_b.obj",
+		"tool_lib2_lib/tools/deb/tool_lib2_b.sbr",
+		"tool_lib2_lib/tools/rel/tool_lib2_a.obj",
+		"tool_lib2_lib/tools/rel/tool_lib2_a.sbr",
+		"tool_lib2_lib/tools/rel/tool_lib2_b.obj",
+		"tool_lib2_lib/tools/rel/tool_lib2_b.sbr",
+	])
+	t.run("windows") # no MSVC compiler on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools2.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,78 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "51"
+	t.name = "tools2"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/bld.inf -c tools2"
+
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib1.a",
+		"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib2.a",
+		"$(EPOCROOT)/epoc32/release/tools2/deb/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib1.a",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib2.a",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+	]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+		"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_b.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_b.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_a.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_b.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_a.o",
+		"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_a.o"
+		])
+			
+	t.run("windows") # tools2 output is platform dependent
+
+	if t.result == SmokeTest.SKIP:
+		t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/tools/tool_exe"
+		]
+		t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_a.o"
+			])
+		t.run("linux") # tools2 output is platform dependent
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_general.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,213 @@
+
+from raptor_tests import SmokeTest
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	failed = []
+
+	t = SmokeTest()
+	t.description = "Testcases (ID 0101a - 0101d) test trace compiler"
+	# General test for trace compiler, which generates
+	# 1. trace headers like <source>Traces.h
+	# 2. fixed_id.definitions
+	# 3. dictionary files like <project name>_<UID>_Dictionary.xml
+	# 4. trace definitions like <project name>_<UID>_TraceDefinitions.h
+	t.id = "101a"
+	t.name = "TC_general"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler"	
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h",	
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/testTC_0x1000008d_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/testTC_0x1000008d_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf', [
+		"testtc_dll/armv5/udeb/wlanhwinit.o",
+		"testtc_dll/armv5/udeb/wlanhwinit.o.d",
+		"testtc_dll/armv5/udeb/wlanhwinitmain.o",
+		"testtc_dll/armv5/udeb/wlanhwinitmain.o.d",
+		"testtc_dll/armv5/udeb/wlanhwinitpermparser.o",
+		"testtc_dll/armv5/udeb/wlanhwinitpermparser.o.d",
+		"testtc_dll/armv5/udeb/testTC_udeb_objects.via",
+		"testtc_dll/armv5/udeb/testTC{000a0000}.def",
+		"testtc_dll/armv5/urel/wlanhwinit.o",
+		"testtc_dll/armv5/urel/wlanhwinit.o.d",
+		"testtc_dll/armv5/urel/wlanhwinitmain.o",
+		"testtc_dll/armv5/urel/wlanhwinitmain.o.d",
+		"testtc_dll/armv5/urel/wlanhwinitpermparser.o",
+		"testtc_dll/armv5/urel/wlanhwinitpermparser.o.d",	
+		"testtc_dll/armv5/urel/testTC_urel_objects.via",
+		"testtc_dll/armv5/urel/testTC{000a0000}.def",
+		"testtc_dll/tracecompile_testTC_1000008d.done"
+	])
+	# Trace compiler doesn't work on Linux for time being. Once it's fixed, will apply all 
+	# trace compiler tests to linux as well.
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+	# General CLEAN test for trace compiler outputs
+	t = AntiTargetSmokeTest()
+	t.id = "101b"
+	t.name = "TC_general_CLEAN"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler CLEAN" 	
+	t.antitargets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h"
+		]
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"testtc_dll/tracecompile_testTC_1000008d.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+		
+	t = SmokeTest()
+	t.id = "101c"
+	t.name = "TC_bv_path"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf -c armv5.tracecompiler" 
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/HelloWorldTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/HelloWorld_0xe78a5aa3_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/HelloWorld_0xe78a5aa3_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld.o",
+		"helloworld_exe/armv5/udeb/HelloWorld.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld.o",
+		"helloworld_exe/armv5/urel/HelloWorld.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_urel_objects.via",
+		"helloworld_exe/tracecompile_HelloWorld_e78a5aa3.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+	
+	# 101d-101f test trace compiler auto mechanism, which is used to avoid wasting time on source 
+	# containing no osttraces.
+	# Trace compiler only runs when there are osttraces code in source. Raptor decides this by
+	# checking whether there is a "traces" or "traces_<prj_name>" folder in USERINCLUDE in a mmp file. 
+	t = SmokeTest()
+	t.id = "101d"
+	t.name = "TC_autorun1"
+	# Run - USERINCLUDE ../traces_autorun1
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun1.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/tracecompile_autorun1_00000001.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+	
+	t = AntiTargetSmokeTest()
+	t.id = "101e"
+	t.name = "TC_autorun2"
+	# No run - USERINCLUDE ./tracesnotmatch
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun2.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun2.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_autorun2_00000001.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+	t = AntiTargetSmokeTest()
+	t.id = "101f"
+	t.name = "TC_autorun3"
+	# No run - no UID
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun3.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun3.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_autorun3_00000001.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+	# Test trace compiler doesn't run when it is switched off
+	# Trace compiler switch is off by default. To turn it on use variant ".tracecompiler". 
+	t = AntiTargetSmokeTest()
+	t.id = "101g"
+	t.name = "TC_switch_off"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun1.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5 -p autorun1.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_autorun1_00000001.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+	
+
+	t.name = "traceccompiler_general"
+	t.result = result
+
+	print "\nOverall Result : " + result.upper() + "\n"
+	if result == SmokeTest.FAIL:
+		print len(failed), "tests failed:"
+		for x in failed:
+			print x
+		print	
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,292 @@
+
+from raptor_tests import SmokeTest
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	failed = []
+
+	# 102a - 102b Test running trace compiler on one mmp with different source files controlled macros. 
+	t = AntiTargetSmokeTest()
+	t.description = "Testcases (ID 102a - 102c) test trace compiler running with variants and macros"
+	
+	# 1st time build includes var_source1 and var_source2 for variant_source.mmp
+	t.id = "102a"
+	t.name = "TC_variant_source_var1"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf -c default.tc_var1" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/variant_source"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/variant_source.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/inv_sourceTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/invariant_source_0x10000002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/variant_source_0x10000003_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/invariant_source_0x10000002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/variant_source_0x10000003_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"invariant_source_/armv5/udeb/inv_source.o",
+		"invariant_source_/armv5/udeb/inv_source.o.d",
+		"invariant_source_/armv5/urel/inv_source.o",
+		"invariant_source_/armv5/urel/inv_source.o.d",
+		"invariant_source_/winscw/udeb/inv_source.o",
+		"invariant_source_/winscw/udeb/inv_source.o.d",
+		"invariant_source_/winscw/urel/inv_source.o",
+		"invariant_source_/winscw/urel/inv_source.o.d",
+		"invariant_source_/tracecompile_invariant_source_10000002.done",
+		"variant_source_/armv5/udeb/var_source1.o",
+		"variant_source_/armv5/udeb/var_source1.o.d",
+		"variant_source_/armv5/udeb/var_source2.o",
+		"variant_source_/armv5/udeb/var_source2.o.d",
+		"variant_source_/armv5/urel/var_source1.o",
+		"variant_source_/armv5/urel/var_source1.o.d",
+		"variant_source_/armv5/urel/var_source2.o",
+		"variant_source_/armv5/urel/var_source2.o.d",
+		"variant_source_/winscw/udeb/var_source1.o",
+		"variant_source_/winscw/udeb/var_source1.o.d",
+		"variant_source_/winscw/udeb/var_source2.o",
+		"variant_source_/winscw/udeb/var_source2.o.d",
+		"variant_source_/winscw/urel/var_source1.o",
+		"variant_source_/winscw/urel/var_source1.o.d",
+		"variant_source_/winscw/urel/var_source2.o",
+		"variant_source_/winscw/urel/var_source2.o.d",
+		"variant_source_/tracecompile_variant_source_10000003.done"
+	])
+	t.antitargets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source3Traces.h"
+		]
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"variant_source_/armv5/udeb/var_source3.o",
+		"variant_source_/armv5/urel/var_source3.o",
+		"variant_source_/winscw/udeb/var_source3.o",
+		"variant_source_/winscw/urel/var_source3.o"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+	# 2nd time build includes var_source1 and var_source3 for variant_source.mmp
+	t = SmokeTest()
+	t.id = "102b"
+	t.name = "TC_variant_source_var2"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf -c default.tc_var2" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/variant_source"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/variant_source.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/inv_sourceTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source3Traces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/invariant_source_0x10000002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/variant_source_0x10000003_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/invariant_source_0x10000002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/variant_source_0x10000003_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"invariant_source_/armv5/udeb/inv_source.o",
+		"invariant_source_/armv5/udeb/inv_source.o.d",
+		"invariant_source_/armv5/urel/inv_source.o",
+		"invariant_source_/armv5/urel/inv_source.o.d",
+		"invariant_source_/winscw/udeb/inv_source.o",
+		"invariant_source_/winscw/udeb/inv_source.o.d",
+		"invariant_source_/winscw/urel/inv_source.o",
+		"invariant_source_/winscw/urel/inv_source.o.d",
+		"invariant_source_/tracecompile_invariant_source_10000002.done",
+		"variant_source_/armv5/udeb/var_source1.o",
+		"variant_source_/armv5/udeb/var_source1.o.d",
+		"variant_source_/armv5/udeb/var_source3.o",
+		"variant_source_/armv5/udeb/var_source3.o.d",
+		"variant_source_/armv5/urel/var_source1.o",
+		"variant_source_/armv5/urel/var_source1.o.d",
+		"variant_source_/armv5/urel/var_source3.o",
+		"variant_source_/armv5/urel/var_source3.o.d",
+		"variant_source_/winscw/udeb/var_source1.o",
+		"variant_source_/winscw/udeb/var_source1.o.d",
+		"variant_source_/winscw/udeb/var_source3.o",
+		"variant_source_/winscw/udeb/var_source3.o.d",
+		"variant_source_/winscw/urel/var_source1.o",
+		"variant_source_/winscw/urel/var_source1.o.d",
+		"variant_source_/winscw/urel/var_source3.o",
+		"variant_source_/winscw/urel/var_source3.o.d",
+		"variant_source_/tracecompile_variant_source_10000003.done"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+
+	# Build multiple variants together, which involves different source files in one mmp
+	# Raptor only call trace compiler once no matter how many variants
+	# In this example, ".phone" 1 2 3 involve tc_a b c respectively, and all involve tc_main
+	t = SmokeTest()
+	t.id = "102c"
+	t.name = "TC_multiple_variants"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf" + \
+			" -c armv5.phone1 -c armv5.phone2 -c armv5.phone3" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/multiple_variants"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5.phone1/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone1/urel/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone2/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone2/urel/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone3/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone3/urel/tc_variants.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_mainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_aTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_bTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_cTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/tc_variants_0x10000004_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/tc_variants_0x10000004_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf', [
+		"tc_variants_/armv5.phone1/udeb/tc_main.o",
+		"tc_variants_/armv5.phone1/udeb/tc_a.o",
+		"tc_variants_/armv5.phone1/urel/tc_main.o",
+		"tc_variants_/armv5.phone1/urel/tc_a.o",
+		"tc_variants_/armv5.phone2/udeb/tc_main.o",
+		"tc_variants_/armv5.phone2/udeb/tc_b.o",
+		"tc_variants_/armv5.phone2/urel/tc_main.o",
+		"tc_variants_/armv5.phone2/urel/tc_b.o",
+		"tc_variants_/armv5.phone3/udeb/tc_main.o",
+		"tc_variants_/armv5.phone3/udeb/tc_c.o",
+		"tc_variants_/armv5.phone3/urel/tc_main.o",
+		"tc_variants_/armv5.phone3/urel/tc_c.o",
+		"tc_variants_/tracecompile_tc_variants_10000004.done"
+	])	
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+
+	# 102d and 102e is to test a very rare situation, where one mmpfile includes 3 children mmpfiles, 
+	# which are guarded by macros. They share some source file, and two share the same UID3. 
+	# When build them together, Raptor should be able to distinguish them and run trace compiler 
+	# on each of them. 
+	t = SmokeTest()
+	t.id = "102d"
+	t.name = "TC_mum_children_mmps_build"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" -c armv5.tc_var1 -c armv5.tc_var2 -c armv5.tc_var3" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child1.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child1.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child3.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/child1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/child2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/child3Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/commonTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child1_exe_0x11100001_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child2_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child3_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/child1_exe_0x11100001_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/child2_exe_0x11100002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/child3_exe_0x11100002_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf', [
+		"child1_/armv5/udeb/child1.o",
+		"child1_/armv5/udeb/common.o",
+		"child1_/armv5/urel/child1.o",
+		"child1_/armv5/urel/common.o",
+		"child1_/tracecompile_child1_exe_11100001.done",
+		"child2_/armv5/udeb/child2.o",
+		"child2_/armv5/udeb/common.o",
+		"child2_/armv5/urel/child2.o",
+		"child2_/armv5/urel/common.o",
+		"child2_/tracecompile_child2_exe_11100002.done",
+		"child3_/armv5/udeb/child3.o",
+		"child3_/armv5/udeb/common.o",
+		"child3_/armv5/urel/child3.o",
+		"child3_/armv5/urel/common.o",
+		"child3_/tracecompile_child3_exe_11100002.done"
+	])
+	t.warnings = 3
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+	# Clean mmp A then build mmp B and C. As common.cpp is shared by A B and C, commonTraces.h would be 
+	# cleaned when cleaning mmp A. But as B and C aren't cleaned, Raptor wouldn't run trace compiler on
+	# B and C, thus commonTraces.h wouldn't be generated again, so be missing for mmp B and C.
+	# The solution is to use new trace path "traces_<TARGET>_<TARGETTYPE>" instead of "traces" so shared 
+	# source has different copy of trace headers for different projects.
+	t = SmokeTest()
+	t.id = "102e"
+	t.name = "TC_mum_children_mmps_clean"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps" + \
+			" -c armv5.tc_var1 CLEAN && " + \
+			"sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps" + \
+			" -c armv5.tc_var2 -c armv5.tc_var3"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child3.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/child2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/child3Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/commonTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child2_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child3_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/child2_exe_0x11100002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/child3_exe_0x11100002_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf', [
+		"child2_/armv5/udeb/child2.o",
+		"child2_/armv5/udeb/common.o",
+		"child2_/armv5/urel/child2.o",
+		"child2_/armv5/urel/common.o",
+		"child2_/tracecompile_child2_exe_11100002.done",
+		"child3_/armv5/udeb/child3.o",
+		"child3_/armv5/udeb/common.o",
+		"child3_/armv5/urel/child3.o",
+		"child3_/armv5/urel/common.o",
+		"child3_/tracecompile_child3_exe_11100002.done"
+	])
+	t.warnings = 3
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		failed.append(t.name)
+
+
+	t.name = "tracecompiler_variants"
+	t.result = result
+
+	print "\nOverall Result : " + result.upper() + "\n"
+	if result == SmokeTest.FAIL:
+		print len(failed), "tests failed:"
+		for x in failed:
+			print x
+		print	
+
+	t.id = "102"
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/unfrozen.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,169 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "49"
+	t.name = "unfrozen"
+	t.description = "Test EXPORTUNFROZEN forced import library generation with both completely unfrozen and part-frozen examples"
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5 CLEAN" \
+				" && sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_unfrozen.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/unfrozen/bld.inf', [
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols{000a0000}.def",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols{000a0000}.dso",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols_urel_objects.via",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols.o",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2{000a0000}.def",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2{000a0000}.dso",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2_urel_objects.via",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols.o",
+		"test_unfrozen_/armv5/urel/test_unfrozen_urel_objects.via",
+		"test_unfrozen_/armv5/urel/test.o.d",
+		"test_unfrozen_/armv5/urel/test.o",		
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.UID.CPP",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.o",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.o",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.dep",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.dep",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.o.d",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.lib",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.inf",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.dll",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.def",	
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.UID.CPP",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.o",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.o",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.dep",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.dep",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.o.d",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.lib",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.inf",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.dll",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.def",				
+		"test_unfrozen_/winscw/urel/test_unfrozen.UID.CPP",
+		"test_unfrozen_/winscw/urel/test.o",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.o",
+		"test_unfrozen_/winscw/urel/test.dep",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.dep",
+		"test_unfrozen_/winscw/urel/test.o.d",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.o.d",		
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols{000a0000}.def",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols{000a0000}.dso",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols_udeb_objects.via",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o",		
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2{000a0000}.def",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2{000a0000}.dso",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2_udeb_objects.via",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o",				
+		"test_unfrozen_/armv5/udeb/test_unfrozen_udeb_objects.via",
+		"test_unfrozen_/armv5/udeb/test.o.d",
+		"test_unfrozen_/armv5/udeb/test.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.UID.CPP",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.dep",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.dep",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.o.d",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.lib",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.inf",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.dll",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.def",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.UID.CPP",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.o",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.o",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.dep",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.dep",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.o.d",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.lib",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.inf",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.dll",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.def",			
+		"test_unfrozen_/winscw/udeb/test_unfrozen.UID.CPP",
+		"test_unfrozen_/winscw/udeb/test.o",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.o",
+		"test_unfrozen_/winscw/udeb/test.dep",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.dep",
+		"test_unfrozen_/winscw/udeb/test.o.d",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.o.d"
+	])
+	# Match both ARMV5 (elf2e32) and WINSCW (makedef) unfrozen export warnings and confirm the number found.  Format:
+	# Elf2e32: Warning: New Symbol _ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 found, export(s) not yet Frozen
+	# F:/path/epocroot/epoc32/build/unfrozen/c_939fe933110ed5aa/unfrozensymbols_dll/winscw/udeb/unfrozensymbols.def(3) : ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @1
+	# More matches are expected with elf2e32 due to extra build impedimenta in EABI builds.
+	t.countmatch = [
+				[".*Elf2e32: Warning: New Symbol .* found, export\(s\) not yet Frozen.*", 14],
+				[".*\.def\(\d\) : .*@\d.*", 10]
+				]
+	t.warnings = 8
+	# ABIv1 .lib files are not generated on Linux
+	t.run("linux")
+	if t.result == SmokeTest.SKIP:
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols{000a0000}.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2.lib",
+			"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2{000a0000}.lib"
+			])
+		t.run("windows")
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/unfrozen_savespace.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+
+	t = AntiTargetSmokeTest()
+	t.id = "99"
+	t.name = "unfrozen_savespace"
+
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5 CLEAN" \
+				" && sbs -b smoke_suite/test_resources/unfrozen/bld.inf -c winscw.savespace -c armv5.savespace"
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_unfrozen.exe"
+		]
+
+	t.antitargets = []
+
+	t.addbuildantitargets('smoke_suite/test_resources/unfrozen/bld.inf', [
+		"test_unfrozen_/armv5/udeb",
+		"test_unfrozen_/armv5/urel",
+		"test_unfrozen_/winscw/udeb",
+		"test_unfrozen_/winscw/urel"
+		# TODO: Add these anti targets once we figure out how to actually delete
+		# them.
+		# "unfrozensymbols2_dll/armv5/udeb",
+		# "unfrozensymbols2_dll/armv5/urel",
+		# "unfrozensymbols2_dll/winscw/udeb",
+		# "unfrozensymbols2_dll/winscw/urel",
+		# "unfrozensymbols_dll/armv5/udeb",
+		# "unfrozensymbols_dll/armv5/urel",
+		# "unfrozensymbols_dll/winscw/udeb",
+		# "unfrozensymbols_dll/winscw/urel"
+		] )
+
+	t.countmatch = [
+			[".*Elf2e32: Warning: New Symbol .* found, export\(s\) not yet Frozen.*", 14],
+			[".*\.def\(\d\) : .*@\d.*", 10]
+		]
+
+	t.warnings = 8
+
+	t.run()
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/whatlog_cache.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,163 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.id = "77"
+	t.name = "whatlog_cache"
+	t.description = """Test sbsv2cache.py cache file generation using Raptor .whatlog variant output.
+		This is currently a Windows only activity due to CBR tools restrictions."""
+	t.usebash = True
+
+	if 'SBS_PYTHON' in os.environ:
+		pythonRun = "$(SBS_PYTHON)"
+	else:
+		pythonRun = "$(SBS_HOME)/win32/python252/python.exe"
+
+	# Build something using the .whatlog variant.  Take the build log and give it to sbsv2cache.py, deducing
+	# the location of the generated cache file from the verbose output.  If generated, dump the cache file to
+	# STDOUT so we can validate the content in this test script.  Clean up when finished.
+	t.command = """sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -f ${SBSLOGFILE} -m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog
+		CACHEFILE=`%s $SBS_HOME/bin/sbsv2cache.py -v -s -o $EPOCROOT/epoc32/build/abldcache -l $SBSLOGFILE | sed -n \'s#Creating: ##p\'`
+		if [ -n \"${CACHEFILE:+x}\" ]; then
+			cat $CACHEFILE
+		fi
+		rm -r $EPOCROOT/epoc32/build/abldcache""" % pythonRun
+		
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon24.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon2m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon32.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon3m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon48.bmp",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/mbm/icon4m.bmp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/localisation/helloworld/rsc/helloworld.rpp",
+		"$(EPOCROOT)/epoc32/localisation/group/helloworld_reg.info",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp",
+		"helloworld_exe/helloworld__resource_apps_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_reg_exe/helloworld_reg__private_10003a3f_apps_sc.rpp.d"
+	])
+	t.countmatch = [
+		["\$self->{abldcache}->{.*\\\\test\\\\smoke_suite\\\\test_resources\\\\simple_gui target (armv5|winscw) (udeb|urel) -what\'} =", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\private\\\\\\\\10003a3f\\\\\\\\apps\\\\\\\\helloworld_reg.rsc\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.mbm\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.rsc\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\include\\\\\\\\helloworld.rsg\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\group\\\\\\\\helloworld.info\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\group\\\\\\\\helloworld_reg.info\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon24.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon2m.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon32.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon3m.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon48.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\mbm\\\\\\\\icon4m.bmp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld\\\\\\\\rsc\\\\\\\\helloworld.rpp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\localisation\\\\\\\\helloworld_reg\\\\\\\\rsc\\\\\\\\helloworld_reg.rpp\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\(armv5|winscw)\\\\\\\\(udeb|urel)\\\\\\\\helloworld.exe\'",4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\(armv5|winscw)\\\\\\\\(udeb|urel)\\\\\\\\helloworld.exe.map\'", 3],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\private\\\\\\\\10003a3f\\\\\\\\apps\\\\\\\\helloworld_reg.rsc\'", 2],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.mbm\'", 2],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.rsc\'", 2],
+		["\$self->{abldcache}->{\'plats\'} =", 1],
+		[".*\'ARMV5\'", 1],
+		[".*\'WINSCW\'", 1]
+	]
+	t.run("windows")
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/winscw_resource.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "38"
+	t.name = "winscw_resource"
+	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf -c " \
+			+ "winscw RESOURCE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testresource.rsg",
+		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/localisation/group/testresource.info",
+		"$(EPOCROOT)/epoc32/localisation/testresource/rsc/testresource.rpp"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/wrong_projectname.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "46"
+	t.name = "wrong_projectname"
+	t.description = "Test -p with wrong project name"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "-p wrongname1.mmp -p wrongname2.mmp"
+	t.targets = []
+	t.warnings = 2 # One for armv5, one for winscw.
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/xml_invalid_chars.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, ReplaceEnvs
+from xml.etree.ElementTree import parse
+
+def run():
+	t = SmokeTest()
+	t.id = "84"
+	t.name = "xml_invalid_chars"
+	t.description = """Tests the validity of XML when output with characters
+			not-allowed in XML are sent to the filters
+			"""
+	t.command = "sbs -b smoke_suite/test_resources/xml_invalid_chars/bld.inf " \
+			+ "-c armv5"
+	# The warning that causes the invalid characters to appear in the XML log
+	t.warnings = 1
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/xml_invalid_chars/bld.inf', [
+		"test_/armv5/urel/test_urel_objects.via",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test.o"
+	])
+		
+	t.run()
+	
+	if t.result == SmokeTest.PASS:
+		
+		print "Testing validity of XML..."
+		
+		log = "$(EPOCROOT)/epoc32/build/smoketestlogs/xml_invalid_chars.log"
+		logfile = open(ReplaceEnvs(log), "r")
+		
+		try:
+			tree = parse(logfile)
+		except:
+			t.result = SmokeTest.FAIL
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/zip_export_plus_clean.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,63 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest, ReplaceEnvs
+import re
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0024a"
+	t.name = "zip_export"
+	t.command = "sbs -b smoke_suite/test_resources/simple_zip_export/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	
+	t = AntiTargetSmokeTest()
+	t.id = "0024b"
+	t.name = "zip_export_reallyclean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_zip_export/bld.inf " \
+			+ "REALLYCLEAN"
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "24"
+	t.name = "zip_export_plus_clean"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/zip_export_what.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest, ReplaceEnvs
+import re
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	t = CheckWhatSmokeTest()
+	t.id = "25"
+	t.name = "zip_export_what"
+	t.command = "sbs --what " + \
+			"-b smoke_suite/test_resources/simple_zip_export/bld.inf"
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt'
+	]
+	t.targets = [
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt',
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/spec/spec.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test build specification -->
+
+    <spec name="world">
+        <interfaceRef ref="Symbian.EXE"/>
+	<var>
+	    <set name="SRC" value="$(ROOT)/src"/>
+	</var>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/ignore.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/666.xsd">
+
+	<!-- the 666 schema indicates that the file should be ignored -->
+
+	<var name="should_be_ignored"/>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/old_bad.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/1_0.xsd">
+
+	<!-- old 1.0 schema config files should generate errors in
+	     the new 2.0 schema parser, but should not crash it. -->
+
+	<config name="foo"/>
+	<combine name="foo"/>
+    
+	<var name="var1_0"/>
+	<alias name="alias1_0" meaning="nothing"/>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/old_ok.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/1_0.xsd">
+
+	<!-- old 1.0 schema interface files should still be readable by
+	     the new 2.0 schema parser -->
+	
+    <!-- a base interface -->
+
+	<interface name="base.1_0" abstract="true">
+		<param name='A'/>
+		<param name='B' default=''/>
+		<param name='C'/>
+    </interface>
+    
+    <!-- extends the base interface -->
+
+	<interface name="interface.1_0" extends="base.1_0" flm="flm.flm">
+		<param name='D'/>
+		<param name='C'/>
+    </interface>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/sbs_init.xml	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- defaults for Raptor -->
+
+  <var name="defaults.init">
+    <!-- environment variables used in this configuration -->
+    <env name="EPOCROOT" default="/" type="path"/>
+
+    <!-- default parameter settings -->
+
+    <!-- Make command parameter file -->
+    <set name="makeEngine" value="make"/>
+
+    <!-- Location of the highest level makefile -->
+    <set name="topMakefile" value="$(EPOCROOT)/epoc32/build/Makefile"/>
+
+    <!-- Name of the build logging file -->
+    <set name="logFileName" value="$(EPOCROOT)/epoc32/build/Makefile.%TIME.log"/>
+
+    <!-- Default build configuration name -->
+    <set name="defaultConfig" value="default"/>
+
+    <!-- Names of standard build files -->
+    <set name="buildInformation" value="bld.inf"/>
+    <set name="systemDefinition" value="System_Definition.xml"/>
+
+    <!-- Standard directories -->
+    <set name="systemConfig" value="lib/config"/>
+    <set name="systemFLM" value="lib/flm"/>
+    <set name="systemPlugins" value="python/plugins"/>
+    <set name="systemDefinitionBase" value="."/>
+
+    <!-- Do not print any information messages? -->
+    <set name="quiet" value="false"/>
+
+    <!-- How many jobs to run in parallel? (for make -j) -->
+    <set name="jobs" value="4"/>
+
+    <!-- How many attempts to run a job before recording an error?
+    This is useful for builds that can have transient failures. -->
+    <set name="tries" value="1"/>
+
+    <!-- Carry on trying to build even if some commands fail? -->
+    <set name="keepGoing" value="false"/>
+
+    <!-- Can command line options override values in this file? -->
+    <set name="allowCommandLineOverrides" value="true"/>
+
+    <!-- Do we use a bld.inf or System_Definition.xml if both are in the CWD -->
+    <set name="preferBuildInfoToSystemDefinition" value="false"/>
+
+    <!-- Always use ignore OS detection? -->
+    <set name="ignoreOsDetection" value="false"/>
+
+    <!-- Always use a specific list of filters -->
+    <set name="filterList" value="FilterTerminal,FilterLogfile"/>
+
+  </var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/filter_utils_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,175 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Test generic classes available for use in plugin log filters
+#
+
+
+import unittest
+import filter_utils
+
+
+testRecipeTemplate = \
+"""<recipe name='%s' target='recipe_target' host="recipe_host" layer='recipe_layer' component='recipe_component' bldinf='recipe_bldinf' mmp='recipe_mmp' config='recipe_config' platform='recipe_platform' phase='recipe_phase' source='recipe_source'>"
+<![CDATA[
+%s
+]]><time start='0123456789.123456789' elapsed='99.999' />
+<status exit='%s' %s attempt='%d' />
+</recipe>"""
+
+testRecipeCalls = \
+"""+ call_to_some_tool -a arg1 -a arg2 -a arg3
++ call_to_some_other_tool -a arg1 -a arg2 -a arg3"""
+testRecipeOutput = \
+"""output from some tool or other
+some more output from some tool or other"""
+
+# Fall-back warning and error examples
+genericWarnings = \
+"""Warning: generic warning from some tool or other
+Warning: another generic warning from some tool or other"""
+genericErrors = \
+"""Error: generic error from some tool or other
+Error: another generic error from some tool or other"""
+
+# Real world examples of mwccsym2, mwldsym2 and mwwinrc errors and warnings
+mwWarnings = \
+"""mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+..\sf\os\cellularsrv\telephonyserver\etelserverandcore\SETEL\ET_PHONE.CPP:36: warning: cannot find matching deallocation function for 'CReqEntry'"""
+mwErrors = \
+"""HelloWorld.cpp:21: undefined identifier 'stuff'
+mwldsym2.exe: Specified file 'HelloWorld.o' not found"""
+mwBenign = \
+"""..\sf\os\lbs\locationrequestmgmt\locationserver\src\locserver.cpp:223: note: NOTE: CLocServer::DoNewSessionL. aMessage and aVersion not used. TBD"""
+
+
+class TestFilterUtils(unittest.TestCase):
+	
+	def setUp(self):
+		self.__recipeFactory = filter_utils.RecipeFactory()
+	
+	def __createRecipeLines(self, aName, aExit, aAttempt, aCode=None, aExtras=""):
+		"""Customise the recipe test template for differing recipe tests
+		The 'code' attribute of 'status' is optional, and different errors/warnings
+		etc. can be added via aExtras"""
+		code = ""
+		if aCode:
+			code = "code='%d'" % aCode
+		midSection = testRecipeCalls + "\n" + testRecipeOutput
+		if aExtras:
+			midSection += "\n" + aExtras
+		recipe = testRecipeTemplate % (aName, midSection, aExit, code, aAttempt)
+		return recipe.split("\n")
+	
+	def __checkListContent(self, aExpected, aActual, aPrefixIgnore=""):
+		"""Compare the content of two lists of strings.
+		Optionally trim a prefix from the expected results."""
+		for expected in aExpected:
+			self.assertTrue(expected.lstrip(aPrefixIgnore) in aActual)
+		self.assertEqual(len(aActual), len(aExpected))
+	
+	def testRecipeFactory(self):
+		recipeLines = self.__createRecipeLines("generic", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		self.assertTrue(isinstance(recipe, filter_utils.Recipe))
+		
+		recipeLines = self.__createRecipeLines("win32something", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		self.assertTrue(isinstance(recipe, filter_utils.Win32Recipe))
+		
+	def testGenericRecipe(self):
+		
+		# 1. Basic successful recipe
+		recipeLines = self.__createRecipeLines("recipe_name", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+				
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.name), 'recipe_name')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.target), 'recipe_target')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.layer), 'recipe_layer')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.component), 'recipe_component')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.bldinf), 'recipe_bldinf')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.mmp), 'recipe_mmp')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.config), 'recipe_config')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.platform), 'recipe_platform')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.phase), 'recipe_phase')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.source), 'recipe_source')
+		
+		self.assertFalse(recipe.isComplete())
+				
+		for x in range(1, len(recipeLines)):
+			recipe.addLine(recipeLines[x])
+		
+		self.assertTrue(recipe.isComplete())
+		self.assertTrue(recipe.isSuccess())
+		
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.start), "0123456789.123456789")
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.elapsed), 99.999)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.exit), 'ok')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 1)
+		
+		# Ignore "+ " tool call prefixes that are trimmed in getCalls output
+		self.__checkListContent(testRecipeCalls.split("\n"), recipe.getCalls(), "+ ")
+		self.__checkListContent(testRecipeOutput.split("\n"), recipe.getOutput())
+		
+		# 2. Recipe failure with errors
+		recipeLines = self.__createRecipeLines("recipe_name", "failed", 3, 10, genericErrors)
+		recipe = self.__recipeFactory.newRecipe()
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 3)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 10)	
+		self.__checkListContent(genericErrors.split("\n"), recipe.getErrors())
+		
+		# 3. Recipe retry with warnings
+		recipeLines = self.__createRecipeLines("recipe_name", "retry", 2, 5, genericWarnings)
+		recipe = self.__recipeFactory.newRecipe()
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 2)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 5)		
+		self.__checkListContent(genericWarnings.split("\n"), recipe.getWarnings())
+	
+	def testWin32Recipe(self):
+		# Recipe failure with errors and warnings
+		recipeLines = self.__createRecipeLines("win32something", "failed", 3, 10, mwWarnings + "\n" + mwErrors + "\n" + mwBenign)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 3)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 10)
+		
+		self.__checkListContent(mwWarnings.split("\n"), recipe.getWarnings())
+		self.__checkListContent(mwErrors.split("\n"), recipe.getErrors())
+	
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "filter_utils_unit"
+
+	tests = unittest.makeSuite(TestFilterUtils)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/generic_path_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,194 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import generic_path
+import unittest
+import os
+import sys
+import re
+
+class TestGenericPaths(unittest.TestCase):
+	
+	def setUp(self):
+		self.cwd = os.getcwd().replace("\\", "/")
+	
+	def isWin32(self):
+		return sys.platform.lower().startswith("win")
+	
+	
+	def testClassCommon(self):
+		
+		p1 = generic_path.Path("a", "b")
+		
+		p2 = p1.Append("c")
+		self.assertEqual(str(p2), "a/b/c")
+		
+		p3 = p1.Append("c", "d")
+		self.assertEqual(str(p3), "a/b/c/d")
+		
+		p4 = p1.Prepend("z")
+		self.assertEqual(str(p4), "z/a/b")
+		
+		p5 = p1.Prepend("y", "z")
+		self.assertEqual(str(p5), "y/z/a/b")
+		
+		self.assertEqual(str(p5.Dir()), "y/z/a")
+		self.assertEqual(p5.File(), "b")
+		
+		p6 = generic_path.Join("test")
+		self.assertEqual(str(p6.Dir()), "")
+		self.assertEqual(p6.File(), "test")
+	
+	
+	def testClassWin32(self):
+		if not self.isWin32():
+			return
+		
+		local1 = generic_path.Path('some\\folder\\another\\')
+		local2 = generic_path.Join(local1, "test", "tmp")
+		
+		self.assertEqual(str(local2),"some/folder/another/test/tmp")
+		
+		# Absolute
+		
+		local1 = generic_path.Path('some\\folder')
+		self.failIf(local1.isAbsolute())
+		
+		abs1 = local1.Absolute()
+		self.assertEqual(str(abs1).lower(), (self.cwd + "/some/folder").lower())
+		
+		local2 = generic_path.Path('C:\\some\\folder')
+		self.failUnless(local2.isAbsolute())
+		
+		abs2 = local2.Absolute()
+		self.assertEqual(str(abs2), "C:/some/folder")
+
+		local3 = generic_path.Path('\\somerandomfolder')
+		self.failUnless(re.match('^[A-Za-z]:/somerandomfolder$',str(local3)))
+
+		local4 = generic_path.Path('\\my\\folder\\')
+		self.failUnless(re.match('^[A-Za-z]:/my/folder$',str(local4)))
+
+		local5 = generic_path.Path('\\')
+		self.failUnless(re.match('^[A-Za-z]:$',str(local5)))
+		
+		local6 = generic_path.Path("C:")
+		self.failUnless(local6.isAbsolute())
+		self.failUnless(local6.isDir())
+		self.failUnless(local6.Exists())
+		
+		local7 = local6.Absolute()
+		self.assertEqual(str(local7), "C:")
+		
+		local8 = generic_path.Path("C:/")
+		self.failUnless(local8.isAbsolute())
+		self.failUnless(local8.isDir())
+		self.failUnless(local8.Exists())
+		
+		local9 = local8.Absolute()
+		self.assertEqual(str(local9), "C:")
+		                              	
+		# Drives
+		
+		driveD = generic_path.Path("D:\\", "folder")
+		self.assertEqual(str(driveD), "D:/folder")
+		
+		driveA = generic_path.Path("a:\\")
+		self.assertEqual(str(driveA), "a:")
+		self.assertEqual(str(driveA.Dir()), "a:")
+		
+		driveZ = generic_path.Path("Z:\\test")
+		self.assertEqual(str(driveZ), "Z:/test")
+		
+		joinC = generic_path.Join("C:\\", "something")
+		self.assertEqual(str(joinC), "C:/something")
+		
+		joinM = generic_path.Join("M:", "something")
+		self.assertEqual(str(joinM), "M:/something")
+		
+		# Path
+		
+		path2 = generic_path.Path("m:/sys/thing/")
+		self.assertEqual(str(path2), "m:/sys/thing")
+		
+		path3 = generic_path.Path("m:\\sys\\thing\\")
+		self.assertEqual(str(path3), "m:/sys/thing")
+		
+		path4 = generic_path.Path("m:\\")
+		self.assertEqual(str(path4), "m:")
+		
+		path5 = generic_path.Path("\\sys\\thing\\")
+		self.failUnless(re.match('^[A-Za-z]:/sys/thing$', str(path5)))
+		
+		path6 = generic_path.Path("m:/")
+		self.assertEqual(str(path6), "m:")
+		
+		
+	def testClassLinux(self):
+		if self.isWin32():
+			return
+		
+		local1 = generic_path.Path('some/folder/another/')
+		local2 = generic_path.Join(local1, "test", "tmp")
+		
+		self.assertEqual(str(local2),"some/folder/another/test/tmp")
+		
+		msys1 = generic_path.Path('some/folder/another/')
+		msys2 = generic_path.Join(msys1, "test", "tmp")
+		
+		self.assertEqual(str(msys2),"some/folder/another/test/tmp")
+		
+		# Absolute
+		
+		local1 = generic_path.Path('some/folder')
+		self.failIf(local1.isAbsolute())
+		
+		abs1 = local1.Absolute()
+		self.assertEqual(str(abs1), self.cwd + "/some/folder")
+		
+		local2 = generic_path.Path('/some/folder')
+		self.failUnless(local2.isAbsolute())
+		
+		abs2 = local2.Absolute()
+		self.assertEqual(str(abs2), "/some/folder")
+		
+		root = generic_path.Path("/")
+		self.assertEqual(str(root), "/")
+		
+		# Path
+		
+		path = generic_path.Path("some/thing/")
+		self.assertEqual(str(path), "some/thing")
+		
+ 
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "generic_path_unit"
+
+	tests = unittest.makeSuite(TestGenericPaths)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/mmpparser_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,355 @@
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This module tests the MMPParser Class()
+# It runs on data from the standard input
+#
+
+
+from mmpparser import *
+import unittest
+import os
+import re
+
+class MMPTester(MMPBackend):
+	"""A parser testing "backend" for the MMP language
+	This is used to test MMP parsing independently of the build system. """
+	def __init__(self):
+		super(MMPTester,self).__init__()
+		self.sourcepath="."
+		self.platformblock = None
+		self.output=""
+
+	def log(self,text):
+		self.output += text + "\n"
+
+	def doStartResource(self,s,loc,toks):
+		self.log("Create resource "+toks[0]+" of " + str(toks))
+		return "OK"
+
+	def doResourceAssignment(self,s,loc,toks):
+		self.log("Set "+toks[0]+" to " + toks[1])
+		return "OK"
+
+	def doEndResource(self,s,loc,toks):
+		self.log("Finalise resource "+toks[0]+" of " + str(toks))
+		return "OK"
+
+	def doStartPlatform(self,s,loc,toks):
+		self.log("Start Platform block "+toks[0])
+		self.platformblock = toks[0]
+		return "OK"
+
+	def doEndPlatform(self,s,loc,toks):
+		self.log("Finalise platform " + self.platformblock)
+		return "OK"
+
+	def doSetSwitch(self,s,loc,toks):
+		self.log("Set switch "+toks[0]+" ON")
+		return "OK"
+
+	def doAssignment(self,s,loc,toks):
+		self.log("Set "+toks[0]+" to " + str(toks[1]))
+		return "OK"
+
+	def doAppend(self,s,loc,toks):
+		self.log("Append to "+toks[0]+" the values: " + str(toks[1]))
+		return "OK"
+
+	def doUIDAssignment(self,s,loc,toks):
+		self.log("Set UID2 to " + toks[1][0])
+		if len(toks[1]) > 1:
+			self.log("Set UID3 to " + toks[1][1])
+		return "OK"
+
+	def doSourcePathAssignment(self,s,loc,toks):
+		self.log("Remembering self.sourcepath state:  "+str(toks[0])+" is now " + str(toks[1]))
+		self.sourcepath=toks[1]
+		return "OK"
+
+	def doSourceAssignment(self,s,loc,toks):
+		self.log("Setting "+toks[0]+" to " + str(toks[1]))
+		for i in toks[1]:
+			self.log(self.sourcepath + "\\" + i)
+		return "OK"
+
+	def doStartBitmap(self,s,loc,toks):
+		self.log("BITMAP Create "+toks[0]+" to " + str(toks[1]))
+		return "OK" 
+		
+	def doBitmapAssignment(self,s,loc,toks):
+		self.log("BITMAP Setting "+toks[0]+" to " + str(toks[1]))
+		self.log("		must set a value within a bitmap FLM call")
+		return "OK"
+
+	def doEndBitmap(self,s,loc,toks):
+		self.log("Finish bitmap "+toks[0]+" to " + str(toks[1]))
+		return "OK" 
+
+	def doStartStringTable(self,s,loc,toks):
+		self.log("Start STRINGTABLE "+toks[1])
+		return "OK" 
+
+	def doStringTableAssignment(self,s,loc,toks):
+		self.log("Set"+toks[0]+" to " + toks[1])
+		return "OK"
+
+	def doEndStringTable(self,s,loc,toks):
+		self.log("End STRINGTABLE "+toks[1])
+		return "OK" 
+
+	def doUnknownStatement(self,s,loc,toks):
+		self.log("Ignoring unknown statement at " + str(loc))
+		return "OK"
+
+	def doUnknownBlock(self,s,loc,toks):
+		self.output += "Ignoring unknown block at " + str(loc)
+		return "OK"
+
+	def doMMP(self,s,loc,toks):
+		return "MMP"
+
+
+
+class TestMMPParser(unittest.TestCase):
+	def setUp(self):
+		pass
+
+	def testAll(self):
+		tests = [{'name' : "TestFeatures", 'text' :  
+"""ASSPLIBRARY 123 456 789
+LIBRARY  eexe euser
+ALWAYS_BUILD_AS_ARM
+NOEXPORTLIBRARY
+TARGET FRED
+TARGETTYPE EXE
+SOURCEPATH \usr
+SOURCE alice.cia fred.cpp bob.cpp
+SOURCEPATH \someotherplace\ 
+SOURCE custard.cpp the.cpp dragon.cpp
+
+START ARMCC
+ARMLIBS somelib
+ARMRT
+END
+
+START WINC
+END
+
+START RESOURCE fred.rss
+TARGET fred
+TARGETPATH /usr/local
+END
+UID 0x12354 123455
+""", 'mustmatch': r"Set UID3 to 123455"}, \
+				{'name':"TestUnknownStatements", 'text': \
+"""
+
+TARGET FRED12345
+SOURCEPATH \usr
+
+
+""", 'mustmatch': r"Remembering self.sourcepath state:"}, \
+				{'name':"PreceedingBlankLines", 'text': \
+"""
+
+ASSPLIBRARY 123 456 789
+LIBRARY  eexe euser
+ALWAYS_BUILD_AS_ARM
+NOEXPORTLIBRARY
+TARGET FRED
+SOURCEPATH \usr
+START ARMCC
+ARMLIBS somepath
+ARMRT
+END
+START RESOURCE fred.rss
+TARGET fred
+TARGETPATH /usr/local
+END
+
+
+""", 'mustmatch': r"Set TARGETPATH to /usr/local"}, \
+				{ 'name': "Testvfprvct", 'text': \
+"""
+targettype dll
+sourcepath .
+source dfprvct2_2.cpp
+library euser.lib
+library scppnwdl.lib drtrvct2_2.lib
+option armcc --no_exceptions --no_exceptions_unwind
+start armcc
+armrt
+armlibs c_t__un.l
+end
+capability all
+vendorid 0x70000001
+target dfprvct2_2.dll
+start armcc
+armlibs f_t_p.l g_t_p.l
+end
+unpaged
+
+""", 'mustmatch': r"Set switch UNPAGED ON"}, \
+				{ 'name': "TestUSRT", 'text': \
+"""
+TARGET fred
+START ARMCC
+ARMINC 
+ARMRT
+END
+VENDORID 0x70000001
+""", 'mustmatch': r"Set VENDORID to 0x70000001"}, \
+				{ 'name': "TestRESOURCE", 'text': \
+"""
+TARGET reccaf.dll
+CAPABILITY TrustedUI ProtServ DRM
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x101ff761
+VENDORID 0x70000001
+SOURCEPATH ../source/reccaf
+SOURCE CafApaRecognizer.cpp mimetypemapping.cpp
+START RESOURCE 101ff761.rss
+TARGET reccaf.rsc
+END
+USERINCLUDE ../source/caf
+USERINCLUDE ../source/reccaf
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/caf
+SYSTEMINCLUDE /epoc32/include/ecom
+LIBRARY euser.lib apmime.lib estor.lib
+LIBRARY caf.lib efsrv.lib
+""", 'mustmatch': r"Create resource .* of"}, \
+				{ 'name': "TestRESOURCE", 'text': \
+"""
+TARGET cafutils.dll
+CAPABILITY All -Tcb
+TARGETTYPE DLL
+UID 0x101FD9B8
+VENDORID 0x70000001
+UNPAGED
+SOURCEPATH ../source/cafutils
+SOURCE Cafutils.cpp
+SOURCE attributeset.cpp
+SOURCE stringattribute.cpp
+SOURCE stringattributeset.cpp
+SOURCE virtualpath.cpp
+SOURCE Metadata.cpp
+SOURCE Metadataarray.cpp
+SOURCE embeddedobject.cpp
+SOURCE rightsinfo.cpp
+SOURCE Virtualpathptr.cpp
+SOURCE dirstreamable.cpp
+SOURCE bitset.cpp
+SOURCE cafmimeheader.cpp
+SOURCE mimefieldanddata.cpp
+USERINCLUDE ../inc
+USERINCLUDE ../source/cafutils
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/caf
+SYSTEMINCLUDE /epoc32/include/libc
+LIBRARY euser.lib
+LIBRARY estor.lib
+LIBRARY charconv.lib
+LIBRARY efsrv.lib
+LIBRARY apgrfx.lib
+LIBRARY ecom.lib
+LIBRARY apmime.lib
+""", 'mustmatch': r"LIBRARY"},
+				{ 'name': "TestEmptyStringTable", 'text': \
+"""
+OPTION CW   -w off
+TARGET          testwebbrowser.exe
+TARGETTYPE      EXE
+CAPABILITY ALL -TCB
+
+SYSTEMINCLUDE   /epoc32/include /epoc32/include/ecom
+USERINCLUDE     ../inc
+USERINCLUDE     ../../httpexampleclient
+
+START STRINGTABLE ../data/htmltagstable.st
+
+END
+
+SOURCEPATH      ../../httpexampleclient
+SOURCE httpexampleutils.cpp
+""", 'mustmatch': r"End STRINGTABLE OK"},
+				{ 'name': "TestARMINC", 'text': \
+"""
+# 1 "<built-in>"
+# 1 "<command line>"
+# 10 "<command line>"
+# 1 "/var/local/net/smb/tmurphy/cluster_epocroot_1/epoc32/include/variant/Symbian_OS_vFuture.hrh" 1
+# 11 "<command line>" 2
+# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp"
+# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh" 1
+TARGETTYPE dll
+OPTION ARMCC--no_exceptions --no_exceptions_unwind
+SOURCEPATH .
+SOURCE rtabort.cpp
+SOURCE rtdiv0.cpp
+SOURCE rtexit.cpp
+SOURCE rtlib.cpp
+SOURCE rtraise.cpp
+SOURCE drtrvct2_2.cpp
+SOURCE rtopnew.cpp rtopdel.cpp
+SOURCE sftfpini.cpp
+LIBRARY scppnwdl.lib euser.lib
+SYSTEMINCLUDE ../../include
+START ARMCC
+ARMRT
+ARMINC
+ARMLIBS c_t__un.l
+ARMLIBS h_t__un.l
+# 46 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh"
+END
+capability all
+VENDORID 0x70000001
+# 7 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp" 2
+TARGET drtrvct2_2_vfpv2.dll
+LINKAS drtrvct2_2.dll
+NOEXPORTLIBRARY
+START ARMCC
+ARMLIBS f_tvp.l
+END
+unpaged
+""", 'mustmatch': r"Set.*ARMINC"}]
+		for i in tests:
+			tester = MMPTester()
+			mp = MMPParser(tester)
+			try:
+				result = mp.mmp.parseString(i['text'])
+			except ParseException,e:
+				pass
+			self.assertEquals(result[0],'MMP')
+			self.assertNotEquals(re.search(i['mustmatch'],tester.output,re.M),None)
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "mmpparser_unit"
+
+	tests = unittest.makeSuite(TestMMPParser)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_cache_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,143 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Unit test for raptor_cache module
+
+import generic_path
+import os.path
+import raptor
+import raptor_cache
+import unittest
+
+class TestRaptorCache(unittest.TestCase):
+
+	def setUp(self):
+		self.raptor = raptor.Raptor()
+		self.cache = self.raptor.cache
+
+		dir = self.raptor.home.Append("test", "config")
+		self.cache.Load(dir)
+		
+	def testLoadSingle(self):
+		# load a single XML file
+		file = self.raptor.home.Append("test/unit_suite/data", raptor.xml)
+		self.cache.Load(file)
+		self.failUnless(len(self.cache.variants) > 0)
+		self.failUnless(len(self.cache.aliases) > 0)
+		self.failUnless(len(self.cache.groups) > 0)
+		
+	def testVariant(self):
+		def _testSingleVariant(name):
+			try:
+				var = self.cache.FindNamedVariant(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(var)
+				self.assertEqual(var.name, name)
+
+		_testSingleVariant("ARMV5_BASE")
+		_testSingleVariant("ARMV5_UREL")
+		_testSingleVariant("ARMV5_UDEB")
+		_testSingleVariant("MOD1")
+		_testSingleVariant("MOD2")
+		_testSingleVariant("var_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "ARMV5" )
+
+	def testAlias(self):
+		def _testSingleAlias(name):
+			try:
+				alias = self.cache.FindNamedAlias(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(alias)
+				self.assertEqual(alias.name, name)
+
+		_testSingleAlias("ALIAS_1")
+		_testSingleAlias("ALIAS_2")
+		_testSingleAlias("alias_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "ARMV5" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "ARMV5_UREL" )
+
+	def testGroup(self):
+		def _testSingleGroup(name):
+			try:
+				group = self.cache.FindNamedGroup(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(group)
+				self.assertEqual(group.name, name)
+				
+		_testSingleGroup("ARMV5")
+		_testSingleGroup("group_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "ARMV5_UDEB" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "ARMV5_UREL" )
+
+	def testInterface(self):
+		def _testSingleInterface(name):
+			try:
+				interface = self.cache.FindNamedInterface(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(interface)
+				self.assertEqual(interface.name, name)
+				
+		_testSingleInterface("interface_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "foo" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "bar" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "123" )
+
+	def testLoadLegacy(self):
+		# load some schema 1.0 XML files
+		dir = self.raptor.home.Append("test/unit_suite/data")
+		self.cache.Load(dir)
+		try:
+			self.cache.FindNamedInterface("base.1_0")
+			self.cache.FindNamedInterface("interface.1_0")
+			self.cache.FindNamedVariant("var1_0")
+			self.cache.FindNamedAlias("alias1_0")
+		except KeyError:
+			self.fail()
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "should_be_ignored" )
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_cache_unit"
+
+	tests = unittest.makeSuite(TestRaptorCache)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_cli_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,220 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+1# Unit Test for the Raptor_cli (command line interface) module
+
+import raptor_cli
+import sys
+import unittest
+import os,subprocess
+import re
+
+class TestRaptorCli(unittest.TestCase):
+
+	def setUp(self):
+		sbsHome = os.environ["SBS_HOME"]
+		self.windows = sys.platform.lower().startswith("win")
+		
+		self.doExportsOnly = False
+		self.whatDir = sbsHome + "/test/simple"
+		self.listconfig=[]
+		self.bldinfvalue=[]
+		self.makeoptions=[]
+		self.sysdeflayers=[]
+		self.sysdeforderlayers = True
+		self.whatlist = []
+		self.targets = []
+		self.regexpwin = re.compile(r"^[A-Za-z]:\\",re.I)
+		self.RunningQuiet = False
+		self.allowCommandLineOverrides = True
+		self.ignoreOsDetection = False
+		self.filterList = "filter_terminal,filter_logfile"
+		
+	def AddConfigName(self,configname):
+		self.listconfig.append(configname)
+		return True
+
+	def AddConfigList(self,configlist):
+		return True
+
+	def AddSpecFile(self,specfilename):
+		self.listspec.append(specfilename)
+		return True
+
+	def SetRoot(self,root):
+		self.rootvalue = root
+		return True
+	
+	def SetCheck(self,check):
+		self.doCheck = check
+		return True
+	
+	def SetWhat(self,what):
+		self.doWhat = what
+		return True
+	
+	def SetTries(self,tries):
+		self.tries = tries
+		return True
+		
+	def SetSysDefFile(self,sysdef):
+		self.sysdefvalue = sysdef
+		return True
+			
+	def SetSysDefBase(self,sysdefbase):
+		self.sysdefbasevalue = sysdefbase
+		return True
+
+	def AddSysDefLayer(self,sysdeflayer):
+		self.sysdeflayers.append(sysdeflayer)
+		return True
+
+	def SetSysDefOrderLayers(self,sysdeforderlayers):
+		self.sysdeflayers = sysdeforderlayers
+		return True
+
+	def AddBuildInfoFile(self,bldinf):
+		self.bldinfvalue.append(bldinf)
+		return True
+
+	def RunQuietly(self,QuietMode):
+		self.RunningQuiet = QuietMode
+		return True
+
+	def SetTopMakefile(self,topmake):
+		self.topmake = topmake
+		return True
+	
+	def SetLogFileName(self, logfile):
+		self.logFileName = logfile
+		return True
+		
+	def SetMakeEngine(self, engine):
+		self.makeEngine = engine
+		return True
+		
+	def AddMakeOption(self, makeOption):
+		self.makeOptions.append(makeOption)
+		return True
+			
+	def SetDebugOutput(self, filename):
+		return True
+		
+	def SetExportOnly(self, yesOrNo):
+		self.doExportOnly = yesOrNo
+		return True
+	
+	def SetKeepGoing(self, yesOrNo):
+		return True
+	
+	def SetNoBuild(self, yesOrNo):
+		return True
+	
+	def SetNoDependInclude(self, yesOrNo):
+		return True
+		
+	def SetJobs(self, N):
+		return True
+
+	def SetToolCheck(self, toolcheck):
+		return True
+
+	def SetParallelParsing(self, onoroff):
+		self.pp=onoroff
+		return True
+
+	def AddProject(self, project):
+		return True
+
+	def PrintVersion(self):
+		return True
+			 			 
+	def Info(self, format, *extras):
+		"Send an information message to the configured channel"
+		if self.RunningQuiet==False:
+			sys.stdout.write(("INFO: " + format + "\n") % extras)
+
+	def Warn(self, format, *extras):
+		"Send a warning message to the configured channel"
+		sys.stdout.write(("WARNING: " + format + "\n") % extras)
+		
+	def IgnoreOsDetection(self, value):
+		self.ignoreOsDetection = value
+		return True
+	
+	def FilterList(self, value):
+		self.filterList = value
+		return True
+	
+	def AddSourceTarget(self, filename):
+		self.targets.append(filename)
+	
+	def testDoRaptor(self):
+		args = ['-c','config1',
+				'-c','config name with spaces',
+				'-s', 'wrong_file.xml',
+				'--sysdef', 'system_definition.xml',
+				'-a', 'wrong_base_dir',
+				'--sysdefbase', 'C:\definitions',
+				'-l', 'a_layer',
+				'--layer', 'b_layer',
+				'-b', 'bld1.inf',
+				'--bldinf', 'bld2.inf',
+				'-f', 'a_log_file.log',
+				'-m', 'top.mk',
+				'--makefile', '/home/Makefile',
+				'--filters', 'filter_01,filter_02',
+				'--export-only',
+				'--source-target', 'some_source_file.cpp',
+				'--source-target', 'some_resource_file.rss',
+				'--pp', 'on']
+		
+		raptor_cli.GetArgs(self,args)
+		self.assertEqual(self.RunningQuiet,False)
+		self.assertEqual(self.listconfig[0],'config1')
+		self.assertEqual(self.listconfig[1],'config name with spaces')
+		self.assertEqual(self.sysdefvalue,'system_definition.xml')
+		self.assertEqual(self.sysdefbasevalue,'C:\\definitions')
+		self.assertEqual(self.sysdeflayers[0],'a_layer')
+		self.assertEqual(self.sysdeflayers[1],'b_layer')
+		self.assertEqual(self.bldinfvalue[0],'bld1.inf')
+		self.assertEqual(self.bldinfvalue[1],'bld2.inf')
+		self.assertEqual(self.topmake,'/home/Makefile')
+		self.assertEqual(self.logFileName,'a_log_file.log')
+		self.assertEqual(self.filterList,'filter_01,filter_02')
+		self.assertEqual(self.doExportOnly,True)
+		self.assertEqual(self.targets[0], 'some_source_file.cpp')
+		self.assertEqual(self.targets[1], 'some_resource_file.rss')
+		self.assertEqual(self.pp, 'on')
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_cli_unit"
+
+	tests = unittest.makeSuite(TestRaptorCli)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_data_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,430 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_data_unit module
+# This module tests the classes that make up the Raptor Data Model.
+#
+
+import generic_path
+import os
+import raptor
+import raptor_cache
+import raptor_data
+import unittest
+
+class TestRaptorData(unittest.TestCase):
+
+	def setUp(self):
+		self.envStack = {}
+		
+		
+	def SetEnv(self, name, value):
+		# set environment variable and remember the old value
+		
+		try:
+			old = os.environ[name]
+			self.envStack[name] = old
+			os.environ[name] = value
+		except KeyError:
+			self.envStack[name] = None    # was not defined
+		
+			
+	def RestoreEnv(self, name):
+		# put environment back to its state before SetEnv
+		saved = self.envStack[name]
+		
+		if saved == None:
+			del os.environ[name]    # was not defined
+		else:
+			os.environ[name] = saved
+			
+			
+	def testSimpleSpecification(self):
+		spec = raptor_data.Specification("myProject")
+
+		spec.SetInterface("Symbian.EXE")
+		
+		var = raptor_data.Variant("X")
+
+		var.AddOperation(raptor_data.Set("SOURCES", "a.cpp"))
+		var.AddOperation(raptor_data.Append("LIBS", "all.dll"))
+		var.AddOperation(raptor_data.Append("INC", "/C/include"))
+		var.AddOperation(raptor_data.Prepend("INC", "/B/include"))
+
+		spec.AddVariant(var)
+		spec.AddVariant("AlwaysBuildAsArm")
+
+		self.failUnless(spec)
+		self.failUnless(spec.Valid())
+		self.failUnless(var.Valid())
+		self.assertEqual(spec.name, "myProject")
+
+
+	def testSimpleFilter(self):
+		filter = raptor_data.Filter("filtered")
+		filter.SetConfigCondition("ARMV5")
+		
+		filter.SetInterface(raptor_data.Interface("True.EXE"))
+		filter.Else.SetInterface(raptor_data.Interface("False.EXE"))
+		
+		filter.AddVariant(raptor_data.Variant("True_var"))
+		filter.Else.AddVariant(raptor_data.Variant("False_var"))
+		
+		filter.AddChildSpecification(raptor_data.Specification("TrueSpec"))
+		filter.Else.AddChildSpecification(raptor_data.Specification("FalseSpec"))
+		
+		filter.Configure( raptor_data.BuildUnit("ARMV5",[]) )
+		# check a positive test
+		iface = filter.GetInterface()
+		self.assertEqual(iface.name, "True.EXE")
+		vars = filter.GetVariants()
+		self.assertEqual(vars[0].name, "True_var")
+		kids = filter.GetChildSpecs()
+		self.assertEqual(kids[0].name, "TrueSpec")
+		
+		filter.Configure( raptor_data.BuildUnit("NOT_ARMV5",[]) )
+		# check a negative test
+		iface = filter.GetInterface()
+		self.assertEqual(iface.name, "False.EXE")
+		vars = filter.GetVariants()
+		self.assertEqual(vars[0].name, "False_var")
+		kids = filter.GetChildSpecs()
+		self.assertEqual(kids[0].name, "FalseSpec")
+		
+
+	def testSimpeVariant(self):
+		var = raptor_data.Variant()
+		self.failUnless(var)
+		self.failIf( var.Valid() )
+
+		var.SetProperty("name", "ABC")
+		var.SetProperty("extends", "DEF")
+		var.SetProperty("host", "GHI")
+
+		self.assertEqual(var.name, "ABC")
+		self.assertEqual(var.extends, "DEF")
+		self.assertEqual(var.host, None)
+
+		var.SetProperty("host", "win32")
+		self.assertEqual(var.host, "win32")
+
+		self.failUnless( var.Valid() )
+
+		var.AddOperation( raptor_data.Set("CC", "armcc") )
+		var.AddOperation( raptor_data.Set("LN", "armlink") )
+
+		self.failUnless( var.Valid() )
+
+		var.SetProperty("extends", "")
+		ops = var.GetAllOperationsRecursively()
+
+		self.assertEqual( len(ops), 1 )
+		self.assertEqual( len(ops[0]), 2 )
+
+	def testExtendedVariant(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.SetProperty("extends", None)
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+
+		varB = raptor_data.Variant("B")
+		varB.SetProperty("extends", "A")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+
+		varC = raptor_data.Variant("C")
+		varC.SetProperty("extends", "B")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+
+		self.failUnless( varA.Valid() )
+		self.failUnless( varB.Valid() )
+		self.failUnless( varC.Valid() )
+
+		r.cache.AddVariant(varA)
+		r.cache.AddVariant(varB)
+		r.cache.AddVariant(varC)
+
+		e = r.GetEvaluator(None, varA.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2A" )
+
+		e = r.GetEvaluator(None, varB.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3B" )
+
+		e = r.GetEvaluator(None, varC.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testReferencedVariant(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.SetProperty("extends", None)
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+
+		# B extends A, and has a reference to C.
+		varB = raptor_data.Variant("B")
+		varB.SetProperty("extends", "A")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		varB.AddChild( raptor_data.VariantRef("C") )
+
+		varC = raptor_data.Variant("C")
+		varC.SetProperty("extends", None)
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+
+		self.failUnless( varA.Valid() )
+		self.failUnless( varB.Valid() )
+		self.failUnless( varC.Valid() )
+
+		r.cache.AddVariant(varA)
+		r.cache.AddVariant(varB)
+		r.cache.AddVariant(varC)
+
+		e = r.GetEvaluator(None, varA.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2A" )
+
+		e = r.GetEvaluator(None, varC.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+		e = r.GetEvaluator(None, varB.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3B" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testAlias(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+		r.cache.AddVariant(varA)
+
+		varB = raptor_data.Variant("B")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		r.cache.AddVariant(varB)
+
+		varC = raptor_data.Variant("C")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+		r.cache.AddVariant(varC)
+
+		# <alias name="an_alias" meaning="A.B.C"/>
+		alias = raptor_data.Alias("an_alias")
+		alias.SetProperty("meaning", "A.B.C")
+		r.cache.AddAlias(alias)
+
+		self.failUnless( alias.Valid() )
+
+		e = r.GetEvaluator(None, alias.GenerateBuildUnits()[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testGroup1(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+		r.cache.AddVariant(varA)
+
+		varB = raptor_data.Variant("B")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		r.cache.AddVariant(varB)
+
+		varC = raptor_data.Variant("C")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+		r.cache.AddVariant(varC)
+
+		alias = raptor_data.Alias("alias")
+		alias.SetProperty("meaning", "B.C")
+		r.cache.AddAlias(alias)
+
+		# This group has two buildable units: "A" and "alias" = "B.C".
+		# <group name="group1">
+		#	<varRef ref="A"/>
+		#   <aliasRef ref="alias">
+		# <group>
+		group1 = raptor_data.Group("group1")
+		group1.AddChild( raptor_data.VariantRef("A") )
+		group1.AddChild( raptor_data.AliasRef("alias") )
+		r.cache.AddGroup(group1)
+
+		vRef = raptor_data.VariantRef("C")
+		vRef.SetProperty("mod", "B")
+
+		# This group has three buildable units: "C.B", "A" and "alias" = "B.C".
+		# <group name="group2">
+		#	<varRef ref="C" mod="B"/>
+		#   <groupRef ref="group1"/>
+		# <group>
+		group2 = raptor_data.Group("group2")
+		group2.AddChild(vRef)
+		group2.AddChild( raptor_data.GroupRef("group1") )
+		r.cache.AddGroup(group2)
+
+		self.failUnless( group1.Valid() )
+		self.failUnless( group2.Valid() )
+
+		buildUnits = group1.GenerateBuildUnits()
+		self.assertEqual( len(buildUnits), 2 )
+		self.assertEqual( buildUnits[0].name, "A" )
+		self.assertEqual( buildUnits[1].name, "alias" )
+		self.assertEqual( buildUnits[1].variants[0].name, "B" )
+		self.assertEqual( buildUnits[1].variants[1].name, "C" )
+
+		buildUnits = group2.GenerateBuildUnits()
+		self.assertEqual( len(buildUnits), 3 )
+		self.assertEqual( buildUnits[0].name, "C.B" )
+		self.assertEqual( buildUnits[1].name, "A" )
+		self.assertEqual( buildUnits[2].name, "alias" )
+
+		self.assertEqual( len(buildUnits[0].variants), 2 )
+		self.assertEqual( len(buildUnits[1].variants), 1 )
+		self.assertEqual( len(buildUnits[2].variants), 2 )
+
+	def testGroup2(self):
+		r = raptor.Raptor()
+
+		r.cache.Load( generic_path.Join(r.home, "test", "config", "arm.xml") )
+
+		buildUnits = r.cache.FindNamedGroup("G2").GenerateBuildUnits()
+
+		self.assertEqual( len(buildUnits), 8 )
+
+		self.assertEqual(buildUnits[0].name, "ARMV5_UREL.MOD1")
+		self.assertEqual(buildUnits[1].name, "ARMV5_UDEB.MOD1.MOD2")
+		self.assertEqual(buildUnits[2].name, "ALIAS_1")
+		self.assertEqual(buildUnits[3].name, "ALIAS_2.MOD1.MOD2.MOD1")
+		self.assertEqual(buildUnits[4].name, "ARMV5_UREL.MOD2")
+		self.assertEqual(buildUnits[5].name, "ARMV5_UDEB.MOD2")
+		self.assertEqual(buildUnits[6].name, "MOD1")
+		self.assertEqual(buildUnits[7].name, "MOD2")
+
+	def testRefs(self):
+		i1 = raptor_data.InterfaceRef()
+		self.failIf(i1.Valid())
+
+		i2 = raptor_data.InterfaceRef("")
+		self.failIf(i2.Valid())
+
+		i3 = raptor_data.InterfaceRef("ABC_abc.123")
+		self.failUnless(i3.Valid())
+		self.assertEqual(i3.ref, "ABC_abc.123")
+
+
+	def testEvaluator(self):
+		self.SetEnv("EPOCROOT", "/C")
+		aRaptor = raptor.Raptor()
+		cache = aRaptor.cache
+		cache.Load(generic_path.Join(aRaptor.home, "test", "config", "arm.xml"))
+		
+		var = cache.FindNamedVariant("ARMV5_UREL")
+		eval = aRaptor.GetEvaluator( None, var.GenerateBuildUnits()[0] )
+		self.RestoreEnv("EPOCROOT")
+		
+		# test the Get method
+		varcfg = eval.Get("VARIANT_CFG")
+		self.assertEqual(varcfg, "/C/variant/variant.cfg")
+		
+		# test the Resolve wrt EPOCROOT
+		varcfg = eval.Resolve("VARIANT_CFG")
+		self.assertEqual(varcfg, "/C/variant/variant.cfg")
+	
+	def testMissingEnvironment(self):
+		# ask for an environment variable that is not set
+		# and has no default value.
+		var = raptor_data.Variant("my.var")
+		var.AddOperation(raptor_data.Env("RAPTOR_SAYS_NO"))
+
+		aRaptor = raptor.Raptor()
+		var.SetOwner(aRaptor)
+		
+		eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits()[0] )
+		badval = eval.Get("RAPTOR_SAYS_NO")
+		
+		self.assertEqual(badval, "NO_VALUE_FOR_RAPTOR_SAYS_NO")
+		self.assertEqual(aRaptor.errorCode, 1)
+
+	def checkForParam(self, params, name, default):
+		for p in params:
+			if p.name == name and (default == None or p.default == default):
+				return True
+		return False
+	
+	def testInterface(self):
+		aRaptor = raptor.Raptor()
+		cache = aRaptor.cache
+		cache.Load(generic_path.Join(aRaptor.home, "test", "config", "interface.xml"))
+		
+		base = cache.FindNamedInterface("Base.XYZ")
+		p = base.GetParams()
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "baseC"))
+		
+		extended = cache.FindNamedInterface("Extended.XYZ")
+		p = extended.GetParams()
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "extC"))
+		self.failUnless(self.checkForParam(p, "D", None))
+		f = extended.GetFLMIncludePath()
+		self.assertEqual(f.File(), "ext.flm")
+		
+		extended = cache.FindNamedInterface("Extended2.XYZ")
+		p = extended.GetParams()
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "extC"))
+		self.failUnless(self.checkForParam(p, "D", None))
+		f = extended.GetFLMIncludePath()
+		self.assertEqual(f.File(), "base.flm")
+	
+	
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_data_unit"
+
+	tests = unittest.makeSuite(TestRaptorData)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_make_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,427 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_make_unit module
+# This module tests the classes that write Makefile wrappers.
+#
+
+import os
+import raptor
+import raptor_data
+import raptor_make
+import unittest
+
+class TestRaptorMake(unittest.TestCase):
+
+	def cleanMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if os.path.exists(name):
+				os.remove(name)
+			
+	def checkMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if not os.path.exists(name):
+				print "did not find", name
+				return False
+		return True
+	
+	def checkNotMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if os.path.exists(name):
+				print "found unwanted", name
+				return False
+		return True
+	
+	def testSimpleMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# set up a build with a single Specification node
+		spec = raptor_data.Specification("myProject")
+		
+		interface = raptor_data.Interface("EXE")
+		interface.SetProperty("flm", "/lib/flm/exe.flm")
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM1"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM2"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM3"))
+		spec.SetInterface(interface)
+		
+		svar = raptor_data.Variant("SVAR")
+		svar.AddOperation(raptor_data.Set("EXEPARAM1", "parameter 1"))
+		svar.AddOperation(raptor_data.Set("EXEPARAM2", "parameter 2"))
+		spec.AddVariant(svar)
+		spec.SetOwner(aRaptor)
+		
+		# use a minimal Configuration
+		conf = raptor_data.Variant("myConfig")
+		cvar = raptor_data.Variant("CVAR")
+		cvar.AddOperation(raptor_data.Set("EXEPARAM3", "parameter 3"))
+		bldunit = raptor_data.BuildUnit("myConfig.CVAR",[conf,cvar])
+		conf.SetOwner(aRaptor)
+		
+		# delete any old Makefiles
+		m1 = testDir.Append("Makefile")
+		m2 = testDir.Append("myConfig.CVAR", "myProject", "Makefile")
+		makefiles = [m1, m2]
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(m1, [spec], [bldunit])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+
+
+	def testMultiSpecMultiConfigMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		interface = raptor_data.Interface("EXE")
+		interface.SetProperty("flm", "/lib/flm/exe.flm")
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM1"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM2"))
+		
+		# set up a build with 2 top-level Specification nodes
+		
+		# top 1 has 2 sub-nodes
+		top1 = raptor_data.Specification("top1")
+		top1.SetInterface(interface)
+		top1v = raptor_data.Variant()
+		top1v.AddOperation(raptor_data.Set("EXEPARAM1", "top1 p1"))
+		top1.AddVariant(top1v)
+		# top 1 child 1 has 1 sub-node
+		top1c1 = raptor_data.Specification("top1c1")
+		top1c1.SetInterface(interface)
+		top1c1v = raptor_data.Variant()
+		top1c1v.AddOperation(raptor_data.Set("EXEPARAM1", "top1c1 p1"))
+		top1c1.AddVariant(top1c1v)
+		# top 1 child 1 child
+		top1c1c = raptor_data.Specification("top1c1c")
+		top1c1c.SetInterface(interface)
+		top1c1cv = raptor_data.Variant()
+		top1c1cv.AddOperation(raptor_data.Set("EXEPARAM1", "top1c1c p1"))
+		top1c1c.AddVariant(top1c1cv)
+		top1c1.AddChildSpecification(top1c1c)
+		# top 1 child 2 has 1 sub-node
+		top1c2 = raptor_data.Specification("top1c2")
+		top1c2.SetInterface(interface)
+		top1c2v = raptor_data.Variant()
+		top1c2v.AddOperation(raptor_data.Set("EXEPARAM1", "top1c2 p1"))
+		top1c2.AddVariant(top1c2v)
+		# top 1 child 2 child
+		top1c2c = raptor_data.Specification("top1c2c")
+		top1c2c.SetInterface(interface)
+		top1c2cv = raptor_data.Variant()
+		top1c2cv.AddOperation(raptor_data.Set("EXEPARAM1", "top1c2c p1"))
+		top1c2c.AddVariant(top1c2cv)
+		top1c2.AddChildSpecification(top1c2c)
+		#
+		top1.AddChildSpecification(top1c1)
+		top1.AddChildSpecification(top1c2)
+		top1.SetOwner(aRaptor)
+		
+		# top 2 has no sub-nodes
+		top2 = raptor_data.Specification("top2")
+		top2.SetInterface(interface)
+		top2v = raptor_data.Variant()
+		top2v.AddOperation(raptor_data.Set("EXEPARAM1", "top2 p1"))
+		top2.AddVariant(top2v)
+		#
+		top2.SetOwner(aRaptor)
+		
+		# use a pair of minimal Configurations
+		
+		conf1 = raptor_data.Variant("conf1")
+		c1var = raptor_data.Variant()
+		c1var.AddOperation(raptor_data.Set("EXEPARAM2", "conf1 p2"))
+		buildunit1 = raptor_data.BuildUnit("conf1.c1var",[conf1,c1var])
+		conf1.SetOwner(aRaptor)
+		
+		conf2 = raptor_data.Variant("conf2")
+		c2var = raptor_data.Variant()
+		c2var.AddOperation(raptor_data.Set("EXEPARAM2", "conf2 p2"))
+		buildunit2 = raptor_data.BuildUnit("conf2.c2var",[conf2,c2var])
+		conf2.SetOwner(aRaptor)
+		
+		# delete any old Makefiles
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c1", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c1", "top1c1c", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c2", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c2", "top1c2c", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top2", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c1", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c1", "top1c1c", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c2", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c2", "top1c2c", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top2", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], [top1, top2], [buildunit1, buildunit2])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		
+		
+	def testFilteredMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# the root Specification is a Filter
+		top = raptor_data.Filter("top")
+		
+		# the test condition
+		top.SetVariableCondition("SWITCH", "ARM")
+		top.AddVariableCondition("TOGGLE", ["A", "B", "C"])
+		top.SetConfigCondition("confA.confAv")
+		top.AddConfigCondition("confB.confBv")
+		
+		# True part
+		ifaceT = raptor_data.Interface("T.EXE")
+		ifaceT.SetProperty("flm", "/lib/flm/exeT.flm")
+		ifaceT.AddParameter(raptor_data.Parameter("TEXEPARAM"))
+		ifaceT.AddParameter(raptor_data.Parameter("SWITCH"))
+		ifaceT.AddParameter(raptor_data.Parameter("TOGGLE"))
+		top.SetInterface(ifaceT)
+		#
+		varT = raptor_data.Variant()
+		varT.AddOperation(raptor_data.Set("TEXEPARAM", "top True"))
+		top.AddVariant(varT)
+		#
+		childT = raptor_data.Specification("Tchild")
+		childT.SetInterface(ifaceT)
+		childTv = raptor_data.Variant()
+		childTv.AddOperation(raptor_data.Set("TEXEPARAM", "child True"))
+		childT.AddVariant(childTv)
+		#
+		top.AddChildSpecification(childT)
+		
+		# False part
+		ifaceF = raptor_data.Interface("F.EXE")
+		ifaceF.SetProperty("flm", "/lib/flm/exeF.flm")
+		ifaceF.AddParameter(raptor_data.Parameter("FEXEPARAM"))
+		ifaceF.AddParameter(raptor_data.Parameter("SWITCH"))
+		ifaceF.AddParameter(raptor_data.Parameter("TOGGLE"))
+		top.Else.SetInterface(ifaceF)
+		#
+		varF = raptor_data.Variant()
+		varF.AddOperation(raptor_data.Set("FEXEPARAM", "top False"))
+		top.Else.AddVariant(varF)
+		#
+		childF = raptor_data.Specification("Fchild")
+		childF.SetInterface(ifaceF)
+		childFv = raptor_data.Variant()
+		childFv.AddOperation(raptor_data.Set("FEXEPARAM", "child False"))
+		childF.AddVariant(childFv)
+		#
+		top.Else.AddChildSpecification(childF)
+		
+		top.SetOwner(aRaptor)
+		
+		# Configurations
+		
+		confA = raptor_data.Variant("confA")	# hit
+		confAv = raptor_data.Variant()
+		confAv.AddOperation(raptor_data.Set("SWITCH", "confA switch"))
+		confAv.AddOperation(raptor_data.Set("TOGGLE", "confA toggle"))
+		b1 = raptor_data.BuildUnit("confA.confAv",[confA,confAv])
+		confA.SetOwner(aRaptor)
+		
+		confB = raptor_data.Variant("confB")	# hit
+		confBv = raptor_data.Variant()
+		confBv.AddOperation(raptor_data.Set("SWITCH", "confB switch"))
+		confBv.AddOperation(raptor_data.Set("TOGGLE", "confB toggle"))
+		b2 = raptor_data.BuildUnit("confB.confBv",[confB,confBv])
+		confB.SetOwner(aRaptor)
+		
+		confC = raptor_data.Variant("confC")
+		confCv = raptor_data.Variant()
+		confCv.AddOperation(raptor_data.Set("SWITCH", "confC switch"))
+		confCv.AddOperation(raptor_data.Set("TOGGLE", "confC toggle"))
+		b3 = raptor_data.BuildUnit("confC.confCv",[confC,confCv])
+		confC.SetOwner(aRaptor)
+		
+		confD = raptor_data.Variant("confD")
+		confDv = raptor_data.Variant()
+		confDv.AddOperation(raptor_data.Set("SWITCH", "ARM"))	# hit
+		confDv.AddOperation(raptor_data.Set("TOGGLE", "confD toggle"))
+		b4 = raptor_data.BuildUnit("confD.confDv",[confD,confDv])
+		confD.SetOwner(aRaptor)
+		
+		confE = raptor_data.Variant("confE")
+		confEv = raptor_data.Variant()
+		confEv.AddOperation(raptor_data.Set("SWITCH", "confE switch"))
+		confEv.AddOperation(raptor_data.Set("TOGGLE", "B"))		# hit
+		b5 = raptor_data.BuildUnit("confE.confEv",[confE,confEv])
+		confE.SetOwner(aRaptor)
+		
+		confF = raptor_data.Variant("confF")
+		confFv = raptor_data.Variant()
+		confFv.AddOperation(raptor_data.Set("SWITCH", "confF switch"))
+		confFv.AddOperation(raptor_data.Set("TOGGLE", "confF toggle"))
+		b6 = raptor_data.BuildUnit("confF.confFv",[confF,confFv])
+		confF.SetOwner(aRaptor)
+		
+		# delete any old Makefiles
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("confA.confAv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confB.confBv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confC.confCv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confD.confDv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confE.confEv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confF.confFv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confA.confAv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confB.confBv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confC.confCv", "top", "Fchild", "Makefile"))
+		makefiles.append(testDir.Append("confD.confDv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confE.confEv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confF.confFv", "top", "Fchild", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], [top], [b1,b2,b3,b4,b5,b6])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		
+
+	def testPruneDuplicates(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = True
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# an interface with defaults
+		iface = raptor_data.Interface("I.EXE")
+		iface.SetProperty("flm", "/lib/flm/iexe.flm")
+		iface.AddParameter(raptor_data.Parameter("A", "1"))
+		iface.AddParameter(raptor_data.Parameter("B", "2"))
+		iface.AddParameter(raptor_data.Parameter("C", "3"))
+		
+		# each Specification is a Filter
+		# f1 is empty, f2 and f3 are equal
+		# so f2 should be the only Makefile generated
+		
+		f1 = raptor_data.Filter("f1")
+		f1.SetConfigCondition("c1")
+		f1.SetOwner(aRaptor)
+		
+		f2 = raptor_data.Filter("f2")
+		f2.SetConfigCondition("c2")
+		f2.SetInterface(iface)
+		f2.SetOwner(aRaptor)
+		
+		f3 = raptor_data.Filter("f3")
+		f3.SetConfigCondition("c3")
+		f3.SetInterface(iface)
+		f3.SetOwner(aRaptor)
+		
+		# Configurations
+		c1 = raptor_data.Variant("c1")
+		c1.SetOwner(aRaptor)
+		c2 = raptor_data.Variant("c2")
+		c2.SetOwner(aRaptor)
+		c3 = raptor_data.Variant("c3")
+		c3.SetOwner(aRaptor)
+
+		# Build Units
+		b1 = raptor_data.BuildUnit("c1",[c1])
+		b2 = raptor_data.BuildUnit("c2",[c2])
+		b3 = raptor_data.BuildUnit("c3",[c3])
+		
+		# Makefiles we expect
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("c2", "f2", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# Makefiles we do not expect
+		prunes = []
+		prunes.append(testDir.Append("c1", "f1", "Makefile"))
+		prunes.append(testDir.Append("c1", "f2", "Makefile"))
+		prunes.append(testDir.Append("c1", "f3", "Makefile"))
+		prunes.append(testDir.Append("c2", "f1", "Makefile"))
+		prunes.append(testDir.Append("c2", "f3", "Makefile"))
+		prunes.append(testDir.Append("c3", "f1", "Makefile"))
+		prunes.append(testDir.Append("c3", "f2", "Makefile"))
+		prunes.append(testDir.Append("c3", "f3", "Makefile"))
+		self.cleanMakefiles(prunes)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], [f1, f2, f3], [b1, b2, b3])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		self.failUnless(self.checkNotMakefiles(prunes))
+		self.cleanMakefiles(prunes)
+		
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_make_unit"
+
+	tests = unittest.makeSuite(TestRaptorMake)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_makefile_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,183 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# test flm makefile call generator module
+# tests flm call generation.
+#
+
+from raptor_makefile import *
+import re
+import unittest
+import os
+import sys
+
+epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace("\\","\/")
+topdir = epocroot+"/epoc32/build/raptor_make_unit/"
+
+def unlinkall(files):
+	for f in files:
+		try:
+			os.unlink(f)
+			#print "testsetup: Erased %s" % f	
+			continue
+		except OSError,e:
+			#print "testsetup: No need to erase %s" % f
+			continue
+
+
+def checkall(files):
+	status = True
+	for f in files:
+		if not os.path.isfile(f):
+			print "Missing: %s" % f
+			status = False
+	return status 
+
+class TestMakefile(unittest.TestCase):
+	"Very basic testing of makefile creation class"
+	def setUp(self):
+		print "Setup"
+		self.assertTrue(os.path.isdir(epocroot))
+		unlinkall( [ topdir + "Makefile1",
+			topdir + "Makefile2.testinterface1",
+			topdir + "Makefile3.testinterface1",
+			topdir + "child1/Makefile3.testinterface1" ])
+			
+	def testMakefileCreateEmpty(self):
+		# No makefile is created because nothing is put into the makefile
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile1","#prologue","#epilog")
+		mf.close()
+		self.assertFalse(os.path.isfile(topdir+"/Makefile1"))
+
+	def testMakefileCreate(self):
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile2","#prologue\n\n","#epilog\n\n")
+		#(self, specname, configname, ifname, flmpath, parameters, guard = None):
+		mf.addCall("testspec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mf.close()
+		self.assertFalse(os.path.isfile(topdir+"/Makefile2"))
+
+	def testMakefileCreateChild(self):
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile3","#prologue\n\n","#epilog\n\n")
+		#(self, specname, configname, ifname, flmpath, parameters, guard = None):
+		mf.addCall("testspec2", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmf = mf.createChild("child1")
+		childmf.addCall("test child spec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmf.addCall("test child spec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","call2value1"),("TESTPARAM2","call2value2"),("TESTPARAM3","call2value3")])
+		childmf.close()
+		mf.close()
+		self.assertTrue(os.path.isfile(topdir+"/Makefile3.testinterface1"))
+		self.assertTrue(os.path.isfile(topdir+"/child1/Makefile3.testinterface1"))
+
+
+
+class TestMakefileSet(unittest.TestCase):
+	def setUp(self):
+		print "Setup TestMakefileSet"
+		unlinkall( [ topdir + "Makefile4",
+		  topdir + "Makefile4.bitmap",
+		  topdir + "Makefile4.default",
+		  topdir + "Makefile4.export",
+		  topdir + "Makefile4.resource",
+		  topdir + "Makefile5",
+		  topdir + "Makefile5.bitmap",
+		  topdir + "Makefile5.default",
+		  topdir + "Makefile5.export",
+		  topdir + "Makefile5.resource",
+		  topdir + "makefilechildren/Makefile6.bitmap",
+		  topdir + "makefilechildren/Makefile6.resource",
+		  topdir + "makefilechildren/Makefile6.default",
+		  topdir + "makefilechildren/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6.bitmap",
+		  topdir + "makefilechildren/child1/Makefile6.resource",
+		  topdir + "makefilechildren/child1/Makefile6.default",
+		  topdir + "makefilechildren/child1/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6",
+		  topdir + "makefilechildren/Makefile6" ] )
+		
+
+	def testMakefileSetCreateNull(self):
+		mfset = MakefileSet(directory=topdir, filenamebase="Makefile4", 
+					prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+		mfset.close()
+		self.assertTrue(checkall( [ topdir + "Makefile4",
+			topdir + "Makefile4.bitmap",
+			topdir + "Makefile4.default",
+			topdir + "Makefile4.export",
+			topdir + "Makefile4.resource" ]))
+
+	def testMakefileSetCreate(self):
+		mfset = MakefileSet(directory=topdir, filenamebase="Makefile5", 
+					prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+
+		
+
+		mfset.addCall("testspec3", "testconfig","export",False,"/flmhome/export.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec4", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec5", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec6", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.close()
+		self.assertTrue(checkall( [ 
+		  topdir + "Makefile5",
+		  topdir + "Makefile5.bitmap",
+		  topdir + "Makefile5.default",
+		  topdir + "Makefile5.export",
+		  topdir + "Makefile5.resource" ] ))
+
+	def testMakefileSetChildren(self):
+		mfset = MakefileSet(directory=topdir+"/makefilechildren", filenamebase="Makefile6", prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+		mfset.addCall("testspec3", "testconfig","export",False,"/flmhome/export.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec4", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec5", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec6", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec7", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset = mfset.createChild("child1")
+		childmfset.addCall("testspec7", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec8", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec9", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec10", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.close()
+		mfset.close()
+
+		self.assertTrue(checkall( [ topdir + "makefilechildren/Makefile6.bitmap",
+		  topdir + "makefilechildren/Makefile6.resource",
+		  topdir + "makefilechildren/Makefile6.default",
+		  topdir + "makefilechildren/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6.bitmap",
+		  topdir + "makefilechildren/child1/Makefile6.resource",
+		  topdir + "makefilechildren/child1/Makefile6.default",
+		  topdir + "makefilechildren/child1/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6",
+		  topdir + "makefilechildren/Makefile6" ] ))
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_makefile_unit"
+
+	tests = unittest.makeSuite(TestMakefile)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_meta_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,837 @@
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_meta_unit module
+# This module tests the classes forming the Raptor bld.inf and .mmp parsing support
+#
+
+import raptor
+import raptor_meta
+import raptor_utilities
+import raptor_data
+import mmpparser
+import unittest
+import generic_path
+import os
+import sys
+import re
+
+class TestRaptorMeta(unittest.TestCase):
+
+	def setUp(self):
+		self.raptor = raptor.Raptor()
+		self.__testRoot = generic_path.Path(os.environ[raptor.env], "test").Absolute()
+		self.__makefilePathTestRoot = self.__testRoot
+		self.__epocroot = self.__testRoot
+		self.__variant_cfg_root = self.__testRoot.Append('metadata/config')
+		self.__variant_cfg = self.__variant_cfg_root.Append('test_cfg.cfg')
+		self.__platmacros_armv5 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5"
+		self.__platmacros_armv6 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5 ARMV6"
+		self.__platmacros_armv7 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5 ARMV7"
+		self.__platmacros_winscw = "CW32 WINS WINSCW"
+
+		self.variant_hrh = self.__testRoot.Append('metadata/include/test_hrh.hrh')
+		
+		self.__OSRoot = ""
+		if raptor_utilities.getOSFileSystem() == "cygwin":
+			self.__OSRoot = str(self.__makefilePathTestRoot)[:2]
+
+		# we need some sort of generic platform for preprocessing
+		self.defaultPlatform = { 'PLATFORM': 'generic',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : '',
+							     'id': 0,
+							     'key': '0000000000000000',
+							     'key_md5': '0000000000000000',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		# For testing purposes, the ARMV5 platform is flagged here as feature variant.
+		# In metadata processing terms, this means that the location of the HRH file
+		# is not automatically added to the SYSTEMINCLUDE path, and so is specified
+		# directly.
+		self.ARMV5           = { 'PLATFORM': 'ARMV5',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : True,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV5SMP        = { 'PLATFORM': 'ARMV5SMP',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV6           = { 'PLATFORM': 'ARMV6',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv6,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV7           = { 'PLATFORM': 'ARMV7',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv7,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV7SMP         = { 'PLATFORM': 'ARMV7SMP',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv7,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.WINSCW          = { 'PLATFORM': 'WINSCW',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : '',
+							     'id': 2,
+							     'key': '2222222222222222',
+							     'key_md5': '2222222222222222',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_winscw,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+				
+		self.testPlats = [self.ARMV5, self.ARMV5SMP, self.ARMV6, self.ARMV7, self.ARMV7SMP, self.WINSCW]
+		
+		# Get the version of CPP that we are using and hope it's correct
+		# since there is no tool check.
+		if raptor_utilities.getOSFileSystem() == "cygwin":
+			self.__gnucpp = os.environ[raptor.env] + "/win32/bv/bin/cpp" 
+		else: 
+			self.__gnucpp = "cpp" 
+		if os.environ.has_key('GNUCPP'):
+			self.__gnucpp = os.environ['GNUCPP']
+		
+	def testPreProcessor(self):
+		# Just test for correct behaviour on failure, other tests excercise correct behaviour on success
+		preProcessor = raptor_meta.PreProcessor('cpp_that_does_not_exist', 
+											    '-undef -nostdinc', 
+											    '-I', '-D', '-include',
+											    self.raptor)
+
+		try:
+			 preProcessor.preprocess()
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('^Preprocessor exception', e.Text))
+
+	def testConfigParsing(self):
+		# .cfg file specified, but does not exist		
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot, 
+														    self.__variant_cfg_root.Append("missing"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('^Could not read variant configuration file.*$', e.Text))
+			
+		# No .hrh file specified
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot,
+														    self.__variant_cfg_root.Append("empty_cfg.cfg"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('No variant file specified in .*', e.Text))
+					
+		# .hrh file does not exist
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot,
+														    self.__variant_cfg_root.Append("invalid_cfg.cfg"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('Variant file .* does not exist', e.Text))
+				
+		# Valid .cfg file
+		configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot, 
+													    self.__variant_cfg)
+		self.failUnless(configDetails)
+		
+		found_variant_hrh = str(configDetails.get('VARIANT_HRH'))	
+		expected_variant_hrh = str(self.variant_hrh)
+		
+		self.assertEqual(found_variant_hrh, expected_variant_hrh)
+	
+
+	def __testBuildPlatforms(self, aRootBldInfLocation, aBldInfFile, 
+							 aExpectedBldInfPlatforms, aExpectedBuildablePlatforms):
+		bldInfFile = aRootBldInfLocation.Append(aBldInfFile)
+		self.failUnless(bldInfFile)
+		
+		bldInfObject = raptor_meta.BldInfFile(bldInfFile, self.__gnucpp, self.raptor)
+		
+		bp = bldInfObject.getBuildPlatforms(self.defaultPlatform)
+		self.assertEquals(bp, aExpectedBldInfPlatforms)
+
+		buildableBldInfBuildPlatforms = raptor_meta.getBuildableBldInfBuildPlatforms(bp,
+				'ARMV5 ARMV7 WINSCW',
+				'ARMV5 ARMV5SMP ARMV7 WINSCW',
+				'ARMV5 ARMV7 WINSCW')
+		
+		for expectedBuildablePlatform in aExpectedBuildablePlatforms:
+			self.assertTrue(expectedBuildablePlatform in buildableBldInfBuildPlatforms)
+			
+		self.assertEqual(len(aExpectedBuildablePlatforms),
+						 len(buildableBldInfBuildPlatforms))
+		return
+	
+	def testBldInfPlatformDeduction(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+				
+		self.__testBuildPlatforms(bldInfTestRoot, 'no_prj_platforms.inf', 
+								  [], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'no_plats.inf', 
+								  [], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'default_plats.inf', 
+								  ['DEFAULT'], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'default_plats_minus_plat.inf', 
+								  ['DEFAULT', '-WINSCW'], ['ARMV7', 'ARMV5', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'single_plat.inf', 
+								  ['ARMV5'], ['ARMV5', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'multiple_plats.inf', 
+								  ['ARMV5', 'WINSCW', 'TOOLS'], ['ARMV5', 'WINSCW', 'TOOLS', 'GCCXML'])
+		return
+	
+	def __testBldInfTestCode(self, aTestRoot, aBldInf, aActual, aExpected):
+		loop_number = 0
+		for actual in aActual:
+			self.assertEquals(actual, aExpected[loop_number])
+			loop_number += 1
+		
+	def testBldInfTestType(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/mmps/test_mmps')
+		
+		bldInfFile = bldInfTestRoot.Append('test_mmps.inf')
+		bldInfObject = raptor_meta.BldInfFile(bldInfFile, self.__gnucpp, self.raptor)
+		testArmv5Platform = self.ARMV5
+		testArmv5Platform["TESTCODE"] = True
+		bldInfObject.getRomTestType(testArmv5Platform)
+		
+		self.__testBldInfTestCode(bldInfTestRoot, 'test_mmps.inf',
+				[bldInfObject.testManual, bldInfObject.testAuto], [1, 1])
+	
+	def __testExport(self, aExportObject, aSource, aDestination, aAction):			
+		self.assertEquals(aExportObject.getSource(), aSource)
+		self.assertEqualsOrContains(aExportObject.getDestination(), aDestination)
+		self.assertEquals(aExportObject.getAction(), aAction)
+	
+	def assertEqualsOrContains(self, aPathStringOrPathStringList, aPathString):
+		# If aPathStringOrPathStringList is a list, which it might well be, we should
+		# assert that aPathString is contained in it
+		# If aPathStringOrPathStringList is not a list, it will be a string, and 
+		# we should assert equality of the strings
+		if isinstance(aPathStringOrPathStringList, list):
+			self.assert_(aPathString in aPathStringOrPathStringList)
+		else:
+			self.assertEquals(aPathStringOrPathStringList, aPathString)
+		
+	def testBldInfExports(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+		bldInfMakefilePathTestRoot = str(self.__makefilePathTestRoot) + '/metadata/project/'
+		
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('exports.inf'), 
+											  self.__gnucpp, self.raptor)
+					
+		exports = bldInfObject.getExports(self.defaultPlatform)
+		
+		# export1.h
+		self.__testExport(exports[0], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export1.h', 
+						  '$(EPOCROOT)/epoc32/include/export1.h', 
+						  'copy')
+
+		# export2.h				export_test\export2.h
+		self.__testExport(exports[1], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export2.h', 
+						  '$(EPOCROOT)/epoc32/include/export_test/export2.h', 
+						  'copy')
+		
+		# export3.h				..\export_test\export3.h
+		self.__testExport(exports[2], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export3.h', 
+						  '$(EPOCROOT)/epoc32/export_test/export3.h', 
+						  'copy')
+		
+		# export4.h				\export_test_abs\export4.h
+		self.__testExport(exports[3], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export4.h', 
+						  self.__OSRoot+'/export_test_abs/export4.h', 
+						  'copy')
+
+		# export5.h				\epoc32\export_test_abs\export5.h
+		self.__testExport(exports[4], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export5.h', 
+						  '$(EPOCROOT)/epoc32/export_test_abs/export5.h', 
+						  'copy')
+		
+		# export6.h				|..\export_test_rel\export6.h
+		self.__testExport(exports[5], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export6.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/export6.h', 
+						  'copy')
+		
+		# export6.h				|\export_test_rel\export7.h
+		self.__testExport(exports[6], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export7.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/export7.h',
+						  'copy')
+		
+		# export7.h				|export_test_rel\export8.h
+		self.__testExport(exports[7], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export8.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/export8.h', 
+						  'copy')
+
+		# :zip export9.zip
+		self.__testExport(exports[8], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export9.zip', 
+						  '$(EPOCROOT)', 
+						  'unzip')
+
+		# :zip export10.zip		export_test
+		self.__testExport(exports[9], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export10.zip', 
+						  '$(EPOCROOT)/export_test', 
+						  'unzip')
+
+		# :zip export11.zip		/export_test
+		self.__testExport(exports[10], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export11.zip', 
+						  self.__OSRoot+'/export_test', 
+						  'unzip')
+
+		# :zip export12.zip		/epoc32/export_test
+		self.__testExport(exports[11], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export12.zip', 
+						  '$(EPOCROOT)/epoc32/export_test', 
+						  'unzip')
+ 
+		# export13.rsc			z:/resource/app/export13.rsc
+		# Once for each of the three locations for emulated drives
+		# epoc32/data/z/resource/app/export13.rsc *and* in
+		# epoc32/release/winscw/udeb/z/resource/app/export13.rsc *and* in
+		# epoc32/release/winscw/urel/z/resource/app/export13.rsc
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/data/z/resource/app/export13.rsc', 
+						  'copy')
+		
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/app/export13.rsc', 
+						  'copy')
+		
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/app/export13.rsc', 
+						  'copy')
+		
+
+		testExports = bldInfObject.getTestExports(self.defaultPlatform)
+		
+		# testexport1.h
+		self.__testExport(testExports[0], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport1.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport1.h', 
+						  'copy')
+		
+		# testexport2.h				export_test_rel\testexport2.h
+		self.__testExport(testExports[1], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport2.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport2.h', 
+						  'copy')
+
+		# testexport3.h				..\export_test_rel\testexport3.h
+		self.__testExport(testExports[2], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport3.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/testexport3.h', 
+						  'copy')
+
+		# testexport4.h				\export_test_abs\testexport4.h
+		self.__testExport(testExports[3], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport4.h', 
+						  self.__OSRoot+'/export_test_abs/testexport4.h', 
+						  'copy')
+
+		# testexport5.h				\epoc32\export_test_abs\testexport5.h
+		self.__testExport(testExports[4], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport5.h', 
+						  '$(EPOCROOT)/epoc32/export_test_abs/testexport5.h', 
+						  'copy')
+
+		# testexport6.h				|..\export_test_rel\testexport6.h
+		self.__testExport(testExports[5], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport6.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/testexport6.h', 
+						  'copy')
+
+		# testexport7.h				|\export_test_rel\testexport7.h
+		self.__testExport(testExports[6], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport7.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport7.h', 
+						  'copy')
+
+		# testexport8.h				|export_test_rel\testexport8.h
+		self.__testExport(testExports[7], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport8.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport8.h', 
+						  'copy')
+
+		# :zip testexport9.zip
+		self.__testExport(testExports[8], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport9.zip', 
+						  '$(EPOCROOT)', 
+						  'unzip')
+
+		# :zip testexport10.zip		export_test
+		self.__testExport(testExports[9], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport10.zip', 
+						  '$(EPOCROOT)/export_test', 
+						  'unzip')
+
+		# :zip testexport11.zip		/export_test
+		self.__testExport(testExports[10], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport11.zip', 
+						  self.__OSRoot+'/export_test', 
+						  'unzip')
+
+		# :zip testexport12.zip		/epoc32/export_test
+		self.__testExport(testExports[11], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport12.zip', 
+						  '$(EPOCROOT)/epoc32/export_test', 
+						  'unzip')
+
+		# testexport13.rsc		z:/resource/app/testexport13.rsc
+		# Once for each of the three locations for emulated drives
+		# epoc32/data/z/resource/app/testexport13.rsc *and* in
+		# epoc32/release/winscw/udeb/z/resource/app/testexport13.rsc *and* in
+		# epoc32/release/winscw/urel/z/resource/app/testexport13.rsc
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/data/z/resource/app/testexport13.rsc', 
+						  'copy')
+		
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/app/testexport13.rsc', 
+						  'copy')
+		
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/app/testexport13.rsc', 
+						  'copy')
+
+
+	def __testExtension(self, aExtensionObject, aMakefile, aTestParameters):
+		
+		templateExtensionRoot = ""
+		
+		if not aMakefile.startswith("$("):
+			templateExtensionRoot = '$(MAKEFILE_TEMPLATES)/'
+			
+		self.assertEquals(aExtensionObject.getMakefile(), templateExtensionRoot+aMakefile)
+		
+		testOptions = aExtensionObject.getOptions()
+		testVariables = aExtensionObject.getStandardVariables()
+		
+		for testParameter in aTestParameters.keys():
+			if (testParameter.startswith("STDVAR_")):
+				stdvar = testParameter.replace("STDVAR_", "")
+				stdvalue = aTestParameters.get(testParameter)
+				self.assertTrue(testVariables.has_key(stdvar))
+				self.assertEquals(testVariables.get(stdvar), aTestParameters.get(testParameter))
+			else:
+				self.assertTrue(testOptions.has_key(testParameter))
+				self.assertEquals(testOptions.get(testParameter), aTestParameters.get(testParameter))
+
+	def testBldInfExtensions(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+		bldInfMakefilePathTestRoot = str(self.__makefilePathTestRoot)+'/metadata/project/bld.infs'			
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('extensions.inf'),
+											  self.__gnucpp, self.raptor)
+		
+		extensions = bldInfObject.getExtensions(self.ARMV5)
+		
+		self.__testExtension(extensions[0],
+							'test/dummyextension1.mk',
+							{'TARGET':'dummyoutput1.exe',
+							'SOURCES':'dummysource11.cpp dummysource12.cpp dummysource13.cpp',
+							'DEPENDENCIES':'dummylib11.lib dummylib12.lib',
+							'TOOL':'dummytool1.exe',
+							'OPTION11':'option11value',
+							'OPTION12':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+		
+		self.__testExtension(extensions[1],
+							'test/dummyextension2.mk',
+							{'TARGET':'dummyoutput2.exe',
+							'SOURCES':'dummysource21.cpp dummysource22.cpp dummysource23.cpp',
+							'DEPENDENCIES':'dummylib21.lib dummylib22.lib',
+							'TOOL':'dummytool2.exe',
+							'OPTION21':'option21value',
+							'OPTION22':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
+							)
+		
+		self.__testExtension(extensions[2],
+							'$(' + raptor.env + ')/test/dummyextension3.mk',
+							{'TARGET':'dummyoutput3.exe',
+							'SOURCES':'dummysource31.cpp dummysource32.cpp dummysource33.cpp',
+							'DEPENDENCIES':'dummylib31.lib dummylib32.lib',
+							'TOOL':'dummytool3.exe',
+							'OPTION31':'option31value',
+							'OPTION32':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
+							)
+		
+		testExtensions = bldInfObject.getTestExtensions(self.ARMV5)
+
+		self.__testExtension(testExtensions[0],
+							'test/dummytestextension1.mk',
+							{'TARGET':'dummytestoutput1.exe',
+							'SOURCES':'dummytestsource11.cpp dummytestsource12.cpp dummytestsource13.cpp',
+							'DEPENDENCIES':'dummytestlib11.lib dummytestlib12.lib',
+							'TOOL':'dummytesttool1.exe',
+							'OPTIONTEST11':'optiontest11value',
+							'OPTIONTEST12':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+
+		self.__testExtension(testExtensions[1],
+							'test/dummytestextension2.mk',
+							{'TARGET':'dummytestoutput2.exe',
+							'SOURCES':'dummytestsource21.cpp dummytestsource22.cpp dummytestsource23.cpp',
+							'DEPENDENCIES':'dummytestlib21.lib dummytestlib22.lib',
+							'TOOL':'dummytesttool2.exe',
+							'OPTIONTEST21':'optiontest21value',
+							'OPTIONTEST22':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+		
+	def testBldInfIncludes(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs/includes')
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('top_level.inf'),
+											  self.__gnucpp, self.raptor)
+		Root = str(bldInfTestRoot)
+		
+		mmpFiles = bldInfObject.getMMPList(self.ARMV5)
+		self.assertEquals(len(mmpFiles['mmpFileList']), 3)	
+		self.assertEquals(str(mmpFiles['mmpFileList'][0].filename), Root + "/dir3/down_dir.mmp")
+		self.assertEquals(str(mmpFiles['mmpFileList'][1].filename), Root + "/dir1/dir2/up_dir.mmp")
+		self.assertEquals(str(mmpFiles['mmpFileList'][2].filename), Root + "/top_level.mmp")
+
+		exports = bldInfObject.getExports(self.ARMV5)
+		self.assertEquals(exports[0].getSource(), Root + "/dir3/down_dir_export_source.h")
+		self.assertEquals(exports[1].getSource(), Root + "/dir1/dir2/up_dir_export_source.h")
+		self.assertEquals(exports[2].getSource(), Root + "/top_level_export_source.h")
+
+	def testMmpIncludes(self):
+		mmpTestRoot = self.__testRoot.Append('metadata/project/mmps/includes')
+		mmpMakefilePathTestRoot = str(self.__makefilePathTestRoot)+'/metadata/project/mmps/includes'			
+		bldInfObject = raptor_meta.BldInfFile(mmpTestRoot.Append('top_level.inf'),
+											  self.__gnucpp, self.raptor)
+		
+		mmpFiles = bldInfObject.getMMPList(self.ARMV5)
+		mmpFile = raptor_meta.MMPFile(mmpFiles['mmpFileList'][0].filename, 
+										   self.__gnucpp,
+										   bldInfObject,
+										   self.raptor)
+		
+		self.assertEquals(str(mmpFile.filename), 
+						  str(mmpTestRoot.Append("top_level.mmp")))
+	
+	
+		mmpContent = mmpFile.getContent(self.ARMV5)
+		mmpBackend = raptor_meta.MMPRaptorBackend(None, str(mmpFile.filename), str(bldInfObject.filename))
+		mmpParser = mmpparser.MMPParser(mmpBackend)
+		parseresult = None
+		try:
+			parseresult = mmpParser.mmp.parseString(mmpContent)
+		except Exception,e:
+			pass
+			
+		self.assertTrue(parseresult)
+		self.assertEquals(parseresult[0],'MMP')
+
+		mmpBackend.finalise(self.ARMV5)
+		
+		var = mmpBackend.BuildVariant
+
+		sources = []
+		for i in var.ops:
+			if i.name == "SOURCE":
+				sources.extend(i.value.split(" "))
+
+		self.assertTrue((mmpMakefilePathTestRoot+'/top_level.cpp') in sources)
+		self.assertTrue((mmpMakefilePathTestRoot+'/dir1/dir2/up_dir.cpp') in sources)
+		self.assertTrue((mmpMakefilePathTestRoot+'/dir3/down_dir.cpp') in sources)
+	
+	
+	def testDefFileResolution(self):
+		
+		class DefFileTest(object):
+			""" Test resolveDefFile for a particular set of mmp options """
+			def __init__(self, resolveddeffile, mmpfilename, deffilekeyword, target, nostrictdef, platform):
+				self.resolveddeffile = resolveddeffile
+				self.mmpfilename=mmpfilename
+				self.deffilekeyword=deffilekeyword
+				self.target=target
+				self.nostrictdef = nostrictdef
+				self.platform = platform
+		
+			def test(self, raptor):
+				m = raptor_meta.MMPRaptorBackend(raptor, self.mmpfilename, "")
+				m.deffile = self.deffilekeyword
+				m.nostrictdef = self.nostrictdef
+				f = m.resolveDefFile(self.target, self.platform)
+				del m
+				if self.resolveddeffile == f:
+					return True
+				return False
+		
+		defFileTests = []
+		
+		for testPlat in self.testPlats:			
+			epocroot = str(testPlat['EPOCROOT'])
+			releaseDir = testPlat['PLATFORM'].lower()
+			defFileDir = "eabi"
+			if testPlat['PLATFORM'] == "WINSCW":
+				defFileDir = "bwins"
+							
+			defFileTests.extend([
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/target.def',
+					'/test/component/mmpfile.mmp',
+					'',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/targetu.DEF',
+					'/test/component/mmpfile.mmp',
+					'target.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/target2.DEF',
+					'/test/component/mmpfile.mmp',
+					'target2.DEF',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/target2u.DEF',
+					'/test/component/mmpfile.mmp',
+					'./target2.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/target2.DEF',
+					'/test/component/mmpfile.mmp',
+					'./target2.DEF',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/'+defFileDir+'/target3u.DEF',
+					'/test/component/mmpfile.mmp',
+					'./~/target3.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					epocroot+'/epoc32/include/def/'+defFileDir+'/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'/epoc32/include/def/~/target.def',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					epocroot+'/epoc32/release/'+releaseDir+'/target.def',
+					'/test/component/mmpfile.mmp',
+					'/epoc32/release/'+releaseDir+'/target.def',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/deffiles/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'/deffiles/target.def',
+					'target.exe',
+					False,
+					testPlat)
+				])
+		
+		for t in defFileTests:
+			self.assertEquals(t.test(self.raptor), True)
+		
+	def testApplyOsVariant(self):
+		# Mock output class
+		class OutputMock(object):
+			def write(self, text):
+				pass
+				
+		def MetaReaderInitFunction(self, aRaptor):
+			self._MetaReader__Raptor = aRaptor
+		
+		bu = raptor_data.BuildUnit("os_variant", [])
+					
+		self.raptor.keepGoing = False
+		raptor_meta.MetaReader.__init__ = MetaReaderInitFunction
+		metaReader = raptor_meta.MetaReader(self.raptor)
+		metaReader.ApplyOSVariant(bu, ".")
+
+		self.raptor.keepGoing = True
+		self.raptor.out = OutputMock()
+		metaReader = raptor_meta.MetaReader(self.raptor)	
+		metaReader.ApplyOSVariant(bu, ".")
+
+	def __assertEqualStringList(self, aListOne, aListTwo):
+		self.assertEquals(len(aListOne), len(aListTwo))
+		
+		i = 0
+		while i < len(aListOne) :
+			self.assertEquals(aListOne[i], aListTwo[i])
+			i = i + 1
+		
+	def testOptionReplace(self):
+		# Test how we resolve known permutations of values given to the .mmp file OPTION_REPLACE keyword
+		mockBackend = raptor_meta.MMPRaptorBackend(self.raptor, "somefile.mmp", "")
+		
+		results = mockBackend.resolveOptionReplace('--argA')
+		self.__assertEqualStringList(results, ['--argA<->'])
+
+		results = mockBackend.resolveOptionReplace('--argB value')
+		self.__assertEqualStringList(results, ['--argB%20<->@@', '@@%<->--argB%20value'])
+		
+		results = mockBackend.resolveOptionReplace('--argD value1 --argE')
+		self.__assertEqualStringList(results, ['--argD%20<->@@', '@@%<->--argD%20value1', '--argE<->'])
+		
+		results = mockBackend.resolveOptionReplace('--argF --argG')
+		self.__assertEqualStringList(results, ['--argF<->--argG'])
+		
+		results = mockBackend.resolveOptionReplace('--argH --argI value')
+		self.__assertEqualStringList(results, ['--argH<->--argI%20value'])
+		
+		results = mockBackend.resolveOptionReplace('--argJ value1 --argK value2')
+		self.__assertEqualStringList(results, ['--argJ%20<->@@', '@@%<->--argJ%20value1', '--argK%20<->@@', '@@%<->--argK%20value2'])		
+		
+		results = mockBackend.resolveOptionReplace('--argL value1 --argM value2 --argN --argO')
+		self.__assertEqualStringList(results, ['--argL%20<->@@', '@@%<->--argL%20value1', '--argM%20<->@@', '@@%<->--argM%20value2', '--argN<->--argO'])		
+		
+		results = mockBackend.resolveOptionReplace('--argP value1 value2 --argQ value3 value4')
+		self.__assertEqualStringList(results, ['--argP%20<->@@', '@@%<->--argP%20value1', '--argQ%20<->@@', '@@%<->--argQ%20value3'])		
+		
+		results = mockBackend.resolveOptionReplace('value1 value2')
+		self.__assertEqualStringList(results, [])
+
+		results = mockBackend.resolveOptionReplace('value1 --argR')
+		self.__assertEqualStringList(results, ['--argR<->'])
+		
+		results = mockBackend.resolveOptionReplace('-singleHyphenargS value1 -singleHyphenargT value2')
+		self.__assertEqualStringList(results, ['-singleHyphenargS%20<->@@', '@@%<->-singleHyphenargS%20value1', '-singleHyphenargT%20<->@@', '@@%<->-singleHyphenargT%20value2'])
+
+		results = mockBackend.resolveOptionReplace('--assignmentArgU=value1 --assignmentArgV=value2')
+		self.__assertEqualStringList(results, ['--assignmentArgU=value1<->--assignmentArgV=value2'])
+	
+	def testModuleName(self):
+		# Test how we resolve known permutations of values given to the .mmp file OPTION_REPLACE keyword
+		mockBackend = raptor_meta.MetaReader(self.raptor)
+		
+		resultsDictList = [ {"bldinf":"Z:/src/romfile/group/tb92/GROUP/bld.inf", "result":"romfile"},
+				    {"bldinf":"/src/romfile/group/tb92/GROUP/bld.inf", "result":"romfile"},
+				    {"bldinf":"Z:/src/romFile/group/tb92/GROUP/another.inf", "result":"romFile"},
+				    {"bldinf":"X:/src/RoMfile/group/bld.inf", "result":"RoMfile"},
+				    {"bldinf":"w:/contacts/group/ONgoing/group/bld.inf", "result":"contacts"},
+				    {"bldinf":"p:/group/bld.inf", "result":"module"},
+				    {"bldinf":"/group/bld.inf", "result":"module"},
+				    {"bldinf":"p:/ONGOING/bld.inf", "result":"module"},
+				    {"bldinf":"/ONGOING/bld.inf", "result":"module"}
+				    ]
+
+		for result in resultsDictList:
+			moduleName = mockBackend.ModuleName(result["bldinf"])
+			self.assertEquals(moduleName, result["result"])
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_meta_unit"
+
+	tests = unittest.makeSuite(TestRaptorMeta)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,177 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Unit tests for the raptor module
+
+import raptor
+import raptor_version
+import re
+import unittest
+import generic_path
+import tempfile
+import os
+
+class TestRaptor(unittest.TestCase):
+
+	def testConstructor(self):
+		r = raptor.Raptor()
+		self.failUnless(r)
+
+
+	def testHome(self):
+		r = raptor.Raptor()
+		self.failUnless(r.home)
+		r = raptor.Raptor("dirname")
+		self.failUnless(r.errorCode == 1) # picked up that dirname doesn't exist
+		
+
+	def testVersion(self):
+		self.failUnless(re.match("^\d+\.\d+\.", raptor_version.Version()))
+
+
+	def testCLISupport(self):
+		r = raptor.Raptor()
+		r.RunQuietly(True)
+		r.AddConfigName("tom")
+		r.AddConfigName("dick")
+		r.AddConfigName("harry")
+		r.SetEnv("ROOT", "/a/b/c")
+		r.SetEnv("TREE", "beech")
+		r.SetJobs(4)
+		r.AddProject("foo.mmp")
+		r.AddProject("bar.mmp")
+		r.SetSysDefFile("SysDef.xml")
+		r.SetSysDefBase("C:\\mysysdef")
+		r.AddBuildInfoFile("build.info")
+		r.SetTopMakefile("E:\\epoc32\\build\\Makefile")
+
+	def setUp(self):
+		self.r = raptor.Raptor()
+		self.r.out = OutputMock()
+		
+		self.cwd = generic_path.CurrentDir()
+		self.isFileReturningFalse = lambda: False
+		self.isFileReturningTrue = lambda: True
+		
+		self.sysDef = self.cwd.Append(self.r.systemDefinition)
+		self.bldInf = self.cwd.Append(self.r.buildInformation)
+
+	def testCreateWarningForNonexistingBldInfAndSystemDefinitionFile(self): 
+		"""Test if sbs creates warning if executed without specified 
+		component to build i.e. default bld.inf (bld.inf in current 
+		directory) or system definition file.
+
+		Uses an empty temporary directory for this."""
+
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d) 
+		self.r.GetComponentGroupsFromCLI()
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+		
+		self.assertTrue(self.r.out.warningWritten())
+
+	def testCreateWarningForExistingBldInf(self):
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d)
+		f = open("bld.inf","w")
+		f.close()
+		self.r.GetComponentGroupsFromCLI()
+		os.unlink("bld.inf")
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+
+		self.assertFalse(self.r.out.warningWritten())
+
+	def testCreateWarningForExistingSystemDefinitionFile(self): 
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d)
+		f = open("System_Definition.xml","w")
+		f.close()
+		self.r.GetComponentGroupsFromCLI()
+		os.unlink("System_Definition.xml")
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+
+		self.assertFalse(self.r.out.warningWritten())
+	
+	# Test Info, Warn & Error functions can handle attributes
+	def testInfoAttributes(self):
+		self.r.Info("hello %s", "world", planet="earth")
+		expected = "<info planet='earth'>hello world</info>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testWarnAttributes(self):
+		self.r.Warn("look out", where="behind you")
+		expected = "<warning where='behind you'>look out</warning>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testErrorAttributes(self):
+		self.r.Error("messed up %s and %s", "all", "sundry", bldinf="bld.inf")
+		expected = "<error bldinf='bld.inf'>messed up all and sundry</error>\n"
+		self.assertEquals(self.r.out.actual, expected)	
+		
+	# Test Info, Warn & Error functions to ensure XML control chars are escaped
+	def testInfoXMLEscaped(self):
+		self.r.Info("h&l>o<&amp;")
+		expected = "<info>h&amp;l&gt;o&lt;&amp;amp;</info>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testWarnXMLEscaped(self):
+		self.r.Warn("h&l>o<&amp;")
+		expected = "<warning>h&amp;l&gt;o&lt;&amp;amp;</warning>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testErrorXMLEscaped(self):
+		self.r.Error("h&l>o<&amp;")
+		expected = "<error>h&amp;l&gt;o&lt;&amp;amp;</error>\n"
+		self.assertEquals(self.r.out.actual, expected)
+	
+		
+# Mock output class preserving output for checking
+# Can also check if any warning has been written
+class OutputMock(object):
+	actual = ""
+	
+	def write(self, text):
+		self.actual = text
+		
+	def warningWritten(self):
+		regExp = re.compile(".*warning.*")
+		if regExp.match(self.actual):
+			return True
+		return False
+			
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_unit"
+
+	tests = unittest.makeSuite(TestRaptor)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_utilities_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_utilities_unit module
+# This module tests the classed forming the Raptor bld.inf and .mmp parsing support
+#
+
+import os
+import raptor_utilities
+import sys
+import unittest
+
+class TestRaptorUtilities(unittest.TestCase):
+	pass
+				
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_utilities_unit"
+
+	tests = unittest.makeSuite(TestRaptorUtilities)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_xml_unit.py	Mon Nov 16 09:46:46 2009 +0000
@@ -0,0 +1,118 @@
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_xml_unit module
+# This module tests the identification and parsing of XML metadata files
+#
+
+import os
+import raptor
+import generic_path
+import raptor_xml
+import unittest
+
+class TestRaptorXML(unittest.TestCase):
+	
+	def setUp(self):
+		self.__logger = raptor.Raptor()
+		self.__nullSysDefRoot = generic_path.Path("smoke_suite/test_resources")
+		self.__sysDefRoot = generic_path.Join(os.environ[raptor.env],"test/smoke_suite/test_resources")
+		self.__sysDefFileRoot = generic_path.Join(os.environ[raptor.env], "test/metadata/system")
+		
+	def testSystemDefinitionProcessing(self):
+		# Make formatting neater
+		print
+		expectedBldInfs = [generic_path.Join(self.__sysDefRoot, "simple/bld.inf"),\
+						generic_path.Join(self.__sysDefRoot, "basics/helloworld/Bld.inf")]
+		
+		sysdefs = ["1.4.1", "1.3.1", "1.5.1"]
+		for sysdef in sysdefs:
+			systemModel = raptor_xml.SystemModel(self.__logger,
+					generic_path.Join(self.__sysDefFileRoot,
+					"system_definition_" + sysdef + ".xml"), self.__sysDefRoot)
+			self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+		
+	
+		sourceroot = ""
+		if os.environ.has_key('SOURCEROOT'):
+			sourceroot = os.environ['SOURCEROOT']
+		os.environ['SOURCEROOT'] = self.__sysDefRoot.GetLocalString()
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__nullSysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+
+		del os.environ["SOURCEROOT"]
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+		
+		os.environ["SOURCEROOT"] = 'i_am_not_a_valid_path_at_all'
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+
+				
+		del os.environ["SOURCEROOT"]
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_3.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists([], systemModel.GetAllComponents())
+				
+		
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_multi_layers.xml"), self.__sysDefRoot)
+
+		expectedBldInfs = [ generic_path.Join(self.__sysDefRoot, "simple/bld.inf"),\
+							generic_path.Join(self.__sysDefRoot, "simple_dll/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_export/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_gui/Bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_implib/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_lib/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_stringtable/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_test/bld.inf")]
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+	
+		expectedBldInfs = [ generic_path.Join(self.__sysDefRoot, "simple_export/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_gui/Bld.inf")]
+		self.__compareFileLists(expectedBldInfs, systemModel.GetLayerComponents("Second Layer"))
+
+		self.__compareFileLists([], systemModel.GetLayerComponents("Fifth Layer"))
+				
+		self.__compareFileLists([], systemModel.GetLayerComponents("Sixth Layer"))
+		
+				
+		# Probably redundant, but return local environment (at least its dictionary) to pre-test state
+		os.environ["SOURCEROOT"] = sourceroot
+		
+	def __compareFileLists (self, aListOne, aListTwo):
+		
+		self.assertEquals(len(aListOne), len(aListTwo))
+		
+		i = 0
+		while i < len(aListOne) :
+			self.assertEquals(aListOne[i].GetLocalString().lower(), aListTwo[i].GetLocalString().lower())
+			i = i + 1
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_xml_unit"
+
+	tests = unittest.makeSuite(TestRaptorXML)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- a/sbsv2/raptor/util/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,67 +1,67 @@
-
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-##
-
-
-SHELL:=bash
-
-.PHONY:: all
-all::
-
-include utilbuild.mk # need general settings e.g. INSTALLROOT
-
-ifeq ($(filter CLEAN,$(MAKECMDGOALS))$(filter clean,$(MAKECMDGOALS)),)
-
-include gccprogram.mk
-
-# Actual programs
-include descramble/Makefile
-
-include talon/Makefile
-
-include ransleep/Makefile
-
-# Some tools not built for windows
-ifneq ($(filter $(HOSTPLATFORM),win),win)
-ifeq ($(CLEANMODE),)
-include bash.mk
-
-include make.mk
-
-#  Build pvm and pvmgmake later when they have been corrected
-#include pvmgmake.mk
-
-#include pvm.mk
-
-include python.mk
-
-include codewarrior.mk
-
-include bvcpp.mk
-
-include gccxml.mk
-
-include dialog.mk
-endif
-
-endif
-
-else
-
-
-clean:
-	@echo "Cleaning"
-	make $(MAKEFILE) CLEANMODE:=1 | grep '<file>' |sed -r 's#.*<file>(.*)</file>.*#\1#' | (read F; while [ $$? -eq 0 ]; do rm -f "$$F"; read F; done; true )
-endif
+
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+##
+
+
+SHELL:=bash
+
+.PHONY:: all
+all::
+
+include utilbuild.mk # need general settings e.g. INSTALLROOT
+
+ifeq ($(filter CLEAN,$(MAKECMDGOALS))$(filter clean,$(MAKECMDGOALS)),)
+
+include gccprogram.mk
+
+# Actual programs
+include descramble/Makefile
+
+include talon/Makefile
+
+include ransleep/Makefile
+
+# Some tools not built for windows
+ifneq ($(filter $(HOSTPLATFORM),win),win)
+ifeq ($(CLEANMODE),)
+include bash.mk
+
+include make.mk
+
+#  Build pvm and pvmgmake later when they have been corrected
+#include pvmgmake.mk
+
+#include pvm.mk
+
+include python.mk
+
+include codewarrior.mk
+
+include bvcpp.mk
+
+include gccxml.mk
+
+include dialog.mk
+endif
+
+endif
+
+else
+
+
+clean:
+	@echo "Cleaning"
+	make $(MAKEFILE) CLEANMODE:=1 | grep '<file>' |sed -r 's#.*<file>(.*)</file>.*#\1#' | (read F; while [ $$? -eq 0 ]; do rm -f "$$F"; read F; done; true )
+endif
--- a/sbsv2/raptor/util/bash.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/bash.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,47 +1,47 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Build bash 3.2 for SBSv2
-#
-
-
-RAPTOR_BASH_VER:=4.0
-
-BASH_SOURCEDIR:=$(OUTPUTPATH)/bash-$(RAPTOR_BASH_VER)
-BASH_TAR:=$(SBS_HOME)/util/ext/bash-$(RAPTOR_BASH_VER).tar.gz
-BASH_PATCHES_TAR:=$(SBS_HOME)/util/ext/bash-$(RAPTOR_BASH_VER)-patches.tar.gz
-
-define b_bash
-.PHONY:: bash
-
-all:: bash 
-
-bash: $(INSTALLROOT)/bin/bash
-
-$(INSTALLROOT)/bin/bash: $(BASH_TAR) $(BASH_PATCHES_TAR)
-	rm -rf $(BASH_SOURCEDIR) && \
-	cd $(OUTPUTPATH) && \
-	tar -xzf $(BASH_TAR) &&  \
-	(  \
-	cd $(BASH_SOURCEDIR) && \
-	mkdir patches && (cd patches && tar -xzf $(BASH_PATCHES_TAR)) && \
-	for p in patches/*; do if [ -f $p ]; then patch -p0 < $$$$p; fi; done && \
-	CFLAGS="-O2 $(GCCTUNE) -s" ./configure --prefix=$(INSTALLROOT) --enable-arith-for-command --enable-multibyte --enable-job-control --enable-progcomp --enable-process-substitution  --enable-readline --disable-rpath && \
-	$(MAKE) && $(MAKE) install \
-	) ; \
-	cp $$@ $$(dir $$@)/sh
-	
-endef
-
-$(eval $(b_bash))
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Build bash 3.2 for SBSv2
+#
+
+
+RAPTOR_BASH_VER:=4.0
+
+BASH_SOURCEDIR:=$(OUTPUTPATH)/bash-$(RAPTOR_BASH_VER)
+BASH_TAR:=$(SBS_HOME)/util/ext/bash-$(RAPTOR_BASH_VER).tar.gz
+BASH_PATCHES_TAR:=$(SBS_HOME)/util/ext/bash-$(RAPTOR_BASH_VER)-patches.tar.gz
+
+define b_bash
+.PHONY:: bash
+
+all:: bash 
+
+bash: $(INSTALLROOT)/bin/bash
+
+$(INSTALLROOT)/bin/bash: $(BASH_TAR) $(BASH_PATCHES_TAR)
+	rm -rf $(BASH_SOURCEDIR) && \
+	cd $(OUTPUTPATH) && \
+	tar -xzf $(BASH_TAR) &&  \
+	(  \
+	cd $(BASH_SOURCEDIR) && \
+	mkdir patches && (cd patches && tar -xzf $(BASH_PATCHES_TAR)) && \
+	for p in patches/*; do if [ -f $p ]; then patch -p0 < $$$$p; fi; done && \
+	CFLAGS="-O2 $(GCCTUNE) -s" ./configure --prefix=$(INSTALLROOT) --enable-arith-for-command --enable-multibyte --enable-job-control --enable-progcomp --enable-process-substitution  --enable-readline --disable-rpath && \
+	$(MAKE) && $(MAKE) install \
+	) ; \
+	cp $$@ $$(dir $$@)/sh
+	
+endef
+
+$(eval $(b_bash))
--- a/sbsv2/raptor/util/bvcpp.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/bvcpp.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,40 +1,40 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-BVCPP_TAR:=$(SBS_HOME)/util/ext/bv.tgz
-
-
-define b_bvcpp
-
-.PHONY:: bvcpp
-
-all:: bvcpp
-
-bvcpp: $(INSTALLROOT)/bv/bin/cpp
-
-$(INSTALLROOT)/bv/bin/cpp: $(BVCPP_TAR)
-	cd $(INSTALLROOT) && \
-	rm -rf bv && \
-	tar -xzf $(BVCPP_TAR)&& touch $$@
-
-endef
-
-$(eval $(b_bvcpp))
-
-
-
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+BVCPP_TAR:=$(SBS_HOME)/util/ext/bv.tgz
+
+
+define b_bvcpp
+
+.PHONY:: bvcpp
+
+all:: bvcpp
+
+bvcpp: $(INSTALLROOT)/bv/bin/cpp
+
+$(INSTALLROOT)/bv/bin/cpp: $(BVCPP_TAR)
+	cd $(INSTALLROOT) && \
+	rm -rf bv && \
+	tar -xzf $(BVCPP_TAR)&& touch $$@
+
+endef
+
+$(eval $(b_bvcpp))
+
+
+
+
--- a/sbsv2/raptor/util/codewarrior.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/codewarrior.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,38 +1,38 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-CODEWARRIOR_TAR:=$(SBS_HOME)/util/ext/cw_build470msl19.tgz
-
-
-define b_codewarrior
-
-.PHONY:: codewarrior
-
-all:: codewarrior
-
-codewarrior: $(INSTALLROOT)/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/mwccsym2
-	
-$(INSTALLROOT)/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/mwccsym2: $(CODEWARRIOR_TAR)
-	cd $(INSTALLROOT) && \
-	tar -xzf $(CODEWARRIOR_TAR) && touch $$@
-endef
-
-$(eval $(b_codewarrior))
-
-
-
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+CODEWARRIOR_TAR:=$(SBS_HOME)/util/ext/cw_build470msl19.tgz
+
+
+define b_codewarrior
+
+.PHONY:: codewarrior
+
+all:: codewarrior
+
+codewarrior: $(INSTALLROOT)/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/mwccsym2
+	
+$(INSTALLROOT)/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/mwccsym2: $(CODEWARRIOR_TAR)
+	cd $(INSTALLROOT) && \
+	tar -xzf $(CODEWARRIOR_TAR) && touch $$@
+endef
+
+$(eval $(b_codewarrior))
+
+
+
+
--- a/sbsv2/raptor/util/config.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/config.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,29 +1,29 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-#ifdef HOST_WIN
-#define HAS_SETENVIRONMENTVARIABLE 1
-#define HAS_GETENVIRONMENTVARIABLE 1
-#define HAS_GETCOMMANDLINE 1
-#define HAS_MILLISECONDSLEEP 1
-#define HAS_MSVCRT 1
-#else
-#define HAS_POLL 1
-#define HAS_SETENV 1
-#define HAS_GETENV 1
-#define HAS_STDLIBH 1
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifdef HOST_WIN
+#define HAS_SETENVIRONMENTVARIABLE 1
+#define HAS_GETENVIRONMENTVARIABLE 1
+#define HAS_GETCOMMANDLINE 1
+#define HAS_MILLISECONDSLEEP 1
+#define HAS_MSVCRT 1
+#else
+#define HAS_POLL 1
+#define HAS_SETENV 1
+#define HAS_GETENV 1
+#define HAS_STDLIBH 1
+#endif
--- a/sbsv2/raptor/util/descramble/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/descramble/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,29 +1,29 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Utility makefile 
-#
-#
-
-TARGET:=sbs_descramble
-SOURCES:=$(SBS_HOME:\=/)/util/descramble/descramble.cpp 
-
-ifeq ($(filter win,$(HOSTPLATFORM)),win)
-CFLAGS:=-DWIN32
-LDFLAGS:=
-else
-CFLAGS:=
-LDFLAGS:=-lpthread
-endif
-
-$(eval $(cppprogram))
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Utility makefile 
+#
+#
+
+TARGET:=sbs_descramble
+SOURCES:=$(SBS_HOME:\=/)/util/descramble/descramble.cpp 
+
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
+CFLAGS:=-DWIN32
+LDFLAGS:=
+else
+CFLAGS:=
+LDFLAGS:=-lpthread
+endif
+
+$(eval $(cppprogram))
--- a/sbsv2/raptor/util/descramble/descramble.cpp	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/descramble/descramble.cpp	Mon Nov 16 09:46:46 2009 +0000
@@ -1,629 +1,629 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/*
- 	descramble.cpp:
-
-	Description
-	-----------
-	"descramble" is a program that buffers standard input until end of file
-	and then copies the buffers to the standard output in such a way that
-	if there are many copies of descramble running, each will be given an
-	opportunity to write the complete contents of its buffers while the
-	others wait.
-
-	Purpose
-	-------
-	descramble is used to ensure that output from multiple concurrent processes
-	is not interleaved.  It is useful in build systems such as GNU make with
-	the -j switch, although it requires that makefiles are changed before it can
-	work.
-
-	Design
-	------
-	This program may be built on Linux or on Windows.  On both platforms the
-	basic behavior is similar:
-		1) Read standard input into buffers.  Allocate these dynamically
-		   so that there is no limit.
-		2) Wait on a named or system-wide semaphore.
-		3) Output all the buffers to stdout.
-
-	The name of the semaphore is a parameter and should be chosen so that multiple
-	instances of the build system (or whatever process is running many tasks with
-	descramble) cannot block each other.
-
-
-	Special Considerations for Linux
-	--------------------------------
-	A named semaphore is a file in the filesystem.  It is not automatically removed
-	when a process exits.  descramble provides a "stop" parameter to be run at the
-	"end" of the build system (or other process) that will clean away this semaphore.
-
-
-	Special Considerations for Windows
-	----------------------------------
-	The windows implementation is built with the MINGW toolchain.  On windows
-	problems have been noticed that require a fairly complex timeout capability
-	such that descramble will not wait "forever" for output from stdin.
-	This solution currently uses a "kill thread" that will stop descramble if
-	it is blocked in a read on stdio for more than the timeout period.
-
-	The "kill thread" attempts to print as much of the input from stdin as has
-	been read so far.  It scans this for XML characters and escapes them, finally
-	printing its own XML-formatted error message with the escaped version of the
-	input between <descramble> tags.
-
-
-
-
-*/
-
-#include <stdio.h>
-#include <vector>
-#include <ctype.h>
-
-// what size chunks to allocate/read
-const int BufferSize = 4096;
-unsigned int globalreadcounter = 0;
-
-// OS specific headers
-#ifdef WIN32
-#include <windows.h>
-#include <tlhelp32.h>
-#include <fcntl.h> /*  _O_BINARY */
-#else
-#include <stdlib.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <string.h>
-#endif
-#include <unistd.h>
-
-#define DEFAULT_TIMEOUT (600000) // 10 minutes
-
-#define GOOD_OUTPUT 1
-#define BAD_OUTPUT 0
-
-typedef struct
-{
-	char *name;
-	#ifdef WIN32
- 		HANDLE handle;
-	#else
-		sem_t *handle;
-	#endif
-
-	unsigned int timeout;
-} sbs_semaphore;
-
-
-// readstate is a flag to indicate whether descramble is reading
-// it's standard input.
-// This allows the timeout thread on Windows to only cause the
-// process to exit if there is an overdue read operation on the
-// standard input.
-int readstate=1;
-int timeoutstate=0;
-
-// The output semaphore.
-sbs_semaphore sem;
-#ifdef WIN32
-	HANDLE bufferMutex;
-
-
-	// Make all output handling binary
-	unsigned int _CRT_fmode = _O_BINARY;
-
-
-	DWORD killPIDTree = 0;
-#else
-	pid_t killPIDTree = 0;
-#endif
-
-
-
-// Where we store all the standard input.
-std::vector<char*> buffers;
-std::vector<int> bytesIn;
-
-
-void error(const char *reason, char *SEM_NAME)
-{
-	fprintf(stderr, "<descrambler reason='%s' semaphore='%s' />\n", reason, SEM_NAME);
-	exit(1);
-}
-
-#ifdef WIN32
-
-void killProcess(DWORD pid)
-{
-	HANDLE proc = OpenProcess(PROCESS_TERMINATE,0,pid);
-	if (proc)
-	{
-		TerminateProcess(proc, 1);
-		//fprintf(stdout,"sent terminate to process=%d\n", pid);
-		CloseHandle(proc);
-	}
-	else
-	{
-		//fprintf(stderr,"Can't open process=%d\n", pid);
-	}
-}
-
-typedef struct {
-	DWORD PID;
-	DWORD PPID;
-} proc;
-
-void killProcessTreeRecursively(DWORD PPID, DWORD thisPID, std::vector<proc *> &processtree)
-{
-	int idx;
-
-	for (idx=0; idx < processtree.size(); idx++)
-	{
-		if (processtree[idx]->PID != thisPID &&  processtree[idx]->PPID  == PPID)
-		{
-			killProcessTreeRecursively(processtree[idx]->PID, thisPID, processtree);
-			//fprintf(stderr,"Found descendant =%d\n",processtree[idx]->PID );
-		}
-	}
-
-	killProcess(PPID);
-}
-
-int killProcessTree(DWORD PPID)
-{
-	HANDLE hSnapShot;
-	DWORD thisProcID=0;
-	BOOL ok;
-	PROCESSENTRY32 pe;
-	std::vector<proc *> processtree;
-
-	thisProcID = GetCurrentProcessId();
-
-	hSnapShot=CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
-
-	// Put all this process information into an array;
-	ok = Process32First(hSnapShot, &pe);
-	while (ok)
-	{
-		if ( pe.th32ProcessID != thisProcID)
-		{
-			proc *p = new proc;
-			p->PID = pe.th32ProcessID;
-			p->PPID = pe.th32ParentProcessID;
-			processtree.push_back(p);
-			//fprintf(stderr,"Found process =%d\n", pe.th32ProcessID );
-		}
-
-		ok = Process32Next(hSnapShot, &pe);
-	}
-
-	killProcessTreeRecursively(PPID, thisProcID, processtree);
-
-	CloseHandle(hSnapShot);
-
-	//fprintf(stderr,"Ending killproc\n", PPID);
-
-	return 0;
-}
-
-#endif
-
-void createDescrambleSemaphore(sbs_semaphore *s)
-{
-#ifdef WIN32
-	s->handle = CreateSemaphore(NULL, 1, 1, s->name);
-	if (s->handle)
-		CloseHandle(s->handle);
-	else
-		error("unable to create semaphore", s->name);
-#else
-	s->handle = sem_open(s->name, O_CREAT | O_EXCL, 0644, 1);
-
-  	if (s->handle == SEM_FAILED)
-	{
-		sem_close(s->handle);
-	  	error("unable to create semaphore", s->name);
-	}
-	sem_close(s->handle);
-#endif
-}
-
-void destroyDescrambleSemaphore(sbs_semaphore *s)
-{
-	#ifdef WIN32
-		/* can't destroy a windows semaphore... */
-	#else
-  		if (sem_unlink(s->name) != 0)
-		  	error("unable to unlink semaphore", s->name);
-	#endif
-}
-
-
-int waitForOutput(sbs_semaphore *s)
-{
-	/* try and open the semaphore now */
-        #ifdef WIN32
-		s->handle = CreateSemaphore(NULL, 1, 1, s->name);
-		if (!s->handle)
-			error("unable to open semaphore", s->name);
-        #else
-		s->handle = sem_open(s->name, 0);
-
-	  	if (s->handle == SEM_FAILED)
-		{
-    			sem_close(s->handle);
-      			error("unable to open semaphore", s->name);
-    		}
-	#endif
-
-    /* wait for the semaphore to be free [timeout after 60 seconds] */
- 	int timedOutFlag = 0;
-	#ifdef WIN32
- 		timedOutFlag = (WaitForSingleObject(s->handle, s->timeout) != WAIT_OBJECT_0);
-	#else
-		sem_wait(s->handle);
-	#endif
-
-	return timedOutFlag;
-}
-
-
-void  releaseOutput(sbs_semaphore *s)
-{
-	/* release the semaphore */
-	#ifdef WIN32
-		ReleaseSemaphore(s->handle, 1, NULL);
-	#else
-	   	sem_post(s->handle);
-	#endif
-
-	   /* clean up */
-	#ifdef WIN32
-		CloseHandle(s->handle);
-	#else
-	   	sem_close(s->handle);
-	#endif
-}
-
-void writeBuffers(int goodoutput)
-{
-	/* write stdin buffers to stdout. If the output comes
-	   from a partially-complete command then make sure that there
-	   is no malformed xml inside by escaping it. */
-	char *escaped_output=NULL;
-
-	#ifdef WIN32
-		DWORD dwWaitResult = WaitForSingleObject(
-		            bufferMutex,
-		            INFINITE);
-	#endif
-
-	for (int i = 0; i < buffers.size(); i++)
-	{
-		int bytes_out;
-		char *outbuf;
-
-		if (goodoutput != GOOD_OUTPUT)
-		{
-			if (!escaped_output)
-				escaped_output = new char[BufferSize*4];
-
-			if (!escaped_output)
-				error("No memory for escaped outputbuffer.",sem.name);
-
-			char *buf = buffers[i];
-			bytes_out = 0;
-			for (int idx=0; idx < bytesIn[i]; idx++)
-			{
-				switch (buf[idx])
-				{
-					case '&':
-						escaped_output[bytes_out++]='&';
-						escaped_output[bytes_out++]='a';
-						escaped_output[bytes_out++]='m';
-						escaped_output[bytes_out++]='p';
-						escaped_output[bytes_out++]=';';
-						break;
-					case '<':
-						escaped_output[bytes_out++]='&';
-						escaped_output[bytes_out++]='l';
-						escaped_output[bytes_out++]='t';
-						escaped_output[bytes_out++]=';';
-						break;
-					case '>':
-						escaped_output[bytes_out++]='&';
-						escaped_output[bytes_out++]='g';
-						escaped_output[bytes_out++]='t';
-						escaped_output[bytes_out++]=';';
-						break;
-					default:
-						if (!iscntrl(buf[idx]) || buf[idx] == '\n' || buf[idx] == '\r')
-							escaped_output[bytes_out++]=buf[idx];
-						break;
-				}
-
-			}
-
-			outbuf = escaped_output;
-
-		} else {
-			outbuf = buffers[i];
-			bytes_out = bytesIn[i];
-		}
-		fwrite(outbuf, 1, bytes_out, stdout);
-	}
-	#ifdef WIN32
-		ReleaseMutex(bufferMutex);
-	#endif
-
-	if (escaped_output)
-		delete escaped_output;
-	fflush(stdout);
-}
-
-#ifdef WIN32
-/*
- A Thread that kills this process if it is "stuck" in a read operation
- for longer than the timeout period.
-
- There are some race conditions here that don't matter. e.g. globalreadcounter
- is not protected.  This might result in an "unfair" timeout but we don't care
- because the timeout should be pretty long and anything that's even nearly
- a timeout deserves to be timed out.
-
- Additionally, if the timeout is so quick that this function starts before the first
- ever read has happened then there would be a premature timeout.  This is not likely
- so we also dont' care - the timeout has a minimum value which is more than long
- enough (500msec) to deal with that.
-
-*/
-DWORD descrambleKillerThread(void * param)
-{
-
-	sbs_semaphore *s;
-	unsigned int stored_globalreadcounter;
-	s = (sbs_semaphore *)param;
-
-	fflush(stderr);
-	//fprintf(stdout, " timeout=%u sem_name='%s' \n", s->timeout, s->name);
-
-	do
-	{
-		stored_globalreadcounter = globalreadcounter;
-		Sleep(s->timeout);
-	}
-	while (globalreadcounter != stored_globalreadcounter);
-
-	if (waitForOutput(s) != 0)
-	{
-		fprintf(stdout, "<descrambler reason='semaphore wait exceeded %ums timeout' semaphore='%s' />\n", s->timeout, s->name);
-		ExitProcess(3);
-	}
-
-	if (readstate)
-	{
-		fprintf(stdout, "<descrambler reason='command output read exceeded %ums timeout' semaphore='%s'>\n", s->timeout, s->name);
-		writeBuffers(BAD_OUTPUT);
-		fprintf(stdout, "</descrambler>\n");
-		fflush(stdout);
-		if (killPIDTree != 0)
-			killProcessTree(killPIDTree); // Make sure peers and parents all die. Nasty
-		ExitProcess(2);
-	}
-	else
-	{
-		writeBuffers(GOOD_OUTPUT);
-	}
-
-	// Don't release the semaphore in case the main thread
-	// gets it and tries to write the output.
-
-	// Input process finished while we were waiting
-	// for the semaphore so a false alarm.
-	fflush(stdout);
-	ExitProcess(0);
-}
-#endif
-
-
-int main(int argc, char *argv[])
-{
-	char usage[]="usage: %s [-t timeout_millisecs] [ -k kill_PID_tree_on_fail  ] buildID [start | stop]\nwhere timeout_millisecs >= 500\n";
-	int opt_res;
-	char options[]="t:k:";
-
-	sem.timeout = DEFAULT_TIMEOUT;
-
-
-	opt_res = getopt(argc, argv, options);
-
-	while (opt_res != -1 )
-	{
-		switch (opt_res)
-		{
-			case 'k':
-				if (!optarg)
-				{
-					fprintf(stderr, "PID argument required for 'kill PID tree on fail' option\n");
-					fprintf(stderr, usage, argv[0]);
-					exit(1);
-				}
-
-				killPIDTree = atol(optarg);
-				if (killPIDTree == 0)
-				{
-					fprintf(stderr, usage, argv[0]);
-					fprintf(stderr, "kill PID tree on fail must be > 0: %u\n", killPIDTree);
-					exit(1);
-				}
-				break;
-			case 't':
-				if (!optarg)
-				{
-					fprintf(stderr, "timeout argument required for timeout option\n");
-					fprintf(stderr, usage, argv[0]);
-					exit(1);
-				}
-
-				sem.timeout = atoi(optarg);
-				if (sem.timeout < 500)
-				{
-					fprintf(stderr, usage, argv[0]);
-					fprintf(stderr, "timeout was too low: %u\n", sem.timeout);
-					exit(1);
-				}
-				break;
-			case '?':
-			default:
-				fprintf(stderr, usage, argv[0]);
-				fprintf(stderr, "Unknown option. %s\n", opterr);
-				exit(1);
-				break;
-		}
-
-	opt_res = getopt(argc, argv, options);
-	}
-
-	if (optind >= argc)
-	{
-		fprintf(stderr, usage, argv[0]);
-		fprintf(stderr, "Missing buildID\n");
-		exit(1);
-	}
-
-	sem.name = argv[optind];
-
-	if (optind + 1 < argc)
-	{
-		optind++;
-
-		if (strncmp(argv[optind], "stop",4) == 0)
-			destroyDescrambleSemaphore(&sem);
-		else if (strncmp(argv[optind],"start",5) == 0)
-			createDescrambleSemaphore(&sem);
-		else
-		{
-			fprintf(stderr, usage, argv[0]);
-			fprintf(stderr, "Unknown argument:: %s\n", argv[optind]);
-			exit(1);
-		}
-
-		exit(0);
-	}
-
-	#ifdef WIN32
-
-		HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
-
-		bufferMutex = CreateMutex(NULL, FALSE, NULL);
-
-		/*
-		HANDLE WINAPI CreateThread(
-		  __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes,
-		  __in       SIZE_T dwStackSize,
-		  __in       LPTHREAD_START_ROUTINE lpStartAddress,
-		  __in_opt   LPVOID lpParameter,
-		  __in       DWORD dwCreationFlags,
-		  __out_opt  LPDWORD lpThreadId
-		); */
-
-		DWORD killerThreadId;
-		HANDLE hKillerThread;
-
-		hKillerThread = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE) descrambleKillerThread, (void*)&sem, 0, &killerThreadId);
-	#endif
-
-	/* read all of my stdin into buffers */
-	int bytesRead = 0;
-	int bufferIndex = 0;
-	do
-	{
-		char *buffer = new char[BufferSize];
-		if (buffer == NULL)
-			error("not enough memory for buffer", sem.name);
-
-
-		// Add an empty buffer in advance so that if there is a timeout
-		// the partial command result can be gathered.
-		#ifdef WIN32
-			DWORD dwWaitResult = WaitForSingleObject(
-			            bufferMutex,
-			            INFINITE);
-		#endif
-
-		buffers.push_back(buffer);
-		bytesIn.push_back(0);
-		int *counter = &bytesIn[bufferIndex];
-
-
-		#ifdef WIN32
-			ReleaseMutex(bufferMutex);
-		#endif
-		// Empty buffer added.
-
-		char c = fgetc(stdin);
-
-		//fprintf(stderr, "counter %d buffersize %d\n", *counter, BufferSize);
-		do
-		{
-			if (c == EOF)
-				break;
-			// escape unprintable characters that might make logs unparsable.
-			if (iscntrl(c) && !isspace(c))
-				c = '_';
-
-			buffer[*counter] = c;
-
-			*counter += 1;
-			if (*counter >= BufferSize)
-				break;
-
-			c = fgetc(stdin);
-			globalreadcounter = ++globalreadcounter % 65535*4;
-		}
-		while (c != EOF);
-
-		//fprintf(stderr, "## %d bytesin %d\n", bufferIndex, *counter);
-		bufferIndex++;
-	}
-	while (!feof(stdin) && !timeoutstate);
-	readstate = 0; //  Tell the killerthread that it can back off.
-
-	int timedout;
-
-	timedout = waitForOutput(&sem);
-
-
- 	if (timedout)
- 		error("timed out waiting for semaphore", sem.name);
- 	else
- 	{
-		writeBuffers(1);
-	}
-
-	releaseOutput(&sem);
-
- 	/* let the OS free the buffer memory */
-	exit(0);
-}
-
-
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/*
+ 	descramble.cpp:
+
+	Description
+	-----------
+	"descramble" is a program that buffers standard input until end of file
+	and then copies the buffers to the standard output in such a way that
+	if there are many copies of descramble running, each will be given an
+	opportunity to write the complete contents of its buffers while the
+	others wait.
+
+	Purpose
+	-------
+	descramble is used to ensure that output from multiple concurrent processes
+	is not interleaved.  It is useful in build systems such as GNU make with
+	the -j switch, although it requires that makefiles are changed before it can
+	work.
+
+	Design
+	------
+	This program may be built on Linux or on Windows.  On both platforms the
+	basic behavior is similar:
+		1) Read standard input into buffers.  Allocate these dynamically
+		   so that there is no limit.
+		2) Wait on a named or system-wide semaphore.
+		3) Output all the buffers to stdout.
+
+	The name of the semaphore is a parameter and should be chosen so that multiple
+	instances of the build system (or whatever process is running many tasks with
+	descramble) cannot block each other.
+
+
+	Special Considerations for Linux
+	--------------------------------
+	A named semaphore is a file in the filesystem.  It is not automatically removed
+	when a process exits.  descramble provides a "stop" parameter to be run at the
+	"end" of the build system (or other process) that will clean away this semaphore.
+
+
+	Special Considerations for Windows
+	----------------------------------
+	The windows implementation is built with the MINGW toolchain.  On windows
+	problems have been noticed that require a fairly complex timeout capability
+	such that descramble will not wait "forever" for output from stdin.
+	This solution currently uses a "kill thread" that will stop descramble if
+	it is blocked in a read on stdio for more than the timeout period.
+
+	The "kill thread" attempts to print as much of the input from stdin as has
+	been read so far.  It scans this for XML characters and escapes them, finally
+	printing its own XML-formatted error message with the escaped version of the
+	input between <descramble> tags.
+
+
+
+
+*/
+
+#include <stdio.h>
+#include <vector>
+#include <ctype.h>
+
+// what size chunks to allocate/read
+const int BufferSize = 4096;
+unsigned int globalreadcounter = 0;
+
+// OS specific headers
+#ifdef WIN32
+#include <windows.h>
+#include <tlhelp32.h>
+#include <fcntl.h> /*  _O_BINARY */
+#else
+#include <stdlib.h>
+#include <fcntl.h>
+#include <semaphore.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <string.h>
+#endif
+#include <unistd.h>
+
+#define DEFAULT_TIMEOUT (600000) // 10 minutes
+
+#define GOOD_OUTPUT 1
+#define BAD_OUTPUT 0
+
+typedef struct
+{
+	char *name;
+	#ifdef WIN32
+ 		HANDLE handle;
+	#else
+		sem_t *handle;
+	#endif
+
+	unsigned int timeout;
+} sbs_semaphore;
+
+
+// readstate is a flag to indicate whether descramble is reading
+// it's standard input.
+// This allows the timeout thread on Windows to only cause the
+// process to exit if there is an overdue read operation on the
+// standard input.
+int readstate=1;
+int timeoutstate=0;
+
+// The output semaphore.
+sbs_semaphore sem;
+#ifdef WIN32
+	HANDLE bufferMutex;
+
+
+	// Make all output handling binary
+	unsigned int _CRT_fmode = _O_BINARY;
+
+
+	DWORD killPIDTree = 0;
+#else
+	pid_t killPIDTree = 0;
+#endif
+
+
+
+// Where we store all the standard input.
+std::vector<char*> buffers;
+std::vector<int> bytesIn;
+
+
+void error(const char *reason, char *SEM_NAME)
+{
+	fprintf(stderr, "<descrambler reason='%s' semaphore='%s' />\n", reason, SEM_NAME);
+	exit(1);
+}
+
+#ifdef WIN32
+
+void killProcess(DWORD pid)
+{
+	HANDLE proc = OpenProcess(PROCESS_TERMINATE,0,pid);
+	if (proc)
+	{
+		TerminateProcess(proc, 1);
+		//fprintf(stdout,"sent terminate to process=%d\n", pid);
+		CloseHandle(proc);
+	}
+	else
+	{
+		//fprintf(stderr,"Can't open process=%d\n", pid);
+	}
+}
+
+typedef struct {
+	DWORD PID;
+	DWORD PPID;
+} proc;
+
+void killProcessTreeRecursively(DWORD PPID, DWORD thisPID, std::vector<proc *> &processtree)
+{
+	int idx;
+
+	for (idx=0; idx < processtree.size(); idx++)
+	{
+		if (processtree[idx]->PID != thisPID &&  processtree[idx]->PPID  == PPID)
+		{
+			killProcessTreeRecursively(processtree[idx]->PID, thisPID, processtree);
+			//fprintf(stderr,"Found descendant =%d\n",processtree[idx]->PID );
+		}
+	}
+
+	killProcess(PPID);
+}
+
+int killProcessTree(DWORD PPID)
+{
+	HANDLE hSnapShot;
+	DWORD thisProcID=0;
+	BOOL ok;
+	PROCESSENTRY32 pe;
+	std::vector<proc *> processtree;
+
+	thisProcID = GetCurrentProcessId();
+
+	hSnapShot=CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
+
+	// Put all this process information into an array;
+	ok = Process32First(hSnapShot, &pe);
+	while (ok)
+	{
+		if ( pe.th32ProcessID != thisProcID)
+		{
+			proc *p = new proc;
+			p->PID = pe.th32ProcessID;
+			p->PPID = pe.th32ParentProcessID;
+			processtree.push_back(p);
+			//fprintf(stderr,"Found process =%d\n", pe.th32ProcessID );
+		}
+
+		ok = Process32Next(hSnapShot, &pe);
+	}
+
+	killProcessTreeRecursively(PPID, thisProcID, processtree);
+
+	CloseHandle(hSnapShot);
+
+	//fprintf(stderr,"Ending killproc\n", PPID);
+
+	return 0;
+}
+
+#endif
+
+void createDescrambleSemaphore(sbs_semaphore *s)
+{
+#ifdef WIN32
+	s->handle = CreateSemaphore(NULL, 1, 1, s->name);
+	if (s->handle)
+		CloseHandle(s->handle);
+	else
+		error("unable to create semaphore", s->name);
+#else
+	s->handle = sem_open(s->name, O_CREAT | O_EXCL, 0644, 1);
+
+  	if (s->handle == SEM_FAILED)
+	{
+		sem_close(s->handle);
+	  	error("unable to create semaphore", s->name);
+	}
+	sem_close(s->handle);
+#endif
+}
+
+void destroyDescrambleSemaphore(sbs_semaphore *s)
+{
+	#ifdef WIN32
+		/* can't destroy a windows semaphore... */
+	#else
+  		if (sem_unlink(s->name) != 0)
+		  	error("unable to unlink semaphore", s->name);
+	#endif
+}
+
+
+int waitForOutput(sbs_semaphore *s)
+{
+	/* try and open the semaphore now */
+        #ifdef WIN32
+		s->handle = CreateSemaphore(NULL, 1, 1, s->name);
+		if (!s->handle)
+			error("unable to open semaphore", s->name);
+        #else
+		s->handle = sem_open(s->name, 0);
+
+	  	if (s->handle == SEM_FAILED)
+		{
+    			sem_close(s->handle);
+      			error("unable to open semaphore", s->name);
+    		}
+	#endif
+
+    /* wait for the semaphore to be free [timeout after 60 seconds] */
+ 	int timedOutFlag = 0;
+	#ifdef WIN32
+ 		timedOutFlag = (WaitForSingleObject(s->handle, s->timeout) != WAIT_OBJECT_0);
+	#else
+		sem_wait(s->handle);
+	#endif
+
+	return timedOutFlag;
+}
+
+
+void  releaseOutput(sbs_semaphore *s)
+{
+	/* release the semaphore */
+	#ifdef WIN32
+		ReleaseSemaphore(s->handle, 1, NULL);
+	#else
+	   	sem_post(s->handle);
+	#endif
+
+	   /* clean up */
+	#ifdef WIN32
+		CloseHandle(s->handle);
+	#else
+	   	sem_close(s->handle);
+	#endif
+}
+
+void writeBuffers(int goodoutput)
+{
+	/* write stdin buffers to stdout. If the output comes
+	   from a partially-complete command then make sure that there
+	   is no malformed xml inside by escaping it. */
+	char *escaped_output=NULL;
+
+	#ifdef WIN32
+		DWORD dwWaitResult = WaitForSingleObject(
+		            bufferMutex,
+		            INFINITE);
+	#endif
+
+	for (int i = 0; i < buffers.size(); i++)
+	{
+		int bytes_out;
+		char *outbuf;
+
+		if (goodoutput != GOOD_OUTPUT)
+		{
+			if (!escaped_output)
+				escaped_output = new char[BufferSize*4];
+
+			if (!escaped_output)
+				error("No memory for escaped outputbuffer.",sem.name);
+
+			char *buf = buffers[i];
+			bytes_out = 0;
+			for (int idx=0; idx < bytesIn[i]; idx++)
+			{
+				switch (buf[idx])
+				{
+					case '&':
+						escaped_output[bytes_out++]='&';
+						escaped_output[bytes_out++]='a';
+						escaped_output[bytes_out++]='m';
+						escaped_output[bytes_out++]='p';
+						escaped_output[bytes_out++]=';';
+						break;
+					case '<':
+						escaped_output[bytes_out++]='&';
+						escaped_output[bytes_out++]='l';
+						escaped_output[bytes_out++]='t';
+						escaped_output[bytes_out++]=';';
+						break;
+					case '>':
+						escaped_output[bytes_out++]='&';
+						escaped_output[bytes_out++]='g';
+						escaped_output[bytes_out++]='t';
+						escaped_output[bytes_out++]=';';
+						break;
+					default:
+						if (!iscntrl(buf[idx]) || buf[idx] == '\n' || buf[idx] == '\r')
+							escaped_output[bytes_out++]=buf[idx];
+						break;
+				}
+
+			}
+
+			outbuf = escaped_output;
+
+		} else {
+			outbuf = buffers[i];
+			bytes_out = bytesIn[i];
+		}
+		fwrite(outbuf, 1, bytes_out, stdout);
+	}
+	#ifdef WIN32
+		ReleaseMutex(bufferMutex);
+	#endif
+
+	if (escaped_output)
+		delete escaped_output;
+	fflush(stdout);
+}
+
+#ifdef WIN32
+/*
+ A Thread that kills this process if it is "stuck" in a read operation
+ for longer than the timeout period.
+
+ There are some race conditions here that don't matter. e.g. globalreadcounter
+ is not protected.  This might result in an "unfair" timeout but we don't care
+ because the timeout should be pretty long and anything that's even nearly
+ a timeout deserves to be timed out.
+
+ Additionally, if the timeout is so quick that this function starts before the first
+ ever read has happened then there would be a premature timeout.  This is not likely
+ so we also dont' care - the timeout has a minimum value which is more than long
+ enough (500msec) to deal with that.
+
+*/
+DWORD descrambleKillerThread(void * param)
+{
+
+	sbs_semaphore *s;
+	unsigned int stored_globalreadcounter;
+	s = (sbs_semaphore *)param;
+
+	fflush(stderr);
+	//fprintf(stdout, " timeout=%u sem_name='%s' \n", s->timeout, s->name);
+
+	do
+	{
+		stored_globalreadcounter = globalreadcounter;
+		Sleep(s->timeout);
+	}
+	while (globalreadcounter != stored_globalreadcounter);
+
+	if (waitForOutput(s) != 0)
+	{
+		fprintf(stdout, "<descrambler reason='semaphore wait exceeded %ums timeout' semaphore='%s' />\n", s->timeout, s->name);
+		ExitProcess(3);
+	}
+
+	if (readstate)
+	{
+		fprintf(stdout, "<descrambler reason='command output read exceeded %ums timeout' semaphore='%s'>\n", s->timeout, s->name);
+		writeBuffers(BAD_OUTPUT);
+		fprintf(stdout, "</descrambler>\n");
+		fflush(stdout);
+		if (killPIDTree != 0)
+			killProcessTree(killPIDTree); // Make sure peers and parents all die. Nasty
+		ExitProcess(2);
+	}
+	else
+	{
+		writeBuffers(GOOD_OUTPUT);
+	}
+
+	// Don't release the semaphore in case the main thread
+	// gets it and tries to write the output.
+
+	// Input process finished while we were waiting
+	// for the semaphore so a false alarm.
+	fflush(stdout);
+	ExitProcess(0);
+}
+#endif
+
+
+int main(int argc, char *argv[])
+{
+	char usage[]="usage: %s [-t timeout_millisecs] [ -k kill_PID_tree_on_fail  ] buildID [start | stop]\nwhere timeout_millisecs >= 500\n";
+	int opt_res;
+	char options[]="t:k:";
+
+	sem.timeout = DEFAULT_TIMEOUT;
+
+
+	opt_res = getopt(argc, argv, options);
+
+	while (opt_res != -1 )
+	{
+		switch (opt_res)
+		{
+			case 'k':
+				if (!optarg)
+				{
+					fprintf(stderr, "PID argument required for 'kill PID tree on fail' option\n");
+					fprintf(stderr, usage, argv[0]);
+					exit(1);
+				}
+
+				killPIDTree = atol(optarg);
+				if (killPIDTree == 0)
+				{
+					fprintf(stderr, usage, argv[0]);
+					fprintf(stderr, "kill PID tree on fail must be > 0: %u\n", killPIDTree);
+					exit(1);
+				}
+				break;
+			case 't':
+				if (!optarg)
+				{
+					fprintf(stderr, "timeout argument required for timeout option\n");
+					fprintf(stderr, usage, argv[0]);
+					exit(1);
+				}
+
+				sem.timeout = atoi(optarg);
+				if (sem.timeout < 500)
+				{
+					fprintf(stderr, usage, argv[0]);
+					fprintf(stderr, "timeout was too low: %u\n", sem.timeout);
+					exit(1);
+				}
+				break;
+			case '?':
+			default:
+				fprintf(stderr, usage, argv[0]);
+				fprintf(stderr, "Unknown option. %s\n", opterr);
+				exit(1);
+				break;
+		}
+
+	opt_res = getopt(argc, argv, options);
+	}
+
+	if (optind >= argc)
+	{
+		fprintf(stderr, usage, argv[0]);
+		fprintf(stderr, "Missing buildID\n");
+		exit(1);
+	}
+
+	sem.name = argv[optind];
+
+	if (optind + 1 < argc)
+	{
+		optind++;
+
+		if (strncmp(argv[optind], "stop",4) == 0)
+			destroyDescrambleSemaphore(&sem);
+		else if (strncmp(argv[optind],"start",5) == 0)
+			createDescrambleSemaphore(&sem);
+		else
+		{
+			fprintf(stderr, usage, argv[0]);
+			fprintf(stderr, "Unknown argument:: %s\n", argv[optind]);
+			exit(1);
+		}
+
+		exit(0);
+	}
+
+	#ifdef WIN32
+
+		HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
+
+		bufferMutex = CreateMutex(NULL, FALSE, NULL);
+
+		/*
+		HANDLE WINAPI CreateThread(
+		  __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes,
+		  __in       SIZE_T dwStackSize,
+		  __in       LPTHREAD_START_ROUTINE lpStartAddress,
+		  __in_opt   LPVOID lpParameter,
+		  __in       DWORD dwCreationFlags,
+		  __out_opt  LPDWORD lpThreadId
+		); */
+
+		DWORD killerThreadId;
+		HANDLE hKillerThread;
+
+		hKillerThread = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE) descrambleKillerThread, (void*)&sem, 0, &killerThreadId);
+	#endif
+
+	/* read all of my stdin into buffers */
+	int bytesRead = 0;
+	int bufferIndex = 0;
+	do
+	{
+		char *buffer = new char[BufferSize];
+		if (buffer == NULL)
+			error("not enough memory for buffer", sem.name);
+
+
+		// Add an empty buffer in advance so that if there is a timeout
+		// the partial command result can be gathered.
+		#ifdef WIN32
+			DWORD dwWaitResult = WaitForSingleObject(
+			            bufferMutex,
+			            INFINITE);
+		#endif
+
+		buffers.push_back(buffer);
+		bytesIn.push_back(0);
+		int *counter = &bytesIn[bufferIndex];
+
+
+		#ifdef WIN32
+			ReleaseMutex(bufferMutex);
+		#endif
+		// Empty buffer added.
+
+		char c = fgetc(stdin);
+
+		//fprintf(stderr, "counter %d buffersize %d\n", *counter, BufferSize);
+		do
+		{
+			if (c == EOF)
+				break;
+			// escape unprintable characters that might make logs unparsable.
+			if (iscntrl(c) && !isspace(c))
+				c = '_';
+
+			buffer[*counter] = c;
+
+			*counter += 1;
+			if (*counter >= BufferSize)
+				break;
+
+			c = fgetc(stdin);
+			globalreadcounter = ++globalreadcounter % 65535*4;
+		}
+		while (c != EOF);
+
+		//fprintf(stderr, "## %d bytesin %d\n", bufferIndex, *counter);
+		bufferIndex++;
+	}
+	while (!feof(stdin) && !timeoutstate);
+	readstate = 0; //  Tell the killerthread that it can back off.
+
+	int timedout;
+
+	timedout = waitForOutput(&sem);
+
+
+ 	if (timedout)
+ 		error("timed out waiting for semaphore", sem.name);
+ 	else
+ 	{
+		writeBuffers(1);
+	}
+
+	releaseOutput(&sem);
+
+ 	/* let the OS free the buffer memory */
+	exit(0);
+}
+
+
--- a/sbsv2/raptor/util/dialog.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/dialog.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,50 +1,50 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-
-# Build dialog for SBSv2 installer
-
-RAPTOR_DIALOG_VER:=1.1-20080819
-
-DIALOG_SOURCEDIR:=$(OUTPUTPATH)/dialog-$(RAPTOR_DIALOG_VER)
-DIALOG_TAR:=$(SBS_HOME)/util/ext/dialog-$(RAPTOR_DIALOG_VER).tar.gz
-
-
-define b_dialog
-
-.PHONY:: dialog
-
-all:: dialog
-
-dialog: $(INSTALLROOT)/bin/dialog
-	
-$(INSTALLROOT)/bin/dialog: $(DIALOG_TAR) 
-	rm -rf $(DIALOG_SOURCEDIR) && \
-	cd $(OUTPUTPATH) && \
-	tar -xzf $(DIALOG_TAR) && \
-	(  \
-	cd $(DIALOG_SOURCEDIR) && \
-	CFLAGS="-O3 $(GCCTUNE) -s" ./configure --prefix=$(INSTALLROOT) && \
-	$(MAKE) -j8 && $(MAKE) install \
-	)
-endef
-
-$(eval $(b_dialog))
-
-
-
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+
+# Build dialog for SBSv2 installer
+
+RAPTOR_DIALOG_VER:=1.1-20080819
+
+DIALOG_SOURCEDIR:=$(OUTPUTPATH)/dialog-$(RAPTOR_DIALOG_VER)
+DIALOG_TAR:=$(SBS_HOME)/util/ext/dialog-$(RAPTOR_DIALOG_VER).tar.gz
+
+
+define b_dialog
+
+.PHONY:: dialog
+
+all:: dialog
+
+dialog: $(INSTALLROOT)/bin/dialog
+	
+$(INSTALLROOT)/bin/dialog: $(DIALOG_TAR) 
+	rm -rf $(DIALOG_SOURCEDIR) && \
+	cd $(OUTPUTPATH) && \
+	tar -xzf $(DIALOG_TAR) && \
+	(  \
+	cd $(DIALOG_SOURCEDIR) && \
+	CFLAGS="-O3 $(GCCTUNE) -s" ./configure --prefix=$(INSTALLROOT) && \
+	$(MAKE) -j8 && $(MAKE) install \
+	)
+endef
+
+$(eval $(b_dialog))
+
+
+
+
--- a/sbsv2/raptor/util/gccprogram.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/gccprogram.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,72 +1,72 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-define cpp2obj
-OBJECTFILE:=$(OUTPUTPATH)/$(TARGET)/$(notdir $(SOURCEFILE:.cpp=.o))
-$$(OBJECTFILE): $(SOURCEFILE)
-	g++ $(HOSTMACROS) $(CFLAGS) -c $(SOURCEFILE) -o $$@
-	
-OBJECTS:=$$(OBJECTS) $$(OBJECTFILE)
-
-endef 
-
-define cppprogram
-
-all:: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
-
-$(foreach SOURCEFILE,$(SOURCES),$(cpp2obj))
-
-$(BINDIR)/$(TARGET)$(PROGRAMEXT): $$(OBJECTS)
-	g++ $(LDFLAGS) $$^ -o $$@
-	
-$$(shell mkdir -p $(OUTPUTPATH)/$(TARGET) $(BINDIR))
-
-CLEANFILES:=$$(OBJECTS)
-$(cleanlog)
-
-endef
-
-define c2obj
-OBJECTFILE:=$(OUTPUTPATH)/$(TARGET)/$(notdir $(SOURCEFILE:.c=.o))
-$$(OBJECTFILE): $(SOURCEFILE)
-	gcc $(HOSTMACROS) $(CFLAGS) -c $(SOURCEFILE) -o $$@
-	
-OBJECTS:=$$(OBJECTS) $$(OBJECTFILE)
-
-endef 
-
-
-define cprogram
-
-OBJECTS:=
-
-all:: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
-	
-.PHONY:: $(TARGET)
-$(TARGET):: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
-
-$(foreach SOURCEFILE,$(SOURCES),$(c2obj))
-
-$(BINDIR)/$(TARGET)$(PROGRAMEXT): $$(OBJECTS)
-	gcc $(LDFLAGS) $$^ -o $$@
-	
-$$(shell mkdir -p $(OUTPUTPATH)/$(TARGET))
-
-CLEANFILES:=$$(OBJECTS)
-$(cleanlog)
-
-endef
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+define cpp2obj
+OBJECTFILE:=$(OUTPUTPATH)/$(TARGET)/$(notdir $(SOURCEFILE:.cpp=.o))
+$$(OBJECTFILE): $(SOURCEFILE)
+	g++ $(HOSTMACROS) $(CFLAGS) -c $(SOURCEFILE) -o $$@
+	
+OBJECTS:=$$(OBJECTS) $$(OBJECTFILE)
+
+endef 
+
+define cppprogram
+
+all:: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
+
+$(foreach SOURCEFILE,$(SOURCES),$(cpp2obj))
+
+$(BINDIR)/$(TARGET)$(PROGRAMEXT): $$(OBJECTS)
+	g++ $(LDFLAGS) $$^ -o $$@
+	
+$$(shell mkdir -p $(OUTPUTPATH)/$(TARGET) $(BINDIR))
+
+CLEANFILES:=$$(OBJECTS)
+$(cleanlog)
+
+endef
+
+define c2obj
+OBJECTFILE:=$(OUTPUTPATH)/$(TARGET)/$(notdir $(SOURCEFILE:.c=.o))
+$$(OBJECTFILE): $(SOURCEFILE)
+	gcc $(HOSTMACROS) $(CFLAGS) -c $(SOURCEFILE) -o $$@
+	
+OBJECTS:=$$(OBJECTS) $$(OBJECTFILE)
+
+endef 
+
+
+define cprogram
+
+OBJECTS:=
+
+all:: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
+	
+.PHONY:: $(TARGET)
+$(TARGET):: $(BINDIR)/$(TARGET)$(PROGRAMEXT)
+
+$(foreach SOURCEFILE,$(SOURCES),$(c2obj))
+
+$(BINDIR)/$(TARGET)$(PROGRAMEXT): $$(OBJECTS)
+	gcc $(LDFLAGS) $$^ -o $$@
+	
+$$(shell mkdir -p $(OUTPUTPATH)/$(TARGET))
+
+CLEANFILES:=$$(OBJECTS)
+$(cleanlog)
+
+endef
--- a/sbsv2/raptor/util/gccxml.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/gccxml.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,39 +1,39 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-GCCXML_TAR:=$(SBS_HOME)/util/ext/gccxml.tar.gz
-
-
-define b_gccxml
-
-.PHONY:: gccxml
-
-all:: gccxml
-
-gccxml: $(INSTALLROOT)/bin/gccxml_cc1plus
-	
-$(INSTALLROOT)/bin/gccxml_cc1plus: $(GCCXML_TAR)
-	cd $(INSTALLROOT) && \
-	tar -xzf $(GCCXML_TAR) 
-
-endef
-
-$(eval $(b_gccxml))
-
-
-
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+GCCXML_TAR:=$(SBS_HOME)/util/ext/gccxml.tar.gz
+
+
+define b_gccxml
+
+.PHONY:: gccxml
+
+all:: gccxml
+
+gccxml: $(INSTALLROOT)/bin/gccxml_cc1plus
+	
+$(INSTALLROOT)/bin/gccxml_cc1plus: $(GCCXML_TAR)
+	cd $(INSTALLROOT) && \
+	tar -xzf $(GCCXML_TAR) 
+
+endef
+
+$(eval $(b_gccxml))
+
+
+
+
--- a/sbsv2/raptor/util/install-linux/makeself-header.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-linux/makeself-header.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,401 +1,401 @@
-cat << EOF  > "$archname"
-#!/bin/sh
-# This script was generated using Makeself $MS_VERSION
-
-CRCsum="$CRCsum"
-MD5="$MD5sum"
-TMPROOT=\${TMPDIR:=/tmp}
-
-label="$LABEL"
-script="$SCRIPT"
-scriptargs="$SCRIPTARGS"
-targetdir="$archdirname"
-filesizes="$filesizes"
-keep=$KEEP
-
-print_cmd_arg=""
-if type printf > /dev/null; then
-    print_cmd="printf"
-elif test -x /usr/ucb/echo; then
-    print_cmd="/usr/ucb/echo"
-else
-    print_cmd="echo"
-fi
-
-unset CDPATH
-
-MS_Printf()
-{
-    \$print_cmd \$print_cmd_arg "\$1"
-}
-
-MS_Progress()
-{
-    while read a; do
-	MS_Printf .
-    done
-}
-
-MS_diskspace()
-{
-	(
-	if test -d /usr/xpg4/bin; then
-		PATH=/usr/xpg4/bin:\$PATH
-	fi
-	df -kP "\$1" | tail -1 | awk '{print \$4}'
-	)
-}
-
-MS_dd()
-{
-    blocks=\`expr \$3 / 1024\`
-    bytes=\`expr \$3 % 1024\`
-    dd if="\$1" ibs=\$2 skip=1 obs=1024 conv=sync 2> /dev/null | \\
-    { test \$blocks -gt 0 && dd ibs=1024 obs=1024 count=\$blocks ; \\
-      test \$bytes  -gt 0 && dd ibs=1 obs=1024 count=\$bytes ; } 2> /dev/null
-}
-
-MS_Help()
-{
-    cat << EOH >&2
-Makeself version $MS_VERSION
- 1) Getting help or info about \$0 :
-  \$0 --help   Print this message
-  \$0 --info   Print embedded info : title, default target directory, embedded script ...
-  \$0 --lsm    Print embedded lsm entry (or no LSM)
-  \$0 --list   Print the list of files in the archive
-  \$0 --check  Checks integrity of the archive
- 
- 2) Running \$0 :
-  \$0 [options] [--] [additional arguments to embedded script]
-  with following options (in that order)
-  --confirm             Ask before running embedded script
-  --noexec              Do not run embedded script
-  --keep                Do not erase target directory after running
-			the embedded script
-  --nox11               Do not spawn an xterm
-  --nochown             Do not give the extracted files to the current user
-  --target NewDirectory Extract in NewDirectory
-  --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
-  --                    Following arguments will be passed to the embedded script
-EOH
-}
-
-MS_Check()
-{
-    OLD_PATH="\$PATH"
-    PATH=\${GUESS_MD5_PATH:-"\$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
-	MD5_ARG=""
-    MD5_PATH=\`exec <&- 2>&-; which md5sum || type md5sum\`
-    test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which md5 || type md5\`
-	test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which digest || type digest\`
-    PATH="\$OLD_PATH"
-
-    MS_Printf "Verifying archive integrity..."
-    offset=\`head -n $SKIP "\$1" | wc -c | tr -d " "\`
-    verb=\$2
-    i=1
-    for s in \$filesizes
-    do
-		crc=\`echo \$CRCsum | cut -d" " -f\$i\`
-		if test -x "\$MD5_PATH"; then
-			if test \`basename \$MD5_PATH\` = digest; then
-				MD5_ARG="-a md5"
-			fi
-			md5=\`echo \$MD5 | cut -d" " -f\$i\`
-			if test \$md5 = "00000000000000000000000000000000"; then
-				test x\$verb = xy && echo " \$1 does not contain an embedded MD5 checksum." >&2
-			else
-				md5sum=\`MS_dd "\$1" \$offset \$s | eval "\$MD5_PATH \$MD5_ARG" | cut -b-32\`;
-				if test "\$md5sum" != "\$md5"; then
-					echo "Error in MD5 checksums: \$md5sum is different from \$md5" >&2
-					exit 2
-				else
-					test x\$verb = xy && MS_Printf " MD5 checksums are OK." >&2
-				fi
-				crc="0000000000"; verb=n
-			fi
-		fi
-		if test \$crc = "0000000000"; then
-			test x\$verb = xy && echo " \$1 does not contain a CRC checksum." >&2
-		else
-			sum1=\`MS_dd "\$1" \$offset \$s | CMD_ENV=xpg4 cksum | awk '{print \$1}'\`
-			if test "\$sum1" = "\$crc"; then
-				test x\$verb = xy && MS_Printf " CRC checksums are OK." >&2
-			else
-				echo "Error in checksums: \$sum1 is different from \$crc"
-				exit 2;
-			fi
-		fi
-		i=\`expr \$i + 1\`
-		offset=\`expr \$offset + \$s\`
-    done
-    echo " All good."
-}
-
-UnTAR()
-{
-    tar \$1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 \$$; }
-}
-
-finish=true
-xterm_loop=
-nox11=$NOX11
-copy=$COPY
-ownership=y
-verbose=n
-
-initargs="\$@"
-
-while true
-do
-    case "\$1" in
-    -h | --help)
-	MS_Help
-	exit 0
-	;;
-    --info)
-	echo Identification: "\$label"
-	echo Target directory: "\$targetdir"
-	echo Uncompressed size: $USIZE KB
-	echo Compression: $COMPRESS
-	echo Date of packaging: $DATE
-	echo Built with Makeself version $MS_VERSION on $OSTYPE
-	echo Build command was: "$MS_COMMAND"
-	if test x\$script != x; then
-	    echo Script run after extraction:
-	    echo "    " \$script \$scriptargs
-	fi
-	if test x"$copy" = xcopy; then
-		echo "Archive will copy itself to a temporary location"
-	fi
-	if test x"$KEEP" = xy; then
-	    echo "directory \$targetdir is permanent"
-	else
-	    echo "\$targetdir will be removed after extraction"
-	fi
-	exit 0
-	;;
-    --dumpconf)
-	echo LABEL=\"\$label\"
-	echo SCRIPT=\"\$script\"
-	echo SCRIPTARGS=\"\$scriptargs\"
-	echo archdirname=\"$archdirname\"
-	echo KEEP=$KEEP
-	echo COMPRESS=$COMPRESS
-	echo filesizes=\"\$filesizes\"
-	echo CRCsum=\"\$CRCsum\"
-	echo MD5sum=\"\$MD5\"
-	echo OLDUSIZE=$USIZE
-	echo OLDSKIP=`expr $SKIP + 1`
-	exit 0
-	;;
-    --lsm)
-cat << EOLSM
-EOF
-eval "$LSM_CMD"
-cat << EOF  >> "$archname"
-EOLSM
-	exit 0
-	;;
-    --list)
-	echo Target directory: \$targetdir
-	offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
-	for s in \$filesizes
-	do
-	    MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | UnTAR t
-	    offset=\`expr \$offset + \$s\`
-	done
-	exit 0
-	;;
-	--tar)
-	offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
-	arg1="\$2"
-	shift 2
-	for s in \$filesizes
-	do
-	    MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | tar "\$arg1" - \$*
-	    offset=\`expr \$offset + \$s\`
-	done
-	exit 0
-	;;
-    --check)
-	MS_Check "\$0" y
-	exit 0
-	;;
-    --confirm)
-	verbose=y
-	shift
-	;;
-	--noexec)
-	script=""
-	shift
-	;;
-    --keep)
-	keep=y
-	shift
-	;;
-    --target)
-	keep=y
-	targetdir=\${2:-.}
-	shift 2
-	;;
-    --nox11)
-	nox11=y
-	shift
-	;;
-    --nochown)
-	ownership=n
-	shift
-	;;
-    --xwin)
-	finish="echo Press Return to close this window...; read junk"
-	xterm_loop=1
-	shift
-	;;
-    --phase2)
-	copy=phase2
-	shift
-	;;
-    --)
-	shift
-	break ;;
-    -*)
-	echo Unrecognized flag : "\$1" >&2
-	MS_Help
-	exit 1
-	;;
-    *)
-	break ;;
-    esac
-done
-
-case "\$copy" in
-copy)
-    tmpdir=\$TMPROOT/makeself.\$RANDOM.\`date +"%y%m%d%H%M%S"\`.\$\$
-    mkdir "\$tmpdir" || {
-	echo "Could not create temporary directory \$tmpdir" >&2
-	exit 1
-    }
-    SCRIPT_COPY="\$tmpdir/makeself"
-    echo "Copying to a temporary location..." >&2
-    cp "\$0" "\$SCRIPT_COPY"
-    chmod +x "\$SCRIPT_COPY"
-    cd "\$TMPROOT"
-    exec "\$SCRIPT_COPY" --phase2 -- \$initargs
-    ;;
-phase2)
-    finish="\$finish ; rm -rf \`dirname \$0\`"
-    ;;
-esac
-
-if test "\$nox11" = "n"; then
-    if tty -s; then                 # Do we have a terminal?
-	:
-    else
-        if test x"\$DISPLAY" != x -a x"\$xterm_loop" = x; then  # No, but do we have X?
-            if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
-                GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
-                for a in \$GUESS_XTERMS; do
-                    if type \$a >/dev/null 2>&1; then
-                        XTERM=\$a
-                        break
-                    fi
-                done
-                chmod a+x \$0 || echo Please add execution rights on \$0
-                if test \`echo "\$0" | cut -c1\` = "/"; then # Spawn a terminal!
-                    exec \$XTERM -title "\$label" -e "\$0" --xwin "\$initargs"
-                else
-                    exec \$XTERM -title "\$label" -e "./\$0" --xwin "\$initargs"
-                fi
-            fi
-        fi
-    fi
-fi
-
-if test "\$targetdir" = "."; then
-    tmpdir="."
-else
-    if test "\$keep" = y; then
-	echo "Creating directory \$targetdir" >&2
-	tmpdir="\$targetdir"
-	dashp="-p"
-    else
-	tmpdir="\$TMPROOT/selfgz\$\$\$RANDOM"
-	dashp=""
-    fi
-    mkdir \$dashp \$tmpdir || {
-	echo 'Cannot create target directory' \$tmpdir >&2
-	echo 'You should try option --target OtherDirectory' >&2
-	eval \$finish
-	exit 1
-    }
-fi
-
-location="\`pwd\`"
-if test x\$SETUP_NOCHECK != x1; then
-    MS_Check "\$0"
-fi
-offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
-
-if test x"\$verbose" = xy; then
-	MS_Printf "About to extract $USIZE KB in \$tmpdir ... Proceed ? [Y/n] "
-	read yn
-	if test x"\$yn" = xn; then
-		eval \$finish; exit 1
-	fi
-fi
-
-MS_Printf "Uncompressing \$label"
-res=3
-if test "\$keep" = n; then
-    trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; /bin/rm -rf \$tmpdir; eval \$finish; exit 15' 1 2 3 15
-fi
-
-leftspace=\`MS_diskspace \$tmpdir\`
-if test \$leftspace -lt $USIZE; then
-    echo
-    echo "Not enough space left in "\`dirname \$tmpdir\`" (\$leftspace KB) to decompress \$0 ($USIZE KB)" >&2
-    if test "\$keep" = n; then
-        echo "Consider setting TMPDIR to a directory with more free space."
-   fi
-    eval \$finish; exit 1
-fi
-
-for s in \$filesizes
-do
-    if MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | ( cd "\$tmpdir"; UnTAR x ) | MS_Progress; then
-		if test x"\$ownership" = xy; then
-			(PATH=/usr/xpg4/bin:\$PATH; cd "\$tmpdir"; chown -R \`id -u\` .;  chgrp -R \`id -g\` .)
-		fi
-    else
-		echo
-		echo "Unable to decompress \$0" >&2
-		eval \$finish; exit 1
-    fi
-    offset=\`expr \$offset + \$s\`
-done
-echo
-
-cd "\$tmpdir"
-res=0
-if test x"\$script" != x; then
-    if test x"\$verbose" = xy; then
-		MS_Printf "OK to execute: \$script \$scriptargs \$* ? [Y/n] "
-		read yn
-		if test x"\$yn" = x -o x"\$yn" = xy -o x"\$yn" = xY; then
-			eval \$script \$scriptargs \$*; res=\$?;
-		fi
-    else
-		eval \$script \$scriptargs \$*; res=\$?
-    fi
-    if test \$res -ne 0; then
-		test x"\$verbose" = xy && echo "The program '\$script' returned an error code (\$res)" >&2
-    fi
-fi
-if test "\$keep" = n; then
-    cd \$TMPROOT
-    /bin/rm -rf \$tmpdir
-fi
-eval \$finish; exit \$res
-EOF
+cat << EOF  > "$archname"
+#!/bin/sh
+# This script was generated using Makeself $MS_VERSION
+
+CRCsum="$CRCsum"
+MD5="$MD5sum"
+TMPROOT=\${TMPDIR:=/tmp}
+
+label="$LABEL"
+script="$SCRIPT"
+scriptargs="$SCRIPTARGS"
+targetdir="$archdirname"
+filesizes="$filesizes"
+keep=$KEEP
+
+print_cmd_arg=""
+if type printf > /dev/null; then
+    print_cmd="printf"
+elif test -x /usr/ucb/echo; then
+    print_cmd="/usr/ucb/echo"
+else
+    print_cmd="echo"
+fi
+
+unset CDPATH
+
+MS_Printf()
+{
+    \$print_cmd \$print_cmd_arg "\$1"
+}
+
+MS_Progress()
+{
+    while read a; do
+	MS_Printf .
+    done
+}
+
+MS_diskspace()
+{
+	(
+	if test -d /usr/xpg4/bin; then
+		PATH=/usr/xpg4/bin:\$PATH
+	fi
+	df -kP "\$1" | tail -1 | awk '{print \$4}'
+	)
+}
+
+MS_dd()
+{
+    blocks=\`expr \$3 / 1024\`
+    bytes=\`expr \$3 % 1024\`
+    dd if="\$1" ibs=\$2 skip=1 obs=1024 conv=sync 2> /dev/null | \\
+    { test \$blocks -gt 0 && dd ibs=1024 obs=1024 count=\$blocks ; \\
+      test \$bytes  -gt 0 && dd ibs=1 obs=1024 count=\$bytes ; } 2> /dev/null
+}
+
+MS_Help()
+{
+    cat << EOH >&2
+Makeself version $MS_VERSION
+ 1) Getting help or info about \$0 :
+  \$0 --help   Print this message
+  \$0 --info   Print embedded info : title, default target directory, embedded script ...
+  \$0 --lsm    Print embedded lsm entry (or no LSM)
+  \$0 --list   Print the list of files in the archive
+  \$0 --check  Checks integrity of the archive
+ 
+ 2) Running \$0 :
+  \$0 [options] [--] [additional arguments to embedded script]
+  with following options (in that order)
+  --confirm             Ask before running embedded script
+  --noexec              Do not run embedded script
+  --keep                Do not erase target directory after running
+			the embedded script
+  --nox11               Do not spawn an xterm
+  --nochown             Do not give the extracted files to the current user
+  --target NewDirectory Extract in NewDirectory
+  --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
+  --                    Following arguments will be passed to the embedded script
+EOH
+}
+
+MS_Check()
+{
+    OLD_PATH="\$PATH"
+    PATH=\${GUESS_MD5_PATH:-"\$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
+	MD5_ARG=""
+    MD5_PATH=\`exec <&- 2>&-; which md5sum || type md5sum\`
+    test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which md5 || type md5\`
+	test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which digest || type digest\`
+    PATH="\$OLD_PATH"
+
+    MS_Printf "Verifying archive integrity..."
+    offset=\`head -n $SKIP "\$1" | wc -c | tr -d " "\`
+    verb=\$2
+    i=1
+    for s in \$filesizes
+    do
+		crc=\`echo \$CRCsum | cut -d" " -f\$i\`
+		if test -x "\$MD5_PATH"; then
+			if test \`basename \$MD5_PATH\` = digest; then
+				MD5_ARG="-a md5"
+			fi
+			md5=\`echo \$MD5 | cut -d" " -f\$i\`
+			if test \$md5 = "00000000000000000000000000000000"; then
+				test x\$verb = xy && echo " \$1 does not contain an embedded MD5 checksum." >&2
+			else
+				md5sum=\`MS_dd "\$1" \$offset \$s | eval "\$MD5_PATH \$MD5_ARG" | cut -b-32\`;
+				if test "\$md5sum" != "\$md5"; then
+					echo "Error in MD5 checksums: \$md5sum is different from \$md5" >&2
+					exit 2
+				else
+					test x\$verb = xy && MS_Printf " MD5 checksums are OK." >&2
+				fi
+				crc="0000000000"; verb=n
+			fi
+		fi
+		if test \$crc = "0000000000"; then
+			test x\$verb = xy && echo " \$1 does not contain a CRC checksum." >&2
+		else
+			sum1=\`MS_dd "\$1" \$offset \$s | CMD_ENV=xpg4 cksum | awk '{print \$1}'\`
+			if test "\$sum1" = "\$crc"; then
+				test x\$verb = xy && MS_Printf " CRC checksums are OK." >&2
+			else
+				echo "Error in checksums: \$sum1 is different from \$crc"
+				exit 2;
+			fi
+		fi
+		i=\`expr \$i + 1\`
+		offset=\`expr \$offset + \$s\`
+    done
+    echo " All good."
+}
+
+UnTAR()
+{
+    tar \$1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 \$$; }
+}
+
+finish=true
+xterm_loop=
+nox11=$NOX11
+copy=$COPY
+ownership=y
+verbose=n
+
+initargs="\$@"
+
+while true
+do
+    case "\$1" in
+    -h | --help)
+	MS_Help
+	exit 0
+	;;
+    --info)
+	echo Identification: "\$label"
+	echo Target directory: "\$targetdir"
+	echo Uncompressed size: $USIZE KB
+	echo Compression: $COMPRESS
+	echo Date of packaging: $DATE
+	echo Built with Makeself version $MS_VERSION on $OSTYPE
+	echo Build command was: "$MS_COMMAND"
+	if test x\$script != x; then
+	    echo Script run after extraction:
+	    echo "    " \$script \$scriptargs
+	fi
+	if test x"$copy" = xcopy; then
+		echo "Archive will copy itself to a temporary location"
+	fi
+	if test x"$KEEP" = xy; then
+	    echo "directory \$targetdir is permanent"
+	else
+	    echo "\$targetdir will be removed after extraction"
+	fi
+	exit 0
+	;;
+    --dumpconf)
+	echo LABEL=\"\$label\"
+	echo SCRIPT=\"\$script\"
+	echo SCRIPTARGS=\"\$scriptargs\"
+	echo archdirname=\"$archdirname\"
+	echo KEEP=$KEEP
+	echo COMPRESS=$COMPRESS
+	echo filesizes=\"\$filesizes\"
+	echo CRCsum=\"\$CRCsum\"
+	echo MD5sum=\"\$MD5\"
+	echo OLDUSIZE=$USIZE
+	echo OLDSKIP=`expr $SKIP + 1`
+	exit 0
+	;;
+    --lsm)
+cat << EOLSM
+EOF
+eval "$LSM_CMD"
+cat << EOF  >> "$archname"
+EOLSM
+	exit 0
+	;;
+    --list)
+	echo Target directory: \$targetdir
+	offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
+	for s in \$filesizes
+	do
+	    MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | UnTAR t
+	    offset=\`expr \$offset + \$s\`
+	done
+	exit 0
+	;;
+	--tar)
+	offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
+	arg1="\$2"
+	shift 2
+	for s in \$filesizes
+	do
+	    MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | tar "\$arg1" - \$*
+	    offset=\`expr \$offset + \$s\`
+	done
+	exit 0
+	;;
+    --check)
+	MS_Check "\$0" y
+	exit 0
+	;;
+    --confirm)
+	verbose=y
+	shift
+	;;
+	--noexec)
+	script=""
+	shift
+	;;
+    --keep)
+	keep=y
+	shift
+	;;
+    --target)
+	keep=y
+	targetdir=\${2:-.}
+	shift 2
+	;;
+    --nox11)
+	nox11=y
+	shift
+	;;
+    --nochown)
+	ownership=n
+	shift
+	;;
+    --xwin)
+	finish="echo Press Return to close this window...; read junk"
+	xterm_loop=1
+	shift
+	;;
+    --phase2)
+	copy=phase2
+	shift
+	;;
+    --)
+	shift
+	break ;;
+    -*)
+	echo Unrecognized flag : "\$1" >&2
+	MS_Help
+	exit 1
+	;;
+    *)
+	break ;;
+    esac
+done
+
+case "\$copy" in
+copy)
+    tmpdir=\$TMPROOT/makeself.\$RANDOM.\`date +"%y%m%d%H%M%S"\`.\$\$
+    mkdir "\$tmpdir" || {
+	echo "Could not create temporary directory \$tmpdir" >&2
+	exit 1
+    }
+    SCRIPT_COPY="\$tmpdir/makeself"
+    echo "Copying to a temporary location..." >&2
+    cp "\$0" "\$SCRIPT_COPY"
+    chmod +x "\$SCRIPT_COPY"
+    cd "\$TMPROOT"
+    exec "\$SCRIPT_COPY" --phase2 -- \$initargs
+    ;;
+phase2)
+    finish="\$finish ; rm -rf \`dirname \$0\`"
+    ;;
+esac
+
+if test "\$nox11" = "n"; then
+    if tty -s; then                 # Do we have a terminal?
+	:
+    else
+        if test x"\$DISPLAY" != x -a x"\$xterm_loop" = x; then  # No, but do we have X?
+            if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
+                GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
+                for a in \$GUESS_XTERMS; do
+                    if type \$a >/dev/null 2>&1; then
+                        XTERM=\$a
+                        break
+                    fi
+                done
+                chmod a+x \$0 || echo Please add execution rights on \$0
+                if test \`echo "\$0" | cut -c1\` = "/"; then # Spawn a terminal!
+                    exec \$XTERM -title "\$label" -e "\$0" --xwin "\$initargs"
+                else
+                    exec \$XTERM -title "\$label" -e "./\$0" --xwin "\$initargs"
+                fi
+            fi
+        fi
+    fi
+fi
+
+if test "\$targetdir" = "."; then
+    tmpdir="."
+else
+    if test "\$keep" = y; then
+	echo "Creating directory \$targetdir" >&2
+	tmpdir="\$targetdir"
+	dashp="-p"
+    else
+	tmpdir="\$TMPROOT/selfgz\$\$\$RANDOM"
+	dashp=""
+    fi
+    mkdir \$dashp \$tmpdir || {
+	echo 'Cannot create target directory' \$tmpdir >&2
+	echo 'You should try option --target OtherDirectory' >&2
+	eval \$finish
+	exit 1
+    }
+fi
+
+location="\`pwd\`"
+if test x\$SETUP_NOCHECK != x1; then
+    MS_Check "\$0"
+fi
+offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
+
+if test x"\$verbose" = xy; then
+	MS_Printf "About to extract $USIZE KB in \$tmpdir ... Proceed ? [Y/n] "
+	read yn
+	if test x"\$yn" = xn; then
+		eval \$finish; exit 1
+	fi
+fi
+
+MS_Printf "Uncompressing \$label"
+res=3
+if test "\$keep" = n; then
+    trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; /bin/rm -rf \$tmpdir; eval \$finish; exit 15' 1 2 3 15
+fi
+
+leftspace=\`MS_diskspace \$tmpdir\`
+if test \$leftspace -lt $USIZE; then
+    echo
+    echo "Not enough space left in "\`dirname \$tmpdir\`" (\$leftspace KB) to decompress \$0 ($USIZE KB)" >&2
+    if test "\$keep" = n; then
+        echo "Consider setting TMPDIR to a directory with more free space."
+   fi
+    eval \$finish; exit 1
+fi
+
+for s in \$filesizes
+do
+    if MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | ( cd "\$tmpdir"; UnTAR x ) | MS_Progress; then
+		if test x"\$ownership" = xy; then
+			(PATH=/usr/xpg4/bin:\$PATH; cd "\$tmpdir"; chown -R \`id -u\` .;  chgrp -R \`id -g\` .)
+		fi
+    else
+		echo
+		echo "Unable to decompress \$0" >&2
+		eval \$finish; exit 1
+    fi
+    offset=\`expr \$offset + \$s\`
+done
+echo
+
+cd "\$tmpdir"
+res=0
+if test x"\$script" != x; then
+    if test x"\$verbose" = xy; then
+		MS_Printf "OK to execute: \$script \$scriptargs \$* ? [Y/n] "
+		read yn
+		if test x"\$yn" = x -o x"\$yn" = xy -o x"\$yn" = xY; then
+			eval \$script \$scriptargs \$*; res=\$?;
+		fi
+    else
+		eval \$script \$scriptargs \$*; res=\$?
+    fi
+    if test \$res -ne 0; then
+		test x"\$verbose" = xy && echo "The program '\$script' returned an error code (\$res)" >&2
+    fi
+fi
+if test "\$keep" = n; then
+    cd \$TMPROOT
+    /bin/rm -rf \$tmpdir
+fi
+eval \$finish; exit \$res
+EOF
--- a/sbsv2/raptor/util/install-linux/makeself.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-linux/makeself.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,407 +1,407 @@
-#!/bin/sh
-#
-# Makeself version 2.1.x
-#  by Stephane Peter <megastep@megastep.org>
-#
-# $Id: makeself.sh,v 1.64 2008/01/04 23:52:14 megastep Exp $
-#
-# Utility to create self-extracting tar.gz archives.
-# The resulting archive is a file holding the tar.gz archive with
-# a small Shell script stub that uncompresses the archive to a temporary
-# directory and then executes a given script from withing that directory.
-#
-# Makeself home page: http://www.megastep.org/makeself/
-#
-# Version 2.0 is a rewrite of version 1.0 to make the code easier to read and maintain.
-#
-# Version history :
-# - 1.0 : Initial public release
-# - 1.1 : The archive can be passed parameters that will be passed on to
-#         the embedded script, thanks to John C. Quillan
-# - 1.2 : Package distribution, bzip2 compression, more command line options,
-#         support for non-temporary archives. Ideas thanks to Francois Petitjean
-# - 1.3 : More patches from Bjarni R. Einarsson and Francois Petitjean:
-#         Support for no compression (--nocomp), script is no longer mandatory,
-#         automatic launch in an xterm, optional verbose output, and -target 
-#         archive option to indicate where to extract the files.
-# - 1.4 : Improved UNIX compatibility (Francois Petitjean)
-#         Automatic integrity checking, support of LSM files (Francois Petitjean)
-# - 1.5 : Many bugfixes. Optionally disable xterm spawning.
-# - 1.5.1 : More bugfixes, added archive options -list and -check.
-# - 1.5.2 : Cosmetic changes to inform the user of what's going on with big 
-#           archives (Quake III demo)
-# - 1.5.3 : Check for validity of the DISPLAY variable before launching an xterm.
-#           More verbosity in xterms and check for embedded command's return value.
-#           Bugfix for Debian 2.0 systems that have a different "print" command.
-# - 1.5.4 : Many bugfixes. Print out a message if the extraction failed.
-# - 1.5.5 : More bugfixes. Added support for SETUP_NOCHECK environment variable to
-#           bypass checksum verification of archives.
-# - 1.6.0 : Compute MD5 checksums with the md5sum command (patch from Ryan Gordon)
-# - 2.0   : Brand new rewrite, cleaner architecture, separated header and UNIX ports.
-# - 2.0.1 : Added --copy
-# - 2.1.0 : Allow multiple tarballs to be stored in one archive, and incremental updates.
-#           Added --nochown for archives
-#           Stopped doing redundant checksums when not necesary
-# - 2.1.1 : Work around insane behavior from certain Linux distros with no 'uncompress' command
-#           Cleaned up the code to handle error codes from compress. Simplified the extraction code.
-# - 2.1.2 : Some bug fixes. Use head -n to avoid problems.
-# - 2.1.3 : Bug fixes with command line when spawning terminals.
-#           Added --tar for archives, allowing to give arbitrary arguments to tar on the contents of the archive.
-#           Added --noexec to prevent execution of embedded scripts.
-#           Added --nomd5 and --nocrc to avoid creating checksums in archives.
-#           Added command used to create the archive in --info output.
-#           Run the embedded script through eval.
-# - 2.1.4 : Fixed --info output.
-#           Generate random directory name when extracting files to . to avoid problems. (Jason Trent)
-#           Better handling of errors with wrong permissions for the directory containing the files. (Jason Trent)
-#           Avoid some race conditions (Ludwig Nussel)
-#           Unset the $CDPATH variable to avoid problems if it is set. (Debian)
-#           Better handling of dot files in the archive directory.
-# - 2.1.5 : Made the md5sum detection consistent with the header code.
-#           Check for the presence of the archive directory
-#           Added --encrypt for symmetric encryption through gpg (Eric Windisch)
-#           Added support for the digest command on Solaris 10 for MD5 checksums
-#           Check for available disk space before extracting to the target directory (Andreas Schweitzer)
-#           Allow extraction to run asynchronously (patch by Peter Hatch)
-#           Use file descriptors internally to avoid error messages (patch by Kay Tiong Khoo)
-#
-# (C) 1998-2008 by Stéphane Peter <megastep@megastep.org>
-#
-# This software is released under the terms of the GNU GPL version 2 and above
-# Please read the license at http://www.gnu.org/copyleft/gpl.html
-#
-
-MS_VERSION=2.1.5
-MS_COMMAND="$0"
-unset CDPATH
-
-for f in "${1+"$@"}"; do
-    MS_COMMAND="$MS_COMMAND \\\\
-    \\\"$f\\\""
-done
-
-# Procedures
-
-MS_Usage()
-{
-    echo "Usage: $0 [params] archive_dir file_name label [startup_script] [args]"
-    echo "params can be one or more of the following :"
-    echo "    --version | -v  : Print out Makeself version number and exit"
-    echo "    --help | -h     : Print out this help message"
-    echo "    --gzip          : Compress using gzip (default if detected)"
-    echo "    --bzip2         : Compress using bzip2 instead of gzip"
-    echo "    --compress      : Compress using the UNIX 'compress' command"
-    echo "    --nocomp        : Do not compress the data"
-    echo "    --notemp        : The archive will create archive_dir in the"
-    echo "                      current directory and uncompress in ./archive_dir"
-    echo "    --copy          : Upon extraction, the archive will first copy itself to"
-    echo "                      a temporary directory"
-    echo "    --append        : Append more files to an existing Makeself archive"
-    echo "                      The label and startup scripts will then be ignored"
-    echo "    --current       : Files will be extracted to the current directory."
-    echo "                      Implies --notemp."
-    echo "    --nomd5         : Don't calculate an MD5 for archive"
-    echo "    --nocrc         : Don't calculate a CRC for archive"
-    echo "    --header file   : Specify location of the header script"
-    echo "    --follow        : Follow the symlinks in the archive"
-    echo "    --nox11         : Disable automatic spawn of a xterm"
-    echo "    --nowait        : Do not wait for user input after executing embedded"
-    echo "                      program from an xterm"
-    echo "    --lsm file      : LSM file describing the package"
-    echo
-    echo "Do not forget to give a fully qualified startup script name"
-    echo "(i.e. with a ./ prefix if inside the archive)."
-    exit 1
-}
-
-# Default settings
-if type gzip 2>&1 > /dev/null; then
-    COMPRESS=gzip
-else
-    COMPRESS=Unix
-fi
-KEEP=n
-CURRENT=n
-NOX11=n
-APPEND=n
-COPY=none
-TAR_ARGS=cvf
-HEADER=`dirname $0`/makeself-header.sh
-
-# LSM file stuff
-LSM_CMD="echo No LSM. >> \"\$archname\""
-
-while true
-do
-    case "$1" in
-    --version | -v)
-	echo Makeself version $MS_VERSION
-	exit 0
-	;;
-    --bzip2)
-	COMPRESS=bzip2
-	shift
-	;;
-    --gzip)
-	COMPRESS=gzip
-	shift
-	;;
-    --compress)
-	COMPRESS=Unix
-	shift
-	;;
-    --encrypt)
-	COMPRESS=gpg
-	shift
-	;;
-    --nocomp)
-	COMPRESS=none
-	shift
-	;;
-    --notemp)
-	KEEP=y
-	shift
-	;;
-    --copy)
-	COPY=copy
-	shift
-	;;
-    --current)
-	CURRENT=y
-	KEEP=y
-	shift
-	;;
-    --header)
-	HEADER="$2"
-	shift 2
-	;;
-    --follow)
-	TAR_ARGS=cvfh
-	shift
-	;;
-    --nox11)
-	NOX11=y
-	shift
-	;;
-    --nowait)
-	shift
-	;;
-    --nomd5)
-	NOMD5=y
-	shift
-	;;
-    --nocrc)
-	NOCRC=y
-	shift
-	;;
-    --append)
-	APPEND=y
-	shift
-	;;
-    --lsm)
-	LSM_CMD="cat \"$2\" >> \"\$archname\""
-	shift 2
-	;;
-    -h | --help)
-	MS_Usage
-	;;
-    -*)
-	echo Unrecognized flag : "$1"
-	MS_Usage
-	;;
-    *)
-	break
-	;;
-    esac
-done
-
-if test $# -lt 1; then
-	MS_Usage
-else
-	if test -d "$1"; then
-		archdir="$1"
-	else
-		echo "Directory $1 does not exist."
-		exit 1
-	fi
-fi
-archname="$2"
-
-if test "$APPEND" = y; then
-    if test $# -lt 2; then
-	MS_Usage
-    fi
-
-    # Gather the info from the original archive
-    OLDENV=`sh "$archname" --dumpconf`
-    if test $? -ne 0; then
-	echo "Unable to update archive: $archname" >&2
-	exit 1
-    else
-	eval "$OLDENV"
-    fi
-else
-    if test "$KEEP" = n -a $# = 3; then
-	echo "ERROR: Making a temporary archive with no embedded command does not make sense!" >&2
-	echo
-	MS_Usage
-    fi
-    # We don't really want to create an absolute directory...
-    if test "$CURRENT" = y; then
-	archdirname="."
-    else
-	archdirname=`basename "$1"`
-    fi
-
-    if test $# -lt 3; then
-	MS_Usage
-    fi
-
-    LABEL="$3"
-    SCRIPT="$4"
-    test x$SCRIPT = x || shift 1
-    shift 3
-    SCRIPTARGS="$*"
-fi
-
-if test "$KEEP" = n -a "$CURRENT" = y; then
-    echo "ERROR: It is A VERY DANGEROUS IDEA to try to combine --notemp and --current." >&2
-    exit 1
-fi
-
-case $COMPRESS in
-gzip)
-    GZIP_CMD="gzip -c9"
-    GUNZIP_CMD="gzip -cd"
-    ;;
-bzip2)
-    GZIP_CMD="bzip2 -9"
-    GUNZIP_CMD="bzip2 -d"
-    ;;
-gpg)
-    GZIP_CMD="gpg -ac -z9"
-    GUNZIP_CMD="gpg -d"
-    ;;
-Unix)
-    GZIP_CMD="compress -cf"
-    GUNZIP_CMD="exec 2>&-; uncompress -c || test \\\$? -eq 2 || gzip -cd"
-    ;;
-none)
-    GZIP_CMD="cat"
-    GUNZIP_CMD="cat"
-    ;;
-esac
-
-tmpfile="${TMPDIR:=/tmp}/mkself$$"
-
-if test -f $HEADER; then
-	oldarchname="$archname"
-	archname="$tmpfile"
-	# Generate a fake header to count its lines
-	SKIP=0
-    . $HEADER
-    SKIP=`cat "$tmpfile" |wc -l`
-	# Get rid of any spaces
-	SKIP=`expr $SKIP`
-	rm -f "$tmpfile"
-    echo Header is $SKIP lines long >&2
-
-	archname="$oldarchname"
-else
-    echo "Unable to open header file: $HEADER" >&2
-    exit 1
-fi
-
-echo
-
-if test "$APPEND" = n; then
-    if test -f "$archname"; then
-		echo "WARNING: Overwriting existing file: $archname" >&2
-    fi
-fi
-
-USIZE=`du -ks $archdir | cut -f1`
-DATE=`LC_ALL=C date`
-
-if test "." = "$archdirname"; then
-	if test "$KEEP" = n; then
-		archdirname="makeself-$$-`date +%Y%m%d%H%M%S`"
-	fi
-fi
-
-test -d "$archdir" || { echo "Error: $archdir does not exist."; rm -f "$tmpfile"; exit 1; }
-echo About to compress $USIZE KB of data...
-echo Adding files to archive named \"$archname\"...
-exec 3<> "$tmpfile"
-(cd "$archdir" && ( tar $TAR_ARGS - . | eval "$GZIP_CMD" >&3 ) ) || { echo Aborting: Archive directory not found or temporary file: "$tmpfile" could not be created.; exec 3>&-; rm -f "$tmpfile"; exit 1; }
-exec 3>&- # try to close the archive
-
-fsize=`cat "$tmpfile" | wc -c | tr -d " "`
-
-# Compute the checksums
-
-md5sum=00000000000000000000000000000000
-crcsum=0000000000
-
-if test "$NOCRC" = y; then
-	echo "skipping crc at user request"
-else
-	crcsum=`cat "$tmpfile" | CMD_ENV=xpg4 cksum | sed -e 's/ /Z/' -e 's/	/Z/' | cut -dZ -f1`
-	echo "CRC: $crcsum"
-fi
-
-if test "$NOMD5" = y; then
-	echo "skipping md5sum at user request"
-else
-	# Try to locate a MD5 binary
-	OLD_PATH=$PATH
-	PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
-	MD5_ARG=""
-	MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
-	test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
-	test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
-	PATH=$OLD_PATH
-	if test `basename $MD5_PATH` = digest; then
-		MD5_ARG="-a md5"
-	fi
-	if test -x "$MD5_PATH"; then
-		md5sum=`cat "$tmpfile" | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
-		echo "MD5: $md5sum"
-	else
-		echo "MD5: none, MD5 command not found"
-	fi
-fi
-
-if test "$APPEND" = y; then
-    mv "$archname" "$archname".bak || exit
-
-    # Prepare entry for new archive
-    filesizes="$filesizes $fsize"
-    CRCsum="$CRCsum $crcsum"
-    MD5sum="$MD5sum $md5sum"
-    USIZE=`expr $USIZE + $OLDUSIZE`
-    # Generate the header
-    . $HEADER
-    # Append the original data
-    tail -n +$OLDSKIP "$archname".bak >> "$archname"
-    # Append the new data
-    cat "$tmpfile" >> "$archname"
-
-    chmod +x "$archname"
-    rm -f "$archname".bak
-    echo Self-extractible archive \"$archname\" successfully updated.
-else
-    filesizes="$fsize"
-    CRCsum="$crcsum"
-    MD5sum="$md5sum"
-
-    # Generate the header
-    . $HEADER
-
-    # Append the compressed tar data after the stub
-    echo
-    cat "$tmpfile" >> "$archname"
-    chmod +x "$archname"
-    echo Self-extractible archive \"$archname\" successfully created.
-fi
-rm -f "$tmpfile"
+#!/bin/sh
+#
+# Makeself version 2.1.x
+#  by Stephane Peter <megastep@megastep.org>
+#
+# $Id: makeself.sh,v 1.64 2008/01/04 23:52:14 megastep Exp $
+#
+# Utility to create self-extracting tar.gz archives.
+# The resulting archive is a file holding the tar.gz archive with
+# a small Shell script stub that uncompresses the archive to a temporary
+# directory and then executes a given script from withing that directory.
+#
+# Makeself home page: http://www.megastep.org/makeself/
+#
+# Version 2.0 is a rewrite of version 1.0 to make the code easier to read and maintain.
+#
+# Version history :
+# - 1.0 : Initial public release
+# - 1.1 : The archive can be passed parameters that will be passed on to
+#         the embedded script, thanks to John C. Quillan
+# - 1.2 : Package distribution, bzip2 compression, more command line options,
+#         support for non-temporary archives. Ideas thanks to Francois Petitjean
+# - 1.3 : More patches from Bjarni R. Einarsson and Francois Petitjean:
+#         Support for no compression (--nocomp), script is no longer mandatory,
+#         automatic launch in an xterm, optional verbose output, and -target 
+#         archive option to indicate where to extract the files.
+# - 1.4 : Improved UNIX compatibility (Francois Petitjean)
+#         Automatic integrity checking, support of LSM files (Francois Petitjean)
+# - 1.5 : Many bugfixes. Optionally disable xterm spawning.
+# - 1.5.1 : More bugfixes, added archive options -list and -check.
+# - 1.5.2 : Cosmetic changes to inform the user of what's going on with big 
+#           archives (Quake III demo)
+# - 1.5.3 : Check for validity of the DISPLAY variable before launching an xterm.
+#           More verbosity in xterms and check for embedded command's return value.
+#           Bugfix for Debian 2.0 systems that have a different "print" command.
+# - 1.5.4 : Many bugfixes. Print out a message if the extraction failed.
+# - 1.5.5 : More bugfixes. Added support for SETUP_NOCHECK environment variable to
+#           bypass checksum verification of archives.
+# - 1.6.0 : Compute MD5 checksums with the md5sum command (patch from Ryan Gordon)
+# - 2.0   : Brand new rewrite, cleaner architecture, separated header and UNIX ports.
+# - 2.0.1 : Added --copy
+# - 2.1.0 : Allow multiple tarballs to be stored in one archive, and incremental updates.
+#           Added --nochown for archives
+#           Stopped doing redundant checksums when not necesary
+# - 2.1.1 : Work around insane behavior from certain Linux distros with no 'uncompress' command
+#           Cleaned up the code to handle error codes from compress. Simplified the extraction code.
+# - 2.1.2 : Some bug fixes. Use head -n to avoid problems.
+# - 2.1.3 : Bug fixes with command line when spawning terminals.
+#           Added --tar for archives, allowing to give arbitrary arguments to tar on the contents of the archive.
+#           Added --noexec to prevent execution of embedded scripts.
+#           Added --nomd5 and --nocrc to avoid creating checksums in archives.
+#           Added command used to create the archive in --info output.
+#           Run the embedded script through eval.
+# - 2.1.4 : Fixed --info output.
+#           Generate random directory name when extracting files to . to avoid problems. (Jason Trent)
+#           Better handling of errors with wrong permissions for the directory containing the files. (Jason Trent)
+#           Avoid some race conditions (Ludwig Nussel)
+#           Unset the $CDPATH variable to avoid problems if it is set. (Debian)
+#           Better handling of dot files in the archive directory.
+# - 2.1.5 : Made the md5sum detection consistent with the header code.
+#           Check for the presence of the archive directory
+#           Added --encrypt for symmetric encryption through gpg (Eric Windisch)
+#           Added support for the digest command on Solaris 10 for MD5 checksums
+#           Check for available disk space before extracting to the target directory (Andreas Schweitzer)
+#           Allow extraction to run asynchronously (patch by Peter Hatch)
+#           Use file descriptors internally to avoid error messages (patch by Kay Tiong Khoo)
+#
+# (C) 1998-2008 by Stéphane Peter <megastep@megastep.org>
+#
+# This software is released under the terms of the GNU GPL version 2 and above
+# Please read the license at http://www.gnu.org/copyleft/gpl.html
+#
+
+MS_VERSION=2.1.5
+MS_COMMAND="$0"
+unset CDPATH
+
+for f in "${1+"$@"}"; do
+    MS_COMMAND="$MS_COMMAND \\\\
+    \\\"$f\\\""
+done
+
+# Procedures
+
+MS_Usage()
+{
+    echo "Usage: $0 [params] archive_dir file_name label [startup_script] [args]"
+    echo "params can be one or more of the following :"
+    echo "    --version | -v  : Print out Makeself version number and exit"
+    echo "    --help | -h     : Print out this help message"
+    echo "    --gzip          : Compress using gzip (default if detected)"
+    echo "    --bzip2         : Compress using bzip2 instead of gzip"
+    echo "    --compress      : Compress using the UNIX 'compress' command"
+    echo "    --nocomp        : Do not compress the data"
+    echo "    --notemp        : The archive will create archive_dir in the"
+    echo "                      current directory and uncompress in ./archive_dir"
+    echo "    --copy          : Upon extraction, the archive will first copy itself to"
+    echo "                      a temporary directory"
+    echo "    --append        : Append more files to an existing Makeself archive"
+    echo "                      The label and startup scripts will then be ignored"
+    echo "    --current       : Files will be extracted to the current directory."
+    echo "                      Implies --notemp."
+    echo "    --nomd5         : Don't calculate an MD5 for archive"
+    echo "    --nocrc         : Don't calculate a CRC for archive"
+    echo "    --header file   : Specify location of the header script"
+    echo "    --follow        : Follow the symlinks in the archive"
+    echo "    --nox11         : Disable automatic spawn of a xterm"
+    echo "    --nowait        : Do not wait for user input after executing embedded"
+    echo "                      program from an xterm"
+    echo "    --lsm file      : LSM file describing the package"
+    echo
+    echo "Do not forget to give a fully qualified startup script name"
+    echo "(i.e. with a ./ prefix if inside the archive)."
+    exit 1
+}
+
+# Default settings
+if type gzip 2>&1 > /dev/null; then
+    COMPRESS=gzip
+else
+    COMPRESS=Unix
+fi
+KEEP=n
+CURRENT=n
+NOX11=n
+APPEND=n
+COPY=none
+TAR_ARGS=cvf
+HEADER=`dirname $0`/makeself-header.sh
+
+# LSM file stuff
+LSM_CMD="echo No LSM. >> \"\$archname\""
+
+while true
+do
+    case "$1" in
+    --version | -v)
+	echo Makeself version $MS_VERSION
+	exit 0
+	;;
+    --bzip2)
+	COMPRESS=bzip2
+	shift
+	;;
+    --gzip)
+	COMPRESS=gzip
+	shift
+	;;
+    --compress)
+	COMPRESS=Unix
+	shift
+	;;
+    --encrypt)
+	COMPRESS=gpg
+	shift
+	;;
+    --nocomp)
+	COMPRESS=none
+	shift
+	;;
+    --notemp)
+	KEEP=y
+	shift
+	;;
+    --copy)
+	COPY=copy
+	shift
+	;;
+    --current)
+	CURRENT=y
+	KEEP=y
+	shift
+	;;
+    --header)
+	HEADER="$2"
+	shift 2
+	;;
+    --follow)
+	TAR_ARGS=cvfh
+	shift
+	;;
+    --nox11)
+	NOX11=y
+	shift
+	;;
+    --nowait)
+	shift
+	;;
+    --nomd5)
+	NOMD5=y
+	shift
+	;;
+    --nocrc)
+	NOCRC=y
+	shift
+	;;
+    --append)
+	APPEND=y
+	shift
+	;;
+    --lsm)
+	LSM_CMD="cat \"$2\" >> \"\$archname\""
+	shift 2
+	;;
+    -h | --help)
+	MS_Usage
+	;;
+    -*)
+	echo Unrecognized flag : "$1"
+	MS_Usage
+	;;
+    *)
+	break
+	;;
+    esac
+done
+
+if test $# -lt 1; then
+	MS_Usage
+else
+	if test -d "$1"; then
+		archdir="$1"
+	else
+		echo "Directory $1 does not exist."
+		exit 1
+	fi
+fi
+archname="$2"
+
+if test "$APPEND" = y; then
+    if test $# -lt 2; then
+	MS_Usage
+    fi
+
+    # Gather the info from the original archive
+    OLDENV=`sh "$archname" --dumpconf`
+    if test $? -ne 0; then
+	echo "Unable to update archive: $archname" >&2
+	exit 1
+    else
+	eval "$OLDENV"
+    fi
+else
+    if test "$KEEP" = n -a $# = 3; then
+	echo "ERROR: Making a temporary archive with no embedded command does not make sense!" >&2
+	echo
+	MS_Usage
+    fi
+    # We don't really want to create an absolute directory...
+    if test "$CURRENT" = y; then
+	archdirname="."
+    else
+	archdirname=`basename "$1"`
+    fi
+
+    if test $# -lt 3; then
+	MS_Usage
+    fi
+
+    LABEL="$3"
+    SCRIPT="$4"
+    test x$SCRIPT = x || shift 1
+    shift 3
+    SCRIPTARGS="$*"
+fi
+
+if test "$KEEP" = n -a "$CURRENT" = y; then
+    echo "ERROR: It is A VERY DANGEROUS IDEA to try to combine --notemp and --current." >&2
+    exit 1
+fi
+
+case $COMPRESS in
+gzip)
+    GZIP_CMD="gzip -c9"
+    GUNZIP_CMD="gzip -cd"
+    ;;
+bzip2)
+    GZIP_CMD="bzip2 -9"
+    GUNZIP_CMD="bzip2 -d"
+    ;;
+gpg)
+    GZIP_CMD="gpg -ac -z9"
+    GUNZIP_CMD="gpg -d"
+    ;;
+Unix)
+    GZIP_CMD="compress -cf"
+    GUNZIP_CMD="exec 2>&-; uncompress -c || test \\\$? -eq 2 || gzip -cd"
+    ;;
+none)
+    GZIP_CMD="cat"
+    GUNZIP_CMD="cat"
+    ;;
+esac
+
+tmpfile="${TMPDIR:=/tmp}/mkself$$"
+
+if test -f $HEADER; then
+	oldarchname="$archname"
+	archname="$tmpfile"
+	# Generate a fake header to count its lines
+	SKIP=0
+    . $HEADER
+    SKIP=`cat "$tmpfile" |wc -l`
+	# Get rid of any spaces
+	SKIP=`expr $SKIP`
+	rm -f "$tmpfile"
+    echo Header is $SKIP lines long >&2
+
+	archname="$oldarchname"
+else
+    echo "Unable to open header file: $HEADER" >&2
+    exit 1
+fi
+
+echo
+
+if test "$APPEND" = n; then
+    if test -f "$archname"; then
+		echo "WARNING: Overwriting existing file: $archname" >&2
+    fi
+fi
+
+USIZE=`du -ks $archdir | cut -f1`
+DATE=`LC_ALL=C date`
+
+if test "." = "$archdirname"; then
+	if test "$KEEP" = n; then
+		archdirname="makeself-$$-`date +%Y%m%d%H%M%S`"
+	fi
+fi
+
+test -d "$archdir" || { echo "Error: $archdir does not exist."; rm -f "$tmpfile"; exit 1; }
+echo About to compress $USIZE KB of data...
+echo Adding files to archive named \"$archname\"...
+exec 3<> "$tmpfile"
+(cd "$archdir" && ( tar $TAR_ARGS - . | eval "$GZIP_CMD" >&3 ) ) || { echo Aborting: Archive directory not found or temporary file: "$tmpfile" could not be created.; exec 3>&-; rm -f "$tmpfile"; exit 1; }
+exec 3>&- # try to close the archive
+
+fsize=`cat "$tmpfile" | wc -c | tr -d " "`
+
+# Compute the checksums
+
+md5sum=00000000000000000000000000000000
+crcsum=0000000000
+
+if test "$NOCRC" = y; then
+	echo "skipping crc at user request"
+else
+	crcsum=`cat "$tmpfile" | CMD_ENV=xpg4 cksum | sed -e 's/ /Z/' -e 's/	/Z/' | cut -dZ -f1`
+	echo "CRC: $crcsum"
+fi
+
+if test "$NOMD5" = y; then
+	echo "skipping md5sum at user request"
+else
+	# Try to locate a MD5 binary
+	OLD_PATH=$PATH
+	PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
+	MD5_ARG=""
+	MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
+	test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
+	test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
+	PATH=$OLD_PATH
+	if test `basename $MD5_PATH` = digest; then
+		MD5_ARG="-a md5"
+	fi
+	if test -x "$MD5_PATH"; then
+		md5sum=`cat "$tmpfile" | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
+		echo "MD5: $md5sum"
+	else
+		echo "MD5: none, MD5 command not found"
+	fi
+fi
+
+if test "$APPEND" = y; then
+    mv "$archname" "$archname".bak || exit
+
+    # Prepare entry for new archive
+    filesizes="$filesizes $fsize"
+    CRCsum="$CRCsum $crcsum"
+    MD5sum="$MD5sum $md5sum"
+    USIZE=`expr $USIZE + $OLDUSIZE`
+    # Generate the header
+    . $HEADER
+    # Append the original data
+    tail -n +$OLDSKIP "$archname".bak >> "$archname"
+    # Append the new data
+    cat "$tmpfile" >> "$archname"
+
+    chmod +x "$archname"
+    rm -f "$archname".bak
+    echo Self-extractible archive \"$archname\" successfully updated.
+else
+    filesizes="$fsize"
+    CRCsum="$crcsum"
+    MD5sum="$md5sum"
+
+    # Generate the header
+    . $HEADER
+
+    # Append the compressed tar data after the stub
+    echo
+    cat "$tmpfile" >> "$archname"
+    chmod +x "$archname"
+    echo Self-extractible archive \"$archname\" successfully created.
+fi
+rm -f "$tmpfile"
--- a/sbsv2/raptor/util/install-linux/package_sbs.sh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-linux/package_sbs.sh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,83 +1,83 @@
-#!/bin/bash
-
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Package into a linux .run file
-#
-#
-
-getopts 's' packopt
-
-
-export packtype=binary
-if [[ "$packopt" == "s" ]]; then
-packtype=source
-fi
-
-echo "Raptor packager for Linux"
-export PACKAGER_HOME="$PWD"
-
-echo "SBS_HOME is $SBS_HOME - this is the version that will be packaged."
-
-export FULLVERSION=`$SBS_HOME/bin/sbs -v` # this also generates all the pyc files
-export VERSION=`echo "$FULLVERSION" | sed 's#.*sbs version *\([^ ]*\).*#\1#'`
-
-if [ -z "$VERSION" ]; then
-	echo "Version could not be automatically determined - check that SBS_HOME is set correctly" 1>&2
-	exit 1
-else
-	echo "Packaging version $FULLVERSION"
-fi
-
-HOSTPLATFORM_DIR=$($SBS_HOME/bin/gethost.sh -d)
-
-if [[ "$packtype" == "source" ]]; then
-HOSTPLATFORM_DIR="linux_source"
-fi
-
-
-export DIRNAME=sbs-$VERSION-$HOSTPLATFORM_DIR
-export TMPSBS=/tmp/$DIRNAME
-if [ -d  "$TMPSBS" ]; then
-	rm -rf "$TMPSBS"
-fi
-set -x
-mkdir -p "$TMPSBS" &&
-(
-BINARIES="$HOSTPLATFORM_DIR"
-if [[ "$packtype" == "source" ]]; then
-BINARIES=""
-fi
-
-
-   echo init.xml LICENSE.txt RELEASE-NOTES.txt; cd $SBS_HOME && find bin lib $BINARIES python test schema util |
-	grep -v "$TMPSBS"'/python/\.py$' |
-	grep -v 'flm/test'  |
-	grep -v 'util/build'  | 
-	grep -v 'test/epocroot/epoc32/build'  | 
-	grep -v '~$'  |  cpio -o --quiet  2>/dev/null 
-) | ( cd "$TMPSBS" && cpio -i --make-directories  --quiet >/dev/null 2>&1)
-
-# store the version number
-echo "FULLVERSION=\"$FULLVERSION\"" > $TMPSBS/.version
-echo "VERSION=\"$VERSION\"" >> $TMPSBS/.version
-
-if [[ "$packtype" == "binary" ]]; then
-chmod a+x $TMPSBS/bin/* $TMPSBS/util/$HOSTPLATFORM_DIR/bin/* $TMPSBS/util/$HOSTPLATFORM_DIR/python262/bin/* 
-chmod a+x $TMPSBS/util/pvm3/bin/LINUX/*
-chmod a+x $TMPSBS/util/$HOSTPLATFORM_DIR/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/*
-fi
-
-cd $TMPSBS/.. && bash "$PACKAGER_HOME"/makeself.sh $DIRNAME $DIRNAME.run "$FULLVERSION\n" ./bin/install_raptor.sh
-
+#!/bin/bash
+
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Package into a linux .run file
+#
+#
+
+getopts 's' packopt
+
+
+export packtype=binary
+if [[ "$packopt" == "s" ]]; then
+packtype=source
+fi
+
+echo "Raptor packager for Linux"
+export PACKAGER_HOME="$PWD"
+
+echo "SBS_HOME is $SBS_HOME - this is the version that will be packaged."
+
+export FULLVERSION=`$SBS_HOME/bin/sbs -v` # this also generates all the pyc files
+export VERSION=`echo "$FULLVERSION" | sed 's#.*sbs version *\([^ ]*\).*#\1#'`
+
+if [ -z "$VERSION" ]; then
+	echo "Version could not be automatically determined - check that SBS_HOME is set correctly" 1>&2
+	exit 1
+else
+	echo "Packaging version $FULLVERSION"
+fi
+
+HOSTPLATFORM_DIR=$($SBS_HOME/bin/gethost.sh -d)
+
+if [[ "$packtype" == "source" ]]; then
+HOSTPLATFORM_DIR="linux_source"
+fi
+
+
+export DIRNAME=sbs-$VERSION-$HOSTPLATFORM_DIR
+export TMPSBS=/tmp/$DIRNAME
+if [ -d  "$TMPSBS" ]; then
+	rm -rf "$TMPSBS"
+fi
+set -x
+mkdir -p "$TMPSBS" &&
+(
+BINARIES="$HOSTPLATFORM_DIR"
+if [[ "$packtype" == "source" ]]; then
+BINARIES=""
+fi
+
+
+   echo init.xml LICENSE.txt RELEASE-NOTES.txt; cd $SBS_HOME && find bin lib $BINARIES python test schema util |
+	grep -v "$TMPSBS"'/python/\.py$' |
+	grep -v 'flm/test'  |
+	grep -v 'util/build'  | 
+	grep -v 'test/epocroot/epoc32/build'  | 
+	grep -v '~$'  |  cpio -o --quiet  2>/dev/null 
+) | ( cd "$TMPSBS" && cpio -i --make-directories  --quiet >/dev/null 2>&1)
+
+# store the version number
+echo "FULLVERSION=\"$FULLVERSION\"" > $TMPSBS/.version
+echo "VERSION=\"$VERSION\"" >> $TMPSBS/.version
+
+if [[ "$packtype" == "binary" ]]; then
+chmod a+x $TMPSBS/bin/* $TMPSBS/util/$HOSTPLATFORM_DIR/bin/* $TMPSBS/util/$HOSTPLATFORM_DIR/python262/bin/* 
+chmod a+x $TMPSBS/util/pvm3/bin/LINUX/*
+chmod a+x $TMPSBS/util/$HOSTPLATFORM_DIR/cw_build470msl19/release/Symbian_Tools/Command_Line_Tools/*
+fi
+
+cd $TMPSBS/.. && bash "$PACKAGER_HOME"/makeself.sh $DIRNAME $DIRNAME.run "$FULLVERSION\n" ./bin/install_raptor.sh
+
--- a/sbsv2/raptor/util/install-windows/raptorinstallermaker.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallermaker.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,105 +1,105 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-#! python
-
-# Raptor installer maker!
-
-import os
-import os.path
-import subprocess
-import re
-import optparse
-import sys
-import tempfile
-import shutil
-import unzip
-
-tempdir = ""
-
-parser = optparse.OptionParser()
-parser.add_option("-s", "--sbs_home", dest="sbs_home",
-                  help="Path to use as SBS_HOME environment variable. If not present the script exits.")
-
-(options, args) = parser.parse_args()
-
-if options.sbs_home == None:
-	print "ERROR: no SBS_HOME passed in. Exiting..."
-	sys.exit(2)
-
-
-def parseconfig(xmlFile="raptorinstallermaker.xml"):
-	pass
-
-def generateinstallerversionheader(sbs_home = None):
-	os.environ["SBS_HOME"] = sbs_home
-	os.environ["PATH"] = os.path.join(os.environ["SBS_HOME"], "bin") + os.pathsep + os.environ["PATH"]
-	
-	versioncommand = "sbs -v"
-	
-	# Raptor version string looks like this
-	# sbs version 2.5.0 [2009-02-20 release]
-	sbs_version_matcher = re.compile(".*(\d+\.\d+\.\d+).*", re.I)
-	
-	# Create Raptor subprocess
-	sbs = subprocess.Popen(versioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-	
-	# Get all the lines matching the RE
-	for line in sbs.stdout.readlines():
-		res = sbs_version_matcher.match(line)
-		if res:
-			raptorversion = res.group(1)
-			print "Successfully determined Raptor version %s" % raptorversion
-
-	sbs.wait() # Wait for process to end
-	
-	raptorversion_nsis_header_string = "# Raptor version file\n\n!define RAPTOR_VERSION %s\n" % raptorversion
-	
-	fh = open("raptorversion.nsh", "w")
-	fh.write(raptorversion_nsis_header_string)
-	fh.close()
-	print "Wrote raptorversion.nsh"
-	return 0
-	
-def unzipnsis(pathtozip):
-    global tempdir
-    tempdir = tempfile.mkdtemp()
-    un = unzip.unzip()
-    print "Unzipping NSIS to %s..." % tempdir
-    un.extract(pathtozip, tempdir)
-    print "Done."
-    
-    return os.path.join(tempdir, "NSIS", "makensis.exe")
-    
-def runmakensis(nsiscommand):
-	# Create makensis subprocess
-	print "Running NSIS command\n%s" % nsiscommand
-	makensis = subprocess.Popen(nsiscommand, shell=True)
-	makensis.wait() # Wait for process to end
-
-def cleanup():
-	""" Clean up tempdir """
-	global tempdir
-	print "Cleaning up temporary directory %s" % tempdir
-	shutil.rmtree(tempdir,True)
-	print "Done."
-
-makensispath = unzipnsis(".\\NSIS.zip")
-generateinstallerversionheader(options.sbs_home)
-nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s raptorinstallerscript.nsi" % options.sbs_home
-print "nsiscommand = %s" % nsiscommand
-runmakensis(nsiscommand)
-cleanup()
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#! python
+
+# Raptor installer maker!
+
+import os
+import os.path
+import subprocess
+import re
+import optparse
+import sys
+import tempfile
+import shutil
+import unzip
+
+tempdir = ""
+
+parser = optparse.OptionParser()
+parser.add_option("-s", "--sbs_home", dest="sbs_home",
+                  help="Path to use as SBS_HOME environment variable. If not present the script exits.")
+
+(options, args) = parser.parse_args()
+
+if options.sbs_home == None:
+	print "ERROR: no SBS_HOME passed in. Exiting..."
+	sys.exit(2)
+
+
+def parseconfig(xmlFile="raptorinstallermaker.xml"):
+	pass
+
+def generateinstallerversionheader(sbs_home = None):
+	os.environ["SBS_HOME"] = sbs_home
+	os.environ["PATH"] = os.path.join(os.environ["SBS_HOME"], "bin") + os.pathsep + os.environ["PATH"]
+	
+	versioncommand = "sbs -v"
+	
+	# Raptor version string looks like this
+	# sbs version 2.5.0 [2009-02-20 release]
+	sbs_version_matcher = re.compile(".*(\d+\.\d+\.\d+).*", re.I)
+	
+	# Create Raptor subprocess
+	sbs = subprocess.Popen(versioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+	
+	# Get all the lines matching the RE
+	for line in sbs.stdout.readlines():
+		res = sbs_version_matcher.match(line)
+		if res:
+			raptorversion = res.group(1)
+			print "Successfully determined Raptor version %s" % raptorversion
+
+	sbs.wait() # Wait for process to end
+	
+	raptorversion_nsis_header_string = "# Raptor version file\n\n!define RAPTOR_VERSION %s\n" % raptorversion
+	
+	fh = open("raptorversion.nsh", "w")
+	fh.write(raptorversion_nsis_header_string)
+	fh.close()
+	print "Wrote raptorversion.nsh"
+	return 0
+	
+def unzipnsis(pathtozip):
+    global tempdir
+    tempdir = tempfile.mkdtemp()
+    un = unzip.unzip()
+    print "Unzipping NSIS to %s..." % tempdir
+    un.extract(pathtozip, tempdir)
+    print "Done."
+    
+    return os.path.join(tempdir, "NSIS", "makensis.exe")
+    
+def runmakensis(nsiscommand):
+	# Create makensis subprocess
+	print "Running NSIS command\n%s" % nsiscommand
+	makensis = subprocess.Popen(nsiscommand, shell=True)
+	makensis.wait() # Wait for process to end
+
+def cleanup():
+	""" Clean up tempdir """
+	global tempdir
+	print "Cleaning up temporary directory %s" % tempdir
+	shutil.rmtree(tempdir,True)
+	print "Done."
+
+makensispath = unzipnsis(".\\NSIS.zip")
+generateinstallerversionheader(options.sbs_home)
+nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s raptorinstallerscript.nsi" % options.sbs_home
+print "nsiscommand = %s" % nsiscommand
+runmakensis(nsiscommand)
+cleanup()
+
--- a/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Mon Nov 16 09:46:46 2009 +0000
@@ -1,486 +1,486 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Raptor installer/uninstaller script
-
-# Standard NSIS Library includes 
-!include "MUI2.nsh"
-!include "LogicLib.nsh"
-!include "WinMessages.nsh"
-
-# Extra plugin includes
-!include "nsDialogs.nsh"
-!include "Registry.nsh"
-!include "NSISpcre.nsh"
-!include "Time.nsh"
-
-# Define functions from NSISpcre.nsh 
-!insertmacro REMatches
-!insertmacro un.REMatches
-!insertmacro REQuoteMeta
-
-# Variables
-Var DIALOG
-Var RESULT # Generic variable to obtain results, and immediately thrown away after
-Var RESULT2 # Generic variable to obtain results, and immediately thrown away after
-Var SBS_HOME
-Var USERONLYINSTALL_HWND # HWND of radio button control for user-only installation
-Var ALLUSERSINSTALL_HWND # HWND of radio button control for system installation
-Var NOENVCHANGES_HWND    # HWND of radio button control for file-only installation
-Var USERONLYINSTALL_STATE # State of user-only radio button
-Var ALLUSERSINSTALL_STATE # State of system radio button
-Var NOENVCHANGES_STATE # State of file-only installation radio button
-Var INSTALL_TYPE # Type of installer ("USR" or "SYS")
-
-# Custom includes (depend on above variables so much be here)
-!include "raptorinstallerutils.nsh" # Functions and macros for handling environment variables
-!include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
-
-# Defines
-# !define /date DATE_STAMP "%Y-%m-%d-%H-%M-%S"
-!define INSTALLER_NAME "Raptor v${RAPTOR_VERSION}"
-!define RAPTOR "sbs"
-!define INSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}.exe"
-!define UNINSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}-uninstaller.exe"
-
-########################## Attributes ###########################
-# Name of installer executable to create!
-OutFile ${INSTALLER_FILENAME}
-# Name for the installer caption
-Name "Raptor v${RAPTOR_VERSION}"
-
-####################### Generic Behaviour #######################
-# Vista support; use admin in case user decides to install Raptor for all users
-RequestExecutionLevel admin
-# Set XPStyle on
-XPStyle on
-
-###################### Installer Behaviour ######################
-# Warn on Cancel
-!define MUI_ABORTWARNING
-# Abort warning text
-!define MUI_ABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} installer?"
-# Cancel is default button on cancel dialogue boxes.
-!define MUI_ABORTWARNING_CANCEL_DEFAULT
-# Don't just to final page
-!define MUI_FINISHPAGE_NOAUTOCLOSE
-# Show installer details
-ShowInstDetails show
-
-##################### Pages in the installer #####################
-!insertmacro MUI_PAGE_WELCOME
-# Temporarily useing RELEASE-NOTES.txt as there is not license.txt
-!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
-!define MUI_PAGE_HEADER_TEXT "Installation type"
-Page custom UserOrSysInstall UserOrSysInstallLeave
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirLeave # Directory page exit function - disallow spaces in $INSTDIR
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-
-######################## .onInit function ########################
-Function .onInit
-    StrCpy $INSTDIR "C:\Apps\Raptor"
-FunctionEnd
-
-#################### Sections in the installer ####################
-# "Sections" - i.e. components to install. This installer
-# only has Raptor, so there is no point giving options 
-# to the user.
-Section "Install Raptor" INSTALLRAPTOR
-	
-    StrCpy $SBS_HOME "SBS_HOME"
-	
-    # Install Raptor
-    SetOutPath "$INSTDIR\bin"
-    File /r ${RAPTOR_LOCATION}\bin\*.* 
-    SetOutPath "$INSTDIR\examples"
-    File /r ${RAPTOR_LOCATION}\examples\*.*
-    SetOutPath "$INSTDIR\lib"
-    File /r ${RAPTOR_LOCATION}\lib\*.*
-    SetOutPath "$INSTDIR\python"
-    File /r ${RAPTOR_LOCATION}\python\*.*
-    SetOutPath "$INSTDIR\schema"
-    File /r ${RAPTOR_LOCATION}\schema\*.*
-    SetOutPath "$INSTDIR\win32"
-    File /r ${RAPTOR_LOCATION}\win32\*.*
-    
-    SetOutPath "$INSTDIR"
-    File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
-    
-    
-    ${Unless} $INSTALL_TYPE == "NO_ENV"
-        # Back up system and user environments before changing them.
-        !insertmacro DefineDateStamp
-        !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreInstall-${DATE_STAMP}.reg"
-        !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreInstall-${DATE_STAMP}.reg"
-        
-        # Save System Environment just in case.
-        ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
-        
-        ${If} $RESULT == 0
-            DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
-        ${Else}
-            DetailPrint "Failed to back up system environment due to an unknown error."
-        ${EndIf}
-        
-        # Save user Environment just in case.
-        ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
-        
-        ${If} $RESULT == 0
-            DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
-        ${Else}
-            DetailPrint "Failed to back up user environment due to an unknown error."
-        ${EndIf}
-    	
-    	# Reset error flag
-    	ClearErrors
-    	
-    	# Write SBS_HOME variable; if it exists, the user will be asked if they want it to be overwritten.
-    	# Read the env var from the appropriate place
-    	!insertmacro ReadEnvVar $SBS_HOME $RESULT
-    	
-    	${Unless} ${Errors} # No errors, so $SBS_HOME exists
-    		DetailPrint "Env Var $SBS_HOME exists with value $RESULT"
-    		# Ask user if they want it replaced. If yes, write it, if no don't write it.
-    		MessageBox MB_YESNO|MB_ICONQUESTION "The ${INSTALLER_NAME} installer has detected that you already have the SBS_HOME environment variable set with value $RESULT. Would you like the installer to overwrite it with the value $INSTDIR? Click yes to over write with value $INSTDIR, and no to leave it as $RESULT." IDYES write_env_var_yes IDNO write_env_var_no
-    	${Else} # No env var named $SBS_HOME
-    		DetailPrint "Env Var $SBS_HOME does not exist!"
-    	${EndUnless}
-    	
-write_env_var_yes:
-    	# Write SBS_HOME to registry
-    	Push "SBS_HOME" # Third on stack
-    	Push "$INSTDIR" # Second on stack
-    	Push "" # First on stack
-    	
-    	# Needs env var name, env var value, then "" on the stack
-    	call WriteEnvVar
-    	
-    	# Prepend PATH with %SBS_HOME%\bin
-    	Push "%SBS_HOME%\bin" # First on stack
-    	call PrependToPath
-    	goto end
-        
-write_env_var_no:
-    	DetailPrint "Not writing the environment variable $SBS_HOME."
-        
-end:
-    ${EndUnless} 
-	
-	# Generate batch file to set environment variables for Raptor
-	StrCpy $RESULT "@REM Environment variables for ${INSTALLER_NAME}$\r$\nset SBS_HOME=$INSTDIR$\r$\nset PATH=%SBS_HOME%\bin;%PATH%$\r$\n"
-	!insertmacro WriteFile "RaptorEnv.bat" "$RESULT"
-SectionEnd
-
-# Finishing up installation.
-Section
-    ${Unless} $INSTALL_TYPE == "NO_ENV"
-    	# Refresh environment to get changes for SBS_HOME and PATH
-        !insertmacro RefreshEnv
-    ${EndUnless}
-	
-	# Write the uninstaller
-	# WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
-	WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
-	# Unload registry plug in
-	${registry::Unload}
-SectionEnd
-
-# Custom install page to select install type
-Function UserOrSysInstall
-    !insertmacro MUI_HEADER_TEXT "Choose Installation Type" "Choose the type of installation \
-    you would like for your computer."
-    
-	nsDialogs::Create 1018
-	Pop $DIALOG
-	
-	# Exit is unable to create dialog
-	${If} $DIALOG == error
-		Abort
-	${EndIf}
-	
-	# Create second radio button for system install
-	#${NSD_CreateRadioButton} 0 10u 100% 33% "Install Raptor for all users on this computer. \
-    #(Recommended).$\nThis option modifies system wide environment variables."
-	#Pop $ALLUSERSINSTALL_HWND
-    
-    # Create first radio button for user install
-    #${NSD_CreateRadioButton} 0 45u 100% 67% "Install Raptor just for me on this computer.\
-    #$\nThis option modifies only user environment variables."
-    #Pop $USERONLYINSTALL_HWND
-	
-	# Create first radio button for system install
-	${NSD_CreateRadioButton} 0 0% 100% 30% "Install Raptor for all users on this computer. \
-    (Recommended).$\nThis option modifies system wide environment variables."
-	Pop $ALLUSERSINSTALL_HWND
-    
-    # Create second radio button for user install
-    ${NSD_CreateRadioButton} 0 25% 100% 30% "Install Raptor just for me on this computer.\
-    $\nThis option modifies only user environment variables."
-    Pop $USERONLYINSTALL_HWND
-    
-    # Create third radio button for file-only install
-    ${NSD_CreateRadioButton} 0 50% 100% 40% "Install, but do not modify the environment.\
-    $\nThis option only unpacks Raptor's files. A batch file in the installation \ 
-    folder (RaptorEnv.bat) can be used to set Raptor's environment variables in a command prompt."
-    Pop $NOENVCHANGES_HWND
-	
-	# Update page control with previous state, if set.
-	# Initially these will be blank, so set system install to be on by default.
-	${If} $USERONLYINSTALL_STATE == ""
-	${AndIf} $ALLUSERSINSTALL_STATE == ""
-    ${AndIf} $NOENVCHANGES_STATE == ""
-		${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
-	${Else} # Previously set, user has returned to this page using "Back" button
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			${NSD_SetState} $USERONLYINSTALL_HWND ${BST_CHECKED}
-		${ElseIf} $NOENVCHANGES_STATE == ${BST_CHECKED}
-            ${NSD_SetState} $NOENVCHANGES_HWND ${BST_CHECKED}
-        ${Else}
-			${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
-		${EndIf}
-	${EndIf}
-	
-	nsDialogs::Show
-FunctionEnd
-
-# Store the states of the radio buttons once the user has left the page.
-Function UserOrSysInstallLeave
-	${NSD_GetState} $USERONLYINSTALL_HWND $USERONLYINSTALL_STATE
-	${NSD_GetState} $ALLUSERSINSTALL_HWND $ALLUSERSINSTALL_STATE
-    ${NSD_GetState} $NOENVCHANGES_HWND $NOENVCHANGES_STATE
-    
-    # Set the ${INSTALL_TYPE} variable
-    ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "USR"
-    ${EndIf}
-    
-    ${If} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "SYS"
-    ${EndIf}
-    
-    ${If} $NOENVCHANGES_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "NO_ENV"
-    ${EndIf}
-    
-    ${Unless} $INSTALL_TYPE == "USR"
-    ${AndUnless} $INSTALL_TYPE == "SYS"
-    ${AndUnless} $INSTALL_TYPE == "NO_ENV"
-        Abort "Failed to determine installation type.\n\
-        $$INSTALL_TYPE = $\"$INSTALL_TYPE$\"."
-    ${EndUnless} 
-FunctionEnd
-
-Function DirLeave
-	StrCpy $0 " "
-	${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
-	${If} $INSTDIR =~ $9
-		MessageBox MB_OK|MB_ICONSTOP "Please choose a directory without a space in it."
-		Abort
-	${EndIf}
-FunctionEnd
-
-########################### Uninstaller #########################
-######################## .onInit function ########################
-Function un.onInit
-	!undef DATE_STAMP
-	!insertmacro DefineDateStamp
-FunctionEnd
-########################### Behaviour ###########################
-# Warn on Cancel
-!define MUI_UNABORTWARNING
-# Abort warning text
-!undef MUI_UNABORTWARNING_TEXT
-!define MUI_UNABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} uninstaller?"
-# Cancel is default button on cancel dialogue boxes.
-!define MUI_UNABORTWARNING_CANCEL_DEFAULT
-# Don't just to final page
-!define MUI_UNFINISHPAGE_NOAUTOCLOSE
-# Show uninstaller details
-ShowUninstDetails show
-
-#################### Pages in the uninstaller ####################
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-
-################## Sections in the uninstaller ##################
-# There is only one section in the uninstaller.
-Section "Uninstall"
-    # Delete Raptor
-    RmDir /r $INSTDIR\bin
-    RmDir /r $INSTDIR\examples
-    RmDir /r $INSTDIR\lib
-    RmDir /r $INSTDIR\python
-    RmDir /r $INSTDIR\schema
-    RmDir /r $INSTDIR\win32
-    Delete $INSTDIR\RELEASE-NOTES.txt
-    Delete $INSTDIR\RaptorEnv.bat
-    Delete $INSTDIR\${UNINSTALLER_FILENAME}
-    
-    !undef SYS_REG_BACKUP_FILE
-    !undef USR_REG_BACKUP_FILE
-    !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreUninstall-${DATE_STAMP}.reg"
-    !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreUninstall-${DATE_STAMP}.reg"
-    
-    # Save System Environment just in case.
-    ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
-    
-    ${If} $RESULT == 0
-        DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
-    ${Else}
-        DetailPrint "Failed to back up system environment due to an unknown error."
-    ${EndIf}
-    
-    # Save user Environment just in case.
-    ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
-    
-    ${If} $RESULT == 0
-        DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
-    ${Else}
-        DetailPrint "Failed to back up user environment due to an unknown error."
-    ${EndIf}
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read user SBS_HOME
-	!insertmacro ReadUsrEnvVar "SBS_HOME" $RESULT
-	
-	${Unless} ${Errors} # No errors, so user %SBS_HOME% exists
-		DetailPrint "Removing user environment variable SBS_HOME ($RESULT)"
-		
-		# Reset error flag
-		ClearErrors
-		!insertmacro RmUsrEnvVar "SBS_HOME"
-		
-		${If} ${Errors}
-			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the user environment variable SBS_HOME."
-			DetailPrint "Please remove it manually."
-		${EndIf}
-		
-	${Else} # No env var named $SBS_HOME
-		DetailPrint "Note: Unable to find user environment variable SBS_HOME."
-		DetailPrint "If required, this variable may need to be removed manually."
-	${EndUnless}
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read system SBS_HOME
-	!insertmacro ReadSysEnvVar "SBS_HOME" $RESULT
-	
-	${Unless} ${Errors} # No errors, so system $SBS_HOME exists
-		DetailPrint "Removing system environment variable SBS_HOME ($RESULT)"
-		
-		# Reset error flag
-		ClearErrors
-		!insertmacro RmSysEnvVar "SBS_HOME"
-		
-		${If} ${Errors}
-			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the \
-            System environment variable SBS_HOME."
-			DetailPrint "Please remove it manually."
-		${EndIf}
-		
-	${Else} # No env var named $SBS_HOME
-		DetailPrint "Note: Unable to find system environment variable SBS_HOME."
-		DetailPrint "If required, this variable may need to be removed manually."
-	${EndUnless}
-	
-	################################# Clean up the path env vars #################################
-	# Reset error flag
-	ClearErrors
-	
-	# Read user path
-	!insertmacro ReadUsrPath $RESULT
-    DetailPrint "Read user Path: $RESULT"
-	
-	${Unless} ${Errors} # No errors, so user $SBS_HOME exists
-		${If} $RESULT == "" # If it came back empty.
-			DetailPrint "No user Path available - nothing to do."
-		${Else}
-            ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path
-    			DetailPrint "Removing %SBS_HOME%\bin; from user path"
-    			
-    			# Reset error flag and clean user Path
-    			ClearErrors
-    			!insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
-    			
-    			DetailPrint "DEBUG: User path $$RESULT = "
-    	        DetailPrint "DEBUG: User path  $RESULT"
-    			
-    			${If} $RESULT == ""
-    				!insertmacro RmUsrEnvVar "Path"
-    			${Else}
-    				# Write cleaned Path to registry
-    	            !insertmacro WriteUsrEnvVarExp "Path" $RESULT
-    			${EndIf}
-    			
-    			${If} ${Errors}
-    				DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the user Path. Please clean it manually."
-    			${EndIf}
-            ${Else}
-                DetailPrint "Nothing to remove from user path."
-            ${EndIf}
-		${EndIf}
-		
-	${Else} # No user path
-		DetailPrint "Note: Unable to find user Path environment variable."
-		DetailPrint "Please check that the variable exists and remove %SBS_HOME\bin manually if required."
-	${EndUnless}
-    
-    # Read system path
-    !insertmacro ReadSysPath $RESULT
-    DetailPrint "Read system Path: $RESULT"
-    
-    ${Unless} ${Errors} # No errors, so system path read OK.
-        ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path 
-        
-            DetailPrint "Removing %SBS_HOME%\bin; from system path"
-            
-            # Reset error flag
-            ClearErrors
-            !insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
-            DetailPrint "DEBUG: System Path $$RESULT = "
-            DetailPrint "DEBUG: System Path $RESULT"
-            ClearErrors
-            # Write cleaned PATH to registry
-            !insertmacro WriteSysEnvVarExp "Path" $RESULT
-            
-            ${If} ${Errors}
-                DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the PATH."
-                DetailPrint "Please clean it manually."
-            ${EndIf}
-        ${Else}
-            DetailPrint "Nothing to remove from system path."
-        ${EndIf}
-    ${Else} # Some error reading system path
-        DetailPrint "Note: Unable to read the system Path environment variable."
-        DetailPrint "Please check that the variable and remove %SBS_HOME\bin manually if required."
-    ${EndUnless}
-	
-	##########################################################################
-	# Refresh environment to get changes for SBS_HOME and PATH
-    !insertmacro RefreshEnv
-	
-	# Unload registry plug in
-	${registry::Unload}
-SectionEnd
-
-# Languages
-!insertmacro MUI_LANGUAGE "English"
-
-################################################ End ################################################
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Raptor installer/uninstaller script
+
+# Standard NSIS Library includes 
+!include "MUI2.nsh"
+!include "LogicLib.nsh"
+!include "WinMessages.nsh"
+
+# Extra plugin includes
+!include "nsDialogs.nsh"
+!include "Registry.nsh"
+!include "NSISpcre.nsh"
+!include "Time.nsh"
+
+# Define functions from NSISpcre.nsh 
+!insertmacro REMatches
+!insertmacro un.REMatches
+!insertmacro REQuoteMeta
+
+# Variables
+Var DIALOG
+Var RESULT # Generic variable to obtain results, and immediately thrown away after
+Var RESULT2 # Generic variable to obtain results, and immediately thrown away after
+Var SBS_HOME
+Var USERONLYINSTALL_HWND # HWND of radio button control for user-only installation
+Var ALLUSERSINSTALL_HWND # HWND of radio button control for system installation
+Var NOENVCHANGES_HWND    # HWND of radio button control for file-only installation
+Var USERONLYINSTALL_STATE # State of user-only radio button
+Var ALLUSERSINSTALL_STATE # State of system radio button
+Var NOENVCHANGES_STATE # State of file-only installation radio button
+Var INSTALL_TYPE # Type of installer ("USR" or "SYS")
+
+# Custom includes (depend on above variables so much be here)
+!include "raptorinstallerutils.nsh" # Functions and macros for handling environment variables
+!include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
+
+# Defines
+# !define /date DATE_STAMP "%Y-%m-%d-%H-%M-%S"
+!define INSTALLER_NAME "Raptor v${RAPTOR_VERSION}"
+!define RAPTOR "sbs"
+!define INSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}.exe"
+!define UNINSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}-uninstaller.exe"
+
+########################## Attributes ###########################
+# Name of installer executable to create!
+OutFile ${INSTALLER_FILENAME}
+# Name for the installer caption
+Name "Raptor v${RAPTOR_VERSION}"
+
+####################### Generic Behaviour #######################
+# Vista support; use admin in case user decides to install Raptor for all users
+RequestExecutionLevel admin
+# Set XPStyle on
+XPStyle on
+
+###################### Installer Behaviour ######################
+# Warn on Cancel
+!define MUI_ABORTWARNING
+# Abort warning text
+!define MUI_ABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} installer?"
+# Cancel is default button on cancel dialogue boxes.
+!define MUI_ABORTWARNING_CANCEL_DEFAULT
+# Don't just to final page
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+# Show installer details
+ShowInstDetails show
+
+##################### Pages in the installer #####################
+!insertmacro MUI_PAGE_WELCOME
+# Temporarily useing RELEASE-NOTES.txt as there is not license.txt
+!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+!define MUI_PAGE_HEADER_TEXT "Installation type"
+Page custom UserOrSysInstall UserOrSysInstallLeave
+!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirLeave # Directory page exit function - disallow spaces in $INSTDIR
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+
+######################## .onInit function ########################
+Function .onInit
+    StrCpy $INSTDIR "C:\Apps\Raptor"
+FunctionEnd
+
+#################### Sections in the installer ####################
+# "Sections" - i.e. components to install. This installer
+# only has Raptor, so there is no point giving options 
+# to the user.
+Section "Install Raptor" INSTALLRAPTOR
+	
+    StrCpy $SBS_HOME "SBS_HOME"
+	
+    # Install Raptor
+    SetOutPath "$INSTDIR\bin"
+    File /r ${RAPTOR_LOCATION}\bin\*.* 
+    SetOutPath "$INSTDIR\examples"
+    File /r ${RAPTOR_LOCATION}\examples\*.*
+    SetOutPath "$INSTDIR\lib"
+    File /r ${RAPTOR_LOCATION}\lib\*.*
+    SetOutPath "$INSTDIR\python"
+    File /r ${RAPTOR_LOCATION}\python\*.*
+    SetOutPath "$INSTDIR\schema"
+    File /r ${RAPTOR_LOCATION}\schema\*.*
+    SetOutPath "$INSTDIR\win32"
+    File /r ${RAPTOR_LOCATION}\win32\*.*
+    
+    SetOutPath "$INSTDIR"
+    File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+    
+    
+    ${Unless} $INSTALL_TYPE == "NO_ENV"
+        # Back up system and user environments before changing them.
+        !insertmacro DefineDateStamp
+        !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreInstall-${DATE_STAMP}.reg"
+        !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreInstall-${DATE_STAMP}.reg"
+        
+        # Save System Environment just in case.
+        ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
+        
+        ${If} $RESULT == 0
+            DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
+        ${Else}
+            DetailPrint "Failed to back up system environment due to an unknown error."
+        ${EndIf}
+        
+        # Save user Environment just in case.
+        ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
+        
+        ${If} $RESULT == 0
+            DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
+        ${Else}
+            DetailPrint "Failed to back up user environment due to an unknown error."
+        ${EndIf}
+    	
+    	# Reset error flag
+    	ClearErrors
+    	
+    	# Write SBS_HOME variable; if it exists, the user will be asked if they want it to be overwritten.
+    	# Read the env var from the appropriate place
+    	!insertmacro ReadEnvVar $SBS_HOME $RESULT
+    	
+    	${Unless} ${Errors} # No errors, so $SBS_HOME exists
+    		DetailPrint "Env Var $SBS_HOME exists with value $RESULT"
+    		# Ask user if they want it replaced. If yes, write it, if no don't write it.
+    		MessageBox MB_YESNO|MB_ICONQUESTION "The ${INSTALLER_NAME} installer has detected that you already have the SBS_HOME environment variable set with value $RESULT. Would you like the installer to overwrite it with the value $INSTDIR? Click yes to over write with value $INSTDIR, and no to leave it as $RESULT." IDYES write_env_var_yes IDNO write_env_var_no
+    	${Else} # No env var named $SBS_HOME
+    		DetailPrint "Env Var $SBS_HOME does not exist!"
+    	${EndUnless}
+    	
+write_env_var_yes:
+    	# Write SBS_HOME to registry
+    	Push "SBS_HOME" # Third on stack
+    	Push "$INSTDIR" # Second on stack
+    	Push "" # First on stack
+    	
+    	# Needs env var name, env var value, then "" on the stack
+    	call WriteEnvVar
+    	
+    	# Prepend PATH with %SBS_HOME%\bin
+    	Push "%SBS_HOME%\bin" # First on stack
+    	call PrependToPath
+    	goto end
+        
+write_env_var_no:
+    	DetailPrint "Not writing the environment variable $SBS_HOME."
+        
+end:
+    ${EndUnless} 
+	
+	# Generate batch file to set environment variables for Raptor
+	StrCpy $RESULT "@REM Environment variables for ${INSTALLER_NAME}$\r$\nset SBS_HOME=$INSTDIR$\r$\nset PATH=%SBS_HOME%\bin;%PATH%$\r$\n"
+	!insertmacro WriteFile "RaptorEnv.bat" "$RESULT"
+SectionEnd
+
+# Finishing up installation.
+Section
+    ${Unless} $INSTALL_TYPE == "NO_ENV"
+    	# Refresh environment to get changes for SBS_HOME and PATH
+        !insertmacro RefreshEnv
+    ${EndUnless}
+	
+	# Write the uninstaller
+	# WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
+	WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
+	# Unload registry plug in
+	${registry::Unload}
+SectionEnd
+
+# Custom install page to select install type
+Function UserOrSysInstall
+    !insertmacro MUI_HEADER_TEXT "Choose Installation Type" "Choose the type of installation \
+    you would like for your computer."
+    
+	nsDialogs::Create 1018
+	Pop $DIALOG
+	
+	# Exit is unable to create dialog
+	${If} $DIALOG == error
+		Abort
+	${EndIf}
+	
+	# Create second radio button for system install
+	#${NSD_CreateRadioButton} 0 10u 100% 33% "Install Raptor for all users on this computer. \
+    #(Recommended).$\nThis option modifies system wide environment variables."
+	#Pop $ALLUSERSINSTALL_HWND
+    
+    # Create first radio button for user install
+    #${NSD_CreateRadioButton} 0 45u 100% 67% "Install Raptor just for me on this computer.\
+    #$\nThis option modifies only user environment variables."
+    #Pop $USERONLYINSTALL_HWND
+	
+	# Create first radio button for system install
+	${NSD_CreateRadioButton} 0 0% 100% 30% "Install Raptor for all users on this computer. \
+    (Recommended).$\nThis option modifies system wide environment variables."
+	Pop $ALLUSERSINSTALL_HWND
+    
+    # Create second radio button for user install
+    ${NSD_CreateRadioButton} 0 25% 100% 30% "Install Raptor just for me on this computer.\
+    $\nThis option modifies only user environment variables."
+    Pop $USERONLYINSTALL_HWND
+    
+    # Create third radio button for file-only install
+    ${NSD_CreateRadioButton} 0 50% 100% 40% "Install, but do not modify the environment.\
+    $\nThis option only unpacks Raptor's files. A batch file in the installation \ 
+    folder (RaptorEnv.bat) can be used to set Raptor's environment variables in a command prompt."
+    Pop $NOENVCHANGES_HWND
+	
+	# Update page control with previous state, if set.
+	# Initially these will be blank, so set system install to be on by default.
+	${If} $USERONLYINSTALL_STATE == ""
+	${AndIf} $ALLUSERSINSTALL_STATE == ""
+    ${AndIf} $NOENVCHANGES_STATE == ""
+		${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
+	${Else} # Previously set, user has returned to this page using "Back" button
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			${NSD_SetState} $USERONLYINSTALL_HWND ${BST_CHECKED}
+		${ElseIf} $NOENVCHANGES_STATE == ${BST_CHECKED}
+            ${NSD_SetState} $NOENVCHANGES_HWND ${BST_CHECKED}
+        ${Else}
+			${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
+		${EndIf}
+	${EndIf}
+	
+	nsDialogs::Show
+FunctionEnd
+
+# Store the states of the radio buttons once the user has left the page.
+Function UserOrSysInstallLeave
+	${NSD_GetState} $USERONLYINSTALL_HWND $USERONLYINSTALL_STATE
+	${NSD_GetState} $ALLUSERSINSTALL_HWND $ALLUSERSINSTALL_STATE
+    ${NSD_GetState} $NOENVCHANGES_HWND $NOENVCHANGES_STATE
+    
+    # Set the ${INSTALL_TYPE} variable
+    ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "USR"
+    ${EndIf}
+    
+    ${If} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "SYS"
+    ${EndIf}
+    
+    ${If} $NOENVCHANGES_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "NO_ENV"
+    ${EndIf}
+    
+    ${Unless} $INSTALL_TYPE == "USR"
+    ${AndUnless} $INSTALL_TYPE == "SYS"
+    ${AndUnless} $INSTALL_TYPE == "NO_ENV"
+        Abort "Failed to determine installation type.\n\
+        $$INSTALL_TYPE = $\"$INSTALL_TYPE$\"."
+    ${EndUnless} 
+FunctionEnd
+
+Function DirLeave
+	StrCpy $0 " "
+	${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
+	${If} $INSTDIR =~ $9
+		MessageBox MB_OK|MB_ICONSTOP "Please choose a directory without a space in it."
+		Abort
+	${EndIf}
+FunctionEnd
+
+########################### Uninstaller #########################
+######################## .onInit function ########################
+Function un.onInit
+	!undef DATE_STAMP
+	!insertmacro DefineDateStamp
+FunctionEnd
+########################### Behaviour ###########################
+# Warn on Cancel
+!define MUI_UNABORTWARNING
+# Abort warning text
+!undef MUI_UNABORTWARNING_TEXT
+!define MUI_UNABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} uninstaller?"
+# Cancel is default button on cancel dialogue boxes.
+!define MUI_UNABORTWARNING_CANCEL_DEFAULT
+# Don't just to final page
+!define MUI_UNFINISHPAGE_NOAUTOCLOSE
+# Show uninstaller details
+ShowUninstDetails show
+
+#################### Pages in the uninstaller ####################
+!insertmacro MUI_UNPAGE_WELCOME
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+!insertmacro MUI_UNPAGE_FINISH
+
+################## Sections in the uninstaller ##################
+# There is only one section in the uninstaller.
+Section "Uninstall"
+    # Delete Raptor
+    RmDir /r $INSTDIR\bin
+    RmDir /r $INSTDIR\examples
+    RmDir /r $INSTDIR\lib
+    RmDir /r $INSTDIR\python
+    RmDir /r $INSTDIR\schema
+    RmDir /r $INSTDIR\win32
+    Delete $INSTDIR\RELEASE-NOTES.txt
+    Delete $INSTDIR\RaptorEnv.bat
+    Delete $INSTDIR\${UNINSTALLER_FILENAME}
+    
+    !undef SYS_REG_BACKUP_FILE
+    !undef USR_REG_BACKUP_FILE
+    !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreUninstall-${DATE_STAMP}.reg"
+    !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreUninstall-${DATE_STAMP}.reg"
+    
+    # Save System Environment just in case.
+    ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
+    
+    ${If} $RESULT == 0
+        DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
+    ${Else}
+        DetailPrint "Failed to back up system environment due to an unknown error."
+    ${EndIf}
+    
+    # Save user Environment just in case.
+    ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
+    
+    ${If} $RESULT == 0
+        DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
+    ${Else}
+        DetailPrint "Failed to back up user environment due to an unknown error."
+    ${EndIf}
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read user SBS_HOME
+	!insertmacro ReadUsrEnvVar "SBS_HOME" $RESULT
+	
+	${Unless} ${Errors} # No errors, so user %SBS_HOME% exists
+		DetailPrint "Removing user environment variable SBS_HOME ($RESULT)"
+		
+		# Reset error flag
+		ClearErrors
+		!insertmacro RmUsrEnvVar "SBS_HOME"
+		
+		${If} ${Errors}
+			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the user environment variable SBS_HOME."
+			DetailPrint "Please remove it manually."
+		${EndIf}
+		
+	${Else} # No env var named $SBS_HOME
+		DetailPrint "Note: Unable to find user environment variable SBS_HOME."
+		DetailPrint "If required, this variable may need to be removed manually."
+	${EndUnless}
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read system SBS_HOME
+	!insertmacro ReadSysEnvVar "SBS_HOME" $RESULT
+	
+	${Unless} ${Errors} # No errors, so system $SBS_HOME exists
+		DetailPrint "Removing system environment variable SBS_HOME ($RESULT)"
+		
+		# Reset error flag
+		ClearErrors
+		!insertmacro RmSysEnvVar "SBS_HOME"
+		
+		${If} ${Errors}
+			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the \
+            System environment variable SBS_HOME."
+			DetailPrint "Please remove it manually."
+		${EndIf}
+		
+	${Else} # No env var named $SBS_HOME
+		DetailPrint "Note: Unable to find system environment variable SBS_HOME."
+		DetailPrint "If required, this variable may need to be removed manually."
+	${EndUnless}
+	
+	################################# Clean up the path env vars #################################
+	# Reset error flag
+	ClearErrors
+	
+	# Read user path
+	!insertmacro ReadUsrPath $RESULT
+    DetailPrint "Read user Path: $RESULT"
+	
+	${Unless} ${Errors} # No errors, so user $SBS_HOME exists
+		${If} $RESULT == "" # If it came back empty.
+			DetailPrint "No user Path available - nothing to do."
+		${Else}
+            ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path
+    			DetailPrint "Removing %SBS_HOME%\bin; from user path"
+    			
+    			# Reset error flag and clean user Path
+    			ClearErrors
+    			!insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
+    			
+    			DetailPrint "DEBUG: User path $$RESULT = "
+    	        DetailPrint "DEBUG: User path  $RESULT"
+    			
+    			${If} $RESULT == ""
+    				!insertmacro RmUsrEnvVar "Path"
+    			${Else}
+    				# Write cleaned Path to registry
+    	            !insertmacro WriteUsrEnvVarExp "Path" $RESULT
+    			${EndIf}
+    			
+    			${If} ${Errors}
+    				DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the user Path. Please clean it manually."
+    			${EndIf}
+            ${Else}
+                DetailPrint "Nothing to remove from user path."
+            ${EndIf}
+		${EndIf}
+		
+	${Else} # No user path
+		DetailPrint "Note: Unable to find user Path environment variable."
+		DetailPrint "Please check that the variable exists and remove %SBS_HOME\bin manually if required."
+	${EndUnless}
+    
+    # Read system path
+    !insertmacro ReadSysPath $RESULT
+    DetailPrint "Read system Path: $RESULT"
+    
+    ${Unless} ${Errors} # No errors, so system path read OK.
+        ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path 
+        
+            DetailPrint "Removing %SBS_HOME%\bin; from system path"
+            
+            # Reset error flag
+            ClearErrors
+            !insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
+            DetailPrint "DEBUG: System Path $$RESULT = "
+            DetailPrint "DEBUG: System Path $RESULT"
+            ClearErrors
+            # Write cleaned PATH to registry
+            !insertmacro WriteSysEnvVarExp "Path" $RESULT
+            
+            ${If} ${Errors}
+                DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the PATH."
+                DetailPrint "Please clean it manually."
+            ${EndIf}
+        ${Else}
+            DetailPrint "Nothing to remove from system path."
+        ${EndIf}
+    ${Else} # Some error reading system path
+        DetailPrint "Note: Unable to read the system Path environment variable."
+        DetailPrint "Please check that the variable and remove %SBS_HOME\bin manually if required."
+    ${EndUnless}
+	
+	##########################################################################
+	# Refresh environment to get changes for SBS_HOME and PATH
+    !insertmacro RefreshEnv
+	
+	# Unload registry plug in
+	${registry::Unload}
+SectionEnd
+
+# Languages
+!insertmacro MUI_LANGUAGE "English"
+
+################################################ End ################################################
--- a/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,243 +1,243 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Raptor installer header file
-
-!include "WordFunc.nsh"
-
-# Time macros
-!macro DefineDateStamp
-	${time::GetLocalTime} $RESULT
-	${time::TimeString} "$RESULT" $0 $1 $2 $3 $4 $5
-	!define DATE_STAMP "$2-$1-$0-$3-$4-$5"
-!macroend
-
-# Env var manipulation macros
-
-# Macro to refresh the computer's environment by sending Windows the
-# WM_WININICHANGE message so that it re-reads the environment changes
-# the installer has made.
-!macro RefreshEnv
-	DetailPrint "Refreshing your computer's environment..."
-	SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" $RESULT /TIMEOUT=5000
-	DetailPrint "Done."
-!macroend
-
-# Sets ${RESULT} to value of user env var named ${VARNAME}
-!macro ReadUsrEnvVar VARNAME RESULT
-	ReadRegStr ${RESULT} HKCU "Environment" ${VARNAME}
-!macroend
-
-# Sets ${RESULT} to value of system env var named ${VARNAME}
-!macro ReadSysEnvVar VARNAME RESULT
-	ReadRegStr ${RESULT} HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
-!macroend
-
-# Read the env var from the appropriate place
-!macro ReadEnvVar VARNAME RESULT
-	${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-		# User env var
-		!insertmacro ReadUsrEnvVar ${VARNAME} ${RESULT}
-	${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-		# System env var
-		!insertmacro ReadSysEnvVar ${VARNAME} ${RESULT}
-	${Else}
-		# Something has gone wrong!
-		MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-	${EndIf}
-!macroend
-
-# Read the user Path
-!macro ReadUsrPath OUTPUT
-	# Reset error flag
-	ClearErrors
-    !insertmacro ReadUsrEnvVar "Path" ${OUTPUT}
-    
-	${If} ${Errors}
-		DetailPrint "User has no Path variable."
-		StrCpy "${OUTPUT}" ""
-	${EndIf}
-!macroend
-
-# Read the user Path
-!macro ReadSysPath OUTPUT
-	# Reset error flag
-	ClearErrors
-	!insertmacro ReadSysEnvVar "Path" ${OUTPUT}
-!macroend
-
-# Read the Path (installer only).
-!macro ReadPath OUTPUT
-${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-	# User env var
-	!insertmacro ReadUsrPath ${OUTPUT}
-${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-	# System env var
-	!insertmacro ReadSysPath ${OUTPUT}
-${Else}
-	# Something has gone wrong!
-	MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-${EndIf}
-!macroend
-
-# Writes a string user environment variable to the Registry
-# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
-!macro WriteUsrEnvVar VARNAME VALUE
-	WriteRegStr HKCU "Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Writes a string system environment variable to the Registry
-# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
-!macro WriteSysEnvVar VARNAME VALUE
-	WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Use the following for PATH env var that can expand variables it contains, e.g.
-# Something like 
-# %SBS_HOME%;C:\Windows...
-# should be written to the registry
-# SBS_HOME must NOT be an "expandable string"; in fact expandable strings don't work recursively
-
-# Writes an expandable string user environment variable to the Registry; mostly used for PATH
-!macro WriteUsrEnvVarExp VARNAME VALUE
-	WriteRegExpandStr HKCU "Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Writes an expandable string system environment variable to the Registry; mostly used for PATH
-!macro WriteSysEnvVarExp VARNAME VALUE
-	WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Deletes a user environment variable from the Registry
-!macro RmUsrEnvVar VARNAME
-	DeleteRegValue HKCU "Environment" ${VARNAME}
-!macroend
-
-# Deletes a system environment variable from the Registry
-!macro RmSysEnvVar VARNAME
-	DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
-!macroend
-
-# Push env var name, value of env var, and either "" (for normal string env var) 
-# or "exp" (for expandable env var) onto stack before calling this function
-# in this order
-Function WriteEnvVar
-	pop $2 # Expandable string or not?
-	pop $1 # Env var value
-	pop $0 # Env var name
-		
-	DetailPrint "Going to write evn var $0, with value $1, expandable: $2."
-	
-	# Reset error flag
-	ClearErrors
-	
-	${If} $2 == "exp" # Expandable string env var
-		# Write the env var to the appropriate place
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# User env var
-			!insertmacro WriteUsrEnvVarExp $0 $1
-		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# System env var
-			!insertmacro WriteSysEnvVarExp $0 $1
-		${Else}
-			# Something has gone wrong!
-			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-		${EndIf}
-	${Else} # Normal string env var
-		# Write the env var to the appropriate place
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# User env var
-			!insertmacro WriteUsrEnvVar $0 $1
-		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# System env var
-			!insertmacro WriteSysEnvVar $0 $1
-		${Else}
-			# Something has gone wrong!
-			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-		${EndIf}
-	${EndIf}
-FunctionEnd
-
-# Prepend the PATH env var with the given string. User/system path is determined using
-# other function.
-Function PrependToPath
-	pop $0 # String to prepend to PATH
-		
-	DetailPrint "Going to prepend PATH with $0."
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read Path
-	!insertmacro ReadPath $RESULT
-	
-	${Unless} ${Errors} # If no errors
-		${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
-		${If} $RESULT !~ $9 # If Path doesn't contain string to add
-			StrLen $RESULT2 "$0;$RESULT"
-			# Warn is Path might be "too" long for the Windows registry.
-			${If} $RESULT2 > 1023
-				DetailPrint "Note: adding %SBS_HOME%\bin; to the start of your Path..."
-				DetailPrint "... will result in a string longer than 1023 characters..."
-				DetailPrint "... being written to your registry. Certain versions of Windows..."
-				DetailPrint "... cannot handle a string that long in the registry. The installer..."
-				DetailPrint "... will continue writing to the registry. However, a back up of..."
-				DetailPrint "... your full environment has been created in your installation directory ..."
-				DetailPrint "... should anything go wrong which can be used to restore your previous Path."
-			${EndIf}
-			
-			Push "Path" # Third on stack
-			Push "$0;$RESULT" # Second on stack
-			Push "exp" # First on stack
-			# Write expandable string to registry
-			call WriteEnvVar
-		${EndIf}
-	${Else}
-		DetailPrint "Error: failed to read Path environment variable."
-	${EndUnless}
-FunctionEnd
-
-# Remove the string STR from the string PATH.
-!macro RemoveFromPathString PATH STR
-	DetailPrint "Going to remove ${STR} from ${PATH}."
-	${WordReplace} "${PATH}" "${STR}" "" "+" $RESULT2
-	DetailPrint "Debug: Replaced ${STR} in RESULT2 = [$RESULT2]"
-	StrCpy ${PATH} "$RESULT2"
-	
-	${WordReplace} "${PATH}" ";;" ";" "+" $RESULT2
-	DetailPrint "Debug: Replaced ;; in RESULT2 = [$RESULT2]"
-	StrCpy ${PATH} $RESULT2
-!macroend
-
-################### Miscellaneous utilities
-# WriteFile - writes a file with given contents
-# FILENAME - full path to file (all directories in path must exist)
-# CONTENTS - string to write to the file.
-!macro WriteFile FILENAME CONTENTS
-	DetailPrint "Creating batch file for setting Raptor's environment..."
-	ClearErrors
-	FileOpen $0 ${FILENAME} w
-	${Unless} ${Errors}
-		FileWrite $0 "${CONTENTS}"
-		FileClose $0
-		DetailPrint "Done."		
-	${Else}
-		DetailPrint "Error: failed to write RaptorEnv.bat."
-	${EndUnless}
-!macroend
-
-################################################ End ################################################
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Raptor installer header file
+
+!include "WordFunc.nsh"
+
+# Time macros
+!macro DefineDateStamp
+	${time::GetLocalTime} $RESULT
+	${time::TimeString} "$RESULT" $0 $1 $2 $3 $4 $5
+	!define DATE_STAMP "$2-$1-$0-$3-$4-$5"
+!macroend
+
+# Env var manipulation macros
+
+# Macro to refresh the computer's environment by sending Windows the
+# WM_WININICHANGE message so that it re-reads the environment changes
+# the installer has made.
+!macro RefreshEnv
+	DetailPrint "Refreshing your computer's environment..."
+	SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" $RESULT /TIMEOUT=5000
+	DetailPrint "Done."
+!macroend
+
+# Sets ${RESULT} to value of user env var named ${VARNAME}
+!macro ReadUsrEnvVar VARNAME RESULT
+	ReadRegStr ${RESULT} HKCU "Environment" ${VARNAME}
+!macroend
+
+# Sets ${RESULT} to value of system env var named ${VARNAME}
+!macro ReadSysEnvVar VARNAME RESULT
+	ReadRegStr ${RESULT} HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
+!macroend
+
+# Read the env var from the appropriate place
+!macro ReadEnvVar VARNAME RESULT
+	${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+		# User env var
+		!insertmacro ReadUsrEnvVar ${VARNAME} ${RESULT}
+	${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+		# System env var
+		!insertmacro ReadSysEnvVar ${VARNAME} ${RESULT}
+	${Else}
+		# Something has gone wrong!
+		MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+	${EndIf}
+!macroend
+
+# Read the user Path
+!macro ReadUsrPath OUTPUT
+	# Reset error flag
+	ClearErrors
+    !insertmacro ReadUsrEnvVar "Path" ${OUTPUT}
+    
+	${If} ${Errors}
+		DetailPrint "User has no Path variable."
+		StrCpy "${OUTPUT}" ""
+	${EndIf}
+!macroend
+
+# Read the user Path
+!macro ReadSysPath OUTPUT
+	# Reset error flag
+	ClearErrors
+	!insertmacro ReadSysEnvVar "Path" ${OUTPUT}
+!macroend
+
+# Read the Path (installer only).
+!macro ReadPath OUTPUT
+${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+	# User env var
+	!insertmacro ReadUsrPath ${OUTPUT}
+${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+	# System env var
+	!insertmacro ReadSysPath ${OUTPUT}
+${Else}
+	# Something has gone wrong!
+	MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+${EndIf}
+!macroend
+
+# Writes a string user environment variable to the Registry
+# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
+!macro WriteUsrEnvVar VARNAME VALUE
+	WriteRegStr HKCU "Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Writes a string system environment variable to the Registry
+# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
+!macro WriteSysEnvVar VARNAME VALUE
+	WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Use the following for PATH env var that can expand variables it contains, e.g.
+# Something like 
+# %SBS_HOME%;C:\Windows...
+# should be written to the registry
+# SBS_HOME must NOT be an "expandable string"; in fact expandable strings don't work recursively
+
+# Writes an expandable string user environment variable to the Registry; mostly used for PATH
+!macro WriteUsrEnvVarExp VARNAME VALUE
+	WriteRegExpandStr HKCU "Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Writes an expandable string system environment variable to the Registry; mostly used for PATH
+!macro WriteSysEnvVarExp VARNAME VALUE
+	WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Deletes a user environment variable from the Registry
+!macro RmUsrEnvVar VARNAME
+	DeleteRegValue HKCU "Environment" ${VARNAME}
+!macroend
+
+# Deletes a system environment variable from the Registry
+!macro RmSysEnvVar VARNAME
+	DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
+!macroend
+
+# Push env var name, value of env var, and either "" (for normal string env var) 
+# or "exp" (for expandable env var) onto stack before calling this function
+# in this order
+Function WriteEnvVar
+	pop $2 # Expandable string or not?
+	pop $1 # Env var value
+	pop $0 # Env var name
+		
+	DetailPrint "Going to write evn var $0, with value $1, expandable: $2."
+	
+	# Reset error flag
+	ClearErrors
+	
+	${If} $2 == "exp" # Expandable string env var
+		# Write the env var to the appropriate place
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# User env var
+			!insertmacro WriteUsrEnvVarExp $0 $1
+		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# System env var
+			!insertmacro WriteSysEnvVarExp $0 $1
+		${Else}
+			# Something has gone wrong!
+			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+		${EndIf}
+	${Else} # Normal string env var
+		# Write the env var to the appropriate place
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# User env var
+			!insertmacro WriteUsrEnvVar $0 $1
+		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# System env var
+			!insertmacro WriteSysEnvVar $0 $1
+		${Else}
+			# Something has gone wrong!
+			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+		${EndIf}
+	${EndIf}
+FunctionEnd
+
+# Prepend the PATH env var with the given string. User/system path is determined using
+# other function.
+Function PrependToPath
+	pop $0 # String to prepend to PATH
+		
+	DetailPrint "Going to prepend PATH with $0."
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read Path
+	!insertmacro ReadPath $RESULT
+	
+	${Unless} ${Errors} # If no errors
+		${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
+		${If} $RESULT !~ $9 # If Path doesn't contain string to add
+			StrLen $RESULT2 "$0;$RESULT"
+			# Warn is Path might be "too" long for the Windows registry.
+			${If} $RESULT2 > 1023
+				DetailPrint "Note: adding %SBS_HOME%\bin; to the start of your Path..."
+				DetailPrint "... will result in a string longer than 1023 characters..."
+				DetailPrint "... being written to your registry. Certain versions of Windows..."
+				DetailPrint "... cannot handle a string that long in the registry. The installer..."
+				DetailPrint "... will continue writing to the registry. However, a back up of..."
+				DetailPrint "... your full environment has been created in your installation directory ..."
+				DetailPrint "... should anything go wrong which can be used to restore your previous Path."
+			${EndIf}
+			
+			Push "Path" # Third on stack
+			Push "$0;$RESULT" # Second on stack
+			Push "exp" # First on stack
+			# Write expandable string to registry
+			call WriteEnvVar
+		${EndIf}
+	${Else}
+		DetailPrint "Error: failed to read Path environment variable."
+	${EndUnless}
+FunctionEnd
+
+# Remove the string STR from the string PATH.
+!macro RemoveFromPathString PATH STR
+	DetailPrint "Going to remove ${STR} from ${PATH}."
+	${WordReplace} "${PATH}" "${STR}" "" "+" $RESULT2
+	DetailPrint "Debug: Replaced ${STR} in RESULT2 = [$RESULT2]"
+	StrCpy ${PATH} "$RESULT2"
+	
+	${WordReplace} "${PATH}" ";;" ";" "+" $RESULT2
+	DetailPrint "Debug: Replaced ;; in RESULT2 = [$RESULT2]"
+	StrCpy ${PATH} $RESULT2
+!macroend
+
+################### Miscellaneous utilities
+# WriteFile - writes a file with given contents
+# FILENAME - full path to file (all directories in path must exist)
+# CONTENTS - string to write to the file.
+!macro WriteFile FILENAME CONTENTS
+	DetailPrint "Creating batch file for setting Raptor's environment..."
+	ClearErrors
+	FileOpen $0 ${FILENAME} w
+	${Unless} ${Errors}
+		FileWrite $0 "${CONTENTS}"
+		FileClose $0
+		DetailPrint "Done."		
+	${Else}
+		DetailPrint "Error: failed to write RaptorEnv.bat."
+	${EndUnless}
+!macroend
+
+################################################ End ################################################
--- a/sbsv2/raptor/util/install-windows/unzip.py	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/unzip.py	Mon Nov 16 09:46:46 2009 +0000
@@ -1,203 +1,203 @@
-# The MIT License
-# Copyright (c) 2003 Doug Tolton
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-#
-
-""" unzip.py
-    Version: 1.1
-
-    Extract a zip file to the directory provided
-    It first creates the directory structure to house the files
-    then it extracts the files to it.
-
-    Sample usage:
-    Windows command line
-    unzip.py -p 10 -z c:\testfile.zip -o c:\testoutput
-    
-    Linux command line
-    unzip.py -p 10 -z /tmp/testfile.zip -o /tmp/testoutput
-
-    Python class:
-    import unzip
-    un = unzip.unzip()
-    un.extract(r'c:\testfile.zip', r'c:\testoutput') # Windows
-    un.extract(r'/tmp/testfile.zip', '/tmp/testoutput') # Linux
-    
-    By Doug Tolton
-    
-    Taken from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252508
-    
-    Updated by Daniel Jacobs to be OS-neutral and more stable.
-"""
-
-import sys
-import zipfile
-import os
-import os.path
-import getopt
-import errno
-
-class unzip:
-    def __init__(self, verbose = False, percent = 10):
-        self.verbose = verbose
-        self.percent = percent
-        
-    def extract(self, file, dir):
-        """ Extract all the files in the zip file, "file" to the directory "dir" with full path names."""
-        if not dir.endswith(':') and not os.path.exists(dir):
-            self._makedir(dir)
-
-        zf = zipfile.ZipFile(file)
-
-        # create directory structure to house files
-        self._createstructure(file, dir)
-
-        num_files = len(zf.namelist())
-        percent = self.percent
-        divisions = 100 / percent
-        perc = int(num_files / divisions)
-
-        # extract files to directory structure
-        for i, name in enumerate(zf.namelist()):
-
-            if self.verbose == True:
-                print "Extracting %s" % name
-            elif perc > 0 and (i % perc) == 0 and i > 0:
-                complete = int (i / perc) * percent
-                print "%s%% complete" % complete
-
-            if not name.endswith('/'):
-                # Normalise the path so that it is correct for the current OS
-                localdirname = os.path.normpath(os.path.join(dir, os.path.dirname(name)))
-                
-                # Ensure that the directory hierarchy that contains the files exists so that 
-                # writing to the file is valid. Note: some zip tools omit directory information 
-                # and this will cause problems when trying to write file to non-existent directories.
-                self._makedir(localdirname)
-                    
-                # Write the file
-                outfile = open(os.path.join(localdirname, os.path.basename(name)), 'wb')
-                outfile.write(zf.read(name))
-                outfile.flush()
-                outfile.close()
-        
-        zf.close()
-
-
-    def _createstructure(self, file, dir):
-        self._makedirs(self._listdirs(file), dir)
-
-
-    def _makedirs(self, directories, basedir):
-        """ Create any directories that don't currently exist """
-        for dir in directories:
-            curdir = os.path.join(basedir, dir)
-            # Normalise path for current OS.
-            curdir = os.path.normpath(curdir)
-            self._makedir(curdir) 
-            
-    
-    def _makedir(self, directory):
-        """ Create a directory "safely", catching the "file exists" exception if the 
-        directory has been created by another process. Creates all parent directories
-        recursively as requied. """
-        if not os.path.exists(directory):
-            # In multi-threaded uses, it is possible that this directory 
-            # has been made in the meantime. Catch this exception.
-            try:
-                os.makedirs(directory)
-            except OSError, aOSError:
-                # If the OSError is that the file exists then we are OK - this
-                # might occur in a multi-threaded or multi-process environment;
-                # otherwise re-raise the exception since it's something else bad.
-                if aOSError.errno != errno.EEXIST:
-                    raise aOSError
-
-    def _listdirs(self, file):
-        """ Grabs all the directories in the zip structure
-        This is necessary to create the structure before trying
-        to extract the file to it. """
-        zf = zipfile.ZipFile(file)
-
-        dirs = []
-
-        for name in zf.namelist():
-            if name.endswith('/'):
-                if self.verbose == True:
-                    print "Directory \"" + name + "\" will be made."
-                dirs.append(name)
-        
-        zf.close()
-        return dirs
-
-def usage():
-    print """usage: unzip.py -z <zipfile> -o <targetdir>
-    <zipfile> is the source zipfile to extract
-    <targetdir> is the target destination
-
-    -z zipfile to extract
-    -o target location
-    -p sets the percentage notification
-    -v sets the extraction to verbose (overrides -p)
-
-    long options also work:
-    --verbose
-    --percent=10
-    --zipfile=<zipfile>
-    --outdir=<targetdir>"""
-    
-
-def main():
-    shortargs = 'vhp:z:o:'
-    longargs = ['verbose', 'help', 'percent=', 'zipfile=', 'outdir=']
-
-    unzipper = unzip()
-
-    try:
-        opts, args = getopt.getopt(sys.argv[1:], shortargs, longargs)
-    except getopt.GetoptError:
-        usage()
-        sys.exit(2)
-
-    zipsource = ""
-    zipdest = ""
-
-    for o, a in opts:
-        if o in ("-v", "--verbose"):
-            unzipper.verbose = True
-        if o in ("-p", "--percent"):
-            if not unzipper.verbose == True:
-                unzipper.percent = int(a)
-        if o in ("-z", "--zipfile"):
-            zipsource = a
-        if o in ("-o", "--outdir"):
-            zipdest = a
-        if o in ("-h", "--help"):
-            usage()
-            sys.exit()
-
-    if zipsource == "" or zipdest == "":
-        usage()
-        sys.exit()
-            
-    unzipper.extract(zipsource, zipdest)
-
-if __name__ == '__main__': main()
+# The MIT License
+# Copyright (c) 2003 Doug Tolton
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+#
+
+""" unzip.py
+    Version: 1.1
+
+    Extract a zip file to the directory provided
+    It first creates the directory structure to house the files
+    then it extracts the files to it.
+
+    Sample usage:
+    Windows command line
+    unzip.py -p 10 -z c:\testfile.zip -o c:\testoutput
+    
+    Linux command line
+    unzip.py -p 10 -z /tmp/testfile.zip -o /tmp/testoutput
+
+    Python class:
+    import unzip
+    un = unzip.unzip()
+    un.extract(r'c:\testfile.zip', r'c:\testoutput') # Windows
+    un.extract(r'/tmp/testfile.zip', '/tmp/testoutput') # Linux
+    
+    By Doug Tolton
+    
+    Taken from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/252508
+    
+    Updated by Daniel Jacobs to be OS-neutral and more stable.
+"""
+
+import sys
+import zipfile
+import os
+import os.path
+import getopt
+import errno
+
+class unzip:
+    def __init__(self, verbose = False, percent = 10):
+        self.verbose = verbose
+        self.percent = percent
+        
+    def extract(self, file, dir):
+        """ Extract all the files in the zip file, "file" to the directory "dir" with full path names."""
+        if not dir.endswith(':') and not os.path.exists(dir):
+            self._makedir(dir)
+
+        zf = zipfile.ZipFile(file)
+
+        # create directory structure to house files
+        self._createstructure(file, dir)
+
+        num_files = len(zf.namelist())
+        percent = self.percent
+        divisions = 100 / percent
+        perc = int(num_files / divisions)
+
+        # extract files to directory structure
+        for i, name in enumerate(zf.namelist()):
+
+            if self.verbose == True:
+                print "Extracting %s" % name
+            elif perc > 0 and (i % perc) == 0 and i > 0:
+                complete = int (i / perc) * percent
+                print "%s%% complete" % complete
+
+            if not name.endswith('/'):
+                # Normalise the path so that it is correct for the current OS
+                localdirname = os.path.normpath(os.path.join(dir, os.path.dirname(name)))
+                
+                # Ensure that the directory hierarchy that contains the files exists so that 
+                # writing to the file is valid. Note: some zip tools omit directory information 
+                # and this will cause problems when trying to write file to non-existent directories.
+                self._makedir(localdirname)
+                    
+                # Write the file
+                outfile = open(os.path.join(localdirname, os.path.basename(name)), 'wb')
+                outfile.write(zf.read(name))
+                outfile.flush()
+                outfile.close()
+        
+        zf.close()
+
+
+    def _createstructure(self, file, dir):
+        self._makedirs(self._listdirs(file), dir)
+
+
+    def _makedirs(self, directories, basedir):
+        """ Create any directories that don't currently exist """
+        for dir in directories:
+            curdir = os.path.join(basedir, dir)
+            # Normalise path for current OS.
+            curdir = os.path.normpath(curdir)
+            self._makedir(curdir) 
+            
+    
+    def _makedir(self, directory):
+        """ Create a directory "safely", catching the "file exists" exception if the 
+        directory has been created by another process. Creates all parent directories
+        recursively as requied. """
+        if not os.path.exists(directory):
+            # In multi-threaded uses, it is possible that this directory 
+            # has been made in the meantime. Catch this exception.
+            try:
+                os.makedirs(directory)
+            except OSError, aOSError:
+                # If the OSError is that the file exists then we are OK - this
+                # might occur in a multi-threaded or multi-process environment;
+                # otherwise re-raise the exception since it's something else bad.
+                if aOSError.errno != errno.EEXIST:
+                    raise aOSError
+
+    def _listdirs(self, file):
+        """ Grabs all the directories in the zip structure
+        This is necessary to create the structure before trying
+        to extract the file to it. """
+        zf = zipfile.ZipFile(file)
+
+        dirs = []
+
+        for name in zf.namelist():
+            if name.endswith('/'):
+                if self.verbose == True:
+                    print "Directory \"" + name + "\" will be made."
+                dirs.append(name)
+        
+        zf.close()
+        return dirs
+
+def usage():
+    print """usage: unzip.py -z <zipfile> -o <targetdir>
+    <zipfile> is the source zipfile to extract
+    <targetdir> is the target destination
+
+    -z zipfile to extract
+    -o target location
+    -p sets the percentage notification
+    -v sets the extraction to verbose (overrides -p)
+
+    long options also work:
+    --verbose
+    --percent=10
+    --zipfile=<zipfile>
+    --outdir=<targetdir>"""
+    
+
+def main():
+    shortargs = 'vhp:z:o:'
+    longargs = ['verbose', 'help', 'percent=', 'zipfile=', 'outdir=']
+
+    unzipper = unzip()
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], shortargs, longargs)
+    except getopt.GetoptError:
+        usage()
+        sys.exit(2)
+
+    zipsource = ""
+    zipdest = ""
+
+    for o, a in opts:
+        if o in ("-v", "--verbose"):
+            unzipper.verbose = True
+        if o in ("-p", "--percent"):
+            if not unzipper.verbose == True:
+                unzipper.percent = int(a)
+        if o in ("-z", "--zipfile"):
+            zipsource = a
+        if o in ("-o", "--outdir"):
+            zipdest = a
+        if o in ("-h", "--help"):
+            usage()
+            sys.exit()
+
+    if zipsource == "" or zipdest == "":
+        usage()
+        sys.exit()
+            
+    unzipper.extract(zipsource, zipdest)
+
+if __name__ == '__main__': main()
--- a/sbsv2/raptor/util/make.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/make.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,43 +1,43 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-RAPTOR_MAKE_VER:=3.81
-
-MAKE_SOURCEDIR:=$(OUTPUTPATH)/make-$(RAPTOR_MAKE_VER)
-MAKE_TAR:=$(SBS_HOME)/util/ext/make-$(RAPTOR_MAKE_VER).tar.bz2
-
-
-define b_make
-
-.PHONY:: make
-
-all:: make
-
-make: $(INSTALLROOT)/bin/make
-	
-$(INSTALLROOT)/bin/make: $(MAKE_TAR) 
-	rm -rf $(MAKE_SOURCEDIR) && \
-	cd $(OUTPUTPATH) && \
-	tar -xjf $(MAKE_TAR) && \
-	(  \
-	cd $(MAKE_SOURCEDIR) && \
-	CFLAGS="-O2 $(GCCTUNE)" ./configure --prefix=$(INSTALLROOT) --disable-job-server && \
-	$(MAKE) -j8 && $(MAKE) install \
-	)
-endef
-
-$(eval $(b_make))
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+RAPTOR_MAKE_VER:=3.81
+
+MAKE_SOURCEDIR:=$(OUTPUTPATH)/make-$(RAPTOR_MAKE_VER)
+MAKE_TAR:=$(SBS_HOME)/util/ext/make-$(RAPTOR_MAKE_VER).tar.bz2
+
+
+define b_make
+
+.PHONY:: make
+
+all:: make
+
+make: $(INSTALLROOT)/bin/make
+	
+$(INSTALLROOT)/bin/make: $(MAKE_TAR) 
+	rm -rf $(MAKE_SOURCEDIR) && \
+	cd $(OUTPUTPATH) && \
+	tar -xjf $(MAKE_TAR) && \
+	(  \
+	cd $(MAKE_SOURCEDIR) && \
+	CFLAGS="-O2 $(GCCTUNE)" ./configure --prefix=$(INSTALLROOT) --disable-job-server && \
+	$(MAKE) -j8 && $(MAKE) install \
+	)
+endef
+
+$(eval $(b_make))
--- a/sbsv2/raptor/util/pvm.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/pvm.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,44 +1,44 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-RAPTOR_PVM_VER:=3.4.5
-
-PVM_TAR:=$(SBS_HOME)/util/ext/pvm$(RAPTOR_PVM_VER).tgz
-PVM_SOURCEDIR:=$(INSTALLROOT)/pvm3
-
-define b_pvm
-.PHONY:: pvm
-
-all:: pvm
-
-pvm: $(INSTALLROOT)/pvm3/console/LINUX/pvm
-	
-$(INSTALLROOT)/pvm3/console/LINUX/pvm: $(PVM_TAR) 
-	rm -rf $(PVM_SOURCEDIR) && \
-	cd $(INSTALLROOT) && \
-	tar -xzf $(PVM_TAR) && \
-	(  \
-	cd $(PVM_SOURCEDIR) && \
-	PVM_ROOT=$(PVM_SOURCEDIR) && \
-	PVM_ARCH=LINUX && \
-	PVM_RSH=/usr/bin/ssh && \
-	export PVM_ROOT PVM_RSH PVM_ARCH && \
-	$(MAKE) && $(MAKE) install \
-	)
-endef
-
-$(eval $(b_pvm))
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+RAPTOR_PVM_VER:=3.4.5
+
+PVM_TAR:=$(SBS_HOME)/util/ext/pvm$(RAPTOR_PVM_VER).tgz
+PVM_SOURCEDIR:=$(INSTALLROOT)/pvm3
+
+define b_pvm
+.PHONY:: pvm
+
+all:: pvm
+
+pvm: $(INSTALLROOT)/pvm3/console/LINUX/pvm
+	
+$(INSTALLROOT)/pvm3/console/LINUX/pvm: $(PVM_TAR) 
+	rm -rf $(PVM_SOURCEDIR) && \
+	cd $(INSTALLROOT) && \
+	tar -xzf $(PVM_TAR) && \
+	(  \
+	cd $(PVM_SOURCEDIR) && \
+	PVM_ROOT=$(PVM_SOURCEDIR) && \
+	PVM_ARCH=LINUX && \
+	PVM_RSH=/usr/bin/ssh && \
+	export PVM_ROOT PVM_RSH PVM_ARCH && \
+	$(MAKE) && $(MAKE) install \
+	)
+endef
+
+$(eval $(b_pvm))
--- a/sbsv2/raptor/util/pvmgmake.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/pvmgmake.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,46 +1,46 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-RAPTOR_PVMGMAKE_VER:=0.9.4-rpt
-
-PVMGMAKE_SOURCEDIR:=$(OUTPUTPATH)/pvmgmake-$(RAPTOR_PVMGMAKE_VER)
-PVMGMAKE_TAR:=$(SBS_HOME)/util/ext/pvmgmake-$(RAPTOR_PVMGMAKE_VER).tgz
-
-
-define b_pvmgmake
-.PHONY:: pvmgmake
-
-all:: pvmgmake
-
-pvmgmake: $(INSTALLROOT)/bin/pvmgmake pvm
-	
-$(INSTALLROOT)/bin/pvmgmake: $(PVMGMAKE_TAR) 
-	rm -rf $(PVMGMAKE_SOURCEDIR) && \
-	cd $(OUTPUTPATH) && \
-	tar -xzf $(PVMGMAKE_TAR) && \
-	(  \
-	cd $(PVMGMAKE_SOURCEDIR) && \
-	PVM_ROOT=$(INSTALLROOT)/pvm3 && \
-	PVM_ARCH=LINUX && \
-	PVM_RSH=/usr/bin/ssh && \
-	export PVM_ROOT PVM_RSH PVM_ARCH && \
-	./configure --program-prefix=pvmg --prefix=$(INSTALLROOT) --libexecdir=$$$$PVM_ROOT/bin/LINUX --with-pvm --disable-job-server --enable-case-insensitive-file-system && \
-	$(MAKE) -j8 && $(MAKE) install \
-	)
-endef
-
-$(eval $(b_pvmgmake))
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+RAPTOR_PVMGMAKE_VER:=0.9.4-rpt
+
+PVMGMAKE_SOURCEDIR:=$(OUTPUTPATH)/pvmgmake-$(RAPTOR_PVMGMAKE_VER)
+PVMGMAKE_TAR:=$(SBS_HOME)/util/ext/pvmgmake-$(RAPTOR_PVMGMAKE_VER).tgz
+
+
+define b_pvmgmake
+.PHONY:: pvmgmake
+
+all:: pvmgmake
+
+pvmgmake: $(INSTALLROOT)/bin/pvmgmake pvm
+	
+$(INSTALLROOT)/bin/pvmgmake: $(PVMGMAKE_TAR) 
+	rm -rf $(PVMGMAKE_SOURCEDIR) && \
+	cd $(OUTPUTPATH) && \
+	tar -xzf $(PVMGMAKE_TAR) && \
+	(  \
+	cd $(PVMGMAKE_SOURCEDIR) && \
+	PVM_ROOT=$(INSTALLROOT)/pvm3 && \
+	PVM_ARCH=LINUX && \
+	PVM_RSH=/usr/bin/ssh && \
+	export PVM_ROOT PVM_RSH PVM_ARCH && \
+	./configure --program-prefix=pvmg --prefix=$(INSTALLROOT) --libexecdir=$$$$PVM_ROOT/bin/LINUX --with-pvm --disable-job-server --enable-case-insensitive-file-system && \
+	$(MAKE) -j8 && $(MAKE) install \
+	)
+endef
+
+$(eval $(b_pvmgmake))
--- a/sbsv2/raptor/util/python.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/python.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,45 +1,45 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-# Build Python for Raptor
-
-RAPTOR_PYTHON_VER:=2.6.2
-
-PYTHON_SOURCEDIR:=$(OUTPUTPATH)/Python-$(RAPTOR_PYTHON_VER)
-PYTHON_TAR:=$(SBS_HOME)/util/ext/Python-$(RAPTOR_PYTHON_VER).tgz
-PYINSTALLROOT:=$(INSTALLROOT)/python$(subst .,,$(RAPTOR_PYTHON_VER))
-
-define b_python
-.PHONY:: python
-
-all:: python
-
-python: $(PYINSTALLROOT)/bin/python
-	
-$(PYINSTALLROOT)/bin/python: $(PYTHON_TAR) 
-	rm -rf $(PYTHON_SOURCEDIR) && \
-	cd $(OUTPUTPATH) && \
-	tar -xzf $(PYTHON_TAR) && \
-	(  \
-	cd $(PYTHON_SOURCEDIR) && \
-	CFLAGS="-O3 $(GCCTUNE) -s" ./configure --prefix=$(PYINSTALLROOT) --enable-shared --with-threads && \
-	$(MAKE) -j8 && $(MAKE) install \
-	)
-endef
-
-$(eval $(b_python))
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+# Build Python for Raptor
+
+RAPTOR_PYTHON_VER:=2.6.2
+
+PYTHON_SOURCEDIR:=$(OUTPUTPATH)/Python-$(RAPTOR_PYTHON_VER)
+PYTHON_TAR:=$(SBS_HOME)/util/ext/Python-$(RAPTOR_PYTHON_VER).tgz
+PYINSTALLROOT:=$(INSTALLROOT)/python$(subst .,,$(RAPTOR_PYTHON_VER))
+
+define b_python
+.PHONY:: python
+
+all:: python
+
+python: $(PYINSTALLROOT)/bin/python
+	
+$(PYINSTALLROOT)/bin/python: $(PYTHON_TAR) 
+	rm -rf $(PYTHON_SOURCEDIR) && \
+	cd $(OUTPUTPATH) && \
+	tar -xzf $(PYTHON_TAR) && \
+	(  \
+	cd $(PYTHON_SOURCEDIR) && \
+	CFLAGS="-O3 $(GCCTUNE) -s" ./configure --prefix=$(PYINSTALLROOT) --enable-shared --with-threads && \
+	$(MAKE) -j8 && $(MAKE) install \
+	)
+endef
+
+$(eval $(b_python))
+
--- a/sbsv2/raptor/util/ransleep/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/ransleep/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,29 +1,29 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Utility makefile 
-#
-#
-
-TARGET:=ransleep
-SOURCES:=$(SBS_HOME:\=/)/util/ransleep/ransleep.c
-
-ifeq ($(filter win,$(HOSTPLATFORM)),win)
-CFLAGS:=-DWIN32
-LDFLAGS:=
-else
-CFLAGS:=
-LDFLAGS:=-lpthread
-endif
-
-$(eval $(cprogram))
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Utility makefile 
+#
+#
+
+TARGET:=ransleep
+SOURCES:=$(SBS_HOME:\=/)/util/ransleep/ransleep.c
+
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
+CFLAGS:=-DWIN32
+LDFLAGS:=
+else
+CFLAGS:=
+LDFLAGS:=-lpthread
+endif
+
+$(eval $(cprogram))
--- a/sbsv2/raptor/util/ransleep/ransleep.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/ransleep/ransleep.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,82 +1,82 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-/* 
-   ransleep.c: sleep for some time period specified in milliseconds
-               optionally choose a random time up to the maximum time specified.
-
-   Description: Useful for delays between retries and for perturbing the
-	        start times of tools which might cause resource starvation 
-		if they all execute at exactly the same time.
-*/
-
-#include "../config.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-// OS specific headers
-#ifdef HOST_WIN
-#include <windows.h>
-#else
-#include <sys/types.h>
-#include <sys/select.h>
-#endif
-
-int main(int argc, char *argv[])
-{
-
-	srand(getpid());
-	int millisecs=0;
-
-	if (argc != 2)
-	{
-		fprintf(stderr,"Must supply numeric argument - maximum milliseconds to sleep\n");
-		exit(1);
-	}
-
-	millisecs = atoi(argv[1]);
-
-
-	if (millisecs <= 0 )
-	{
-		fprintf(stderr,"Must supply numeric argument > 0 - maximum milliseconds to sleep\n");
-		exit(1);
-	}
-
-
-	millisecs = rand() % millisecs;
-	fprintf(stderr,"random sleep for %d milliseconds\n", millisecs);
-
-	#ifndef HAS_MILLISECONDSLEEP
-	struct timeval wtime;
-	wtime.tv_sec=millisecs/1000;
-	wtime.tv_usec=(millisecs % 1000) * 1000;
-
-	select(0,NULL,NULL,
-                  NULL, &wtime);
-	#else
-	Sleep(millisecs);
-	#endif
-
-	return 0;
-}
-
-
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/* 
+   ransleep.c: sleep for some time period specified in milliseconds
+               optionally choose a random time up to the maximum time specified.
+
+   Description: Useful for delays between retries and for perturbing the
+	        start times of tools which might cause resource starvation 
+		if they all execute at exactly the same time.
+*/
+
+#include "../config.h"
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+// OS specific headers
+#ifdef HOST_WIN
+#include <windows.h>
+#else
+#include <sys/types.h>
+#include <sys/select.h>
+#endif
+
+int main(int argc, char *argv[])
+{
+
+	srand(getpid());
+	int millisecs=0;
+
+	if (argc != 2)
+	{
+		fprintf(stderr,"Must supply numeric argument - maximum milliseconds to sleep\n");
+		exit(1);
+	}
+
+	millisecs = atoi(argv[1]);
+
+
+	if (millisecs <= 0 )
+	{
+		fprintf(stderr,"Must supply numeric argument > 0 - maximum milliseconds to sleep\n");
+		exit(1);
+	}
+
+
+	millisecs = rand() % millisecs;
+	fprintf(stderr,"random sleep for %d milliseconds\n", millisecs);
+
+	#ifndef HAS_MILLISECONDSLEEP
+	struct timeval wtime;
+	wtime.tv_sec=millisecs/1000;
+	wtime.tv_usec=(millisecs % 1000) * 1000;
+
+	select(0,NULL,NULL,
+                  NULL, &wtime);
+	#else
+	Sleep(millisecs);
+	#endif
+
+	return 0;
+}
+
+
--- a/sbsv2/raptor/util/talon/Makefile	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/Makefile	Mon Nov 16 09:46:46 2009 +0000
@@ -1,61 +1,61 @@
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Utility makefile 
-#
-#
-
-
-SHELL:=bash
-
-include $(SBS_HOME:\=/)/util/gccprogram.mk
-
-ifeq ($(filter win,$(HOSTPLATFORM)),win)
-PROCESS_C:=process_win.c
-CFLAGS:=-DHOST_WIN
-LDFLAGS:=$(subst \,/,$(SBS_HOME:\=/)\win32\mingw\lib\libiberty.a)
-else
-PROCESS_C:=process.c
-CFLAGS:=-g
-linux_PTHREADLIBS:=-lpthread
-LDFLAGS:=$(linux_PTHREADLIBS) -lrt
-endif
-
-
-SOURCEDIR:=$(subst \,/,$(SBS_HOME))/util/talon
-
-
-# remember how to clean up:
-MANIFEST:=$(SOURCEDIR)/manifest
-
-TARGET:=talon
-SOURCES:=$(addprefix $(SOURCEDIR)/,talon.c buffer.c sema.c log.c $(PROCESS_C))
-#$(info $(cprogram))
-$(eval $(cprogram))
-
-TARGET:=talonctl
-SOURCES:=$(addprefix $(SOURCEDIR)/,talonctl.c sema.c log.c)
-$(eval $(cprogram))
-
-TARGET:=testbuffer
-SOURCES:=$(addprefix $(SOURCEDIR)/,testbuffer.c buffer.c log.c)
-$(eval $(cprogram))
-
-TARGET:=testprocess
-SOURCES:=$(addprefix $(SOURCEDIR)/,testprocess.c buffer.c log.c  $(PROCESS_C))
-$(eval $(cprogram))
-
-TARGET:=talonlock
-SOURCES:=$(addprefix $(SOURCEDIR)/,lock.c sema.c log.c)
-$(eval $(cprogram))
-
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Utility makefile 
+#
+#
+
+
+SHELL:=bash
+
+include $(SBS_HOME:\=/)/util/gccprogram.mk
+
+ifeq ($(filter win,$(HOSTPLATFORM)),win)
+PROCESS_C:=process_win.c
+CFLAGS:=-DHOST_WIN
+LDFLAGS:=$(subst \,/,$(SBS_HOME:\=/)\win32\mingw\lib\libiberty.a)
+else
+PROCESS_C:=process.c
+CFLAGS:=-g
+linux_PTHREADLIBS:=-lpthread
+LDFLAGS:=$(linux_PTHREADLIBS) -lrt
+endif
+
+
+SOURCEDIR:=$(subst \,/,$(SBS_HOME))/util/talon
+
+
+# remember how to clean up:
+MANIFEST:=$(SOURCEDIR)/manifest
+
+TARGET:=talon
+SOURCES:=$(addprefix $(SOURCEDIR)/,talon.c buffer.c sema.c log.c $(PROCESS_C))
+#$(info $(cprogram))
+$(eval $(cprogram))
+
+TARGET:=talonctl
+SOURCES:=$(addprefix $(SOURCEDIR)/,talonctl.c sema.c log.c)
+$(eval $(cprogram))
+
+TARGET:=testbuffer
+SOURCES:=$(addprefix $(SOURCEDIR)/,testbuffer.c buffer.c log.c)
+$(eval $(cprogram))
+
+TARGET:=testprocess
+SOURCES:=$(addprefix $(SOURCEDIR)/,testprocess.c buffer.c log.c  $(PROCESS_C))
+$(eval $(cprogram))
+
+TARGET:=talonlock
+SOURCES:=$(addprefix $(SOURCEDIR)/,lock.c sema.c log.c)
+$(eval $(cprogram))
+
--- a/sbsv2/raptor/util/talon/buffer.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/buffer.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,205 +1,205 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-* Expanding text buffer
-*
-*/
-
-
-
-
-#include <malloc.h>
-#include "buffer.h"
-#include <string.h>
-
-/* efficient allocation unit: */
-#define ALLOCSIZE 4096
-#define INITIALBLOCKCOUNT 128
-
-byteblock *buffer_newblock(buffer *b, unsigned int size)
-{
-	byteblock *bb;
-	if (!b)
-		return NULL;
-	
-	b->lastblock++;
-	
-	if (b->lastblock == b->maxblocks)
-	{
-		byteblock **nbb = (byteblock **)realloc(b->blocks, sizeof(byteblock *) * (b->maxblocks + INITIALBLOCKCOUNT));
-		if (!nbb)
-			return NULL;
-
-		b->blocks = nbb;
-		b->maxblocks += INITIALBLOCKCOUNT;
-	}
-
-	bb = malloc(sizeof(byteblock) + size-1);
-
-	if (!bb)
-	{
-		
-		return NULL;
-	}
-	
-	b->blocks[b->lastblock] = bb;
-
-	bb->fill = 0;
-	bb->size = size;
-
-	return bb;
-}
-
-buffer *buffer_new(void)
-{
-	buffer *b = malloc(sizeof(buffer));
-
-	if (b)
-	{
-		b->lastblock = -1; /* no blocks as yet */
-		b->maxblocks = INITIALBLOCKCOUNT;
-		b->blocks = (byteblock **)malloc(sizeof(byteblock *) * b->maxblocks);
-		if (!b->blocks)
-		{
-			free(b);
-			return NULL;
-		}
-
-		buffer_newblock(b, ALLOCSIZE);
-	}
-	
-	return b;
-}
-
-
-char *buffer_append(buffer *b, char *bytes, unsigned int size)
-{
-	if (!b || !bytes) 
-		return NULL;
-
-	char *space = buffer_makespace(b, size);
-	if (!space)
-		return NULL;
-	memcpy(space, bytes, size);
-	buffer_usespace(b, size);
-
-	return space;
-}
-
-char *buffer_prepend(buffer *b, char *bytes, unsigned int size)
-{
-	byteblock *bb;
-
-	if (!b || !bytes) 
-		return NULL;
-	
-    	bb = buffer_newblock(b, size);
-	/* cheat by moving the new block from the end to the start. */
-
-	bb = b->blocks[b->lastblock];
-	if (b->lastblock != 0)
-	{
-		memmove(b->blocks+1, b->blocks, sizeof(byteblock *) * b->lastblock );
-		b->blocks[0] = bb;
-	}
-
-	memcpy(&(b->blocks[0]->byte0), bytes, size);
-
-	b->blocks[0]->fill = size;
-
-	return &(b->blocks[0]->byte0);
-}
-
-/* Allocate memory at the end of the buffer (if there isn't
- * enough already) so that the user can append at least that 
- * many bytes without overrunning the buffer.  This is useful
- * where one may not know in advance how many bytes are to be
- * added (e.g. reading from a socket) but one does know the 
- * upper limit.
- */
-char *buffer_makespace(buffer *b, unsigned int size)
-{
-	byteblock *bb;
-	byteblock *last;
-	if (!b)
-		return NULL;
-
-	last = b->blocks[b->lastblock];
-
-	if (last->size - last->fill > size)
-		return (&last->byte0 + last->fill);
-
-	if (size > ALLOCSIZE)
-	{
-       		bb = buffer_newblock(b, size);
-	} else {
-       		bb = buffer_newblock(b, ALLOCSIZE);
-	}
-	
-	if (!bb) 
-		return NULL;
-
-	return &bb->byte0;
-}
-
-void buffer_usespace(buffer *b, unsigned int nbytes)
-{
-	byteblock *last;
-      
-       	if (!b)
-		return;	
-
-	last = b->blocks[b->lastblock];
-
-	if (last->fill + nbytes < last->size)
-		last->fill += nbytes;
-	else
-		last->fill = last->size; /* really an error - no exceptions though. */
-}
-
-byteblock *buffer_getbytes(buffer *b, int *iterator)
-{
-	if (!b)
-		return NULL;
-
-	if (*iterator > b->lastblock)
-		return NULL;
-
-	return b->blocks[(*iterator)++];
-}
-
-void buffer_free(buffer **b)
-{
-	int i;
-	buffer *bf;
-
-	if (!b || !*b)
-		return;
-
-	bf=*b;
-
-	if (bf->blocks)
-	{
-		for (i=0; i <= bf->lastblock; i++)
-		{
-			if (bf->blocks[i])
-				free(bf->blocks[i]);
-		}
-		free(bf->blocks);
-	}
-	free(bf);
-
-	*b = NULL;
-}
-
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Expanding text buffer
+*
+*/
+
+
+
+
+#include <malloc.h>
+#include "buffer.h"
+#include <string.h>
+
+/* efficient allocation unit: */
+#define ALLOCSIZE 4096
+#define INITIALBLOCKCOUNT 128
+
+byteblock *buffer_newblock(buffer *b, unsigned int size)
+{
+	byteblock *bb;
+	if (!b)
+		return NULL;
+	
+	b->lastblock++;
+	
+	if (b->lastblock == b->maxblocks)
+	{
+		byteblock **nbb = (byteblock **)realloc(b->blocks, sizeof(byteblock *) * (b->maxblocks + INITIALBLOCKCOUNT));
+		if (!nbb)
+			return NULL;
+
+		b->blocks = nbb;
+		b->maxblocks += INITIALBLOCKCOUNT;
+	}
+
+	bb = malloc(sizeof(byteblock) + size-1);
+
+	if (!bb)
+	{
+		
+		return NULL;
+	}
+	
+	b->blocks[b->lastblock] = bb;
+
+	bb->fill = 0;
+	bb->size = size;
+
+	return bb;
+}
+
+buffer *buffer_new(void)
+{
+	buffer *b = malloc(sizeof(buffer));
+
+	if (b)
+	{
+		b->lastblock = -1; /* no blocks as yet */
+		b->maxblocks = INITIALBLOCKCOUNT;
+		b->blocks = (byteblock **)malloc(sizeof(byteblock *) * b->maxblocks);
+		if (!b->blocks)
+		{
+			free(b);
+			return NULL;
+		}
+
+		buffer_newblock(b, ALLOCSIZE);
+	}
+	
+	return b;
+}
+
+
+char *buffer_append(buffer *b, char *bytes, unsigned int size)
+{
+	if (!b || !bytes) 
+		return NULL;
+
+	char *space = buffer_makespace(b, size);
+	if (!space)
+		return NULL;
+	memcpy(space, bytes, size);
+	buffer_usespace(b, size);
+
+	return space;
+}
+
+char *buffer_prepend(buffer *b, char *bytes, unsigned int size)
+{
+	byteblock *bb;
+
+	if (!b || !bytes) 
+		return NULL;
+	
+    	bb = buffer_newblock(b, size);
+	/* cheat by moving the new block from the end to the start. */
+
+	bb = b->blocks[b->lastblock];
+	if (b->lastblock != 0)
+	{
+		memmove(b->blocks+1, b->blocks, sizeof(byteblock *) * b->lastblock );
+		b->blocks[0] = bb;
+	}
+
+	memcpy(&(b->blocks[0]->byte0), bytes, size);
+
+	b->blocks[0]->fill = size;
+
+	return &(b->blocks[0]->byte0);
+}
+
+/* Allocate memory at the end of the buffer (if there isn't
+ * enough already) so that the user can append at least that 
+ * many bytes without overrunning the buffer.  This is useful
+ * where one may not know in advance how many bytes are to be
+ * added (e.g. reading from a socket) but one does know the 
+ * upper limit.
+ */
+char *buffer_makespace(buffer *b, unsigned int size)
+{
+	byteblock *bb;
+	byteblock *last;
+	if (!b)
+		return NULL;
+
+	last = b->blocks[b->lastblock];
+
+	if (last->size - last->fill > size)
+		return (&last->byte0 + last->fill);
+
+	if (size > ALLOCSIZE)
+	{
+       		bb = buffer_newblock(b, size);
+	} else {
+       		bb = buffer_newblock(b, ALLOCSIZE);
+	}
+	
+	if (!bb) 
+		return NULL;
+
+	return &bb->byte0;
+}
+
+void buffer_usespace(buffer *b, unsigned int nbytes)
+{
+	byteblock *last;
+      
+       	if (!b)
+		return;	
+
+	last = b->blocks[b->lastblock];
+
+	if (last->fill + nbytes < last->size)
+		last->fill += nbytes;
+	else
+		last->fill = last->size; /* really an error - no exceptions though. */
+}
+
+byteblock *buffer_getbytes(buffer *b, int *iterator)
+{
+	if (!b)
+		return NULL;
+
+	if (*iterator > b->lastblock)
+		return NULL;
+
+	return b->blocks[(*iterator)++];
+}
+
+void buffer_free(buffer **b)
+{
+	int i;
+	buffer *bf;
+
+	if (!b || !*b)
+		return;
+
+	bf=*b;
+
+	if (bf->blocks)
+	{
+		for (i=0; i <= bf->lastblock; i++)
+		{
+			if (bf->blocks[i])
+				free(bf->blocks[i]);
+		}
+		free(bf->blocks);
+	}
+	free(bf);
+
+	*b = NULL;
+}
+
--- a/sbsv2/raptor/util/talon/buffer.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/buffer.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,48 +1,48 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-* buffer.c
-* Resizable buffer for output from subprocesses.
-*
-*/
-
-
-
-
-#ifndef _TALON_BUFFER_H_
-#define _TALON_BUFFER_H_
-
-
-typedef struct {
-	unsigned int size, fill;
-	/* This struct will be followed by the number of bytes in "size" */
-	char byte0;
-} byteblock;
-
-typedef struct {
-	byteblock **blocks;
-	int maxblocks;
-	int lastblock;
-	unsigned int size;
-} buffer;
-
-buffer *buffer_new(void);
-char *buffer_append(buffer *b, char *bytes, unsigned int size);
-char *buffer_prepend(buffer *b, char *bytes, unsigned int size);
-char *buffer_makespace(buffer *b, unsigned int size);
-void buffer_usespace(buffer *b, unsigned int nbytes);
-byteblock *buffer_getbytes(buffer *b, int *iterator);
-void buffer_free(buffer **b);
-
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* buffer.c
+* Resizable buffer for output from subprocesses.
+*
+*/
+
+
+
+
+#ifndef _TALON_BUFFER_H_
+#define _TALON_BUFFER_H_
+
+
+typedef struct {
+	unsigned int size, fill;
+	/* This struct will be followed by the number of bytes in "size" */
+	char byte0;
+} byteblock;
+
+typedef struct {
+	byteblock **blocks;
+	int maxblocks;
+	int lastblock;
+	unsigned int size;
+} buffer;
+
+buffer *buffer_new(void);
+char *buffer_append(buffer *b, char *bytes, unsigned int size);
+char *buffer_prepend(buffer *b, char *bytes, unsigned int size);
+char *buffer_makespace(buffer *b, unsigned int size);
+void buffer_usespace(buffer *b, unsigned int nbytes);
+byteblock *buffer_getbytes(buffer *b, int *iterator);
+void buffer_free(buffer **b);
+
+#endif
--- a/sbsv2/raptor/util/talon/lock.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/lock.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,140 +1,140 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdarg.h>
-
-#include "sema.h"
-#include "buffer.h"
-#include "../config.h"
-
-/* The output semaphore. */
-sbs_semaphore talon_sem;
-
-#define TALON_ATTEMPT_STRMAX 32
-#define RECIPETAG_STRMAX 2048
-#define STATUS_STRMAX 100
-
-#define TALONDELIMITER '|'
-#define VARNAMEMAX 100
-#define VARVALMAX 1024
-
-
-#include "log.h"
-
-#ifdef HAS_MSVCRT
-/* Make all output handling binary */
-unsigned int _CRT_fmode = _O_BINARY;
-#endif
-
-double getseconds(void)
-{
-	struct timeval tp;
-	gettimeofday(&tp, NULL);
-
-	return (double)tp.tv_sec + ((double)tp.tv_usec)/1000000.0L;
-}
-
-void talon_setenv(char name[], char val[])
-{
-#if defined(HAS_GETENVIRONMENTVARIABLE)
-	SetEnvironmentVariableA(name,val); 
-#elif defined(HAS_GETENV)
-	setenv(name,val, 1);
-#else
-#	error "Need a function for setting environment variables"
-#endif
-}
-
-
-#define TALON_MAXENV 4096
-char * talon_getenv(char name[])
-{
-#if defined(HAS_SETENV)
-	char *val = getenv(name);
-	char *dest = NULL;
-	
-	if (val)
-	{
-		dest = malloc(strlen(val) + 1);
-		if (dest)
-		{
-			strcpy(dest,val);
-		}
-	}
-	return dest;
-#elif defined(HAS_SETENVIRONMENTVARIABLE)
-	char *val = malloc(TALON_MAXENV);
-	if (0 != GetEnvironmentVariableA(name,val,TALON_MAXENV-1))
-		return val;
-	else
-		return NULL;
-#else
-#	error "Need a function for setting environment variables"
-#endif
-}
-
-
-
-int main(int argc, char *argv[])
-{
-	/* find the argument to -c then strip the talon related front section */
-
-	char *recipe = NULL;
-	int talon_returncode = 0;
-
-	/* Now take settings from the environment (having potentially modified it) */	
-	if (talon_getenv("TALON_DEBUG"))
-		loglevel=LOGDEBUG;
-	
-
-	int enverrors = 0;
-
-	char *buildid = talon_getenv("TALON_BUILDID");
-	if (!buildid)
-	{
-		error("error: %s", "TALON_BUILDID not set in environment\n");
-		enverrors++;	
-	}
-
-        talon_sem.name = buildid;
-        talon_sem.timeout = 999999990;
-
-
-	
-
-	int x;
-	debug("debug: %s", "WAITING ON SEMAPHORE\n");
-	x = sema_wait(&talon_sem);
-	if (x == 0)
-	{
-		debug("debug: %s", "SEMAPHORE OBTAINED\n");
-		getchar();
-		sema_release(&talon_sem);
-		debug("debug: %s", "SEMAPHORE RELEASED\n");
-	}
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdarg.h>
+
+#include "sema.h"
+#include "buffer.h"
+#include "../config.h"
+
+/* The output semaphore. */
+sbs_semaphore talon_sem;
+
+#define TALON_ATTEMPT_STRMAX 32
+#define RECIPETAG_STRMAX 2048
+#define STATUS_STRMAX 100
+
+#define TALONDELIMITER '|'
+#define VARNAMEMAX 100
+#define VARVALMAX 1024
+
+
+#include "log.h"
+
+#ifdef HAS_MSVCRT
+/* Make all output handling binary */
+unsigned int _CRT_fmode = _O_BINARY;
+#endif
+
+double getseconds(void)
+{
+	struct timeval tp;
+	gettimeofday(&tp, NULL);
+
+	return (double)tp.tv_sec + ((double)tp.tv_usec)/1000000.0L;
+}
+
+void talon_setenv(char name[], char val[])
+{
+#if defined(HAS_GETENVIRONMENTVARIABLE)
+	SetEnvironmentVariableA(name,val); 
+#elif defined(HAS_GETENV)
+	setenv(name,val, 1);
+#else
+#	error "Need a function for setting environment variables"
+#endif
+}
+
+
+#define TALON_MAXENV 4096
+char * talon_getenv(char name[])
+{
+#if defined(HAS_SETENV)
+	char *val = getenv(name);
+	char *dest = NULL;
+	
+	if (val)
+	{
+		dest = malloc(strlen(val) + 1);
+		if (dest)
+		{
+			strcpy(dest,val);
+		}
+	}
+	return dest;
+#elif defined(HAS_SETENVIRONMENTVARIABLE)
+	char *val = malloc(TALON_MAXENV);
+	if (0 != GetEnvironmentVariableA(name,val,TALON_MAXENV-1))
+		return val;
+	else
+		return NULL;
+#else
+#	error "Need a function for setting environment variables"
+#endif
+}
+
+
+
+int main(int argc, char *argv[])
+{
+	/* find the argument to -c then strip the talon related front section */
+
+	char *recipe = NULL;
+	int talon_returncode = 0;
+
+	/* Now take settings from the environment (having potentially modified it) */	
+	if (talon_getenv("TALON_DEBUG"))
+		loglevel=LOGDEBUG;
+	
+
+	int enverrors = 0;
+
+	char *buildid = talon_getenv("TALON_BUILDID");
+	if (!buildid)
+	{
+		error("error: %s", "TALON_BUILDID not set in environment\n");
+		enverrors++;	
+	}
+
+        talon_sem.name = buildid;
+        talon_sem.timeout = 999999990;
+
+
+	
+
+	int x;
+	debug("debug: %s", "WAITING ON SEMAPHORE\n");
+	x = sema_wait(&talon_sem);
+	if (x == 0)
+	{
+		debug("debug: %s", "SEMAPHORE OBTAINED\n");
+		getchar();
+		sema_release(&talon_sem);
+		debug("debug: %s", "SEMAPHORE RELEASED\n");
+	}
+}
--- a/sbsv2/raptor/util/talon/log.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/log.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,57 +1,57 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "log.h"
-#include <stdarg.h>
-#include <stdio.h>
-
-int loglevel=LOGNORMAL;
-int debug(const char *format, ...)
-{
-	int rt=0;
-	
-	if (loglevel >= LOGDEBUG)
-	{
-		va_list ap;
-		va_start(ap, format);
-		rt = vfprintf(stderr, format,  ap);
-		va_end(ap);
-
-	}
-
-	return rt;
-}
-
-
-int error(const char *format, ...)
-{
-	int rt=0;
-	
-	if (loglevel >= LOGNORMAL)
-	{
-		va_list ap;
-		va_start(ap, format);
-		rt = vfprintf(stderr, format,  ap);
-		va_end(ap);
-
-	}
-
-	return rt;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include "log.h"
+#include <stdarg.h>
+#include <stdio.h>
+
+int loglevel=LOGNORMAL;
+int debug(const char *format, ...)
+{
+	int rt=0;
+	
+	if (loglevel >= LOGDEBUG)
+	{
+		va_list ap;
+		va_start(ap, format);
+		rt = vfprintf(stderr, format,  ap);
+		va_end(ap);
+
+	}
+
+	return rt;
+}
+
+
+int error(const char *format, ...)
+{
+	int rt=0;
+	
+	if (loglevel >= LOGNORMAL)
+	{
+		va_list ap;
+		va_start(ap, format);
+		rt = vfprintf(stderr, format,  ap);
+		va_end(ap);
+
+	}
+
+	return rt;
+}
--- a/sbsv2/raptor/util/talon/log.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/log.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,34 +1,34 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef _TALONLOG_H_
-#define _TALONLOG_H_
-
-#define LOGNONE 0
-#define LOGNORMAL 0
-#define LOGDEBUG 1
-#define DEBUG(xxx) debug xxx
-
-extern int loglevel;
-
-int debug(const char *format, ...);
-int error(const char *format, ...);
-
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#ifndef _TALONLOG_H_
+#define _TALONLOG_H_
+
+#define LOGNONE 0
+#define LOGNORMAL 0
+#define LOGDEBUG 1
+#define DEBUG(xxx) debug xxx
+
+extern int loglevel;
+
+int debug(const char *format, ...);
+int error(const char *format, ...);
+
+#endif
--- a/sbsv2/raptor/util/talon/process.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/process.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,203 +1,203 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <unistd.h>
-
-#include "process.h"
-#include "buffer.h"
-#include <stdlib.h>
-#include <string.h>
-#include <poll.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/wait.h>
-
-#include "log.h"
-
-
-proc *process_new(void)
-{
-	proc *p = malloc(sizeof(proc));
-	p->output = buffer_new();
-	if (!p->output)
-	{
-		free(p);
-		return  NULL;
-	}
-	p->starttime = 0;
-	p->endtime = 0;
-	p->returncode = 1;
-	p->pid = 0;
-	p->causeofdeath = PROC_NORMALDEATH;
-
-	return p;
-}
-
-void childsig(int sig)
-{
-	//wait(&stat_loc);
-	DEBUG(("SIGCHLD\n"));
-}
-
-struct sigaction child_action;
-
-proc *process_run(char executable[], char *args[], int timeout)
-{
-	proc *p = process_new();
-
-	if (p == NULL)
-		return NULL;
-
-	char *text;
-	int status;
-	int stdout_p[2];
-	int stderr_p[2];
-
-	child_action.sa_handler = childsig;
-	sigemptyset (&child_action.sa_mask);
-	child_action.sa_flags = 0;
-	sigaction (SIGCHLD, &child_action, NULL);
-	
-	pipe(stdout_p);
-	pipe(stderr_p);
-
-	pid_t child = fork();
-	if (child == 0)
-	{
-		close(stdout_p[0]);
-		dup2(stdout_p[1], 1);
-		close(stdout_p[1]);
-		
-		close(stderr_p[0]);
-		dup2(stderr_p[1], 2);
-		close(stderr_p[1]);
-
-		execvp(executable, args);
-		exit(1);
-	} else if (child == -1) {
-		p->causeofdeath = PROC_SOMEODDDEATH;
-		return p;
-	}
-	else
-	{
-		close(stdout_p[1]);
-		close(stderr_p[1]);
-		p->pid = child;
-		DEBUG(("child running\n"));
-	}
-
-	struct pollfd pf[2];
-
-	int pv;
-	int have_status = 0;
-	do
-	{
-		pf[0].fd = stdout_p[0];
-		pf[1].fd = stderr_p[0];
-		pf[0].events = POLLIN;
-		pf[0].revents = 0;
-		pf[1].events = POLLIN;
-		pf[1].revents = 0;
-		DEBUG(("polling\n"));
-	       	pv = poll(pf, 2, timeout);
-		DEBUG(("polled %d\n", pv));
-		if (pv == -1)
-		{
-		       	if (errno == EAGAIN)
-			{
-				errno = 0;
-				DEBUG(("errno: \n"));
-				continue;
-			} else {
-				/* EINVAL - can't poll */
-				process_free(&p);
-				return NULL;
-			}
-		} else if (pv == 0 ) {
-			/* timeout */
-			DEBUG(("timeout: \n"));
-			kill(p->pid, SIGTERM);
-			p->causeofdeath = PROC_TIMEOUTDEATH;
-			break;
-		}
-		
-		if (pf[0].revents & POLLIN )
-		{
-			char *space = buffer_makespace(p->output, 1024);
-			int nbytes = read(pf[0].fd, space, 1024);
-			if (nbytes < 0)
-				break;
-			buffer_usespace(p->output, nbytes);
-		}
-		if (pf[1].revents & POLLIN )
-		{
-			char *space = buffer_makespace(p->output, 1024);
-			int nbytes = read(pf[1].fd, space, 1024);
-			if (nbytes < 0)
-				break;
-			buffer_usespace(p->output, nbytes);
-		}
-		if  (pf[0].revents & (POLLERR | POLLHUP | POLLNVAL))
-		{
-			DEBUG(("stdout: pollerr %d\n", pf[0].revents));
-			break;
-		}
-		
-		if (  pf[1].revents & (POLLERR | POLLHUP | POLLNVAL)) 
-		{
-			DEBUG(("stderr: pollerr %d\n", pf[1].revents));
-			break;
-		}
-		DEBUG(("events: %d %d \n", pf[0].revents, pf[1].revents));
-	}
-	while (1);
-
-	waitpid(p->pid, &status, 0);
-	if (WIFEXITED(status))
-	{
-		p->causeofdeath = PROC_NORMALDEATH;
-		p->returncode = WEXITSTATUS(status);
-		DEBUG(("process exited normally \n"));
-	} else {
-		p->causeofdeath = PROC_SOMEODDDEATH;
-		if (WIFSIGNALED(status))
-			p->returncode = WTERMSIG(status);
-		else
-			p->returncode = 128;
-		DEBUG(("process terminated \n"));
-	}
-	
-	return p;
-}
-
-void process_free(proc **pp)
-{
-	if (!pp)
-		return;
-	if (! *pp)
-		return;
-
-	if ((*pp)->output)
-		buffer_free(&((*pp)->output));
-	
-	free(*pp);
-
-	*pp = NULL;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include <unistd.h>
+
+#include "process.h"
+#include "buffer.h"
+#include <stdlib.h>
+#include <string.h>
+#include <poll.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/wait.h>
+
+#include "log.h"
+
+
+proc *process_new(void)
+{
+	proc *p = malloc(sizeof(proc));
+	p->output = buffer_new();
+	if (!p->output)
+	{
+		free(p);
+		return  NULL;
+	}
+	p->starttime = 0;
+	p->endtime = 0;
+	p->returncode = 1;
+	p->pid = 0;
+	p->causeofdeath = PROC_NORMALDEATH;
+
+	return p;
+}
+
+void childsig(int sig)
+{
+	//wait(&stat_loc);
+	DEBUG(("SIGCHLD\n"));
+}
+
+struct sigaction child_action;
+
+proc *process_run(char executable[], char *args[], int timeout)
+{
+	proc *p = process_new();
+
+	if (p == NULL)
+		return NULL;
+
+	char *text;
+	int status;
+	int stdout_p[2];
+	int stderr_p[2];
+
+	child_action.sa_handler = childsig;
+	sigemptyset (&child_action.sa_mask);
+	child_action.sa_flags = 0;
+	sigaction (SIGCHLD, &child_action, NULL);
+	
+	pipe(stdout_p);
+	pipe(stderr_p);
+
+	pid_t child = fork();
+	if (child == 0)
+	{
+		close(stdout_p[0]);
+		dup2(stdout_p[1], 1);
+		close(stdout_p[1]);
+		
+		close(stderr_p[0]);
+		dup2(stderr_p[1], 2);
+		close(stderr_p[1]);
+
+		execvp(executable, args);
+		exit(1);
+	} else if (child == -1) {
+		p->causeofdeath = PROC_SOMEODDDEATH;
+		return p;
+	}
+	else
+	{
+		close(stdout_p[1]);
+		close(stderr_p[1]);
+		p->pid = child;
+		DEBUG(("child running\n"));
+	}
+
+	struct pollfd pf[2];
+
+	int pv;
+	int have_status = 0;
+	do
+	{
+		pf[0].fd = stdout_p[0];
+		pf[1].fd = stderr_p[0];
+		pf[0].events = POLLIN;
+		pf[0].revents = 0;
+		pf[1].events = POLLIN;
+		pf[1].revents = 0;
+		DEBUG(("polling\n"));
+	       	pv = poll(pf, 2, timeout);
+		DEBUG(("polled %d\n", pv));
+		if (pv == -1)
+		{
+		       	if (errno == EAGAIN)
+			{
+				errno = 0;
+				DEBUG(("errno: \n"));
+				continue;
+			} else {
+				/* EINVAL - can't poll */
+				process_free(&p);
+				return NULL;
+			}
+		} else if (pv == 0 ) {
+			/* timeout */
+			DEBUG(("timeout: \n"));
+			kill(p->pid, SIGTERM);
+			p->causeofdeath = PROC_TIMEOUTDEATH;
+			break;
+		}
+		
+		if (pf[0].revents & POLLIN )
+		{
+			char *space = buffer_makespace(p->output, 1024);
+			int nbytes = read(pf[0].fd, space, 1024);
+			if (nbytes < 0)
+				break;
+			buffer_usespace(p->output, nbytes);
+		}
+		if (pf[1].revents & POLLIN )
+		{
+			char *space = buffer_makespace(p->output, 1024);
+			int nbytes = read(pf[1].fd, space, 1024);
+			if (nbytes < 0)
+				break;
+			buffer_usespace(p->output, nbytes);
+		}
+		if  (pf[0].revents & (POLLERR | POLLHUP | POLLNVAL))
+		{
+			DEBUG(("stdout: pollerr %d\n", pf[0].revents));
+			break;
+		}
+		
+		if (  pf[1].revents & (POLLERR | POLLHUP | POLLNVAL)) 
+		{
+			DEBUG(("stderr: pollerr %d\n", pf[1].revents));
+			break;
+		}
+		DEBUG(("events: %d %d \n", pf[0].revents, pf[1].revents));
+	}
+	while (1);
+
+	waitpid(p->pid, &status, 0);
+	if (WIFEXITED(status))
+	{
+		p->causeofdeath = PROC_NORMALDEATH;
+		p->returncode = WEXITSTATUS(status);
+		DEBUG(("process exited normally \n"));
+	} else {
+		p->causeofdeath = PROC_SOMEODDDEATH;
+		if (WIFSIGNALED(status))
+			p->returncode = WTERMSIG(status);
+		else
+			p->returncode = 128;
+		DEBUG(("process terminated \n"));
+	}
+	
+	return p;
+}
+
+void process_free(proc **pp)
+{
+	if (!pp)
+		return;
+	if (! *pp)
+		return;
+
+	if ((*pp)->output)
+		buffer_free(&((*pp)->output));
+	
+	free(*pp);
+
+	*pp = NULL;
+}
--- a/sbsv2/raptor/util/talon/process.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/process.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,54 +1,54 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-/*
- * Process.h
- */
-
-
-#ifndef _TALONPROCESS_H_
-#define _TALONPROCESS_H_
-
-#include <sys/types.h>
-#include "buffer.h"
-
-typedef pid_t proc_handle;
-
-#define PROC_NORMALDEATH 0
-#define PROC_TIMEOUTDEATH 1
-#define PROC_SOMEODDDEATH 2
-#define PROC_PIPECREATE 3
-#define PROC_STARTPROC 4
-
-
-typedef struct 
-{
-	proc_handle pid;
-	unsigned int starttime;
-	unsigned int endtime;
-	int returncode;
-	unsigned int causeofdeath;
-	buffer *output;
-} proc;
-
-proc *process_run(char executable[], char *args[], int timeout);
-void process_free(proc **pp);
-	
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/*
+ * Process.h
+ */
+
+
+#ifndef _TALONPROCESS_H_
+#define _TALONPROCESS_H_
+
+#include <sys/types.h>
+#include "buffer.h"
+
+typedef pid_t proc_handle;
+
+#define PROC_NORMALDEATH 0
+#define PROC_TIMEOUTDEATH 1
+#define PROC_SOMEODDDEATH 2
+#define PROC_PIPECREATE 3
+#define PROC_STARTPROC 4
+
+
+typedef struct 
+{
+	proc_handle pid;
+	unsigned int starttime;
+	unsigned int endtime;
+	int returncode;
+	unsigned int causeofdeath;
+	buffer *output;
+} proc;
+
+proc *process_run(char executable[], char *args[], int timeout);
+void process_free(proc **pp);
+	
+#endif
--- a/sbsv2/raptor/util/talon/process_win.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/process_win.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,406 +1,406 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-#include <unistd.h>
-
-#include "talon_process.h"
-#include "buffer.h"
-#include <errno.h>
-
-#include <windows.h> 
-#include <tchar.h>
-#include <stdio.h> 
-//#include <strsafe.h>
-
-
-#include "log.h"
-
-#define RETURN(x) { retval=x; goto cleanup; }
-#define CLEANUP() cleanup:
-
-#define READSIZE 4096
-
-typedef struct ReadOpStruct {
-	HANDLE semaphore;
-	HANDLE thread;
-	DWORD timeout;
-	DWORD error;
-	HANDLE file;
-	BOOL success;
-	char *space;
-	DWORD nbytes;
-	int id;
-	struct ReadOpStruct *next;
-} ReadOp;
-
-typedef struct {
-	ReadOp *first;
-	ReadOp *last;
-	HANDLE semaphore;
-} ReadOpQ;
-
-proc *process_new(void)
-{
-	proc *p = malloc(sizeof(proc));
-	p->output = buffer_new();
-	if (!p->output)
-	{
-		free(p);
-		return  NULL;
-	}
-	p->starttime = 0;
-	p->endtime = 0;
-	p->returncode = 1;
-	p->pid = 0;
-	p->causeofdeath = PROC_NORMALDEATH;
-
-	return p;
-}
-
-#define TALONMAXERRSTR 1024
-
-void printlasterror(void)
-{
-	LPTSTR msg;
-	DWORD err = GetLastError();
-	char buf[1024];
-
-	msg=buf;
-	
-	DEBUG(("error %d\n",err));
-	FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
-	  FORMAT_MESSAGE_FROM_SYSTEM |
-	  FORMAT_MESSAGE_IGNORE_INSERTS, 
-	  NULL, 		// lpSource
-	  err, 	// dwMessageId,
-	  0,
-	  //MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), 			// dwLanguageId,
-	  msg,
-	  0,
-	  NULL
-	);
-
-	DEBUG(("%s\n",msg));
-	//LocalFree(msg);
-}
-
-typedef struct 
-{
-	HANDLE read, write;
-} tl_stream;
-
-
-/* Because windows is d**b, there is no way to avoid blocking on an anonymous
- * pipe.  We can't use CancelIO  to stop reads since that's only in newer
- * versions of Win***ws.  So what we are left with is putting the read operation
- * into a thread, timing out in the main body and ignoring this thread if we
- * feel we have to.
- * */
-
-
-DWORD readpipe_thread(void *param)
-{
-	ReadOpQ *io_ops = (ReadOpQ *)param;
-	ReadOp *iopipe_op;
-	/* have our own buffer since we don't want to risk that the
-	 * caller's buffer might have disappeared by the time
-	 * our readfile unblocks.
-	 */
-
-	while (1)
-	{
-		DWORD  waitres = WaitForSingleObject(io_ops->semaphore, INFINITE);
-		iopipe_op = io_ops->last;
-
-		DEBUG(("readpipe_thread: pre-ReadFile%d: %d \n", iopipe_op->id, iopipe_op->nbytes));
-		iopipe_op->success = ReadFile(iopipe_op->file, iopipe_op->space, iopipe_op->nbytes, &iopipe_op->nbytes, NULL);
-		iopipe_op->error = GetLastError();
-		
-		DEBUG(("readpipe_thread: post-ReadFile%d: %d read, err %d\n", iopipe_op->id, iopipe_op->nbytes,iopipe_op->error));
-		ReleaseSemaphore(iopipe_op->semaphore, 1, NULL);
-	}
-}
-
-proc *process_run(char executable[], char *args[], int timeout)
-{
-	proc *retval = NULL;
-	char *text;
-	int status;
-	tl_stream stdout_p;
-	tl_stream stdin_p;
-	SECURITY_ATTRIBUTES saAttr; 
-	PROCESS_INFORMATION pi;
-	STARTUPINFO si;
-	BOOL createproc_success = FALSE; 
-	BOOL timedout = FALSE; 
-	TCHAR *commandline = NULL;
-
-	proc *p = process_new();
-
-	if (p == NULL)
-		return NULL;
-
-	/* Make sure pipe handles are inherited */
-	saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
-	saAttr.bInheritHandle = TRUE; 
-	saAttr.lpSecurityDescriptor = NULL; 
-	
-	p->causeofdeath = PROC_PIPECREATE;
-
-	DEBUG(("making pipes \n"));
-	/* Child's Stdout */
-	if ( ! CreatePipe(&stdout_p.read, &stdout_p.write, &saAttr, 1) ) 
-	{
-		printlasterror();
-		RETURN(p);
-	}
-	DEBUG(("stdout done \n"));
-	
-	/* read handle to the pipe for STDOUT is not inherited */
-	if ( ! SetHandleInformation(stdout_p.read, HANDLE_FLAG_INHERIT, 0) )
-	{
-		printlasterror();
-		RETURN(p); 
-	}
-	DEBUG(("stdout noinherit \n"));
-	
-	/* a pipe for the child process's STDIN */
-	if ( ! CreatePipe(&stdin_p.read, &stdin_p.write, &saAttr, 0) ) 
-	{
-		printlasterror();
-		RETURN(p); 
-	}
-	DEBUG(("stdin done \n"));
-	
-	/*  write handle to the pipe for STDIN not inherited */
-	if ( ! SetHandleInformation(stdin_p.read, HANDLE_FLAG_INHERIT, 0) )
-	{
-		printlasterror();
-		RETURN(p); 
-	}
-	DEBUG(("pipes done \n"));
-	
-	
-	p->causeofdeath = PROC_START;
-
-	ZeroMemory( &si, sizeof(STARTUPINFO) );
-	ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) );
-	
-	si.cb = sizeof(STARTUPINFO); 
-	si.hStdError = stdout_p.write;
-	si.hStdOutput = stdout_p.write;
-	/*
-	  Rather than use the stdin pipe, which would be
-       		  si.hStdInput = stdin_p.read;
-	  Pass on talon's own standard input to the child process
-	  This helps with programs like xcopy which demand that
-	  they are attached to a console and not just any type of
-	  input file.
-	 */
-	si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
-	si.dwFlags |= STARTF_USESTDHANDLES;
-
-	
-	DEBUG(("pre commandline \n"));
-	/* create the commandline string */
-	int len = 0;
-	int i = 0;
-	while (args[i] != NULL)
-	{
-		len += strlen(args[i++]) + 1;
-	}
-	len+=2;
-
-	commandline = malloc(len*2);
-	if (! commandline) 
-		RETURN(p);
-	commandline[0] = '\0';
-
-	i = 0;
-	while (args[i] != NULL)
-	{
-		strcat(commandline, args[i]);
-		strcat(commandline, " ");
-		i++;
-	}
-
-
-	/* Get the read thread ready to go before creating
-	 * the process.
-	 */
-	ReadOpQ *ropq  = malloc(sizeof(ReadOpQ));
-
-	ropq->first=NULL;
-	ropq->last=NULL;
-	ropq->semaphore = CreateSemaphore(NULL, 0, 1, NULL);
-	DEBUG(("Creating read thread. \n"));
-
-	DWORD readpipe_threadid;
-	HANDLE h_readpipe_thread = CreateThread(NULL, 8192, (LPTHREAD_START_ROUTINE) readpipe_thread, (void*)ropq, 0, &readpipe_threadid);
-
-	/* ready to run the process */
- 
-	DEBUG(("process commandline:\n%s \n", commandline));
-	DEBUG(("\n"));
-	createproc_success = CreateProcess(executable, 
-	   commandline,     // command line 
-	   NULL,          // process security attributes 
-	   NULL,          // primary thread security attributes 
-	   TRUE,          // handles are inherited 
-	   0,             // creation flags 
-	   NULL,          // use parent's environment 
-	   NULL,          // use parent's current directory 
-	   &si,  // STARTUPINFO pointer 
-	   &pi);  // receives PROCESS_INFORMATION 
-
-	if (! createproc_success)
-	{
-		DEBUG(("Createprocess failed. \n"));
-		p->causeofdeath = PROC_SOMEODDDEATH;
-		RETURN(p);
-	}
-
-	int have_status = 0;
-
-
-	DEBUG(("Closing Handles. \n"));
-	if (!CloseHandle(stdout_p.write)) 
-		RETURN(p);
-	if (!CloseHandle(stdin_p.read)) 
-		RETURN(p);
-
-	DEBUG(("Closed Handles. \n"));
-
-
-	static int id=0;
-	do
-	{
-		char *space = buffer_makespace(p->output, READSIZE);
-
-		DWORD waitres;
-		ReadOp *iopipe_op = malloc(sizeof(ReadOp));
-		iopipe_op->semaphore = CreateSemaphore(NULL, 0, 1, NULL);
-		iopipe_op->thread =  h_readpipe_thread;
-		iopipe_op->timeout = timeout;
-		iopipe_op->file = stdout_p.read;
-		iopipe_op->space = malloc(READSIZE);
-		iopipe_op->id = id++;
-		iopipe_op->nbytes = READSIZE;
-		iopipe_op->next = NULL;
-
-		if (!ropq->first)
-		{
-			ropq->first = iopipe_op;
-			ropq->last = iopipe_op;
-		} else {
-			ropq->last->next = iopipe_op;
-			ropq->last = iopipe_op;
-		}
-
-		ReleaseSemaphore(ropq->semaphore, 1, NULL);
-
-		DEBUG(("waiting for read %d\n", timeout));
-		waitres = WaitForSingleObject(iopipe_op->semaphore, timeout);
-		DEBUG(("read wait finished result= %d\n", waitres));
-
-		if (waitres != WAIT_OBJECT_0)
-		{
-			DEBUG(("timeout \n"));
-			timedout = TRUE;
-			break;
-		}
-		else
-		{
-			DEBUG(("read signalled: nbytes: %d \n", iopipe_op->nbytes));
-			if (iopipe_op->nbytes <= 0)
-			{
-				break;
-			}
-			memcpy(space, iopipe_op->space, iopipe_op->nbytes);	
-			buffer_usespace(p->output, iopipe_op->nbytes);	
-			DEBUG(("buffer took on nbytes: %d \n", iopipe_op->nbytes));
-		}
-	}
-	while (1);
-
-	if (timedout == FALSE) 
-	{
-		DEBUG(("Wait for process exit\n"));
-		// Wait until child process exits.
-		WaitForSingleObject(pi.hProcess, INFINITE);
-		DEBUG(("Process exited\n"));
-
-		DWORD exitcode;
-
-		if (GetExitCodeProcess(pi.hProcess, &exitcode))
-		{
-			p->causeofdeath = PROC_NORMALDEATH;
-			p->returncode = exitcode;
-			DEBUG(("process exited normally = %d:\n", p->returncode));
-			RETURN(p);	
-		} else {
-			p->causeofdeath = PROC_SOMEODDDEATH;
-			p->returncode = 128;
-			DEBUG(("process terminated \n"));
-			RETURN(p);	
-		}
-	} else {
-		TerminateProcess(pi.hProcess,1);
-		p->causeofdeath = PROC_TIMEOUTDEATH;
-		p->returncode = 128;
-		DEBUG(("process timedout \n"));
-		RETURN(p);	
-	}
-
-	/* Clean up the read operation queue 
-	ReadOp *r = ropq.first;
-	do
-	{
-		CloseHandle(r->semaphore);
-		free(r->space);
-		free(r);
-		r = r->next;
-	} while (r != NULL); */
-
-	CLEANUP();
-	if (retval == NULL)
-	{
-		if (p)
-			process_free(&p);
-	}
-	if (commandline)
-		free(commandline);
-	
-	return retval;
-}
-
-void process_free(proc **pp)
-{
-	if (!pp)
-		return;
-	if (! *pp)
-		return;
-
-	if ((*pp)->output)
-		buffer_free(&((*pp)->output));
-	
-	free(*pp);
-
-	*pp = NULL;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include <unistd.h>
+
+#include "talon_process.h"
+#include "buffer.h"
+#include <errno.h>
+
+#include <windows.h> 
+#include <tchar.h>
+#include <stdio.h> 
+//#include <strsafe.h>
+
+
+#include "log.h"
+
+#define RETURN(x) { retval=x; goto cleanup; }
+#define CLEANUP() cleanup:
+
+#define READSIZE 4096
+
+typedef struct ReadOpStruct {
+	HANDLE semaphore;
+	HANDLE thread;
+	DWORD timeout;
+	DWORD error;
+	HANDLE file;
+	BOOL success;
+	char *space;
+	DWORD nbytes;
+	int id;
+	struct ReadOpStruct *next;
+} ReadOp;
+
+typedef struct {
+	ReadOp *first;
+	ReadOp *last;
+	HANDLE semaphore;
+} ReadOpQ;
+
+proc *process_new(void)
+{
+	proc *p = malloc(sizeof(proc));
+	p->output = buffer_new();
+	if (!p->output)
+	{
+		free(p);
+		return  NULL;
+	}
+	p->starttime = 0;
+	p->endtime = 0;
+	p->returncode = 1;
+	p->pid = 0;
+	p->causeofdeath = PROC_NORMALDEATH;
+
+	return p;
+}
+
+#define TALONMAXERRSTR 1024
+
+void printlasterror(void)
+{
+	LPTSTR msg;
+	DWORD err = GetLastError();
+	char buf[1024];
+
+	msg=buf;
+	
+	DEBUG(("error %d\n",err));
+	FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
+	  FORMAT_MESSAGE_FROM_SYSTEM |
+	  FORMAT_MESSAGE_IGNORE_INSERTS, 
+	  NULL, 		// lpSource
+	  err, 	// dwMessageId,
+	  0,
+	  //MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), 			// dwLanguageId,
+	  msg,
+	  0,
+	  NULL
+	);
+
+	DEBUG(("%s\n",msg));
+	//LocalFree(msg);
+}
+
+typedef struct 
+{
+	HANDLE read, write;
+} tl_stream;
+
+
+/* Because windows is d**b, there is no way to avoid blocking on an anonymous
+ * pipe.  We can't use CancelIO  to stop reads since that's only in newer
+ * versions of Win***ws.  So what we are left with is putting the read operation
+ * into a thread, timing out in the main body and ignoring this thread if we
+ * feel we have to.
+ * */
+
+
+DWORD readpipe_thread(void *param)
+{
+	ReadOpQ *io_ops = (ReadOpQ *)param;
+	ReadOp *iopipe_op;
+	/* have our own buffer since we don't want to risk that the
+	 * caller's buffer might have disappeared by the time
+	 * our readfile unblocks.
+	 */
+
+	while (1)
+	{
+		DWORD  waitres = WaitForSingleObject(io_ops->semaphore, INFINITE);
+		iopipe_op = io_ops->last;
+
+		DEBUG(("readpipe_thread: pre-ReadFile%d: %d \n", iopipe_op->id, iopipe_op->nbytes));
+		iopipe_op->success = ReadFile(iopipe_op->file, iopipe_op->space, iopipe_op->nbytes, &iopipe_op->nbytes, NULL);
+		iopipe_op->error = GetLastError();
+		
+		DEBUG(("readpipe_thread: post-ReadFile%d: %d read, err %d\n", iopipe_op->id, iopipe_op->nbytes,iopipe_op->error));
+		ReleaseSemaphore(iopipe_op->semaphore, 1, NULL);
+	}
+}
+
+proc *process_run(char executable[], char *args[], int timeout)
+{
+	proc *retval = NULL;
+	char *text;
+	int status;
+	tl_stream stdout_p;
+	tl_stream stdin_p;
+	SECURITY_ATTRIBUTES saAttr; 
+	PROCESS_INFORMATION pi;
+	STARTUPINFO si;
+	BOOL createproc_success = FALSE; 
+	BOOL timedout = FALSE; 
+	TCHAR *commandline = NULL;
+
+	proc *p = process_new();
+
+	if (p == NULL)
+		return NULL;
+
+	/* Make sure pipe handles are inherited */
+	saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
+	saAttr.bInheritHandle = TRUE; 
+	saAttr.lpSecurityDescriptor = NULL; 
+	
+	p->causeofdeath = PROC_PIPECREATE;
+
+	DEBUG(("making pipes \n"));
+	/* Child's Stdout */
+	if ( ! CreatePipe(&stdout_p.read, &stdout_p.write, &saAttr, 1) ) 
+	{
+		printlasterror();
+		RETURN(p);
+	}
+	DEBUG(("stdout done \n"));
+	
+	/* read handle to the pipe for STDOUT is not inherited */
+	if ( ! SetHandleInformation(stdout_p.read, HANDLE_FLAG_INHERIT, 0) )
+	{
+		printlasterror();
+		RETURN(p); 
+	}
+	DEBUG(("stdout noinherit \n"));
+	
+	/* a pipe for the child process's STDIN */
+	if ( ! CreatePipe(&stdin_p.read, &stdin_p.write, &saAttr, 0) ) 
+	{
+		printlasterror();
+		RETURN(p); 
+	}
+	DEBUG(("stdin done \n"));
+	
+	/*  write handle to the pipe for STDIN not inherited */
+	if ( ! SetHandleInformation(stdin_p.read, HANDLE_FLAG_INHERIT, 0) )
+	{
+		printlasterror();
+		RETURN(p); 
+	}
+	DEBUG(("pipes done \n"));
+	
+	
+	p->causeofdeath = PROC_START;
+
+	ZeroMemory( &si, sizeof(STARTUPINFO) );
+	ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) );
+	
+	si.cb = sizeof(STARTUPINFO); 
+	si.hStdError = stdout_p.write;
+	si.hStdOutput = stdout_p.write;
+	/*
+	  Rather than use the stdin pipe, which would be
+       		  si.hStdInput = stdin_p.read;
+	  Pass on talon's own standard input to the child process
+	  This helps with programs like xcopy which demand that
+	  they are attached to a console and not just any type of
+	  input file.
+	 */
+	si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
+	si.dwFlags |= STARTF_USESTDHANDLES;
+
+	
+	DEBUG(("pre commandline \n"));
+	/* create the commandline string */
+	int len = 0;
+	int i = 0;
+	while (args[i] != NULL)
+	{
+		len += strlen(args[i++]) + 1;
+	}
+	len+=2;
+
+	commandline = malloc(len*2);
+	if (! commandline) 
+		RETURN(p);
+	commandline[0] = '\0';
+
+	i = 0;
+	while (args[i] != NULL)
+	{
+		strcat(commandline, args[i]);
+		strcat(commandline, " ");
+		i++;
+	}
+
+
+	/* Get the read thread ready to go before creating
+	 * the process.
+	 */
+	ReadOpQ *ropq  = malloc(sizeof(ReadOpQ));
+
+	ropq->first=NULL;
+	ropq->last=NULL;
+	ropq->semaphore = CreateSemaphore(NULL, 0, 1, NULL);
+	DEBUG(("Creating read thread. \n"));
+
+	DWORD readpipe_threadid;
+	HANDLE h_readpipe_thread = CreateThread(NULL, 8192, (LPTHREAD_START_ROUTINE) readpipe_thread, (void*)ropq, 0, &readpipe_threadid);
+
+	/* ready to run the process */
+ 
+	DEBUG(("process commandline:\n%s \n", commandline));
+	DEBUG(("\n"));
+	createproc_success = CreateProcess(executable, 
+	   commandline,     // command line 
+	   NULL,          // process security attributes 
+	   NULL,          // primary thread security attributes 
+	   TRUE,          // handles are inherited 
+	   0,             // creation flags 
+	   NULL,          // use parent's environment 
+	   NULL,          // use parent's current directory 
+	   &si,  // STARTUPINFO pointer 
+	   &pi);  // receives PROCESS_INFORMATION 
+
+	if (! createproc_success)
+	{
+		DEBUG(("Createprocess failed. \n"));
+		p->causeofdeath = PROC_SOMEODDDEATH;
+		RETURN(p);
+	}
+
+	int have_status = 0;
+
+
+	DEBUG(("Closing Handles. \n"));
+	if (!CloseHandle(stdout_p.write)) 
+		RETURN(p);
+	if (!CloseHandle(stdin_p.read)) 
+		RETURN(p);
+
+	DEBUG(("Closed Handles. \n"));
+
+
+	static int id=0;
+	do
+	{
+		char *space = buffer_makespace(p->output, READSIZE);
+
+		DWORD waitres;
+		ReadOp *iopipe_op = malloc(sizeof(ReadOp));
+		iopipe_op->semaphore = CreateSemaphore(NULL, 0, 1, NULL);
+		iopipe_op->thread =  h_readpipe_thread;
+		iopipe_op->timeout = timeout;
+		iopipe_op->file = stdout_p.read;
+		iopipe_op->space = malloc(READSIZE);
+		iopipe_op->id = id++;
+		iopipe_op->nbytes = READSIZE;
+		iopipe_op->next = NULL;
+
+		if (!ropq->first)
+		{
+			ropq->first = iopipe_op;
+			ropq->last = iopipe_op;
+		} else {
+			ropq->last->next = iopipe_op;
+			ropq->last = iopipe_op;
+		}
+
+		ReleaseSemaphore(ropq->semaphore, 1, NULL);
+
+		DEBUG(("waiting for read %d\n", timeout));
+		waitres = WaitForSingleObject(iopipe_op->semaphore, timeout);
+		DEBUG(("read wait finished result= %d\n", waitres));
+
+		if (waitres != WAIT_OBJECT_0)
+		{
+			DEBUG(("timeout \n"));
+			timedout = TRUE;
+			break;
+		}
+		else
+		{
+			DEBUG(("read signalled: nbytes: %d \n", iopipe_op->nbytes));
+			if (iopipe_op->nbytes <= 0)
+			{
+				break;
+			}
+			memcpy(space, iopipe_op->space, iopipe_op->nbytes);	
+			buffer_usespace(p->output, iopipe_op->nbytes);	
+			DEBUG(("buffer took on nbytes: %d \n", iopipe_op->nbytes));
+		}
+	}
+	while (1);
+
+	if (timedout == FALSE) 
+	{
+		DEBUG(("Wait for process exit\n"));
+		// Wait until child process exits.
+		WaitForSingleObject(pi.hProcess, INFINITE);
+		DEBUG(("Process exited\n"));
+
+		DWORD exitcode;
+
+		if (GetExitCodeProcess(pi.hProcess, &exitcode))
+		{
+			p->causeofdeath = PROC_NORMALDEATH;
+			p->returncode = exitcode;
+			DEBUG(("process exited normally = %d:\n", p->returncode));
+			RETURN(p);	
+		} else {
+			p->causeofdeath = PROC_SOMEODDDEATH;
+			p->returncode = 128;
+			DEBUG(("process terminated \n"));
+			RETURN(p);	
+		}
+	} else {
+		TerminateProcess(pi.hProcess,1);
+		p->causeofdeath = PROC_TIMEOUTDEATH;
+		p->returncode = 128;
+		DEBUG(("process timedout \n"));
+		RETURN(p);	
+	}
+
+	/* Clean up the read operation queue 
+	ReadOp *r = ropq.first;
+	do
+	{
+		CloseHandle(r->semaphore);
+		free(r->space);
+		free(r);
+		r = r->next;
+	} while (r != NULL); */
+
+	CLEANUP();
+	if (retval == NULL)
+	{
+		if (p)
+			process_free(&p);
+	}
+	if (commandline)
+		free(commandline);
+	
+	return retval;
+}
+
+void process_free(proc **pp)
+{
+	if (!pp)
+		return;
+	if (! *pp)
+		return;
+
+	if ((*pp)->output)
+		buffer_free(&((*pp)->output));
+	
+	free(*pp);
+
+	*pp = NULL;
+}
--- a/sbsv2/raptor/util/talon/sema.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/sema.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,137 +1,137 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "sema.h"
-
-// OS specific headers
-#ifdef WIN32
-#include <windows.h>
-#include <tlhelp32.h>
-#else
-#include <semaphore.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <time.h>
-#endif
-
-#include <unistd.h>
-
-
-void sema_create(sbs_semaphore *s)
-{
-#ifdef WIN32
-	s->handle = CreateSemaphore(NULL, 1, 1, s->name);
-	if (s->handle)
-		CloseHandle(s->handle);
-	else
-		error("unable to create semaphore %s", s->name);
-#else
-	s->handle = sem_open(s->name, O_CREAT | O_EXCL, 0644, 1);
-	
-  	if (s->handle == SEM_FAILED)
-	{
-		sem_close(s->handle);
-	  	error("unable to create semaphore %s", s->name);
-	}
-	sem_close(s->handle);
-#endif
-}
-
-void sema_destroy(sbs_semaphore *s)
-{
-	#ifdef WIN32
-		/* can't destroy a windows semaphore... */
-	#else
-  		if (sem_unlink(s->name) != 0)
-		  	error("unable to unlink semaphore", s->name);
-	#endif
-}
-
-
-int sema_wait(sbs_semaphore *s)
-{
-	/* try and open the semaphore now */
-        #ifdef WIN32
-		s->handle = CreateSemaphore(NULL, 1, 1, s->name);
-		if (!s->handle)
-		{
-			error("unable to open semaphore %s", s->name);
-			return -2;
-		}
-        #else
-		struct timespec tmout;
-		
-		s->handle = sem_open(s->name, 0);
-	
-	  	if (s->handle == SEM_FAILED)
-		{
-    			sem_close(s->handle);
-      			error("unable to open semaphore %s\n", s->name);
-			return -2;
-    		}
-	#endif
-    
-    /* wait for the semaphore to be free [timeout if it takes too long] */
- 	int timedOutFlag = 0;
-	int semcount = 0;
-	#ifdef WIN32
- 		timedOutFlag = (WaitForSingleObject(s->handle, s->timeout) != WAIT_OBJECT_0);
-	#else
-
-		sem_getvalue(s->handle, &semcount);
-      		debug("sema: count before wait: %d\n", semcount);
-      		debug("sema: timeout: %d\n", s->timeout);
-
-	        if (clock_gettime(CLOCK_REALTIME, &tmout) == -1)
-		{
-               		error("sema: clock_gettime failed - can't do timed wait");
-			return -1;
-		}
-
-		tmout.tv_sec += (s->timeout / 1000);
-		tmout.tv_nsec += (s->timeout % 1000) * 1000;
-		timedOutFlag = sem_timedwait(s->handle, &tmout); 
-		/* roughly speaking the return value indicates timeouts. It also indicated
-		 * signals.  We are glossing over this for the moment since it isn't really
-		 * interesting in this application 
-		 * */
-	#endif
-
-	return timedOutFlag;
-}
-
-
-void  sema_release(sbs_semaphore *s)
-{
-	/* release the semaphore */
-	#ifdef WIN32
-		ReleaseSemaphore(s->handle, 1, NULL);
-	#else
-	   	sem_post(s->handle);
-	#endif
-	
-	   /* clean up */
-	#ifdef WIN32
-		CloseHandle(s->handle);
-	#else
-	   	sem_close(s->handle);
-	#endif
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include "sema.h"
+
+// OS specific headers
+#ifdef WIN32
+#include <windows.h>
+#include <tlhelp32.h>
+#else
+#include <semaphore.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <time.h>
+#endif
+
+#include <unistd.h>
+
+
+void sema_create(sbs_semaphore *s)
+{
+#ifdef WIN32
+	s->handle = CreateSemaphore(NULL, 1, 1, s->name);
+	if (s->handle)
+		CloseHandle(s->handle);
+	else
+		error("unable to create semaphore %s", s->name);
+#else
+	s->handle = sem_open(s->name, O_CREAT | O_EXCL, 0644, 1);
+	
+  	if (s->handle == SEM_FAILED)
+	{
+		sem_close(s->handle);
+	  	error("unable to create semaphore %s", s->name);
+	}
+	sem_close(s->handle);
+#endif
+}
+
+void sema_destroy(sbs_semaphore *s)
+{
+	#ifdef WIN32
+		/* can't destroy a windows semaphore... */
+	#else
+  		if (sem_unlink(s->name) != 0)
+		  	error("unable to unlink semaphore", s->name);
+	#endif
+}
+
+
+int sema_wait(sbs_semaphore *s)
+{
+	/* try and open the semaphore now */
+        #ifdef WIN32
+		s->handle = CreateSemaphore(NULL, 1, 1, s->name);
+		if (!s->handle)
+		{
+			error("unable to open semaphore %s", s->name);
+			return -2;
+		}
+        #else
+		struct timespec tmout;
+		
+		s->handle = sem_open(s->name, 0);
+	
+	  	if (s->handle == SEM_FAILED)
+		{
+    			sem_close(s->handle);
+      			error("unable to open semaphore %s\n", s->name);
+			return -2;
+    		}
+	#endif
+    
+    /* wait for the semaphore to be free [timeout if it takes too long] */
+ 	int timedOutFlag = 0;
+	int semcount = 0;
+	#ifdef WIN32
+ 		timedOutFlag = (WaitForSingleObject(s->handle, s->timeout) != WAIT_OBJECT_0);
+	#else
+
+		sem_getvalue(s->handle, &semcount);
+      		debug("sema: count before wait: %d\n", semcount);
+      		debug("sema: timeout: %d\n", s->timeout);
+
+	        if (clock_gettime(CLOCK_REALTIME, &tmout) == -1)
+		{
+               		error("sema: clock_gettime failed - can't do timed wait");
+			return -1;
+		}
+
+		tmout.tv_sec += (s->timeout / 1000);
+		tmout.tv_nsec += (s->timeout % 1000) * 1000;
+		timedOutFlag = sem_timedwait(s->handle, &tmout); 
+		/* roughly speaking the return value indicates timeouts. It also indicated
+		 * signals.  We are glossing over this for the moment since it isn't really
+		 * interesting in this application 
+		 * */
+	#endif
+
+	return timedOutFlag;
+}
+
+
+void  sema_release(sbs_semaphore *s)
+{
+	/* release the semaphore */
+	#ifdef WIN32
+		ReleaseSemaphore(s->handle, 1, NULL);
+	#else
+	   	sem_post(s->handle);
+	#endif
+	
+	   /* clean up */
+	#ifdef WIN32
+		CloseHandle(s->handle);
+	#else
+	   	sem_close(s->handle);
+	#endif
+}
--- a/sbsv2/raptor/util/talon/sema.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/sema.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,52 +1,52 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#ifndef _SEMA_H_
-#define _SEMA_H_
-
-#ifdef WIN32
-#include <windows.h>
-#include <tlhelp32.h>
-#else
-#include <semaphore.h>
-#include <sys/types.h>
-#endif
-
-
-
-typedef struct
-{
-	char *name;
-	#ifdef WIN32
-	HANDLE handle;
-	#else
-	sem_t *handle;
-	#endif
-	unsigned int timeout;
-} sbs_semaphore;
-
-
-void sema_create(sbs_semaphore *s);
-void sema_destroy(sbs_semaphore *s);
-int sema_wait(sbs_semaphore *s);
-void  sema_release(sbs_semaphore *s);
-int sema_wait(sbs_semaphore *s);
-
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#ifndef _SEMA_H_
+#define _SEMA_H_
+
+#ifdef WIN32
+#include <windows.h>
+#include <tlhelp32.h>
+#else
+#include <semaphore.h>
+#include <sys/types.h>
+#endif
+
+
+
+typedef struct
+{
+	char *name;
+	#ifdef WIN32
+	HANDLE handle;
+	#else
+	sem_t *handle;
+	#endif
+	unsigned int timeout;
+} sbs_semaphore;
+
+
+void sema_create(sbs_semaphore *s);
+void sema_destroy(sbs_semaphore *s);
+int sema_wait(sbs_semaphore *s);
+void  sema_release(sbs_semaphore *s);
+int sema_wait(sbs_semaphore *s);
+
+#endif
--- a/sbsv2/raptor/util/talon/talon.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/talon.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,613 +1,613 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdarg.h>
-
-#include "talon_process.h"
-#include "sema.h"
-#include "buffer.h"
-#include "../config.h"
-
-/* The output semaphore. */
-sbs_semaphore talon_sem;
-
-#define TALON_ATTEMPT_STRMAX 32
-#define RECIPETAG_STRMAX 2048
-#define STATUS_STRMAX 100
-
-#define TALONDELIMITER '|'
-#define VARNAMEMAX 100
-#define VARVALMAX 1024
-
-
-#include "log.h"
-
-#ifdef HAS_MSVCRT
-/* Make all output handling binary */
-unsigned int _CRT_fmode = _O_BINARY;
-#endif
-
-double getseconds(void)
-{
-	struct timeval tp;
-	gettimeofday(&tp, NULL);
-
-	return (double)tp.tv_sec + ((double)tp.tv_usec)/1000000.0L;
-}
-
-void talon_setenv(char name[], char val[])
-{
-#if defined(HAS_GETENVIRONMENTVARIABLE)
-	SetEnvironmentVariableA(name,val); 
-#elif defined(HAS_GETENV)
-	setenv(name,val, 1);
-#else
-#	error "Need a function for setting environment variables"
-#endif
-}
-
-
-#define TALON_MAXENV 4096
-char * talon_getenv(char name[])
-{
-#if defined(HAS_SETENV)
-	char *val = getenv(name);
-	char *dest = NULL;
-	
-	if (val)
-	{
-		dest = malloc(strlen(val) + 1);
-		if (dest)
-		{
-			strcpy(dest,val);
-		}
-	}
-	return dest;
-#elif defined(HAS_SETENVIRONMENTVARIABLE)
-	char *val = malloc(TALON_MAXENV);
-	if (0 != GetEnvironmentVariableA(name,val,TALON_MAXENV-1))
-		return val;
-	else
-		return NULL;
-#else
-#	error "Need a function for setting environment variables"
-#endif
-}
-
-void prependattributes(buffer *b, char *attributes)
-{
-	char recipetag[RECIPETAG_STRMAX];
-	char *rt;
-	char envvarname[VARNAMEMAX];
-	char *att;
-	
-	
-        strcpy(recipetag, "<recipe ");
-	rt = recipetag + 8;
-
-	att = attributes;
-	while (*att != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
-	{
-		if ( *att == '$' )
-		{
-			int e;
-			char *v;
-			/* insert the value of an environent variable */
-			att++;
-			e = 0;	
-			do {
-				envvarname[e++] = *att;
-				att++;
-			} while ( e < (VARNAMEMAX-1) && (isalnum(*att) || *att == '_'));
-			envvarname[e] = '\0';
-/* DEBUG(("envvarname: %s\n", envvarname)); */
-			v = talon_getenv(envvarname);
-			if (v)
-			{
-				/* DEBUG(("     value: %s\n", v)); */
-				char *oldv=v;
-				while (*v != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
-				{
-					*rt = *v;
-					rt++; v++;
-				}
-				free(oldv);
-			}
-		} else {
-			*rt = *att;
-			rt++; att++;
-		}
-	}
-
-	char *finish = ">\n<![CDATA[\n";
-	
-	while (*finish != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
-	{
-		*rt = *finish;
-		*rt++; finish++;
-	}
-
-	*rt = '\0';
-
-        buffer_prepend(b, recipetag, strlen(recipetag));
-}
-
-/* read a recipe string from a temporary file.
- *
- * We only expect to do this for very long command lines on
- * Windows. So allocate the maximum size for CreateProcess on
- * Win32 (32768 bytes) and error if the file is longer than that. 
- *
- */
-char *read_recipe_from_file(const char *filename)
-{
-	FILE *fp = fopen(filename, "r");
-
-	if (!fp)
-	{
-		error("talon: error: could not read '%s'\n", filename);
-		return NULL;
-	}
-
-	int max_length = 32768;
-	char *recipe = (char*)malloc(max_length);
-
-	if (!recipe)
-	{
-		error("talon: error: could not allocate memory to read '%s'\n", filename);
-		return NULL;
-	}
-	int position = 0;
-
-	/* read the file one character at a time */
-	int c;
-	while ((c = getc(fp)) != EOF)
-	{
-		switch (c)
-		{
-			case '\r':
-			case '\n':
-				/* ignore newlines */
-				break;
-
-			case '"':
-				/* double quotes have to be escaped so they aren't lost later */
-				if (position < max_length)
-					recipe[position++] = '\\';
-				if (position < max_length)
-					recipe[position++] = c;
-				break;
-
-			default:
-				if (position < max_length)
-					recipe[position++] = c;
-				break;
-		}
-	}
-	fclose(fp);
-
-	/* add a terminating \0 */
-	if (position < max_length)
-		recipe[position] = '\0';
-	else
-	{
-		error("talon: error: command longer than 32768 in '%s'\n", filename);
-		return NULL;
-	}
-	return recipe;
-}
-
-int main(int argc, char *argv[])
-{
-	/* find the argument to -c then strip the talon related front section */
-
-	char *recipe = NULL;
-	int talon_returncode = 0;
-
-#ifdef HAS_GETCOMMANDLINE
-	char *commandline= GetCommandLine();
-	DEBUG(("talon: commandline: %s\n", commandline));
-	/*
-	 * The command line should be either,
-	 * talon -c "some shell commands"
-	 * or
-	 * talon shell_script_file
-	 *
-	 * talon could be an absolute path and may have a .exe extension.
-	 */
-	recipe = strstr(commandline, "-c");
-	if (recipe)
-	{
-		/* there was a -c so extract the quoted commands */
-
-		while (*recipe != '"' && *recipe != '\0')
-			recipe++;
-
-		if (*recipe != '"')    /* we found -c but no following quote */
-		{
-			error("talon: error: unquoted recipe in shell call '%s'\n", commandline);
-			return 1;
-		}
-		recipe++;
-		
-		int recipelen = strlen(recipe);
-		if (recipelen > 0 && recipe[recipelen - 1] == '"')
-			recipe[recipelen - 1] = '\0'; /* remove trailing quote */
-	}
-	else
-	{
-		/* there was no -c so extract the argument as a filename */
-
-		recipe = strstr(commandline, "talon");
-		if (recipe)
-		{
-			/* find the first space */
-			while (!isspace(*recipe) && *recipe != '\0')
-				recipe++;
-			/* skip past the spaces */
-			while (isspace(*recipe))
-				recipe++;
-
-			recipe = read_recipe_from_file(recipe);
-
-			if (!recipe)
-			{
-			    error("talon: error: bad script file in shell call '%s'\n", commandline);
-				return 1;
-			}
-		}
-		else
-		{
-			error("talon: error: no 'talon' in shell call '%s'\n", commandline);
-			return 1;
-		}
-	}
-#else
-	/*
-	 * The command line should be either,
-	 * talon -c "some shell commands"
-	 * or
-	 * talon shell_script_file
-	 *
-	 * talon could be an absolute path and may have a .exe extension.
-	 */
-	switch (argc)
-	{
-		case 2:
-			recipe = read_recipe_from_file(argv[1]);
-			break;
-		case 3:
-			if (strcmp("-c", argv[1]) != 0)
-			{
-				error("talon: error: %s\n", "usage is 'talon -c command' or 'talon script_filename'");
-				return 1;
-			}
-			recipe = argv[2];
-			break;
-		default:
-			error("talon: error: %s\n", "usage is 'talon -c command' or 'talon script_filename'");
-			return 1;
-	}
-#endif
-
-	/* did we get a recipe at all? */
-	if (!recipe)
-	{
-		error("talon: error: %s", "no recipe supplied to the shell.\n");
-		return 1;
-	}
-
-	/* remove any leading white space on the recipe */
-	while (isspace(*recipe))
-		recipe++;
-
-	/* turn debugging on? */
-	char *debugstr=talon_getenv("TALON_DEBUG");
-
-	if (debugstr)
-	{
-		loglevel=LOGDEBUG;
-		free(debugstr); debugstr=NULL;
-	}
-
-	DEBUG(("talon: recipe: %s\n", recipe));
-
-	
-	char varname[VARNAMEMAX];
-	char varval[VARVALMAX];
-	int dotagging = 0; 
-	int force_descramble_off = 0;
-
-	char  *rp = recipe;
-	if (*rp == TALONDELIMITER) {
-		dotagging = 1; 
-
-		/* there are some talon-specific settings 
-		 * in the command which must be stripped */
-		rp++;
-		char *out = varname;
-		char *stopout = varname + VARNAMEMAX - 1;
-		DEBUG(("talon: parameters found\n"));
-		while (*rp != '\0')
-		{
-			
-			switch (*rp) {
-				case  '=':
-					*out = '\0';
-					DEBUG(("talon: varname: %s\n",varname));
-					out = varval;
-					stopout = varval + VARVALMAX - 1;
-					break;
-				case ';':
-					*out = '\0';
-					DEBUG(("talon: varval: %s\n",varval));
-					talon_setenv(varname, varval);
-					out = varname;
-					stopout = varname + VARNAMEMAX - 1;
-					break;
-				default:	
-					*out = *rp;
-					if (out < stopout)
-						out++;
-					break;
-			}
-
-			if (*rp == TALONDELIMITER)
-			{
-				rp++;
-				break;
-			}
-			
-			rp++;
-		}
-	} else {
-		/* This is probably a $(shell) statement 
- 		 * in make so no descrambling needed and 
- 		 * tags are definitely not wanted as they 
- 		 * would corrupt the expected output*/
-		force_descramble_off = 1; 
-	}
-
-
-	/* Now take settings from the environment (having potentially modified it) */	
-	if (talon_getenv("TALON_DEBUG"))
-		loglevel=LOGDEBUG;
-	
-
-	int enverrors = 0;
-
-	char *shell = talon_getenv("TALON_SHELL");
-	if (!shell)
-	{
-		error("error: %s", "TALON_SHELL not set in environment\n");
-		enverrors++;	
-	}
-
-	int timeout = -1;
-	char *timeout_str = talon_getenv("TALON_TIMEOUT");
-	if (timeout_str)
-	{
-		timeout = atoi(timeout_str);
-		free(timeout_str); timeout_str = NULL;
-	}
-
-	char *buildid = talon_getenv("TALON_BUILDID");
-	if (!buildid)
-	{
-		error("error: %s", "TALON_BUILDID not set in environment\n");
-		enverrors++;	
-	}
-
-	char *attributes = talon_getenv("TALON_RECIPEATTRIBUTES");
-	if (!attributes)
-	{
-		error("error: %s", "TALON_RECIPEATTRIBUTES not set in environment\n");
-		enverrors++;
-	}
-
-
-	int max_retries = 0;
-	char *retries_str = talon_getenv("TALON_RETRIES");
-	if (retries_str)
-	{
-		max_retries = atoi(retries_str);
-		free(retries_str); retries_str = NULL;
-	}	
-
-
-	int descramble = 0;
-	if (! force_descramble_off )
-	{
-		char *descramblestr = talon_getenv("TALON_DESCRAMBLE");
-		if (descramblestr)
-		{
-			if (*descramblestr == '0')
-				descramble = 0;
-			else
-				descramble = 1;
-		
-			free(descramblestr); descramblestr = NULL;
-		}
-	}
-
-
-
-	/* Talon can look in a flags variable to alter it's behaviour */
-	int force_success = 0;
-	char *flags_str = talon_getenv("TALON_FLAGS");
-	if (flags_str)
-	{
-		int c;
-		for (c=0; flags_str[c] !=0; c++)
-			flags_str[c] = tolower(flags_str[c]);
-
-		if (strstr(flags_str, "forcesuccess"))
-			force_success = 1;
-
-		/* don't put <recipe> or <CDATA<[[ tags around the output. e.g. if it's XML already*/
-		if (strstr(flags_str, "rawoutput"))
-		{
-			dotagging = 0;
-		}
-
-		free(flags_str); flags_str = NULL;
-	}	
-
-	/* Talon subprocesses need to have the "correct" shell variable set. */
-	talon_setenv("SHELL", shell); 
-
-	/* we have allowed some errors to build up so that the user
-	 * can see all of them before we stop and force the user 
-	 * to fix them
-	 */
-	if (enverrors)
-	{
-		return 1;
-	}
-
-	
-	/* Run the recipe repeatedly until the retry count expires or
-	 * it succeeds.
-	 */
-	int attempt = 0, retries = max_retries;
-	proc *p = NULL;
-
-	char *args[5];
-
-	char *qrp=rp;
-
-#ifdef HAS_GETCOMMANDLINE
-	/* re-quote the argument to -c since this helps windows deal with it */
-	int qrpsize = strlen(rp) + 3;
-	qrp = malloc(qrpsize);
-	qrp[0] = '"';
-	strcpy(&qrp[1], rp);
-	qrp[qrpsize-2] = '"';
-	qrp[qrpsize-1] = '\0';
-#endif
-
-	int index = 0;
-	args[index++] = shell;
-
-	if (dotagging)  /* don't do bash -x for non-tagged commands e.g. $(shell output) */
-		args[index++] = "-x";
-
-	args[index++] = "-c";
-	args[index++] = qrp;
-	args[index++] = NULL;
-
-	/* get the semaphore ready */
-	talon_sem.name = buildid;
-	talon_sem.timeout = timeout;
-	do
-	{
-		char talon_attempt[TALON_ATTEMPT_STRMAX];
-		double start_time = getseconds();
-		
-		attempt++;
-		
-		snprintf(talon_attempt, TALON_ATTEMPT_STRMAX-1, "%d", attempt);
-		talon_attempt[TALON_ATTEMPT_STRMAX - 1] = '\0';
-
-		talon_setenv("TALON_ATTEMPT", talon_attempt);
-		
-		p = process_run(shell, args, timeout);
-
-		double end_time = getseconds();
-		
-		if (p) 
-		{
-			char status[STATUS_STRMAX];
-			char timestat[STATUS_STRMAX];
-
-			talon_returncode = p->returncode;
-
-			if (dotagging) 
-			{
-				char *forcesuccessstr = force_success == 0 ? "" : " forcesuccess='FORCESUCCESS'";
-
-				if (p->returncode != 0)
-				{
-					char *exitstr = retries > 0 ? "retry" : "failed";
-					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='%s' code='%d' attempt='%d'%s />", exitstr, p->returncode, attempt, forcesuccessstr );
-				} else {
-					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='ok' attempt='%d'%s />", attempt, forcesuccessstr );
-				}
-				status[STATUS_STRMAX-1] = '\0';
-	
-				snprintf(timestat, STATUS_STRMAX - 1, "<time start='%.5f' elapsed='%.3f' />",start_time, end_time-start_time );
-				timestat[STATUS_STRMAX-1] = '\0';
-
-				prependattributes(p->output, attributes);
-			
-			if (dotagging) {
-			}
-				buffer_append(p->output, "\n]]>", 4);
-				buffer_append(p->output, timestat, strlen(timestat));
-				buffer_append(p->output, status, strlen(status));
-				buffer_append(p->output, "\n</recipe>\n", 11);
-			}
-		
-			unsigned int iterator = 0;
-			byteblock *bb;
-		
-			if (descramble)	
-				sema_wait(&talon_sem);
-			while ((bb = buffer_getbytes(p->output, &iterator)))
-			{
-				write(STDOUT_FILENO, &bb->byte0, bb->fill);
-			}
-			if (descramble)	
-				sema_release(&talon_sem);
-		
-		
-			if (p->returncode == 0 || force_success)
-			{
-				process_free(&p);
-				break;
-			}
-
-			process_free(&p);
-		} else {
-			error("error: failed to run shell: %s: check the SHELL environment variable.\n", args[0]);
-			return 1;
-		}
-
-		retries--;
-	}
-	while (retries >= 0);
-
-	if (buildid) free(buildid); buildid = NULL;
-	if (attributes) free(attributes); attributes = NULL;
-	if (shell) free(shell); shell = NULL;
-
-	if (force_success)
-		return 0;
-	else 
-		return talon_returncode;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdarg.h>
+
+#include "talon_process.h"
+#include "sema.h"
+#include "buffer.h"
+#include "../config.h"
+
+/* The output semaphore. */
+sbs_semaphore talon_sem;
+
+#define TALON_ATTEMPT_STRMAX 32
+#define RECIPETAG_STRMAX 2048
+#define STATUS_STRMAX 100
+
+#define TALONDELIMITER '|'
+#define VARNAMEMAX 100
+#define VARVALMAX 1024
+
+
+#include "log.h"
+
+#ifdef HAS_MSVCRT
+/* Make all output handling binary */
+unsigned int _CRT_fmode = _O_BINARY;
+#endif
+
+double getseconds(void)
+{
+	struct timeval tp;
+	gettimeofday(&tp, NULL);
+
+	return (double)tp.tv_sec + ((double)tp.tv_usec)/1000000.0L;
+}
+
+void talon_setenv(char name[], char val[])
+{
+#if defined(HAS_GETENVIRONMENTVARIABLE)
+	SetEnvironmentVariableA(name,val); 
+#elif defined(HAS_GETENV)
+	setenv(name,val, 1);
+#else
+#	error "Need a function for setting environment variables"
+#endif
+}
+
+
+#define TALON_MAXENV 4096
+char * talon_getenv(char name[])
+{
+#if defined(HAS_SETENV)
+	char *val = getenv(name);
+	char *dest = NULL;
+	
+	if (val)
+	{
+		dest = malloc(strlen(val) + 1);
+		if (dest)
+		{
+			strcpy(dest,val);
+		}
+	}
+	return dest;
+#elif defined(HAS_SETENVIRONMENTVARIABLE)
+	char *val = malloc(TALON_MAXENV);
+	if (0 != GetEnvironmentVariableA(name,val,TALON_MAXENV-1))
+		return val;
+	else
+		return NULL;
+#else
+#	error "Need a function for setting environment variables"
+#endif
+}
+
+void prependattributes(buffer *b, char *attributes)
+{
+	char recipetag[RECIPETAG_STRMAX];
+	char *rt;
+	char envvarname[VARNAMEMAX];
+	char *att;
+	
+	
+        strcpy(recipetag, "<recipe ");
+	rt = recipetag + 8;
+
+	att = attributes;
+	while (*att != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
+	{
+		if ( *att == '$' )
+		{
+			int e;
+			char *v;
+			/* insert the value of an environent variable */
+			att++;
+			e = 0;	
+			do {
+				envvarname[e++] = *att;
+				att++;
+			} while ( e < (VARNAMEMAX-1) && (isalnum(*att) || *att == '_'));
+			envvarname[e] = '\0';
+/* DEBUG(("envvarname: %s\n", envvarname)); */
+			v = talon_getenv(envvarname);
+			if (v)
+			{
+				/* DEBUG(("     value: %s\n", v)); */
+				char *oldv=v;
+				while (*v != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
+				{
+					*rt = *v;
+					rt++; v++;
+				}
+				free(oldv);
+			}
+		} else {
+			*rt = *att;
+			rt++; att++;
+		}
+	}
+
+	char *finish = ">\n<![CDATA[\n";
+	
+	while (*finish != '\0' && rt < &recipetag[RECIPETAG_STRMAX-1])
+	{
+		*rt = *finish;
+		*rt++; finish++;
+	}
+
+	*rt = '\0';
+
+        buffer_prepend(b, recipetag, strlen(recipetag));
+}
+
+/* read a recipe string from a temporary file.
+ *
+ * We only expect to do this for very long command lines on
+ * Windows. So allocate the maximum size for CreateProcess on
+ * Win32 (32768 bytes) and error if the file is longer than that. 
+ *
+ */
+char *read_recipe_from_file(const char *filename)
+{
+	FILE *fp = fopen(filename, "r");
+
+	if (!fp)
+	{
+		error("talon: error: could not read '%s'\n", filename);
+		return NULL;
+	}
+
+	int max_length = 32768;
+	char *recipe = (char*)malloc(max_length);
+
+	if (!recipe)
+	{
+		error("talon: error: could not allocate memory to read '%s'\n", filename);
+		return NULL;
+	}
+	int position = 0;
+
+	/* read the file one character at a time */
+	int c;
+	while ((c = getc(fp)) != EOF)
+	{
+		switch (c)
+		{
+			case '\r':
+			case '\n':
+				/* ignore newlines */
+				break;
+
+			case '"':
+				/* double quotes have to be escaped so they aren't lost later */
+				if (position < max_length)
+					recipe[position++] = '\\';
+				if (position < max_length)
+					recipe[position++] = c;
+				break;
+
+			default:
+				if (position < max_length)
+					recipe[position++] = c;
+				break;
+		}
+	}
+	fclose(fp);
+
+	/* add a terminating \0 */
+	if (position < max_length)
+		recipe[position] = '\0';
+	else
+	{
+		error("talon: error: command longer than 32768 in '%s'\n", filename);
+		return NULL;
+	}
+	return recipe;
+}
+
+int main(int argc, char *argv[])
+{
+	/* find the argument to -c then strip the talon related front section */
+
+	char *recipe = NULL;
+	int talon_returncode = 0;
+
+#ifdef HAS_GETCOMMANDLINE
+	char *commandline= GetCommandLine();
+	DEBUG(("talon: commandline: %s\n", commandline));
+	/*
+	 * The command line should be either,
+	 * talon -c "some shell commands"
+	 * or
+	 * talon shell_script_file
+	 *
+	 * talon could be an absolute path and may have a .exe extension.
+	 */
+	recipe = strstr(commandline, "-c");
+	if (recipe)
+	{
+		/* there was a -c so extract the quoted commands */
+
+		while (*recipe != '"' && *recipe != '\0')
+			recipe++;
+
+		if (*recipe != '"')    /* we found -c but no following quote */
+		{
+			error("talon: error: unquoted recipe in shell call '%s'\n", commandline);
+			return 1;
+		}
+		recipe++;
+		
+		int recipelen = strlen(recipe);
+		if (recipelen > 0 && recipe[recipelen - 1] == '"')
+			recipe[recipelen - 1] = '\0'; /* remove trailing quote */
+	}
+	else
+	{
+		/* there was no -c so extract the argument as a filename */
+
+		recipe = strstr(commandline, "talon");
+		if (recipe)
+		{
+			/* find the first space */
+			while (!isspace(*recipe) && *recipe != '\0')
+				recipe++;
+			/* skip past the spaces */
+			while (isspace(*recipe))
+				recipe++;
+
+			recipe = read_recipe_from_file(recipe);
+
+			if (!recipe)
+			{
+			    error("talon: error: bad script file in shell call '%s'\n", commandline);
+				return 1;
+			}
+		}
+		else
+		{
+			error("talon: error: no 'talon' in shell call '%s'\n", commandline);
+			return 1;
+		}
+	}
+#else
+	/*
+	 * The command line should be either,
+	 * talon -c "some shell commands"
+	 * or
+	 * talon shell_script_file
+	 *
+	 * talon could be an absolute path and may have a .exe extension.
+	 */
+	switch (argc)
+	{
+		case 2:
+			recipe = read_recipe_from_file(argv[1]);
+			break;
+		case 3:
+			if (strcmp("-c", argv[1]) != 0)
+			{
+				error("talon: error: %s\n", "usage is 'talon -c command' or 'talon script_filename'");
+				return 1;
+			}
+			recipe = argv[2];
+			break;
+		default:
+			error("talon: error: %s\n", "usage is 'talon -c command' or 'talon script_filename'");
+			return 1;
+	}
+#endif
+
+	/* did we get a recipe at all? */
+	if (!recipe)
+	{
+		error("talon: error: %s", "no recipe supplied to the shell.\n");
+		return 1;
+	}
+
+	/* remove any leading white space on the recipe */
+	while (isspace(*recipe))
+		recipe++;
+
+	/* turn debugging on? */
+	char *debugstr=talon_getenv("TALON_DEBUG");
+
+	if (debugstr)
+	{
+		loglevel=LOGDEBUG;
+		free(debugstr); debugstr=NULL;
+	}
+
+	DEBUG(("talon: recipe: %s\n", recipe));
+
+	
+	char varname[VARNAMEMAX];
+	char varval[VARVALMAX];
+	int dotagging = 0; 
+	int force_descramble_off = 0;
+
+	char  *rp = recipe;
+	if (*rp == TALONDELIMITER) {
+		dotagging = 1; 
+
+		/* there are some talon-specific settings 
+		 * in the command which must be stripped */
+		rp++;
+		char *out = varname;
+		char *stopout = varname + VARNAMEMAX - 1;
+		DEBUG(("talon: parameters found\n"));
+		while (*rp != '\0')
+		{
+			
+			switch (*rp) {
+				case  '=':
+					*out = '\0';
+					DEBUG(("talon: varname: %s\n",varname));
+					out = varval;
+					stopout = varval + VARVALMAX - 1;
+					break;
+				case ';':
+					*out = '\0';
+					DEBUG(("talon: varval: %s\n",varval));
+					talon_setenv(varname, varval);
+					out = varname;
+					stopout = varname + VARNAMEMAX - 1;
+					break;
+				default:	
+					*out = *rp;
+					if (out < stopout)
+						out++;
+					break;
+			}
+
+			if (*rp == TALONDELIMITER)
+			{
+				rp++;
+				break;
+			}
+			
+			rp++;
+		}
+	} else {
+		/* This is probably a $(shell) statement 
+ 		 * in make so no descrambling needed and 
+ 		 * tags are definitely not wanted as they 
+ 		 * would corrupt the expected output*/
+		force_descramble_off = 1; 
+	}
+
+
+	/* Now take settings from the environment (having potentially modified it) */	
+	if (talon_getenv("TALON_DEBUG"))
+		loglevel=LOGDEBUG;
+	
+
+	int enverrors = 0;
+
+	char *shell = talon_getenv("TALON_SHELL");
+	if (!shell)
+	{
+		error("error: %s", "TALON_SHELL not set in environment\n");
+		enverrors++;	
+	}
+
+	int timeout = -1;
+	char *timeout_str = talon_getenv("TALON_TIMEOUT");
+	if (timeout_str)
+	{
+		timeout = atoi(timeout_str);
+		free(timeout_str); timeout_str = NULL;
+	}
+
+	char *buildid = talon_getenv("TALON_BUILDID");
+	if (!buildid)
+	{
+		error("error: %s", "TALON_BUILDID not set in environment\n");
+		enverrors++;	
+	}
+
+	char *attributes = talon_getenv("TALON_RECIPEATTRIBUTES");
+	if (!attributes)
+	{
+		error("error: %s", "TALON_RECIPEATTRIBUTES not set in environment\n");
+		enverrors++;
+	}
+
+
+	int max_retries = 0;
+	char *retries_str = talon_getenv("TALON_RETRIES");
+	if (retries_str)
+	{
+		max_retries = atoi(retries_str);
+		free(retries_str); retries_str = NULL;
+	}	
+
+
+	int descramble = 0;
+	if (! force_descramble_off )
+	{
+		char *descramblestr = talon_getenv("TALON_DESCRAMBLE");
+		if (descramblestr)
+		{
+			if (*descramblestr == '0')
+				descramble = 0;
+			else
+				descramble = 1;
+		
+			free(descramblestr); descramblestr = NULL;
+		}
+	}
+
+
+
+	/* Talon can look in a flags variable to alter it's behaviour */
+	int force_success = 0;
+	char *flags_str = talon_getenv("TALON_FLAGS");
+	if (flags_str)
+	{
+		int c;
+		for (c=0; flags_str[c] !=0; c++)
+			flags_str[c] = tolower(flags_str[c]);
+
+		if (strstr(flags_str, "forcesuccess"))
+			force_success = 1;
+
+		/* don't put <recipe> or <CDATA<[[ tags around the output. e.g. if it's XML already*/
+		if (strstr(flags_str, "rawoutput"))
+		{
+			dotagging = 0;
+		}
+
+		free(flags_str); flags_str = NULL;
+	}	
+
+	/* Talon subprocesses need to have the "correct" shell variable set. */
+	talon_setenv("SHELL", shell); 
+
+	/* we have allowed some errors to build up so that the user
+	 * can see all of them before we stop and force the user 
+	 * to fix them
+	 */
+	if (enverrors)
+	{
+		return 1;
+	}
+
+	
+	/* Run the recipe repeatedly until the retry count expires or
+	 * it succeeds.
+	 */
+	int attempt = 0, retries = max_retries;
+	proc *p = NULL;
+
+	char *args[5];
+
+	char *qrp=rp;
+
+#ifdef HAS_GETCOMMANDLINE
+	/* re-quote the argument to -c since this helps windows deal with it */
+	int qrpsize = strlen(rp) + 3;
+	qrp = malloc(qrpsize);
+	qrp[0] = '"';
+	strcpy(&qrp[1], rp);
+	qrp[qrpsize-2] = '"';
+	qrp[qrpsize-1] = '\0';
+#endif
+
+	int index = 0;
+	args[index++] = shell;
+
+	if (dotagging)  /* don't do bash -x for non-tagged commands e.g. $(shell output) */
+		args[index++] = "-x";
+
+	args[index++] = "-c";
+	args[index++] = qrp;
+	args[index++] = NULL;
+
+	/* get the semaphore ready */
+	talon_sem.name = buildid;
+	talon_sem.timeout = timeout;
+	do
+	{
+		char talon_attempt[TALON_ATTEMPT_STRMAX];
+		double start_time = getseconds();
+		
+		attempt++;
+		
+		snprintf(talon_attempt, TALON_ATTEMPT_STRMAX-1, "%d", attempt);
+		talon_attempt[TALON_ATTEMPT_STRMAX - 1] = '\0';
+
+		talon_setenv("TALON_ATTEMPT", talon_attempt);
+		
+		p = process_run(shell, args, timeout);
+
+		double end_time = getseconds();
+		
+		if (p) 
+		{
+			char status[STATUS_STRMAX];
+			char timestat[STATUS_STRMAX];
+
+			talon_returncode = p->returncode;
+
+			if (dotagging) 
+			{
+				char *forcesuccessstr = force_success == 0 ? "" : " forcesuccess='FORCESUCCESS'";
+
+				if (p->returncode != 0)
+				{
+					char *exitstr = retries > 0 ? "retry" : "failed";
+					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='%s' code='%d' attempt='%d'%s />", exitstr, p->returncode, attempt, forcesuccessstr );
+				} else {
+					snprintf(status, STATUS_STRMAX - 1, "\n<status exit='ok' attempt='%d'%s />", attempt, forcesuccessstr );
+				}
+				status[STATUS_STRMAX-1] = '\0';
+	
+				snprintf(timestat, STATUS_STRMAX - 1, "<time start='%.5f' elapsed='%.3f' />",start_time, end_time-start_time );
+				timestat[STATUS_STRMAX-1] = '\0';
+
+				prependattributes(p->output, attributes);
+			
+			if (dotagging) {
+			}
+				buffer_append(p->output, "\n]]>", 4);
+				buffer_append(p->output, timestat, strlen(timestat));
+				buffer_append(p->output, status, strlen(status));
+				buffer_append(p->output, "\n</recipe>\n", 11);
+			}
+		
+			unsigned int iterator = 0;
+			byteblock *bb;
+		
+			if (descramble)	
+				sema_wait(&talon_sem);
+			while ((bb = buffer_getbytes(p->output, &iterator)))
+			{
+				write(STDOUT_FILENO, &bb->byte0, bb->fill);
+			}
+			if (descramble)	
+				sema_release(&talon_sem);
+		
+		
+			if (p->returncode == 0 || force_success)
+			{
+				process_free(&p);
+				break;
+			}
+
+			process_free(&p);
+		} else {
+			error("error: failed to run shell: %s: check the SHELL environment variable.\n", args[0]);
+			return 1;
+		}
+
+		retries--;
+	}
+	while (retries >= 0);
+
+	if (buildid) free(buildid); buildid = NULL;
+	if (attributes) free(attributes); attributes = NULL;
+	if (shell) free(shell); shell = NULL;
+
+	if (force_success)
+		return 0;
+	else 
+		return talon_returncode;
+}
--- a/sbsv2/raptor/util/talon/talon_process.h	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/talon_process.h	Mon Nov 16 09:46:46 2009 +0000
@@ -1,54 +1,54 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-/*
- * Process.h
- */
-
-
-#ifndef _TALON_PROCESS_H_
-#define _TALON_PROCESS_H_
-
-#include <sys/types.h>
-#include "buffer.h"
-
-typedef pid_t proc_handle;
-
-#define PROC_NORMALDEATH 0
-#define PROC_TIMEOUTDEATH 1
-#define PROC_SOMEODDDEATH 2
-#define PROC_PIPECREATE 3
-#define PROC_START 4
-
-
-typedef struct 
-{
-	proc_handle pid;
-	unsigned int starttime;
-	unsigned int endtime;
-	int returncode;
-	unsigned int causeofdeath;
-	buffer *output;
-} proc;
-
-proc *process_run(char executable[], char *args[], int timeout);
-void process_free(proc **pp);
-	
-#endif
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+/*
+ * Process.h
+ */
+
+
+#ifndef _TALON_PROCESS_H_
+#define _TALON_PROCESS_H_
+
+#include <sys/types.h>
+#include "buffer.h"
+
+typedef pid_t proc_handle;
+
+#define PROC_NORMALDEATH 0
+#define PROC_TIMEOUTDEATH 1
+#define PROC_SOMEODDDEATH 2
+#define PROC_PIPECREATE 3
+#define PROC_START 4
+
+
+typedef struct 
+{
+	proc_handle pid;
+	unsigned int starttime;
+	unsigned int endtime;
+	int returncode;
+	unsigned int causeofdeath;
+	buffer *output;
+} proc;
+
+proc *process_run(char executable[], char *args[], int timeout);
+void process_free(proc **pp);
+	
+#endif
--- a/sbsv2/raptor/util/talon/talonctl.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/talonctl.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,61 +1,61 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include "sema.h"
-#include "log.h"
-
-#include <stdlib.h>
-
-/* The output semaphore. */
-sbs_semaphore talon_sem;
-
-int main(int argc, char *argv[])
-{
-	char *buildid_str = getenv("TALON_BUILDID");
-
-	if (!buildid_str)
-	{
-		error("error: TALON_BUILDID not set in environment\n");
-		return 1;
-	}
-
-	if (argc != 2)
-	{
-		error("error: one argument required: start|stop\n");
-		return 1;
-	}
-
-	talon_sem.name = buildid_str;
-	talon_sem.timeout=0;
-
-	if (strcasecmp("start", argv[1]) == 0)
-	{
-		sema_create(&talon_sem);
-	}
-	else if (strcasecmp("stop", argv[1]) == 0)
-	{
-		sema_destroy(&talon_sem);
-	} else {
-		error("error: argument must be: start|stop\n");
-		return 1;
-	}
-
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include "sema.h"
+#include "log.h"
+
+#include <stdlib.h>
+
+/* The output semaphore. */
+sbs_semaphore talon_sem;
+
+int main(int argc, char *argv[])
+{
+	char *buildid_str = getenv("TALON_BUILDID");
+
+	if (!buildid_str)
+	{
+		error("error: TALON_BUILDID not set in environment\n");
+		return 1;
+	}
+
+	if (argc != 2)
+	{
+		error("error: one argument required: start|stop\n");
+		return 1;
+	}
+
+	talon_sem.name = buildid_str;
+	talon_sem.timeout=0;
+
+	if (strcasecmp("start", argv[1]) == 0)
+	{
+		sema_create(&talon_sem);
+	}
+	else if (strcasecmp("stop", argv[1]) == 0)
+	{
+		sema_destroy(&talon_sem);
+	} else {
+		error("error: argument must be: start|stop\n");
+		return 1;
+	}
+
+	return 0;
+}
--- a/sbsv2/raptor/util/talon/testbuffer.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/testbuffer.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,77 +1,77 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <stdio.h>
-#include <string.h>
-#include "buffer.h"
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define OSIZE 40
-#define ISIZEMAX 2049
-
-int main(int argc, char *argv[])
-{
-	int nbytes = 0;
-	byteblock *bb=NULL;
-	buffer *b;
-	char *pointertospace = NULL;
-	int iterator = 0;
-	int ofile;
-	unsigned int space=51;
-
-	b = buffer_new();
-
-	do {
-// space %= 5;
-//		space++;
-		pointertospace = buffer_makespace(b, space);
-		if (!pointertospace)
-			exit(1);
-
-		nbytes = read(STDIN_FILENO, pointertospace, space);
-		if (nbytes == -1)
-			break;
-
-		buffer_usespace(b, nbytes);
-	}
-	while (nbytes == space);
-
-	iterator = 0;
-	ofile = open("/tmp/outfile", O_CREAT | O_WRONLY, 00777);
-
-	if (ofile <= 0)
-	{
-		perror("error");
-		return 1;
-	}
-	
-	while ((bb = buffer_getbytes(b, &iterator)))
-	{
-		write(ofile, &bb->byte0, bb->fill);
-	}
-	close(ofile);
-
-	buffer_free(&b);
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include <stdio.h>
+#include <string.h>
+#include "buffer.h"
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define OSIZE 40
+#define ISIZEMAX 2049
+
+int main(int argc, char *argv[])
+{
+	int nbytes = 0;
+	byteblock *bb=NULL;
+	buffer *b;
+	char *pointertospace = NULL;
+	int iterator = 0;
+	int ofile;
+	unsigned int space=51;
+
+	b = buffer_new();
+
+	do {
+// space %= 5;
+//		space++;
+		pointertospace = buffer_makespace(b, space);
+		if (!pointertospace)
+			exit(1);
+
+		nbytes = read(STDIN_FILENO, pointertospace, space);
+		if (nbytes == -1)
+			break;
+
+		buffer_usespace(b, nbytes);
+	}
+	while (nbytes == space);
+
+	iterator = 0;
+	ofile = open("/tmp/outfile", O_CREAT | O_WRONLY, 00777);
+
+	if (ofile <= 0)
+	{
+		perror("error");
+		return 1;
+	}
+	
+	while ((bb = buffer_getbytes(b, &iterator)))
+	{
+		write(ofile, &bb->byte0, bb->fill);
+	}
+	close(ofile);
+
+	buffer_free(&b);
+	return 0;
+}
--- a/sbsv2/raptor/util/talon/testprocess.c	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/testprocess.c	Mon Nov 16 09:46:46 2009 +0000
@@ -1,76 +1,76 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-
-#include "process.h"
-
-int main(int argc, char *argv[])
-{
-	char *shell = getenv("TALON_SHELL");
-	char **args = malloc((argc+2)*sizeof(char *));
-	int i;
-	proc *p;
-
-	for (i=1; i < argc; i++)
-	{
-		args[i] = argv[i];
-		printf("arg: %s\n", args[i]);
-	}
-	args[argc] = NULL;
-
-	if (! shell)
-	{
-		fprintf(stderr, "error: %s", "TALONSHELL not set in environment\n");
-		return 1;
-	}
-
-	args[0]  = shell;
-	p = process_run(shell, args, 4000);
-
-	if (p) 
-	{
-
-		buffer_prepend(p->output, "<recipe>\n<!CDATA<[[\n", 20);
-		buffer_append(p->output, "\n]]></recipe>\n", 13);
-
-		unsigned int iterator = 0;
-		byteblock *bb;
-		while ((bb = buffer_getbytes(p->output, &iterator)))
-		{
-			write(STDOUT_FILENO, &bb->byte0, bb->fill);
-		}
-
-		process_free(&p);
-	} else {
-		fprintf(stderr, "error: %s", "failed to run process\n");
-		return 1;
-	}
-
-	free(args);
-	return 0;
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+
+#include "process.h"
+
+int main(int argc, char *argv[])
+{
+	char *shell = getenv("TALON_SHELL");
+	char **args = malloc((argc+2)*sizeof(char *));
+	int i;
+	proc *p;
+
+	for (i=1; i < argc; i++)
+	{
+		args[i] = argv[i];
+		printf("arg: %s\n", args[i]);
+	}
+	args[argc] = NULL;
+
+	if (! shell)
+	{
+		fprintf(stderr, "error: %s", "TALONSHELL not set in environment\n");
+		return 1;
+	}
+
+	args[0]  = shell;
+	p = process_run(shell, args, 4000);
+
+	if (p) 
+	{
+
+		buffer_prepend(p->output, "<recipe>\n<!CDATA<[[\n", 20);
+		buffer_append(p->output, "\n]]></recipe>\n", 13);
+
+		unsigned int iterator = 0;
+		byteblock *bb;
+		while ((bb = buffer_getbytes(p->output, &iterator)))
+		{
+			write(STDOUT_FILENO, &bb->byte0, bb->fill);
+		}
+
+		process_free(&p);
+	} else {
+		fprintf(stderr, "error: %s", "failed to run process\n");
+		return 1;
+	}
+
+	free(args);
+	return 0;
+}
--- a/sbsv2/raptor/util/talon/tests/old_taggedrules.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/old_taggedrules.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,90 +1,90 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# taggedrules.mk
-# Tools for use in FLMs - enabling the output from
-# rules to be logged with start and end tags.
-# This is a place where one might to permit various information to
-# be logged, such as timestamps and host names or process ids
-#
-
-ifndef _TAGGEDRULES_FLM_
-_TAGGEDRULES_FLM_:=1
-
-# only run recipes once by default
-RECIPETRIES?=1
-
-##
-##  Example usage:
-##
-#   define func
-#	auto_ok:
-#		$(call startrule,auto) \
-#		true && \
-#		true && \
-#		true    \
-#		$(call endrule,auto)
-#	
-#	auto_fail:
-#		$(call startrule,auto) \
-#		find /usr >/dev/null 2>&1 && \
-#		false && \
-#		true    \
-#		$(call endrule,auto)
-#   endef
-#   $(eval $(func))
-
-# $(1) is the name of the FLM function
-# $(2) indicates whether the failure of this rule should be ignored (but still logged)
-#      FORCESUCCESS indicates "on"
-define startrule
-  @set -o pipefail; RV=0; ATTEMPT=1; \
-  while (( $$$$ATTEMPT <= $(RECIPETRIES) )); do \
-    echo -e "<recipe name='$(1)' \
-    target='$$@' host='$$$$HOSTNAME' \
-    layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' \
-    bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' \
-    config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' \
-    phase='$(MAKEFILE_GROUP)' \
-    source='$(3)'>\n<![CDATA["; \
-    FLM_FORCESUCCESS=$(2); \
-    export TIMEFORMAT="]]><time start='$$$$($(DATE) +%s.%N)' elapsed='%6R' />"; \
-    { time { set -x;
-endef
-
-define endrule
-    ; }  } 2>&1  ; RV=$$$$?; set +x; \
-    if (( $$$$RV==0  )); then \
-       echo "<status exit='ok' attempt='$$$$ATTEMPT' />";  \
-       echo "</recipe>"; \
-       break; \
-    else  \
-       if (( $$$$ATTEMPT < $(RECIPETRIES) )); then \
-         echo "<status exit='retry' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
-         sleep 1; \
-       else \
-         if [ "$$$$FLM_FORCESUCCESS" == "FORCESUCCESS" ]; then \
-             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' forcesuccess='FORCESUCCESS' />"; \
-             RV=0; \
-         else \
-             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
-         fi; \
-       fi; \
-    fi; \
-    echo "</recipe>"; \
-    (( ATTEMPT=$$$$ATTEMPT + 1 )); \
-  done $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$); exit $$$$RV 
-endef
-
-endif
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# taggedrules.mk
+# Tools for use in FLMs - enabling the output from
+# rules to be logged with start and end tags.
+# This is a place where one might to permit various information to
+# be logged, such as timestamps and host names or process ids
+#
+
+ifndef _TAGGEDRULES_FLM_
+_TAGGEDRULES_FLM_:=1
+
+# only run recipes once by default
+RECIPETRIES?=1
+
+##
+##  Example usage:
+##
+#   define func
+#	auto_ok:
+#		$(call startrule,auto) \
+#		true && \
+#		true && \
+#		true    \
+#		$(call endrule,auto)
+#	
+#	auto_fail:
+#		$(call startrule,auto) \
+#		find /usr >/dev/null 2>&1 && \
+#		false && \
+#		true    \
+#		$(call endrule,auto)
+#   endef
+#   $(eval $(func))
+
+# $(1) is the name of the FLM function
+# $(2) indicates whether the failure of this rule should be ignored (but still logged)
+#      FORCESUCCESS indicates "on"
+define startrule
+  @set -o pipefail; RV=0; ATTEMPT=1; \
+  while (( $$$$ATTEMPT <= $(RECIPETRIES) )); do \
+    echo -e "<recipe name='$(1)' \
+    target='$$@' host='$$$$HOSTNAME' \
+    layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' \
+    bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' \
+    config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' \
+    phase='$(MAKEFILE_GROUP)' \
+    source='$(3)'>\n<![CDATA["; \
+    FLM_FORCESUCCESS=$(2); \
+    export TIMEFORMAT="]]><time start='$$$$($(DATE) +%s.%N)' elapsed='%6R' />"; \
+    { time { set -x;
+endef
+
+define endrule
+    ; }  } 2>&1  ; RV=$$$$?; set +x; \
+    if (( $$$$RV==0  )); then \
+       echo "<status exit='ok' attempt='$$$$ATTEMPT' />";  \
+       echo "</recipe>"; \
+       break; \
+    else  \
+       if (( $$$$ATTEMPT < $(RECIPETRIES) )); then \
+         echo "<status exit='retry' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         sleep 1; \
+       else \
+         if [ "$$$$FLM_FORCESUCCESS" == "FORCESUCCESS" ]; then \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' forcesuccess='FORCESUCCESS' />"; \
+             RV=0; \
+         else \
+             echo "<status exit='failed' code='$$$$RV' attempt='$$$$ATTEMPT' />"; \
+         fi; \
+       fi; \
+    fi; \
+    echo "</recipe>"; \
+    (( ATTEMPT=$$$$ATTEMPT + 1 )); \
+  done $(if $(DESCRAMBLE),2>&1 | $(DESCRAMBLE) -k $$$$$$$$); exit $$$$RV 
+endef
+
+endif
--- a/sbsv2/raptor/util/talon/tests/t.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/t.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,41 +1,41 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-
-HOSTNAME:=fred
-COMPONENT_LAYER:=base
-COMPONENT:=compsupp
-COMPONENT_META:=compsupp.inf
-PROJECT_META:=simpledll
-SBS_CONFIGURATION:=armv5.fred
-PLATFORM:=armv5
-MAKEFILE_GROUP:=phasenone
-FLM_FORCESUCCESS:=FORCESUCCESS
-
-#HOSTNAME:=fred; COMPONENT_LAYER:=base; COMPONENT:=compsupp; COMPONENT_META:=compsupp.inf; PROJECT_META:=simpledll; SBS_CONFIGURATION:=armv5.fred; PLATFORM:=armv5; MAKEFILE_GROUP:=phasenone; FLM_FORCESUCCESS:=FORCESUCCESS
-
-
-TALON_RECIPEATTRIBUTES:="target='$$@' host='$$$$HOSTNAME' layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' phase='$(MAKEFILE_GROUP)' FLM_FORCESUCCESS=$(FLM_FORCESUCCESS)"
-
-.PHONY: target
-	
-define flm
-target:
-	HOSTNAME:=fred; COMPONENT_LAYER:=base; COMPONENT:=compsupp; COMPONENT_META:=compsupp.inf; PROJECT_META:=simpledll; SBS_CONFIGURATION:=armv5.fred; PLATFORM:=armv5; MAKEFILE_GROUP:=phasenone; FLM_FORCESUCCESS:=FORCESUCCESS ; echo "<recipe $(TALON_RECIPEATTRIBUTES) >"; echo;
-endef
-
-
-$(eval $(flm))
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+HOSTNAME:=fred
+COMPONENT_LAYER:=base
+COMPONENT:=compsupp
+COMPONENT_META:=compsupp.inf
+PROJECT_META:=simpledll
+SBS_CONFIGURATION:=armv5.fred
+PLATFORM:=armv5
+MAKEFILE_GROUP:=phasenone
+FLM_FORCESUCCESS:=FORCESUCCESS
+
+#HOSTNAME:=fred; COMPONENT_LAYER:=base; COMPONENT:=compsupp; COMPONENT_META:=compsupp.inf; PROJECT_META:=simpledll; SBS_CONFIGURATION:=armv5.fred; PLATFORM:=armv5; MAKEFILE_GROUP:=phasenone; FLM_FORCESUCCESS:=FORCESUCCESS
+
+
+TALON_RECIPEATTRIBUTES:="target='$$@' host='$$$$HOSTNAME' layer='$(COMPONENT_LAYER)' component='$(COMPONENT_NAME)' bldinf='$(COMPONENT_META)' mmp='$(PROJECT_META)' config='$(SBS_CONFIGURATION)' platform='$(PLATFORM)' phase='$(MAKEFILE_GROUP)' FLM_FORCESUCCESS=$(FLM_FORCESUCCESS)"
+
+.PHONY: target
+	
+define flm
+target:
+	HOSTNAME:=fred; COMPONENT_LAYER:=base; COMPONENT:=compsupp; COMPONENT_META:=compsupp.inf; PROJECT_META:=simpledll; SBS_CONFIGURATION:=armv5.fred; PLATFORM:=armv5; MAKEFILE_GROUP:=phasenone; FLM_FORCESUCCESS:=FORCESUCCESS ; echo "<recipe $(TALON_RECIPEATTRIBUTES) >"; echo;
+endef
+
+
+$(eval $(flm))
--- a/sbsv2/raptor/util/talon/tests/t2.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/t2.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,32 +1,32 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-all: a b
-
-define doa
-a:
-	x
-endef
-
-define dob
-b:
-	y
-endef
-
-SHELL:=bash -c echo ho
-$(eval $(doa))
-SHELL:=bash -c echo hi
-$(eval $(dob))
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+all: a b
+
+define doa
+a:
+	x
+endef
+
+define dob
+b:
+	y
+endef
+
+SHELL:=bash -c echo ho
+$(eval $(doa))
+SHELL:=bash -c echo hi
+$(eval $(dob))
--- a/sbsv2/raptor/util/talon/tests/t3.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/t3.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,37 +1,37 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-SHELL:=$(TALON)
-TALON_RECIPEATTRIBUTES:=name='$$RECIPENAME' host='$$HOSTNAME'
-export TALON_RECIPEATTRIBUTES
-
-
-$(info SHELL="$(SHELL)")
-
-# using an override doesn't i.e. "make SHELL:=xxxx" fails on windows at least.
-# so one can try "make TALON:=xxxx" and in the makefile one must set SHELL=$(TALON)
-
-all: hello world
-
-hello:
-	@echo "some output" 
-	@|RECIPENAME=hello;|echo "The recipe name is $$RECIPENAME"
-
-
-world:
-	@echo "more output" 
-	@|RECIPENAME=world;|echo "The recipe name is $$RECIPENAME"
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+SHELL:=$(TALON)
+TALON_RECIPEATTRIBUTES:=name='$$RECIPENAME' host='$$HOSTNAME'
+export TALON_RECIPEATTRIBUTES
+
+
+$(info SHELL="$(SHELL)")
+
+# using an override doesn't i.e. "make SHELL:=xxxx" fails on windows at least.
+# so one can try "make TALON:=xxxx" and in the makefile one must set SHELL=$(TALON)
+
+all: hello world
+
+hello:
+	@echo "some output" 
+	@|RECIPENAME=hello;|echo "The recipe name is $$RECIPENAME"
+
+
+world:
+	@echo "more output" 
+	@|RECIPENAME=world;|echo "The recipe name is $$RECIPENAME"
+
--- a/sbsv2/raptor/util/talon/tests/t4.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/t4.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,28 +1,28 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-SHELL:=$(TALON)
-TALON_TIMEOUT:=4000
-TALON_RETRIES:=4
-TALON_RECIPEATTRIBUTES:=platform='$$PLATFORM' mmp='$$MMP' bldinf='$$BLDINF'
-export 
-
-$(info testing timeouts)
-$(info )
-
-all:
-	@|PLATFORM=armv5;MMP=barney.mmp;BLDINF=somebld.inf;|echo "Started a slow command under talon (attempt $$TALON_ATTEMPT):";echo "SHELL=$$SHELL";if (( $$TALON_ATTEMPT <4 )); then echo sleeping 6; sleep 6; echo "hi"; else echo "Not sleeping this time"; fi; echo "this should not appear in the recipe tags unless you try 4 times."
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+SHELL:=$(TALON)
+TALON_TIMEOUT:=4000
+TALON_RETRIES:=4
+TALON_RECIPEATTRIBUTES:=platform='$$PLATFORM' mmp='$$MMP' bldinf='$$BLDINF'
+export 
+
+$(info testing timeouts)
+$(info )
+
+all:
+	@|PLATFORM=armv5;MMP=barney.mmp;BLDINF=somebld.inf;|echo "Started a slow command under talon (attempt $$TALON_ATTEMPT):";echo "SHELL=$$SHELL";if (( $$TALON_ATTEMPT <4 )); then echo sleeping 6; sleep 6; echo "hi"; else echo "Not sleeping this time"; fi; echo "this should not appear in the recipe tags unless you try 4 times."
+
--- a/sbsv2/raptor/util/talon/tests/t5.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/t5.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,18 +1,18 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-all:
-	||"echo this command should cause a bash error which should be visible"
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+all:
+	||"echo this command should cause a bash error which should be visible"
--- a/sbsv2/raptor/util/talon/tests/taggedrules.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/taggedrules.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,49 +1,49 @@
-#
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Tools for use in FLMs - enabling the output from
-# rules to be logged with start and end tags.
-# This is a place where one might to permit various information to
-# be logged, such as timestamps and host names or process ids
-#
-
-ifndef _TAGGEDRULES_FLM_
-_TAGGEDRULES_FLM_:=1
-
-
-TALON_RECIPEATTRIBUTES:=\
- name='$$RECIPE'\
- target='$$TARGET'\
- host='$$HOSTNAME'\
- layer='$$COMPONENT_LAYER'\
- component='$$COMPONENT_NAME'\
- bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
- config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
- phase='$$MAKEFILE_GROUP'
-
-export TALON_RECIPEATTRIBUTES
-
-# only run recipes once by default
-RECIPETRIES?=1
-TALON_RETRIES:=$(RECIPETRIES)
-export TALON_RECIPEATTRIBUTES
-
-define startrule
-	@|RECIPE=$1;TARGET=$@;COMPONENT_LAYER=$(COMPONENT_LAYER);COMPONENT_NAME=$(COMPONENT_NAME);COMPONENT_META=$(COMPONENT_META);PROJECT_META=$(PROJECT_META);SBS_CONFIGURATION=$(SBS_CONFIGURATION);PLATFORM=$(PLATFORM);MAKEFILE_GROUP=$(MAKEFILE_GROUP);|
-endef
-
-define endrule
-endef
-
-endif
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Tools for use in FLMs - enabling the output from
+# rules to be logged with start and end tags.
+# This is a place where one might to permit various information to
+# be logged, such as timestamps and host names or process ids
+#
+
+ifndef _TAGGEDRULES_FLM_
+_TAGGEDRULES_FLM_:=1
+
+
+TALON_RECIPEATTRIBUTES:=\
+ name='$$RECIPE'\
+ target='$$TARGET'\
+ host='$$HOSTNAME'\
+ layer='$$COMPONENT_LAYER'\
+ component='$$COMPONENT_NAME'\
+ bldinf='$$COMPONENT_META' mmp='$$PROJECT_META'\
+ config='$$SBS_CONFIGURATION' platform='$$PLATFORM'\
+ phase='$$MAKEFILE_GROUP'
+
+export TALON_RECIPEATTRIBUTES
+
+# only run recipes once by default
+RECIPETRIES?=1
+TALON_RETRIES:=$(RECIPETRIES)
+export TALON_RECIPEATTRIBUTES
+
+define startrule
+	@|RECIPE=$1;TARGET=$@;COMPONENT_LAYER=$(COMPONENT_LAYER);COMPONENT_NAME=$(COMPONENT_NAME);COMPONENT_META=$(COMPONENT_META);PROJECT_META=$(PROJECT_META);SBS_CONFIGURATION=$(SBS_CONFIGURATION);PLATFORM=$(PLATFORM);MAKEFILE_GROUP=$(MAKEFILE_GROUP);|
+endef
+
+define endrule
+endef
+
+endif
--- a/sbsv2/raptor/util/talon/tests/xcopystdin.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/talon/tests/xcopystdin.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,26 +1,26 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-SHELL:=$(SBS_HOME)/win32/bin/talon.exe
-TALON_SHELL:=$(SBS_HOME)/win32/cygwin/bin/bash.exe
-TALON_BUILDID:=1
-TALON_RECIPEATTRIBUTES:=123
-
-export
-
-all::
-	@|name=fred;|mkdir out;touch source.txt;xcopy /y source.txt out
-
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+SHELL:=$(SBS_HOME)/win32/bin/talon.exe
+TALON_SHELL:=$(SBS_HOME)/win32/cygwin/bin/bash.exe
+TALON_BUILDID:=1
+TALON_RECIPEATTRIBUTES:=123
+
+export
+
+all::
+	@|name=fred;|mkdir out;touch source.txt;xcopy /y source.txt out
+
--- a/sbsv2/raptor/util/utilbuild.mk	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/utilbuild.mk	Mon Nov 16 09:46:46 2009 +0000
@@ -1,50 +1,50 @@
-#
-# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Utility makefile 
-#
-
-CHAR_BLANK:=
-CHAR_SPACE:=$(CHAR_BLANK) $(CHAR_BLANK)
-
-HOSTPLATFORM:=$(shell $(SBS_HOME)/bin/gethost.sh)
-HOSTPLATFORM_DIR:=$(shell $(SBS_HOME)/bin/gethost.sh -d)
-
-ifeq ($(filter $(HOSTPLATFORM),win),win)
-PROGRAMEXT:=.exe
-HOSTMACROS:=-DHOST_WIN -DHOST_DIR=$(HOSTPLATFORM_DIR)
-else
-PROGRAMEXT:=
-HOSTMACROS:=-DHOST_LINUX -DHOST_DIR=$(HOSTPLATFORM_DIR)
-endif
-
-GCCTUNE:=
-ifeq ($(filter $(HOSTPLATFORM),x86_64),x86_64)
-else
-GCCTUNE:=-mtune=i686
-endif
-
-BUILDDIR:=$(subst \,/,$(SBS_HOME))/util/build
-INSTALLROOT:=$(subst \,/,$(SBS_HOME))/$(HOSTPLATFORM_DIR)
-BINDIR:=$(INSTALLROOT)/bin
-OUTPUTPATH:=$(BUILDDIR)/$(HOSTPLATFORM_DIR)
-
-define cleanlog
-ifneq ($(CLEANMODE),)
-$$(info <clean>)
-$$(foreach O,$$(CLEANFILES),$$(info <file>$$(O)</file>)) 
-$$(info </clean>)
-endif
-endef
-
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Utility makefile 
+#
+
+CHAR_BLANK:=
+CHAR_SPACE:=$(CHAR_BLANK) $(CHAR_BLANK)
+
+HOSTPLATFORM:=$(shell $(SBS_HOME)/bin/gethost.sh)
+HOSTPLATFORM_DIR:=$(shell $(SBS_HOME)/bin/gethost.sh -d)
+
+ifeq ($(filter $(HOSTPLATFORM),win),win)
+PROGRAMEXT:=.exe
+HOSTMACROS:=-DHOST_WIN -DHOST_DIR=$(HOSTPLATFORM_DIR)
+else
+PROGRAMEXT:=
+HOSTMACROS:=-DHOST_LINUX -DHOST_DIR=$(HOSTPLATFORM_DIR)
+endif
+
+GCCTUNE:=
+ifeq ($(filter $(HOSTPLATFORM),x86_64),x86_64)
+else
+GCCTUNE:=-mtune=i686
+endif
+
+BUILDDIR:=$(subst \,/,$(SBS_HOME))/util/build
+INSTALLROOT:=$(subst \,/,$(SBS_HOME))/$(HOSTPLATFORM_DIR)
+BINDIR:=$(INSTALLROOT)/bin
+OUTPUTPATH:=$(BUILDDIR)/$(HOSTPLATFORM_DIR)
+
+define cleanlog
+ifneq ($(CLEANMODE),)
+$$(info <clean>)
+$$(foreach O,$$(CLEANFILES),$$(info <file>$$(O)</file>)) 
+$$(info </clean>)
+endif
+endef
+